From 0baf32d970157f400e83147ca1cb38c022268692 Mon Sep 17 00:00:00 2001 From: Bartosz Hanc Date: Thu, 29 Oct 2026 16:42:22 +0100 Subject: [PATCH 1/4] chore: remove legacy API support and WebRTC --- .eslintrc.js | 15 - .gitattributes | 3 +- .github/workflows/ci.yml | 8 +- .github/workflows/npm-publish-satellites.yml | 140 - .github/workflows/npm-publish.yml | 2 +- .gitignore | 5 - LEGACY_REMOVAL.md | 218 - LICENSE | 78 - RELEASE.md | 46 +- SECURITY.md | 7 +- apps/legacy/bare-rn/.bundle/config | 2 - apps/legacy/bare-rn/.eslintrc.js | 7 - apps/legacy/bare-rn/.gitignore | 80 - apps/legacy/bare-rn/.prettierrc.js | 5 - apps/legacy/bare-rn/.watchmanconfig | 1 - apps/legacy/bare-rn/App.tsx | 405 - apps/legacy/bare-rn/Gemfile | 16 - apps/legacy/bare-rn/Gemfile.lock | 119 - apps/legacy/bare-rn/__tests__/App.test.tsx | 13 - apps/legacy/bare-rn/android/app/build.gradle | 119 - .../legacy/bare-rn/android/app/debug.keystore | Bin 2257 -> 0 bytes .../bare-rn/android/app/proguard-rules.pro | 10 - .../android/app/src/main/AndroidManifest.xml | 27 - .../src/main/java/com/barern/MainActivity.kt | 20 - .../main/java/com/barern/MainApplication.kt | 50 - .../res/drawable/rn_edit_text_material.xml | 37 - .../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 | 9 - apps/legacy/bare-rn/android/build.gradle | 21 - apps/legacy/bare-rn/android/gradle.properties | 44 - .../android/gradle/wrapper/gradle-wrapper.jar | Bin 45457 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 - apps/legacy/bare-rn/android/gradlew | 251 - apps/legacy/bare-rn/android/gradlew.bat | 99 - apps/legacy/bare-rn/android/settings.gradle | 11 - apps/legacy/bare-rn/app.json | 4 - apps/legacy/bare-rn/babel.config.js | 4 - apps/legacy/bare-rn/index.js | 9 - apps/legacy/bare-rn/ios/.xcode.env | 11 - apps/legacy/bare-rn/ios/Podfile | 51 - apps/legacy/bare-rn/ios/Podfile.lock | 2759 --- .../ios/bare-rn.xcodeproj/project.pbxproj | 482 - .../xcshareddata/xcschemes/bare-rn.xcscheme | 88 - .../contents.xcworkspacedata | 10 - .../bare-rn/ios/bare-rn/AppDelegate.swift | 48 - .../AppIcon.appiconset/Contents.json | 53 - .../ios/bare-rn/Images.xcassets/Contents.json | 6 - apps/legacy/bare-rn/ios/bare-rn/Info.plist | 60 - .../ios/bare-rn/LaunchScreen.storyboard | 47 - .../bare-rn/ios/bare-rn/PrivacyInfo.xcprivacy | 47 - apps/legacy/bare-rn/jest.config.js | 3 - apps/legacy/bare-rn/metro.config.js | 30 - apps/legacy/bare-rn/package.json | 49 - apps/legacy/bare-rn/tsconfig.json | 17 - apps/legacy/computer-vision/.gitignore | 38 - apps/legacy/computer-vision/ScreenWrapper.tsx | 8 - apps/legacy/computer-vision/app.json | 50 - apps/legacy/computer-vision/app/_layout.tsx | 203 - .../app/classification/index.tsx | 192 - apps/legacy/computer-vision/app/index.tsx | 102 - .../app/instance_segmentation/index.tsx | 345 - .../app/object_detection/index.tsx | 180 - apps/legacy/computer-vision/app/ocr/index.tsx | 207 - .../app/ocr_vertical/index.tsx | 196 - .../app/pose_estimation/index.tsx | 271 - .../app/segment_anything/index.tsx | 586 - .../app/semantic_segmentation/index.tsx | 260 - .../app/style_transfer/index.tsx | 153 - .../app/text_to_image/index.tsx | 317 - .../app/vision_camera/index.tsx | 533 - .../assets/fonts/Aeonik-Medium.otf | Bin 122080 -> 0 bytes .../assets/fonts/Aeonik-Regular.otf | Bin 118852 -> 0 bytes .../assets/icons/adaptive-icon.png | Bin 17547 -> 0 bytes .../assets/icons/executorch.svg | 9 - .../assets/icons/executorch_logo.png | Bin 694569 -> 0 bytes .../computer-vision/assets/icons/favicon.png | Bin 1466 -> 0 bytes .../computer-vision/assets/icons/icon.png | Bin 22380 -> 0 bytes .../computer-vision/assets/icons/splash.png | Bin 47346 -> 0 bytes .../computer-vision/assets/icons/swm_icon.svg | 13 - apps/legacy/computer-vision/babel.config.js | 7 - apps/legacy/computer-vision/colors.ts | 6 - .../computer-vision/components/BottomBar.tsx | 74 - .../components/BottomBarWithTextInput.tsx | 156 - .../components/BoundingBoxes.tsx | 90 - .../components/ErrorBanner.tsx | 53 - .../components/ImageWithBboxes.tsx | 76 - .../components/ImageWithMasks.tsx | 244 - .../components/ImageWithOCRBboxes.tsx | 93 - .../components/ModelPicker.tsx | 198 - .../components/ProgressBar.tsx | 54 - .../computer-vision/components/Spinner.tsx | 43 - .../computer-vision/components/StatsBar.tsx | 44 - .../components/utils/cocoSkeleton.ts | 18 - .../components/utils/colors.ts | 41 - .../tasks/ClassificationTask.tsx | 129 - .../tasks/InstanceSegmentationTask.tsx | 236 - .../vision_camera/tasks/OCRTask.tsx | 129 - .../tasks/ObjectDetectionTask.tsx | 157 - .../tasks/PoseEstimationTask.tsx | 164 - .../vision_camera/tasks/SegmentationTask.tsx | 235 - .../vision_camera/tasks/StyleTransferTask.tsx | 156 - .../components/vision_camera/tasks/types.ts | 17 - apps/legacy/computer-vision/context.ts | 5 - apps/legacy/computer-vision/declarations.d.ts | 5 - apps/legacy/computer-vision/index.ts | 8 - apps/legacy/computer-vision/metro.config.js | 21 - apps/legacy/computer-vision/package.json | 55 - apps/legacy/computer-vision/tsconfig.json | 22 - apps/legacy/computer-vision/utils.ts | 16 - apps/legacy/llm/.gitignore | 38 - apps/legacy/llm/app.json | 84 - apps/legacy/llm/app/_layout.tsx | 152 - apps/legacy/llm/app/index.tsx | 78 - apps/legacy/llm/app/llm/index.tsx | 208 - .../llm/app/llm_structured_output/index.tsx | 269 - .../legacy/llm/app/llm_tool_calling/index.tsx | 330 - apps/legacy/llm/app/multimodal_llm/index.tsx | 545 - apps/legacy/llm/app/privacy_filter/index.tsx | 234 - .../legacy/llm/assets/fonts/Aeonik-Medium.otf | Bin 122080 -> 0 bytes .../llm/assets/fonts/Aeonik-Regular.otf | Bin 118852 -> 0 bytes .../legacy/llm/assets/icons/adaptive-icon.png | Bin 17547 -> 0 bytes apps/legacy/llm/assets/icons/executorch.svg | 9 - apps/legacy/llm/assets/icons/favicon.png | Bin 1466 -> 0 bytes apps/legacy/llm/assets/icons/icon.png | Bin 22380 -> 0 bytes apps/legacy/llm/assets/icons/llama_icon.svg | 48 - apps/legacy/llm/assets/icons/mic_icon.svg | 4 - apps/legacy/llm/assets/icons/pause_icon.svg | 12 - apps/legacy/llm/assets/icons/send_icon.svg | 4 - apps/legacy/llm/assets/icons/splash.png | Bin 47346 -> 0 bytes apps/legacy/llm/assets/icons/stop_icon.svg | 4 - apps/legacy/llm/assets/icons/swm_icon.svg | 13 - apps/legacy/llm/babel.config.js | 7 - apps/legacy/llm/colors.ts | 11 - .../llm/components/AnimatedChatLoading.tsx | 46 - apps/legacy/llm/components/AudioWaveform.tsx | 57 - apps/legacy/llm/components/ErrorBanner.tsx | 53 - .../llm/components/MarkdownComponent.tsx | 32 - apps/legacy/llm/components/MessageItem.tsx | 127 - apps/legacy/llm/components/Messages.tsx | 78 - apps/legacy/llm/components/ModelPicker.tsx | 198 - apps/legacy/llm/components/Spinner.tsx | 43 - apps/legacy/llm/components/StatsBar.tsx | 40 - .../llm/components/SuggestedPrompts.tsx | 43 - apps/legacy/llm/components/llmModels.ts | 151 - apps/legacy/llm/context.ts | 5 - apps/legacy/llm/declarations.d.ts | 5 - apps/legacy/llm/hooks/useLLMStats.ts | 44 - apps/legacy/llm/index.ts | 8 - apps/legacy/llm/metro.config.js | 19 - apps/legacy/llm/package.json | 54 - apps/legacy/llm/tsconfig.json | 23 - apps/legacy/llm/utils/piiMatching.ts | 126 - apps/legacy/llm/utils/tools.ts | 198 - apps/legacy/speech/.gitignore | 39 - apps/legacy/speech/App.tsx | 110 - apps/legacy/speech/app.json | 69 - apps/legacy/speech/assets/adaptive-icon.png | Bin 17547 -> 0 bytes apps/legacy/speech/assets/executorch.svg | 9 - apps/legacy/speech/assets/favicon.png | Bin 1466 -> 0 bytes apps/legacy/speech/assets/icon.png | Bin 22380 -> 0 bytes apps/legacy/speech/assets/quiz-data.ts | 844 - apps/legacy/speech/assets/splash-icon.png | Bin 17547 -> 0 bytes apps/legacy/speech/assets/swm_icon.svg | 13 - apps/legacy/speech/colors.ts | 6 - apps/legacy/speech/components/ErrorBanner.tsx | 53 - apps/legacy/speech/components/ModelPicker.tsx | 178 - .../components/VerboseTranscription.tsx | 222 - apps/legacy/speech/declarations.d.ts | 5 - apps/legacy/speech/index.ts | 8 - apps/legacy/speech/metro.config.js | 19 - apps/legacy/speech/package.json | 42 - apps/legacy/speech/screens/Quiz.tsx | 479 - .../speech/screens/SpeechToTextScreen.tsx | 585 - .../speech/screens/TextToSpeechLLMScreen.tsx | 295 - .../speech/screens/TextToSpeechScreen.tsx | 310 - .../screens/VoiceActivityDetectionScreen.tsx | 300 - apps/legacy/speech/tsconfig.json | 22 - apps/legacy/text-embeddings/.gitignore | 39 - apps/legacy/text-embeddings/app.json | 42 - apps/legacy/text-embeddings/app/_layout.tsx | 131 - .../app/clip-embeddings/index.tsx | 354 - apps/legacy/text-embeddings/app/index.tsx | 63 - .../app/text-embeddings/index.tsx | 364 - .../text-embeddings/assets/adaptive-icon.png | Bin 17547 -> 0 bytes .../text-embeddings/assets/executorch.svg | 9 - .../legacy/text-embeddings/assets/favicon.png | Bin 1466 -> 0 bytes apps/legacy/text-embeddings/assets/icon.png | Bin 22380 -> 0 bytes .../text-embeddings/assets/splash-icon.png | Bin 17547 -> 0 bytes apps/legacy/text-embeddings/babel.config.js | 6 - apps/legacy/text-embeddings/colors.ts | 11 - .../components/ErrorBanner.tsx | 53 - .../components/ModelPicker.tsx | 198 - apps/legacy/text-embeddings/context.ts | 5 - apps/legacy/text-embeddings/declarations.d.ts | 5 - apps/legacy/text-embeddings/index.ts | 8 - apps/legacy/text-embeddings/metro.config.js | 21 - apps/legacy/text-embeddings/package.json | 46 - apps/legacy/text-embeddings/tsconfig.json | 21 - apps/legacy/text-embeddings/utils/math.ts | 16 - .../01-fundamentals/03-migrating-from-v0-9.md | 68 +- .../08-native-libraries.md | 2 +- docs/docusaurus.config.js | 7 - .../01-fundamentals/01-getting-started.md | 224 - .../01-fundamentals/02-loading-models.md | 133 - .../03-frequently-asked-questions.md | 50 - .../01-fundamentals/04-glossary-of-terms.md | 59 - .../01-fundamentals/_category_.json | 6 - .../02-benchmarks/_category_.json | 6 - .../02-benchmarks/inference-time.md | 255 - .../02-benchmarks/memory-usage.md | 154 - .../02-benchmarks/model-size.md | 161 - .../_category_.json | 6 - .../01-natural-language-processing/useLLM.md | 572 - .../usePrivacyFilter.md | 135 - .../useSpeechToText.md | 220 - .../useTextEmbeddings.md | 118 - .../useTextToSpeech.md | 219 - .../useTokenizer.md | 104 - .../01-natural-language-processing/useVAD.md | 96 - .../02-computer-vision/_category_.json | 6 - .../02-computer-vision/useClassification.md | 107 - .../02-computer-vision/useImageEmbeddings.md | 108 - .../useInstanceSegmentation.md | 191 - .../03-hooks/02-computer-vision/useOCR.md | 121 - .../02-computer-vision/useObjectDetection.md | 128 - .../02-computer-vision/usePoseEstimation.md | 143 - .../useSemanticSegmentation.md | 123 - .../02-computer-vision/useStyleTransfer.md | 102 - .../02-computer-vision/useTextToImage.md | 98 - .../02-computer-vision/useVerticalOCR.md | 132 - .../visioncamera-integration.md | 302 - .../03-executorch-bindings/_category_.json | 6 - .../useExecutorchModule.md | 102 - .../03-hooks/_category_.json | 6 - .../LLMModule.md | 197 - .../PrivacyFilterModule.md | 50 - .../SpeechToTextModule.md | 178 - .../TextEmbeddingsModule.md | 42 - .../TextToSpeechModule.md | 139 - .../TokenizerModule.md | 47 - .../VADModule.md | 59 - .../_category_.json | 6 - .../ClassificationModule.md | 73 - .../ImageEmbeddingsModule.md | 47 - .../InstanceSegmentationModule.md | 120 - .../02-computer-vision/OCRModule.md | 46 - .../ObjectDetectionModule.md | 93 - .../PoseEstimationModule.md | 110 - .../SemanticSegmentationModule.md | 117 - .../02-computer-vision/StyleTransferModule.md | 56 - .../02-computer-vision/TextToImageModule.md | 60 - .../02-computer-vision/VerticalOCRModule.md | 49 - .../02-computer-vision/_category_.json | 6 - .../ExecutorchModule.md | 102 - .../03-executorch-bindings/_category_.json | 6 - .../04-typescript-api/_category_.json | 6 - .../05-utilities/01-webrtc-integration.md | 118 - .../05-utilities/04-error-handling.md | 184 - .../05-utilities/_category_.json | 6 - .../05-utilities/model-registry.md | 143 - .../classes/BaseResourceFetcherClass.md | 464 - .../classes/ClassificationModule.md | 387 - .../classes/ExecutorchModule.md | 250 - .../classes/ImageEmbeddingsModule.md | 379 - .../classes/InstanceSegmentationModule.md | 461 - .../06-api-reference/classes/LLMModule.md | 385 - .../06-api-reference/classes/Logger.md | 105 - .../classes/MessageCountContextStrategy.md | 78 - .../classes/NoopContextStrategy.md | 67 - .../06-api-reference/classes/OCRModule.md | 144 - .../classes/ObjectDetectionModule.md | 422 - .../classes/PoseEstimationModule.md | 376 - .../classes/PrivacyFilterModule.md | 296 - .../classes/ResourceFetcher.md | 160 - .../classes/RnExecutorchError.md | 69 - .../classes/SemanticSegmentationModule.md | 447 - .../classes/SlidingWindowContextStrategy.md | 89 - .../classes/SpeechToTextModule.md | 275 - .../classes/StyleTransferModule.md | 364 - .../classes/TextEmbeddingsModule.md | 288 - .../classes/TextToImageModule.md | 364 - .../classes/TextToSpeechModule.md | 159 - .../classes/TokenizerModule.md | 174 - .../06-api-reference/classes/VADModule.md | 338 - .../classes/VerticalOCRModule.md | 157 - .../enumerations/CocoKeypoint.md | 142 - .../enumerations/CocoLabel.md | 733 - .../enumerations/CocoLabelYolo.md | 657 - .../enumerations/DeeplabLabel.md | 173 - .../enumerations/DownloadStatus.md | 25 - .../enumerations/FastSAMLabel.md | 16 - .../enumerations/HTTP_CODE.md | 25 - .../enumerations/Imagenet1kLabel.md | 8006 ------- .../enumerations/RnExecutorchErrorCode.md | 473 - .../enumerations/ScalarType.md | 225 - .../enumerations/SelfieSegmentationLabel.md | 21 - .../enumerations/SourceType.md | 55 - .../DEFAULT_STRUCTURED_OUTPUT_PROMPT.md | 21 - .../functions/cleanupExecutorch.md | 11 - .../fixAndValidateStructuredOutput.md | 33 - .../functions/getModelNameForUrl.md | 21 - .../functions/getStructuredOutputPrompt.md | 27 - .../functions/initExecutorch.md | 19 - .../06-api-reference/functions/selectByBox.md | 36 - .../functions/selectByPoint.md | 42 - .../functions/selectByText.md | 103 - .../functions/styleTransferUrls.md | 54 - .../functions/useClassification.md | 29 - .../functions/useExecutorchModule.md | 21 - .../functions/useImageEmbeddings.md | 21 - .../functions/useInstanceSegmentation.md | 57 - .../06-api-reference/functions/useLLM.md | 51 - .../06-api-reference/functions/useOCR.md | 21 - .../functions/useObjectDetection.md | 29 - .../functions/usePoseEstimation.md | 29 - .../functions/usePrivacyFilter.md | 21 - .../functions/useSemanticSegmentation.md | 37 - .../functions/useSpeechToText.md | 21 - .../functions/useStyleTransfer.md | 21 - .../functions/useTextEmbeddings.md | 21 - .../functions/useTextToImage.md | 21 - .../functions/useTextToSpeech.md | 31 - .../functions/useTokenizer.md | 21 - .../06-api-reference/functions/useVAD.md | 21 - .../functions/useVerticalOCR.md | 21 - .../06-api-reference/index.md | 495 - .../06-api-reference/interfaces/Bbox.md | 45 - .../06-api-reference/interfaces/ChatConfig.md | 35 - .../interfaces/ClassificationProps.md | 33 - .../interfaces/ClassificationType.md | 113 - .../interfaces/ContextStrategy.md | 47 - .../interfaces/DecodingOptions.md | 30 - .../06-api-reference/interfaces/Detection.md | 43 - .../interfaces/ExecutorchConfig.md | 14 - .../interfaces/ExecutorchModuleProps.md | 25 - .../interfaces/ExecutorchModuleType.md | 74 - .../06-api-reference/interfaces/Frame.md | 52 - .../interfaces/GenerationConfig.md | 75 - .../interfaces/ImageEmbeddingsProps.md | 33 - .../interfaces/ImageEmbeddingsType.md | 105 - .../interfaces/InstanceSegmentationOptions.md | 77 - .../interfaces/InstanceSegmentationProps.md | 33 - .../interfaces/InstanceSegmentationType.md | 138 - .../06-api-reference/interfaces/Keypoint.md | 21 - .../06-api-reference/interfaces/LLMConfig.md | 59 - .../06-api-reference/interfaces/LLMProps.md | 65 - .../06-api-reference/interfaces/LLMType.md | 299 - .../interfaces/LLMTypeBase.md | 218 - .../interfaces/LLMTypeMultimodal.md | 312 - .../06-api-reference/interfaces/Message.md | 38 - .../interfaces/NativeSegmentedInstance.md | 56 - .../interfaces/OCRDetection.md | 36 - .../06-api-reference/interfaces/OCRProps.md | 55 - .../06-api-reference/interfaces/OCRType.md | 112 - .../interfaces/ObjectDetectionOptions.md | 53 - .../interfaces/ObjectDetectionProps.md | 33 - .../interfaces/ObjectDetectionType.md | 164 - .../06-api-reference/interfaces/PiiEntity.md | 45 - .../06-api-reference/interfaces/PixelData.md | 65 - .../interfaces/PoseEstimationOptions.md | 37 - .../interfaces/PoseEstimationProps.md | 29 - .../interfaces/PoseEstimationType.md | 108 - .../interfaces/PrivacyFilterModelSources.md | 57 - .../interfaces/PrivacyFilterProps.md | 21 - .../interfaces/PrivacyFilterType.md | 63 - .../interfaces/ResourceFetcherAdapter.md | 77 - .../06-api-reference/interfaces/Segment.md | 25 - .../interfaces/SegmentedInstance.md | 73 - .../interfaces/SemanticSegmentationProps.md | 33 - .../interfaces/SemanticSegmentationType.md | 143 - .../interfaces/SpeechToTextModelConfig.md | 48 - .../interfaces/SpeechToTextProps.md | 35 - .../interfaces/SpeechToTextType.md | 193 - .../interfaces/StreamingOptions.md | 70 - .../interfaces/StyleTransferProps.md | 33 - .../interfaces/StyleTransferType.md | 121 - .../06-api-reference/interfaces/TensorPtr.md | 35 - .../interfaces/TextEmbeddingsProps.md | 43 - .../interfaces/TextEmbeddingsType.md | 73 - .../interfaces/TextToImageProps.md | 86 - .../interfaces/TextToImageType.md | 106 - .../interfaces/TextToSpeechInput.md | 40 - .../interfaces/TextToSpeechModelConfig.md | 35 - .../TextToSpeechPhonemizerConfig.md | 50 - .../TextToSpeechStreamingCallbacks.md | 57 - .../interfaces/TextToSpeechStreamingInput.md | 130 - .../interfaces/TextToSpeechType.md | 146 - .../interfaces/TokenizerProps.md | 31 - .../interfaces/TokenizerType.md | 163 - .../06-api-reference/interfaces/ToolCall.md | 25 - .../interfaces/ToolsConfig.md | 45 - .../interfaces/TranscriptionResult.md | 56 - .../interfaces/TranscriptionSegment.md | 86 - .../06-api-reference/interfaces/VADConfig.md | 25 - .../06-api-reference/interfaces/VADProps.md | 25 - .../interfaces/VADStreamingInput.md | 43 - .../interfaces/VADStreamingOptions.md | 25 - .../06-api-reference/interfaces/VADType.md | 133 - .../interfaces/VerticalOCRProps.md | 74 - .../interfaces/ViterbiBiases.md | 71 - .../06-api-reference/interfaces/Word.md | 35 - .../functions/calculateDownloadProgress.md | 50 - .../functions/getFilenameFromUri.md | 21 - .../functions/hashObject.md | 21 - .../functions/isEmulator.md | 9 - .../functions/isUrlHfRepo.md | 21 - .../functions/removeFilePrefix.md | 21 - .../functions/triggerDownloadEvent.md | 19 - .../triggerHuggingFaceDownloadCounter.md | 20 - .../namespaces/ResourceFetcherUtils/index.md | 14 - .../06-api-reference/type-aliases/Backend.md | 13 - .../type-aliases/ClassificationConfig.md | 43 - .../type-aliases/ClassificationLabels.md | 15 - .../type-aliases/ClassificationModelName.md | 7 - .../ClassificationModelSources.md | 8 - .../type-aliases/ImageEmbeddingsModelName.md | 7 - .../type-aliases/InstanceModelNameOf.md | 13 - .../InstanceSegmentationConfig.md | 58 - .../InstanceSegmentationLabels.md | 15 - .../InstanceSegmentationModelName.md | 7 - .../InstanceSegmentationModelSources.md | 8 - .../type-aliases/LLMCapability.md | 7 - .../type-aliases/LLMModelName.md | 7 - .../06-api-reference/type-aliases/LLMTool.md | 9 - .../type-aliases/LabelEnum.md | 8 - .../06-api-reference/type-aliases/MediaArg.md | 13 - .../type-aliases/MessageRole.md | 7 - .../type-aliases/ModelNameOf.md | 13 - .../type-aliases/ModelOpts.md | 35 - .../type-aliases/OCRLanguage.md | 7 - .../type-aliases/OCRModelName.md | 8 - .../type-aliases/ObjectDetectionConfig.md | 41 - .../type-aliases/ObjectDetectionLabels.md | 15 - .../type-aliases/ObjectDetectionModelName.md | 7 - .../ObjectDetectionModelSources.md | 8 - .../type-aliases/PersonKeypoints.md | 21 - .../type-aliases/PoseDetections.md | 13 - .../type-aliases/PoseEstimationConfig.md | 41 - .../type-aliases/PoseEstimationKeypoints.md | 15 - .../type-aliases/PoseEstimationModelName.md | 7 - .../PoseEstimationModelSources.md | 24 - .../type-aliases/PrivacyFilterModelName.md | 7 - .../type-aliases/ResourceSource.md | 7 - .../type-aliases/SegmentationLabels.md | 15 - .../SemanticSegmentationConfig.md | 43 - .../SemanticSegmentationModelName.md | 8 - .../SemanticSegmentationModelSources.md | 9 - .../type-aliases/SpeechToTextLanguage.md | 7 - .../type-aliases/SpeechToTextModelName.md | 7 - .../type-aliases/StyleTransferModelName.md | 7 - .../type-aliases/TensorBuffer.md | 7 - .../type-aliases/TextEmbeddingsModelName.md | 7 - .../type-aliases/TextToImageModelName.md | 7 - .../type-aliases/TextToSpeechLanguage.md | 7 - .../type-aliases/TextToSpeechModelName.md | 7 - .../type-aliases/TextToSpeechModelSources.md | 32 - .../06-api-reference/type-aliases/Triple.md | 13 - .../type-aliases/VADModelName.md | 7 - .../06-api-reference/typedoc-sidebar.cjs | 4 - .../variables/ALL_MINILM_L6_V2.md | 19 - .../variables/ALL_MPNET_BASE_V2.md | 19 - .../variables/BIELIK_V3_0_1_5B.md | 23 - .../variables/BIELIK_V3_0_1_5B_QUANTIZED.md | 23 - .../variables/BK_SDM_TINY_VPRED_256.md | 31 - .../variables/BK_SDM_TINY_VPRED_512.md | 31 - .../variables/CLIP_VIT_BASE_PATCH32_IMAGE.md | 15 - .../CLIP_VIT_BASE_PATCH32_IMAGE_QUANTIZED.md | 15 - .../variables/CLIP_VIT_BASE_PATCH32_TEXT.md | 19 - .../DEEPLAB_V3_MOBILENET_V3_LARGE.md | 15 - ...DEEPLAB_V3_MOBILENET_V3_LARGE_QUANTIZED.md | 15 - .../variables/DEEPLAB_V3_RESNET101.md | 15 - .../DEEPLAB_V3_RESNET101_QUANTIZED.md | 15 - .../variables/DEEPLAB_V3_RESNET50.md | 15 - .../DEEPLAB_V3_RESNET50_QUANTIZED.md | 15 - .../variables/DEFAULT_CHAT_CONFIG.md | 7 - .../DEFAULT_CONTEXT_BUFFER_TOKENS.md | 7 - .../variables/DEFAULT_MESSAGE_HISTORY.md | 7 - .../variables/DEFAULT_SYSTEM_PROMPT.md | 7 - ...TILUSE_BASE_MULTILINGUAL_CASED_V2_8DA4W.md | 23 - ..._BASE_MULTILINGUAL_CASED_V2_8DA4W_MODEL.md | 5 - ...SE_BASE_MULTILINGUAL_CASED_V2_TOKENIZER.md | 5 - .../variables/EFFICIENTNET_V2_S.md | 15 - .../EFFICIENTNET_V2_S_COREML_FP16_MODEL.md | 5 - .../EFFICIENTNET_V2_S_COREML_FP32_MODEL.md | 5 - .../variables/EFFICIENTNET_V2_S_QUANTIZED.md | 15 - .../EFFICIENTNET_V2_S_XNNPACK_FP32_MODEL.md | 5 - .../EFFICIENTNET_V2_S_XNNPACK_INT8_MODEL.md | 5 - .../06-api-reference/variables/FASTSAM_S.md | 15 - .../variables/FASTSAM_S_COREML_FP16_MODEL.md | 5 - .../variables/FASTSAM_S_XNNPACK_FP32_MODEL.md | 5 - .../06-api-reference/variables/FASTSAM_X.md | 15 - .../variables/FASTSAM_X_COREML_FP16_MODEL.md | 5 - .../variables/FASTSAM_X_XNNPACK_FP32_MODEL.md | 5 - .../variables/FCN_RESNET101.md | 15 - .../variables/FCN_RESNET101_QUANTIZED.md | 15 - .../variables/FCN_RESNET50.md | 15 - .../variables/FCN_RESNET50_QUANTIZED.md | 15 - .../06-api-reference/variables/FSMN_VAD.md | 15 - .../variables/HAMMER2_1_0_5B.md | 23 - .../variables/HAMMER2_1_0_5B_QUANTIZED.md | 23 - .../variables/HAMMER2_1_1_5B.md | 23 - .../variables/HAMMER2_1_1_5B_QUANTIZED.md | 23 - .../variables/HAMMER2_1_3B.md | 23 - .../variables/HAMMER2_1_3B_QUANTIZED.md | 23 - .../variables/IMAGENET1K_MEAN.md | 5 - .../variables/IMAGENET1K_STD.md | 5 - .../KOKORO_AMERICAN_ENGLISH_FEMALE_HEART.md | 5 - .../KOKORO_AMERICAN_ENGLISH_FEMALE_RIVER.md | 5 - .../KOKORO_AMERICAN_ENGLISH_FEMALE_SARAH.md | 5 - .../KOKORO_AMERICAN_ENGLISH_MALE_ADAM.md | 5 - .../KOKORO_AMERICAN_ENGLISH_MALE_MICHAEL.md | 5 - .../KOKORO_AMERICAN_ENGLISH_MALE_SANTA.md | 5 - .../KOKORO_BRITISH_ENGLISH_FEMALE_EMMA.md | 5 - .../KOKORO_BRITISH_ENGLISH_MALE_DANIEL.md | 5 - .../variables/KOKORO_FRENCH_FEMALE_SIWIS.md | 5 - .../variables/KOKORO_GERMAN.md | 21 - .../variables/KOKORO_GERMAN_FEMALE_ANNA.md | 5 - .../variables/KOKORO_HINDI_FEMALE_ALPHA.md | 5 - .../variables/KOKORO_HINDI_MALE_OMEGA.md | 5 - .../variables/KOKORO_HINDI_MALE_PSI.md | 5 - .../variables/KOKORO_ITALIAN_FEMALE_SARA.md | 5 - .../variables/KOKORO_ITALIAN_MALE_NICOLA.md | 5 - .../variables/KOKORO_POLISH.md | 21 - .../variables/KOKORO_POLISH_MALE_MATEUSZ.md | 5 - .../KOKORO_PORTUGUESE_FEMALE_DORA.md | 5 - .../variables/KOKORO_PORTUGUESE_MALE_SANTA.md | 5 - .../variables/KOKORO_SPANISH_FEMALE_DORA.md | 5 - .../variables/KOKORO_SPANISH_MALE_ALEX.md | 5 - .../variables/KOKORO_STANDARD.md | 22 - .../variables/LFM2_5_1_2B_INSTRUCT.md | 23 - .../LFM2_5_1_2B_INSTRUCT_QUANTIZED.md | 23 - .../06-api-reference/variables/LFM2_5_350M.md | 23 - .../variables/LFM2_5_350M_QUANTIZED.md | 23 - .../variables/LFM2_5_VL_1_6B_QUANTIZED.md | 43 - .../variables/LFM2_5_VL_450M_QUANTIZED.md | 43 - .../variables/LFM2_VL_1_6B_QUANTIZED.md | 48 - .../variables/LFM2_VL_450M_QUANTIZED.md | 48 - .../06-api-reference/variables/LLAMA3_2_1B.md | 23 - .../variables/LLAMA3_2_1B_QLORA.md | 30 - .../variables/LLAMA3_2_1B_SPINQUANT.md | 23 - .../06-api-reference/variables/LLAMA3_2_3B.md | 23 - .../variables/LLAMA3_2_3B_QLORA.md | 30 - .../variables/LLAMA3_2_3B_SPINQUANT.md | 23 - .../variables/LRASPP_MOBILENET_V3_LARGE.md | 15 - .../LRASPP_MOBILENET_V3_LARGE_QUANTIZED.md | 15 - .../variables/MULTI_QA_MINILM_L6_COS_V1.md | 19 - .../variables/MULTI_QA_MPNET_BASE_DOT_V1.md | 19 - .../06-api-reference/variables/OCR_ABAZA.md | 23 - .../06-api-reference/variables/OCR_ADYGHE.md | 23 - .../variables/OCR_AFRIKAANS.md | 23 - .../variables/OCR_ALBANIAN.md | 23 - .../06-api-reference/variables/OCR_AVAR.md | 23 - .../variables/OCR_AZERBAIJANI.md | 23 - .../variables/OCR_BELARUSIAN.md | 23 - .../06-api-reference/variables/OCR_BOSNIAN.md | 23 - .../variables/OCR_BULGARIAN.md | 23 - .../06-api-reference/variables/OCR_CHECHEN.md | 23 - .../variables/OCR_CROATIAN.md | 23 - .../06-api-reference/variables/OCR_CZECH.md | 23 - .../06-api-reference/variables/OCR_DANISH.md | 23 - .../06-api-reference/variables/OCR_DARGWA.md | 23 - .../06-api-reference/variables/OCR_DUTCH.md | 23 - .../06-api-reference/variables/OCR_ENGLISH.md | 23 - .../variables/OCR_ESTONIAN.md | 23 - .../06-api-reference/variables/OCR_FRENCH.md | 23 - .../06-api-reference/variables/OCR_GERMAN.md | 23 - .../variables/OCR_HUNGARIAN.md | 23 - .../variables/OCR_ICELANDIC.md | 23 - .../variables/OCR_INDONESIAN.md | 23 - .../06-api-reference/variables/OCR_INGUSH.md | 23 - .../06-api-reference/variables/OCR_IRISH.md | 23 - .../06-api-reference/variables/OCR_ITALIAN.md | 23 - .../variables/OCR_JAPANESE.md | 23 - .../06-api-reference/variables/OCR_KANNADA.md | 23 - .../variables/OCR_KARBADIAN.md | 23 - .../06-api-reference/variables/OCR_KOREAN.md | 23 - .../06-api-reference/variables/OCR_KURDISH.md | 23 - .../06-api-reference/variables/OCR_LAK.md | 23 - .../06-api-reference/variables/OCR_LATIN.md | 23 - .../06-api-reference/variables/OCR_LATVIAN.md | 23 - .../variables/OCR_LEZGHIAN.md | 23 - .../variables/OCR_LITHUANIAN.md | 23 - .../06-api-reference/variables/OCR_MALAY.md | 23 - .../06-api-reference/variables/OCR_MALTESE.md | 23 - .../06-api-reference/variables/OCR_MAORI.md | 23 - .../variables/OCR_MONGOLIAN.md | 23 - .../variables/OCR_NORWEGIAN.md | 23 - .../06-api-reference/variables/OCR_OCCITAN.md | 23 - .../06-api-reference/variables/OCR_PALI.md | 23 - .../06-api-reference/variables/OCR_POLISH.md | 23 - .../variables/OCR_PORTUGUESE.md | 23 - .../variables/OCR_ROMANIAN.md | 23 - .../06-api-reference/variables/OCR_RUSSIAN.md | 23 - .../variables/OCR_SERBIAN_CYRILLIC.md | 23 - .../variables/OCR_SERBIAN_LATIN.md | 23 - .../variables/OCR_SIMPLIFIED_CHINESE.md | 23 - .../06-api-reference/variables/OCR_SLOVAK.md | 23 - .../variables/OCR_SLOVENIAN.md | 23 - .../06-api-reference/variables/OCR_SPANISH.md | 23 - .../06-api-reference/variables/OCR_SWAHILI.md | 23 - .../06-api-reference/variables/OCR_SWEDISH.md | 23 - .../variables/OCR_TABASSARAN.md | 23 - .../06-api-reference/variables/OCR_TAGALOG.md | 23 - .../06-api-reference/variables/OCR_TAJIK.md | 23 - .../06-api-reference/variables/OCR_TELUGU.md | 23 - .../06-api-reference/variables/OCR_TURKISH.md | 23 - .../variables/OCR_UKRAINIAN.md | 23 - .../06-api-reference/variables/OCR_UZBEK.md | 23 - .../variables/OCR_VIETNAMESE.md | 23 - .../06-api-reference/variables/OCR_WELSH.md | 23 - ...SE_MULTILINGUAL_MINILM_L12_V2_QUANTIZED.md | 19 - .../variables/PHI_4_MINI_4B.md | 23 - .../variables/PHI_4_MINI_4B_QUANTIZED.md | 23 - .../variables/PRIVACY_FILTER_NEMOTRON.md | 27 - .../variables/PRIVACY_FILTER_OPENAI.md | 27 - .../variables/QWEN2_5_0_5B.md | 23 - .../variables/QWEN2_5_0_5B_QUANTIZED.md | 23 - .../variables/QWEN2_5_1_5B.md | 23 - .../variables/QWEN2_5_1_5B_QUANTIZED.md | 23 - .../06-api-reference/variables/QWEN2_5_3B.md | 23 - .../variables/QWEN2_5_3B_QUANTIZED.md | 23 - .../06-api-reference/variables/QWEN3_0_6B.md | 35 - .../variables/QWEN3_0_6B_QUANTIZED.md | 35 - .../06-api-reference/variables/QWEN3_1_7B.md | 35 - .../variables/QWEN3_1_7B_QUANTIZED.md | 35 - .../06-api-reference/variables/QWEN3_4B.md | 35 - .../variables/QWEN3_4B_QUANTIZED.md | 35 - .../variables/QWEN3_5_0_8B_QUANTIZED.md | 23 - .../variables/QWEN3_5_2B_QUANTIZED.md | 23 - .../variables/RF_DETR_NANO.md | 15 - .../RF_DETR_NANO_COREML_INT8_MODEL.md | 5 - .../variables/RF_DETR_NANO_SEG.md | 15 - .../RF_DETR_NANO_SEG_COREML_INT8_MODEL.md | 5 - .../RF_DETR_NANO_SEG_XNNPACK_FP32_MODEL.md | 5 - .../RF_DETR_NANO_XNNPACK_FP32_MODEL.md | 5 - .../variables/SELFIE_SEGMENTATION.md | 15 - .../variables/SMOLLM2_1_135M.md | 23 - .../variables/SMOLLM2_1_135M_QUANTIZED.md | 23 - .../variables/SMOLLM2_1_1_7B.md | 23 - .../variables/SMOLLM2_1_1_7B_QUANTIZED.md | 23 - .../variables/SMOLLM2_1_360M.md | 23 - .../variables/SMOLLM2_1_360M_QUANTIZED.md | 23 - .../variables/SPECIAL_TOKENS.md | 37 - .../SSDLITE_320_MOBILENET_V3_LARGE.md | 15 - ...20_MOBILENET_V3_LARGE_COREML_FP16_MODEL.md | 5 - ...0_MOBILENET_V3_LARGE_XNNPACK_FP32_MODEL.md | 5 - .../variables/STYLE_TRANSFER_CANDY.md | 15 - .../STYLE_TRANSFER_CANDY_QUANTIZED.md | 15 - .../variables/STYLE_TRANSFER_MOSAIC.md | 15 - .../STYLE_TRANSFER_MOSAIC_QUANTIZED.md | 15 - .../variables/STYLE_TRANSFER_RAIN_PRINCESS.md | 15 - .../STYLE_TRANSFER_RAIN_PRINCESS_QUANTIZED.md | 15 - .../variables/STYLE_TRANSFER_UDNIE.md | 15 - .../STYLE_TRANSFER_UDNIE_QUANTIZED.md | 15 - .../variables/WHISPER_BASE.md | 23 - .../variables/WHISPER_BASE_EN.md | 23 - .../variables/WHISPER_BASE_EN_MODEL_COREML.md | 5 - .../WHISPER_BASE_EN_MODEL_XNNPACK.md | 5 - .../variables/WHISPER_BASE_EN_TOKENIZER.md | 5 - .../variables/WHISPER_BASE_MODEL_COREML.md | 5 - .../variables/WHISPER_BASE_MODEL_XNNPACK.md | 5 - .../variables/WHISPER_BASE_TOKENIZER.md | 5 - .../variables/WHISPER_SMALL.md | 23 - .../variables/WHISPER_SMALL_EN.md | 23 - .../WHISPER_SMALL_EN_MODEL_COREML.md | 5 - .../WHISPER_SMALL_EN_MODEL_XNNPACK.md | 5 - .../variables/WHISPER_SMALL_EN_TOKENIZER.md | 5 - .../variables/WHISPER_SMALL_MODEL_COREML.md | 5 - .../variables/WHISPER_SMALL_MODEL_XNNPACK.md | 5 - .../variables/WHISPER_SMALL_TOKENIZER.md | 5 - .../variables/WHISPER_TINY.md | 23 - .../variables/WHISPER_TINY_EN.md | 23 - .../variables/WHISPER_TINY_EN_MODEL_COREML.md | 5 - .../WHISPER_TINY_EN_MODEL_XNNPACK.md | 5 - .../variables/WHISPER_TINY_EN_TOKENIZER.md | 5 - .../variables/WHISPER_TINY_MODEL_COREML.md | 5 - .../variables/WHISPER_TINY_MODEL_XNNPACK.md | 5 - .../variables/WHISPER_TINY_TOKENIZER.md | 5 - .../06-api-reference/variables/YOLO26L.md | 15 - .../06-api-reference/variables/YOLO26L_SEG.md | 15 - .../06-api-reference/variables/YOLO26M.md | 15 - .../06-api-reference/variables/YOLO26M_SEG.md | 15 - .../06-api-reference/variables/YOLO26N.md | 15 - .../variables/YOLO26N_POSE.md | 15 - .../06-api-reference/variables/YOLO26N_SEG.md | 15 - .../06-api-reference/variables/YOLO26S.md | 15 - .../06-api-reference/variables/YOLO26S_SEG.md | 15 - .../06-api-reference/variables/YOLO26X.md | 15 - .../06-api-reference/variables/YOLO26X_SEG.md | 15 - .../06-api-reference/variables/isAvailable.md | 9 - .../06-api-reference/variables/models.md | 601 - .../variables/parseToolCall.md | 29 - .../07-other/01-compatibility.mdx | 140 - .../07-other/_category_.json | 6 - .../08-resource-fetcher/01-usage.md | 236 - .../08-resource-fetcher/02-custom-adapter.md | 53 - .../08-resource-fetcher/_category_.json | 6 - .../version-0.10.0-legacy-sidebars.json | 96 - docs/versions.json | 1 - package.json | 10 +- packages/bare-resource-fetcher/LICENSE | 21 - packages/bare-resource-fetcher/README.md | 37 - packages/bare-resource-fetcher/package.json | 43 - .../src/ResourceFetcher.ts | 206 - .../src/ResourceFetcherUtils.ts | 102 - .../src/constants/directories.ts | 3 - .../src/declarations.d.ts | 49 - .../bare-resource-fetcher/src/handlers.ts | 270 - packages/bare-resource-fetcher/src/index.ts | 1 - packages/bare-resource-fetcher/tsconfig.json | 28 - packages/expo-resource-fetcher/LICENSE | 21 - packages/expo-resource-fetcher/README.md | 30 - packages/expo-resource-fetcher/package.json | 49 - .../src/ResourceFetcher.ts | 190 - .../src/ResourceFetcherUtils.ts | 45 - .../src/constants/directories.ts | 3 - .../expo-resource-fetcher/src/handlers.ts | 179 - packages/expo-resource-fetcher/src/index.ts | 1 - .../src/legacy/ResourceFetcher.ts | 189 - .../src/legacy/ResourceFetcherUtils.ts | 50 - .../src/legacy/constants/directories.ts | 3 - .../src/legacy/handlers.ts | 190 - .../expo-resource-fetcher/src/legacy/index.ts | 1 - .../expo-resource-fetcher/src/sharedUtils.ts | 80 - packages/expo-resource-fetcher/tsconfig.json | 28 - .../react-native-executorch-webrtc/LICENSE | 21 - .../react-native-executorch-webrtc/README.md | 91 - .../android/CMakeLists.txt | 78 - .../android/build.gradle | 89 - .../android/gradle/wrapper/gradle-wrapper.jar | Bin 43739 -> 0 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 - .../android/gradlew | 251 - .../android/gradlew.bat | 94 - .../android/src/main/AndroidManifest.xml | 4 - .../src/main/cpp/FrameProcessorBridge.cpp | 197 - .../webrtc/ExecutorchFrameProcessor.kt | 316 - .../webrtc/ExecutorchFrameProcessorFactory.kt | 16 - .../com/executorch/webrtc/ExecutorchWebRTC.kt | 63 - .../webrtc/ExecutorchWebRTCModule.kt | 75 - .../webrtc/ExecutorchWebRTCPackage.kt | 12 - .../executorch/webrtc/gl/FullscreenQuad.java | 39 - .../executorch/webrtc/gl/GlBlurRenderer.java | 374 - .../executorch/webrtc/gl/GlFramebuffer.java | 66 - .../com/executorch/webrtc/gl/GlProgram.java | 83 - .../ios/ExecutorchFrameProcessor.h | 16 - .../ios/ExecutorchFrameProcessor.mm | 466 - .../ios/ExecutorchWebRTC.h | 5 - .../ios/ExecutorchWebRTC.mm | 63 - .../package.json | 42 - .../react-native-executorch-webrtc.podspec | 55 - .../react-native.config.js | 13 - .../src/BackgroundBlur.ts | 62 - .../src/NativeBackgroundBlur.ts | 33 - .../src/index.ts | 23 - .../src/useBackgroundBlur.ts | 125 - .../tsconfig.json | 28 - .../__tests__/api/modelVariants.test.ts | 42 +- .../api/podspecPublicHeaders.test.ts | 3 +- .../__tests__/legacy/installGuard.test.ts | 108 - .../android/CMakeLists.txt | 72 - .../com/swmansion/rnexecutorch/ETInstaller.kt | 73 - .../rnexecutorch/ETInstallerUnavailable.kt | 30 - .../rnexecutorch/RnExecutorchPackage.kt | 28 - .../legacy/android/ETInstaller.kt | 66 - .../legacy/android/ETInstallerModule.cpp | 80 - .../legacy/android/ETInstallerModule.h | 42 - .../legacy/android/ETInstallerUnavailable.kt | 27 - .../legacy/android/EmulatorDetection.h | 36 - .../legacy/cpp/ada/ada.cpp | 17406 ---------------- .../legacy/cpp/ada/ada.h | 10344 --------- .../legacy/cpp/pfft/pfft.c | 2205 -- .../legacy/cpp/pfft/pfft.h | 187 - .../legacy/cpp/rnexecutorch/Error.h | 75 - .../legacy/cpp/rnexecutorch/ErrorCodes.h | 129 - .../legacy/cpp/rnexecutorch/Log.h | 498 - .../rnexecutorch/RnExecutorchInstaller.cpp | 161 - .../cpp/rnexecutorch/RnExecutorchInstaller.h | 116 - .../cpp/rnexecutorch/TokenizerModule.cpp | 106 - .../legacy/cpp/rnexecutorch/TokenizerModule.h | 33 - .../cpp/rnexecutorch/data_processing/FFT.cpp | 21 - .../cpp/rnexecutorch/data_processing/FFT.h | 23 - .../rnexecutorch/data_processing/FileUtils.h | 33 - .../data_processing/ImageProcessing.cpp | 261 - .../data_processing/ImageProcessing.h | 63 - .../data_processing/Numerical.cpp | 116 - .../rnexecutorch/data_processing/Numerical.h | 77 - .../rnexecutorch/data_processing/Sequential.h | 53 - .../rnexecutorch/data_processing/base64.cpp | 110 - .../cpp/rnexecutorch/data_processing/base64.h | 46 - .../cpp/rnexecutorch/data_processing/dsp.cpp | 22 - .../cpp/rnexecutorch/data_processing/dsp.h | 12 - .../cpp/rnexecutorch/data_processing/gzip.cpp | 51 - .../cpp/rnexecutorch/data_processing/gzip.h | 7 - .../host_objects/JSTensorViewIn.h | 15 - .../host_objects/JSTensorViewOut.h | 22 - .../host_objects/JsiConversions.h | 746 - .../host_objects/ModelHostObject.h | 477 - .../cpp/rnexecutorch/jsi/JsiHostObject.cpp | 108 - .../cpp/rnexecutorch/jsi/JsiHostObject.h | 90 - .../cpp/rnexecutorch/jsi/OwningArrayBuffer.h | 57 - .../legacy/cpp/rnexecutorch/jsi/Promise.cpp | 23 - .../legacy/cpp/rnexecutorch/jsi/Promise.h | 70 - .../cpp/rnexecutorch/jsi/RuntimeAwareCache.h | 58 - .../jsi/RuntimeLifecycleMonitor.cpp | 53 - .../jsi/RuntimeLifecycleMonitor.h | 35 - .../metaprogramming/ConstructorHelpers.h | 138 - .../metaprogramming/ContainerHelpers.h | 32 - .../metaprogramming/FunctionHelpers.h | 102 - .../metaprogramming/TypeConcepts.h | 52 - .../cpp/rnexecutorch/models/BaseModel.cpp | 179 - .../cpp/rnexecutorch/models/BaseModel.h | 64 - .../cpp/rnexecutorch/models/VisionModel.cpp | 54 - .../cpp/rnexecutorch/models/VisionModel.h | 156 - .../models/classification/Classification.cpp | 118 - .../models/classification/Classification.h | 52 - .../models/embeddings/BaseEmbeddings.cpp | 19 - .../models/embeddings/BaseEmbeddings.h | 17 - .../embeddings/image/ImageEmbeddings.cpp | 72 - .../models/embeddings/image/ImageEmbeddings.h | 41 - .../models/embeddings/text/TextEmbeddings.cpp | 64 - .../models/embeddings/text/TextEmbeddings.h | 36 - .../BaseInstanceSegmentation.cpp | 376 - .../BaseInstanceSegmentation.h | 109 - .../models/instance_segmentation/Types.h | 33 - .../cpp/rnexecutorch/models/llm/LLM.cpp | 315 - .../legacy/cpp/rnexecutorch/models/llm/LLM.h | 55 - .../cpp/rnexecutorch/models/llm/Types.h | 23 - .../models/object_detection/Constants.h | 5 - .../object_detection/ObjectDetection.cpp | 231 - .../models/object_detection/ObjectDetection.h | 165 - .../models/object_detection/Types.h | 22 - .../models/ocr/CTCLabelConverter.cpp | 93 - .../models/ocr/CTCLabelConverter.h | 29 - .../cpp/rnexecutorch/models/ocr/Constants.h | 51 - .../cpp/rnexecutorch/models/ocr/Detector.cpp | 122 - .../cpp/rnexecutorch/models/ocr/Detector.h | 37 - .../cpp/rnexecutorch/models/ocr/OCR.cpp | 99 - .../legacy/cpp/rnexecutorch/models/ocr/OCR.h | 52 - .../models/ocr/RecognitionHandler.cpp | 96 - .../models/ocr/RecognitionHandler.h | 38 - .../rnexecutorch/models/ocr/Recognizer.cpp | 78 - .../cpp/rnexecutorch/models/ocr/Recognizer.h | 36 - .../cpp/rnexecutorch/models/ocr/Types.h | 32 - .../models/ocr/utils/DetectorUtils.cpp | 661 - .../models/ocr/utils/DetectorUtils.h | 96 - .../ocr/utils/RecognitionHandlerUtils.cpp | 159 - .../ocr/utils/RecognitionHandlerUtils.h | 90 - .../models/ocr/utils/RecognizerUtils.cpp | 222 - .../models/ocr/utils/RecognizerUtils.h | 67 - .../models/pose_estimation/PoseEstimation.cpp | 180 - .../models/pose_estimation/PoseEstimation.h | 49 - .../models/pose_estimation/Types.h | 14 - .../models/privacy_filter/PrivacyFilter.cpp | 212 - .../models/privacy_filter/PrivacyFilter.h | 54 - .../models/privacy_filter/Types.h | 15 - .../models/privacy_filter/Viterbi.cpp | 153 - .../models/privacy_filter/Viterbi.h | 41 - .../BaseSemanticSegmentation.cpp | 246 - .../BaseSemanticSegmentation.h | 68 - .../models/semantic_segmentation/Types.h | 17 - .../models/speech_to_text/SpeechToText.cpp | 216 - .../models/speech_to_text/SpeechToText.h | 79 - .../models/speech_to_text/common/schema/ASR.h | 41 - .../speech_to_text/common/schema/OnlineASR.h | 44 - .../common/types/GenerationResult.h | 22 - .../speech_to_text/common/types/Options.h | 27 - .../common/types/ProcessResult.h | 23 - .../speech_to_text/common/types/Segment.h | 20 - .../speech_to_text/common/types/Token.h | 9 - .../common/types/TranscriptionResult.h | 16 - .../models/speech_to_text/common/types/Word.h | 17 - .../models/speech_to_text/whisper/ASR.cpp | 479 - .../models/speech_to_text/whisper/ASR.h | 169 - .../models/speech_to_text/whisper/Constants.h | 45 - .../speech_to_text/whisper/OnlineASR.cpp | 307 - .../models/speech_to_text/whisper/OnlineASR.h | 92 - .../models/speech_to_text/whisper/Params.h | 82 - .../models/speech_to_text/whisper/Utils.h | 22 - .../models/style_transfer/StyleTransfer.cpp | 101 - .../models/style_transfer/StyleTransfer.h | 41 - .../models/style_transfer/Types.h | 19 - .../models/text_to_image/Constants.h | 9 - .../models/text_to_image/Decoder.cpp | 34 - .../models/text_to_image/Decoder.h | 24 - .../models/text_to_image/Encoder.cpp | 44 - .../models/text_to_image/Encoder.h | 32 - .../models/text_to_image/Scheduler.cpp | 155 - .../models/text_to_image/Scheduler.h | 41 - .../models/text_to_image/TextToImage.cpp | 150 - .../models/text_to_image/TextToImage.h | 64 - .../models/text_to_image/UNet.cpp | 36 - .../rnexecutorch/models/text_to_image/UNet.h | 28 - .../models/text_to_speech/TextToSpeech.h | 3 - .../models/text_to_speech/kokoro/Constants.h | 71 - .../kokoro/DurationPredictor.cpp | 216 - .../text_to_speech/kokoro/DurationPredictor.h | 78 - .../models/text_to_speech/kokoro/Kokoro.cpp | 443 - .../models/text_to_speech/kokoro/Kokoro.h | 129 - .../models/text_to_speech/kokoro/Params.h | 109 - .../text_to_speech/kokoro/Partitioner.cpp | 133 - .../text_to_speech/kokoro/Partitioner.h | 88 - .../text_to_speech/kokoro/Synthesizer.cpp | 113 - .../text_to_speech/kokoro/Synthesizer.h | 61 - .../models/text_to_speech/kokoro/Types.h | 31 - .../models/text_to_speech/kokoro/Utils.cpp | 108 - .../models/text_to_speech/kokoro/Utils.h | 27 - .../models/vertical_ocr/VerticalDetector.cpp | 88 - .../models/vertical_ocr/VerticalDetector.h | 50 - .../models/vertical_ocr/VerticalOCR.cpp | 226 - .../models/vertical_ocr/VerticalOCR.h | 92 - .../voice_activity_detection/Constants.h | 31 - .../models/voice_activity_detection/Types.h | 12 - .../models/voice_activity_detection/Utils.cpp | 42 - .../models/voice_activity_detection/Utils.h | 26 - .../VoiceActivityDetection.cpp | 253 - .../VoiceActivityDetection.h | 76 - .../cpp/rnexecutorch/tests/CMakeLists.txt | 391 - .../legacy/cpp/rnexecutorch/tests/README.md | 76 - .../tests/integration/BaseModelTest.cpp | 209 - .../tests/integration/BaseModelTests.h | 125 - .../tests/integration/ClassificationTest.cpp | 165 - .../tests/integration/ImageEmbeddingsTest.cpp | 143 - .../integration/InstanceSegmentationTest.cpp | 339 - .../tests/integration/LLMTest.cpp | 416 - .../tests/integration/OCRTest.cpp | 142 - .../tests/integration/ObjectDetectionTest.cpp | 321 - .../tests/integration/PoseEstimationTest.cpp | 254 - .../integration/SemanticSegmentationTest.cpp | 291 - .../tests/integration/SpeechToTextTest.cpp | 172 - .../tests/integration/StyleTransferTest.cpp | 188 - .../tests/integration/TextEmbeddingsTest.cpp | 165 - .../tests/integration/TextToImageTest.cpp | 154 - .../tests/integration/TextToSpeechTest.cpp | 129 - .../tests/integration/TokenizerModuleTest.cpp | 98 - .../tests/integration/VerticalOCRTest.cpp | 255 - .../tests/integration/VisionModelTest.cpp | 121 - .../tests/integration/VisionModelTests.h | 62 - .../VoiceActivityDetectionTest.cpp | 254 - .../integration/assets/test_audio_float.raw | Bin 1568184 -> 0 bytes .../tests/integration/assets/test_speech.raw | Bin 147904 -> 0 bytes .../assets/we_are_software_mansion.jpg | Bin 52710 -> 0 bytes .../tests/integration/libs/libfbjni.so | Bin 2179840 -> 0 bytes .../tests/integration/stubs/StubRunner.h | 28 - .../tests/integration/stubs/jsi_stubs.cpp | 53 - .../tests/integration/utils/TestUtils.h | 36 - .../cpp/rnexecutorch/tests/run_tests.sh | 404 - .../rnexecutorch/tests/unit/FileUtilsTest.cpp | 32 - .../tests/unit/FrameProcessorTest.cpp | 93 - .../tests/unit/FrameTransformTest.cpp | 373 - .../tests/unit/ImageProcessingTest.cpp | 63 - .../cpp/rnexecutorch/tests/unit/LogTest.cpp | 529 - .../rnexecutorch/tests/unit/NumericalTest.cpp | 107 - .../rnexecutorch/tests/unit/RunnerTest.cpp | 102 - .../rnexecutorch/tests/unit/SamplerTest.cpp | 98 - .../rnexecutorch/threads/GlobalThreadPool.h | 88 - .../threads/HighPerformanceThreadPool.h | 370 - .../rnexecutorch/threads/utils/ThreadUtils.h | 29 - .../cpp/rnexecutorch/utils/FrameExtractor.cpp | 112 - .../cpp/rnexecutorch/utils/FrameExtractor.h | 25 - .../cpp/rnexecutorch/utils/FrameProcessor.cpp | 91 - .../cpp/rnexecutorch/utils/FrameProcessor.h | 52 - .../cpp/rnexecutorch/utils/FrameTransform.cpp | 129 - .../cpp/rnexecutorch/utils/FrameTransform.h | 138 - .../utils/computer_vision/Processing.cpp | 20 - .../utils/computer_vision/Processing.h | 51 - .../utils/computer_vision/Types.h | 35 - .../legacy/cpp/runner/arange_util.cpp | 44 - .../legacy/cpp/runner/arange_util.h | 37 - .../legacy/cpp/runner/base_llm_runner.cpp | 190 - .../legacy/cpp/runner/base_llm_runner.h | 96 - .../legacy/cpp/runner/constants.h | 44 - .../cpp/runner/encoders/audio_encoder.cpp | 116 - .../cpp/runner/encoders/audio_encoder.h | 45 - .../legacy/cpp/runner/encoders/iencoder.h | 25 - .../cpp/runner/encoders/vision_encoder.cpp | 150 - .../cpp/runner/encoders/vision_encoder.h | 56 - .../legacy/cpp/runner/io_manager.h | 245 - .../legacy/cpp/runner/irunner.h | 148 - .../legacy/cpp/runner/kernel_includes.h | 23 - .../cpp/runner/multimodal_decoder_runner.h | 119 - .../legacy/cpp/runner/multimodal_input.h | 84 - .../cpp/runner/multimodal_prefiller.cpp | 464 - .../legacy/cpp/runner/multimodal_prefiller.h | 99 - .../legacy/cpp/runner/multimodal_runner.cpp | 140 - .../legacy/cpp/runner/multimodal_runner.h | 47 - .../legacy/cpp/runner/sampler.cpp | 317 - .../legacy/cpp/runner/sampler.h | 139 - .../legacy/cpp/runner/stats.h | 214 - .../legacy/cpp/runner/text_decoder_runner.cpp | 117 - .../legacy/cpp/runner/text_decoder_runner.h | 85 - .../legacy/cpp/runner/text_prefiller.cpp | 133 - .../legacy/cpp/runner/text_prefiller.h | 89 - .../legacy/cpp/runner/text_runner.cpp | 161 - .../legacy/cpp/runner/text_runner.h | 39 - .../legacy/cpp/runner/text_token_generator.h | 217 - .../legacy/cpp/runner/util.h | 180 - .../legacy/ios/ETInstaller.h | 8 - .../legacy/ios/ETInstaller.mm | 60 - .../legacy/package.json | 5 - .../legacy/src/common/Logger.ts | 27 - .../legacy/src/constants/classification.ts | 1007 - .../legacy/src/constants/commonVision.ts | 213 - .../legacy/src/constants/llmDefaults.ts | 48 - .../legacy/src/constants/modelRegistry.ts | 741 - .../legacy/src/constants/modelUrls.ts | 1427 -- .../legacy/src/constants/ocr/models.ts | 341 - .../legacy/src/constants/ocr/symbols.ts | 151 - .../legacy/src/constants/poseEstimation.ts | 24 - .../src/constants/privacyFilterLabels.ts | 285 - .../legacy/src/constants/resourceFetcher.ts | 3 - .../legacy/src/constants/tts/models.ts | 38 - .../legacy/src/constants/tts/voices.ts | 302 - .../legacy/src/constants/versions.ts | 10 - .../src/controllers/BaseOCRController.ts | 153 - .../legacy/src/controllers/LLMController.ts | 516 - .../legacy/src/controllers/OCRController.ts | 23 - .../src/controllers/VerticalOCRController.ts | 36 - .../legacy/src/errors/ErrorCodes.ts | 197 - .../legacy/src/errors/errorUtils.ts | 77 - .../computer_vision/useClassification.ts | 43 - .../computer_vision/useImageEmbeddings.ts | 36 - .../useInstanceSegmentation.ts | 69 - .../src/hooks/computer_vision/useOCR.ts | 73 - .../computer_vision/useObjectDetection.ts | 50 - .../computer_vision/usePoseEstimation.ts | 48 - .../useSemanticSegmentation.ts | 54 - .../hooks/computer_vision/useStyleTransfer.ts | 38 - .../hooks/computer_vision/useTextToImage.ts | 111 - .../hooks/computer_vision/useVerticalOCR.ts | 85 - .../src/hooks/general/useExecutorchModule.ts | 20 - .../natural_language_processing/useLLM.ts | 149 - .../usePrivacyFilter.ts | 27 - .../useSpeechToText.ts | 185 - .../useTextEmbeddings.ts | 26 - .../useTextToSpeech.ts | 164 - .../useTokenizer.ts | 67 - .../natural_language_processing/useVAD.ts | 40 - .../legacy/src/hooks/useModule.ts | 146 - .../legacy/src/hooks/useModuleFactory.ts | 115 - .../legacy/src/index.ts | 248 - .../legacy/src/modules/BaseModule.ts | 88 - .../computer_vision/ClassificationModule.ts | 136 - .../computer_vision/ImageEmbeddingsModule.ts | 69 - .../InstanceSegmentationModule.ts | 467 - .../src/modules/computer_vision/OCRModule.ts | 100 - .../computer_vision/ObjectDetectionModule.ts | 336 - .../computer_vision/PoseEstimationModule.ts | 309 - .../SemanticSegmentationModule.ts | 193 - .../computer_vision/StyleTransferModule.ts | 84 - .../computer_vision/TextToImageModule.ts | 164 - .../computer_vision/VerticalOCRModule.ts | 105 - .../computer_vision/VisionLabeledModule.ts | 51 - .../modules/computer_vision/VisionModule.ts | 149 - .../src/modules/general/ExecutorchModule.ts | 47 - .../natural_language_processing/LLMModule.ts | 236 - .../PrivacyFilterModule.ts | 135 - .../SpeechToTextModule.ts | 277 - .../TextEmbeddingsModule.ts | 87 - .../TextToSpeechModule.ts | 221 - .../TokenizerModule.ts | 92 - .../natural_language_processing/VADModule.ts | 151 - .../legacy/src/native/NativeETInstaller.ts | 8 - .../legacy/src/native/RnExecutorchModules.ts | 27 - .../legacy/src/types/classification.ts | 100 - .../legacy/src/types/common.ts | 201 - .../legacy/src/types/computerVision.ts | 23 - .../legacy/src/types/executorchModule.ts | 48 - .../src/types/genericImageSegmentation.ts | 0 .../legacy/src/types/imageEmbeddings.ts | 77 - .../legacy/src/types/instanceSegmentation.ts | 212 - .../legacy/src/types/llm.ts | 425 - .../legacy/src/types/objectDetection.ts | 196 - .../legacy/src/types/ocr.ts | 139 - .../legacy/src/types/poseEstimation.ts | 160 - .../legacy/src/types/privacyFilter.ts | 95 - .../legacy/src/types/semanticSegmentation.ts | 176 - .../legacy/src/types/stt.ts | 307 - .../legacy/src/types/styleTransfer.ts | 88 - .../legacy/src/types/textEmbeddings.ts | 76 - .../legacy/src/types/tokenizer.ts | 81 - .../legacy/src/types/tti.ts | 96 - .../legacy/src/types/tts.ts | 201 - .../legacy/src/types/vad.ts | 119 - .../src/utils/BaseResourceFetcherClass.ts | 226 - .../legacy/src/utils/ResourceFetcher.ts | 142 - .../legacy/src/utils/ResourceFetcherUtils.ts | 207 - .../legacy/src/utils/commonVision.ts | 10 - .../legacy/src/utils/labelUtils.ts | 10 - .../legacy/src/utils/llm.ts | 117 - .../MessageCountContextStrategy.ts | 34 - .../context_strategy/NoopContextStrategy.ts | 26 - .../SlidingWindowContextStrategy.ts | 63 - .../src/utils/llms/context_strategy/index.ts | 3 - .../src/utils/segmentAnythingPrompts.ts | 152 - .../legacy/tsconfig.json | 13 - packages/react-native-executorch/package.json | 26 +- .../react-native-executorch.podspec | 63 - .../scripts/create-package.sh | 3 +- .../scripts/download-libs.js | 6 +- .../src/native/NativeETInstaller.ts | 11 - .../tsconfig.build.json | 3 +- .../react-native-executorch/tsconfig.json | 3 +- yarn.lock | 4122 +--- 1113 files changed, 183 insertions(+), 136823 deletions(-) delete mode 100644 .github/workflows/npm-publish-satellites.yml delete mode 100644 LEGACY_REMOVAL.md delete mode 100644 apps/legacy/bare-rn/.bundle/config delete mode 100644 apps/legacy/bare-rn/.eslintrc.js delete mode 100644 apps/legacy/bare-rn/.gitignore delete mode 100644 apps/legacy/bare-rn/.prettierrc.js delete mode 100644 apps/legacy/bare-rn/.watchmanconfig delete mode 100644 apps/legacy/bare-rn/App.tsx delete mode 100644 apps/legacy/bare-rn/Gemfile delete mode 100644 apps/legacy/bare-rn/Gemfile.lock delete mode 100644 apps/legacy/bare-rn/__tests__/App.test.tsx delete mode 100644 apps/legacy/bare-rn/android/app/build.gradle delete mode 100644 apps/legacy/bare-rn/android/app/debug.keystore delete mode 100644 apps/legacy/bare-rn/android/app/proguard-rules.pro delete mode 100644 apps/legacy/bare-rn/android/app/src/main/AndroidManifest.xml delete mode 100644 apps/legacy/bare-rn/android/app/src/main/java/com/barern/MainActivity.kt delete mode 100644 apps/legacy/bare-rn/android/app/src/main/java/com/barern/MainApplication.kt delete mode 100644 apps/legacy/bare-rn/android/app/src/main/res/drawable/rn_edit_text_material.xml delete mode 100644 apps/legacy/bare-rn/android/app/src/main/res/mipmap-hdpi/ic_launcher.png delete mode 100644 apps/legacy/bare-rn/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png delete mode 100644 apps/legacy/bare-rn/android/app/src/main/res/mipmap-mdpi/ic_launcher.png delete mode 100644 apps/legacy/bare-rn/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png delete mode 100644 apps/legacy/bare-rn/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png delete mode 100644 apps/legacy/bare-rn/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png delete mode 100644 apps/legacy/bare-rn/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png delete mode 100644 apps/legacy/bare-rn/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png delete mode 100644 apps/legacy/bare-rn/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 apps/legacy/bare-rn/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png delete mode 100644 apps/legacy/bare-rn/android/app/src/main/res/values/strings.xml delete mode 100644 apps/legacy/bare-rn/android/app/src/main/res/values/styles.xml delete mode 100644 apps/legacy/bare-rn/android/build.gradle delete mode 100644 apps/legacy/bare-rn/android/gradle.properties delete mode 100644 apps/legacy/bare-rn/android/gradle/wrapper/gradle-wrapper.jar delete mode 100644 apps/legacy/bare-rn/android/gradle/wrapper/gradle-wrapper.properties delete mode 100755 apps/legacy/bare-rn/android/gradlew delete mode 100644 apps/legacy/bare-rn/android/gradlew.bat delete mode 100644 apps/legacy/bare-rn/android/settings.gradle delete mode 100644 apps/legacy/bare-rn/app.json delete mode 100644 apps/legacy/bare-rn/babel.config.js delete mode 100644 apps/legacy/bare-rn/index.js delete mode 100644 apps/legacy/bare-rn/ios/.xcode.env delete mode 100644 apps/legacy/bare-rn/ios/Podfile delete mode 100644 apps/legacy/bare-rn/ios/Podfile.lock delete mode 100644 apps/legacy/bare-rn/ios/bare-rn.xcodeproj/project.pbxproj delete mode 100644 apps/legacy/bare-rn/ios/bare-rn.xcodeproj/xcshareddata/xcschemes/bare-rn.xcscheme delete mode 100644 apps/legacy/bare-rn/ios/bare-rn.xcworkspace/contents.xcworkspacedata delete mode 100644 apps/legacy/bare-rn/ios/bare-rn/AppDelegate.swift delete mode 100644 apps/legacy/bare-rn/ios/bare-rn/Images.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 apps/legacy/bare-rn/ios/bare-rn/Images.xcassets/Contents.json delete mode 100644 apps/legacy/bare-rn/ios/bare-rn/Info.plist delete mode 100644 apps/legacy/bare-rn/ios/bare-rn/LaunchScreen.storyboard delete mode 100644 apps/legacy/bare-rn/ios/bare-rn/PrivacyInfo.xcprivacy delete mode 100644 apps/legacy/bare-rn/jest.config.js delete mode 100644 apps/legacy/bare-rn/metro.config.js delete mode 100644 apps/legacy/bare-rn/package.json delete mode 100644 apps/legacy/bare-rn/tsconfig.json delete mode 100644 apps/legacy/computer-vision/.gitignore delete mode 100644 apps/legacy/computer-vision/ScreenWrapper.tsx delete mode 100644 apps/legacy/computer-vision/app.json delete mode 100644 apps/legacy/computer-vision/app/_layout.tsx delete mode 100644 apps/legacy/computer-vision/app/classification/index.tsx delete mode 100644 apps/legacy/computer-vision/app/index.tsx delete mode 100644 apps/legacy/computer-vision/app/instance_segmentation/index.tsx delete mode 100644 apps/legacy/computer-vision/app/object_detection/index.tsx delete mode 100644 apps/legacy/computer-vision/app/ocr/index.tsx delete mode 100644 apps/legacy/computer-vision/app/ocr_vertical/index.tsx delete mode 100644 apps/legacy/computer-vision/app/pose_estimation/index.tsx delete mode 100644 apps/legacy/computer-vision/app/segment_anything/index.tsx delete mode 100644 apps/legacy/computer-vision/app/semantic_segmentation/index.tsx delete mode 100644 apps/legacy/computer-vision/app/style_transfer/index.tsx delete mode 100644 apps/legacy/computer-vision/app/text_to_image/index.tsx delete mode 100644 apps/legacy/computer-vision/app/vision_camera/index.tsx delete mode 100644 apps/legacy/computer-vision/assets/fonts/Aeonik-Medium.otf delete mode 100644 apps/legacy/computer-vision/assets/fonts/Aeonik-Regular.otf delete mode 100644 apps/legacy/computer-vision/assets/icons/adaptive-icon.png delete mode 100644 apps/legacy/computer-vision/assets/icons/executorch.svg delete mode 100644 apps/legacy/computer-vision/assets/icons/executorch_logo.png delete mode 100644 apps/legacy/computer-vision/assets/icons/favicon.png delete mode 100644 apps/legacy/computer-vision/assets/icons/icon.png delete mode 100644 apps/legacy/computer-vision/assets/icons/splash.png delete mode 100644 apps/legacy/computer-vision/assets/icons/swm_icon.svg delete mode 100644 apps/legacy/computer-vision/babel.config.js delete mode 100644 apps/legacy/computer-vision/colors.ts delete mode 100644 apps/legacy/computer-vision/components/BottomBar.tsx delete mode 100644 apps/legacy/computer-vision/components/BottomBarWithTextInput.tsx delete mode 100644 apps/legacy/computer-vision/components/BoundingBoxes.tsx delete mode 100644 apps/legacy/computer-vision/components/ErrorBanner.tsx delete mode 100644 apps/legacy/computer-vision/components/ImageWithBboxes.tsx delete mode 100644 apps/legacy/computer-vision/components/ImageWithMasks.tsx delete mode 100644 apps/legacy/computer-vision/components/ImageWithOCRBboxes.tsx delete mode 100644 apps/legacy/computer-vision/components/ModelPicker.tsx delete mode 100644 apps/legacy/computer-vision/components/ProgressBar.tsx delete mode 100644 apps/legacy/computer-vision/components/Spinner.tsx delete mode 100644 apps/legacy/computer-vision/components/StatsBar.tsx delete mode 100644 apps/legacy/computer-vision/components/utils/cocoSkeleton.ts delete mode 100644 apps/legacy/computer-vision/components/utils/colors.ts delete mode 100644 apps/legacy/computer-vision/components/vision_camera/tasks/ClassificationTask.tsx delete mode 100644 apps/legacy/computer-vision/components/vision_camera/tasks/InstanceSegmentationTask.tsx delete mode 100644 apps/legacy/computer-vision/components/vision_camera/tasks/OCRTask.tsx delete mode 100644 apps/legacy/computer-vision/components/vision_camera/tasks/ObjectDetectionTask.tsx delete mode 100644 apps/legacy/computer-vision/components/vision_camera/tasks/PoseEstimationTask.tsx delete mode 100644 apps/legacy/computer-vision/components/vision_camera/tasks/SegmentationTask.tsx delete mode 100644 apps/legacy/computer-vision/components/vision_camera/tasks/StyleTransferTask.tsx delete mode 100644 apps/legacy/computer-vision/components/vision_camera/tasks/types.ts delete mode 100644 apps/legacy/computer-vision/context.ts delete mode 100644 apps/legacy/computer-vision/declarations.d.ts delete mode 100644 apps/legacy/computer-vision/index.ts delete mode 100644 apps/legacy/computer-vision/metro.config.js delete mode 100644 apps/legacy/computer-vision/package.json delete mode 100644 apps/legacy/computer-vision/tsconfig.json delete mode 100644 apps/legacy/computer-vision/utils.ts delete mode 100644 apps/legacy/llm/.gitignore delete mode 100644 apps/legacy/llm/app.json delete mode 100644 apps/legacy/llm/app/_layout.tsx delete mode 100644 apps/legacy/llm/app/index.tsx delete mode 100644 apps/legacy/llm/app/llm/index.tsx delete mode 100644 apps/legacy/llm/app/llm_structured_output/index.tsx delete mode 100644 apps/legacy/llm/app/llm_tool_calling/index.tsx delete mode 100644 apps/legacy/llm/app/multimodal_llm/index.tsx delete mode 100644 apps/legacy/llm/app/privacy_filter/index.tsx delete mode 100644 apps/legacy/llm/assets/fonts/Aeonik-Medium.otf delete mode 100644 apps/legacy/llm/assets/fonts/Aeonik-Regular.otf delete mode 100644 apps/legacy/llm/assets/icons/adaptive-icon.png delete mode 100644 apps/legacy/llm/assets/icons/executorch.svg delete mode 100644 apps/legacy/llm/assets/icons/favicon.png delete mode 100644 apps/legacy/llm/assets/icons/icon.png delete mode 100644 apps/legacy/llm/assets/icons/llama_icon.svg delete mode 100644 apps/legacy/llm/assets/icons/mic_icon.svg delete mode 100644 apps/legacy/llm/assets/icons/pause_icon.svg delete mode 100644 apps/legacy/llm/assets/icons/send_icon.svg delete mode 100644 apps/legacy/llm/assets/icons/splash.png delete mode 100644 apps/legacy/llm/assets/icons/stop_icon.svg delete mode 100644 apps/legacy/llm/assets/icons/swm_icon.svg delete mode 100644 apps/legacy/llm/babel.config.js delete mode 100644 apps/legacy/llm/colors.ts delete mode 100644 apps/legacy/llm/components/AnimatedChatLoading.tsx delete mode 100644 apps/legacy/llm/components/AudioWaveform.tsx delete mode 100644 apps/legacy/llm/components/ErrorBanner.tsx delete mode 100644 apps/legacy/llm/components/MarkdownComponent.tsx delete mode 100644 apps/legacy/llm/components/MessageItem.tsx delete mode 100644 apps/legacy/llm/components/Messages.tsx delete mode 100644 apps/legacy/llm/components/ModelPicker.tsx delete mode 100644 apps/legacy/llm/components/Spinner.tsx delete mode 100644 apps/legacy/llm/components/StatsBar.tsx delete mode 100644 apps/legacy/llm/components/SuggestedPrompts.tsx delete mode 100644 apps/legacy/llm/components/llmModels.ts delete mode 100644 apps/legacy/llm/context.ts delete mode 100644 apps/legacy/llm/declarations.d.ts delete mode 100644 apps/legacy/llm/hooks/useLLMStats.ts delete mode 100644 apps/legacy/llm/index.ts delete mode 100644 apps/legacy/llm/metro.config.js delete mode 100644 apps/legacy/llm/package.json delete mode 100644 apps/legacy/llm/tsconfig.json delete mode 100644 apps/legacy/llm/utils/piiMatching.ts delete mode 100644 apps/legacy/llm/utils/tools.ts delete mode 100644 apps/legacy/speech/.gitignore delete mode 100644 apps/legacy/speech/App.tsx delete mode 100644 apps/legacy/speech/app.json delete mode 100644 apps/legacy/speech/assets/adaptive-icon.png delete mode 100644 apps/legacy/speech/assets/executorch.svg delete mode 100644 apps/legacy/speech/assets/favicon.png delete mode 100644 apps/legacy/speech/assets/icon.png delete mode 100644 apps/legacy/speech/assets/quiz-data.ts delete mode 100644 apps/legacy/speech/assets/splash-icon.png delete mode 100644 apps/legacy/speech/assets/swm_icon.svg delete mode 100644 apps/legacy/speech/colors.ts delete mode 100644 apps/legacy/speech/components/ErrorBanner.tsx delete mode 100644 apps/legacy/speech/components/ModelPicker.tsx delete mode 100644 apps/legacy/speech/components/VerboseTranscription.tsx delete mode 100644 apps/legacy/speech/declarations.d.ts delete mode 100644 apps/legacy/speech/index.ts delete mode 100644 apps/legacy/speech/metro.config.js delete mode 100644 apps/legacy/speech/package.json delete mode 100644 apps/legacy/speech/screens/Quiz.tsx delete mode 100644 apps/legacy/speech/screens/SpeechToTextScreen.tsx delete mode 100644 apps/legacy/speech/screens/TextToSpeechLLMScreen.tsx delete mode 100644 apps/legacy/speech/screens/TextToSpeechScreen.tsx delete mode 100644 apps/legacy/speech/screens/VoiceActivityDetectionScreen.tsx delete mode 100644 apps/legacy/speech/tsconfig.json delete mode 100644 apps/legacy/text-embeddings/.gitignore delete mode 100644 apps/legacy/text-embeddings/app.json delete mode 100644 apps/legacy/text-embeddings/app/_layout.tsx delete mode 100644 apps/legacy/text-embeddings/app/clip-embeddings/index.tsx delete mode 100644 apps/legacy/text-embeddings/app/index.tsx delete mode 100644 apps/legacy/text-embeddings/app/text-embeddings/index.tsx delete mode 100644 apps/legacy/text-embeddings/assets/adaptive-icon.png delete mode 100644 apps/legacy/text-embeddings/assets/executorch.svg delete mode 100644 apps/legacy/text-embeddings/assets/favicon.png delete mode 100644 apps/legacy/text-embeddings/assets/icon.png delete mode 100644 apps/legacy/text-embeddings/assets/splash-icon.png delete mode 100644 apps/legacy/text-embeddings/babel.config.js delete mode 100644 apps/legacy/text-embeddings/colors.ts delete mode 100644 apps/legacy/text-embeddings/components/ErrorBanner.tsx delete mode 100644 apps/legacy/text-embeddings/components/ModelPicker.tsx delete mode 100644 apps/legacy/text-embeddings/context.ts delete mode 100644 apps/legacy/text-embeddings/declarations.d.ts delete mode 100644 apps/legacy/text-embeddings/index.ts delete mode 100644 apps/legacy/text-embeddings/metro.config.js delete mode 100644 apps/legacy/text-embeddings/package.json delete mode 100644 apps/legacy/text-embeddings/tsconfig.json delete mode 100644 apps/legacy/text-embeddings/utils/math.ts delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/01-fundamentals/01-getting-started.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/01-fundamentals/02-loading-models.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/01-fundamentals/03-frequently-asked-questions.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/01-fundamentals/04-glossary-of-terms.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/01-fundamentals/_category_.json delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/02-benchmarks/_category_.json delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/02-benchmarks/inference-time.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/02-benchmarks/memory-usage.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/02-benchmarks/model-size.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/03-hooks/01-natural-language-processing/_category_.json delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/03-hooks/01-natural-language-processing/useLLM.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/03-hooks/01-natural-language-processing/usePrivacyFilter.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/03-hooks/01-natural-language-processing/useSpeechToText.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/03-hooks/01-natural-language-processing/useTextEmbeddings.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/03-hooks/01-natural-language-processing/useTextToSpeech.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/03-hooks/01-natural-language-processing/useTokenizer.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/03-hooks/01-natural-language-processing/useVAD.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/03-hooks/02-computer-vision/_category_.json delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/03-hooks/02-computer-vision/useClassification.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/03-hooks/02-computer-vision/useImageEmbeddings.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/03-hooks/02-computer-vision/useInstanceSegmentation.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/03-hooks/02-computer-vision/useOCR.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/03-hooks/02-computer-vision/useObjectDetection.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/03-hooks/02-computer-vision/usePoseEstimation.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/03-hooks/02-computer-vision/useSemanticSegmentation.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/03-hooks/02-computer-vision/useStyleTransfer.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/03-hooks/02-computer-vision/useTextToImage.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/03-hooks/02-computer-vision/useVerticalOCR.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/03-hooks/02-computer-vision/visioncamera-integration.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/03-hooks/03-executorch-bindings/_category_.json delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/03-hooks/03-executorch-bindings/useExecutorchModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/03-hooks/_category_.json delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/04-typescript-api/01-natural-language-processing/LLMModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/04-typescript-api/01-natural-language-processing/PrivacyFilterModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/04-typescript-api/01-natural-language-processing/SpeechToTextModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/04-typescript-api/01-natural-language-processing/TextEmbeddingsModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/04-typescript-api/01-natural-language-processing/TextToSpeechModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/04-typescript-api/01-natural-language-processing/TokenizerModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/04-typescript-api/01-natural-language-processing/VADModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/04-typescript-api/01-natural-language-processing/_category_.json delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/04-typescript-api/02-computer-vision/ClassificationModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/04-typescript-api/02-computer-vision/ImageEmbeddingsModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/04-typescript-api/02-computer-vision/InstanceSegmentationModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/04-typescript-api/02-computer-vision/OCRModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/04-typescript-api/02-computer-vision/ObjectDetectionModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/04-typescript-api/02-computer-vision/PoseEstimationModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/04-typescript-api/02-computer-vision/SemanticSegmentationModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/04-typescript-api/02-computer-vision/StyleTransferModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/04-typescript-api/02-computer-vision/TextToImageModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/04-typescript-api/02-computer-vision/VerticalOCRModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/04-typescript-api/02-computer-vision/_category_.json delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/04-typescript-api/03-executorch-bindings/ExecutorchModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/04-typescript-api/03-executorch-bindings/_category_.json delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/04-typescript-api/_category_.json delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/05-utilities/01-webrtc-integration.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/05-utilities/04-error-handling.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/05-utilities/_category_.json delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/05-utilities/model-registry.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/classes/BaseResourceFetcherClass.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/classes/ClassificationModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/classes/ExecutorchModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/classes/ImageEmbeddingsModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/classes/InstanceSegmentationModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/classes/LLMModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/classes/Logger.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/classes/MessageCountContextStrategy.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/classes/NoopContextStrategy.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/classes/OCRModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/classes/ObjectDetectionModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/classes/PoseEstimationModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/classes/PrivacyFilterModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/classes/ResourceFetcher.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/classes/RnExecutorchError.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/classes/SemanticSegmentationModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/classes/SlidingWindowContextStrategy.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/classes/SpeechToTextModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/classes/StyleTransferModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/classes/TextEmbeddingsModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/classes/TextToImageModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/classes/TextToSpeechModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/classes/TokenizerModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/classes/VADModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/classes/VerticalOCRModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/enumerations/CocoKeypoint.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/enumerations/CocoLabel.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/enumerations/CocoLabelYolo.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/enumerations/DeeplabLabel.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/enumerations/DownloadStatus.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/enumerations/FastSAMLabel.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/enumerations/HTTP_CODE.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/enumerations/Imagenet1kLabel.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/enumerations/RnExecutorchErrorCode.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/enumerations/ScalarType.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/enumerations/SelfieSegmentationLabel.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/enumerations/SourceType.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/functions/DEFAULT_STRUCTURED_OUTPUT_PROMPT.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/functions/cleanupExecutorch.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/functions/fixAndValidateStructuredOutput.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/functions/getModelNameForUrl.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/functions/getStructuredOutputPrompt.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/functions/initExecutorch.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/functions/selectByBox.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/functions/selectByPoint.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/functions/selectByText.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/functions/styleTransferUrls.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/functions/useClassification.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/functions/useExecutorchModule.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/functions/useImageEmbeddings.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/functions/useInstanceSegmentation.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/functions/useLLM.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/functions/useOCR.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/functions/useObjectDetection.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/functions/usePoseEstimation.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/functions/usePrivacyFilter.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/functions/useSemanticSegmentation.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/functions/useSpeechToText.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/functions/useStyleTransfer.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/functions/useTextEmbeddings.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/functions/useTextToImage.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/functions/useTextToSpeech.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/functions/useTokenizer.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/functions/useVAD.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/functions/useVerticalOCR.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/index.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/Bbox.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/ChatConfig.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/ClassificationProps.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/ClassificationType.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/ContextStrategy.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/DecodingOptions.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/Detection.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/ExecutorchConfig.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/ExecutorchModuleProps.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/ExecutorchModuleType.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/Frame.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/GenerationConfig.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/ImageEmbeddingsProps.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/ImageEmbeddingsType.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/InstanceSegmentationOptions.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/InstanceSegmentationProps.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/InstanceSegmentationType.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/Keypoint.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/LLMConfig.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/LLMProps.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/LLMType.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/LLMTypeBase.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/LLMTypeMultimodal.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/Message.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/NativeSegmentedInstance.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/OCRDetection.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/OCRProps.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/OCRType.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/ObjectDetectionOptions.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/ObjectDetectionProps.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/ObjectDetectionType.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/PiiEntity.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/PixelData.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/PoseEstimationOptions.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/PoseEstimationProps.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/PoseEstimationType.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/PrivacyFilterModelSources.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/PrivacyFilterProps.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/PrivacyFilterType.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/ResourceFetcherAdapter.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/Segment.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/SegmentedInstance.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/SemanticSegmentationProps.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/SemanticSegmentationType.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/SpeechToTextModelConfig.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/SpeechToTextProps.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/SpeechToTextType.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/StreamingOptions.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/StyleTransferProps.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/StyleTransferType.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/TensorPtr.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/TextEmbeddingsProps.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/TextEmbeddingsType.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/TextToImageProps.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/TextToImageType.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/TextToSpeechInput.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/TextToSpeechModelConfig.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/TextToSpeechPhonemizerConfig.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/TextToSpeechStreamingCallbacks.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/TextToSpeechStreamingInput.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/TextToSpeechType.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/TokenizerProps.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/TokenizerType.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/ToolCall.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/ToolsConfig.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/TranscriptionResult.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/TranscriptionSegment.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/VADConfig.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/VADProps.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/VADStreamingInput.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/VADStreamingOptions.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/VADType.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/VerticalOCRProps.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/ViterbiBiases.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/interfaces/Word.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/react-native-executorch/namespaces/ResourceFetcherUtils/functions/calculateDownloadProgress.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/react-native-executorch/namespaces/ResourceFetcherUtils/functions/getFilenameFromUri.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/react-native-executorch/namespaces/ResourceFetcherUtils/functions/hashObject.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/react-native-executorch/namespaces/ResourceFetcherUtils/functions/isEmulator.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/react-native-executorch/namespaces/ResourceFetcherUtils/functions/isUrlHfRepo.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/react-native-executorch/namespaces/ResourceFetcherUtils/functions/removeFilePrefix.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/react-native-executorch/namespaces/ResourceFetcherUtils/functions/triggerDownloadEvent.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/react-native-executorch/namespaces/ResourceFetcherUtils/functions/triggerHuggingFaceDownloadCounter.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/react-native-executorch/namespaces/ResourceFetcherUtils/index.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/Backend.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/ClassificationConfig.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/ClassificationLabels.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/ClassificationModelName.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/ClassificationModelSources.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/ImageEmbeddingsModelName.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/InstanceModelNameOf.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/InstanceSegmentationConfig.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/InstanceSegmentationLabels.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/InstanceSegmentationModelName.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/InstanceSegmentationModelSources.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/LLMCapability.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/LLMModelName.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/LLMTool.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/LabelEnum.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/MediaArg.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/MessageRole.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/ModelNameOf.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/ModelOpts.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/OCRLanguage.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/OCRModelName.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/ObjectDetectionConfig.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/ObjectDetectionLabels.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/ObjectDetectionModelName.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/ObjectDetectionModelSources.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/PersonKeypoints.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/PoseDetections.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/PoseEstimationConfig.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/PoseEstimationKeypoints.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/PoseEstimationModelName.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/PoseEstimationModelSources.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/PrivacyFilterModelName.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/ResourceSource.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/SegmentationLabels.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/SemanticSegmentationConfig.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/SemanticSegmentationModelName.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/SemanticSegmentationModelSources.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/SpeechToTextLanguage.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/SpeechToTextModelName.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/StyleTransferModelName.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/TensorBuffer.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/TextEmbeddingsModelName.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/TextToImageModelName.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/TextToSpeechLanguage.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/TextToSpeechModelName.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/TextToSpeechModelSources.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/Triple.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/type-aliases/VADModelName.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/typedoc-sidebar.cjs delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/ALL_MINILM_L6_V2.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/ALL_MPNET_BASE_V2.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/BIELIK_V3_0_1_5B.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/BIELIK_V3_0_1_5B_QUANTIZED.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/BK_SDM_TINY_VPRED_256.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/BK_SDM_TINY_VPRED_512.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/CLIP_VIT_BASE_PATCH32_IMAGE.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/CLIP_VIT_BASE_PATCH32_IMAGE_QUANTIZED.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/CLIP_VIT_BASE_PATCH32_TEXT.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/DEEPLAB_V3_MOBILENET_V3_LARGE.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/DEEPLAB_V3_MOBILENET_V3_LARGE_QUANTIZED.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/DEEPLAB_V3_RESNET101.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/DEEPLAB_V3_RESNET101_QUANTIZED.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/DEEPLAB_V3_RESNET50.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/DEEPLAB_V3_RESNET50_QUANTIZED.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/DEFAULT_CHAT_CONFIG.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/DEFAULT_CONTEXT_BUFFER_TOKENS.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/DEFAULT_MESSAGE_HISTORY.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/DEFAULT_SYSTEM_PROMPT.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/DISTILUSE_BASE_MULTILINGUAL_CASED_V2_8DA4W.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/DISTILUSE_BASE_MULTILINGUAL_CASED_V2_8DA4W_MODEL.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/DISTILUSE_BASE_MULTILINGUAL_CASED_V2_TOKENIZER.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/EFFICIENTNET_V2_S.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/EFFICIENTNET_V2_S_COREML_FP16_MODEL.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/EFFICIENTNET_V2_S_COREML_FP32_MODEL.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/EFFICIENTNET_V2_S_QUANTIZED.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/EFFICIENTNET_V2_S_XNNPACK_FP32_MODEL.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/EFFICIENTNET_V2_S_XNNPACK_INT8_MODEL.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/FASTSAM_S.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/FASTSAM_S_COREML_FP16_MODEL.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/FASTSAM_S_XNNPACK_FP32_MODEL.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/FASTSAM_X.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/FASTSAM_X_COREML_FP16_MODEL.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/FASTSAM_X_XNNPACK_FP32_MODEL.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/FCN_RESNET101.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/FCN_RESNET101_QUANTIZED.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/FCN_RESNET50.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/FCN_RESNET50_QUANTIZED.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/FSMN_VAD.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/HAMMER2_1_0_5B.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/HAMMER2_1_0_5B_QUANTIZED.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/HAMMER2_1_1_5B.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/HAMMER2_1_1_5B_QUANTIZED.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/HAMMER2_1_3B.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/HAMMER2_1_3B_QUANTIZED.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/IMAGENET1K_MEAN.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/IMAGENET1K_STD.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/KOKORO_AMERICAN_ENGLISH_FEMALE_HEART.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/KOKORO_AMERICAN_ENGLISH_FEMALE_RIVER.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/KOKORO_AMERICAN_ENGLISH_FEMALE_SARAH.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/KOKORO_AMERICAN_ENGLISH_MALE_ADAM.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/KOKORO_AMERICAN_ENGLISH_MALE_MICHAEL.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/KOKORO_AMERICAN_ENGLISH_MALE_SANTA.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/KOKORO_BRITISH_ENGLISH_FEMALE_EMMA.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/KOKORO_BRITISH_ENGLISH_MALE_DANIEL.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/KOKORO_FRENCH_FEMALE_SIWIS.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/KOKORO_GERMAN.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/KOKORO_GERMAN_FEMALE_ANNA.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/KOKORO_HINDI_FEMALE_ALPHA.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/KOKORO_HINDI_MALE_OMEGA.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/KOKORO_HINDI_MALE_PSI.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/KOKORO_ITALIAN_FEMALE_SARA.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/KOKORO_ITALIAN_MALE_NICOLA.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/KOKORO_POLISH.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/KOKORO_POLISH_MALE_MATEUSZ.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/KOKORO_PORTUGUESE_FEMALE_DORA.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/KOKORO_PORTUGUESE_MALE_SANTA.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/KOKORO_SPANISH_FEMALE_DORA.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/KOKORO_SPANISH_MALE_ALEX.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/KOKORO_STANDARD.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/LFM2_5_1_2B_INSTRUCT.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/LFM2_5_1_2B_INSTRUCT_QUANTIZED.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/LFM2_5_350M.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/LFM2_5_350M_QUANTIZED.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/LFM2_5_VL_1_6B_QUANTIZED.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/LFM2_5_VL_450M_QUANTIZED.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/LFM2_VL_1_6B_QUANTIZED.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/LFM2_VL_450M_QUANTIZED.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/LLAMA3_2_1B.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/LLAMA3_2_1B_QLORA.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/LLAMA3_2_1B_SPINQUANT.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/LLAMA3_2_3B.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/LLAMA3_2_3B_QLORA.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/LLAMA3_2_3B_SPINQUANT.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/LRASPP_MOBILENET_V3_LARGE.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/LRASPP_MOBILENET_V3_LARGE_QUANTIZED.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/MULTI_QA_MINILM_L6_COS_V1.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/MULTI_QA_MPNET_BASE_DOT_V1.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_ABAZA.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_ADYGHE.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_AFRIKAANS.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_ALBANIAN.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_AVAR.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_AZERBAIJANI.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_BELARUSIAN.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_BOSNIAN.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_BULGARIAN.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_CHECHEN.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_CROATIAN.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_CZECH.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_DANISH.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_DARGWA.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_DUTCH.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_ENGLISH.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_ESTONIAN.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_FRENCH.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_GERMAN.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_HUNGARIAN.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_ICELANDIC.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_INDONESIAN.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_INGUSH.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_IRISH.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_ITALIAN.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_JAPANESE.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_KANNADA.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_KARBADIAN.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_KOREAN.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_KURDISH.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_LAK.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_LATIN.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_LATVIAN.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_LEZGHIAN.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_LITHUANIAN.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_MALAY.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_MALTESE.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_MAORI.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_MONGOLIAN.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_NORWEGIAN.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_OCCITAN.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_PALI.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_POLISH.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_PORTUGUESE.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_ROMANIAN.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_RUSSIAN.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_SERBIAN_CYRILLIC.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_SERBIAN_LATIN.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_SIMPLIFIED_CHINESE.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_SLOVAK.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_SLOVENIAN.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_SPANISH.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_SWAHILI.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_SWEDISH.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_TABASSARAN.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_TAGALOG.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_TAJIK.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_TELUGU.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_TURKISH.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_UKRAINIAN.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_UZBEK.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_VIETNAMESE.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/OCR_WELSH.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/PARAPHRASE_MULTILINGUAL_MINILM_L12_V2_QUANTIZED.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/PHI_4_MINI_4B.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/PHI_4_MINI_4B_QUANTIZED.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/PRIVACY_FILTER_NEMOTRON.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/PRIVACY_FILTER_OPENAI.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/QWEN2_5_0_5B.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/QWEN2_5_0_5B_QUANTIZED.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/QWEN2_5_1_5B.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/QWEN2_5_1_5B_QUANTIZED.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/QWEN2_5_3B.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/QWEN2_5_3B_QUANTIZED.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/QWEN3_0_6B.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/QWEN3_0_6B_QUANTIZED.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/QWEN3_1_7B.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/QWEN3_1_7B_QUANTIZED.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/QWEN3_4B.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/QWEN3_4B_QUANTIZED.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/QWEN3_5_0_8B_QUANTIZED.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/QWEN3_5_2B_QUANTIZED.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/RF_DETR_NANO.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/RF_DETR_NANO_COREML_INT8_MODEL.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/RF_DETR_NANO_SEG.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/RF_DETR_NANO_SEG_COREML_INT8_MODEL.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/RF_DETR_NANO_SEG_XNNPACK_FP32_MODEL.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/RF_DETR_NANO_XNNPACK_FP32_MODEL.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/SELFIE_SEGMENTATION.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/SMOLLM2_1_135M.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/SMOLLM2_1_135M_QUANTIZED.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/SMOLLM2_1_1_7B.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/SMOLLM2_1_1_7B_QUANTIZED.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/SMOLLM2_1_360M.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/SMOLLM2_1_360M_QUANTIZED.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/SPECIAL_TOKENS.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/SSDLITE_320_MOBILENET_V3_LARGE.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/SSDLITE_320_MOBILENET_V3_LARGE_COREML_FP16_MODEL.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/SSDLITE_320_MOBILENET_V3_LARGE_XNNPACK_FP32_MODEL.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/STYLE_TRANSFER_CANDY.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/STYLE_TRANSFER_CANDY_QUANTIZED.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/STYLE_TRANSFER_MOSAIC.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/STYLE_TRANSFER_MOSAIC_QUANTIZED.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/STYLE_TRANSFER_RAIN_PRINCESS.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/STYLE_TRANSFER_RAIN_PRINCESS_QUANTIZED.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/STYLE_TRANSFER_UDNIE.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/STYLE_TRANSFER_UDNIE_QUANTIZED.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/WHISPER_BASE.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/WHISPER_BASE_EN.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/WHISPER_BASE_EN_MODEL_COREML.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/WHISPER_BASE_EN_MODEL_XNNPACK.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/WHISPER_BASE_EN_TOKENIZER.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/WHISPER_BASE_MODEL_COREML.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/WHISPER_BASE_MODEL_XNNPACK.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/WHISPER_BASE_TOKENIZER.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/WHISPER_SMALL.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/WHISPER_SMALL_EN.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/WHISPER_SMALL_EN_MODEL_COREML.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/WHISPER_SMALL_EN_MODEL_XNNPACK.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/WHISPER_SMALL_EN_TOKENIZER.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/WHISPER_SMALL_MODEL_COREML.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/WHISPER_SMALL_MODEL_XNNPACK.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/WHISPER_SMALL_TOKENIZER.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/WHISPER_TINY.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/WHISPER_TINY_EN.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/WHISPER_TINY_EN_MODEL_COREML.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/WHISPER_TINY_EN_MODEL_XNNPACK.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/WHISPER_TINY_EN_TOKENIZER.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/WHISPER_TINY_MODEL_COREML.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/WHISPER_TINY_MODEL_XNNPACK.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/WHISPER_TINY_TOKENIZER.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/YOLO26L.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/YOLO26L_SEG.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/YOLO26M.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/YOLO26M_SEG.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/YOLO26N.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/YOLO26N_POSE.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/YOLO26N_SEG.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/YOLO26S.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/YOLO26S_SEG.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/YOLO26X.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/YOLO26X_SEG.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/isAvailable.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/models.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/06-api-reference/variables/parseToolCall.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/07-other/01-compatibility.mdx delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/07-other/_category_.json delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/08-resource-fetcher/01-usage.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/08-resource-fetcher/02-custom-adapter.md delete mode 100644 docs/versioned_docs/version-0.10.0-legacy/08-resource-fetcher/_category_.json delete mode 100644 docs/versioned_sidebars/version-0.10.0-legacy-sidebars.json delete mode 100644 packages/bare-resource-fetcher/LICENSE delete mode 100644 packages/bare-resource-fetcher/README.md delete mode 100644 packages/bare-resource-fetcher/package.json delete mode 100644 packages/bare-resource-fetcher/src/ResourceFetcher.ts delete mode 100644 packages/bare-resource-fetcher/src/ResourceFetcherUtils.ts delete mode 100644 packages/bare-resource-fetcher/src/constants/directories.ts delete mode 100644 packages/bare-resource-fetcher/src/declarations.d.ts delete mode 100644 packages/bare-resource-fetcher/src/handlers.ts delete mode 100644 packages/bare-resource-fetcher/src/index.ts delete mode 100644 packages/bare-resource-fetcher/tsconfig.json delete mode 100644 packages/expo-resource-fetcher/LICENSE delete mode 100644 packages/expo-resource-fetcher/README.md delete mode 100644 packages/expo-resource-fetcher/package.json delete mode 100644 packages/expo-resource-fetcher/src/ResourceFetcher.ts delete mode 100644 packages/expo-resource-fetcher/src/ResourceFetcherUtils.ts delete mode 100644 packages/expo-resource-fetcher/src/constants/directories.ts delete mode 100644 packages/expo-resource-fetcher/src/handlers.ts delete mode 100644 packages/expo-resource-fetcher/src/index.ts delete mode 100644 packages/expo-resource-fetcher/src/legacy/ResourceFetcher.ts delete mode 100644 packages/expo-resource-fetcher/src/legacy/ResourceFetcherUtils.ts delete mode 100644 packages/expo-resource-fetcher/src/legacy/constants/directories.ts delete mode 100644 packages/expo-resource-fetcher/src/legacy/handlers.ts delete mode 100644 packages/expo-resource-fetcher/src/legacy/index.ts delete mode 100644 packages/expo-resource-fetcher/src/sharedUtils.ts delete mode 100644 packages/expo-resource-fetcher/tsconfig.json delete mode 100644 packages/react-native-executorch-webrtc/LICENSE delete mode 100644 packages/react-native-executorch-webrtc/README.md delete mode 100644 packages/react-native-executorch-webrtc/android/CMakeLists.txt delete mode 100644 packages/react-native-executorch-webrtc/android/build.gradle delete mode 100644 packages/react-native-executorch-webrtc/android/gradle/wrapper/gradle-wrapper.jar delete mode 100644 packages/react-native-executorch-webrtc/android/gradle/wrapper/gradle-wrapper.properties delete mode 100755 packages/react-native-executorch-webrtc/android/gradlew delete mode 100644 packages/react-native-executorch-webrtc/android/gradlew.bat delete mode 100644 packages/react-native-executorch-webrtc/android/src/main/AndroidManifest.xml delete mode 100644 packages/react-native-executorch-webrtc/android/src/main/cpp/FrameProcessorBridge.cpp delete mode 100644 packages/react-native-executorch-webrtc/android/src/main/java/com/executorch/webrtc/ExecutorchFrameProcessor.kt delete mode 100644 packages/react-native-executorch-webrtc/android/src/main/java/com/executorch/webrtc/ExecutorchFrameProcessorFactory.kt delete mode 100644 packages/react-native-executorch-webrtc/android/src/main/java/com/executorch/webrtc/ExecutorchWebRTC.kt delete mode 100644 packages/react-native-executorch-webrtc/android/src/main/java/com/executorch/webrtc/ExecutorchWebRTCModule.kt delete mode 100644 packages/react-native-executorch-webrtc/android/src/main/java/com/executorch/webrtc/ExecutorchWebRTCPackage.kt delete mode 100644 packages/react-native-executorch-webrtc/android/src/main/java/com/executorch/webrtc/gl/FullscreenQuad.java delete mode 100644 packages/react-native-executorch-webrtc/android/src/main/java/com/executorch/webrtc/gl/GlBlurRenderer.java delete mode 100644 packages/react-native-executorch-webrtc/android/src/main/java/com/executorch/webrtc/gl/GlFramebuffer.java delete mode 100644 packages/react-native-executorch-webrtc/android/src/main/java/com/executorch/webrtc/gl/GlProgram.java delete mode 100644 packages/react-native-executorch-webrtc/ios/ExecutorchFrameProcessor.h delete mode 100644 packages/react-native-executorch-webrtc/ios/ExecutorchFrameProcessor.mm delete mode 100644 packages/react-native-executorch-webrtc/ios/ExecutorchWebRTC.h delete mode 100644 packages/react-native-executorch-webrtc/ios/ExecutorchWebRTC.mm delete mode 100644 packages/react-native-executorch-webrtc/package.json delete mode 100644 packages/react-native-executorch-webrtc/react-native-executorch-webrtc.podspec delete mode 100644 packages/react-native-executorch-webrtc/react-native.config.js delete mode 100644 packages/react-native-executorch-webrtc/src/BackgroundBlur.ts delete mode 100644 packages/react-native-executorch-webrtc/src/NativeBackgroundBlur.ts delete mode 100644 packages/react-native-executorch-webrtc/src/index.ts delete mode 100644 packages/react-native-executorch-webrtc/src/useBackgroundBlur.ts delete mode 100644 packages/react-native-executorch-webrtc/tsconfig.json delete mode 100644 packages/react-native-executorch/__tests__/legacy/installGuard.test.ts delete mode 100644 packages/react-native-executorch/android/src/main/java/com/swmansion/rnexecutorch/ETInstaller.kt delete mode 100644 packages/react-native-executorch/android/src/main/java/com/swmansion/rnexecutorch/ETInstallerUnavailable.kt delete mode 100644 packages/react-native-executorch/legacy/android/ETInstaller.kt delete mode 100644 packages/react-native-executorch/legacy/android/ETInstallerModule.cpp delete mode 100644 packages/react-native-executorch/legacy/android/ETInstallerModule.h delete mode 100644 packages/react-native-executorch/legacy/android/ETInstallerUnavailable.kt delete mode 100644 packages/react-native-executorch/legacy/android/EmulatorDetection.h delete mode 100644 packages/react-native-executorch/legacy/cpp/ada/ada.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/ada/ada.h delete mode 100644 packages/react-native-executorch/legacy/cpp/pfft/pfft.c delete mode 100644 packages/react-native-executorch/legacy/cpp/pfft/pfft.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/Error.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/ErrorCodes.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/Log.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/RnExecutorchInstaller.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/RnExecutorchInstaller.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/TokenizerModule.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/TokenizerModule.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/data_processing/FFT.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/data_processing/FFT.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/data_processing/FileUtils.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/data_processing/ImageProcessing.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/data_processing/ImageProcessing.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/data_processing/Numerical.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/data_processing/Numerical.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/data_processing/Sequential.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/data_processing/base64.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/data_processing/base64.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/data_processing/dsp.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/data_processing/dsp.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/data_processing/gzip.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/data_processing/gzip.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/host_objects/JSTensorViewIn.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/host_objects/JSTensorViewOut.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/host_objects/JsiConversions.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/host_objects/ModelHostObject.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/jsi/JsiHostObject.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/jsi/JsiHostObject.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/jsi/OwningArrayBuffer.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/jsi/Promise.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/jsi/Promise.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/jsi/RuntimeAwareCache.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/jsi/RuntimeLifecycleMonitor.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/jsi/RuntimeLifecycleMonitor.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/metaprogramming/ConstructorHelpers.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/metaprogramming/ContainerHelpers.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/metaprogramming/FunctionHelpers.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/metaprogramming/TypeConcepts.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/BaseModel.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/BaseModel.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/VisionModel.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/VisionModel.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/classification/Classification.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/classification/Classification.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/embeddings/BaseEmbeddings.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/embeddings/BaseEmbeddings.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/embeddings/image/ImageEmbeddings.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/embeddings/image/ImageEmbeddings.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/embeddings/text/TextEmbeddings.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/embeddings/text/TextEmbeddings.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/instance_segmentation/BaseInstanceSegmentation.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/instance_segmentation/BaseInstanceSegmentation.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/instance_segmentation/Types.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/llm/LLM.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/llm/LLM.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/llm/Types.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/object_detection/Constants.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/object_detection/ObjectDetection.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/object_detection/ObjectDetection.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/object_detection/Types.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/ocr/CTCLabelConverter.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/ocr/CTCLabelConverter.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/ocr/Constants.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/ocr/Detector.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/ocr/Detector.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/ocr/OCR.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/ocr/OCR.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/ocr/RecognitionHandler.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/ocr/RecognitionHandler.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/ocr/Recognizer.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/ocr/Recognizer.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/ocr/Types.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/ocr/utils/DetectorUtils.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/ocr/utils/DetectorUtils.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/ocr/utils/RecognitionHandlerUtils.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/ocr/utils/RecognitionHandlerUtils.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/ocr/utils/RecognizerUtils.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/ocr/utils/RecognizerUtils.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/pose_estimation/PoseEstimation.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/pose_estimation/PoseEstimation.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/pose_estimation/Types.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/privacy_filter/PrivacyFilter.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/privacy_filter/PrivacyFilter.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/privacy_filter/Types.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/privacy_filter/Viterbi.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/privacy_filter/Viterbi.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/semantic_segmentation/BaseSemanticSegmentation.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/semantic_segmentation/BaseSemanticSegmentation.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/semantic_segmentation/Types.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/speech_to_text/SpeechToText.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/speech_to_text/SpeechToText.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/speech_to_text/common/schema/ASR.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/speech_to_text/common/schema/OnlineASR.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/speech_to_text/common/types/GenerationResult.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/speech_to_text/common/types/Options.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/speech_to_text/common/types/ProcessResult.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/speech_to_text/common/types/Segment.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/speech_to_text/common/types/Token.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/speech_to_text/common/types/TranscriptionResult.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/speech_to_text/common/types/Word.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/speech_to_text/whisper/ASR.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/speech_to_text/whisper/ASR.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/speech_to_text/whisper/Constants.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/speech_to_text/whisper/OnlineASR.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/speech_to_text/whisper/OnlineASR.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/speech_to_text/whisper/Params.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/speech_to_text/whisper/Utils.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/style_transfer/StyleTransfer.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/style_transfer/StyleTransfer.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/style_transfer/Types.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/text_to_image/Constants.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/text_to_image/Decoder.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/text_to_image/Decoder.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/text_to_image/Encoder.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/text_to_image/Encoder.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/text_to_image/Scheduler.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/text_to_image/Scheduler.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/text_to_image/TextToImage.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/text_to_image/TextToImage.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/text_to_image/UNet.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/text_to_image/UNet.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/text_to_speech/TextToSpeech.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/text_to_speech/kokoro/Constants.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/text_to_speech/kokoro/DurationPredictor.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/text_to_speech/kokoro/DurationPredictor.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/text_to_speech/kokoro/Kokoro.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/text_to_speech/kokoro/Kokoro.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/text_to_speech/kokoro/Params.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/text_to_speech/kokoro/Partitioner.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/text_to_speech/kokoro/Partitioner.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/text_to_speech/kokoro/Synthesizer.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/text_to_speech/kokoro/Synthesizer.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/text_to_speech/kokoro/Types.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/text_to_speech/kokoro/Utils.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/text_to_speech/kokoro/Utils.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/vertical_ocr/VerticalDetector.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/vertical_ocr/VerticalDetector.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/vertical_ocr/VerticalOCR.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/vertical_ocr/VerticalOCR.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/voice_activity_detection/Constants.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/voice_activity_detection/Types.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/voice_activity_detection/Utils.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/voice_activity_detection/Utils.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/voice_activity_detection/VoiceActivityDetection.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/models/voice_activity_detection/VoiceActivityDetection.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/CMakeLists.txt delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/README.md delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/integration/BaseModelTest.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/integration/BaseModelTests.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/integration/ClassificationTest.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/integration/ImageEmbeddingsTest.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/integration/InstanceSegmentationTest.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/integration/LLMTest.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/integration/OCRTest.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/integration/ObjectDetectionTest.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/integration/PoseEstimationTest.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/integration/SemanticSegmentationTest.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/integration/SpeechToTextTest.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/integration/StyleTransferTest.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/integration/TextEmbeddingsTest.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/integration/TextToImageTest.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/integration/TextToSpeechTest.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/integration/TokenizerModuleTest.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/integration/VerticalOCRTest.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/integration/VisionModelTest.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/integration/VisionModelTests.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/integration/VoiceActivityDetectionTest.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/integration/assets/test_audio_float.raw delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/integration/assets/test_speech.raw delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/integration/assets/we_are_software_mansion.jpg delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/integration/libs/libfbjni.so delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/integration/stubs/StubRunner.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/integration/stubs/jsi_stubs.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/integration/utils/TestUtils.h delete mode 100755 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/run_tests.sh delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/unit/FileUtilsTest.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/unit/FrameProcessorTest.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/unit/FrameTransformTest.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/unit/ImageProcessingTest.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/unit/LogTest.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/unit/NumericalTest.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/unit/RunnerTest.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/tests/unit/SamplerTest.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/threads/GlobalThreadPool.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/threads/HighPerformanceThreadPool.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/threads/utils/ThreadUtils.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/utils/FrameExtractor.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/utils/FrameExtractor.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/utils/FrameProcessor.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/utils/FrameProcessor.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/utils/FrameTransform.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/utils/FrameTransform.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/utils/computer_vision/Processing.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/utils/computer_vision/Processing.h delete mode 100644 packages/react-native-executorch/legacy/cpp/rnexecutorch/utils/computer_vision/Types.h delete mode 100644 packages/react-native-executorch/legacy/cpp/runner/arange_util.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/runner/arange_util.h delete mode 100644 packages/react-native-executorch/legacy/cpp/runner/base_llm_runner.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/runner/base_llm_runner.h delete mode 100644 packages/react-native-executorch/legacy/cpp/runner/constants.h delete mode 100644 packages/react-native-executorch/legacy/cpp/runner/encoders/audio_encoder.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/runner/encoders/audio_encoder.h delete mode 100644 packages/react-native-executorch/legacy/cpp/runner/encoders/iencoder.h delete mode 100644 packages/react-native-executorch/legacy/cpp/runner/encoders/vision_encoder.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/runner/encoders/vision_encoder.h delete mode 100644 packages/react-native-executorch/legacy/cpp/runner/io_manager.h delete mode 100644 packages/react-native-executorch/legacy/cpp/runner/irunner.h delete mode 100644 packages/react-native-executorch/legacy/cpp/runner/kernel_includes.h delete mode 100644 packages/react-native-executorch/legacy/cpp/runner/multimodal_decoder_runner.h delete mode 100644 packages/react-native-executorch/legacy/cpp/runner/multimodal_input.h delete mode 100644 packages/react-native-executorch/legacy/cpp/runner/multimodal_prefiller.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/runner/multimodal_prefiller.h delete mode 100644 packages/react-native-executorch/legacy/cpp/runner/multimodal_runner.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/runner/multimodal_runner.h delete mode 100644 packages/react-native-executorch/legacy/cpp/runner/sampler.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/runner/sampler.h delete mode 100644 packages/react-native-executorch/legacy/cpp/runner/stats.h delete mode 100644 packages/react-native-executorch/legacy/cpp/runner/text_decoder_runner.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/runner/text_decoder_runner.h delete mode 100644 packages/react-native-executorch/legacy/cpp/runner/text_prefiller.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/runner/text_prefiller.h delete mode 100644 packages/react-native-executorch/legacy/cpp/runner/text_runner.cpp delete mode 100644 packages/react-native-executorch/legacy/cpp/runner/text_runner.h delete mode 100644 packages/react-native-executorch/legacy/cpp/runner/text_token_generator.h delete mode 100644 packages/react-native-executorch/legacy/cpp/runner/util.h delete mode 100644 packages/react-native-executorch/legacy/ios/ETInstaller.h delete mode 100644 packages/react-native-executorch/legacy/ios/ETInstaller.mm delete mode 100644 packages/react-native-executorch/legacy/package.json delete mode 100644 packages/react-native-executorch/legacy/src/common/Logger.ts delete mode 100644 packages/react-native-executorch/legacy/src/constants/classification.ts delete mode 100644 packages/react-native-executorch/legacy/src/constants/commonVision.ts delete mode 100644 packages/react-native-executorch/legacy/src/constants/llmDefaults.ts delete mode 100644 packages/react-native-executorch/legacy/src/constants/modelRegistry.ts delete mode 100644 packages/react-native-executorch/legacy/src/constants/modelUrls.ts delete mode 100644 packages/react-native-executorch/legacy/src/constants/ocr/models.ts delete mode 100644 packages/react-native-executorch/legacy/src/constants/ocr/symbols.ts delete mode 100644 packages/react-native-executorch/legacy/src/constants/poseEstimation.ts delete mode 100644 packages/react-native-executorch/legacy/src/constants/privacyFilterLabels.ts delete mode 100644 packages/react-native-executorch/legacy/src/constants/resourceFetcher.ts delete mode 100644 packages/react-native-executorch/legacy/src/constants/tts/models.ts delete mode 100644 packages/react-native-executorch/legacy/src/constants/tts/voices.ts delete mode 100644 packages/react-native-executorch/legacy/src/constants/versions.ts delete mode 100644 packages/react-native-executorch/legacy/src/controllers/BaseOCRController.ts delete mode 100644 packages/react-native-executorch/legacy/src/controllers/LLMController.ts delete mode 100644 packages/react-native-executorch/legacy/src/controllers/OCRController.ts delete mode 100644 packages/react-native-executorch/legacy/src/controllers/VerticalOCRController.ts delete mode 100644 packages/react-native-executorch/legacy/src/errors/ErrorCodes.ts delete mode 100644 packages/react-native-executorch/legacy/src/errors/errorUtils.ts delete mode 100644 packages/react-native-executorch/legacy/src/hooks/computer_vision/useClassification.ts delete mode 100644 packages/react-native-executorch/legacy/src/hooks/computer_vision/useImageEmbeddings.ts delete mode 100644 packages/react-native-executorch/legacy/src/hooks/computer_vision/useInstanceSegmentation.ts delete mode 100644 packages/react-native-executorch/legacy/src/hooks/computer_vision/useOCR.ts delete mode 100644 packages/react-native-executorch/legacy/src/hooks/computer_vision/useObjectDetection.ts delete mode 100644 packages/react-native-executorch/legacy/src/hooks/computer_vision/usePoseEstimation.ts delete mode 100644 packages/react-native-executorch/legacy/src/hooks/computer_vision/useSemanticSegmentation.ts delete mode 100644 packages/react-native-executorch/legacy/src/hooks/computer_vision/useStyleTransfer.ts delete mode 100644 packages/react-native-executorch/legacy/src/hooks/computer_vision/useTextToImage.ts delete mode 100644 packages/react-native-executorch/legacy/src/hooks/computer_vision/useVerticalOCR.ts delete mode 100644 packages/react-native-executorch/legacy/src/hooks/general/useExecutorchModule.ts delete mode 100644 packages/react-native-executorch/legacy/src/hooks/natural_language_processing/useLLM.ts delete mode 100644 packages/react-native-executorch/legacy/src/hooks/natural_language_processing/usePrivacyFilter.ts delete mode 100644 packages/react-native-executorch/legacy/src/hooks/natural_language_processing/useSpeechToText.ts delete mode 100644 packages/react-native-executorch/legacy/src/hooks/natural_language_processing/useTextEmbeddings.ts delete mode 100644 packages/react-native-executorch/legacy/src/hooks/natural_language_processing/useTextToSpeech.ts delete mode 100644 packages/react-native-executorch/legacy/src/hooks/natural_language_processing/useTokenizer.ts delete mode 100644 packages/react-native-executorch/legacy/src/hooks/natural_language_processing/useVAD.ts delete mode 100644 packages/react-native-executorch/legacy/src/hooks/useModule.ts delete mode 100644 packages/react-native-executorch/legacy/src/hooks/useModuleFactory.ts delete mode 100644 packages/react-native-executorch/legacy/src/index.ts delete mode 100644 packages/react-native-executorch/legacy/src/modules/BaseModule.ts delete mode 100644 packages/react-native-executorch/legacy/src/modules/computer_vision/ClassificationModule.ts delete mode 100644 packages/react-native-executorch/legacy/src/modules/computer_vision/ImageEmbeddingsModule.ts delete mode 100644 packages/react-native-executorch/legacy/src/modules/computer_vision/InstanceSegmentationModule.ts delete mode 100644 packages/react-native-executorch/legacy/src/modules/computer_vision/OCRModule.ts delete mode 100644 packages/react-native-executorch/legacy/src/modules/computer_vision/ObjectDetectionModule.ts delete mode 100644 packages/react-native-executorch/legacy/src/modules/computer_vision/PoseEstimationModule.ts delete mode 100644 packages/react-native-executorch/legacy/src/modules/computer_vision/SemanticSegmentationModule.ts delete mode 100644 packages/react-native-executorch/legacy/src/modules/computer_vision/StyleTransferModule.ts delete mode 100644 packages/react-native-executorch/legacy/src/modules/computer_vision/TextToImageModule.ts delete mode 100644 packages/react-native-executorch/legacy/src/modules/computer_vision/VerticalOCRModule.ts delete mode 100644 packages/react-native-executorch/legacy/src/modules/computer_vision/VisionLabeledModule.ts delete mode 100644 packages/react-native-executorch/legacy/src/modules/computer_vision/VisionModule.ts delete mode 100644 packages/react-native-executorch/legacy/src/modules/general/ExecutorchModule.ts delete mode 100644 packages/react-native-executorch/legacy/src/modules/natural_language_processing/LLMModule.ts delete mode 100644 packages/react-native-executorch/legacy/src/modules/natural_language_processing/PrivacyFilterModule.ts delete mode 100644 packages/react-native-executorch/legacy/src/modules/natural_language_processing/SpeechToTextModule.ts delete mode 100644 packages/react-native-executorch/legacy/src/modules/natural_language_processing/TextEmbeddingsModule.ts delete mode 100644 packages/react-native-executorch/legacy/src/modules/natural_language_processing/TextToSpeechModule.ts delete mode 100644 packages/react-native-executorch/legacy/src/modules/natural_language_processing/TokenizerModule.ts delete mode 100644 packages/react-native-executorch/legacy/src/modules/natural_language_processing/VADModule.ts delete mode 100644 packages/react-native-executorch/legacy/src/native/NativeETInstaller.ts delete mode 100644 packages/react-native-executorch/legacy/src/native/RnExecutorchModules.ts delete mode 100644 packages/react-native-executorch/legacy/src/types/classification.ts delete mode 100644 packages/react-native-executorch/legacy/src/types/common.ts delete mode 100644 packages/react-native-executorch/legacy/src/types/computerVision.ts delete mode 100644 packages/react-native-executorch/legacy/src/types/executorchModule.ts delete mode 100644 packages/react-native-executorch/legacy/src/types/genericImageSegmentation.ts delete mode 100644 packages/react-native-executorch/legacy/src/types/imageEmbeddings.ts delete mode 100644 packages/react-native-executorch/legacy/src/types/instanceSegmentation.ts delete mode 100644 packages/react-native-executorch/legacy/src/types/llm.ts delete mode 100644 packages/react-native-executorch/legacy/src/types/objectDetection.ts delete mode 100644 packages/react-native-executorch/legacy/src/types/ocr.ts delete mode 100644 packages/react-native-executorch/legacy/src/types/poseEstimation.ts delete mode 100644 packages/react-native-executorch/legacy/src/types/privacyFilter.ts delete mode 100644 packages/react-native-executorch/legacy/src/types/semanticSegmentation.ts delete mode 100644 packages/react-native-executorch/legacy/src/types/stt.ts delete mode 100644 packages/react-native-executorch/legacy/src/types/styleTransfer.ts delete mode 100644 packages/react-native-executorch/legacy/src/types/textEmbeddings.ts delete mode 100644 packages/react-native-executorch/legacy/src/types/tokenizer.ts delete mode 100644 packages/react-native-executorch/legacy/src/types/tti.ts delete mode 100644 packages/react-native-executorch/legacy/src/types/tts.ts delete mode 100644 packages/react-native-executorch/legacy/src/types/vad.ts delete mode 100644 packages/react-native-executorch/legacy/src/utils/BaseResourceFetcherClass.ts delete mode 100644 packages/react-native-executorch/legacy/src/utils/ResourceFetcher.ts delete mode 100644 packages/react-native-executorch/legacy/src/utils/ResourceFetcherUtils.ts delete mode 100644 packages/react-native-executorch/legacy/src/utils/commonVision.ts delete mode 100644 packages/react-native-executorch/legacy/src/utils/labelUtils.ts delete mode 100644 packages/react-native-executorch/legacy/src/utils/llm.ts delete mode 100644 packages/react-native-executorch/legacy/src/utils/llms/context_strategy/MessageCountContextStrategy.ts delete mode 100644 packages/react-native-executorch/legacy/src/utils/llms/context_strategy/NoopContextStrategy.ts delete mode 100644 packages/react-native-executorch/legacy/src/utils/llms/context_strategy/SlidingWindowContextStrategy.ts delete mode 100644 packages/react-native-executorch/legacy/src/utils/llms/context_strategy/index.ts delete mode 100644 packages/react-native-executorch/legacy/src/utils/segmentAnythingPrompts.ts delete mode 100644 packages/react-native-executorch/legacy/tsconfig.json delete mode 100644 packages/react-native-executorch/src/native/NativeETInstaller.ts diff --git a/.eslintrc.js b/.eslintrc.js index 0fe345ac33..9400740e6f 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -73,21 +73,6 @@ module.exports = { 'no-console': 'warn', }, }, - { - // ============================================================================== - // LEGACY SUPPORT: disable v0.10 lint rules for legacy code (remove when legacy is dropped) - // ============================================================================== - files: [ - 'packages/react-native-executorch/legacy/**/*.{js,jsx,ts,tsx}', - 'packages/bare-resource-fetcher/**/*.{js,jsx,ts,tsx}', - 'packages/expo-resource-fetcher/**/*.{js,jsx,ts,tsx}', - ], - rules: { - 'jsdoc/match-description': 'off', - 'camelcase': 'off', - 'eslint-comments/no-unused-disable': 'off', - }, - }, { // The JSDoc rules exist to keep the generated API reference complete. // Test helpers are not part of that surface, and requiring a tag per diff --git a/.gitattributes b/.gitattributes index 9a35d1c7fe..41b0fed59b 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2,11 +2,10 @@ # specific for windows script files *.bat text eol=crlf -# Exclude apps, third-party, and legacy code from language stats & line counts +# Exclude apps and third-party code from language stats & line counts apps/** linguist-vendored third-party/** linguist-vendored **/third-party/** linguist-vendored -**/legacy/** linguist-vendored # Exclude documentation from codebase language stats docs/** linguist-documentation \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4a6860e26d..7b46ab8cf9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -70,11 +70,11 @@ jobs: # eslint, tsc and jest read none of the C++ trees, and none of the # documentation. - ts_irrelevant='^(docs/|[^/]+\.md$|packages/react-native-executorch/(cpp|legacy/cpp)/)' + ts_irrelevant='^(docs/|[^/]+\.md$|packages/react-native-executorch/cpp/)' if echo "$files" | grep -qvE "$ts_irrelevant"; then ts=true; else ts=false; fi # The C++ suite compiles cpp/ only (cpp/tests/CMakeLists.txt globs - # core/ and extensions/, never legacy/). The rest of this list is what + # core/ and extensions/). The rest of this list is what # decides which ExecuTorch release it builds and links against: # package.json carries nativeLibsVersion, which download-libs.js reads # to pick the headers release, and the CI job cross-checks that @@ -147,7 +147,7 @@ jobs: run: yarn lint - name: Typecheck files - run: yarn workspaces foreach --all --exclude react-native-executorch-webrtc --topological-dev run prepare && yarn typecheck + run: yarn workspaces foreach --all --topological-dev run prepare && yarn typecheck build-library: needs: changes @@ -161,7 +161,7 @@ jobs: uses: ./.github/actions/setup - name: Build all packages - run: yarn workspaces foreach --all --exclude react-native-executorch-webrtc --topological-dev run prepare + run: yarn workspaces foreach --all --topological-dev run prepare native-tests: name: C++ unit tests diff --git a/.github/workflows/npm-publish-satellites.yml b/.github/workflows/npm-publish-satellites.yml deleted file mode 100644 index 0513a6ba0b..0000000000 --- a/.github/workflows/npm-publish-satellites.yml +++ /dev/null @@ -1,140 +0,0 @@ -name: NPM publish satellite packages - -on: - workflow_dispatch: - inputs: - package: - description: Package to publish. - type: choice - options: - - react-native-executorch-bare-resource-fetcher - - react-native-executorch-expo-resource-fetcher - - react-native-executorch-webrtc - required: true - release-type: - description: Type of release to publish. - type: choice - options: [stable, nightly, beta, alpha, rc] - default: stable - version: - description: Explicit version in x.y.z format (leave empty to use the version in the package's package.json). - type: string - required: false - default: '' - perform-git-operations: - description: Create and push the release commit + tag. - type: boolean - default: false - dry-run: - description: Dry run — no actual publish or git push. - type: boolean - default: true - -permissions: - id-token: write - contents: read - -concurrency: - group: publish-${{ inputs.package }}-${{ github.ref }} - cancel-in-progress: false - -jobs: - publish: - if: github.repository == 'software-mansion/react-native-executorch' - runs-on: ubuntu-latest - environment: deployment - env: - # The core package's postinstall downloads the native artifacts. Packing a - # satellite runs tsc against the core's type declarations and needs none - # of them. - RNET_SKIP_DOWNLOAD: 1 - permissions: - # `contents: write` is required when perform-git-operations pushes a tag. - contents: write - id-token: write - steps: - - name: Check out - uses: actions/checkout@v6 - - - name: Setup Node - uses: actions/setup-node@v6 - with: - node-version: 24 - registry-url: https://registry.npmjs.org/ - - # The action infers a stable version from the branch name, matching - # /^(\d+)\.(\d+)-stable$/ (see version-utils.js). This repo names its - # release branches release/0.9, so inference throws "Failed to parse - # stable version from branch" on every branch it could run from, main - # included. Resolve it here instead: the package.json version is what - # RELEASE.md already tells you to set, and it is what the core publish - # workflow uses. An explicit input still wins. - - name: Resolve the version to publish - id: version - env: - INPUT_VERSION: ${{ inputs.version }} - PACKAGE: ${{ inputs.package }} - run: | - case "$PACKAGE" in - react-native-executorch-bare-resource-fetcher) DIR=packages/bare-resource-fetcher ;; - react-native-executorch-expo-resource-fetcher) DIR=packages/expo-resource-fetcher ;; - react-native-executorch-webrtc) DIR=packages/react-native-executorch-webrtc ;; - *) echo "::error::unknown package: $PACKAGE"; exit 1 ;; - esac - - if [ -n "$INPUT_VERSION" ]; then - VERSION="$INPUT_VERSION" - echo "using the version input: $VERSION" - else - VERSION=$(jq -r .version "$DIR/package.json") - echo "using $DIR/package.json: $VERSION" - fi - - if ! echo "$VERSION" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+$'; then - echo "::error::expected x.y.z, got '$VERSION'" - exit 1 - fi - echo "version=$VERSION" >> "$GITHUB_OUTPUT" - - - name: Publish react-native-executorch-bare-resource-fetcher - if: ${{ inputs.package == 'react-native-executorch-bare-resource-fetcher' }} - uses: software-mansion/npm-package-publish@22b6e632b4310c5c061a047bccc99d0cea88d2bb - with: - package-name: 'react-native-executorch-bare-resource-fetcher' - package-json-path: 'packages/bare-resource-fetcher/package.json' - # `workspaces focus` installs this satellite and the workspaces it - # depends on, instead of the whole monorepo: the root globs pull in - # eight React Native example apps, 1660 packages and 597 MiB, to build - # one small package. Satellites type-check against the core package's - # type declarations, so it still gets built before the satellite packs. - install-dependencies-command: 'yarn workspaces focus react-native-executorch-bare-resource-fetcher && yarn workspace react-native-executorch prepare' - release-type: ${{ inputs.release-type }} - version: ${{ steps.version.outputs.version }} - perform-git-operations: ${{ inputs.perform-git-operations }} - dry-run: ${{ inputs.dry-run }} - - - name: Publish react-native-executorch-expo-resource-fetcher - if: ${{ inputs.package == 'react-native-executorch-expo-resource-fetcher' }} - uses: software-mansion/npm-package-publish@22b6e632b4310c5c061a047bccc99d0cea88d2bb - with: - package-name: 'react-native-executorch-expo-resource-fetcher' - package-json-path: 'packages/expo-resource-fetcher/package.json' - # See the first satellite above for why this is a focused install. - install-dependencies-command: 'yarn workspaces focus react-native-executorch-expo-resource-fetcher && yarn workspace react-native-executorch prepare' - release-type: ${{ inputs.release-type }} - version: ${{ steps.version.outputs.version }} - perform-git-operations: ${{ inputs.perform-git-operations }} - dry-run: ${{ inputs.dry-run }} - - - name: Publish react-native-executorch-webrtc - if: ${{ inputs.package == 'react-native-executorch-webrtc' }} - uses: software-mansion/npm-package-publish@22b6e632b4310c5c061a047bccc99d0cea88d2bb - with: - package-name: 'react-native-executorch-webrtc' - package-json-path: 'packages/react-native-executorch-webrtc/package.json' - # See the first satellite above for why this is a focused install. - install-dependencies-command: 'yarn workspaces focus react-native-executorch-webrtc && yarn workspace react-native-executorch prepare' - release-type: ${{ inputs.release-type }} - version: ${{ steps.version.outputs.version }} - perform-git-operations: ${{ inputs.perform-git-operations }} - dry-run: ${{ inputs.dry-run }} diff --git a/.github/workflows/npm-publish.yml b/.github/workflows/npm-publish.yml index 03cf204010..95303d4b91 100644 --- a/.github/workflows/npm-publish.yml +++ b/.github/workflows/npm-publish.yml @@ -78,7 +78,7 @@ jobs: if: ${{ env.EXECUTORCH_VERSION == 'PLACEHOLDER' }} run: exit 1 # this should never happen - # The root workspaces glob is packages/* + apps/* + apps/legacy/*, so a + # The root workspaces glob is packages/* + apps/*, so a # plain `yarn install` pulled 1659 packages (597 MiB) to build one of # them: 164s of a 197s job, against 19s for the actual build. `workspaces # focus` installs only this package's tree; it is built into Yarn 4, the diff --git a/.gitignore b/.gitignore index 83eef27ecd..384eb8ba29 100644 --- a/.gitignore +++ b/.gitignore @@ -92,11 +92,6 @@ ios/generated android/generated apps/*/ios/ apps/*/android/ -# === LEGACY SUPPORT: Expo prebuild directories for legacy apps (remove when legacy apps are dropped) === -apps/legacy/*/ios/ -apps/legacy/*/android/ -!apps/legacy/bare-rn/ios/ -!apps/legacy/bare-rn/android/ **/Pods/ # generated TypeDoc API reference (regenerated at build time) diff --git a/LEGACY_REMOVAL.md b/LEGACY_REMOVAL.md deleted file mode 100644 index 6300520065..0000000000 --- a/LEGACY_REMOVAL.md +++ /dev/null @@ -1,218 +0,0 @@ -# Removing Legacy Support Checklist - -This document details all directories, files, configurations, and dependencies to remove or clean up when dropping legacy API support (`react-native-executorch/legacy` and `0.10.0-legacy`) from the repository. - -Every legacy touchpoint in the codebase is demarcated with `// === LEGACY SUPPORT ===` or `# === LEGACY SUPPORT ===`. - ---- - -## 1. Packages & Directories to Delete - -### Example Apps - -- [ ] Delete `apps/legacy/` completely: - ```bash - rm -rf apps/legacy - ``` - -### Library Legacy Code - -- [ ] Delete `packages/react-native-executorch/legacy/` completely: - ```bash - rm -rf packages/react-native-executorch/legacy - ``` - -### Obsolete Resource Fetcher Packages - -In the rewrite, resource fetching/caching was moved directly into core (`packages/react-native-executorch/src/fetcher/`). The standalone fetcher packages only exist to support the legacy example apps and can be completely removed: - -- [ ] Delete `packages/expo-resource-fetcher/` completely: - ```bash - rm -rf packages/expo-resource-fetcher - ``` -- [ ] Delete `packages/bare-resource-fetcher/` completely: - ```bash - rm -rf packages/bare-resource-fetcher - ``` - -### Documentation - -- [ ] Delete legacy versioned docs and sidebars: - ```bash - rm -rf docs/versioned_docs/version-0.10.0-legacy - rm -rf docs/versioned_sidebars/version-0.10.0-legacy-sidebars.json - ``` -- [ ] In `docs/versions.json`, remove `"0.10.0-legacy"`. -- [ ] In `docs/docusaurus.config.js`, remove: - - `lastVersion: 'current'` (or revert to standard versioning) - - `'0.10.0-legacy'` entry and comment under `versions` - - The `current` label override if no longer needed -- [ ] In `docs/docs/01-fundamentals/03-migrating-from-v0-9.md`, remove the legacy migration path Option A and link to `0.10.0-legacy`. -- [ ] In `.gitattributes`, remove `**/legacy/** linguist-vendored` and `docs/versioned_docs/version-0.10.0-legacy/** linguist-vendored` if present. - ---- - -## 2. Files to Delete - -- [ ] `packages/react-native-executorch/src/native/NativeETInstaller.ts` -- [ ] `packages/react-native-executorch/android/src/main/java/com/swmansion/rnexecutorch/ETInstaller.kt` -- [ ] `packages/react-native-executorch/android/src/main/java/com/swmansion/rnexecutorch/ETInstallerUnavailable.kt` - ---- - -## 3. Configuration Edits - -### Root `package.json` - -- [ ] Under `"workspaces" -> "packages"`, remove: - - `"apps/legacy/*"` - - `"// === LEGACY SUPPORT: workspaces ==="` - -### Root `.gitignore` - -- [ ] Remove the `# === LEGACY SUPPORT ===` section: - ```gitignore - apps/legacy/*/ios/ - apps/legacy/*/android/ - !apps/legacy/bare-rn/ios/ - !apps/legacy/bare-rn/android/ - ``` - -### Root `.eslintrc.js` - -- [ ] Remove the `overrides` block targeting `"packages/react-native-executorch/legacy/**/*"` and `"apps/legacy/**/*"`. - -### `packages/react-native-executorch/package.json` - -- [ ] In `"exports"`, remove: - - `"./legacy": { ... }` - - `"// === LEGACY SUPPORT: exports ==="` -- [ ] In `"files"`, remove: - - `"legacy"` - - `"!legacy/cpp/**/tests"` - - `"// === LEGACY SUPPORT: files ==="` -- [ ] In `"scripts"`, change `"prepare"` from: - ```json - "prepare": "bob build && tsc -p legacy/tsconfig.json" - ``` - to: - ```json - "prepare": "bob build" - ``` - and remove `"// === LEGACY SUPPORT: prepare script ==="`. -- [ ] In `"dependencies"`, remove legacy-only dependencies: - - `"jsonrepair"` - - `"jsonschema"` - - `"react-native-device-info"` - - `"zod"` - - `"// === LEGACY SUPPORT: dependencies ==="` -- [ ] In `"peerDependencies"` and `"peerDependenciesMeta"`, remove: - - `"@kesha-antonov/react-native-background-downloader"` - - `"// === LEGACY SUPPORT: peerDependencies ==="` - -### `packages/react-native-executorch/tsconfig.json` - -- [ ] Re-enable `verbatimModuleSyntax: true` (or remove `verbatimModuleSyntax: false`). - -### `packages/react-native-executorch/tsconfig.build.json` - -- [ ] In `"exclude"`, remove `"legacy"`. - -### `packages/react-native-executorch/react-native-executorch.podspec` - -- [ ] Remove the `# === LEGACY SUPPORT ===` source files block: - ```ruby - source_files += [ - "legacy/ios/**/*.{h,m,mm}", - "legacy/cpp/**/*.{cpp,c,h,hpp}", - ] - ``` -- [ ] Remove the `# === LEGACY SUPPORT ===` exclusion block: - ```ruby - exclude_files += [ - "legacy/cpp/rnexecutorch/tests/**/*", - "legacy/cpp/rnexecutorch/jsi/*.{h,hpp}", - ] - s.preserve_paths = "legacy/cpp/rnexecutorch/jsi/*.{h,hpp}" - ``` -- [ ] Remove the `# === LEGACY SUPPORT ===` header search path: - ```ruby - "\"$(PODS_TARGET_SRCROOT)/legacy/cpp\"", - ``` - -### `packages/react-native-executorch/android/CMakeLists.txt` - -- [ ] Remove directory definitions: - ```cmake - set(LEGACY_CPP_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../legacy/cpp") - set(LEGACY_ANDROID_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../legacy/android") - ``` -- [ ] Remove `find_package(fbjni REQUIRED CONFIG)`. -- [ ] Remove `file(GLOB_RECURSE LEGACY_CPP_SOURCES ...)`. -- [ ] Remove `list(APPEND RNE_SOURCES ${LEGACY_CPP_SOURCES} ${LEGACY_ANDROID_DIR}/ETInstallerModule.cpp)`. -- [ ] Remove `${LEGACY_CPP_DIR}` and `${LEGACY_ANDROID_DIR}` from `target_include_directories`. -- [ ] In `target_link_libraries`, remove: - ```cmake - ReactAndroid::reactnative - fbjni::fbjni - android - ``` - -### `packages/react-native-executorch/android/src/main/java/com/swmansion/rnexecutorch/RnExecutorchPackage.kt` - -- [ ] In `getModule`, remove the `ETInstaller.NAME -> { ... }` case. -- [ ] In `getReactModuleInfoProvider`, remove the `ETInstaller.NAME to ReactModuleInfo(...)` entry. - ---- - -## 4. Git Diff Verification Against `rne-rewrite` - -Once the legacy support code and configurations have been removed, run a git diff against the `rne-rewrite` branch. **These modified configuration and build files should be identical to `rne-rewrite` (i.e. produce zero diff)**: - -```bash -# Verify modified configuration/build files are identical to rne-rewrite (must return 0 diff): -git diff --exit-code origin/rne-rewrite -- \ - package.json \ - .gitignore \ - .eslintrc.js \ - packages/react-native-executorch/package.json \ - packages/react-native-executorch/tsconfig.json \ - packages/react-native-executorch/tsconfig.build.json \ - packages/react-native-executorch/react-native-executorch.podspec \ - packages/react-native-executorch/android/CMakeLists.txt \ - packages/react-native-executorch/android/src/main/java/com/swmansion/rnexecutorch/RnExecutorchPackage.kt - -# Check overall branch diff (should only show newly added docs or subsequent bugfixes): -git diff --stat origin/rne-rewrite -``` - -Ensure no leftover legacy markers remain in the repository: - -```bash -git grep "LEGACY SUPPORT" -``` - -_(This command should return 0 results after complete removal)._ - ---- - -## 5. Verification After Removal - -Run the following commands to confirm that the clean repository builds and passes all checks: - -```bash -# 1. Re-link workspace dependencies -yarn install - -# 2. Build bundles -yarn prepare - -# 3. Typecheck -yarn typecheck - -# 4. Run test suites -yarn workspace react-native-executorch test - -# 5. Lint -yarn lint -``` diff --git a/LICENSE b/LICENSE index a780ca46db..aa15d47034 100644 --- a/LICENSE +++ b/LICENSE @@ -29,10 +29,8 @@ This software bundles or links the components below. Each is distributed under its own license, reproduced in full further down this file. ExecuTorch BSD 3-Clause native runtime and hardware backends - pffft / FFTPACK BSD 3-Clause legacy/cpp/pfft, audio FFT OpenCV Apache-2.0 vision pipelines and multimodal LLMs KleidiCV Apache-2.0 OpenCV Arm HAL, Android only - ada MIT legacy/cpp/ada, URL parsing phonemis MIT grapheme-to-phoneme for text-to-speech MLX MIT MLX backend, iOS only @@ -84,57 +82,6 @@ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -=============================================================================== -pffft and FFTPACK, BSD 3-Clause -=============================================================================== - -Copyright (c) 2013 Julien Pommier ( pommier@modartt.com ) - -Based on original fortran 77 code from FFTPACKv4 from NETLIB, -authored by Dr Paul Swarztrauber of NCAR, in 1985. - -As confirmed by the NCAR fftpack software curators, the following -FFTPACKv5 license applies to FFTPACKv4 sources. My changes are -released under the same terms. - -FFTPACK license: - -http://www.cisl.ucar.edu/css/software/fftpack5/ftpk.html - -Copyright (c) 2004 the University Corporation for Atmospheric -Research ("UCAR"). All rights reserved. Developed by NCAR's -Computational and Information Systems Laboratory, UCAR, -www.cisl.ucar.edu. - -Redistribution and use of the Software in source and binary forms, -with or without modification, is permitted provided that the -following conditions are met: - -- Neither the names of NCAR's Computational and Information Systems -Laboratory, the University Corporation for Atmospheric Research, -nor the names of its sponsors or contributors may be used to -endorse or promote products derived from this Software without -specific prior written permission. - -- Redistributions of source code must retain the above copyright -notices, this list of conditions, and the disclaimer below. - -- Redistributions in binary form must reproduce the above copyright -notice, this list of conditions, and the disclaimer below in the -documentation and/or other materials provided with the -distribution. - -THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT -HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL, -EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN -ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE -SOFTWARE. - - =============================================================================== phonemis, MIT =============================================================================== @@ -185,31 +132,6 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -=============================================================================== -ada, MIT -=============================================================================== - -Copyright 2023 Yagiz Nizipli and Daniel Lemire - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - =============================================================================== OpenCV and KleidiCV, Apache License 2.0 =============================================================================== diff --git a/RELEASE.md b/RELEASE.md index b9b329e69d..7813c5bf06 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -17,7 +17,7 @@ Both are plain string literals; there is no `LIB_VERSION` to derive them from. > [!CAUTION] > These constants were renamed **and their meanings swapped** in v0.10. Before > that they lived in `src/constants/modelUrls.ts` / `src/constants/versions.ts`, -> were derived from `LIB_VERSION`, and `VERSION_TAG` meant the *in-development* +> were derived from `LIB_VERSION`, and `VERSION_TAG` meant the _in-development_ > tag while `PREVIOUS_VERSION_TAG` meant the published one. Today `VERSION_TAG` > is the **published** tag and `NEXT_VERSION_TAG` is the in-development one. > Editing `VERSION_TAG` by analogy with the old docs repoints every already @@ -53,21 +53,7 @@ The release process of new minor version consists of the following steps: 1. On `main`, confirm every model URL in `packages/react-native-executorch/src/models.ts` that should ship in this release points at `NEXT_VERSION_TAG`, and that the matching files exist on [🤗 huggingface](https://huggingface.co/software-mansion) under the `v{MAJOR}.{MINOR}.0` tag. See [HuggingFace artifacts](#huggingface-artifacts) for moving those tags. 2. Make sure `NEXT_VERSION_TAG` in `packages/react-native-executorch/src/models.ts` is `resolve/v{MAJOR}.{MINOR}.0`. -3. Ensure the `version` field of `package.json` is `{MAJOR}.{MINOR}.0` for all four published packages: - - `packages/react-native-executorch` (core) - - `packages/bare-resource-fetcher` - - `packages/expo-resource-fetcher` - - `packages/react-native-executorch-webrtc` - - The core publish workflow reads the version from - `packages/react-native-executorch/package.json`, so a wrong value there is - what gets published. The satellite workflow takes an explicit `version` - input instead. - - The two fetcher adapters are still required at `{MAJOR}.{MINOR}.0`: the core - package ships the pre-0.10 API as `react-native-executorch/legacy`, and that - path throws at runtime unless the consumer passes an adapter from one of - them. Only the new API has a built-in fetcher. +3. Ensure the `version` field in `packages/react-native-executorch/package.json` is `{MAJOR}.{MINOR}.0`. The core publish workflow reads this value. 4. If any of the above required changes, commit them on `main` with the message 'Release v{MAJOR}.{MINOR}.0'. 5. Create a new release branch `release/{MAJOR}.{MINOR}` from `main` and push it to the remote. 6. Confirm the native artifacts release the package resolves at install time @@ -76,32 +62,30 @@ The release process of new minor version consists of the following steps: pinned in the core `package.json`; if that release or any of its assets is missing, every consumer's `postinstall` fails. 7. Stability tests are performed on the release branch and all fixes to the new-found issues are pushed into the main branch and cherry-picked into the release branch. This allows for further development on the main branch without interfering with the release process. -8. Once all tests are passed, tag the release branch with proper version tag `v{MAJOR}.{MINOR}.0` and run the following publish workflows. Both take a `dry-run` input; a dry run builds and packs without publishing, which is worth doing first since a failed publish cannot be taken back: +8. Once all tests are passed, tag the release branch with proper version tag `v{MAJOR}.{MINOR}.0` and run the core publish workflow. It takes a `dry-run` input; a dry run builds and packs without publishing, which is worth doing first since a failed publish cannot be taken back: - [npm publish (core)](https://github.com/software-mansion/react-native-executorch/actions/workflows/npm-publish.yml) - - [npm publish satellite packages](https://github.com/software-mansion/react-native-executorch/actions/workflows/npm-publish-satellites.yml) — run once per satellite package, selecting it via the `package` input (`react-native-executorch-bare-resource-fetcher`, `react-native-executorch-expo-resource-fetcher`, `react-native-executorch-webrtc`) -9. Move the `legacy` dist-tag on npm to the previous minor line, for the core package and every satellite: +9. Move the `legacy` dist-tag on npm to the previous minor line, for the core package: ``` npm dist-tag add react-native-executorch@{PREV_MAJOR}.{PREV_MINOR}.{HIGHEST_PATCH} legacy ``` - Use the previous line's **highest published patch**, not its `.0`. Repeat for - each satellite, whose patch numbers advance independently of the core (a - satellite may have no release on that line at all, in which case it has no - `legacy` tag to move). + Use the previous line's **highest published patch**, not its `.0`. This is manual on purpose. The publish action derives a tag itself, but only ever as `latest` for the newest version or `legacy` for an older one, and when it picks `legacy` it then runs `npm dist-tag rm legacy` on the way out. Nothing in the automation repoints `legacy` at the outgoing line, so skipping this step leaves it on whichever release last set it by hand. + 10. Create the release notes on GitHub. 11. Bump `main` to the next development cycle in a single PR: - - Bump `version` in `package.json` to `{MAJOR}.{NEXT_MINOR}.0` for all four published packages. Leave `nativeLibsVersion` alone; it names the GitHub artifacts release that exists today, and moving it ahead breaks every consumer's `postinstall`. - - In `models.ts`, rename `NEXT_VERSION_TAG` to `VERSION_TAG`, keeping its value at `resolve/v{MAJOR}.{MINOR}.0` (the version just published). This rewrites every model URL by construction, which is what you want: the URLs name the constant, not the tag, so bumping the value alone would silently repoint every model at a release that does not exist yet. - - Do **not** add `NEXT_VERSION_TAG` back yet. Exactly one of the two constants exists at a time: whichever has no reader fails `noUnusedLocals`. The first model re-exported for the next release declares `NEXT_VERSION_TAG = 'resolve/v{MAJOR}.{NEXT_MINOR}.0'` and points its own URL at it; the rest stay on `VERSION_TAG`. - - Bump `LIB_VERSION` in `packages/react-native-executorch/src/fetcher/telemetry.ts` to match. A unit test asserts it equals the package version, so a missed bump fails CI rather than mislabelling every download event for the release. - - Commit with the message 'Bump version to v{MAJOR}.{NEXT_MINOR}.0'. + - Bump `version` in `packages/react-native-executorch/package.json` to `{MAJOR}.{NEXT_MINOR}.0`. Leave `nativeLibsVersion` alone; it names the GitHub artifacts release that exists today, and moving it ahead breaks every consumer's `postinstall`. + - In `models.ts`, rename `NEXT_VERSION_TAG` to `VERSION_TAG`, keeping its value at `resolve/v{MAJOR}.{MINOR}.0` (the version just published). This rewrites every model URL by construction, which is what you want: the URLs name the constant, not the tag, so bumping the value alone would silently repoint every model at a release that does not exist yet. + - Do **not** add `NEXT_VERSION_TAG` back yet. Exactly one of the two constants exists at a time: whichever has no reader fails `noUnusedLocals`. The first model re-exported for the next release declares `NEXT_VERSION_TAG = 'resolve/v{MAJOR}.{NEXT_MINOR}.0'` and points its own URL at it; the rest stay on `VERSION_TAG`. + - Bump `LIB_VERSION` in `packages/react-native-executorch/src/fetcher/telemetry.ts` to match. A unit test asserts it equals the package version, so a missed bump fails CI rather than mislabelling every download event for the release. + - Commit with the message 'Bump version to v{MAJOR}.{NEXT_MINOR}.0'. + 12. Create versioned docs by running from repo root `(cd docs && yarn docs:version {MAJOR}.{MINOR}.x)` (the 'x' part is intentional and is not to be substituted). Also, make sure that all the links in `api-reference` are not broken. 13. Create a PR with the updated docs. 14. Update README.md with release video, if available. @@ -116,15 +100,15 @@ After the release branch is created and the version is published to npm we only 1. Create a PR with the fix to the `main` branch. 2. Once the PR is merged, create a new branch off `release/{MAJOR}.{MINOR}`, cherry-pick the relevant commits from `main`, and open a PR targeting `release/{MAJOR}.{MINOR}`. -3. Once the PR is merged, bump version in `package.json` of the core package and any adapter packages that require a fix to the new version `v{MAJOR}.{MINOR}.{REVISION}`. +3. Once the PR is merged, bump version in `package.json` of the core package to the new version `v{MAJOR}.{MINOR}.{REVISION}`. Commit with a message 'Release v{MAJOR}.{MINOR}.{REVISION}'. -4. Tag release branch with proper version tag `v{MAJOR}.{MINOR}.{REVISION}` and run the relevant publish workflows: +4. Tag release branch with proper version tag `v{MAJOR}.{MINOR}.{REVISION}` and run the publish workflow: - [npm publish (core)](https://github.com/software-mansion/react-native-executorch/actions/workflows/npm-publish.yml) - - [npm publish satellite packages](https://github.com/software-mansion/react-native-executorch/actions/workflows/npm-publish-satellites.yml) — run once per affected satellite package via the `package` input _(if applicable)_ A patch on an **older** line needs the `legacy` dist-tag re-added afterwards. The action publishes such a version under `legacy` and then deletes the tag, so the line is left with no `legacy` pointer at all. + 5. Create release notes on GitHub. ## Docs update diff --git a/SECURITY.md b/SECURITY.md index 65cedd6bc3..b83bb54dcd 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -43,11 +43,8 @@ each tag currently points at. In scope, because they are what users install and run: -- The published npm packages: `react-native-executorch`, its - `react-native-executorch-bare-resource-fetcher` and - `react-native-executorch-expo-resource-fetcher` adapters, and - `react-native-executorch-webrtc`. This includes the C++, Kotlin, Swift and - Objective-C sources they ship. +- The published npm package `react-native-executorch`, including the C++, + Kotlin, Swift and Objective-C sources it ships. - The prebuilt native artifacts the package downloads on install, published as GitHub Releases tagged `v-libs`. - The model files we publish under diff --git a/apps/legacy/bare-rn/.bundle/config b/apps/legacy/bare-rn/.bundle/config deleted file mode 100644 index 848943bb52..0000000000 --- a/apps/legacy/bare-rn/.bundle/config +++ /dev/null @@ -1,2 +0,0 @@ -BUNDLE_PATH: "vendor/bundle" -BUNDLE_FORCE_RUBY_PLATFORM: 1 diff --git a/apps/legacy/bare-rn/.eslintrc.js b/apps/legacy/bare-rn/.eslintrc.js deleted file mode 100644 index 1d1d89f4b4..0000000000 --- a/apps/legacy/bare-rn/.eslintrc.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - root: true, - extends: '@react-native', - parserOptions: { - requireConfigFile: false, - }, -}; diff --git a/apps/legacy/bare-rn/.gitignore b/apps/legacy/bare-rn/.gitignore deleted file mode 100644 index 874daf3051..0000000000 --- a/apps/legacy/bare-rn/.gitignore +++ /dev/null @@ -1,80 +0,0 @@ -# OSX -# -.DS_Store - -# Xcode -# -build/ -*.pbxuser -!default.pbxuser -*.mode1v3 -!default.mode1v3 -*.mode2v3 -!default.mode2v3 -*.perspectivev3 -!default.perspectivev3 -xcuserdata -*.xccheckout -*.moved-aside -DerivedData -*.hmap -*.ipa -*.xcuserstate -**/.xcode.env.local - -# Android/IntelliJ -# -build/ -.idea -.gradle -local.properties -*.iml -*.hprof -.cxx/ -*.keystore -!debug.keystore -.kotlin/ - -# node.js -# -node_modules/ -npm-debug.log -yarn-error.log - -# fastlane -# -# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the -# screenshots whenever they are needed. -# For more information about the recommended setup visit: -# https://docs.fastlane.tools/best-practices/source-control/ - -**/fastlane/report.xml -**/fastlane/Preview.html -**/fastlane/screenshots -**/fastlane/test_output - -# Bundle artifact -*.jsbundle - -# Ruby / CocoaPods -**/Pods/ -/vendor/bundle/ - -# Temporary files created by Metro to check the health of the file watcher -.metro-health-check* - -# testing -/coverage - -# Yarn -.yarn/* -!.yarn/patches -!.yarn/plugins -!.yarn/releases -!.yarn/sdks -!.yarn/versions - -# Custom -!/ios/ -!/android/ -/assets/ai-models/ diff --git a/apps/legacy/bare-rn/.prettierrc.js b/apps/legacy/bare-rn/.prettierrc.js deleted file mode 100644 index 06860c8d1b..0000000000 --- a/apps/legacy/bare-rn/.prettierrc.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - arrowParens: 'avoid', - singleQuote: true, - trailingComma: 'all', -}; diff --git a/apps/legacy/bare-rn/.watchmanconfig b/apps/legacy/bare-rn/.watchmanconfig deleted file mode 100644 index 0967ef424b..0000000000 --- a/apps/legacy/bare-rn/.watchmanconfig +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/apps/legacy/bare-rn/App.tsx b/apps/legacy/bare-rn/App.tsx deleted file mode 100644 index 104243d3c7..0000000000 --- a/apps/legacy/bare-rn/App.tsx +++ /dev/null @@ -1,405 +0,0 @@ -import React, { useEffect, useRef, useState } from 'react'; -import { - ActivityIndicator, - Keyboard, - KeyboardAvoidingView, - Modal, - Platform, - ScrollView, - StyleSheet, - Text, - TextInput, - TouchableOpacity, - TouchableWithoutFeedback, - View, -} from 'react-native'; -import { models, initExecutorch, useLLM } from 'react-native-executorch/legacy'; -import { BareResourceFetcher } from 'react-native-executorch-bare-resource-fetcher'; -import { setConfig } from '@kesha-antonov/react-native-background-downloader'; -import { SafeAreaProvider, SafeAreaView } from 'react-native-safe-area-context'; - -// Configure Background Downloader logging -setConfig({ - isLogsEnabled: true, - logCallback: log => { - console.log('[BackgroundDownloader]', log); - }, -}); - -// Initialize Executorch with bare adapter -initExecutorch({ - resourceFetcher: BareResourceFetcher, -}); - -const ColorPalette = { - primary: '#001A72', - blueLight: '#C1C6E5', - blueDark: '#6676AA', - white: '#FFFFFF', - gray100: '#F5F5F5', - gray200: '#E0E0E0', -}; - -function Spinner({ - visible, - textContent, -}: { - visible: boolean; - textContent: string; -}) { - return ( - - - - - {textContent} - - - - ); -} - -const spinnerStyles = StyleSheet.create({ - overlay: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - backgroundColor: 'rgba(0, 0, 0, 0.5)', - }, - container: { - padding: 25, - alignItems: 'center', - justifyContent: 'center', - }, - text: { - marginTop: 15, - color: ColorPalette.white, - fontSize: 18, - fontWeight: 'bold', - }, -}); - -function ErrorBanner({ - message, - onDismiss, -}: { - message: string | null; - onDismiss: () => void; -}) { - if (!message) return null; - return ( - - - {message} - - - ✕ - - - ); -} - -const errorBannerStyles = StyleSheet.create({ - container: { - backgroundColor: '#FEE2E2', - borderLeftWidth: 4, - borderLeftColor: '#EF4444', - borderRadius: 8, - marginHorizontal: 16, - marginVertical: 8, - paddingVertical: 10, - paddingLeft: 12, - paddingRight: 8, - flexDirection: 'row', - alignItems: 'center', - }, - message: { - flex: 1, - color: '#991B1B', - fontSize: 14, - lineHeight: 20, - }, - closeButton: { - padding: 4, - marginLeft: 8, - }, - closeText: { - color: '#991B1B', - fontSize: 16, - fontWeight: '600', - }, -}); - -function App() { - const [userInput, setUserInput] = useState(''); - const [isTextInputFocused, setIsTextInputFocused] = useState(false); - const [error, setError] = useState(null); - const textInputRef = useRef(null); - const scrollViewRef = useRef(null); - - const llm = useLLM({ - model: models.llm.lfm2_5_1_2b_instruct(), - }); - // Alternatively, to use a custom local model, uncomment below: - // const llm = useLLM({ model: { - // modelSource: require('./assets/ai-models/smolLm2/smolLm2_135M/smolLm2_135M_bf16.pte'), - // tokenizerSource: require('./assets/ai-models/smolLm2/tokenizer.json'), - // tokenizerConfigSource: require('./assets/ai-models/smolLm2/tokenizer_config.json'), - // } }); - - useEffect(() => { - if (llm.error) setError(String(llm.error)); - }, [llm.error]); - - const sendMessage = async () => { - if (!userInput.trim()) return; - - setUserInput(''); - textInputRef.current?.clear(); - try { - await llm.sendMessage(userInput); - } catch (e) { - setError(e instanceof Error ? e.message : String(e)); - } - }; - - return ( - - - - - - setError(null)} /> - {llm.messageHistory.length > 0 || llm.isGenerating ? ( - - scrollViewRef.current?.scrollToEnd({ animated: true }) - } - keyboardShouldPersistTaps="handled" - > - {llm.messageHistory.map((message, index) => ( - - - {message.content} - - - ))} - {llm.isGenerating && llm.response && ( - - {llm.response} - - - )} - - ) : ( - - - Hello! 👋 - - What can I help you with? - - - {[ - 'Explain quantum computing in simple terms', - 'Write a short poem about coding', - 'What are the benefits of on-device AI?', - 'Give me 3 fun facts about space', - ].map((prompt, i) => ( - setUserInput(prompt)} - > - {prompt} - - ))} - - - - )} - - - setIsTextInputFocused(true)} - onBlur={() => setIsTextInputFocused(false)} - onChangeText={setUserInput} - value={userInput} - /> - {userInput.trim() && !llm.isGenerating && ( - - - Send - - - )} - {llm.isGenerating && ( - - - Stop - - - )} - - - - - ); -} - -const styles = StyleSheet.create({ - container: { - flex: 1, - backgroundColor: ColorPalette.white, - }, - content: { - flex: 1, - }, - chatContainer: { - flex: 1, - width: '100%', - }, - chatContent: { - padding: 16, - flexGrow: 1, - }, - welcomeContainer: { - flex: 1, - alignItems: 'center', - justifyContent: 'center', - padding: 20, - }, - welcomeTitle: { - fontSize: 32, - fontWeight: 'bold', - color: ColorPalette.primary, - marginBottom: 12, - }, - welcomeSubtitle: { - fontSize: 18, - color: ColorPalette.blueDark, - textAlign: 'center', - }, - suggestionsContainer: { - flexDirection: 'row', - flexWrap: 'wrap', - justifyContent: 'center', - gap: 8, - paddingTop: 16, - }, - suggestionChip: { - borderWidth: 1, - borderColor: ColorPalette.blueLight, - borderRadius: 20, - paddingHorizontal: 14, - paddingVertical: 8, - backgroundColor: '#fafbff', - }, - suggestionChipText: { - fontSize: 13, - color: ColorPalette.primary, - }, - messageBubble: { - maxWidth: '80%', - padding: 12, - borderRadius: 16, - marginBottom: 8, - }, - userMessage: { - alignSelf: 'flex-end', - backgroundColor: ColorPalette.primary, - }, - aiMessage: { - alignSelf: 'flex-start', - backgroundColor: ColorPalette.gray100, - borderWidth: 1, - borderColor: ColorPalette.gray200, - }, - messageText: { - fontSize: 15, - lineHeight: 20, - }, - userMessageText: { - color: ColorPalette.white, - }, - aiMessageText: { - color: ColorPalette.primary, - }, - inputContainer: { - flexDirection: 'row', - padding: 16, - borderTopWidth: 1, - borderTopColor: ColorPalette.gray200, - alignItems: 'flex-end', - backgroundColor: ColorPalette.white, - }, - textInput: { - flex: 1, - borderWidth: 1, - borderRadius: 20, - paddingHorizontal: 16, - paddingVertical: 10, - fontSize: 15, - color: ColorPalette.primary, - maxHeight: 100, - marginRight: 8, - }, - sendButton: { - backgroundColor: ColorPalette.primary, - paddingHorizontal: 20, - paddingVertical: 10, - borderRadius: 20, - minWidth: 70, - alignItems: 'center', - justifyContent: 'center', - }, - sendButtonText: { - color: ColorPalette.white, - fontSize: 16, - fontWeight: '600', - }, -}); - -export default App; diff --git a/apps/legacy/bare-rn/Gemfile b/apps/legacy/bare-rn/Gemfile deleted file mode 100644 index 87de7b4f47..0000000000 --- a/apps/legacy/bare-rn/Gemfile +++ /dev/null @@ -1,16 +0,0 @@ -source 'https://rubygems.org' - -# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version -ruby ">= 2.6.10" - -# Exclude problematic versions of cocoapods and activesupport that causes build failures. -# CocoaPods >= 1.16.0 fixes Ruby 3.4 compatibility (kconv removal). -gem 'cocoapods', '>= 1.16.2' -gem 'activesupport', '>= 6.1.7.5', '!= 7.1.0' -gem 'concurrent-ruby', '< 1.3.8' - -# Ruby 3.4.0 has removed some libraries from the standard library. -gem 'bigdecimal' -gem 'logger' -gem 'benchmark' -gem 'mutex_m' diff --git a/apps/legacy/bare-rn/Gemfile.lock b/apps/legacy/bare-rn/Gemfile.lock deleted file mode 100644 index a6772d03e4..0000000000 --- a/apps/legacy/bare-rn/Gemfile.lock +++ /dev/null @@ -1,119 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - CFPropertyList (3.0.8) - activesupport (7.2.3.1) - base64 - benchmark (>= 0.3) - bigdecimal - concurrent-ruby (~> 1.0, >= 1.3.1) - connection_pool (>= 2.2.5) - drb - i18n (>= 1.6, < 2) - logger (>= 1.4.2) - minitest (>= 5.1, < 6) - securerandom (>= 0.3) - tzinfo (~> 2.0, >= 2.0.5) - addressable (2.9.0) - public_suffix (>= 2.0.2, < 8.0) - algoliasearch (1.27.5) - httpclient (~> 2.8, >= 2.8.3) - json (>= 1.5.1) - atomos (0.1.3) - base64 (0.3.0) - benchmark (0.5.0) - bigdecimal (4.0.1) - claide (1.1.0) - cocoapods (1.16.2) - addressable (~> 2.8) - claide (>= 1.0.2, < 2.0) - cocoapods-core (= 1.16.2) - cocoapods-deintegrate (>= 1.0.3, < 2.0) - cocoapods-downloader (>= 2.1, < 3.0) - cocoapods-plugins (>= 1.0.0, < 2.0) - cocoapods-search (>= 1.0.0, < 2.0) - cocoapods-trunk (>= 1.6.0, < 2.0) - cocoapods-try (>= 1.1.0, < 2.0) - colored2 (~> 3.1) - escape (~> 0.0.4) - fourflusher (>= 2.3.0, < 3.0) - gh_inspector (~> 1.0) - molinillo (~> 0.8.0) - nap (~> 1.0) - ruby-macho (>= 2.3.0, < 3.0) - xcodeproj (>= 1.27.0, < 2.0) - cocoapods-core (1.16.2) - activesupport (>= 5.0, < 8) - addressable (~> 2.8) - algoliasearch (~> 1.0) - concurrent-ruby (~> 1.1) - fuzzy_match (~> 2.0.4) - nap (~> 1.0) - netrc (~> 0.11) - public_suffix (~> 4.0) - typhoeus (~> 1.0) - cocoapods-deintegrate (1.0.5) - cocoapods-downloader (2.1) - cocoapods-plugins (1.0.0) - nap - cocoapods-search (1.0.1) - cocoapods-trunk (1.6.0) - nap (>= 0.8, < 2.0) - netrc (~> 0.11) - cocoapods-try (1.2.0) - colored2 (3.1.2) - concurrent-ruby (1.3.7) - connection_pool (3.0.2) - drb (2.2.3) - escape (0.0.4) - ethon (0.15.0) - ffi (>= 1.15.0) - ffi (1.17.3) - fourflusher (2.3.1) - fuzzy_match (2.0.4) - gh_inspector (1.1.3) - httpclient (2.9.0) - mutex_m - i18n (1.14.8) - concurrent-ruby (~> 1.0) - json (2.19.9) - logger (1.7.0) - minitest (5.27.0) - molinillo (0.8.0) - mutex_m (0.3.0) - nanaimo (0.4.0) - nap (1.1.0) - netrc (0.11.0) - public_suffix (4.0.7) - rexml (3.4.4) - ruby-macho (2.5.1) - securerandom (0.4.1) - typhoeus (1.5.0) - ethon (>= 0.9.0, < 0.16.0) - tzinfo (2.0.6) - concurrent-ruby (~> 1.0) - xcodeproj (1.27.0) - CFPropertyList (>= 2.3.3, < 4.0) - atomos (~> 0.1.3) - claide (>= 1.0.2, < 2.0) - colored2 (~> 3.1) - nanaimo (~> 0.4.0) - rexml (>= 3.3.6, < 4.0) - -PLATFORMS - ruby - -DEPENDENCIES - activesupport (>= 6.1.7.5, != 7.1.0) - benchmark - bigdecimal - cocoapods (>= 1.16.2) - concurrent-ruby (< 1.3.8) - logger - mutex_m - -RUBY VERSION - ruby 3.4.5p51 - -BUNDLED WITH - 2.6.9 diff --git a/apps/legacy/bare-rn/__tests__/App.test.tsx b/apps/legacy/bare-rn/__tests__/App.test.tsx deleted file mode 100644 index e532f701ee..0000000000 --- a/apps/legacy/bare-rn/__tests__/App.test.tsx +++ /dev/null @@ -1,13 +0,0 @@ -/** - * @format - */ - -import React from 'react'; -import ReactTestRenderer from 'react-test-renderer'; -import App from '../App'; - -test('renders correctly', async () => { - await ReactTestRenderer.act(() => { - ReactTestRenderer.create(); - }); -}); diff --git a/apps/legacy/bare-rn/android/app/build.gradle b/apps/legacy/bare-rn/android/app/build.gradle deleted file mode 100644 index b17658e36c..0000000000 --- a/apps/legacy/bare-rn/android/app/build.gradle +++ /dev/null @@ -1,119 +0,0 @@ -apply plugin: "com.android.application" -apply plugin: "org.jetbrains.kotlin.android" -apply plugin: "com.facebook.react" - -/** - * This is the configuration block to customize your React Native Android app. - * By default you don't need to apply any configuration, just uncomment the lines you need. - */ -react { - /* Folders */ - // The root of your project, i.e. where "package.json" lives. Default is '../..' - root = file("../../") - // The folder where the react-native NPM package is. Default is ../../node_modules/react-native - reactNativeDir = file("../../node_modules/react-native") - // The folder where the react-native Codegen package is. Default is ../../node_modules/@react-native/codegen - codegenDir = file("../../node_modules/@react-native/codegen") - // The cli.js file which is the React Native CLI entrypoint. Default is ../../node_modules/react-native/cli.js - cliFile = file("../../node_modules/react-native/cli.js") - - /* Variants */ - // The list of variants to that are debuggable. For those we're going to - // skip the bundling of the JS bundle and the assets. Default is "debug", "debugOptimized". - // If you add flavors like lite, prod, etc. you'll have to list your debuggableVariants. - // debuggableVariants = ["liteDebug", "liteDebugOptimized", "prodDebug", "prodDebugOptimized"] - - /* Bundling */ - // A list containing the node command and its flags. Default is just 'node'. - // nodeExecutableAndArgs = ["node"] - // - // The command to run when bundling. By default is 'bundle' - // bundleCommand = "ram-bundle" - // - // The path to the CLI configuration file. Default is empty. - // bundleConfig = file(../rn-cli.config.js) - // - // The name of the generated asset file containing your JS bundle - // bundleAssetName = "MyApplication.android.bundle" - // - // The entry file for bundle generation. Default is 'index.android.js' or 'index.js' - // entryFile = file("../js/MyApplication.android.js") - // - // A list of extra flags to pass to the 'bundle' commands. - // See https://github.com/react-native-community/cli/blob/main/docs/commands.md#bundle - // extraPackagerArgs = [] - - /* Hermes Commands */ - // The hermes compiler command to run. By default it is 'hermesc' - // hermesCommand = "$rootDir/my-custom-hermesc/bin/hermesc" - // - // The list of flags to pass to the Hermes compiler. By default is "-O", "-output-source-map" - // hermesFlags = ["-O", "-output-source-map"] - - /* Autolinking */ - autolinkLibrariesWithApp() -} - -/** - * Set this to true to Run Proguard on Release builds to minify the Java bytecode. - */ -def enableProguardInReleaseBuilds = false - -/** - * The preferred build flavor of JavaScriptCore (JSC) - * - * For example, to use the international variant, you can use: - * `def jscFlavor = io.github.react-native-community:jsc-android-intl:2026004.+` - * - * The international variant includes ICU i18n library and necessary data - * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that - * give correct results when using with locales other than en-US. Note that - * this variant is about 6MiB larger per architecture than default. - */ -def jscFlavor = 'io.github.react-native-community:jsc-android:2026004.+' - -android { - ndkVersion rootProject.ext.ndkVersion - buildToolsVersion rootProject.ext.buildToolsVersion - compileSdk rootProject.ext.compileSdkVersion - - namespace "com.barern" - defaultConfig { - applicationId "com.barern" - minSdkVersion rootProject.ext.minSdkVersion - targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 1 - versionName "1.0" - } - signingConfigs { - debug { - storeFile file('debug.keystore') - storePassword 'android' - keyAlias 'androiddebugkey' - keyPassword 'android' - } - } - buildTypes { - debug { - signingConfig signingConfigs.debug - } - release { - // Caution! In production, you need to generate your own keystore file. - // see https://reactnative.dev/docs/signed-apk-android. - signingConfig signingConfigs.debug - minifyEnabled enableProguardInReleaseBuilds - proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro" - } - } -} - -dependencies { - // The version of react-native is set by the React Native Gradle Plugin - implementation("com.facebook.react:react-android") - - if (hermesEnabled.toBoolean()) { - implementation("com.facebook.react:hermes-android") - } else { - implementation jscFlavor - } -} diff --git a/apps/legacy/bare-rn/android/app/debug.keystore b/apps/legacy/bare-rn/android/app/debug.keystore deleted file mode 100644 index 364e105ed39fbfd62001429a68140672b06ec0de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2257 zcmchYXEfYt8;7T1^dLH$VOTZ%2NOdOH5j5LYLtZ0q7x-V8_6gU5)#7dkq{HTmsfNq zB3ZqcAxeY^G10@?efK?Q&)M(qInVv!xjx+IKEL}p*K@LYvIzo#AZG>st5|P)KF1_Z;y){W{<7K{nl!CPuE z_^(!C(Ol0n8 zK13*rzAtW>(wULKPRYLd7G18F8#1P`V*9`(Poj26eOXYyBVZPno~Cvvhx7vPjAuZo zF?VD!zB~QG(!zbw#qsxT8%BSpqMZ4f70ZPn-3y$L8{EVbbN9$H`B&Z1quk9tgp5FM zuxp3pJ0b8u|3+#5bkJ4SRnCF2l7#DyLYXYY8*?OuAwK4E6J{0N=O3QNVzQ$L#FKkR zi-c@&!nDvezOV$i$Lr}iF$XEcwnybQ6WZrMKuw8gCL^U#D;q3t&HpTbqyD%vG=TeDlzCT~MXUPC|Leb-Uk+ z=vnMd(|>ld?Fh>V8poP;q;;nc@en$|rnP0ytzD&fFkCeUE^kG9Kx4wUh!!rpjwKDP zyw_e|a^x_w3E zP}}@$g>*LLJ4i0`Gx)qltL}@;mDv}D*xR^oeWcWdPkW@Uu)B^X&4W1$p6}ze!zudJ zyiLg@uggoMIArBr*27EZV7djDg@W1MaL+rcZ-lrANJQ%%>u8)ZMWU@R2qtnmG(acP z0d_^!t>}5W zpT`*2NR+0+SpTHb+6Js4b;%LJB;B_-ChhnU5py}iJtku*hm5F0!iql8Hrpcy1aYbT z1*dKC5ua6pMX@@iONI?Hpr%h;&YaXp9n!ND7-=a%BD7v&g zOO41M6EbE24mJ#S$Ui0-brR5ML%@|ndz^)YLMMV1atna{Fw<;TF@>d&F|!Z>8eg>>hkFrV)W+uv=`^F9^e zzzM2*oOjT9%gLoub%(R57p-`TXFe#oh1_{&N-YN z<}artH|m=d8TQuKSWE)Z%puU|g|^^NFwC#N=@dPhasyYjoy(fdEVfKR@cXKHZV-`06HsP`|Ftx;8(YD$fFXumLWbGnu$GMqRncXYY9mwz9$ap zQtfZB^_BeNYITh^hA7+(XNFox5WMeG_LtJ%*Q}$8VKDI_p8^pqX)}NMb`0e|wgF7D zuQACY_Ua<1ri{;Jwt@_1sW9zzdgnyh_O#8y+C;LcZq6=4e^cs6KvmK@$vVpKFGbQ= z$)Eux5C|Fx;Gtmv9^#Y-g@7Rt7*eLp5n!gJmn7&B_L$G?NCN`AP>cXQEz}%F%K;vUs{+l4Q{}eWW;ATe2 zqvXzxoIDy(u;F2q1JH7Sf;{jy_j})F+cKlIOmNfjBGHoG^CN zM|Ho&&X|L-36f}Q-obEACz`sI%2f&k>z5c$2TyTSj~vmO)BW~+N^kt`Jt@R|s!){H ze1_eCrlNaPkJQhL$WG&iRvF*YG=gXd1IyYQ9ew|iYn7r~g!wOnw;@n42>enAxBv*A zEmV*N#sxdicyNM=A4|yaOC5MByts}s_Hpfj|y<6G=o=!3S@eIFKDdpR7|FY>L&Wat&oW&cm&X~ z5Bt>Fcq(fgnvlvLSYg&o6>&fY`ODg4`V^lWWD=%oJ#Kbad2u~! zLECFS*??>|vDsNR&pH=Ze0Eo`sC_G`OjoEKVHY|wmwlX&(XBE<@sx3Hd^gtd-fNwUHsylg06p`U2y_={u}Bc - - - - - - - - - - - - diff --git a/apps/legacy/bare-rn/android/app/src/main/java/com/barern/MainActivity.kt b/apps/legacy/bare-rn/android/app/src/main/java/com/barern/MainActivity.kt deleted file mode 100644 index 7ee40e43b4..0000000000 --- a/apps/legacy/bare-rn/android/app/src/main/java/com/barern/MainActivity.kt +++ /dev/null @@ -1,20 +0,0 @@ -package com.barern - -import com.facebook.react.ReactActivity -import com.facebook.react.ReactActivityDelegate -import com.facebook.react.defaults.DefaultNewArchitectureEntryPoint.fabricEnabled -import com.facebook.react.defaults.DefaultReactActivityDelegate - -class MainActivity : ReactActivity() { - /** - * Returns the name of the main component registered from JavaScript. This is used to schedule - * rendering of the component. - */ - override fun getMainComponentName(): String = "bare-rn" - - /** - * Returns the instance of the [ReactActivityDelegate]. We use [DefaultReactActivityDelegate] - * which allows you to enable New Architecture with a single boolean flags [fabricEnabled] - */ - override fun createReactActivityDelegate(): ReactActivityDelegate = DefaultReactActivityDelegate(this, mainComponentName, fabricEnabled) -} diff --git a/apps/legacy/bare-rn/android/app/src/main/java/com/barern/MainApplication.kt b/apps/legacy/bare-rn/android/app/src/main/java/com/barern/MainApplication.kt deleted file mode 100644 index 39f296c224..0000000000 --- a/apps/legacy/bare-rn/android/app/src/main/java/com/barern/MainApplication.kt +++ /dev/null @@ -1,50 +0,0 @@ -package com.barern - -import android.app.Application -import com.barern.BuildConfig -import com.facebook.react.PackageList -import com.facebook.react.ReactApplication -import com.facebook.react.ReactHost -import com.facebook.react.ReactNativeApplicationEntryPoint.loadReactNative -import com.facebook.react.ReactNativeHost -import com.facebook.react.defaults.DefaultReactHost.getDefaultReactHost -import com.facebook.react.defaults.DefaultReactNativeHost -import com.facebook.react.runtime.JSRuntimeFactory -import com.facebook.react.runtime.hermes.HermesInstance - -class MainApplication : - Application(), - ReactApplication { - @Suppress("DEPRECATION") - override val reactNativeHost: ReactNativeHost by lazy { - object : DefaultReactNativeHost(this) { - override fun getPackages() = - PackageList(this).packages.apply { - // Packages that cannot be autolinked yet can be added manually here - } - - override fun getJSMainModuleName() = "index" - - override fun getUseDeveloperSupport() = BuildConfig.DEBUG - - override val isNewArchEnabled: Boolean = true - } - } - - override val reactHost: ReactHost by lazy { - getDefaultReactHost( - context = applicationContext, - packageList = - PackageList(this).packages.apply { - // Packages that cannot be autolinked yet can be added manually here - }, - jsMainModulePath = "index", - jsRuntimeFactory = HermesInstance(), - ) - } - - override fun onCreate() { - super.onCreate() - loadReactNative(this) - } -} diff --git a/apps/legacy/bare-rn/android/app/src/main/res/drawable/rn_edit_text_material.xml b/apps/legacy/bare-rn/android/app/src/main/res/drawable/rn_edit_text_material.xml deleted file mode 100644 index 5c25e728ea..0000000000 --- a/apps/legacy/bare-rn/android/app/src/main/res/drawable/rn_edit_text_material.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - diff --git a/apps/legacy/bare-rn/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/apps/legacy/bare-rn/android/app/src/main/res/mipmap-hdpi/ic_launcher.png deleted file mode 100644 index a2f5908281d070150700378b64a84c7db1f97aa1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3056 zcmV(P)KhZB4W`O-$6PEY7dL@435|%iVhscI7#HXTET` zzkBaFzt27A{C?*?2n!1>p(V70me4Z57os7_P3wngt7(|N?Oyh#`(O{OZ1{A4;H+Oi zbkJV-pnX%EV7$w+V1moMaYCgzJI-a^GQPsJHL=>Zb!M$&E7r9HyP>8`*Pg_->7CeN zOX|dqbE6DBJL=}Mqt2*1e1I>(L-HP&UhjA?q1x7zSXD}D&D-Om%sC#AMr*KVk>dy;pT>Dpn#K6-YX8)fL(Q8(04+g?ah97XT2i$m2u z-*XXz7%$`O#x&6Oolq?+sA+c; zdg7fXirTUG`+!=-QudtfOZR*6Z3~!#;X;oEv56*-B z&gIGE3os@3O)sFP?zf;Z#kt18-o>IeueS!=#X^8WfI@&mfI@)!F(BkYxSfC*Gb*AM zau9@B_4f3=m1I71l8mRD>8A(lNb6V#dCpSKW%TT@VIMvFvz!K$oN1v#E@%Fp3O_sQ zmbSM-`}i8WCzSyPl?NqS^NqOYg4+tXT52ItLoTA;4mfx3-lev-HadLiA}!)%PwV)f zumi|*v}_P;*hk9-c*ibZqBd_ixhLQA+Xr>akm~QJCpfoT!u5JA_l@4qgMRf+Bi(Gh zBOtYM<*PnDOA}ls-7YrTVWimdA{y^37Q#BV>2&NKUfl(9F9G}lZ{!-VfTnZh-}vANUA=kZz5}{^<2t=| z{D>%{4**GFekzA~Ja)m81w<3IaIXdft(FZDD2oTruW#SJ?{Iv&cKenn!x!z;LfueD zEgN@#Px>AgO$sc`OMv1T5S~rp@e3-U7LqvJvr%uyV7jUKDBZYor^n# zR8bDS*jTTdV4l8ug<>o_Wk~%F&~lzw`sQGMi5{!yoTBs|8;>L zD=nbWe5~W67Tx`B@_@apzLKH@q=Nnj$a1EoQ%5m|;3}WxR@U0q^=umZUcB}dz5n^8 zPRAi!1T)V8qs-eWs$?h4sVncF`)j&1`Rr+-4of)XCppcuoV#0EZ8^>0Z2LYZirw#G7=POO0U*?2*&a7V zn|Dx3WhqT{6j8J_PmD=@ItKmb-GlN>yH5eJe%-WR0D8jh1;m54AEe#}goz`fh*C%j zA@%m2wr3qZET9NLoVZ5wfGuR*)rV2cmQPWftN8L9hzEHxlofT@rc|PhXZ&SGk>mLC z97(xCGaSV+)DeysP_%tl@Oe<6k9|^VIM*mQ(IU5vme)80qz-aOT3T(VOxU><7R4#;RZfTQeI$^m&cw@}f=eBDYZ+b&N$LyX$Au8*J1b9WPC zk_wIhRHgu=f&&@Yxg-Xl1xEnl3xHOm1xE(NEy@oLx8xXme*uJ-7cg)a=lVq}gm3{! z0}fh^fyW*tAa%6Dcq0I5z(K2#0Ga*a*!mkF5#0&|BxSS`fXa(?^Be)lY0}Me1R$45 z6OI7HbFTOffV^;gfOt%b+SH$3e*q)_&;q0p$}uAcAiX>XkqU#c790SX&E2~lkOB_G zKJ`C9ki9?xz)+Cm2tYb{js(c8o9FleQsy}_Ad5d7F((TOP!GQbT(nFhx6IBlIHLQ zgXXeN84Yfl5^NsSQ!kRoGoVyhyQXsYTgXWy@*K>_h02S>)Io^59+E)h zGFV5n!hjqv%Oc>+V;J$A_ekQjz$f-;Uace07pQvY6}%aIZUZ}_m*>DHx|mL$gUlGo zpJtxJ-3l!SVB~J4l=zq>$T4VaQ7?R}!7V7tvO_bJ8`$|ImsvN@kpXGtISd6|N&r&B zkpY!Z%;q4z)rd81@12)8F>qUU_(dxjkWQYX4XAxEmH?G>4ruF!AX<2qpdqxJ3I!SaZj(bdjDpXdS%NK!YvET$}#ao zW-QD5;qF}ZN4;`6g&z16w|Qd=`#4hg+UF^02UgmQka=%|A!5CjRL86{{mwzf=~v{&!Uo zYhJ00Shva@yJ59^Qq~$b)+5%gl79Qv*Gl#YS+BO+RQrr$dmQX)o6o-P_wHC$#H%aa z5o>q~f8c=-2(k3lb!CqFQJ;;7+2h#B$V_anm}>Zr(v{I_-09@zzZ yco6bG9zMVq_|y~s4rIt6QD_M*p(V5oh~@tmE4?#%!pj)|0000T-ViIFIPY+_yk1-RB&z5bHD$YnPieqLK5EI`ThRCq%$YyeCI#k z>wI&j0Rb2DV5|p6T3Syaq)GU^8BR8(!9qaEe6w+TJxLZtBeQf z`>{w%?oW}WhJSMi-;YIE3P2FtzE8p;}`HCT>Lt1o3h65;M`4J@U(hJSYlTt_?Ucf5~AOFjBT-*WTiV_&id z?xIZPQ`>7M-B?*vptTsj)0XBk37V2zTSQ5&6`0#pVU4dg+Hj7pb;*Hq8nfP(P;0i% zZ7k>Q#cTGyguV?0<0^_L$;~g|Qqw58DUr~LB=oigZFOvHc|MCM(KB_4-l{U|t!kPu z{+2Mishq{vnwb2YD{vj{q`%Pz?~D4B&S9Jdt##WlwvtR2)d5RdqcIvrs!MY#BgDI# z+FHxTmgQp-UG66D4?!;I0$Csk<6&IL09jn+yWmHxUf)alPUi3jBIdLtG|Yhn?vga< zJQBnaQ=Z?I+FZj;ke@5f{TVVT$$CMK74HfIhE?eMQ#fvN2%FQ1PrC+PAcEu?B*`Ek zcMD{^pd?8HMV94_qC0g+B1Z0CE-pcWpK=hDdq`{6kCxxq^X`oAYOb3VU6%K=Tx;aG z*aW$1G~wsy!mL})tMisLXN<*g$Kv)zHl{2OA=?^BLb)Q^Vqgm?irrLM$ds;2n7gHt zCDfI8Y=i4)=cx_G!FU+g^_nE(Xu7tj&a&{ln46@U3)^aEf}FHHud~H%_0~Jv>X{Pm z+E&ljy!{$my1j|HYXdy;#&&l9YpovJ;5yoQYJ+hw9>!H{(^6+$(%!(HeR~&MP-UER zPR&hH$w*_)D3}#A2joDlamSP}n%Y3H@pNb1wE=G1TFH_~Lp-&?b+q%;2IF8njO(rq zQVx(bn#@hTaqZZ1V{T#&p)zL%!r8%|p|TJLgSztxmyQo|0P;eUU~a0y&4)u?eEeGZ z9M6iN2(zw9a(WoxvL%S*jx5!2$E`ACG}F|2_)UTkqb*jyXm{3{73tLMlU%IiPK(UR4}Uv87uZIacp(XTRUs?6D25qn)QV%Xe&LZ-4bUJM!ZXtnKhY#Ws)^axZkui_Z=7 zOlc@%Gj$nLul=cEH-leGY`0T)`IQzNUSo}amQtL)O>v* zNJH1}B2znb;t8tf4-S6iL2_WuMVr~! zwa+Are(1_>{zqfTcoYN)&#lg$AVibhUwnFA33`np7$V)-5~MQcS~aE|Ha>IxGu+iU z`5{4rdTNR`nUc;CL5tfPI63~BlehRcnJ!4ecxOkD-b&G%-JG+r+}RH~wwPQoxuR(I z-89hLhH@)Hs}fNDM1>DUEO%{C;roF6#Q7w~76179D?Y9}nIJFZhWtv`=QNbzNiUmk zDSV5#xXQtcn9 zM{aI;AO6EH6GJ4^Qk!^F?$-lTQe+9ENYIeS9}cAj>Ir`dLe`4~Dulck2#9{o}JJ8v+QRsAAp*}|A^ z1PxxbEKFxar-$a&mz95(E1mAEVp{l!eF9?^K43Ol`+3Xh5z`aC(r}oEBpJK~e>zRtQ4J3K*r1f79xFs>v z5yhl1PoYg~%s#*ga&W@K>*NW($n~au>D~{Rrf@Tg z^DN4&Bf0C`6J*kHg5nCZIsyU%2RaiZkklvEqTMo0tFeq7{pp8`8oAs7 z6~-A=MiytuV+rI2R*|N=%Y));j8>F)XBFn`Aua-)_GpV`#%pda&MxsalV15+%Oy#U zg!?Gu&m@yfCi8xHM>9*N8|p5TPNucv?3|1$aN$&X6&Ge#g}?H`)4ncN@1whNDHF7u z2vU*@9OcC-MZK}lJ-H5CC@og69P#Ielf`le^Om4BZ|}OK33~dC z9o-007j1SXiTo3P#6`YJ^T4tN;KHfgA=+Bc0h1?>NT@P?=}W;Z=U;!nqzTHQbbu37 zOawJK2$GYeHtTr7EIjL_BS8~lBKT^)+ba(OWBsQT=QR3Ka((u#*VvW=A35XWkJ#?R zpRksL`?_C~VJ9Vz?VlXr?cJgMlaJZX!yWW}pMZni(bBP>?f&c#+p2KwnKwy;D3V1{ zdcX-Pb`YfI=B5+oN?J5>?Ne>U!2oCNarQ&KW7D61$fu$`2FQEWo&*AF%68{fn%L<4 zOsDg%m|-bklj!%zjsYZr0y6BFY|dpfDvJ0R9Qkr&a*QG0F`u&Rh{8=gq(fuuAaWc8 zRmup;5F zR3altfgBJbCrF7LP7t+8-2#HL9pn&HMVoEnPLE@KqNA~~s+Ze0ilWm}ucD8EVHs;p z@@l_VDhtt@6q zmV7pb1RO&XaRT)NOe-&7x7C>07@CZLYyn0GZl-MhPBNddM0N}0jayB22swGh3C!m6~r;0uCdOJ6>+nYo*R9J7Pzo%#X_imc=P;u^O*#06g*l)^?9O^cwu z>?m{qW(CawISAnzIf^A@vr*J$(bj4fMWG!DVMK9umxeS;rF)rOmvZY8%sF7i3NLrQ zCMI5u5>e<&Y4tpb@?!%PGzlgm_c^Z7Y6cO6C?)qfuF)!vOkifE(aGmXko*nI3Yr5_ zB%dP>Y)esVRQrVbP5?CtAV%1ftbeAX zSO5O8m|H+>?Ag7NFznXY-Y8iI#>Xdz<)ojC6nCuqwTY9Hlxg=lc7i-4fdWA$x8y)$ z1cEAfv{E7mnX=ZTvo30>Vc{EJ_@UqAo91Co;@r;u7&viaAa=(LUNnDMq#?t$WP2mu zy5`rr8b||Z0+BS)Iiwj0lqg10xE8QkK#>Cp6zNdxLb-wi+CW5b7zH2+M4p3Cj%WpQ zvV+J2IY@kOFU_|NN}2O}n#&F1oX*)lDd-WJICcPhckHVB{_D}UMo!YA)`reITkCv& z+h-AyO1k3@ZEIrpHB)j~Z(*sF@TFpx2IVtytZ1!gf7rg2x94b*P|1@%EFX{|BMC&F zgHR4<48Z5Wte`o!m*m@iyK=>9%pqjT=xfgQua>)1| zzH!~jLG!rggat+qAIR%H=jrI#Ppid$J{TDkck^wb>Cbnli}}Mj8!tNfx{tXtDDVA6#7kU4k)m;JoI1>JM_ zq-flQ5dpn>kG~=9u{Kp+hETG^OCq!Y^l7JkwUJNUU7izHmd|F@nB0=X2`Ui?!twzb zGEx%cIl)h?ZV$NTnhB6KFgkkRg&@c7ldg>o!`sBcgi%9RE?paz`QmZ@sF(jo1bt^} zOO5xhg(FXLQ|z)6CE=`kWOCVJNJCs#Lx)8bDSWkN@122J_Z`gpPK4kwk4&%uxnuQ z^m`!#WD#Y$Wd7NSpiP4Y;lHtj;pJ#m@{GmdPp+;QnX&E&oUq!YlgQ%hIuM43b=cWO zKEo!Er{mwD8T1>Qs$i2XjF2i zo0yfpKQUwdThrD(TOIY_s`L@_<}B|w^!j*FThM0+#t0G?oR`l(S(2v&bXR}F6HLMU zhVvD4K!6s}uUD^L;|Sxgrb+kFs%8d8Ma>5A9p~uUO=yF*;%~xvAJiA`lls1pq5J%k z6&-yQ$_vP5`-Tr56ws&75Y&Q2;zD?CB_KpRHxzC9hKCR0889>jef)|@@$A?!QIu3r qa)363hF;Bq?>HxvTY6qhhx>m(`%O(!)s{N|0000xsEBz6iy~SX+W%nrKL2KH{`gFsDCOB6ZW0@Yj?g&st+$-t|2c4&NM7M5Tk(z5p1+IN@y}=N)4$Vmgo_?Y@Ck5u}3=}@K z);Ns<{X)3-we^O|gm)Oh1^>hg6g=|b7E-r?H6QeeKvv7{-kP9)eb76lZ>I5?WDjiX z7Qu}=I4t9`G435HO)Jpt^;4t zottB%?uUE#zt^RaO&$**I5GbJM-Nj&Z#XT#=iLsG7*JO@)I~kH1#tl@P}J@i#`XX! zEUc>l4^`@w2_Fsoa*|Guk5hF2XJq0TQ{QXsjnJ)~K{EG*sHQW(a<^vuQkM07vtNw= z{=^9J-YI<#TM>DTE6u^^Z5vsVZx{Lxr@$j8f2PsXr^)~M97)OdjJOe81=H#lTbl`!5}35~o;+uSbUHP+6L00V99ox@t5JT2~=-{-Zvti4(UkQKDs{%?4V4AV3L`G476;|CgCH%rI z;0kA=z$nkcwu1-wIX=yE5wwUO)D;dT0m~o7z(f`*<1B>zJhsG0hYGMgQ0h>ylQYP; zbY|ogjI;7_P6BwI^6ZstC}cL&6%I8~cYe1LP)2R}amKG>qavWEwL0HNzwt@3hu-i0 z>tX4$uXNRX_<>h#Q`kvWAs3Y+9)i~VyAb3%4t+;Ej~o)%J#d6}9XXtC10QpHH*X!(vYjmZ zlmm6A=sN)+Lnfb)wzL90u6B=liNgkPm2tWfvU)a0y=N2gqg_uRzguCqXO<0 zp@5n^hzkW&E&~|ZnlPAz)<%Cdh;IgaTGMjVcP{dLFnX>K+DJ zd?m)lN&&u@soMY!B-jeeZNHfQIu7I&9N?AgMkXKxIC+JQibV=}9;p)91_6sP0x=oO zd9T#KhN9M8uO4rCDa ze;J+@sfk?@C6ke`KmkokKLLvbpNHGP^1^^YoBV^rxnXe8nl%NfKS}ea`^9weO&eZ` zo3Nb?%LfcmGM4c%PpK;~v#XWF+!|RaTd$6126a6)WGQPmv0E@fm9;I@#QpU0rcGEJ zNS_DL26^sx!>ccJF}F){`A0VIvLan^$?MI%g|@ebIFlrG&W$4|8=~H%Xsb{gawm(u zEgD&|uQgc{a;4k6J|qjRZzat^hbRSXZwu7(c-+?ku6G1X0c*0%*CyUsXxlKf=%wfS z7A!7+`^?MrPvs?yo31D=ZCu!3UU`+dR^S>@R%-y+!b$RlnflhseNn10MV5M=0KfZ+ zl9DEH0jK5}{VOgmzKClJ7?+=AED&7I=*K$;ONIUM3nyT|P}|NXn@Qhn<7H$I*mKw1 axPAxe%7rDusX+w*00006jj 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⁣ zwiG+x#%j}{0gU~J8;<|!B1@-XaB@{KORFwrYg_8rOv({b0EO#DbeQRm;B6_9=mXGf z-x|VL{zd`)#@yN}HkCSJbjbNlE|zL3Wm9Q8HY`sV)}3%pgN>cL^67{Z;PPL(*wT8N zUjXU{@|*hvm}({wsAC=x0^ok0%UAz0;sogW{B!nDqk|JJ5x~4NfTDgP49^zeu`csl?5mY@JdQdISc zFs!E{^grmkLnUk9 zny~m)1vws@5BFI<-0Tuo2JWX(0v`W|t(wg;s--L47WTvTMz-8l#TL^=OJNRS2?_Qj z3AKT+gvbyBi#H*-tJ%tWD|>EV3wy|8qxfzS!5RW;Jpl5*zo&^UBU=fG#2}UvRyNkK zA06Dy9;K1ca@r2T>yThYgI!ont$(G{6q#2QT+00r_x0(b)gsE`lBB?2gr55gq^D3Fi&p%E(p9>U%bv zkg1Jco(RbyTX7FDHOnl7-O@ zI$AaIl?9NJKPm(WiBP`1-#CB1QzU>&hKm)fpa5DKE{2$X0hGz-0uZ?cyTk(YC!Y&| zL=1VrNERSA5NA2jq7FACfX4JfPyj5XXl1yv0>~s;eF7L2$>&oMqeTFT2m$y7FlkON z_yurD1yIOvA;5C6016pyxBznGUt0kJ&k5r#;&>Jow`r)sp9R~PmK~lz$3xH%LT*1U zJdOyABZ3!FvNoR*vN$5ykHS8f`jA4zV+|L}i1C4`B2c{R0;UdYxaU|H)2avz@ z=mEYc|2S<+(B2Tj+FkX+2D+yFI!k9lWMA61DJ{)e;lum$(;O87?vGJJe!KtK04+N_ zI*P~t@dUb>9Xh{dbyl{-ZQ(UMgz7$|QfL5XSPkskt^NgctYC#;4WcZB1@%@wy@2t3 z2z0DI7&%b$*Aw~abe?GxE`ez@+6hOh-6*8fHRV{1os$EL@}uUZeG4h1&Be`98q*7j z=3-v+lhIjfWVo12!<>%V^a6lTgW3+_#W6n|p*~==zOH7z$0{LSZk(Tpd7EaD04hnA zL;#fxS0aD{`5^&D`}>0Uq?byDD-l2=!wm_bLcUl4gc(% za1p|itVANvFF>hghAS07Im1;IK;|b*W)}VDyI;BIp2=K*yu2a)j?B|f<44NI$NbmJ z#dE0>jI$fMr&@>4kN8MLFb4&2O9fEKaQg%(QO$4_1rVQywG^CmBLh#}_7gKW3vd?| z2?1^&KWq8}8I^_S0|)MowU_pw$q@nl@Nkn$z>BQq_KA^9yaR`(R3u{{Ig;cwt z@AJ^{ODQCm^neroM9nKNUAXi9RCK`OsP_LuR0PUR(YZCCX5dNF6VzcoK&=b^r`W?ltt|*F zpkoae%ZT{C1h~EcFui~b7fF`vb<<~j_VquuUA$}QqIKYELPp#;{u?q8Dz}WAG-(3; zjrm$i%7UbyZMM(Y{>!uJ#vNB?R~B{6Htp=>e*<{fQQ5W7V(1coCWlOON!MzZxhum| ztZBQpGR z;~#ur^&PockKdV{Q6R>o`Pl{0x!DEbpZ7y9Y;*ZvE!*gU`V1W3znva{f=?WO5I&>B z&hw6}tjECtaghm5z|C#%M;Yf_*pI^};h}Vl=^r9EN=tVDj86D;C$jIJ?K7VP+00000NkvXXu0mjf D5i!M* diff --git a/apps/legacy/bare-rn/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/apps/legacy/bare-rn/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png deleted file mode 100644 index 459ca609d3ae0d3943ab44cdc27feef9256dc6d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7098 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 diff --git a/apps/legacy/bare-rn/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/apps/legacy/bare-rn/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png deleted file mode 100644 index 8ca12fe024be86e868d14e91120a6902f8e88ac6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6464 zcma)BcR1WZxBl%e)~?{d=GL+&^aKnR?F5^S)H60AiZ4#Zw z<{%@_?XtN*4^Ysr4x}4T^65=zoh0oG>c$Zd1_pX6`i0v}uO|-eB%Q>N^ZQB&#m?tGlYwAcTcjWKhWpN*8Y^z}bpUe!vvcHEUBJgNGK%eQ7S zhw2AoGgwo(_hfBFVRxjN`6%=xzloqs)mKWPrm-faQ&#&tk^eX$WPcm-MNC>-{;_L% z0Jg#L7aw?C*LB0?_s+&330gN5n#G}+dQKW6E7x7oah`krn8p`}BEYImc@?)2KR>sX{@J2`9_`;EMqVM;E7 zM^Nq2M2@Ar`m389gX&t}L90)~SGI8us3tMfYX5};G>SN0A%5fOQLG#PPFJYkJHb1AEB+-$fL!Bd}q*2UB9O6tebS&4I)AHoUFS6a0* zc!_!c#7&?E>%TorPH_y|o9nwb*llir-x$3!^g6R>>Q>K7ACvf%;U5oX>e#-@UpPw1ttpskGPCiy-8# z9;&H8tgeknVpz>p*#TzNZQ1iL9rQenM3(5?rr(4U^UU z#ZlsmgBM9j5@V-B83P3|EhsyhgQ77EsG%NO5A6iB2H; zZ1qN35-DS^?&>n1IF?bU|LVIJ-)a3%TDI*m*gMi7SbayJG$BfYU*G+{~waS#I(h-%@?Js8EohlFK)L6r2&g ztcc$v%L)dK+Xr=`-?FuvAc@{QvVYC$Y>1$RA%NKFcE$38WkS6#MRtHdCdDG)L5@99 zmOB8Tk&uN4!2SZ@A&K>I#Y$pW5tKSmDDM|=;^itso2AsMUGb8M-UB;=iAQLVffx9~ z>9>|ibz#eT>CNXD*NxH55}uwlew*<*!HbMj&m@)MJpB3+`0S~CS*}j%xv0#&!t?KV zvzMowAuAt0aiRnsJX@ELz=6evG5`vT22QVgQ8`R8ZRMFz4b*L1Iea$C{}L-`I@ADV z>6E7u@2*aes?Tbya7q(2B@(_EQ`i{|e`sX<`|EStW0J4wXXu{=AL)Yc~qrWr;0$Pv5 zv>|&Z)9;X%pA)*;27gocc66voVg~qDgTjj+(U9|$GL0^^aT_|nB9A30Cit)kb|vD4 zf)DnEpLD$vFe;2q6HeCdJHy;zdy!J*G$c>?H)mhj)nUnqVZgsd$B3_otq0SLKK#6~ zYesV8{6fs%g73iiThOV6vBCG|%N@T5`sPyJC=Khz2BFm;>TDQsy`9-F*ndRcrY(oR zi`Yl&RS)~S{(6bu*x$_R`!T^Rb*kz$y74i|w!v9dWZch7*u=!*tHWu{H)+?o_5R?j zC3fh6nh%xP1o2@)nCKrOt45=`RDWzlx4E4Vyt~xJp=x(& z&nexdTA1T z8wlsklpvKX6UmIAoqD2{y!U7sJ1pb*!$$7-$WqT`P85GQnY<9f-V#A{D0qB4s( zM}v7W^xaEsAKOKHwfqZjhp--BnCdoIWKR-`Fzd|6nA|kgToLF%fZtoODEB96Wo9H1 z0Sdw%@}akuaT$>wLSecayqMj-91_>92B%+(=`^b?eO-^^iU_rUI1HudU9|kEC)+4kO$7RH+ld1twCmYZY9TvW^5l;Z}B8= z896yWiZZB`qqS&OG0XwC_$cobL16lrJ*2c3&fKbrp9 z%tlJvW_MO`=d4M{%mK#3Z4&l;9YJ1vr(ouTCy`gN^l^_A9NgpWRb8LrAX%Q#*Cmp5 zIwyGcPL%eUjz^{sVkq*vzFy#ta>EToiootr5A5XFi*hI$n2k0Y^t86pm2&3+F0p%mt`GZnV`T}#q!8*EbdK85^V zKmz&wU&?nse8nxapPCARIu14E@L92H30#omJIM-srk(t?deU6h*}Dy7Er~G6)^t#c>Md`*iRFxBLNTD%xZ?*ZX(Eyk@A7-?9%^6Mz+0mZ94+f?$Bjyu# z13t~Gc4k*z$MR-EkcUxB z&qf)13zOI)&aC{oO!Rc0f=E+Fz%3Dh2 zV#s?W#u7wIkKwpC1JpsDx>w@|$yx6)8IuolPXc&F`pg23fo3ut{Vi&9S5ax7tA`Jt zwy+x6 zmAjv170vr2Nqvw^f>!9m2c`;ERAPyYv%geDGY^+1Hu9_Ds%%_dgo`-0nQe|jj?3cV zBs&>A3u~RhH@@aaaJYOi^)d;Q9|^Bvl4*H#aNHs#`I7&5osKp$o#b8(AHEYaGGd5R zbl*pMVCA?^kz#h)fPX{it?;>NPXZ%jYUL7&`7ct>ud@Fafg?^dudINo z(V}0Pzk*<5wlI*`V}S9|VcGUJ>E(Z~SJK!qm!rRVg_iEo}kx(ZP@xbA^ zv5C}~Frbyc79Gf|LEN9bkut~oE_ts|A0;FoQd}xjkal?FrynlE$0~+WvV3FqT7hl& zCex`(-&TN>>hn=Z-GiZcT6`@s4Q={XbGonu=`?IO(DL;a7q4GJT*LFu=i-0%HoxX6 zcE6uWDcb4U{c-Lv)sS5Laat=&7<4^Nx-dI0yhCBphb{EUIOPF!x-K*8?4mhe)ql&=>t&BpmQ+Cro zU}jKu9ZVtI-zmH~&_GitE94R}uPo|TH7Avb>6`bfsw(H5#6i@1eAjnbJ6Jp2`sUyA zT6=~iK`oPTyOJ@B7;4>Mu_)Y5CU8VBR&hfdao**flRo6k_^jd9DVW1T%H662;=ha4 z|GqT_1efxomD2pViCVn>W{AJnZU z@(<&n5>30Xt6qP&C^{bC7HPAF@InDSS1jw5!M7p#vbz_0rOjeBFXm4vp#JW99$+91 zK~k`ZV)&&?=i!OIUJn61H*6??S4i2(>@e9c&~OD1RmDDRjY>mIh*T2~R)d#BYSQSV z<518JITbPK5V-O@m<{jeB0FU^j)M2SbBZhP~{vU%3pN+$M zPFjBIaP?dZdrsD*W5MU`i(Z*;vz&KFc$t|S+`C4<^rOY}L-{km@JPgFI%(Qv?H70{ zP9(GR?QE@2xF!jYE#Jrg{OFtw-!-QSAzzixxGASD;*4GzC9BVbY?)PI#oTH5pQvQJ z4(F%a)-AZ0-&-nz;u$aI*h?4q{mtLHo|Jr5*Lkb{dq_w7;*k-zS^tB-&6zy)_}3%5 z#YH742K~EFB(D`Owc*G|eAtF8K$%DHPrG6svzwbQ@<*;KKD^7`bN~5l%&9~Cbi+P| zQXpl;B@D$-in1g8#<%8;7>E4^pKZ8HRr5AdFu%WEWS)2{ojl|(sLh*GTQywaP()C+ zROOx}G2gr+d;pnbYrt(o>mKCgTM;v)c&`#B0IRr8zUJ*L*P}3@{DzfGART_iQo86R zHn{{%AN^=k;uXF7W4>PgVJM5fpitM`f*h9HOPKY2bTw;d_LcTZZU`(pS?h-dbYI%) zn5N|ig{SC0=wK-w(;;O~Bvz+ik;qp}m8&Qd3L?DdCPqZjy*Dme{|~nQ@oE+@SHf-` zDitu;{#0o+xpG%1N-X}T*Bu)Qg_#35Qtg69;bL(Rfw*LuJ7D5YzR7+LKM(f02I`7C zf?egH(4|Ze+r{VKB|xI%+fGVO?Lj(9psR4H0+jOcad-z!HvLVn2`Hu~b(*nIL+m9I zyUu|_)!0IKHTa4$J7h7LOV!SAp~5}f5M;S@2NAbfSnnITK3_mZ*(^b(;k-_z9a0&^ zD9wz~H~yQr==~xFtiM8@xM$))wCt^b{h%59^VMn|7>SqD3FSPPD;X>Z*TpI-)>p}4 zl9J3_o=A{D4@0OSL{z}-3t}KIP9aZAfIKBMxM9@w>5I+pAQ-f%v=?5 z&Xyg1ftNTz9SDl#6_T1x4b)vosG(9 ze*G{-J=_M#B!k3^sHOas?)yh=l79yE>hAtVo}h~T)f&PmUwfHd^GIgA$#c{9M_K@c zWbZ@sJ{%JeF!chy?#Y6l_884Q)}?y|vx&R~qZDlG#Q$pU2W+U4AQ+gt-ViZ@8*)W| zN}wXeW~TTA#eqe)(vdbZm(Pm3j;>#thsjkQ;WH#a1e>C?-z7B%5go0khC;qQfrA-~ z$^9-bBZi+WMhAW0%y*4FlNC%SvM%a(`BE ze-4>w7)wg(sKN@T-nTl^G~+e{lyeTG(dfoz3U!LKf{rmR=<}+ih`q1*(OB8oS#B&> z;Mf*_o&W5*=YXfgFP}B@p)|WJA7X^OhD8)dnP)jzA@E=&=Ci7QzO`+_Vzsr zPWpZ3Z1>W?dNv6)H}>_%l*Di^aMXFax2)v1ZCxi4OJKTI<)yK_R>n#>Sv$LTRI8cB ziL<^H!Q&(ny#h19ximj|=3WygbFQ9j_4d8yE5}Rvb>DpH^e#I;g6}sM7nZnLmyB3# z!UenLG)cb%%--*pozd3}aX#-Nmu5ptKcp>-zcwRx9se(_2ZQsmWHU!Rgj3QRPn3UF z_sqgJ&Eb=kv+m0$9uW~j-aZ0Hq#b_2f^rS*bL}stW91HXNt0JDK~q-%62AW}++%IT zk!ZO&)BjYf)_bpTye9UB=w_-2M{YgE#ii%`l+(PHe_QjW@$o^e)A&KoW2)+!I9Ohw zDB1e=ELr`L3zwGjsfma_2>Th#A0!7;_??{~*jzt2*T6O%e3V)-7*TMGh!k050cAi2C?f}r2CHy&b8kPa2#6aI1wtOBBfiCCj?OjhctJT zF|t;&c+_-i=lhK}pNiu>8*ZFrt0rJp={`H182b$`Zb>SI(z!@Hq@<+#JSpVAzA3oc z@yEcV|MbQ+i)`%|)klTCzCj&qoC0c7g6FFgsUhcaDowSG{A=DV19LHK*M7TK?HV;a zAAvOV<(8UlC>jP4XE>(OS{6DfL B0*L?s diff --git a/apps/legacy/bare-rn/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/apps/legacy/bare-rn/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png deleted file mode 100644 index 8e19b410a1b15ff180f3dacac19395fe3046cdec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10676 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 diff --git a/apps/legacy/bare-rn/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/apps/legacy/bare-rn/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png deleted file mode 100644 index 4c19a13c239cb67b8a2134ddd5f325db1d2d5bee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15523 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 BIP(Ai diff --git a/apps/legacy/bare-rn/android/app/src/main/res/values/strings.xml b/apps/legacy/bare-rn/android/app/src/main/res/values/strings.xml deleted file mode 100644 index 6a435ace24..0000000000 --- a/apps/legacy/bare-rn/android/app/src/main/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - bare_rn - diff --git a/apps/legacy/bare-rn/android/app/src/main/res/values/styles.xml b/apps/legacy/bare-rn/android/app/src/main/res/values/styles.xml deleted file mode 100644 index 7ba83a2ad5..0000000000 --- a/apps/legacy/bare-rn/android/app/src/main/res/values/styles.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - diff --git a/apps/legacy/bare-rn/android/build.gradle b/apps/legacy/bare-rn/android/build.gradle deleted file mode 100644 index dad99b022a..0000000000 --- a/apps/legacy/bare-rn/android/build.gradle +++ /dev/null @@ -1,21 +0,0 @@ -buildscript { - ext { - buildToolsVersion = "36.0.0" - minSdkVersion = 24 - compileSdkVersion = 36 - targetSdkVersion = 36 - ndkVersion = "27.1.12297006" - kotlinVersion = "2.1.20" - } - repositories { - google() - mavenCentral() - } - dependencies { - classpath("com.android.tools.build:gradle") - classpath("com.facebook.react:react-native-gradle-plugin") - classpath("org.jetbrains.kotlin:kotlin-gradle-plugin") - } -} - -apply plugin: "com.facebook.react.rootproject" diff --git a/apps/legacy/bare-rn/android/gradle.properties b/apps/legacy/bare-rn/android/gradle.properties deleted file mode 100644 index 9afe61598f..0000000000 --- a/apps/legacy/bare-rn/android/gradle.properties +++ /dev/null @@ -1,44 +0,0 @@ -# Project-wide Gradle settings. - -# IDE (e.g. Android Studio) users: -# Gradle settings configured through the IDE *will override* -# any settings specified in this file. - -# For more details on how to configure your build environment visit -# http://www.gradle.org/docs/current/userguide/build_environment.html - -# Specifies the JVM arguments used for the daemon process. -# The setting is particularly useful for tweaking memory settings. -# Default value: -Xmx512m -XX:MaxMetaspaceSize=256m -org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m - -# When configured, Gradle will run in incubating parallel mode. -# This option should only be used with decoupled projects. More details, visit -# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects -# org.gradle.parallel=true - -# AndroidX package structure to make it clearer which packages are bundled with the -# Android operating system, and which are packaged with your app's APK -# https://developer.android.com/topic/libraries/support-library/androidx-rn -android.useAndroidX=true - -# Use this property to specify which architecture you want to build. -# You can also override it from the CLI using -# ./gradlew -PreactNativeArchitectures=x86_64 -reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64 - -# Use this property to enable support to the new architecture. -# This will allow you to use TurboModules and the Fabric render in -# your application. You should enable this flag either if you want -# to write custom TurboModules/Fabric components OR use libraries that -# are providing them. -newArchEnabled=true - -# Use this property to enable or disable the Hermes JS engine. -# If set to false, you will be using JSC instead. -hermesEnabled=true - -# Use this property to enable edge-to-edge display support. -# This allows your app to draw behind system bars for an immersive UI. -# Note: Only works with ReactActivity and should not be used with custom Activity. -edgeToEdgeEnabled=false diff --git a/apps/legacy/bare-rn/android/gradle/wrapper/gradle-wrapper.jar b/apps/legacy/bare-rn/android/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 8bdaf60c75ab801e22807dde59e12a8735a34077..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45457 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 c82=K%QXLKFx%@O{wJjEi6Y56o#$)Bpeg diff --git a/apps/legacy/bare-rn/android/gradle/wrapper/gradle-wrapper.properties b/apps/legacy/bare-rn/android/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index 2a84e188b8..0000000000 --- a/apps/legacy/bare-rn/android/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,7 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.0.0-bin.zip -networkTimeout=10000 -validateDistributionUrl=true -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/apps/legacy/bare-rn/android/gradlew b/apps/legacy/bare-rn/android/gradlew deleted file mode 100755 index ef07e0162b..0000000000 --- a/apps/legacy/bare-rn/android/gradlew +++ /dev/null @@ -1,251 +0,0 @@ -#!/bin/sh - -# -# Copyright © 2015 the original authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# https://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# SPDX-License-Identifier: Apache-2.0 -# - -############################################################################## -# -# Gradle start up script for POSIX generated by Gradle. -# -# Important for running: -# -# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is -# noncompliant, but you have some other compliant shell such as ksh or -# bash, then to run this script, type that shell name before the whole -# command line, like: -# -# ksh Gradle -# -# Busybox and similar reduced shells will NOT work, because this script -# requires all of these POSIX shell features: -# * functions; -# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», -# «${var#prefix}», «${var%suffix}», and «$( cmd )»; -# * compound commands having a testable exit status, especially «case»; -# * various built-in commands including «command», «set», and «ulimit». -# -# Important for patching: -# -# (2) This script targets any POSIX shell, so it avoids extensions provided -# by Bash, Ksh, etc; in particular arrays are avoided. -# -# The "traditional" practice of packing multiple parameters into a -# space-separated string is a well documented source of bugs and security -# problems, so this is (mostly) avoided, by progressively accumulating -# options in "$@", and eventually passing that to Java. -# -# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, -# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; -# see the in-line comments for details. -# -# There are tweaks for specific operating systems such as AIX, CygWin, -# Darwin, MinGW, and NonStop. -# -# (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt -# within the Gradle project. -# -# You can find Gradle at https://github.com/gradle/gradle/. -# -############################################################################## - -# Attempt to set APP_HOME - -# Resolve links: $0 may be a link -app_path=$0 - -# Need this for daisy-chained symlinks. -while - APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path - [ -h "$app_path" ] -do - ls=$( ls -ld "$app_path" ) - link=${ls#*' -> '} - case $link in #( - /*) app_path=$link ;; #( - *) app_path=$APP_HOME$link ;; - esac -done - -# This is normally unused -# shellcheck disable=SC2034 -APP_BASE_NAME=${0##*/} -# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD=maximum - -warn () { - echo "$*" -} >&2 - -die () { - echo - echo "$*" - echo - exit 1 -} >&2 - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "$( uname )" in #( - CYGWIN* ) cygwin=true ;; #( - Darwin* ) darwin=true ;; #( - MSYS* | MINGW* ) msys=true ;; #( - NONSTOP* ) nonstop=true ;; -esac - -CLASSPATH="\\\"\\\"" - - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD=$JAVA_HOME/jre/sh/java - else - JAVACMD=$JAVA_HOME/bin/java - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD=java - if ! command -v java >/dev/null 2>&1 - then - die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -fi - -# Increase the maximum file descriptors if we can. -if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then - case $MAX_FD in #( - max*) - # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - MAX_FD=$( ulimit -H -n ) || - warn "Could not query maximum file descriptor limit" - esac - case $MAX_FD in #( - '' | soft) :;; #( - *) - # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC2039,SC3045 - ulimit -n "$MAX_FD" || - warn "Could not set maximum file descriptor limit to $MAX_FD" - esac -fi - -# Collect all arguments for the java command, stacking in reverse order: -# * args from the command line -# * the main class name -# * -classpath -# * -D...appname settings -# * --module-path (only if needed) -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. - -# For Cygwin or MSYS, switch paths to Windows format before running java -if "$cygwin" || "$msys" ; then - APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) - - JAVACMD=$( cygpath --unix "$JAVACMD" ) - - # Now convert the arguments - kludge to limit ourselves to /bin/sh - for arg do - if - case $arg in #( - -*) false ;; # don't mess with options #( - /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath - [ -e "$t" ] ;; #( - *) false ;; - esac - then - arg=$( cygpath --path --ignore --mixed "$arg" ) - fi - # Roll the args list around exactly as many times as the number of - # args, so each arg winds up back in the position where it started, but - # possibly modified. - # - # NB: a `for` loop captures its iteration list before it begins, so - # changing the positional parameters here affects neither the number of - # iterations, nor the values presented in `arg`. - shift # remove old arg - set -- "$@" "$arg" # push replacement arg - done -fi - - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' - -# Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, -# and any embedded shellness will be escaped. -# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be -# treated as '${Hostname}' itself on the command line. - -set -- \ - "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ - "$@" - -# Stop when "xargs" is not available. -if ! command -v xargs >/dev/null 2>&1 -then - die "xargs is not available" -fi - -# Use "xargs" to parse quoted args. -# -# With -n1 it outputs one arg per line, with the quotes and backslashes removed. -# -# In Bash we could simply go: -# -# readarray ARGS < <( xargs -n1 <<<"$var" ) && -# set -- "${ARGS[@]}" "$@" -# -# but POSIX shell has neither arrays nor command substitution, so instead we -# post-process each arg (as a line of input to sed) to backslash-escape any -# character that might be a shell metacharacter, then use eval to reverse -# that process (while maintaining the separation between arguments), and wrap -# the whole thing up as a single "set" statement. -# -# This will of course break if any of these variables contains a newline or -# an unmatched quote. -# - -eval "set -- $( - printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | - xargs -n1 | - sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | - tr '\n' ' ' - )" '"$@"' - -exec "$JAVACMD" "$@" diff --git a/apps/legacy/bare-rn/android/gradlew.bat b/apps/legacy/bare-rn/android/gradlew.bat deleted file mode 100644 index dd2b8eedbd..0000000000 --- a/apps/legacy/bare-rn/android/gradlew.bat +++ /dev/null @@ -1,99 +0,0 @@ -@REM Copyright (c) Meta Platforms, Inc. and affiliates. -@REM -@REM This source code is licensed under the MIT license found in the -@REM LICENSE file in the root directory of this source tree. - -@rem -@rem Copyright 2015 the original author or authors. -@rem -@rem Licensed under the Apache License, Version 2.0 (the "License"); -@rem you may not use this file except in compliance with the License. -@rem You may obtain a copy of the License at -@rem -@rem https://www.apache.org/licenses/LICENSE-2.0 -@rem -@rem Unless required by applicable law or agreed to in writing, software -@rem distributed under the License is distributed on an "AS IS" BASIS, -@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -@rem See the License for the specific language governing permissions and -@rem limitations under the License. -@rem -@rem SPDX-License-Identifier: Apache-2.0 -@rem - -@if "%DEBUG%"=="" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%"=="" set DIRNAME=. -@rem This is normally unused -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Resolve any "." and ".." in APP_HOME to make it shorter. -for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if %ERRORLEVEL% equ 0 goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto execute - -echo. 1>&2 -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 - -goto fail - -:execute -@rem Setup the command line - -set CLASSPATH= - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/apps/legacy/bare-rn/android/settings.gradle b/apps/legacy/bare-rn/android/settings.gradle deleted file mode 100644 index 56ad61524f..0000000000 --- a/apps/legacy/bare-rn/android/settings.gradle +++ /dev/null @@ -1,11 +0,0 @@ -pluginManagement { includeBuild("../node_modules/@react-native/gradle-plugin") } -plugins { id("com.facebook.react.settings") } -extensions.configure(com.facebook.react.ReactSettingsExtension){ ex -> - // bare-rn pins its own React Native via installConfig.hoistingLimits in package.json, - // so its deps live in apps/bare-rn/node_modules/ rather than the workspace root. - def cliFile = new File(settings.rootDir, "../node_modules/@react-native-community/cli/build/bin.js").absolutePath - ex.autolinkLibrariesFromCommand(["node", cliFile, "config"], new File(settings.rootDir, "../")) -} -rootProject.name = 'bare_rn' -include ':app' -includeBuild('../node_modules/@react-native/gradle-plugin') diff --git a/apps/legacy/bare-rn/app.json b/apps/legacy/bare-rn/app.json deleted file mode 100644 index 0a3ed9b0a2..0000000000 --- a/apps/legacy/bare-rn/app.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "name": "bare-rn", - "displayName": "bare-rn" -} diff --git a/apps/legacy/bare-rn/babel.config.js b/apps/legacy/bare-rn/babel.config.js deleted file mode 100644 index b243a0ffa4..0000000000 --- a/apps/legacy/bare-rn/babel.config.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - presets: ['module:@react-native/babel-preset'], - plugins: ['@babel/plugin-transform-export-namespace-from'], -}; diff --git a/apps/legacy/bare-rn/index.js b/apps/legacy/bare-rn/index.js deleted file mode 100644 index 9b73932914..0000000000 --- a/apps/legacy/bare-rn/index.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * @format - */ - -import { AppRegistry } from 'react-native'; -import App from './App'; -import { name as appName } from './app.json'; - -AppRegistry.registerComponent(appName, () => App); diff --git a/apps/legacy/bare-rn/ios/.xcode.env b/apps/legacy/bare-rn/ios/.xcode.env deleted file mode 100644 index 3d5782c715..0000000000 --- a/apps/legacy/bare-rn/ios/.xcode.env +++ /dev/null @@ -1,11 +0,0 @@ -# This `.xcode.env` file is versioned and is used to source the environment -# used when running script phases inside Xcode. -# To customize your local environment, you can create an `.xcode.env.local` -# file that is not versioned. - -# NODE_BINARY variable contains the PATH to the node executable. -# -# Customize the NODE_BINARY variable here. -# For example, to use nvm with brew, add the following line -# . "$(brew --prefix nvm)/nvm.sh" --no-use -export NODE_BINARY=$(command -v node) diff --git a/apps/legacy/bare-rn/ios/Podfile b/apps/legacy/bare-rn/ios/Podfile deleted file mode 100644 index cdcb24c068..0000000000 --- a/apps/legacy/bare-rn/ios/Podfile +++ /dev/null @@ -1,51 +0,0 @@ -# Resolve react_native_pods.rb with node to allow for hoisting -require Pod::Executable.execute_command('node', ['-p', - 'require.resolve( - "react-native/scripts/react_native_pods.rb", - {paths: [process.argv[1]]}, - )', __dir__]).strip - -platform :ios, '17.0' -prepare_react_native_project! - -linkage = ENV['USE_FRAMEWORKS'] -if linkage != nil - Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green - use_frameworks! :linkage => linkage.to_sym -end - -target 'bare-rn' do - config = use_native_modules! - - use_react_native!( - :path => config[:reactNativePath], - # An absolute path to your application root. - :app_path => "#{Pod::Config.instance.installation_root}/.." - ) - - post_install do |installer| - react_native_post_install( - installer, - config[:reactNativePath], - :mac_catalyst_enabled => false, - # :ccache_enabled => true - ) - - # Workaround for Xcode 26.4 + Apple clang 21's stricter consteval - # enforcement breaking fmt 9.x (vendored by RCT-Folly in RN 0.81.x). - # See facebook/react-native#55601, fmtlib/fmt#4740. Forcing the fmt and - # RCT-Folly pod targets to C++17 makes fmt's `__cplusplus >= 202002L` - # gate fail, so `FMT_CONSTEVAL` resolves to empty inside fmt's cached - # clang module — consumers (Yoga, React-performancetimeline, etc.) then - # import a non-consteval module and the basic_format_string call site - # compiles. Applies to fmt/RCT-Folly only; remove once upstream lands. - installer.pods_project.targets.each do |target| - next unless target.name == 'fmt' || target.name == 'RCT-Folly' - target.build_configurations.each do |config| - config.build_settings['CLANG_CXX_LANGUAGE_STANDARD'] = 'c++17' - config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)'] - config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] << 'FMT_USE_CONSTEVAL=0' - end - end - end -end diff --git a/apps/legacy/bare-rn/ios/Podfile.lock b/apps/legacy/bare-rn/ios/Podfile.lock deleted file mode 100644 index 74e55c6a90..0000000000 --- a/apps/legacy/bare-rn/ios/Podfile.lock +++ /dev/null @@ -1,2759 +0,0 @@ -PODS: - - boost (1.84.0) - - DoubleConversion (1.1.6) - - fast_float (8.0.0) - - FBLazyVector (0.81.5) - - fmt (11.0.2) - - glog (0.3.5) - - hermes-engine (0.81.5): - - hermes-engine/Pre-built (= 0.81.5) - - hermes-engine/Pre-built (0.81.5) - - MMKV (2.3.0): - - MMKVCore (~> 2.3.0) - - MMKVCore (2.3.0) - - opencv-rne (4.11.0) - - RCT-Folly (2024.11.18.00): - - boost - - DoubleConversion - - fast_float (= 8.0.0) - - fmt (= 11.0.2) - - glog - - RCT-Folly/Default (= 2024.11.18.00) - - RCT-Folly/Default (2024.11.18.00): - - boost - - DoubleConversion - - fast_float (= 8.0.0) - - fmt (= 11.0.2) - - glog - - RCT-Folly/Fabric (2024.11.18.00): - - boost - - DoubleConversion - - fast_float (= 8.0.0) - - fmt (= 11.0.2) - - glog - - RCTDeprecation (0.81.5) - - RCTRequired (0.81.5) - - RCTTypeSafety (0.81.5): - - FBLazyVector (= 0.81.5) - - RCTRequired (= 0.81.5) - - React-Core (= 0.81.5) - - React (0.81.5): - - React-Core (= 0.81.5) - - React-Core/DevSupport (= 0.81.5) - - React-Core/RCTWebSocket (= 0.81.5) - - React-RCTActionSheet (= 0.81.5) - - React-RCTAnimation (= 0.81.5) - - React-RCTBlob (= 0.81.5) - - React-RCTImage (= 0.81.5) - - React-RCTLinking (= 0.81.5) - - React-RCTNetwork (= 0.81.5) - - React-RCTSettings (= 0.81.5) - - React-RCTText (= 0.81.5) - - React-RCTVibration (= 0.81.5) - - React-callinvoker (0.81.5) - - React-Core (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default (= 0.81.5) - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/CoreModulesHeaders (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/Default (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/DevSupport (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default (= 0.81.5) - - React-Core/RCTWebSocket (= 0.81.5) - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/RCTActionSheetHeaders (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/RCTAnimationHeaders (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/RCTBlobHeaders (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/RCTImageHeaders (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/RCTLinkingHeaders (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/RCTNetworkHeaders (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/RCTSettingsHeaders (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/RCTTextHeaders (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/RCTVibrationHeaders (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-Core/RCTWebSocket (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTDeprecation - - React-Core/Default (= 0.81.5) - - React-cxxreact - - React-featureflags - - React-hermes - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsinspectorcdp - - React-jsitooling - - React-perflogger - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-CoreModules (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - RCTTypeSafety (= 0.81.5) - - React-Core/CoreModulesHeaders (= 0.81.5) - - React-jsi (= 0.81.5) - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-NativeModulesApple - - React-RCTBlob - - React-RCTFBReactNativeSpec - - React-RCTImage (= 0.81.5) - - React-runtimeexecutor - - ReactCommon - - SocketRocket - - React-cxxreact (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-callinvoker (= 0.81.5) - - React-debug (= 0.81.5) - - React-jsi (= 0.81.5) - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-logger (= 0.81.5) - - React-perflogger (= 0.81.5) - - React-runtimeexecutor - - React-timing (= 0.81.5) - - SocketRocket - - React-debug (0.81.5) - - React-defaultsnativemodule (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-domnativemodule - - React-featureflagsnativemodule - - React-idlecallbacksnativemodule - - React-jsi - - React-jsiexecutor - - React-microtasksnativemodule - - React-RCTFBReactNativeSpec - - SocketRocket - - React-domnativemodule (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-Fabric - - React-Fabric/bridging - - React-FabricComponents - - React-graphics - - React-jsi - - React-jsiexecutor - - React-RCTFBReactNativeSpec - - React-runtimeexecutor - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-Fabric (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric/animations (= 0.81.5) - - React-Fabric/attributedstring (= 0.81.5) - - React-Fabric/bridging (= 0.81.5) - - React-Fabric/componentregistry (= 0.81.5) - - React-Fabric/componentregistrynative (= 0.81.5) - - React-Fabric/components (= 0.81.5) - - React-Fabric/consistency (= 0.81.5) - - React-Fabric/core (= 0.81.5) - - React-Fabric/dom (= 0.81.5) - - React-Fabric/imagemanager (= 0.81.5) - - React-Fabric/leakchecker (= 0.81.5) - - React-Fabric/mounting (= 0.81.5) - - React-Fabric/observers (= 0.81.5) - - React-Fabric/scheduler (= 0.81.5) - - React-Fabric/telemetry (= 0.81.5) - - React-Fabric/templateprocessor (= 0.81.5) - - React-Fabric/uimanager (= 0.81.5) - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/animations (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/attributedstring (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/bridging (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/componentregistry (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/componentregistrynative (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/components (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric/components/legacyviewmanagerinterop (= 0.81.5) - - React-Fabric/components/root (= 0.81.5) - - React-Fabric/components/scrollview (= 0.81.5) - - React-Fabric/components/view (= 0.81.5) - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/components/legacyviewmanagerinterop (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/components/root (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/components/scrollview (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/components/view (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-renderercss - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-Fabric/consistency (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/core (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/dom (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/imagemanager (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/leakchecker (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/mounting (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/observers (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric/observers/events (= 0.81.5) - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/observers/events (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/scheduler (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric/observers/events - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-performancetimeline - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/telemetry (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/templateprocessor (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/uimanager (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric/uimanager/consistency (= 0.81.5) - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererconsistency - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-Fabric/uimanager/consistency (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-rendererconsistency - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - React-FabricComponents (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-FabricComponents/components (= 0.81.5) - - React-FabricComponents/textlayoutmanager (= 0.81.5) - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/components (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-FabricComponents/components/inputaccessory (= 0.81.5) - - React-FabricComponents/components/iostextinput (= 0.81.5) - - React-FabricComponents/components/modal (= 0.81.5) - - React-FabricComponents/components/rncore (= 0.81.5) - - React-FabricComponents/components/safeareaview (= 0.81.5) - - React-FabricComponents/components/scrollview (= 0.81.5) - - React-FabricComponents/components/switch (= 0.81.5) - - React-FabricComponents/components/text (= 0.81.5) - - React-FabricComponents/components/textinput (= 0.81.5) - - React-FabricComponents/components/unimplementedview (= 0.81.5) - - React-FabricComponents/components/virtualview (= 0.81.5) - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/components/inputaccessory (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/components/iostextinput (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/components/modal (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/components/rncore (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/components/safeareaview (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/components/scrollview (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/components/switch (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/components/text (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/components/textinput (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/components/unimplementedview (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/components/virtualview (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricComponents/textlayoutmanager (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-cxxreact - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-logger - - React-RCTFBReactNativeSpec - - React-rendererdebug - - React-runtimescheduler - - React-utils - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-FabricImage (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired (= 0.81.5) - - RCTTypeSafety (= 0.81.5) - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - React-jsiexecutor (= 0.81.5) - - React-logger - - React-rendererdebug - - React-utils - - ReactCommon - - SocketRocket - - Yoga - - React-featureflags (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket - - React-featureflagsnativemodule (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-featureflags - - React-jsi - - React-jsiexecutor - - React-RCTFBReactNativeSpec - - ReactCommon/turbomodule/core - - SocketRocket - - React-graphics (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-jsi - - React-jsiexecutor - - React-utils - - SocketRocket - - React-hermes (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-cxxreact (= 0.81.5) - - React-jsi - - React-jsiexecutor (= 0.81.5) - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-perflogger (= 0.81.5) - - React-runtimeexecutor - - SocketRocket - - React-idlecallbacksnativemodule (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-jsi - - React-jsiexecutor - - React-RCTFBReactNativeSpec - - React-runtimeexecutor - - React-runtimescheduler - - ReactCommon/turbomodule/core - - SocketRocket - - React-ImageManager (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - React-Core/Default - - React-debug - - React-Fabric - - React-graphics - - React-rendererdebug - - React-utils - - SocketRocket - - React-jserrorhandler (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-cxxreact - - React-debug - - React-featureflags - - React-jsi - - ReactCommon/turbomodule/bridging - - SocketRocket - - React-jsi (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket - - React-jsiexecutor (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-cxxreact (= 0.81.5) - - React-jsi (= 0.81.5) - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-perflogger (= 0.81.5) - - React-runtimeexecutor - - SocketRocket - - React-jsinspector (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-featureflags - - React-jsi - - React-jsinspectorcdp - - React-jsinspectornetwork - - React-jsinspectortracing - - React-oscompat - - React-perflogger (= 0.81.5) - - React-runtimeexecutor - - SocketRocket - - React-jsinspectorcdp (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket - - React-jsinspectornetwork (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - React-featureflags - - React-jsinspectorcdp - - React-performancetimeline - - React-timing - - SocketRocket - - React-jsinspectortracing (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - React-oscompat - - React-timing - - SocketRocket - - React-jsitooling (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - React-cxxreact (= 0.81.5) - - React-jsi (= 0.81.5) - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-runtimeexecutor - - SocketRocket - - React-jsitracing (0.81.5): - - React-jsi - - React-logger (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket - - React-Mapbuffer (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - React-debug - - SocketRocket - - React-microtasksnativemodule (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-jsi - - React-jsiexecutor - - React-RCTFBReactNativeSpec - - ReactCommon/turbomodule/core - - SocketRocket - - react-native-background-downloader (4.6.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - "MMKV (!= 2.4.1, >= 1.2.0)" - - "MMKVCore (!= 2.4.1)" - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - react-native-executorch (0.0.0): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - opencv-rne (~> 4.11.0) - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - react-native-safe-area-context (5.9.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - react-native-safe-area-context/common (= 5.9.1) - - react-native-safe-area-context/fabric (= 5.9.1) - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - react-native-safe-area-context/common (5.9.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - react-native-safe-area-context/fabric (5.9.1): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - react-native-safe-area-context/common - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - React-NativeModulesApple (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-callinvoker - - React-Core - - React-cxxreact - - React-featureflags - - React-jsi - - React-jsinspector - - React-jsinspectorcdp - - React-runtimeexecutor - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - SocketRocket - - React-oscompat (0.81.5) - - React-perflogger (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - SocketRocket - - React-performancetimeline (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - React-featureflags - - React-jsinspectortracing - - React-perflogger - - React-timing - - SocketRocket - - React-RCTActionSheet (0.81.5): - - React-Core/RCTActionSheetHeaders (= 0.81.5) - - React-RCTAnimation (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - RCTTypeSafety - - React-Core/RCTAnimationHeaders - - React-featureflags - - React-jsi - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - ReactCommon - - SocketRocket - - React-RCTAppDelegate (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-CoreModules - - React-debug - - React-defaultsnativemodule - - React-Fabric - - React-featureflags - - React-graphics - - React-hermes - - React-jsitooling - - React-NativeModulesApple - - React-RCTFabric - - React-RCTFBReactNativeSpec - - React-RCTImage - - React-RCTNetwork - - React-RCTRuntime - - React-rendererdebug - - React-RuntimeApple - - React-RuntimeCore - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - ReactCommon - - SocketRocket - - React-RCTBlob (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-Core/RCTBlobHeaders - - React-Core/RCTWebSocket - - React-jsi - - React-jsinspector - - React-jsinspectorcdp - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - React-RCTNetwork - - ReactCommon - - SocketRocket - - React-RCTFabric (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-Core - - React-debug - - React-Fabric - - React-FabricComponents - - React-FabricImage - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectornetwork - - React-jsinspectortracing - - React-performancetimeline - - React-RCTAnimation - - React-RCTFBReactNativeSpec - - React-RCTImage - - React-RCTText - - React-rendererconsistency - - React-renderercss - - React-rendererdebug - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - SocketRocket - - Yoga - - React-RCTFBReactNativeSpec (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-jsi - - React-NativeModulesApple - - React-RCTFBReactNativeSpec/components (= 0.81.5) - - ReactCommon - - SocketRocket - - React-RCTFBReactNativeSpec/components (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-jsi - - React-NativeModulesApple - - React-rendererdebug - - React-utils - - ReactCommon - - SocketRocket - - Yoga - - React-RCTImage (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - RCTTypeSafety - - React-Core/RCTImageHeaders - - React-jsi - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - React-RCTNetwork - - ReactCommon - - SocketRocket - - React-RCTLinking (0.81.5): - - React-Core/RCTLinkingHeaders (= 0.81.5) - - React-jsi (= 0.81.5) - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - ReactCommon - - ReactCommon/turbomodule/core (= 0.81.5) - - React-RCTNetwork (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - RCTTypeSafety - - React-Core/RCTNetworkHeaders - - React-featureflags - - React-jsi - - React-jsinspectorcdp - - React-jsinspectornetwork - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - ReactCommon - - SocketRocket - - React-RCTRuntime (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-Core - - React-jsi - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-jsitooling - - React-RuntimeApple - - React-RuntimeCore - - React-runtimeexecutor - - React-RuntimeHermes - - SocketRocket - - React-RCTSettings (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - RCTTypeSafety - - React-Core/RCTSettingsHeaders - - React-jsi - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - ReactCommon - - SocketRocket - - React-RCTText (0.81.5): - - React-Core/RCTTextHeaders (= 0.81.5) - - Yoga - - React-RCTVibration (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - React-Core/RCTVibrationHeaders - - React-jsi - - React-NativeModulesApple - - React-RCTFBReactNativeSpec - - ReactCommon - - SocketRocket - - React-rendererconsistency (0.81.5) - - React-renderercss (0.81.5): - - React-debug - - React-utils - - React-rendererdebug (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - React-debug - - SocketRocket - - React-RuntimeApple (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-callinvoker - - React-Core/Default - - React-CoreModules - - React-cxxreact - - React-featureflags - - React-jserrorhandler - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsitooling - - React-Mapbuffer - - React-NativeModulesApple - - React-RCTFabric - - React-RCTFBReactNativeSpec - - React-RuntimeCore - - React-runtimeexecutor - - React-RuntimeHermes - - React-runtimescheduler - - React-utils - - SocketRocket - - React-RuntimeCore (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-cxxreact - - React-Fabric - - React-featureflags - - React-jserrorhandler - - React-jsi - - React-jsiexecutor - - React-jsinspector - - React-jsitooling - - React-performancetimeline - - React-runtimeexecutor - - React-runtimescheduler - - React-utils - - SocketRocket - - React-runtimeexecutor (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - React-debug - - React-featureflags - - React-jsi (= 0.81.5) - - React-utils - - SocketRocket - - React-RuntimeHermes (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-featureflags - - React-hermes - - React-jsi - - React-jsinspector - - React-jsinspectorcdp - - React-jsinspectortracing - - React-jsitooling - - React-jsitracing - - React-RuntimeCore - - React-runtimeexecutor - - React-utils - - SocketRocket - - React-runtimescheduler (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-callinvoker - - React-cxxreact - - React-debug - - React-featureflags - - React-jsi - - React-jsinspectortracing - - React-performancetimeline - - React-rendererconsistency - - React-rendererdebug - - React-runtimeexecutor - - React-timing - - React-utils - - SocketRocket - - React-timing (0.81.5): - - React-debug - - React-utils (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-debug - - React-jsi (= 0.81.5) - - SocketRocket - - ReactAppDependencyProvider (0.81.5): - - ReactCodegen - - ReactCodegen (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-FabricImage - - React-featureflags - - React-graphics - - React-jsi - - React-jsiexecutor - - React-NativeModulesApple - - React-RCTAppDelegate - - React-rendererdebug - - React-utils - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - SocketRocket - - ReactCommon (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - RCT-Folly - - RCT-Folly/Fabric - - ReactCommon/turbomodule (= 0.81.5) - - SocketRocket - - ReactCommon/turbomodule (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-callinvoker (= 0.81.5) - - React-cxxreact (= 0.81.5) - - React-jsi (= 0.81.5) - - React-logger (= 0.81.5) - - React-perflogger (= 0.81.5) - - ReactCommon/turbomodule/bridging (= 0.81.5) - - ReactCommon/turbomodule/core (= 0.81.5) - - SocketRocket - - ReactCommon/turbomodule/bridging (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-callinvoker (= 0.81.5) - - React-cxxreact (= 0.81.5) - - React-jsi (= 0.81.5) - - React-logger (= 0.81.5) - - React-perflogger (= 0.81.5) - - SocketRocket - - ReactCommon/turbomodule/core (0.81.5): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - React-callinvoker (= 0.81.5) - - React-cxxreact (= 0.81.5) - - React-debug (= 0.81.5) - - React-featureflags (= 0.81.5) - - React-jsi (= 0.81.5) - - React-logger (= 0.81.5) - - React-perflogger (= 0.81.5) - - React-utils (= 0.81.5) - - SocketRocket - - ReactNativeFs (2.40.2): - - boost - - DoubleConversion - - fast_float - - fmt - - glog - - hermes-engine - - RCT-Folly - - RCT-Folly/Fabric - - RCTRequired - - RCTTypeSafety - - React-Core - - React-debug - - React-Fabric - - React-featureflags - - React-graphics - - React-ImageManager - - React-jsi - - React-NativeModulesApple - - React-RCTFabric - - React-renderercss - - React-rendererdebug - - React-utils - - ReactCodegen - - ReactCommon/turbomodule/bridging - - ReactCommon/turbomodule/core - - SocketRocket - - Yoga - - SocketRocket (0.7.1) - - Yoga (0.0.0) - -DEPENDENCIES: - - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`) - - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) - - fast_float (from `../node_modules/react-native/third-party-podspecs/fast_float.podspec`) - - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) - - fmt (from `../node_modules/react-native/third-party-podspecs/fmt.podspec`) - - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) - - hermes-engine (from `../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec`) - - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) - - RCTDeprecation (from `../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation`) - - RCTRequired (from `../node_modules/react-native/Libraries/Required`) - - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) - - React (from `../node_modules/react-native/`) - - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`) - - React-Core (from `../node_modules/react-native/`) - - React-Core/RCTWebSocket (from `../node_modules/react-native/`) - - React-CoreModules (from `../node_modules/react-native/React/CoreModules`) - - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`) - - React-debug (from `../node_modules/react-native/ReactCommon/react/debug`) - - React-defaultsnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/defaults`) - - React-domnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/dom`) - - React-Fabric (from `../node_modules/react-native/ReactCommon`) - - React-FabricComponents (from `../node_modules/react-native/ReactCommon`) - - React-FabricImage (from `../node_modules/react-native/ReactCommon`) - - React-featureflags (from `../node_modules/react-native/ReactCommon/react/featureflags`) - - React-featureflagsnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/featureflags`) - - React-graphics (from `../node_modules/react-native/ReactCommon/react/renderer/graphics`) - - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`) - - React-idlecallbacksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks`) - - React-ImageManager (from `../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios`) - - React-jserrorhandler (from `../node_modules/react-native/ReactCommon/jserrorhandler`) - - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) - - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) - - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector-modern`) - - React-jsinspectorcdp (from `../node_modules/react-native/ReactCommon/jsinspector-modern/cdp`) - - React-jsinspectornetwork (from `../node_modules/react-native/ReactCommon/jsinspector-modern/network`) - - React-jsinspectortracing (from `../node_modules/react-native/ReactCommon/jsinspector-modern/tracing`) - - React-jsitooling (from `../node_modules/react-native/ReactCommon/jsitooling`) - - React-jsitracing (from `../node_modules/react-native/ReactCommon/hermes/executor/`) - - React-logger (from `../node_modules/react-native/ReactCommon/logger`) - - React-Mapbuffer (from `../node_modules/react-native/ReactCommon`) - - React-microtasksnativemodule (from `../node_modules/react-native/ReactCommon/react/nativemodule/microtasks`) - - "react-native-background-downloader (from `../node_modules/@kesha-antonov/react-native-background-downloader`)" - - react-native-executorch (from `../node_modules/react-native-executorch`) - - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`) - - React-NativeModulesApple (from `../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios`) - - React-oscompat (from `../node_modules/react-native/ReactCommon/oscompat`) - - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`) - - React-performancetimeline (from `../node_modules/react-native/ReactCommon/react/performance/timeline`) - - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`) - - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`) - - React-RCTAppDelegate (from `../node_modules/react-native/Libraries/AppDelegate`) - - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`) - - React-RCTFabric (from `../node_modules/react-native/React`) - - React-RCTFBReactNativeSpec (from `../node_modules/react-native/React`) - - React-RCTImage (from `../node_modules/react-native/Libraries/Image`) - - React-RCTLinking (from `../node_modules/react-native/Libraries/LinkingIOS`) - - React-RCTNetwork (from `../node_modules/react-native/Libraries/Network`) - - React-RCTRuntime (from `../node_modules/react-native/React/Runtime`) - - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`) - - React-RCTText (from `../node_modules/react-native/Libraries/Text`) - - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`) - - React-rendererconsistency (from `../node_modules/react-native/ReactCommon/react/renderer/consistency`) - - React-renderercss (from `../node_modules/react-native/ReactCommon/react/renderer/css`) - - React-rendererdebug (from `../node_modules/react-native/ReactCommon/react/renderer/debug`) - - React-RuntimeApple (from `../node_modules/react-native/ReactCommon/react/runtime/platform/ios`) - - React-RuntimeCore (from `../node_modules/react-native/ReactCommon/react/runtime`) - - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`) - - React-RuntimeHermes (from `../node_modules/react-native/ReactCommon/react/runtime`) - - React-runtimescheduler (from `../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler`) - - React-timing (from `../node_modules/react-native/ReactCommon/react/timing`) - - React-utils (from `../node_modules/react-native/ReactCommon/react/utils`) - - ReactAppDependencyProvider (from `build/generated/ios`) - - ReactCodegen (from `build/generated/ios`) - - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) - - "ReactNativeFs (from `../node_modules/@dr.pogodin/react-native-fs`)" - - SocketRocket (~> 0.7.1) - - Yoga (from `../node_modules/react-native/ReactCommon/yoga`) - -SPEC REPOS: - trunk: - - MMKV - - MMKVCore - - opencv-rne - - SocketRocket - -EXTERNAL SOURCES: - boost: - :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec" - DoubleConversion: - :podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec" - fast_float: - :podspec: "../node_modules/react-native/third-party-podspecs/fast_float.podspec" - FBLazyVector: - :path: "../node_modules/react-native/Libraries/FBLazyVector" - fmt: - :podspec: "../node_modules/react-native/third-party-podspecs/fmt.podspec" - glog: - :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" - hermes-engine: - :podspec: "../node_modules/react-native/sdks/hermes-engine/hermes-engine.podspec" - :tag: hermes-2025-07-07-RNv0.81.0-e0fc67142ec0763c6b6153ca2bf96df815539782 - RCT-Folly: - :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" - RCTDeprecation: - :path: "../node_modules/react-native/ReactApple/Libraries/RCTFoundation/RCTDeprecation" - RCTRequired: - :path: "../node_modules/react-native/Libraries/Required" - RCTTypeSafety: - :path: "../node_modules/react-native/Libraries/TypeSafety" - React: - :path: "../node_modules/react-native/" - React-callinvoker: - :path: "../node_modules/react-native/ReactCommon/callinvoker" - React-Core: - :path: "../node_modules/react-native/" - React-CoreModules: - :path: "../node_modules/react-native/React/CoreModules" - React-cxxreact: - :path: "../node_modules/react-native/ReactCommon/cxxreact" - React-debug: - :path: "../node_modules/react-native/ReactCommon/react/debug" - React-defaultsnativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/defaults" - React-domnativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/dom" - React-Fabric: - :path: "../node_modules/react-native/ReactCommon" - React-FabricComponents: - :path: "../node_modules/react-native/ReactCommon" - React-FabricImage: - :path: "../node_modules/react-native/ReactCommon" - React-featureflags: - :path: "../node_modules/react-native/ReactCommon/react/featureflags" - React-featureflagsnativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/featureflags" - React-graphics: - :path: "../node_modules/react-native/ReactCommon/react/renderer/graphics" - React-hermes: - :path: "../node_modules/react-native/ReactCommon/hermes" - React-idlecallbacksnativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/idlecallbacks" - React-ImageManager: - :path: "../node_modules/react-native/ReactCommon/react/renderer/imagemanager/platform/ios" - React-jserrorhandler: - :path: "../node_modules/react-native/ReactCommon/jserrorhandler" - React-jsi: - :path: "../node_modules/react-native/ReactCommon/jsi" - React-jsiexecutor: - :path: "../node_modules/react-native/ReactCommon/jsiexecutor" - React-jsinspector: - :path: "../node_modules/react-native/ReactCommon/jsinspector-modern" - React-jsinspectorcdp: - :path: "../node_modules/react-native/ReactCommon/jsinspector-modern/cdp" - React-jsinspectornetwork: - :path: "../node_modules/react-native/ReactCommon/jsinspector-modern/network" - React-jsinspectortracing: - :path: "../node_modules/react-native/ReactCommon/jsinspector-modern/tracing" - React-jsitooling: - :path: "../node_modules/react-native/ReactCommon/jsitooling" - React-jsitracing: - :path: "../node_modules/react-native/ReactCommon/hermes/executor/" - React-logger: - :path: "../node_modules/react-native/ReactCommon/logger" - React-Mapbuffer: - :path: "../node_modules/react-native/ReactCommon" - React-microtasksnativemodule: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/microtasks" - react-native-background-downloader: - :path: "../node_modules/@kesha-antonov/react-native-background-downloader" - react-native-executorch: - :path: "../node_modules/react-native-executorch" - react-native-safe-area-context: - :path: "../node_modules/react-native-safe-area-context" - React-NativeModulesApple: - :path: "../node_modules/react-native/ReactCommon/react/nativemodule/core/platform/ios" - React-oscompat: - :path: "../node_modules/react-native/ReactCommon/oscompat" - React-perflogger: - :path: "../node_modules/react-native/ReactCommon/reactperflogger" - React-performancetimeline: - :path: "../node_modules/react-native/ReactCommon/react/performance/timeline" - React-RCTActionSheet: - :path: "../node_modules/react-native/Libraries/ActionSheetIOS" - React-RCTAnimation: - :path: "../node_modules/react-native/Libraries/NativeAnimation" - React-RCTAppDelegate: - :path: "../node_modules/react-native/Libraries/AppDelegate" - React-RCTBlob: - :path: "../node_modules/react-native/Libraries/Blob" - React-RCTFabric: - :path: "../node_modules/react-native/React" - React-RCTFBReactNativeSpec: - :path: "../node_modules/react-native/React" - React-RCTImage: - :path: "../node_modules/react-native/Libraries/Image" - React-RCTLinking: - :path: "../node_modules/react-native/Libraries/LinkingIOS" - React-RCTNetwork: - :path: "../node_modules/react-native/Libraries/Network" - React-RCTRuntime: - :path: "../node_modules/react-native/React/Runtime" - React-RCTSettings: - :path: "../node_modules/react-native/Libraries/Settings" - React-RCTText: - :path: "../node_modules/react-native/Libraries/Text" - React-RCTVibration: - :path: "../node_modules/react-native/Libraries/Vibration" - React-rendererconsistency: - :path: "../node_modules/react-native/ReactCommon/react/renderer/consistency" - React-renderercss: - :path: "../node_modules/react-native/ReactCommon/react/renderer/css" - React-rendererdebug: - :path: "../node_modules/react-native/ReactCommon/react/renderer/debug" - React-RuntimeApple: - :path: "../node_modules/react-native/ReactCommon/react/runtime/platform/ios" - React-RuntimeCore: - :path: "../node_modules/react-native/ReactCommon/react/runtime" - React-runtimeexecutor: - :path: "../node_modules/react-native/ReactCommon/runtimeexecutor" - React-RuntimeHermes: - :path: "../node_modules/react-native/ReactCommon/react/runtime" - React-runtimescheduler: - :path: "../node_modules/react-native/ReactCommon/react/renderer/runtimescheduler" - React-timing: - :path: "../node_modules/react-native/ReactCommon/react/timing" - React-utils: - :path: "../node_modules/react-native/ReactCommon/react/utils" - ReactAppDependencyProvider: - :path: build/generated/ios - ReactCodegen: - :path: build/generated/ios - ReactCommon: - :path: "../node_modules/react-native/ReactCommon" - ReactNativeFs: - :path: "../node_modules/@dr.pogodin/react-native-fs" - Yoga: - :path: "../node_modules/react-native/ReactCommon/yoga" - -SPEC CHECKSUMS: - boost: 7e761d76ca2ce687f7cc98e698152abd03a18f90 - DoubleConversion: cb417026b2400c8f53ae97020b2be961b59470cb - fast_float: b32c788ed9c6a8c584d114d0047beda9664e7cc6 - FBLazyVector: 5beb8028d5a2e75dd9634917f23e23d3a061d2aa - fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd - glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 - hermes-engine: 9f4dfe93326146a1c99eb535b1cb0b857a3cd172 - MMKV: c953dbaac0da392c24b005e763c03ce2638b4ed7 - MMKVCore: d078dce7d6586a888b2c2ef5343b6242678e3ee8 - opencv-rne: 2305807573b6e29c8c87e3416ab096d09047a7a0 - RCT-Folly: 846fda9475e61ec7bcbf8a3fe81edfcaeb090669 - RCTDeprecation: 5eb1d2eeff5fb91151e8a8eef45b6c7658b6c897 - RCTRequired: cebcf9442fc296c9b89ac791dfd463021d9f6f23 - RCTTypeSafety: b99aa872829ee18f6e777e0ef55852521c5a6788 - React: 914f8695f9bf38e6418228c2ffb70021e559f92f - React-callinvoker: 23cd4e33928608bd0cc35357597568b8b9a5f068 - React-Core: 6a0a97598e9455348113bfe4c573fe8edac34469 - React-CoreModules: a88a6ca48b668401b9780e272e2a607e70f9f955 - React-cxxreact: 06265fd7e8d5c3b6b49e00d328ef76e5f1ae9c8b - React-debug: 039d3dbd3078613e02e3960439bbf52f6d321bc4 - React-defaultsnativemodule: 09efbfa17b15445907689c577e371558d8b08135 - React-domnativemodule: 6284a09207d8e0e974affb0d84b43a0c1aee2554 - React-Fabric: 5ffa7f2a10fb3bf835f97990d341419ae338963d - React-FabricComponents: 25173bc205a6b7c18d87121891f3acef1c329b04 - React-FabricImage: aa90e4b2b34a79f9b4ee56328ad9222cb672f1f3 - React-featureflags: 7bdaca8af1def3ec9203743c91b11ac7c2cb2574 - React-featureflagsnativemodule: 6840bc359820d5e44f1de1f9ba69706e0a88a60b - React-graphics: b0a76138e325f9c5dfcc8fbc62491ab252ca736c - React-hermes: a852be3ab9e1f515e46ba3ea9f48c31d4a9df437 - React-idlecallbacksnativemodule: 38895fd946b2dcb0af387f2176f5f2e578b14277 - React-ImageManager: 44409a10adff7091c9e678b97ee59c7b0576b8ae - React-jserrorhandler: 3852205bbfc68277cd4e7392ad1fa74a170150fd - React-jsi: 7b53959aea60909ac6bbe4dd0bdec6c10d7dc597 - React-jsiexecutor: 19938072af05ade148474bac41e0324a2d733f44 - React-jsinspector: 0aecd79939adf576c6dd7bbbddf90b630e7827e4 - React-jsinspectorcdp: 8245973529c78d150aebddd2c497ee290349faf0 - React-jsinspectornetwork: 496a12dbc80835fac10acf29b9c4386ddcc472f1 - React-jsinspectortracing: 1939b3e0cec087983384c5561bf925f35287d760 - React-jsitooling: 86c70336d5c371b4289499e9303b6da118ad3eeb - React-jsitracing: 8eb0d50d7874886fb3ec7f85e0567f1964a20075 - React-logger: a913317214a26565cd4c045347edf1bcacb80a3f - React-Mapbuffer: 94f4264de2cb156960cd82b338a403f4653f2fd9 - React-microtasksnativemodule: 6c4ee39a36958c39c97b074d28f360246a335e84 - react-native-background-downloader: e09c54beb8d17838707917e918371bc931b75c88 - react-native-executorch: 8323cb8d9388cade609ab4e893779db74e63fb47 - react-native-safe-area-context: 6cf08f4151132f9cf2adb948dc6c4ac387f8d30f - React-NativeModulesApple: ebf2ce72b35870036900d6498b33724386540a71 - React-oscompat: eb0626e8ba1a2c61673c991bf9dc21834898475d - React-perflogger: 509e1f9a3ee28df71b0a66de806ac515ce951246 - React-performancetimeline: 43a1ea36ac47853b479ae85e04c1c339721e99f1 - React-RCTActionSheet: 30fe8f9f8d86db4a25ff34595a658ecd837485fc - React-RCTAnimation: 3126eb1cb8e7a6ca33a52fd833d8018aa9311af1 - React-RCTAppDelegate: b03981c790aa40cf26e0f78cc0f1f2df8287ead4 - React-RCTBlob: 53c35e85c85d6bdaa55dc81a0b290d4e78431095 - React-RCTFabric: 4e2a4176f99b6b8f2d2eda9fc82453a3e6c3ef8e - React-RCTFBReactNativeSpec: 947126c649e04b95457a40bc97c4b2a76206534b - React-RCTImage: 074b2faa71a152a456c974e118b60c9eeda94a64 - React-RCTLinking: e5ca17a4f7ae2ad7b0c0483be77e1b383ecd0a8a - React-RCTNetwork: c508d7548c9eceac30a8100a846ea00033a03366 - React-RCTRuntime: 6813778046c775c124179d9e4d7b33d4129bbd84 - React-RCTSettings: dd84c857a4fce42c1e08c1dabcda894e25af4a6e - React-RCTText: 6e4b177d047f98bccb90d6fb1ebdd3391cf8b299 - React-RCTVibration: 9572d4a06a0c92650bcc62913e50eb2a89f19fb6 - React-rendererconsistency: 6f0622076d7b26eda57a582db5ffd8b05fe94652 - React-renderercss: c00b6db35f01e2f17e496d1d0793fc0be89d4f7b - React-rendererdebug: 17f707ba5ba1ed7a10dd997a2e27b2431b24a180 - React-RuntimeApple: b9b9a53afd594eb49c3e6891f84327d1834a2c5e - React-RuntimeCore: 5a0c78665206a44c4a030e2b4af0c8d6ad05ae77 - React-runtimeexecutor: 7f56789cd23bd4ea1f95595eb5c27e08cee3a19e - React-RuntimeHermes: b2d6bc03f4cc9d2eb7ee0a1bfe16c226cb2114ce - React-runtimescheduler: 5cc5c0568bf216e1ee8f3c2c0a1cff2ef3091b32 - React-timing: b1e27e61bd184fab3792947685bebdb2dc55af9a - React-utils: ddf52534853a3b5f19d4615b1a1f172b504673f2 - ReactAppDependencyProvider: 1bcd3527ac0390a1c898c114f81ff954be35ed79 - ReactCodegen: 6c26f8c25d0b5ae66f86a1cce1777076ac8bcbd8 - ReactCommon: 5f0e5c09a64a2717215dd84380e1a747810406f2 - ReactNativeFs: 36cd5a1531487afca7393ebafaf3ba854b945a79 - SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 - Yoga: 728df40394d49f3f471688747cf558158b3a3bd1 - -PODFILE CHECKSUM: 3f9008ee1fb32bf8b4f65f3fba5576bf818a2d0f - -COCOAPODS: 1.17.0 diff --git a/apps/legacy/bare-rn/ios/bare-rn.xcodeproj/project.pbxproj b/apps/legacy/bare-rn/ios/bare-rn.xcodeproj/project.pbxproj deleted file mode 100644 index 2a603318fc..0000000000 --- a/apps/legacy/bare-rn/ios/bare-rn.xcodeproj/project.pbxproj +++ /dev/null @@ -1,482 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 54; - objects = { - -/* Begin PBXBuildFile section */ - 0AF1DC9B7BF72575F4599DF4 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */; }; - 0C80B921A6F3F58F76C31292 /* libPods-bare-rn.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5DCACB8F33CDC322A6C60F78 /* libPods-bare-rn.a */; }; - 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; - 761780ED2CA45674006654EE /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 761780EC2CA45674006654EE /* AppDelegate.swift */; }; - 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; }; -/* End PBXBuildFile section */ - -/* Begin PBXFileReference section */ - 13B07F961A680F5B00A75B9A /* bare-rn.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "bare-rn.app"; sourceTree = BUILT_PRODUCTS_DIR; }; - 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = "bare-rn/Images.xcassets"; sourceTree = ""; }; - 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = "bare-rn/Info.plist"; sourceTree = ""; }; - 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = PrivacyInfo.xcprivacy; path = "bare-rn/PrivacyInfo.xcprivacy"; sourceTree = ""; }; - 3B4392A12AC88292D35C810B /* Pods-bare-rn.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-bare-rn.debug.xcconfig"; path = "Target Support Files/Pods-bare-rn/Pods-bare-rn.debug.xcconfig"; sourceTree = ""; }; - 5709B34CF0A7D63546082F79 /* Pods-bare-rn.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-bare-rn.release.xcconfig"; path = "Target Support Files/Pods-bare-rn/Pods-bare-rn.release.xcconfig"; sourceTree = ""; }; - 5DCACB8F33CDC322A6C60F78 /* libPods-bare-rn.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-bare-rn.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 761780EC2CA45674006654EE /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = "bare-rn/AppDelegate.swift"; sourceTree = ""; }; - 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = "bare-rn/LaunchScreen.storyboard"; sourceTree = ""; }; - ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 13B07F8C1A680F5B00A75B9A /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 0C80B921A6F3F58F76C31292 /* libPods-bare-rn.a in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 13B07FAE1A68108700A75B9A /* bare-rn */ = { - isa = PBXGroup; - children = ( - 13B07FB51A68108700A75B9A /* Images.xcassets */, - 761780EC2CA45674006654EE /* AppDelegate.swift */, - 13B07FB61A68108700A75B9A /* Info.plist */, - 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */, - 13B07FB81A68108700A75B9A /* PrivacyInfo.xcprivacy */, - ); - name = "bare-rn"; - sourceTree = ""; - }; - 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { - isa = PBXGroup; - children = ( - ED297162215061F000B7C4FE /* JavaScriptCore.framework */, - 5DCACB8F33CDC322A6C60F78 /* libPods-bare-rn.a */, - ); - name = Frameworks; - sourceTree = ""; - }; - 832341AE1AAA6A7D00B99B32 /* Libraries */ = { - isa = PBXGroup; - children = ( - ); - name = Libraries; - sourceTree = ""; - }; - 83CBB9F61A601CBA00E9B192 = { - isa = PBXGroup; - children = ( - 13B07FAE1A68108700A75B9A /* bare-rn */, - 832341AE1AAA6A7D00B99B32 /* Libraries */, - 83CBBA001A601CBA00E9B192 /* Products */, - 2D16E6871FA4F8E400B85C8A /* Frameworks */, - BBD78D7AC51CEA395F1C20DB /* Pods */, - ); - indentWidth = 2; - sourceTree = ""; - tabWidth = 2; - usesTabs = 0; - }; - 83CBBA001A601CBA00E9B192 /* Products */ = { - isa = PBXGroup; - children = ( - 13B07F961A680F5B00A75B9A /* bare-rn.app */, - ); - name = Products; - sourceTree = ""; - }; - BBD78D7AC51CEA395F1C20DB /* Pods */ = { - isa = PBXGroup; - children = ( - 3B4392A12AC88292D35C810B /* Pods-bare-rn.debug.xcconfig */, - 5709B34CF0A7D63546082F79 /* Pods-bare-rn.release.xcconfig */, - ); - path = Pods; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 13B07F861A680F5B00A75B9A /* bare-rn */ = { - isa = PBXNativeTarget; - buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "bare-rn" */; - buildPhases = ( - C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */, - 13B07F871A680F5B00A75B9A /* Sources */, - 13B07F8C1A680F5B00A75B9A /* Frameworks */, - 13B07F8E1A680F5B00A75B9A /* Resources */, - 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */, - 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */, - E235C05ADACE081382539298 /* [CP] Copy Pods Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = "bare-rn"; - productName = "bare-rn"; - productReference = 13B07F961A680F5B00A75B9A /* bare-rn.app */; - productType = "com.apple.product-type.application"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 83CBB9F71A601CBA00E9B192 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 1210; - TargetAttributes = { - 13B07F861A680F5B00A75B9A = { - LastSwiftMigration = 1120; - }; - }; - }; - buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "bare-rn" */; - compatibilityVersion = "Xcode 12.0"; - developmentRegion = en; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 83CBB9F61A601CBA00E9B192; - productRefGroup = 83CBBA001A601CBA00E9B192 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 13B07F861A680F5B00A75B9A /* bare-rn */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 13B07F8E1A680F5B00A75B9A /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */, - 13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */, - 0AF1DC9B7BF72575F4599DF4 /* PrivacyInfo.xcprivacy in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "$(SRCROOT)/.xcode.env.local", - "$(SRCROOT)/.xcode.env", - ); - name = "Bundle React Native code and images"; - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "set -e\n\nWITH_ENVIRONMENT=\"$REACT_NATIVE_PATH/scripts/xcode/with-environment.sh\"\nREACT_NATIVE_XCODE=\"$REACT_NATIVE_PATH/scripts/react-native-xcode.sh\"\n\n/bin/sh -c \"\\\"$WITH_ENVIRONMENT\\\" \\\"$REACT_NATIVE_XCODE\\\"\"\n"; - }; - 00EEFC60759A1932668264C0 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-bare-rn/Pods-bare-rn-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-bare-rn/Pods-bare-rn-frameworks-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-bare-rn/Pods-bare-rn-frameworks.sh\"\n"; - showEnvVarsInLog = 0; - }; - C38B50BA6285516D6DCD4F65 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-bare-rn-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - E235C05ADACE081382539298 /* [CP] Copy Pods Resources */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-bare-rn/Pods-bare-rn-resources-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Copy Pods Resources"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-bare-rn/Pods-bare-rn-resources-${CONFIGURATION}-output-files.xcfilelist", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-bare-rn/Pods-bare-rn-resources.sh\"\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 13B07F871A680F5B00A75B9A /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 761780ED2CA45674006654EE /* AppDelegate.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin XCBuildConfiguration section */ - 13B07F941A680F5B00A75B9A /* Debug */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 3B4392A12AC88292D35C810B /* Pods-bare-rn.debug.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 1; - ENABLE_BITCODE = NO; - INFOPLIST_FILE = "bare-rn/Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 17.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-lc++", - ); - PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "bare-rn"; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; - SWIFT_OPTIMIZATION_LEVEL = "-Onone"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Debug; - }; - 13B07F951A680F5B00A75B9A /* Release */ = { - isa = XCBuildConfiguration; - baseConfigurationReference = 5709B34CF0A7D63546082F79 /* Pods-bare-rn.release.xcconfig */; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - CLANG_ENABLE_MODULES = YES; - CURRENT_PROJECT_VERSION = 1; - INFOPLIST_FILE = "bare-rn/Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 17.0; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - ); - MARKETING_VERSION = 1.0; - OTHER_LDFLAGS = ( - "$(inherited)", - "-ObjC", - "-lc++", - ); - PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier)"; - PRODUCT_NAME = "bare-rn"; - SUPPORTED_PLATFORMS = "iphoneos iphonesimulator"; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VERSIONING_SYSTEM = "apple-generic"; - }; - name = Release; - }; - 83CBBA201A601CBA00E9B192 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++20"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - ENABLE_TESTABILITY = YES; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_NO_COMMON_BLOCKS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 17.0; - LD_RUNPATH_SEARCH_PATHS = ( - /usr/lib/swift, - "$(inherited)", - ); - LIBRARY_SEARCH_PATHS = ( - "\"$(SDKROOT)/usr/lib/swift\"", - "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", - "\"$(inherited)\"", - ); - MTL_ENABLE_DEBUG_INFO = YES; - ONLY_ACTIVE_ARCH = YES; - OTHER_CPLUSPLUSFLAGS = ( - "$(OTHER_CFLAGS)", - "-DFOLLY_NO_CONFIG", - "-DFOLLY_MOBILE=1", - "-DFOLLY_USE_LIBCPP=1", - "-DFOLLY_CFG_NO_COROUTINES=1", - "-DFOLLY_HAVE_CLOCK_GETTIME=1", - ); - REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; - SDKROOT = iphoneos; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; - USE_HERMES = true; - }; - name = Debug; - }; - 83CBBA211A601CBA00E9B192 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "c++20"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_COMMA = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INFINITE_RECURSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; - CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; - CLANG_WARN_STRICT_PROTOTYPES = YES; - CLANG_WARN_SUSPICIOUS_MOVE = YES; - CLANG_WARN_UNREACHABLE_CODE = YES; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - ENABLE_STRICT_OBJC_MSGSEND = YES; - "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = ""; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_NO_COMMON_BLOCKS = YES; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 17.0; - LD_RUNPATH_SEARCH_PATHS = ( - /usr/lib/swift, - "$(inherited)", - ); - LIBRARY_SEARCH_PATHS = ( - "\"$(SDKROOT)/usr/lib/swift\"", - "\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"", - "\"$(inherited)\"", - ); - MTL_ENABLE_DEBUG_INFO = NO; - OTHER_CPLUSPLUSFLAGS = ( - "$(OTHER_CFLAGS)", - "-DFOLLY_NO_CONFIG", - "-DFOLLY_MOBILE=1", - "-DFOLLY_USE_LIBCPP=1", - "-DFOLLY_CFG_NO_COROUTINES=1", - "-DFOLLY_HAVE_CLOCK_GETTIME=1", - ); - REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; - SDKROOT = iphoneos; - USE_HERMES = true; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "bare-rn" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 13B07F941A680F5B00A75B9A /* Debug */, - 13B07F951A680F5B00A75B9A /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "bare-rn" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 83CBBA201A601CBA00E9B192 /* Debug */, - 83CBBA211A601CBA00E9B192 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */; -} diff --git a/apps/legacy/bare-rn/ios/bare-rn.xcodeproj/xcshareddata/xcschemes/bare-rn.xcscheme b/apps/legacy/bare-rn/ios/bare-rn.xcodeproj/xcshareddata/xcschemes/bare-rn.xcscheme deleted file mode 100644 index 6106d33b22..0000000000 --- a/apps/legacy/bare-rn/ios/bare-rn.xcodeproj/xcshareddata/xcschemes/bare-rn.xcscheme +++ /dev/null @@ -1,88 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/apps/legacy/bare-rn/ios/bare-rn.xcworkspace/contents.xcworkspacedata b/apps/legacy/bare-rn/ios/bare-rn.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 190b831198..0000000000 --- a/apps/legacy/bare-rn/ios/bare-rn.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - diff --git a/apps/legacy/bare-rn/ios/bare-rn/AppDelegate.swift b/apps/legacy/bare-rn/ios/bare-rn/AppDelegate.swift deleted file mode 100644 index 4fb4ca4833..0000000000 --- a/apps/legacy/bare-rn/ios/bare-rn/AppDelegate.swift +++ /dev/null @@ -1,48 +0,0 @@ -import UIKit -import React -import React_RCTAppDelegate -import ReactAppDependencyProvider - -@main -class AppDelegate: UIResponder, UIApplicationDelegate { - var window: UIWindow? - - var reactNativeDelegate: ReactNativeDelegate? - var reactNativeFactory: RCTReactNativeFactory? - - func application( - _ application: UIApplication, - didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil - ) -> Bool { - let delegate = ReactNativeDelegate() - let factory = RCTReactNativeFactory(delegate: delegate) - delegate.dependencyProvider = RCTAppDependencyProvider() - - reactNativeDelegate = delegate - reactNativeFactory = factory - - window = UIWindow(frame: UIScreen.main.bounds) - - factory.startReactNative( - withModuleName: "bare-rn", - in: window, - launchOptions: launchOptions - ) - - return true - } -} - -class ReactNativeDelegate: RCTDefaultReactNativeFactoryDelegate { - override func sourceURL(for bridge: RCTBridge) -> URL? { - self.bundleURL() - } - - override func bundleURL() -> URL? { -#if DEBUG - RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: "index") -#else - Bundle.main.url(forResource: "main", withExtension: "jsbundle") -#endif - } -} diff --git a/apps/legacy/bare-rn/ios/bare-rn/Images.xcassets/AppIcon.appiconset/Contents.json b/apps/legacy/bare-rn/ios/bare-rn/Images.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index ddd7fca89e..0000000000 --- a/apps/legacy/bare-rn/ios/bare-rn/Images.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "images": [ - { - "idiom": "iphone", - "scale": "2x", - "size": "20x20" - }, - { - "idiom": "iphone", - "scale": "3x", - "size": "20x20" - }, - { - "idiom": "iphone", - "scale": "2x", - "size": "29x29" - }, - { - "idiom": "iphone", - "scale": "3x", - "size": "29x29" - }, - { - "idiom": "iphone", - "scale": "2x", - "size": "40x40" - }, - { - "idiom": "iphone", - "scale": "3x", - "size": "40x40" - }, - { - "idiom": "iphone", - "scale": "2x", - "size": "60x60" - }, - { - "idiom": "iphone", - "scale": "3x", - "size": "60x60" - }, - { - "idiom": "ios-marketing", - "scale": "1x", - "size": "1024x1024" - } - ], - "info": { - "author": "xcode", - "version": 1 - } -} diff --git a/apps/legacy/bare-rn/ios/bare-rn/Images.xcassets/Contents.json b/apps/legacy/bare-rn/ios/bare-rn/Images.xcassets/Contents.json deleted file mode 100644 index 97a8662ebd..0000000000 --- a/apps/legacy/bare-rn/ios/bare-rn/Images.xcassets/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info": { - "version": 1, - "author": "xcode" - } -} diff --git a/apps/legacy/bare-rn/ios/bare-rn/Info.plist b/apps/legacy/bare-rn/ios/bare-rn/Info.plist deleted file mode 100644 index 37fc9b5e77..0000000000 --- a/apps/legacy/bare-rn/ios/bare-rn/Info.plist +++ /dev/null @@ -1,60 +0,0 @@ - - - - - CADisableMinimumFrameDurationOnPhone - - CFBundleDevelopmentRegion - en - CFBundleDisplayName - bare-rn - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - $(MARKETING_VERSION) - CFBundleSignature - ???? - CFBundleVersion - $(CURRENT_PROJECT_VERSION) - LSRequiresIPhoneOS - - NSAppTransportSecurity - - NSAllowsArbitraryLoads - - NSAllowsLocalNetworking - - - NSLocationWhenInUseUsageDescription - - RCTNewArchEnabled - - UILaunchStoryboardName - LaunchScreen - UIRequiredDeviceCapabilities - - arm64 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - - UISupportedInterfaceOrientations~ipad - - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - UIInterfaceOrientationPortrait - UIInterfaceOrientationPortraitUpsideDown - - UIViewControllerBasedStatusBarAppearance - - - diff --git a/apps/legacy/bare-rn/ios/bare-rn/LaunchScreen.storyboard b/apps/legacy/bare-rn/ios/bare-rn/LaunchScreen.storyboard deleted file mode 100644 index 4bc47247dc..0000000000 --- a/apps/legacy/bare-rn/ios/bare-rn/LaunchScreen.storyboard +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/apps/legacy/bare-rn/ios/bare-rn/PrivacyInfo.xcprivacy b/apps/legacy/bare-rn/ios/bare-rn/PrivacyInfo.xcprivacy deleted file mode 100644 index 41da7af967..0000000000 --- a/apps/legacy/bare-rn/ios/bare-rn/PrivacyInfo.xcprivacy +++ /dev/null @@ -1,47 +0,0 @@ - - - - - NSPrivacyAccessedAPITypes - - - NSPrivacyAccessedAPIType - NSPrivacyAccessedAPICategoryFileTimestamp - NSPrivacyAccessedAPITypeReasons - - C617.1 - 0A2A.1 - - - - NSPrivacyAccessedAPIType - NSPrivacyAccessedAPICategoryUserDefaults - NSPrivacyAccessedAPITypeReasons - - CA92.1 - - - - NSPrivacyAccessedAPIType - NSPrivacyAccessedAPICategoryDiskSpace - NSPrivacyAccessedAPITypeReasons - - 85F4.1 - E174.1 - - - - NSPrivacyAccessedAPIType - NSPrivacyAccessedAPICategorySystemBootTime - NSPrivacyAccessedAPITypeReasons - - 35F9.1 - - - - NSPrivacyCollectedDataTypes - - NSPrivacyTracking - - - diff --git a/apps/legacy/bare-rn/jest.config.js b/apps/legacy/bare-rn/jest.config.js deleted file mode 100644 index 8eb675e9bc..0000000000 --- a/apps/legacy/bare-rn/jest.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - preset: 'react-native', -}; diff --git a/apps/legacy/bare-rn/metro.config.js b/apps/legacy/bare-rn/metro.config.js deleted file mode 100644 index 8f418e97f9..0000000000 --- a/apps/legacy/bare-rn/metro.config.js +++ /dev/null @@ -1,30 +0,0 @@ -const path = require('path'); -const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config'); - -const workspaceRoot = path.resolve(__dirname, '../../../'); // Adjust the path to your monorepo root -const projectRoot = __dirname; -const defaultConfig = getDefaultConfig(projectRoot); - -const config = { - watchFolders: [ - workspaceRoot, // Watch the entire monorepo - ], - resolver: { - // Workspace packages (react-native-executorch, bare-resource-fetcher) declare - // their own `react` devDependency, so yarn installs a second React copy at - // packages/*/node_modules/react. Without disabling hierarchical lookup, Metro - // resolves `react` per-file and the bundle ends up with two React instances — - // useState's dispatcher comes back null at runtime. - disableHierarchicalLookup: true, - nodeModulesPaths: [ - path.resolve(projectRoot, 'node_modules'), - path.resolve(workspaceRoot, 'node_modules'), - ], - assetExts: [ - ...defaultConfig.resolver.assetExts, - 'pte', // ExecuTorch model files - ], - }, -}; - -module.exports = mergeConfig(defaultConfig, config); diff --git a/apps/legacy/bare-rn/package.json b/apps/legacy/bare-rn/package.json deleted file mode 100644 index d7e9d2d033..0000000000 --- a/apps/legacy/bare-rn/package.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "name": "legacy-bare-rn", - "version": "0.0.1", - "private": true, - "scripts": { - "android": "react-native run-android", - "ios": "react-native run-ios", - "typecheck": "tsc", - "lint": "eslint . --ext .ts,.tsx --fix", - "start": "react-native start", - "test": "jest" - }, - "dependencies": { - "@dr.pogodin/react-native-fs": "^2.36.2", - "@kesha-antonov/react-native-background-downloader": "^4.4.5", - "react": "19.1.0", - "react-native": "0.81.5", - "react-native-executorch": "workspace:*", - "react-native-executorch-bare-resource-fetcher": "workspace:*", - "react-native-safe-area-context": "^5.5.2" - }, - "devDependencies": { - "@babel/core": "^7.29.7", - "@babel/plugin-transform-export-namespace-from": "^7.25.2", - "@babel/preset-env": "^7.25.3", - "@babel/runtime": "^7.25.0", - "@react-native-community/cli": "20.0.0", - "@react-native-community/cli-platform-android": "20.0.0", - "@react-native-community/cli-platform-ios": "20.0.0", - "@react-native/babel-preset": "0.81.5", - "@react-native/eslint-config": "0.81.5", - "@react-native/metro-config": "0.81.5", - "@react-native/typescript-config": "0.81.5", - "@types/jest": "^29.5.13", - "@types/react": "^19.1.0", - "@types/react-test-renderer": "^19.1.0", - "eslint": "^8.19.0", - "jest": "^29.6.3", - "prettier": "2.8.8", - "react-test-renderer": "19.1.0", - "typescript": "^5.8.3" - }, - "engines": { - "node": ">=22" - }, - "installConfig": { - "hoistingLimits": "workspaces" - } -} diff --git a/apps/legacy/bare-rn/tsconfig.json b/apps/legacy/bare-rn/tsconfig.json deleted file mode 100644 index 4fe6f139ef..0000000000 --- a/apps/legacy/bare-rn/tsconfig.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "compilerOptions": { - "allowJs": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "jsx": "react-native", - "lib": ["es2022"], - "moduleResolution": "bundler", - "noEmit": true, - "resolveJsonModule": true, - "skipLibCheck": true, - "strict": true, - "target": "esnext" - }, - "include": ["**/*.ts", "**/*.tsx"], - "exclude": ["**/node_modules", "**/Pods", "**/__tests__"] -} diff --git a/apps/legacy/computer-vision/.gitignore b/apps/legacy/computer-vision/.gitignore deleted file mode 100644 index f779c900a7..0000000000 --- a/apps/legacy/computer-vision/.gitignore +++ /dev/null @@ -1,38 +0,0 @@ -# Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files - -# dependencies -node_modules/ - -# Expo -.expo/ -dist/ -web-build/ -expo-env.d.ts - -# Native -*.orig.* -*.jks -*.p8 -*.p12 -*.key -*.mobileprovision - -# Metro -.metro-health-check* - -# debug -npm-debug.* -yarn-debug.* -yarn-error.* - -# macOS -.DS_Store -*.pem - -# local env files -.env*.local - -# typescript -*.tsbuildinfo - -.yarn diff --git a/apps/legacy/computer-vision/ScreenWrapper.tsx b/apps/legacy/computer-vision/ScreenWrapper.tsx deleted file mode 100644 index 31f70e4442..0000000000 --- a/apps/legacy/computer-vision/ScreenWrapper.tsx +++ /dev/null @@ -1,8 +0,0 @@ -import { useIsFocused } from 'expo-router'; -import { PropsWithChildren } from 'react'; - -export default function ScreenWrapper({ children }: PropsWithChildren) { - const isFocused = useIsFocused(); - - return isFocused ? <>{children} : null; -} diff --git a/apps/legacy/computer-vision/app.json b/apps/legacy/computer-vision/app.json deleted file mode 100644 index 9dd5e072ca..0000000000 --- a/apps/legacy/computer-vision/app.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "expo": { - "name": "legacy-computer-vision", - "slug": "legacy-computer-vision", - "version": "1.0.0", - "orientation": "portrait", - "icon": "./assets/icons/icon.png", - "userInterfaceStyle": "light", - "newArchEnabled": true, - "scheme": "rne-legacy-computer-vision", - "splash": { - "image": "./assets/icons/splash.png", - "resizeMode": "contain", - "backgroundColor": "#ffffff" - }, - "ios": { - "supportsTablet": true, - "bundleIdentifier": "com.anonymous.legacycomputervision", - "infoPlist": { - "NSCameraUsageDescription": "Process photo from camera" - } - }, - "android": { - "adaptiveIcon": { - "foregroundImage": "./assets/icons/adaptive-icon.png", - "backgroundColor": "#ffffff" - }, - "package": "com.anonymous.legacycomputervision", - "permissions": ["android.permission.CAMERA"] - }, - "web": { - "favicon": "./assets/icons/favicon.png" - }, - "plugins": [ - "expo-font", - "expo-router", - [ - "expo-build-properties", - { - "android": { - "minSdkVersion": 26 - }, - "ios": { - "deploymentTarget": "17.0" - } - } - ] - ] - } -} diff --git a/apps/legacy/computer-vision/app/_layout.tsx b/apps/legacy/computer-vision/app/_layout.tsx deleted file mode 100644 index cd46bb708e..0000000000 --- a/apps/legacy/computer-vision/app/_layout.tsx +++ /dev/null @@ -1,203 +0,0 @@ -import { Drawer } from 'expo-router/drawer'; -import { initExecutorch } from 'react-native-executorch/legacy'; -import { ExpoResourceFetcher } from 'react-native-executorch-expo-resource-fetcher'; - -import ColorPalette from '../colors'; -import React, { useState } from 'react'; -import { Text, StyleSheet, View, TouchableOpacity, type ColorValue } from 'react-native'; - -import { - type DrawerContentComponentProps, - DrawerContentScrollView, - DrawerItemList, -} from 'expo-router/build/react-navigation/drawer'; -import { DrawerActions } from 'expo-router/build/react-navigation/routers'; -import { useNavigation } from 'expo-router'; -import Svg, { Rect } from 'react-native-svg'; -import { GeneratingContext } from '../context'; - -initExecutorch({ - resourceFetcher: ExpoResourceFetcher, -}); - -function HamburgerIcon({ tintColor }: { tintColor?: ColorValue }) { - const navigation = useNavigation(); - const fill = typeof tintColor === 'string' ? tintColor : '#000'; - return ( - navigation.dispatch(DrawerActions.toggleDrawer())} - style={styles.hamburger} - > - - - - - - - ); -} - -interface CustomDrawerProps extends DrawerContentComponentProps { - isGenerating: boolean; -} - -function CustomDrawerContent(props: CustomDrawerProps) { - const { isGenerating, ...otherProps } = props; - return ( - - {!isGenerating ? ( - - ) : ( - - Model is generating... - Interrupt before switching model - - )} - - ); -} - -export default function _layout() { - const [isGenerating, setIsGenerating] = useState(false); - - return ( - { - setIsGenerating(newState); - }, - }} - > - } - screenOptions={{ - drawerActiveTintColor: ColorPalette.primary, - drawerInactiveTintColor: '#888', - headerTintColor: ColorPalette.primary, - headerTitleStyle: { color: ColorPalette.primary }, - headerLeft: (props) => , - }} - > - null, - title: 'Main Menu', - drawerItemStyle: { display: 'none' }, - }} - /> - - - - - - - - - - - - - - ); -} - -const styles = StyleSheet.create({ - hamburger: { - marginLeft: 12, - }, - centerContent: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - padding: 20, - }, - mainText: { - fontSize: 18, - fontWeight: 'bold', - marginBottom: 10, - color: ColorPalette.primary, - }, - subText: { - fontSize: 14, - color: ColorPalette.strongPrimary, - }, -}); diff --git a/apps/legacy/computer-vision/app/classification/index.tsx b/apps/legacy/computer-vision/app/classification/index.tsx deleted file mode 100644 index 0cc5a78ed3..0000000000 --- a/apps/legacy/computer-vision/app/classification/index.tsx +++ /dev/null @@ -1,192 +0,0 @@ -import Spinner from '../../components/Spinner'; -import { getImage } from '../../utils'; -import { - models, - useClassification, - ClassificationModelSources, -} from 'react-native-executorch/legacy'; -import { ModelPicker, ModelOption } from '../../components/ModelPicker'; -const classification = models.classification; - -const MODELS: ModelOption[] = [ - { - label: 'EfficientNet V2 S Quantized', - value: classification.efficientnet_v2_s(), - }, - { - label: 'EfficientNet V2 S', - value: classification.efficientnet_v2_s({ quant: false }), - }, -]; -import { View, StyleSheet, Image, Text, ScrollView } from 'react-native'; -import { BottomBar } from '../../components/BottomBar'; -import React, { useContext, useEffect, useState } from 'react'; -import { GeneratingContext } from '../../context'; -import ScreenWrapper from '../../ScreenWrapper'; -import { StatsBar } from '../../components/StatsBar'; -import ErrorBanner from '../../components/ErrorBanner'; - -export default function ClassificationScreen() { - const [selectedModel, setSelectedModel] = useState( - classification.efficientnet_v2_s() - ); - const [results, setResults] = useState<{ label: string; score: number }[]>([]); - const [imageUri, setImageUri] = useState(''); - const [inferenceTime, setInferenceTime] = useState(null); - - const [error, setError] = useState(null); - - const model = useClassification({ model: selectedModel }); - const { setGlobalGenerating } = useContext(GeneratingContext); - - useEffect(() => { - setGlobalGenerating(model.isGenerating); - }, [model.isGenerating, setGlobalGenerating]); - - useEffect(() => { - if (model.error) setError(String(model.error)); - }, [model.error]); - - const handleCameraPress = async (isCamera: boolean) => { - const image = await getImage(isCamera); - const uri = image?.uri; - if (typeof uri === 'string') { - setImageUri(uri as string); - setResults([]); - setInferenceTime(null); - } - }; - - const runForward = async () => { - if (imageUri) { - try { - const start = Date.now(); - const output = await model.forward(imageUri); - setInferenceTime(Date.now() - start); - const top10 = Object.entries(output) - .sort(([, a], [, b]) => (b as number) - (a as number)) - .slice(0, 10) - .map(([label, score]) => ({ label, score: score as number })); - setResults(top10); - } catch (e) { - setError(e instanceof Error ? e.message : String(e)); - } - } - }; - - if (!model.isReady && !model.error) { - return ( - - ); - } - - return ( - - setError(null)} /> - - - - {!imageUri && ( - - Image Classification - - This model analyzes an image and returns the top 10 most likely labels with confidence - scores. Use the gallery or camera icons below to pick an image, then tap the button to - run the model. - - - )} - {results.length > 0 && ( - - Results Top 10 - - {results.map(({ label, score }) => ( - - {label} - {score.toFixed(3)} - - ))} - - - )} - - { - setSelectedModel(m); - setResults([]); - }} - /> - - - - ); -} - -const styles = StyleSheet.create({ - imageContainer: { - flex: 6, - width: '100%', - padding: 16, - }, - image: { - flex: 2, - borderRadius: 8, - width: '100%', - }, - results: { - flex: 1, - alignItems: 'center', - justifyContent: 'center', - gap: 4, - padding: 4, - }, - resultHeader: { - fontSize: 18, - color: 'navy', - }, - resultsList: { - flex: 1, - }, - resultRecord: { - flexDirection: 'row', - width: '100%', - justifyContent: 'space-between', - padding: 8, - borderBottomWidth: 1, - }, - resultLabel: { - flex: 1, - marginRight: 4, - }, - infoContainer: { - alignItems: 'center', - padding: 16, - gap: 8, - }, - infoTitle: { - fontSize: 18, - fontWeight: '600', - color: 'navy', - }, - infoText: { - fontSize: 14, - color: '#555', - textAlign: 'center', - lineHeight: 20, - }, -}); diff --git a/apps/legacy/computer-vision/app/index.tsx b/apps/legacy/computer-vision/app/index.tsx deleted file mode 100644 index 3a2714b734..0000000000 --- a/apps/legacy/computer-vision/app/index.tsx +++ /dev/null @@ -1,102 +0,0 @@ -import { useRouter } from 'expo-router'; -import { View, Text, StyleSheet, TouchableOpacity } from 'react-native'; -import ColorPalette from '../colors'; -import ExecutorchLogo from '../assets/icons/executorch.svg'; - -export default function Home() { - const router = useRouter(); - - return ( - - - Select a demo model - - router.navigate('vision_camera/')}> - Vision Camera - - router.navigate('classification/')}> - Classification - - router.navigate('semantic_segmentation/')} - > - Semantic Segmentation - - router.navigate('object_detection/')} - > - Object Detection - - router.navigate('instance_segmentation/')} - > - Instance Segmentation - - router.navigate('pose_estimation/')}> - Pose Estimation - - router.navigate('segment_anything/')} - > - Segment Anything - - router.navigate('ocr/')}> - OCR - - router.navigate('ocr_vertical/')}> - OCR Vertical - - router.navigate('style_transfer/')}> - Style Transfer - - router.navigate('text_to_image/')}> - Image Generation - - - - ); -} - -export const fontSizes = { - xxl: 34, - xl: 22, - lg: 18, - md: 16, - sm: 14, - xs: 12, - xxs: 10, -}; - -const styles = StyleSheet.create({ - container: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - backgroundColor: '#fff', - }, - headerText: { - fontSize: fontSizes.lg, - color: ColorPalette.strongPrimary, - margin: 20, - }, - buttonContainer: { - width: '80%', - justifyContent: 'space-evenly', - marginBottom: 20, - }, - button: { - backgroundColor: ColorPalette.strongPrimary, - borderRadius: 8, - padding: 10, - alignItems: 'center', - marginBottom: 10, - }, - buttonText: { - color: 'white', - fontSize: fontSizes.md, - }, -}); diff --git a/apps/legacy/computer-vision/app/instance_segmentation/index.tsx b/apps/legacy/computer-vision/app/instance_segmentation/index.tsx deleted file mode 100644 index a2fa46ba07..0000000000 --- a/apps/legacy/computer-vision/app/instance_segmentation/index.tsx +++ /dev/null @@ -1,345 +0,0 @@ -import Spinner from '../../components/Spinner'; -import { BottomBar } from '../../components/BottomBar'; -import { getImage } from '../../utils'; -import { ModelPicker, ModelOption } from '../../components/ModelPicker'; -import { - models, - useInstanceSegmentation, - InstanceSegmentationModelSources, -} from 'react-native-executorch/legacy'; -import { View, StyleSheet, ScrollView, Text, TouchableOpacity } from 'react-native'; -import React, { useContext, useEffect, useState } from 'react'; -import { GeneratingContext } from '../../context'; -import ScreenWrapper from '../../ScreenWrapper'; -import ImageWithMasks, { - buildDisplayInstances, - DisplayInstance, -} from '../../components/ImageWithMasks'; -import { StatsBar } from '../../components/StatsBar'; -const instanceSegmentation = models.instance_segmentation; - -const MODELS: ModelOption[] = [ - { label: 'Yolo26N', value: instanceSegmentation.yolo26n() }, - { label: 'Yolo26S', value: instanceSegmentation.yolo26s() }, - { label: 'Yolo26M', value: instanceSegmentation.yolo26m() }, - { label: 'Yolo26L', value: instanceSegmentation.yolo26l() }, - { label: 'Yolo26X', value: instanceSegmentation.yolo26x() }, - { - label: 'RF-DeTR Nano', - value: instanceSegmentation.rf_detr_nano(), - }, - { label: 'FastSAM-S', value: instanceSegmentation.fastsam_s() }, - { label: 'FastSAM-X', value: instanceSegmentation.fastsam_x() }, -]; - -export default function InstanceSegmentationScreen() { - const [selectedModel, setSelectedModel] = useState( - instanceSegmentation.yolo26n() - ); - const [inferenceTime, setInferenceTime] = useState(null); - - const { setGlobalGenerating } = useContext(GeneratingContext); - - const { isReady, isGenerating, downloadProgress, forward, error, getAvailableInputSizes } = - useInstanceSegmentation({ - model: selectedModel, - }); - - const [imageUri, setImageUri] = useState(''); - const [imageSize, setImageSize] = useState({ width: 0, height: 0 }); - const [instances, setInstances] = useState([]); - const [selectedInputSize, setSelectedInputSize] = useState(null); - - const availableInputSizes = getAvailableInputSizes(); - - useEffect(() => { - setGlobalGenerating(isGenerating); - }, [isGenerating, setGlobalGenerating]); - - // Set default input size when model is ready - useEffect(() => { - if (!isReady) return; - - if (availableInputSizes && availableInputSizes.length > 0) { - setSelectedInputSize((prev) => { - if (typeof prev === 'number' && availableInputSizes.includes(prev)) { - return prev; - } - return availableInputSizes[0]; - }); - return; - } - - setSelectedInputSize(null); - }, [isReady, availableInputSizes]); - - const handleCameraPress = async (isCamera: boolean) => { - const image = await getImage(isCamera); - if (!image?.uri) return; - setImageUri(image.uri); - setImageSize({ - width: image.width ?? 0, - height: image.height ?? 0, - }); - setInstances([]); - setInferenceTime(null); - }; - - const runForward = async () => { - if (!imageUri || imageSize.width === 0 || imageSize.height === 0) return; - - const inputSize = - availableInputSizes && - typeof selectedInputSize === 'number' && - availableInputSizes.includes(selectedInputSize) - ? selectedInputSize - : undefined; - - try { - const start = Date.now(); - const output = await forward(imageUri, { - confidenceThreshold: 0.5, - iouThreshold: 0.55, - maxInstances: 20, - returnMaskAtOriginalResolution: true, - inputSize, - }); - - setInferenceTime(Date.now() - start); - - // Convert raw masks → small Skia images immediately. - // Raw Uint8Array mask buffers (backed by native OwningArrayBuffer) - // go out of scope here and become eligible for GC right away. - setInstances(buildDisplayInstances(output)); - } catch (e) { - console.error(e); - } - }; - - if (!isReady && error) { - return ( - - - Error Loading Model - {error?.message || 'Unknown error occurred'} - Code: {error?.code || 'N/A'} - - - ); - } - - if (!isReady) { - return ( - - ); - } - - return ( - - - - - {!imageUri && ( - - Instance Segmentation - - This model detects individual objects and draws a precise mask over each one. Pick - an image from your gallery or take one with your camera to get started. - - - )} - - - {imageUri && availableInputSizes && availableInputSizes.length > 0 && ( - - Input Size: - - {availableInputSizes.map((size) => ( - setSelectedInputSize(size)} - > - - {size} - - - ))} - - - )} - - {instances.length > 0 && ( - - Detected {instances.length} instance(s) - - {instances.map((instance, idx) => ( - - - {instance.label || 'Unknown'} ({(instance.score * 100).toFixed(1)}%) - - - ))} - - - )} - - - { - setSelectedModel(m); - setInstances([]); - setInferenceTime(null); - }} - /> - - 0 ? instances.length : null} - /> - - - - ); -} - -const styles = StyleSheet.create({ - container: { - flex: 6, - width: '100%', - }, - imageContainer: { - flex: 1, - width: '100%', - padding: 16, - }, - inputSizeContainer: { - paddingHorizontal: 16, - paddingVertical: 12, - backgroundColor: '#fff', - borderTopWidth: 1, - borderTopColor: '#e0e0e0', - }, - inputSizeLabel: { - fontSize: 14, - fontWeight: '600', - color: '#333', - marginBottom: 8, - }, - inputSizeScroll: { - flexDirection: 'row', - }, - sizeButton: { - paddingHorizontal: 16, - paddingVertical: 8, - marginRight: 8, - borderRadius: 6, - backgroundColor: '#f0f0f0', - }, - sizeButtonActive: { - backgroundColor: '#007AFF', - }, - sizeButtonText: { - fontSize: 14, - fontWeight: '600', - color: '#666', - }, - sizeButtonTextActive: { - color: '#fff', - }, - resultsContainer: { - maxHeight: 200, - paddingHorizontal: 16, - paddingVertical: 12, - backgroundColor: '#fff', - borderTopWidth: 1, - borderTopColor: '#e0e0e0', - }, - resultsHeader: { - fontSize: 16, - fontWeight: '600', - marginBottom: 8, - color: '#333', - }, - resultsList: { - flex: 1, - }, - resultRow: { - flexDirection: 'row', - alignItems: 'center', - paddingVertical: 6, - paddingHorizontal: 8, - marginBottom: 4, - backgroundColor: '#f9f9f9', - borderRadius: 6, - }, - resultText: { - fontSize: 14, - fontWeight: '500', - color: '#333', - }, - errorContainer: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - padding: 32, - }, - errorTitle: { - fontSize: 20, - fontWeight: '700', - color: '#e74c3c', - marginBottom: 12, - }, - errorText: { - fontSize: 14, - color: '#555', - textAlign: 'center', - marginBottom: 8, - }, - errorCode: { - fontSize: 12, - color: '#999', - fontFamily: 'Courier', - }, - infoContainer: { - alignItems: 'center', - padding: 16, - gap: 8, - }, - infoTitle: { - fontSize: 18, - fontWeight: '600', - color: 'navy', - }, - infoText: { - fontSize: 14, - color: '#555', - textAlign: 'center', - lineHeight: 20, - }, -}); diff --git a/apps/legacy/computer-vision/app/object_detection/index.tsx b/apps/legacy/computer-vision/app/object_detection/index.tsx deleted file mode 100644 index 37a3ab7b32..0000000000 --- a/apps/legacy/computer-vision/app/object_detection/index.tsx +++ /dev/null @@ -1,180 +0,0 @@ -import Spinner from '../../components/Spinner'; -import { BottomBar } from '../../components/BottomBar'; -import { ModelPicker, ModelOption } from '../../components/ModelPicker'; -import { getImage } from '../../utils'; -import { - models, - Detection, - useObjectDetection, - ObjectDetectionModelSources, -} from 'react-native-executorch/legacy'; -import { View, StyleSheet, Image, Text } from 'react-native'; -import ImageWithBboxes from '../../components/ImageWithBboxes'; -import React, { useContext, useEffect, useState } from 'react'; -import { GeneratingContext } from '../../context'; -import ScreenWrapper from '../../ScreenWrapper'; -import { StatsBar } from '../../components/StatsBar'; -const objectDetection = models.object_detection; - -const MODELS: ModelOption[] = [ - { - label: 'RF-DeTR Nano', - value: objectDetection.rf_detr_nano(), - }, - { - label: 'SSDLite MobileNet', - value: objectDetection.ssdlite_320_mobilenet_v3_large(), - }, - { label: 'YOLO26N', value: objectDetection.yolo26n() }, - { label: 'YOLO26S', value: objectDetection.yolo26s() }, - { label: 'YOLO26M', value: objectDetection.yolo26m() }, - { label: 'YOLO26L', value: objectDetection.yolo26l() }, - { label: 'YOLO26X', value: objectDetection.yolo26x() }, -]; -import ErrorBanner from '../../components/ErrorBanner'; - -export default function ObjectDetectionScreen() { - const [imageUri, setImageUri] = useState(''); - const [results, setResults] = useState([]); - const [error, setError] = useState(null); - const [imageDimensions, setImageDimensions] = useState<{ - width: number; - height: number; - }>(); - const [selectedModel, setSelectedModel] = useState( - objectDetection.rf_detr_nano() - ); - const [inferenceTime, setInferenceTime] = useState(null); - - const model = useObjectDetection({ model: selectedModel }); - const { setGlobalGenerating } = useContext(GeneratingContext); - useEffect(() => { - setGlobalGenerating(model.isGenerating); - }, [model.isGenerating, setGlobalGenerating]); - - useEffect(() => { - if (model.error) setError(String(model.error)); - }, [model.error]); - - const handleCameraPress = async (isCamera: boolean) => { - const image = await getImage(isCamera); - const uri = image?.uri; - const width = image?.width; - const height = image?.height; - - if (uri && width && height) { - setImageUri(image.uri as string); - setImageDimensions({ width: width as number, height: height as number }); - setResults([]); - setInferenceTime(null); - } - }; - - const runForward = async () => { - if (imageUri) { - try { - const start = Date.now(); - const output = await model.forward(imageUri); - setInferenceTime(Date.now() - start); - setResults(output); - } catch (e) { - setError(e instanceof Error ? e.message : String(e)); - } - } - }; - - if (!model.isReady) { - return ( - - ); - } - - return ( - - setError(null)} /> - - - {imageUri && imageDimensions?.width && imageDimensions?.height ? ( - - ) : ( - - )} - - {!imageUri && ( - - Object Detection - - This model detects objects in an image and draws bounding boxes around them with class - labels and confidence scores. Pick an image from your gallery or take one with your - camera to get started. - - - )} - - { - setSelectedModel(m); - setResults([]); - }} - /> - 0 ? results.length : null} - /> - - - ); -} - -const styles = StyleSheet.create({ - imageContainer: { - flex: 6, - width: '100%', - padding: 16, - }, - image: { - flex: 2, - borderRadius: 8, - width: '100%', - }, - fullSizeImage: { - width: '100%', - height: '100%', - }, - infoContainer: { - alignItems: 'center', - padding: 16, - gap: 8, - }, - infoTitle: { - fontSize: 18, - fontWeight: '600', - color: 'navy', - }, - infoText: { - fontSize: 14, - color: '#555', - textAlign: 'center', - lineHeight: 20, - }, -}); diff --git a/apps/legacy/computer-vision/app/ocr/index.tsx b/apps/legacy/computer-vision/app/ocr/index.tsx deleted file mode 100644 index a1542ab953..0000000000 --- a/apps/legacy/computer-vision/app/ocr/index.tsx +++ /dev/null @@ -1,207 +0,0 @@ -import Spinner from '../../components/Spinner'; -import { BottomBar } from '../../components/BottomBar'; -import { ModelPicker, ModelOption } from '../../components/ModelPicker'; -import { getImage } from '../../utils'; -import { models, useOCR, OCRProps } from 'react-native-executorch/legacy'; -import { View, StyleSheet, Image, Text, ScrollView } from 'react-native'; -import ImageWithBboxes2 from '../../components/ImageWithOCRBboxes'; -import React, { useContext, useEffect, useState } from 'react'; -import { GeneratingContext } from '../../context'; -import ScreenWrapper from '../../ScreenWrapper'; -import { StatsBar } from '../../components/StatsBar'; - -type OCRModelSources = OCRProps['model']; - -const ocr = models.ocr.craft; - -const MODELS: ModelOption[] = [ - { label: 'English', value: ocr({ language: 'en' }) }, - { label: 'German', value: ocr({ language: 'de' }) }, - { label: 'French', value: ocr({ language: 'fr' }) }, - { label: 'Spanish', value: ocr({ language: 'es' }) }, - { label: 'Italian', value: ocr({ language: 'it' }) }, - { label: 'Japanese', value: ocr({ language: 'ja' }) }, - { label: 'Korean', value: ocr({ language: 'ko' }) }, -]; -import ErrorBanner from '../../components/ErrorBanner'; - -export default function OCRScreen() { - const [imageUri, setImageUri] = useState(''); - const [results, setResults] = useState([]); - const [error, setError] = useState(null); - const [imageDimensions, setImageDimensions] = useState<{ - width: number; - height: number; - }>(); - const [selectedModel, setSelectedModel] = useState(ocr({ language: 'en' })); - const [inferenceTime, setInferenceTime] = useState(null); - - const model = useOCR({ - model: selectedModel, - }); - const { setGlobalGenerating } = useContext(GeneratingContext); - useEffect(() => { - setGlobalGenerating(model.isGenerating); - }, [model.isGenerating, setGlobalGenerating]); - - useEffect(() => { - if (model.error) setError(String(model.error)); - }, [model.error]); - - const handleCameraPress = async (isCamera: boolean) => { - const image = await getImage(isCamera); - const width = image?.width; - const height = image?.height; - setImageDimensions({ width: width as number, height: height as number }); - const uri = image?.uri; - if (typeof uri === 'string') { - setImageUri(uri as string); - setResults([]); - setInferenceTime(null); - } - }; - - const runForward = async () => { - try { - const start = Date.now(); - const output = await model.forward(imageUri); - setInferenceTime(Date.now() - start); - setResults(output); - } catch (e) { - setError(e instanceof Error ? e.message : String(e)); - } - }; - - if (!model.isReady && !model.error) { - return ( - - ); - } - - return ( - - setError(null)} /> - - - {imageUri && imageDimensions?.width && imageDimensions?.height ? ( - - ) : ( - - )} - - {!imageUri && ( - - OCR - - This model reads and extracts text from images, returning each detected text region - with its bounding box and confidence score. Pick an image from your gallery or take - one with your camera to get started. - - - )} - {results.length > 0 && ( - - Results - - {results.map(({ text, score }, index) => ( - - {text} - {score.toFixed(3)} - - ))} - - - )} - - { - setSelectedModel(m); - setResults([]); - }} - /> - 0 ? results.length : null} - /> - - - ); -} - -const styles = StyleSheet.create({ - imageContainer: { - flex: 2, - borderRadius: 8, - width: '100%', - }, - container: { - flex: 6, - width: '100%', - padding: 16, - }, - image: { - width: '100%', - height: '100%', - }, - results: { - flex: 1, - alignItems: 'center', - justifyContent: 'center', - gap: 4, - padding: 4, - }, - resultHeader: { - fontSize: 18, - color: 'navy', - }, - resultsList: { - flex: 1, - }, - resultRecord: { - flexDirection: 'row', - width: '100%', - justifyContent: 'space-between', - padding: 8, - borderBottomWidth: 1, - }, - resultLabel: { - flex: 1, - marginRight: 4, - }, - infoContainer: { - alignItems: 'center', - padding: 16, - gap: 8, - }, - infoTitle: { - fontSize: 18, - fontWeight: '600', - color: 'navy', - }, - infoText: { - fontSize: 14, - color: '#555', - textAlign: 'center', - lineHeight: 20, - }, -}); diff --git a/apps/legacy/computer-vision/app/ocr_vertical/index.tsx b/apps/legacy/computer-vision/app/ocr_vertical/index.tsx deleted file mode 100644 index 3aa8c02dd6..0000000000 --- a/apps/legacy/computer-vision/app/ocr_vertical/index.tsx +++ /dev/null @@ -1,196 +0,0 @@ -import Spinner from '../../components/Spinner'; -import { BottomBar } from '../../components/BottomBar'; -import { getImage } from '../../utils'; -import { models, useVerticalOCR } from 'react-native-executorch/legacy'; -import { View, StyleSheet, Image, Text, ScrollView } from 'react-native'; -import ImageWithBboxes2 from '../../components/ImageWithOCRBboxes'; -import React, { useContext, useEffect, useState } from 'react'; -import { GeneratingContext } from '../../context'; -import ScreenWrapper from '../../ScreenWrapper'; -import { StatsBar } from '../../components/StatsBar'; -import ErrorBanner from '../../components/ErrorBanner'; - -export default function VerticalOCRScreen() { - const [imageUri, setImageUri] = useState(''); - const [results, setResults] = useState([]); - const [imageDimensions, setImageDimensions] = useState<{ - width: number; - height: number; - }>(); - const [inferenceTime, setInferenceTime] = useState(null); - - const [error, setError] = useState(null); - - const model = useVerticalOCR({ - model: models.ocr.craft({ language: 'en' }), - independentCharacters: true, - }); - - const { setGlobalGenerating } = useContext(GeneratingContext); - - useEffect(() => { - setGlobalGenerating(model.isGenerating); - }, [model.isGenerating, setGlobalGenerating]); - - useEffect(() => { - if (model.error) setError(String(model.error)); - }, [model.error]); - - const handleCameraPress = async (isCamera: boolean) => { - const image = await getImage(isCamera); - const width = image?.width; - const height = image?.height; - setImageDimensions({ width: width as number, height: height as number }); - const uri = image?.uri; - if (typeof uri === 'string') { - setImageUri(uri as string); - setResults([]); - setInferenceTime(null); - } - }; - - const runForward = async () => { - try { - const start = Date.now(); - const output = await model.forward(imageUri); - setInferenceTime(Date.now() - start); - setResults(output); - } catch (e) { - setError(e instanceof Error ? e.message : String(e)); - } - }; - - if (!model.isReady && !model.error) { - return ( - - ); - } - - return ( - - - setError(null)} /> - - - {imageUri && imageDimensions?.width && imageDimensions?.height ? ( - - ) : ( - - )} - - {!imageUri && ( - - Vertical OCR - - This model reads vertical text (e.g. Japanese, Korean, Chinese columns) from images, - returning each detected text region with its bounding box and confidence score. Pick - an image from your gallery or take one with your camera to get started. - - - )} - {imageUri && inferenceTime !== null && results.length === 0 && ( - - No text detected - - The model did not find any vertical text in this image. Try an image containing - vertical Japanese, Korean, or Chinese text. - - - )} - {results.length > 0 && ( - - Results - - {results.map(({ text, score }, index) => ( - - {text} - {score?.toFixed(3)} - - ))} - - - )} - - 0 ? results.length : null} - /> - - - ); -} - -const styles = StyleSheet.create({ - imageContainer: { - flex: 2, - borderRadius: 8, - width: '100%', - }, - container: { - flex: 6, - width: '100%', - padding: 16, - }, - image: { - width: '100%', - height: '100%', - }, - results: { - flex: 1, - alignItems: 'center', - justifyContent: 'center', - gap: 4, - padding: 4, - }, - resultHeader: { - fontSize: 18, - color: 'navy', - }, - resultsList: { - flex: 1, - }, - resultRecord: { - flexDirection: 'row', - width: '100%', - justifyContent: 'space-between', - padding: 8, - borderBottomWidth: 1, - }, - resultLabel: { - flex: 1, - marginRight: 4, - }, - infoContainer: { - alignItems: 'center', - padding: 16, - gap: 8, - }, - infoTitle: { - fontSize: 18, - fontWeight: '600', - color: 'navy', - }, - infoText: { - fontSize: 14, - color: '#555', - textAlign: 'center', - lineHeight: 20, - }, -}); diff --git a/apps/legacy/computer-vision/app/pose_estimation/index.tsx b/apps/legacy/computer-vision/app/pose_estimation/index.tsx deleted file mode 100644 index 68c371a9ed..0000000000 --- a/apps/legacy/computer-vision/app/pose_estimation/index.tsx +++ /dev/null @@ -1,271 +0,0 @@ -import Spinner from '../../components/Spinner'; -import { BottomBar } from '../../components/BottomBar'; -import { ModelPicker, ModelOption } from '../../components/ModelPicker'; -import { getImage } from '../../utils'; -import { - models, - usePoseEstimation, - PoseDetections, - PoseEstimationModelSources, - RnExecutorchError, - RnExecutorchErrorCode, -} from 'react-native-executorch/legacy'; -import { View, StyleSheet, Image, Text } from 'react-native'; -import React, { useContext, useEffect, useState } from 'react'; -import { GeneratingContext } from '../../context'; -import ScreenWrapper from '../../ScreenWrapper'; -import { StatsBar } from '../../components/StatsBar'; -import Svg, { Circle, Line } from 'react-native-svg'; -import ErrorBanner from '../../components/ErrorBanner'; -import { COCO_SKELETON_CONNECTIONS } from '../../components/utils/cocoSkeleton'; - -const poseEstimation = models.pose_estimation; - -const MODELS: ModelOption[] = [ - { label: 'YOLO26N Pose', value: poseEstimation.yolo26n() }, - { - label: 'RF-DETR Keypoint (beta)', - value: poseEstimation.rfdetr_keypoint_preview(), - }, -]; - -// Colors for different people -const PERSON_COLORS = ['lime', 'cyan', 'magenta', 'yellow', 'orange', 'pink']; - -export default function PoseEstimationScreen() { - const [imageUri, setImageUri] = useState(''); - const [results, setResults] = useState([]); - const [error, setError] = useState(null); - const [imageDimensions, setImageDimensions] = useState<{ - width: number; - height: number; - }>(); - const [inferenceTime, setInferenceTime] = useState(null); - const [layout, setLayout] = useState({ width: 0, height: 0 }); - const [selectedModel, setSelectedModel] = useState( - poseEstimation.yolo26n() - ); - - const model = usePoseEstimation({ model: selectedModel }); - const { setGlobalGenerating } = useContext(GeneratingContext); - - useEffect(() => { - setGlobalGenerating(model.isGenerating); - }, [model.isGenerating, setGlobalGenerating]); - - useEffect(() => { - if (model.error) setError(String(model.error)); - }, [model.error]); - - const handleCameraPress = async (isCamera: boolean) => { - const image = await getImage(isCamera); - const uri = image?.uri; - const width = image?.width; - const height = image?.height; - - if (uri && width && height) { - setImageUri(image.uri as string); - setImageDimensions({ width, height }); - setResults([]); - setInferenceTime(null); - } - }; - - const runForward = async () => { - if (imageUri) { - try { - const start = Date.now(); - const output = await model.forward(imageUri); - setInferenceTime(Date.now() - start); - setResults(output); - } catch (e) { - if (e instanceof RnExecutorchError) { - switch (e.code) { - case RnExecutorchErrorCode.FileReadFailed: - setError('Could not read the selected image.'); - break; - case RnExecutorchErrorCode.ModelGenerating: - setError('Model is busy — wait for the current run to finish.'); - break; - case RnExecutorchErrorCode.InvalidUserInput: - case RnExecutorchErrorCode.InvalidArgument: - setError(`Invalid input: ${e.message}`); - break; - default: - setError(e.message); - } - } else { - setError(e instanceof Error ? e.message : String(e)); - } - } - } - }; - - if (!model.isReady) { - return ( - - ); - } - - return ( - - setError(null)} /> - - - {imageUri && imageDimensions?.width && imageDimensions?.height ? ( - - setLayout({ - width: e.nativeEvent.layout.width, - height: e.nativeEvent.layout.height, - }) - } - > - - {results.length > 0 && - layout.width > 0 && - layout.height > 0 && - (() => { - // Account for resizeMode="contain" letterboxing: the image's - // displayed area is smaller than the container in one axis. - const imageRatio = imageDimensions.width / imageDimensions.height; - const layoutRatio = layout.width / layout.height; - let scaleX: number, scaleY: number; - if (imageRatio > layoutRatio) { - scaleX = layout.width / imageDimensions.width; - scaleY = layout.width / imageRatio / imageDimensions.height; - } else { - scaleY = layout.height / imageDimensions.height; - scaleX = (layout.height * imageRatio) / imageDimensions.width; - } - const offsetX = (layout.width - imageDimensions.width * scaleX) / 2; - const offsetY = (layout.height - imageDimensions.height * scaleY) / 2; - const isInBounds = (kp: { x: number; y: number }) => - kp.x >= 0 && - kp.y >= 0 && - kp.x <= imageDimensions.width && - kp.y <= imageDimensions.height; - return ( - - {results.map((personKeypoints, personIdx) => { - const color = PERSON_COLORS[personIdx % PERSON_COLORS.length]; - return ( - - {COCO_SKELETON_CONNECTIONS.map(([from, to], lineIdx) => { - const kp1 = personKeypoints[from]; - const kp2 = personKeypoints[to]; - if (!kp1 || !kp2) return null; - if (!isInBounds(kp1) || !isInBounds(kp2)) return null; - return ( - - ); - })} - {Object.entries(personKeypoints) - .filter(([, kp]) => isInBounds(kp)) - .map(([name, kp]) => ( - - ))} - - ); - })} - - ); - })()} - - ) : ( - - )} - - {!imageUri && ( - - Pose Estimation - - This model detects human body keypoints (17 COCO keypoints) and draws a skeleton - overlay. Pick an image from your gallery or take one with your camera to get started. - - - )} - - { - setSelectedModel(m); - setResults([]); - setInferenceTime(null); - }} - /> - 0 ? results.length : null} - /> - - - ); -} - -const styles = StyleSheet.create({ - imageContainer: { - flex: 6, - width: '100%', - padding: 16, - }, - image: { - flex: 2, - borderRadius: 8, - width: '100%', - }, - imageWrapper: { - flex: 1, - width: '100%', - height: '100%', - }, - fullSizeImage: { - width: '100%', - height: '100%', - }, - infoContainer: { - alignItems: 'center', - padding: 16, - gap: 8, - }, - infoTitle: { - fontSize: 18, - fontWeight: '600', - color: 'navy', - }, - infoText: { - fontSize: 14, - color: '#555', - textAlign: 'center', - lineHeight: 20, - }, -}); diff --git a/apps/legacy/computer-vision/app/segment_anything/index.tsx b/apps/legacy/computer-vision/app/segment_anything/index.tsx deleted file mode 100644 index f8cfc1b375..0000000000 --- a/apps/legacy/computer-vision/app/segment_anything/index.tsx +++ /dev/null @@ -1,586 +0,0 @@ -import React, { useContext, useEffect, useRef, useState } from 'react'; -import { - View, - StyleSheet, - Text, - TextInput, - TouchableOpacity, - TouchableWithoutFeedback, - GestureResponderEvent, - Keyboard, - KeyboardAvoidingView, - Platform, -} from 'react-native'; -import { - Canvas, - Rect, - Skia, - useImage, - type SkImage, - ColorType, - AlphaType, -} from '@shopify/react-native-skia'; -import { - models, - useInstanceSegmentation, - useImageEmbeddings, - useTextEmbeddings, - InstanceSegmentationModelSources, - SegmentedInstance, - FastSAMLabel, - selectByPoint, - selectByBox, - selectByText, - Bbox, -} from 'react-native-executorch/legacy'; -import { GeneratingContext } from '../../context'; -import { ModelPicker, ModelOption } from '../../components/ModelPicker'; -import { BottomBar } from '../../components/BottomBar'; -import { StatsBar } from '../../components/StatsBar'; -import Spinner from '../../components/Spinner'; -import ScreenWrapper from '../../ScreenWrapper'; -import ImageWithMasks, { - buildDisplayInstances, - DisplayInstance, -} from '../../components/ImageWithMasks'; -import { getImage } from '../../utils'; -import ColorPalette from '../../colors'; -const instanceSegmentation = models.instance_segmentation; - -type PromptMode = 'point' | 'box' | 'text'; - -const MODELS: ModelOption[] = [ - { label: 'FastSAM-S', value: instanceSegmentation.fastsam_s() }, - { label: 'FastSAM-X', value: instanceSegmentation.fastsam_x() }, -]; - -export default function SegmentAnythingScreen() { - const { setGlobalGenerating } = useContext(GeneratingContext); - - const [selectedModel, setSelectedModel] = useState( - instanceSegmentation.fastsam_s() - ); - const [mode, setMode] = useState('point'); - const [inferenceTime, setInferenceTime] = useState(null); - - const [imageUri, setImageUri] = useState(''); - const [imageSize, setImageSize] = useState({ width: 0, height: 0 }); - - const rawInstancesRef = useRef[]>([]); - const [selection, setSelection] = useState([]); - - const [draftBox, setDraftBox] = useState(null); - const boxStartRef = useRef<{ x: number; y: number } | null>(null); - const layoutRef = useRef({ width: 0, height: 0 }); - - const { isReady, isGenerating, downloadProgress, forward, error } = useInstanceSegmentation({ - model: selectedModel, - }); - - const clipImage = useImageEmbeddings({ - model: models.image_embedding.clip_vit_base_patch32_image(), - }); - const clipText = useTextEmbeddings({ - model: models.text_embedding.clip_vit_base_patch32_text(), - }); - const skiaSource = useImage(imageUri || null); - - const [textPrompt, setTextPrompt] = useState(''); - const [textBusy, setTextBusy] = useState(false); - const [embeddingProgress, setEmbeddingProgress] = useState<{ - done: number; - total: number; - } | null>(null); - const instanceEmbeddingsRef = useRef(null); - - useEffect(() => { - setGlobalGenerating(isGenerating); - }, [isGenerating, setGlobalGenerating]); - - function applyMatch(match: SegmentedInstance | null): void { - setSelection(match ? buildDisplayInstances([match]) : []); - } - - function touchToImageCoords(touchX: number, touchY: number) { - const { width: cw, height: ch } = layoutRef.current; - const { width: iw, height: ih } = imageSize; - if (iw === 0 || ih === 0) return null; - const scale = Math.min(cw / iw, ch / ih); - return { - x: (touchX - (cw - iw * scale) / 2) / scale, - y: (touchY - (ch - ih * scale) / 2) / scale, - }; - } - - function handleTap(e: GestureResponderEvent) { - if (mode !== 'point' || rawInstancesRef.current.length === 0) return; - const c = touchToImageCoords(e.nativeEvent.locationX, e.nativeEvent.locationY); - if (!c) return; - applyMatch(selectByPoint(rawInstancesRef.current, Math.round(c.x), Math.round(c.y))); - } - - function handleBoxStart(e: GestureResponderEvent) { - if (mode !== 'box') return; - const c = touchToImageCoords(e.nativeEvent.locationX, e.nativeEvent.locationY); - if (!c) return; - boxStartRef.current = c; - setDraftBox({ x1: c.x, y1: c.y, x2: c.x, y2: c.y }); - } - - function handleBoxMove(e: GestureResponderEvent) { - if (mode !== 'box' || !boxStartRef.current) return; - const c = touchToImageCoords(e.nativeEvent.locationX, e.nativeEvent.locationY); - if (!c) return; - const s = boxStartRef.current; - setDraftBox({ - x1: Math.min(s.x, c.x), - y1: Math.min(s.y, c.y), - x2: Math.max(s.x, c.x), - y2: Math.max(s.y, c.y), - }); - } - - function handleBoxEnd(e: GestureResponderEvent) { - if (mode !== 'box' || !boxStartRef.current) return; - const c = touchToImageCoords(e.nativeEvent.locationX, e.nativeEvent.locationY); - const s = boxStartRef.current; - boxStartRef.current = null; - setDraftBox(null); - if (!c || rawInstancesRef.current.length === 0) return; - applyMatch( - selectByBox(rawInstancesRef.current, { - x1: Math.min(s.x, c.x), - y1: Math.min(s.y, c.y), - x2: Math.max(s.x, c.x), - y2: Math.max(s.y, c.y), - }) - ); - } - - async function runTextPrompt() { - Keyboard.dismiss(); - const instances = rawInstancesRef.current; - if ( - !textPrompt.trim() || - instances.length === 0 || - !skiaSource || - !clipImage.isReady || - !clipText.isReady || - textBusy - ) { - return; - } - setTextBusy(true); - try { - if (!instanceEmbeddingsRef.current) { - setEmbeddingProgress({ done: 0, total: instances.length }); - const embeddings: Float32Array[] = []; - for (let i = 0; i < instances.length; i++) { - const inst = instances[i]!; - embeddings.push( - await cropAndEmbed( - skiaSource, - inst.bbox, - inst.mask, - inst.maskWidth, - inst.maskHeight, - clipImage.forward - ) - ); - setEmbeddingProgress({ done: i + 1, total: instances.length }); - } - instanceEmbeddingsRef.current = embeddings; - setEmbeddingProgress(null); - } - const textEmb = await clipText.forward(textPrompt); - const match = selectByText(instances, instanceEmbeddingsRef.current, textEmb); - applyMatch(match); - } catch (e) { - console.error(e); - } finally { - setTextBusy(false); - } - } - - const handleCameraPress = async (isCamera: boolean) => { - Keyboard.dismiss(); - const image = await getImage(isCamera); - if (!image?.uri) return; - setImageUri(image.uri); - setImageSize({ width: image.width ?? 0, height: image.height ?? 0 }); - rawInstancesRef.current = []; - instanceEmbeddingsRef.current = null; - setSelection([]); - setInferenceTime(null); - }; - - const runForward = async () => { - Keyboard.dismiss(); - if (!imageUri) return; - try { - const start = Date.now(); - const output = await forward(imageUri, { - confidenceThreshold: 0.4, - iouThreshold: 0.9, - maxInstances: 50, - returnMaskAtOriginalResolution: true, - }); - setInferenceTime(Date.now() - start); - rawInstancesRef.current = output; - instanceEmbeddingsRef.current = null; - setSelection([]); - } catch (e) { - console.error(e); - } - }; - - if (!isReady && error) { - return ( - - - Error Loading Model - {error.message} - - - ); - } - - if (!isReady) { - return ( - - ); - } - - const { width: cw, height: ch } = layoutRef.current; - const { width: iw, height: ih } = imageSize; - const drawScale = iw > 0 && ih > 0 ? Math.min(cw / iw, ch / ih) : 1; - const offsetX = (cw - iw * drawScale) / 2; - const offsetY = (ch - ih * drawScale) / 2; - - const stepHint = !imageUri - ? null - : inferenceTime === null - ? 'Tap Run to detect instances' - : rawInstancesRef.current.length === 0 - ? 'No instances detected — try another image' - : selection.length === 0 - ? 'Tap a point, draw a box, or describe an object' - : null; - - return ( - - - - - - { - layoutRef.current = { - width: e.nativeEvent.layout.width, - height: e.nativeEvent.layout.height, - }; - }} - onTouchStart={(e) => { - Keyboard.dismiss(); - if (mode === 'point') handleTap(e); - else if (mode === 'box') handleBoxStart(e); - }} - onTouchMove={handleBoxMove} - onTouchEnd={handleBoxEnd} - > - - {draftBox && iw > 0 && ( - - - - )} - - {!imageUri && ( - - Segment Anything - - Segment any object in an image. (1) Pick an image, (2) tap Run to detect - instances, (3) tap a point, draw a box, or describe an object to segment it. - - - )} - - - - {stepHint && {stepHint}} - - - {(['point', 'box', 'text'] as PromptMode[]).map((m) => { - const promptDisabled = rawInstancesRef.current.length === 0; - return ( - { - if (m !== 'text') Keyboard.dismiss(); - setMode(m); - }} - disabled={promptDisabled} - > - - {m[0]!.toUpperCase() + m.slice(1)} - - - ); - })} - - - {mode === 'text' && ( - - - {(() => { - const findInactive = - !textPrompt.trim() || - rawInstancesRef.current.length === 0 || - !clipImage.isReady || - !clipText.isReady; - return ( - - Find - - ); - })()} - - )} - {mode === 'text' && embeddingProgress && ( - - Embedding instances {embeddingProgress.done}/{embeddingProgress.total} (subsequent - text queries are instant) - - )} - - { - if (m.modelName === selectedModel.modelName) return; - setSelectedModel(m); - rawInstancesRef.current = []; - instanceEmbeddingsRef.current = null; - setSelection([]); - setInferenceTime(null); - }} - /> - - 0 ? rawInstancesRef.current.length : null - } - /> - - - - - - ); -} - -async function cropAndEmbed( - image: SkImage, - bbox: Bbox, - mask: Uint8Array, - maskWidth: number, - maskHeight: number, - forward: (input: string) => Promise -): Promise { - const imgW = image.width(); - const imgH = image.height(); - const surface = Skia.Surface.MakeOffscreen(imgW, imgH); - if (!surface) throw new Error('Failed to create offscreen Skia surface'); - const canvas = surface.getCanvas(); - canvas.clear(Skia.Color('white')); - - const x1 = Math.max(0, Math.round(bbox.x1)); - const y1 = Math.max(0, Math.round(bbox.y1)); - const x2 = Math.min(imgW, Math.round(bbox.x2)); - const y2 = Math.min(imgH, Math.round(bbox.y2)); - const w = x2 - x1; - const h = y2 - y1; - if (w > 0 && h > 0) { - canvas.drawImageRect( - image, - { x: x1, y: y1, width: w, height: h }, - { x: x1, y: y1, width: w, height: h }, - Skia.Paint() - ); - } - - const inversePixels = new Uint8Array(mask.length * 4); - for (let i = 0; i < mask.length; i++) { - const outside = mask[i]! === 0; - const idx = i * 4; - inversePixels[idx] = outside ? 255 : 0; - inversePixels[idx + 1] = outside ? 255 : 0; - inversePixels[idx + 2] = outside ? 255 : 0; - inversePixels[idx + 3] = outside ? 255 : 0; - } - const inverseData = Skia.Data.fromBytes(inversePixels); - const inverseMaskImg = Skia.Image.MakeImage( - { - width: maskWidth, - height: maskHeight, - colorType: ColorType.RGBA_8888, - alphaType: AlphaType.Premul, - }, - inverseData, - maskWidth * 4 - ); - if (inverseMaskImg) { - canvas.drawImageRect( - inverseMaskImg, - { x: 0, y: 0, width: maskWidth, height: maskHeight }, - { - x: bbox.x1, - y: bbox.y1, - width: bbox.x2 - bbox.x1, - height: bbox.y2 - bbox.y1, - }, - Skia.Paint() - ); - } - - const base64 = surface.makeImageSnapshot().encodeToBase64(); - inverseData.dispose(); - return forward(`data:image/png;base64,${base64}`); -} - -const styles = StyleSheet.create({ - flex: { flex: 1 }, - container: { flex: 6, width: '100%' }, - imageContainer: { flex: 1, width: '100%', padding: 16 }, - imageTouchArea: { flex: 1, position: 'relative' }, - infoContainer: { alignItems: 'center', padding: 16, gap: 8 }, - infoTitle: { fontSize: 18, fontWeight: '600', color: 'navy' }, - infoText: { - fontSize: 14, - color: '#555', - textAlign: 'center', - lineHeight: 20, - }, - modeRow: { - flexDirection: 'row', - justifyContent: 'center', - paddingVertical: 8, - gap: 8, - }, - modeBtn: { - paddingHorizontal: 18, - paddingVertical: 8, - borderRadius: 8, - borderWidth: 1, - borderColor: ColorPalette.primary, - backgroundColor: '#fff', - }, - modeBtnActive: { backgroundColor: ColorPalette.primary }, - modeBtnDisabled: { borderColor: '#cbd5e1', backgroundColor: '#f8fafc' }, - modeBtnText: { fontSize: 14, fontWeight: '600', color: ColorPalette.primary }, - modeBtnTextActive: { color: '#fff' }, - modeBtnTextDisabled: { color: '#cbd5e1' }, - textRow: { - flexDirection: 'row', - alignItems: 'center', - paddingHorizontal: 16, - paddingBottom: 8, - gap: 8, - }, - textInput: { - flex: 1, - backgroundColor: '#fff', - borderWidth: 1, - borderColor: ColorPalette.primary, - borderRadius: 12, - paddingHorizontal: 14, - paddingVertical: 12, - fontSize: 16, - color: '#0f172a', - }, - textBtn: { - backgroundColor: ColorPalette.primary, - borderRadius: 12, - paddingVertical: 14, - width: 80, - alignItems: 'center', - }, - textBtnDisabled: { backgroundColor: '#cbd5e1' }, - textBtnLabel: { color: '#fff', fontWeight: '700', fontSize: 16 }, - statusLine: { - paddingHorizontal: 16, - paddingBottom: 6, - fontSize: 12, - color: '#64748b', - }, - stepHint: { - paddingHorizontal: 16, - paddingTop: 6, - fontSize: 13, - fontWeight: '500', - color: ColorPalette.primary, - textAlign: 'center', - }, - errorContainer: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - padding: 32, - }, - errorTitle: { - fontSize: 20, - fontWeight: '700', - color: '#e74c3c', - marginBottom: 12, - }, - errorText: { fontSize: 14, color: '#555', textAlign: 'center' }, -}); diff --git a/apps/legacy/computer-vision/app/semantic_segmentation/index.tsx b/apps/legacy/computer-vision/app/semantic_segmentation/index.tsx deleted file mode 100644 index 019ea8b71b..0000000000 --- a/apps/legacy/computer-vision/app/semantic_segmentation/index.tsx +++ /dev/null @@ -1,260 +0,0 @@ -import Spinner from '../../components/Spinner'; -import { BottomBar } from '../../components/BottomBar'; -import { ModelPicker, ModelOption } from '../../components/ModelPicker'; -import { getImage } from '../../utils'; -import { - models, - useSemanticSegmentation, - SemanticSegmentationModelSources, -} from 'react-native-executorch/legacy'; -import { - Canvas, - Image as SkiaImage, - Skia, - AlphaType, - ColorType, - SkImage, -} from '@shopify/react-native-skia'; -import { View, StyleSheet, Image, Text } from 'react-native'; -import React, { useContext, useEffect, useState } from 'react'; -import { GeneratingContext } from '../../context'; -import ScreenWrapper from '../../ScreenWrapper'; -import { StatsBar } from '../../components/StatsBar'; -import ErrorBanner from '../../components/ErrorBanner'; -const semanticSegmentation = models.semantic_segmentation; - -const numberToColor: number[][] = [ - [255, 87, 51], // 0 Red - [51, 255, 87], // 1 Green - [51, 87, 255], // 2 Blue - [255, 51, 246], // 3 Magenta - [51, 255, 246], // 4 Cyan - [243, 255, 51], // 5 Yellow - [141, 51, 255], // 6 Purple - [255, 131, 51], // 7 Orange - [51, 255, 131], // 8 Spring Green - [131, 51, 255], // 9 Violet - [255, 255, 51], // 10 Bright Yellow - [51, 255, 255], // 11 Aqua - [255, 51, 143], // 12 Deep Pink - [127, 51, 255], // 13 Dark Orchid - [51, 255, 175], // 14 Medium Spring Green - [255, 175, 51], // 15 Sandy Brown - [179, 255, 51], // 16 Chartreuse - [255, 87, 51], // 17 Red (darker shade) - [255, 51, 162], // 18 Hot Pink - [51, 162, 255], // 19 Sky Blue - [162, 51, 255], // 20 Amethyst -]; - -const MODELS: ModelOption[] = [ - { - label: 'DeepLab MobileNet', - value: semanticSegmentation.deeplab_v3_mobilenet_v3_large(), - }, - { - label: 'DeepLab ResNet50', - value: semanticSegmentation.deeplab_v3_resnet50(), - }, - { - label: 'DeepLab ResNet101', - value: semanticSegmentation.deeplab_v3_resnet101(), - }, - { - label: 'LRASPP MobileNet', - value: semanticSegmentation.lraspp_mobilenet_v3_large(), - }, - { - label: 'FCN ResNet50', - value: semanticSegmentation.fcn_resnet50(), - }, - { - label: 'FCN ResNet101', - value: semanticSegmentation.fcn_resnet101(), - }, - { - label: 'Selfie Segmentation', - value: semanticSegmentation.selfie_segmentation(), - }, -]; - -export default function SemanticSegmentationScreen() { - const { setGlobalGenerating } = useContext(GeneratingContext); - const [selectedModel, setSelectedModel] = useState( - semanticSegmentation.deeplab_v3_mobilenet_v3_large() - ); - - const { - isReady, - isGenerating, - downloadProgress, - forward, - error: modelError, - } = useSemanticSegmentation({ model: selectedModel }); - - const [imageUri, setImageUri] = useState(''); - const [imageSize, setImageSize] = useState({ width: 0, height: 0 }); - const [segImage, setSegImage] = useState(null); - const [canvasSize, setCanvasSize] = useState({ width: 0, height: 0 }); - const [inferenceTime, setInferenceTime] = useState(null); - const [error, setError] = useState(null); - - useEffect(() => { - setGlobalGenerating(isGenerating); - }, [isGenerating, setGlobalGenerating]); - - useEffect(() => { - if (modelError) setError(String(modelError)); - }, [modelError]); - - const handleCameraPress = async (isCamera: boolean) => { - const image = await getImage(isCamera); - if (!image?.uri) return; - setImageUri(image.uri); - setImageSize({ width: image.width ?? 0, height: image.height ?? 0 }); - setSegImage(null); - setInferenceTime(null); - }; - - const runForward = async () => { - if (!imageUri || imageSize.width === 0 || imageSize.height === 0) return; - try { - const start = Date.now(); - const { width, height } = imageSize; - const output = await forward(imageUri, [], true); - const argmax = output.ARGMAX || []; - const pixels = new Uint8Array(width * height * 4); - - for (let row = 0; row < height; row++) { - for (let col = 0; col < width; col++) { - const idx = row * width + col; - const color = numberToColor[argmax[idx]] || [0, 0, 0]; - pixels[idx * 4] = color[0]; - pixels[idx * 4 + 1] = color[1]; - pixels[idx * 4 + 2] = color[2]; - pixels[idx * 4 + 3] = 255; - } - } - - const data = Skia.Data.fromBytes(pixels); - const img = Skia.Image.MakeImage( - { - width, - height, - alphaType: AlphaType.Opaque, - colorType: ColorType.RGBA_8888, - }, - data, - width * 4 - ); - setSegImage(img); - setInferenceTime(Date.now() - start); - } catch (e) { - setError(e instanceof Error ? e.message : String(e)); - } - }; - - if (!isReady && !modelError) { - return ( - - ); - } - - return ( - - setError(null)} /> - - - - {!imageUri && ( - - Semantic Segmentation - - This model assigns a class label to every pixel in an image, painting each region - with a distinct color. Pick an image from your gallery or take one with your camera - to get started. - - - )} - - {segImage && ( - - setCanvasSize({ - width: e.nativeEvent.layout.width, - height: e.nativeEvent.layout.height, - }) - } - > - - - - - )} - - { - setSelectedModel(m); - setSegImage(null); - }} - /> - - - - ); -} - -const styles = StyleSheet.create({ - imageCanvasContainer: { flex: 6, width: '100%', padding: 16 }, - imageContainer: { flex: 1, width: '100%' }, - image: { flex: 1, borderRadius: 8, width: '100%' }, - canvasContainer: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - gap: 4, - padding: 4, - }, - canvas: { width: '100%', height: '100%' }, - infoContainer: { - alignItems: 'center', - padding: 16, - gap: 8, - }, - infoTitle: { - fontSize: 18, - fontWeight: '600', - color: 'navy', - }, - infoText: { - fontSize: 14, - color: '#555', - textAlign: 'center', - lineHeight: 20, - }, -}); diff --git a/apps/legacy/computer-vision/app/style_transfer/index.tsx b/apps/legacy/computer-vision/app/style_transfer/index.tsx deleted file mode 100644 index 0cb6ab7979..0000000000 --- a/apps/legacy/computer-vision/app/style_transfer/index.tsx +++ /dev/null @@ -1,153 +0,0 @@ -import Spinner from '../../components/Spinner'; -import { BottomBar } from '../../components/BottomBar'; -import { ModelPicker, ModelOption } from '../../components/ModelPicker'; -import { getImage } from '../../utils'; -import { - models, - useStyleTransfer, - StyleTransferModelName, - ResourceSource, -} from 'react-native-executorch/legacy'; - -import { View, StyleSheet, Image, Text } from 'react-native'; - -import React, { useContext, useEffect, useState } from 'react'; -import { GeneratingContext } from '../../context'; -import ScreenWrapper from '../../ScreenWrapper'; -import { StatsBar } from '../../components/StatsBar'; -const styleTransfer = models.style_transfer; - -type StyleTransferModelSources = { - modelName: StyleTransferModelName; - modelSource: ResourceSource; -}; - -const MODELS: ModelOption[] = [ - { label: 'Candy', value: styleTransfer.candy() }, - { label: 'Mosaic', value: styleTransfer.mosaic() }, - { - label: 'Rain Princess', - value: styleTransfer.rain_princess(), - }, - { label: 'Udnie', value: styleTransfer.udnie() }, -]; -import ErrorBanner from '../../components/ErrorBanner'; - -export default function StyleTransferScreen() { - const [selectedModel, setSelectedModel] = useState( - styleTransfer.candy() - ); - - const model = useStyleTransfer({ model: selectedModel }); - const { setGlobalGenerating } = useContext(GeneratingContext); - useEffect(() => { - setGlobalGenerating(model.isGenerating); - }, [model.isGenerating, setGlobalGenerating]); - - useEffect(() => { - if (model.error) setError(String(model.error)); - }, [model.error]); - - const [imageUri, setImageUri] = useState(''); - const [styledUri, setStyledUri] = useState(''); - const [inferenceTime, setInferenceTime] = useState(null); - const [error, setError] = useState(null); - - const handleCameraPress = async (isCamera: boolean) => { - const image = await getImage(isCamera); - const uri = image?.uri; - if (typeof uri === 'string') { - setImageUri(uri); - setStyledUri(''); - setInferenceTime(null); - } - }; - - const runForward = async () => { - if (imageUri) { - try { - const start = Date.now(); - const uri = await model.forward(imageUri, 'url'); - setInferenceTime(Date.now() - start); - setStyledUri(uri); - } catch (e) { - setError(e instanceof Error ? e.message : String(e)); - } - } - }; - - if (!model.isReady && !model.error) { - return ( - - ); - } - - return ( - - setError(null)} /> - - - {!imageUri && ( - - Style Transfer - - This model applies artistic styles to your images, transforming them to look like - famous paintings. Pick an image from your gallery or take one with your camera to get - started. - - - )} - - { - setSelectedModel(m); - setStyledUri(''); - }} - /> - - - - ); -} - -const styles = StyleSheet.create({ - imageContainer: { flex: 6, width: '100%', padding: 16 }, - image: { flex: 1, borderRadius: 8, width: '100%' }, - infoContainer: { - alignItems: 'center', - padding: 16, - gap: 8, - }, - infoTitle: { - fontSize: 18, - fontWeight: '600', - color: 'navy', - }, - infoText: { - fontSize: 14, - color: '#555', - textAlign: 'center', - lineHeight: 20, - }, -}); diff --git a/apps/legacy/computer-vision/app/text_to_image/index.tsx b/apps/legacy/computer-vision/app/text_to_image/index.tsx deleted file mode 100644 index 1e40b62762..0000000000 --- a/apps/legacy/computer-vision/app/text_to_image/index.tsx +++ /dev/null @@ -1,317 +0,0 @@ -import { - View, - StyleSheet, - Text, - Image, - Keyboard, - TextInput, - TouchableOpacity, - TouchableWithoutFeedback, - KeyboardAvoidingView, - Platform, -} from 'react-native'; -import React, { useContext, useEffect, useState } from 'react'; -import { useSafeAreaInsets } from 'react-native-safe-area-context'; -import Spinner from '../../components/Spinner'; -import { models, useTextToImage, TextToImageProps } from 'react-native-executorch/legacy'; -import { ModelPicker, ModelOption } from '../../components/ModelPicker'; -import { GeneratingContext } from '../../context'; -import ColorPalette from '../../colors'; -import ProgressBar from '../../components/ProgressBar'; -import { Ionicons } from '@expo/vector-icons'; -import { StatsBar } from '../../components/StatsBar'; -import ErrorBanner from '../../components/ErrorBanner'; -const imageGeneration = models.image_generation; - -type TextToImageModelSources = TextToImageProps['model']; - -const MODELS: ModelOption[] = [ - { - label: 'BK-SDM 256', - value: imageGeneration.bk_sdm_tiny_vpred_256(), - }, - { - label: 'BK-SDM 512', - value: imageGeneration.bk_sdm_tiny_vpred_512(), - }, -]; - -export default function TextToImageScreen() { - const { bottom } = useSafeAreaInsets(); - const [inferenceStepIdx, setInferenceStepIdx] = useState(0); - const [image, setImage] = useState(null); - const [steps, setSteps] = useState(40); - - const [input, setInput] = useState(''); - const [selectedModel, setSelectedModel] = useState( - imageGeneration.bk_sdm_tiny_vpred_256() - ); - const [generationTime, setGenerationTime] = useState(null); - - const [keyboardVisible, setKeyboardVisible] = useState(false); - const [error, setError] = useState(null); - const [imageTitle, setImageTitle] = useState(null); - - const imageSize = 224; - const model = useTextToImage({ - model: selectedModel, - inferenceCallback: (x) => setInferenceStepIdx(x), - }); - - const { setGlobalGenerating } = useContext(GeneratingContext); - - useEffect(() => { - setGlobalGenerating(model.isGenerating); - }, [model.isGenerating, setGlobalGenerating]); - - useEffect(() => { - if (model.error) setError(String(model.error)); - }, [model.error]); - - useEffect(() => { - const showSub = Keyboard.addListener('keyboardDidShow', () => { - setKeyboardVisible(true); - }); - const hideSub = Keyboard.addListener('keyboardDidHide', () => { - setKeyboardVisible(false); - }); - return () => { - showSub.remove(); - hideSub.remove(); - }; - }, []); - - const runForward = async () => { - if (!input.trim()) return; - - setImageTitle(input); - - try { - const start = Date.now(); - const output = await model.generate(input, imageSize, steps); - - if (output.length) { - setImage(output); - setGenerationTime(Date.now() - start); - } - } catch (e) { - setError(e instanceof Error ? e.message : String(e)); - setImageTitle(null); - } finally { - setInferenceStepIdx(0); - } - }; - - if (!model.isReady && !model.error) { - return ( - - ); - } - - return ( - { - Keyboard.dismiss(); - }} - > - - {keyboardVisible && } - - setError(null)} /> - - - {imageTitle && {imageTitle}} - - - - {model.isGenerating ? ( - - Generating... - - - ) : image?.length ? ( - - ) : ( - - Text to Image - - This model generates images from text descriptions using a diffusion process. Type a - prompt below and tap the send button to generate an image. - - - )} - - - { - setSelectedModel(m); - setImage(null); - setGenerationTime(null); - }} - /> - - - Steps: {steps} - setSteps((s) => Math.max(5, s - 5))} - > - − - - setSteps((s) => Math.min(50, s + 5))} - > - + - - - - - - - - {model.isGenerating ? ( - - - - ) : ( - - - - )} - - - - ); -} - -const styles = StyleSheet.create({ - container: { - flex: 1, - width: '100%', - }, - overlay: { - ...StyleSheet.absoluteFill, - backgroundColor: 'rgba(0,0,0,0.1)', - zIndex: 1, - }, - titleContainer: { - paddingHorizontal: 16, - paddingTop: 8, - alignItems: 'center', - }, - titleText: { - fontSize: 18, - fontWeight: '600', - color: '#333', - textAlign: 'center', - }, - imageContainer: { - flex: 1, - alignItems: 'center', - justifyContent: 'center', - padding: 16, - zIndex: 0, - }, - image: { - width: 256, - height: 256, - }, - progressContainer: { - alignItems: 'center', - gap: 12, - }, - text: { - fontSize: 16, - color: ColorPalette.primary, - }, - stepsRow: { - flexDirection: 'row', - alignItems: 'center', - paddingHorizontal: 16, - paddingVertical: 6, - gap: 8, - }, - stepsLabel: { - flex: 1, - fontSize: 14, - color: ColorPalette.primary, - }, - stepButton: { - width: 36, - height: 36, - borderRadius: 8, - backgroundColor: ColorPalette.primary, - alignItems: 'center', - justifyContent: 'center', - }, - stepButtonText: { - color: '#fff', - fontSize: 20, - lineHeight: 22, - }, - inputRow: { - flexDirection: 'row', - alignItems: 'center', - margin: 12, - gap: 8, - }, - textInput: { - flex: 1, - borderWidth: 1, - borderColor: '#C1C6E5', - borderRadius: 8, - paddingHorizontal: 12, - paddingVertical: 10, - fontSize: 14, - color: ColorPalette.primary, - }, - sendButton: { - width: 44, - height: 44, - borderRadius: 8, - backgroundColor: ColorPalette.primary, - alignItems: 'center', - justifyContent: 'center', - }, - sendButtonDisabled: { - backgroundColor: '#888', - }, - infoContainer: { - alignItems: 'center', - padding: 16, - gap: 8, - }, - infoTitle: { - fontSize: 18, - fontWeight: '600', - color: 'navy', - }, - infoText: { - fontSize: 14, - color: '#555', - textAlign: 'center', - lineHeight: 20, - }, -}); diff --git a/apps/legacy/computer-vision/app/vision_camera/index.tsx b/apps/legacy/computer-vision/app/vision_camera/index.tsx deleted file mode 100644 index 860bf6a297..0000000000 --- a/apps/legacy/computer-vision/app/vision_camera/index.tsx +++ /dev/null @@ -1,533 +0,0 @@ -import React, { useCallback, useContext, useEffect, useState } from 'react'; -import { ScrollView, StatusBar, StyleSheet, Text, TouchableOpacity, View } from 'react-native'; -import { useSafeAreaInsets } from 'react-native-safe-area-context'; -import { useIsFocused } from 'expo-router'; -import { - Camera, - useCameraDevices, - useCameraPermission, - useFrameOutput, -} from 'react-native-vision-camera'; -import { createSynchronizable } from 'react-native-worklets'; -import Svg, { Path, Polygon } from 'react-native-svg'; -import { useRouter } from 'expo-router'; -import { Ionicons } from '@expo/vector-icons'; -import { GeneratingContext } from '../../context'; -import Spinner from '../../components/Spinner'; -import ColorPalette from '../../colors'; -import ClassificationTask from '../../components/vision_camera/tasks/ClassificationTask'; -import ObjectDetectionTask from '../../components/vision_camera/tasks/ObjectDetectionTask'; -import SegmentationTask from '../../components/vision_camera/tasks/SegmentationTask'; -import InstanceSegmentationTask from '../../components/vision_camera/tasks/InstanceSegmentationTask'; -import OCRTask from '../../components/vision_camera/tasks/OCRTask'; -import StyleTransferTask from '../../components/vision_camera/tasks/StyleTransferTask'; -import PoseEstimationTask from '../../components/vision_camera/tasks/PoseEstimationTask'; -// 1. Import ErrorBanner -import ErrorBanner from '../../components/ErrorBanner'; - -type TaskId = - | 'classification' - | 'objectDetection' - | 'segmentation' - | 'instanceSegmentation' - | 'poseEstimation' - | 'ocr' - | 'styleTransfer'; -type ModelId = - | 'classification' - | 'objectDetectionSsdlite' - | 'objectDetectionRfdetr' - | 'objectDetectionYolo26n' - | 'segmentationDeeplabResnet50' - | 'segmentationDeeplabResnet101' - | 'segmentationDeeplabMobilenet' - | 'segmentationLraspp' - | 'segmentationFcnResnet50' - | 'segmentationFcnResnet101' - | 'segmentationSelfie' - | 'instanceSegmentationYolo26n' - | 'instanceSegmentationRfdetr' - | 'instanceSegmentationFastsamS' - | 'instanceSegmentationFastsamX' - | 'poseEstimationYolo26n' - | 'ocr' - | 'styleTransferCandy' - | 'styleTransferMosaic'; - -type TaskVariant = { id: ModelId; label: string }; -type Task = { id: TaskId; label: string; variants: TaskVariant[] }; - -const TASKS: Task[] = [ - { - id: 'classification', - label: 'Classify', - variants: [{ id: 'classification', label: 'EfficientNet V2 S' }], - }, - { - id: 'segmentation', - label: 'Segment', - variants: [ - { id: 'segmentationDeeplabResnet50', label: 'DeepLab ResNet50' }, - { id: 'segmentationDeeplabResnet101', label: 'DeepLab ResNet101' }, - { id: 'segmentationDeeplabMobilenet', label: 'DeepLab MobileNet' }, - { id: 'segmentationLraspp', label: 'LRASPP MobileNet' }, - { id: 'segmentationFcnResnet50', label: 'FCN ResNet50' }, - { id: 'segmentationFcnResnet101', label: 'FCN ResNet101' }, - { id: 'segmentationSelfie', label: 'Selfie' }, - ], - }, - { - id: 'instanceSegmentation', - label: 'Inst Seg', - variants: [ - { id: 'instanceSegmentationYolo26n', label: 'YOLO26N Seg' }, - { id: 'instanceSegmentationRfdetr', label: 'RF-DETR Nano Seg' }, - { id: 'instanceSegmentationFastsamS', label: 'FastSAM-S' }, - { id: 'instanceSegmentationFastsamX', label: 'FastSAM-X' }, - ], - }, - { - id: 'poseEstimation', - label: 'Pose', - variants: [{ id: 'poseEstimationYolo26n', label: 'YOLO26N Pose' }], - }, - { - id: 'objectDetection', - label: 'Detect', - variants: [ - { id: 'objectDetectionSsdlite', label: 'SSDLite MobileNet' }, - { id: 'objectDetectionRfdetr', label: 'RF-DETR Nano' }, - { id: 'objectDetectionYolo26n', label: 'YOLO26N' }, - ], - }, - { - id: 'ocr', - label: 'OCR', - variants: [{ id: 'ocr', label: 'English' }], - }, - { - id: 'styleTransfer', - label: 'Style', - variants: [ - { id: 'styleTransferCandy', label: 'Candy' }, - { id: 'styleTransferMosaic', label: 'Mosaic' }, - ], - }, -]; - -export default function VisionCameraScreen() { - const insets = useSafeAreaInsets(); - const router = useRouter(); - const [frameKillSwitch] = useState(() => createSynchronizable(false)); - const [cameraPositionSync] = useState(() => createSynchronizable<'front' | 'back'>('back')); - const [activeTask, setActiveTask] = useState('classification'); - const [activeModel, setActiveModel] = useState('classification'); - const [canvasSize, setCanvasSize] = useState({ width: 1, height: 1 }); - const [cameraPosition, setCameraPosition] = useState<'front' | 'back'>('back'); - const [fps, setFps] = useState(0); - const [frameMs, setFrameMs] = useState(0); - const [isReady, setIsReady] = useState(false); - const [downloadProgress, setDownloadProgress] = useState(0); - const [frameOutput, setFrameOutput] = useState | null>(null); - - const [error, setError] = useState(null); - - const { setGlobalGenerating } = useContext(GeneratingContext); - - const isFocused = useIsFocused(); - const cameraPermission = useCameraPermission(); - const devices = useCameraDevices(); - const device = devices.find((d) => d.position === cameraPosition) ?? devices[0]; - useEffect(() => { - frameKillSwitch.setBlocking(true); - setError(null); - const id = setTimeout(() => { - frameKillSwitch.setBlocking(false); - }, 300); - return () => clearTimeout(id); - }, [activeModel, frameKillSwitch]); - - useEffect(() => { - cameraPositionSync.setBlocking(cameraPosition); - }, [cameraPosition, cameraPositionSync]); - - const handleFpsChange = useCallback((newFps: number, newMs: number) => { - setFps(newFps); - setFrameMs(newMs); - }, []); - - const handleGeneratingChange = useCallback( - (generating: boolean) => { - setGlobalGenerating(generating); - }, - [setGlobalGenerating] - ); - - const handleErrorChange = useCallback((errorMessage: string | null) => { - setError(errorMessage); - }, []); - - if (!cameraPermission.hasPermission) { - return ( - - Camera access needed - cameraPermission.requestPermission()} - style={styles.button} - > - Grant Permission - - - ); - } - - if (device == null) { - return ( - - No camera device found - - ); - } - - const activeTaskInfo = TASKS.find((t) => t.id === activeTask)!; - const activeVariantLabel = - activeTaskInfo.variants.find((v) => v.id === activeModel)?.label ?? - activeTaskInfo.variants[0]!.label; - - const taskProps = { - activeModel, - canvasSize, - cameraPositionSync, - frameKillSwitch, - onFrameOutputChange: setFrameOutput, - onReadyChange: setIsReady, - onProgressChange: setDownloadProgress, - onGeneratingChange: handleGeneratingChange, - onFpsChange: handleFpsChange, - onErrorChange: handleErrorChange, - }; - - return ( - - - - - setError(null)} /> - - - { - console.warn('[Camera] onError', e); - setError(e.message); - }} - onStarted={() => console.log('[Camera] session started')} - onPreviewStarted={() => console.log('[Camera] preview got first frame')} - /> - - - setCanvasSize({ - width: e.nativeEvent.layout.width, - height: e.nativeEvent.layout.height, - }) - } - /> - - {activeTask === 'classification' && } - {activeTask === 'objectDetection' && ( - - )} - {activeTask === 'segmentation' && ( - - )} - {activeTask === 'instanceSegmentation' && ( - - )} - {activeTask === 'poseEstimation' && ( - - )} - {activeTask === 'ocr' && } - {activeTask === 'styleTransfer' && ( - - )} - - {!isReady && !error && ( - - - - )} - - - router.navigate('/')} - > - - - - - {activeVariantLabel} - - {fps} FPS – {frameMs.toFixed(0)} ms - - - - - {TASKS.map((t) => ( - { - setActiveTask(t.id); - setActiveModel(t.variants[0]!.id); - }} - > - - {t.label} - - - ))} - - - - {activeTaskInfo.variants.map((v) => ( - setActiveModel(v.id)} - > - - {v.label} - - - ))} - - - - - setCameraPosition((p) => (p === 'back' ? 'front' : 'back'))} - > - - - - - - - - - ); -} - -const styles = StyleSheet.create({ - container: { flex: 1, backgroundColor: 'black' }, - errorOverlay: { - position: 'absolute', - top: 0, - left: 0, - right: 0, - zIndex: 100, - }, - centered: { - flex: 1, - backgroundColor: 'black', - justifyContent: 'center', - alignItems: 'center', - gap: 16, - }, - message: { color: 'white', fontSize: 18 }, - button: { - paddingHorizontal: 24, - paddingVertical: 12, - backgroundColor: ColorPalette.primary, - borderRadius: 24, - }, - buttonText: { color: 'white', fontSize: 15, fontWeight: '600' }, - loadingOverlay: { - ...StyleSheet.absoluteFill, - backgroundColor: 'rgba(0,0,0,0.6)', - justifyContent: 'center', - alignItems: 'center', - zIndex: 10, - }, - topOverlay: { - position: 'absolute', - top: 0, - left: 0, - right: 0, - alignItems: 'center', - gap: 8, - zIndex: 5, - }, - titleRow: { - alignItems: 'center', - paddingHorizontal: 16, - }, - modelTitle: { - color: 'white', - fontSize: 22, - fontWeight: '700', - textShadowColor: 'rgba(0,0,0,0.7)', - textShadowOffset: { width: 0, height: 1 }, - textShadowRadius: 4, - }, - fpsText: { - color: 'rgba(255,255,255,0.85)', - fontSize: 14, - fontWeight: '500', - marginTop: 2, - textShadowColor: 'rgba(0,0,0,0.7)', - textShadowOffset: { width: 0, height: 1 }, - textShadowRadius: 4, - }, - tabsContent: { - paddingHorizontal: 12, - gap: 6, - }, - tab: { - paddingHorizontal: 18, - paddingVertical: 7, - borderRadius: 20, - backgroundColor: 'rgba(0,0,0,0.45)', - borderWidth: 1, - borderColor: 'rgba(255,255,255,0.25)', - }, - tabActive: { - backgroundColor: 'rgba(255,255,255,0.2)', - borderColor: 'white', - }, - tabText: { - color: 'rgba(255,255,255,0.7)', - fontSize: 14, - fontWeight: '600', - }, - tabTextActive: { color: 'white' }, - chipsContent: { - paddingHorizontal: 12, - gap: 6, - }, - variantChip: { - paddingHorizontal: 14, - paddingVertical: 5, - borderRadius: 16, - backgroundColor: 'rgba(0,0,0,0.35)', - borderWidth: 1, - borderColor: 'rgba(255,255,255,0.15)', - }, - variantChipActive: { - backgroundColor: ColorPalette.primary, - borderColor: ColorPalette.primary, - }, - variantChipText: { - color: 'rgba(255,255,255,0.6)', - fontSize: 12, - fontWeight: '500', - }, - variantChipTextActive: { color: 'white' }, - bottomOverlay: { - position: 'absolute', - bottom: 0, - left: 0, - right: 0, - alignItems: 'center', - zIndex: 5, - }, - flipButton: { - width: 56, - height: 56, - borderRadius: 28, - backgroundColor: 'rgba(255,255,255,0.2)', - justifyContent: 'center', - alignItems: 'center', - borderWidth: 1.5, - borderColor: 'rgba(255,255,255,0.4)', - }, - backButton: { - position: 'absolute', - left: 12, - width: 40, - height: 40, - borderRadius: 20, - backgroundColor: 'rgba(0,0,0,0.45)', - justifyContent: 'center', - alignItems: 'center', - borderWidth: 1, - borderColor: 'rgba(255,255,255,0.25)', - zIndex: 10, - }, -}); diff --git a/apps/legacy/computer-vision/assets/fonts/Aeonik-Medium.otf b/apps/legacy/computer-vision/assets/fonts/Aeonik-Medium.otf deleted file mode 100644 index cd9981f4395768ed55c99c15b78cc5496142c792..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122080 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%0Ay4Qc^?@`Wq8)%=22jZbG(k&JR6-zvoudr7B!Hqo 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

Hpijw%Go_B>1~L<0`$dq7+;&@pwlD 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

S)mvgv|6_r0bw+d*PBXD5 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 rlN_cpD$JN>nG4Aox3Z}?I6y>BxO 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

yi&oEv?Z+ zO7}C;=Ux@*6`_8#gYx=))L<_{Kjy-9n~4!FhefKzI?ZEaFy25NLDi|tN6dE%z)VVTCYu7x za1O*cwPoEHX{tW$69fb@iGik}SH4Dn3cr|Ip^D{3p;U8=j2AR5Cb5IhM4Q))b1U<5 z0R13gJ8S=P7BVI!L9k6q-L--dkqV>o_G8BsZ#8#%7mee)KvZ4q9V+I<{xakY^BT0H zP%CYN2l5&^p*!8$G0lMprLyv8olZjGs1dm~i@=8D9#Ds4J7a7?Gfqe<6JTSUD?5SC zR78iz*i~f{GdyzhrcRVR@D7W3pD1$Z#DFR-HnHaF0b#QseIt`CF0{+r- z19_tslFBh^()kcwsbb{s=vc&s_U*yTAL7Bh@;-&CJ*vGHGeqQM`lqC_UrzG+lakYf zM1n~{L1te7**gbO=CK7IOC&}VX^zl3<3L}{z8>q@Kc43!1>70*eko@sZgw|pNj#Gt z8BjA>av(a9GzqCD4wd(&vCEl-AUhWxXZKpq{{Fwf`xbib|0ndeEN%|{JM>n)d8!02 z75scvebhB>-$PA5`q>_tXZLBd8iofEtv$>l#qej?);r(df)_%4E-sT8Rie4Yh>!iT zFq58eFudez==bQB9x68To|rHsMe6~@MrH!Du@5j3 zH^yZkSTV$`{1a#2a}t(Bl+*!V|1h5E&);EsF|(@Inlz1J=Og>6qT~o7bi($Fk7y7v z_Atn2xV^{vedhOm$}~+2u~20kbRE~b;5sb(W0Ij@`NjI0iwlmbXGpf;RdulL-$5Jo zK9e1j94?oc7hVILcl2Ma6^xo_@6PA&Sn7iF#YSIE-4P7^gq~ zGCJ@KGJdJ5>*2nCQ@EU~y9Y)5*u1L&Z{lo%@&(efhHQ6;` zgC61U=1+m&BdDmuJo9V-mqaAe9r+0P8Db;e(-l_?BHkQ1Y!+~IXf$o3WU zShk*?__DMxCT5#?!AQ?G{a?iNgd{NLnl>cENy-ML*nW0nx~^ocH<-hu2QGjaSEOU^ybvM3(24&&+ zOV5KDufR^ok9EE$p0(?u=344Fh65lFXdjxm{Ztq;kG(d+cWgS@QsE+-_mE&9SSGg! zUFUe3==lIbscCo?TZfI@U+|pdI0B|TLID-0x`ZHI)5#&O1$;6%E_g>kcs9urA2QG5 z(90H`AYw^uaq9|r9P0zuX&mO{0*$N^af;`(;u=_ReR3*qRA`#K$>{RNv};Lm(|+@! zEIek;Vm}LYSb@~QC+e6x^JKORU>x|0mrxgbGX1aX`Olj|6{(HT=WX8huhTnEHY>f# zVIADV^`lm4pPDbc9L1~-P_ysIQniv~{bG|}7pYBR?v|)}%(ozIt^F5z_Do@b| zv;Vp|52TxJOdQx^suIW=Orou(L12DvQVp%^&GLGXusd?DJ26FTlAeBq0?bpu&2I5KGG<#C@6@_EJ5X1Qx)mGi7R#yE+a#T4~&%@ zI%qP68uPx74_c@bCY&#%1uX;+()D}}2?h8x_)f@i{GvRfXWp^#M;%`YlmCq5T8+_( zCwWqKMjcd{aMkVBV$t=zYEu7J7Mk-Z?nhIta-$&&!x8uo8RLoNP3m?0O)3>>c>SA@VL_6C% zBL3u4Avo1AN6$vy&(EH_zmxcIpd^*9nhcJ!=C>Lnqg_3qe7P|^iGbH)Ue8afnT~`KZ}vgTwck>i7#SzT=c9(KrSWf zdRM<1qRsJ-h%l=h%~dnRnEHct0!A3rcNgbdLGYD-Uf=O6H`-8xFfa!vb`W1a7|Luo zH6tX)X~HJAQB8EhJ&pULTz3_E?)^3JP~wftq_Hy_)@;WZT>g$;eo=M65OnxKOK7Ya(FxYzzoehKVYu67w)1b)L4+O;tX=uf=81h5M;rLv zeZ?UnmnkC`%h%&R*pM{ky55^|@#jOssQ(c8zJ=LXvbKV^{%}s9=H~wvzHiE3Kdmg+ zwTXf8PIfK-6_T2a?)H&1o8hqmx;Ax#okJ&o9NSJ-YEr>zo9Pk}UkLJAa3^f5)>u5!=?nCZ)u->$hD}|kfe>49EN?~(UEY32InAI2qy84 zy2qZ6n9OXnC1-f~r27a{7(8VSEO4xBm64ZEHda@o>cptEUl>%~js+o42QqGe*0jqGvx%IjCVmb@Jjy{)pUe~DDKo109ty7)@YmfVxQWzYT87z6DZ|cmw z{qiMoWS@zns*ZPd>zgnsO7!sDS;apCo^i8&pB)8r7UVxaytxMUUioT%%0o!<{=2)K z+fl}BOO#_3IAF6_@Q{q1WiH9Gm+2ggO=``q@qi{cE@IKw{Wv+fLSi<=wM?sx!Y<>o1GT@Q z3lCe*d<0(V*$jh5TVv1NF{;Q-@FOSCn@suhgFL;_av9!1R8vqvHWIj}f6l$r?mXn8 zf#3y5&#(q{=6rO;xCp!ye)IBOcvV$oHoBuvYzOY@ac|FKujq#XDN!%C$55T&@sM-v z0!Mkk*bzUZo7n?5#l;b9;)k$Ao7;K@1>99JVrGgCX%xDw(WlIfb%2hIR^CguRImoT zL}*13Alxjt=BK}(DK=fJFrA&Jl-PV$#^nZ6_$|0niK~vliXwP^H(UJUh_S+NtN{Sy zL~Yn{e3()lG%oOr|;kDOw*Tm;fwb`H?gDI^p(TVxIW zorf#dHxj*qdHfDrDHL?#3_~|ivTfMVrq8jF=ay{lFmrA7r_Jf*>Jjudz4{L=6NM+z z9q{x&z^#Ec!sl7yR}W2k>*d$k`icfb`>uS1ZQZ=_n@e>a_6xDr#|CSzK)d4Oe1Gqp z9F;+)zMeUHHS?lI*8??YykJscY^>%a28w_Y+Jg1Wo9~{I+m2*AhHZuIpmW}j$vK>t zyo7rt#xN1;O`Vat2DKY@qYfdRz^g@ zQ}WAh_dDbxxJ}S}v<0QKuJG#o;RQ1GHgt_IkaKGaa4kJsF4I9tJ5g-m zN~?gmqMngRpDXi|TFC$FL0IG$XXuX7l&R$(oj&I~;C8S@HQiuh*mY^zibDlMzfYp_ z8@M6Bz58X+>hC9A56x;p#@#`pG0{a*8OPa?U>>4{A!Xa}^38=;;G?3kZ`Z?0;GNgg zHpiQ{_FBXb!E$luPcu_u3~*}6-ZP0CM3B9uW0%z_x+;6CL;J|x^C3GKAnr~f{A#{= zH2WRnBEPFMo_N!t6m1rs?blM*_t%id4c(ZeaP$bz2J;K1vvb?H+VUPKr8@X9_<9yK zfpz%Ps>JCXcxNK;s%|~vhr{nYu>s6U1{>KdanH$>!3F`KU>V)MM4c|8J-RcXOzX#= ziy3bdRHwsXD`7c%==gGhUyU;6V;9#LOoBz3v;VwOQ~*_mCmqrLpC+C&0(?#J{(!*W zB3s3o*9>PTP<#4ChdKtr?NqMTSmr9BVgC35Pl2JWPrK=04Yys<5 z4OPxi6Hi8N(JX@$@D-(62?=fj%}?pqaVr4W_D0i=r}4Jj^gx3CwI0fgeOJ$V*oZ|n%HNGhtF~wj+jS$cul5&sdOGfeRyi5! ztld<)5srj2zDFN>j{}ZL!DP`qB;9#&`q@g(?F^OFCuBf9>1~ypG*Gs9z%3=VE^Tqx zwGf78w2cci9D5bsi$?xBM(Qf^o2b~I1p{ZxIOjjI4hwGvB&W#z0sxm%mCfr4AV8o! zMC7KKRJXUuXVjzm+kN-4HLP%f04vaimE~1$5uDN6v3BeSwu4h3ar?QNUYSSe*V86I zL6x35pRi|ClD(oaLOzROBHMx43qlwtaNGLINmd!ymb;Jh&eKATa+`~o)Xq$zK6ox% ze<8x@AR3QfkF^?XVVC!T3k@o5&TIaXT!HQI4ViM%8iMoN*$$svZR*|EoMquA(lTTv z`TMSDg?Me$tmHgd2tL@~;lQG-4HcqjAg3w!EFK^$-Th<`0@e;5(@^f=H)LQyJ} zKwhzfzeSlV#$4g|W`$^0G&dCI>_ajU6?F;-HszA|aH%htDfsIz{k)&h+YX4H^tH`s zAUWrzOt-}1f&}Gp9j?VpziUJ~eqky9zELM}Pf(8>us#(fs`jV4N`)`M0AgvNomMb{?j-b$(^Qtj zYo?3**Y|awv-qne*@RufrC}W+$_q<}P#1=UR>?WSoJWYmK^YXSQtm@4^m)58qEK+F z1%7CnI#p3ti6mD32VY7!{L8ifqKDIi+kmZ7`U}qs6-@jK)Oa6JGeM z#ZH}t#L(4P<3krJiR;w8;1}g%r%vN}Ie=A+MZBuHEM=;_xEmhLujFje3muiVbA63G zAu}#FE1Y)5<4TzU$lYBzfZo!_vbO1W=HU@2Zx30A>r0d*Jbm&&)ShevOU5@iM3y?g zK&p~d{r^XOy4Uym$GcI#jw1B*?|T|#hv6=9cVJZZHa@JZSI&-0?+m^hJ1f+7yGf-L zp&nP7JRZDCMdKrE7Q5u1YR1(zQsbnU^`7!gm+1Q0pyedlXB3W?hDIVmH+ z=X^>aZ17|bDSOiq7y4PF`s8u;pN6ywESOR zbc`keRzhr`pZCGm_<*1Q1&cs44KwvFU&CL?aizHVcpibGKe-&&996J7@`eh2@W+}p zP^-w$E0%_N_$Rdme=ba*$x@^YcIp;pQA8{Tzskc}g7!_{dzlK{rFUNQ;bj?cGF!`1 zt|C-hlB3s7#%Aq!;NHI4lGiJ#mQW2Z^L}PE8s!7!x>U3`Y1&W~&av1WF%5mwCN8;J z|By3DcNzpbN0kJn*KWc%!$cXjxK}`IGtTVWj^lj&*hk)J6s#E4#cPU%U?R-*f z{qFnmq(_x{{2TE-g@;XSjJl=9c;L%{5rZ^<{=q`6Wc~2vpwvw?*z_Utq}zW`#S0*I zN^|(nX-fhg`$7= zw^vbRPegKhafI#<9Gi(%MeZR{m)5}=@f-5hc>Bpu;q)@~aGb}-C1BA7Jv4U`IV52* zJwl`EFMrX?Z%XIKOckZp#v4QHB0%{K)Xh!d>=46zVeYA#=w5oLKX$HF;g{7@-t;o5 zP*)(_FM;~93em?fp@4^u#0rrrR-ff-ClIS&M{39mfS}CN-bCQ)z9Hcz1^8f1`zQ3! z#|4OEH6~puX&TuLt!drybD*z$woQyCfJo~3q+@ajyrC~qm3aqN|CR#*oSm>5t;|l{p#Om3cM(6Xt2t7Zqe+ub1VQwSBM|s@F$O-kuAcq}Y%QUQ;~LqPbzfex zcudx)QsJD|qZ^GgB#A$=iH-77&wAL)qz1RU^Klx3~Pb*w}uU zY0Rvtf01yvFgc;Eu4#e=nfg+xlY_z%K2Y%|LDg|K)pDapRKD?N#3Zy^wcXb%{9h~c zN{G}2-l^sK{~F?-x{rH;?ibeYJ=Sh-ot{a1XQSb~WUKm|WL0{8n)XUD&ZHjKb2p3B z^5cdJgO*<_zM)*aTUhMUXez=QQBjH+N{hrHdYxw=L1P$WN-`F-u4gWBZx}Y9`o1myQ>^oWrRu1HaRJA(Ctb*{7ZyUd)bi_-_Ot`AbjyOvhx9Xsp!A=l=bGYF-PN*5ZJbTf(5yao@|}3i=bu zkv&(-_KpgRo%3p_m37!RVN?B+pU9c$dh)*Jf)|6T5@-D+)iz6`ra_Z{i>22}fP^O( zj)?-Jz3!`uyvPQr+lv#ZDf?m*^j2)PbVggiB0rSm!t==_0Q@* zwJ*TzT&i9sqoqW;L!)XyY09KAa?5*E77*_#(HMPlgyp!hnS#=9 z+ciihtaPF_6+`~o?+(>V1gw8YfAw|wWD@#=X5vr&TN<_SY5iX=ypX_5&f#Tk6!EGM z0$7afQ1c<*?`10$+MUj$7ZxDysUd0bA)cX3&u2lP+m(i!gE)$kIq@bnqA1OQx3Metub}k9=YmEp?2J zAo$UMp~;!IYO0dkq!2)Gou3!BagV_UA^j5DFFBjPfxbf?9cN+fCATa-hXNFKIX&wk z#gm~i`+CW%qP4ICbR)w4dB^V4O_mC(1tj6`4lFReHQPzQ*!z9*Z%WQTUvD8%7b#7I z({ZHX;D7tE8ir)0^0Y_6Pi!sI8oN~NIi@mPZ%(TWxC1TSH5%@d#S06lIn+GDl{4So zDVQ>+g~z!BFA@Ac62HO5Qsq1>gNoERAHWuzTh@fhw8okul1Z(NiNjl_(PXn0E@RIn z8;x)6fa_vHfb-&;>^nLeSDVV$lnS`N;Tfn$eG{j}@eZ*}`OO{xkqi2Fn*H2c#ox3-s5G|Ue6 z$E$WFpj*Av?jMPIidYKC;`l?yFOW`Rq^u*C=omi}_nj_QdeeoDlUhRp2Wa30?A>Ot zwD^|6$TMmVdLZky?U6>pv95bd&G5<85<-1&QYE+bg& zJD63Q6`2M;J&wX4tK0LFLtUz%tFsMh&VE(?Q{n^6=@RrhSIp@JWAUBq6Va!nGXyT$KiE8y5X0eZS{XkjLl!#a5~&^tV>pm@Lr$8%MnRUH0>8&KT!e|5xdW{ioO#G z*WCbCg$g`P8jxh22Q>&^?Eb+f!FWPKO@kF3T&d1`-()wRnc(tk_s!6&Wt@2;b6Q|* z^q^B9%SHA3p_2~jzZX*8Y|Q0d_k@clvFtY98ImlRJL1n4S?E(r`N|m;H*VjOqgICA;rcEpRa8RKrimU@US}okRr>@<`pxeU%_6bV z`5=wyeCY5l*kRsYmv`|l9M_iN)t?Ba$Yp1*IDpZ>T9 zCs{++k1P3)d6;cKcM1a@CL~6FH1&s1bVMl5uYq_8CCNq=6<&<(+TRm_YRVo_ncevi zqwSyF)ky0YmJVmD?~8fR^_ZPAc_%L9^O!P%T1xh8zM-<^t-Nky*j|KXe?EzI!rV!a zrsj(G@P9tJZ7=98n;pg-iDx=T_w$9A_pcL0Q+1Y4(xxr)9}!~$7m9_?@X9{Ro1`Y6|7=uqMi zSQv|{k}>S_pN;j7(-9th*MV%Fr#omr4*}&AA>_bn zzixp72GfW{AwomZhKG_<)omcQ8w$TnV|DF0sKmLEU{_waV?8j1o%o4u4fzq!z}p>_5B>GArG5}^1C<)%|E^Ja=V@*=;@pL%PB zn={nX>o~9;re|yR>$n~)-+tX%2p}AHafuK$NMp(_la^GC$iErB?_BndCh-3LA(d{< z>Nq9Ezghjf)XHI^dUPDmk#{xXq7sTr6KFm0k_|LXa6VoOT}kQx5C~ls7|EzMH#-cZ zz%aj8kxqPfe`<@tQYPUke=hpt4KMk^q?};+GO0sc9QIrA&ECljSE~N!OmACViNTxp z7imawOk#DG^^L+Az7E=qABX0E>Q~ENZed?96eb0QotLs)>S%~3z!oMCI%KGe=1d zT6XN8jXlnYce?dhtMVE}`3Pro^zR}}yL#HNq~|I~7Q>{c)`g1QxqdiZdgK0DpVIFQJT=H;rnoLR(B+3JW* zQ!tLB}F7}R&O8X=Wf zvuCfPgcr(0j%3LvQtw)mO0<5FA51{HJF}0!8}V)8nZr4EZgG%F*5q}FosWmL zvAIYFh-v+MhinuChvqp0d!sl+`8AeEZTY^9;&%4-&jk}51<>QH-Z3mC^)j-3K*ye{ z3n~x8AfWJGyrLjXpl-}TjSJ9*E_6M5-`ATydz$sDp|jOO^P!eH8{fvcY!)!bj{6Vq zBfn+YR=%duK2oVi;!R5w7e;ZZ9%Z+8j>w4jF<<3iWP2Kr7|b%DDid)X@jAB{F|i0h z{jx~z$ic^T(!gvqK>4?gHFL_?*dClkZLXCz41wmAh4$Dj_MOz+V4HWg4DUvvx6D8_YgR_3wE_ns zfyjspP$hnmueG)pu;`UAoBh0|R*{@|Xo`RPz^(D#MES7s=ko4@#kXQKFe$Vr<7_0D zKsc?b#>9`*4fiWLD0`gpW`=uf=Gw|H4@( zbp2-3+o$X4`8*kVHPWJ&%IvlXfff#;ggkLo9&{q9R1B^zb5MI%7}OWV_r{V+TE;6I zSwP->=$Rrh&kyeB3sHf`i8(T11NBftD{~horA~YCbO!RQJ+C*I7Zo38363XDrsLJK*oB%|s^_+M$+CScMJAVaS39#_ zpQ;fC8X9XKzu~?bP$;2H@DqQmMtn7B-uYiy8|&r&(4J0a|F#VNYr^u!5Ig-^m9xi~ z!ER^TfG5ROr3Yx`aIP{5s5dt}V%d+QojY5OiydJ!C$yjqp?c&KGUqztHB)s|G;$a7 z-!+!v*>u2QIM#4hv+ETW#-!M(;~UaYQ5^`m(A8j{6#mwb2nlOnFHx)s@OD!+bBK3$ z6bsCT5?UcCn^c$khKyVB%UH0FYI%>6CLVJjQ_2k4xo%&e+q+ScVy+YgO~8Cvx$T|) z0?>=5ayjM7q^}o2s&-yw)ESGU57c5u%$a6W%q_YY+^pr26F;o`cr0$_`4ZB5X=|$5 zkN&njlP!XztAL}0S(hQXGM;rKze5f$*Jm+bSFh_W(CFwR?W6+@g>ZZv4?JfzC4?Y~`)aOxIJ$fhu~?@w?FI@@GZNW@rR zqX7y&9{OV5w1J^nb6!Ys_$IVcWswb_c+cl+6KFPGMPx%F*iRJQhwjw;rC8hJ4*iX0 z+k|z(0d)~)e@@zle?r_Ct@l~g_g=6_E2;}F>ZtkYcCB^G7Fybr_Rlt3bNyih9QhQ- zgyt)Y`4nDn4L>#GLm9Q{MYe^Ifp$j#|aQJrY(<9*~hJg`X zBISw_Ky)k3A}TTKP1EL%C6SNA3@K(zA(OC5(CXE!?cWT8mf&G^3O@G$n^d zZgg9fziJ0EE$gIcP|WEL^-lc7(=TKfvd0~=t1lSg4*E*)_Cybj`Z}K8oLX!!Y4TH572xA4(WVJhThoM}-jG4+ z+T1BPVhJ%wQr5m+-J{#P(U%wX>7>yd-5!IgQ-^zZc#u2sPl2?Uizcq9MJ$E$tW0kn zBJFBNc|@@;k@yJy$!dBm^IKm;z%7qz@(U5zK9$HkxgI>xAH$4>#6?&k6qU~z6X1@A zVb1^<`yvtB{K7lHm-H|vssh#uL^9}bAbHjG7?}vJ_CGj-mvuJ;4Z5agHUsBKE-ET*p=`USG zH1L&Y`U}@`H+|L3r2)Q-a7}>L*Zffay{COqK}2AU#U&`q?eWM=;5ch@`u1xDL=uqD zZz7-Vuj3~VK};!Hq=oBsp5)|z`OscC}(Azz(EWSlP`RG#BDKa?u@8<>^KIt#*;$cPjq$6`k0353K`^!mUcH1HR68P^Y zfQ_5(6Vkob`KN$5eYF;cy z%U*s)$Ik2Rw18{dW5zsMJ+NwJ^^tX>t@FpjcL?J*y?m6|N|?AzLmvFNpbI2yJjL4a zj5ovn({=+^r_>8tZjYALL`VhBf6Knk#I$$*mk#WG^PfueLu~7~|67T##7^lR_M8J{ zGE1Rb>_-9Z<78ch*B*}C5tE+)XNKJj4pzg~LbSL`W}M+?S+|G`8+E+z2}Gyyk7Pjs zi%N6mIyg|Ds;+w$+y_5N7MzO{gfh+1YyGUoTw?$9aiIL!tv6sN)uCqD?aHv&ON} zQIP~JQkW*krUbkL;Z-EIHX7K>1cZOtI-SBk|88eV*Mv!5pY+P13E22*Ph)A-Z^j85 z*d-0ddC|ek5aR5L*VLweA8qBPlxx8DkdS)m4~i&yE)Do(Yp743DmCH@%-^V> zf(5J_)Owg7>Qs0W)?JF9qO!5x^3&R7bu3e1aSx`uM}r zC7#p$C!ZFU~5q9^%(SlR!MDcLP8QBh%}z{BIzVKo^&njtePT z13v=k-l=uq@|}Eo#gsu25J`IGC4H**y?B7-Tv;nF8)b&Uy&7xGlWGp_xZjKgcgLM6k zBlqfrye44cWf?m-9rh~NRYE{NB}4Fs{D6h3zb{TPA47fYIN`=y05IdXe+Us5TL{1vIBU z7y@_sFpH?^#r1D0+A+*CM2A}aLGd3L4*yeW{?vp|jNa_;^AR`1>O@F{x7vu6?flWv zpc(eRht$FU45=`aR)Mwu?^X0~!1GrImHt`Otyb*%GALl9-j;PWSj839+9J1W4MlZn z|1MkOEdUr9QzZW8-X*x2Z1ftzQfAyq5AyGV(PlI|#R>Pjq+ZO0BR+=rP;MwupwcvI z*dHd*e{C8V3}0}w$F+f8^GaK@&`#Po70Xr^2zsy zTtVSN9DYX$zH7MDGJ}3k8`%CRCT!~r^`L}hony@Wfj8@b?^Dfq%sg@oJG;^1ZM@r? zv@ApZ=pf$j4Knn;6e1!We|PJl#-vH!6lqMYjd^-U6Ic#=$%0JOE@Xb|mvs==&B##y zf?4X|BZnM<6<(1aPL|qK{*QzaSMoy5MU*F>%U;>N)L{@{maAz>D^EoKmN&r>r%z(b zP0slpbY3!=pzVf}uxTXlf-k9&L_i>L>*)4s=>E?V^zMA?OjW{%*Mw?*)TRH&X3bzI zVAJf{byv9Z$C*jN&jVG@n_}?5?j&zafUqu+Rrcz5plTqeKxhEeA8#R|(Soe7O9M~J z=!4LNpZR{x<|U5W=x7MHhkFDWyl+ck!R0w(%cjCN;^{pyhl9nU?g)l|<Oqx9zzHNfyzL{#F_J}GjXxWW$>FZ>oo-7g;9SZnEC+lEb) zpjH0e@;P3)4fFWP6tNfO2{K!J6PD7+}H3&@b4Y#-d<4gaE6YpFWX8^L{S zoJfQv<@*s+#7y`0Cv693*Tn}F*oSh`u0#pxik`7ypuj*MX;fwiqhh8htxY%G5<`3! zgSv*x;;mhR%M!-ys)P2H9$$2sW&&Bz`cq#VHz6}6oQae2Vstk$0lwkj1|iK>=R3GH zkq#sdY9(Fh7p355urQT8eLYk_j66KLb+&GbZYJ?=BMmndx0WzlGru;JGf|x}fv}NC38Do#@Tc`-cbXRB_^lh6;mYpK_K2IMTxn3Y&@+ z?Ei_YkwoVNy6<^M9W;??0Zvq^n#eJ#YJ(^>*IrM&%qcIDye!#m+p-N5SwV!)xQ?2W#>6ma}7zOiU0kQ#@0+TGc9jGT%Z|ui7OmZzOlHZq2z% z2(A>r9>P;nYopJ}cdOP;MbX)b!vL}EzP3@9KdVL%#!r9+q&)oifk(byvts;68m2+A zRcJsyFc89q=FY1+K@OzV>=)uN2;+>QexOj0&@M^MT@$H*$!6&~FV{?@HDCX*uo~0d z$RHW6cymxfZ-4%}^le8v)-1gT`ZT;d)|Q6BE`U7y^kz^^>^+SySDT6(l1pF zVjLgSSNTqC6ol_I)6xTL(k-4&MSw0pqpx`Fb7tem5Y7%o&nN4#>|FxOZzrHrvdf_R+Z)p^ z;To~$fW~b+IKv;RhqkRu@QqCARvch3a$oXIO2ihhAiAE-ZbEm3WLt5v&V@G4QSpQkl(`Pr;)p=M2 zB?ohe+R>%w-t-DmSX)}f{+5V|I(~1tsFD1O(OoWNq$XatTDrocQ^3}-flUNkV|dmo zc4xMM0Qgi4a5>Mf^IM|z#SL}E@nCC4;3NkYjnbxU&XGwd+3c1hzvk{38m2WHZ_#lg z#Zj zL-GpL>7$-m@ibyY4`6z~@PoGNP3fqaI1I0xr8dqFv|%vA-?M~)o_bUE6I6kdndu*J>^?lCzg%4*@!Dt z%h*^K#{rxP+HWYOgt$n_IwwC9vqwbAs&;L;8k!=^CLseJ_Ds~v%WkvpGR((taiA*i z+OyzpPS(+f??U6^K#V#JW^;5aTA_(F^XnnP9ecZLePnkkdL~jgYcP=clF{XiXZd=!3Kyx|kv@o{z1(DaPbe0G3m) zE?%XR=(PZvBT;7YuYbOk^Z>bZQ0@|TA1FrEbzZ=VgBc?WLSdobZK z&cQCF)X7Y$v>J~u?kwuYE1UE2A@bu1E|myK>7u}{L*^89-3pz+Ygd9FsTo-3#j#FQ z=*PvVwt2XE>`3Fd0PmV4<45M6?+n#Z)GT6)r%SCuW>Nf0!$Xqbu3bLla68~i)hM1Y z#F>*dbPzH==JQGcN#N=Z!R`y*M#%$4yw!R-l`hb=%c9SYH3ml-#rB#XsL${Sm7e_i zC3(RPhS4y$8q<9nQc1iCgrC8iA0hAtu7%$o!d@E{OClM#$Fn1=@A$V|=TgBoV-CgU zdW%K0dtVd7Xx6|9DK+a?Nj1ckhQ6o0aiZk|0=Gu!F;`!lq5=&g>`go%`6*7sts~Lh z9?2hyzl%cAz7 zMX!0%R`R!w+8zKQxJ$uTUraZCxw^)-cK@;22*Ff7iKT-Q{FKs8W|fWL=DWhfPQCa@ zPLXg0nES~zzTUKs#Fk1PZd~M(86p@gf)mB({}&v1xkF}}UG4k-AEp1q!=2)J{1as! z={fX2s!Ea9hG8ODJ{M7Bh`9|rFum(MOH*;97oN; z2~S`mp>Y$IO}2F_)81VwsKHO8$EGdgq$Ppq3-1=H$$%>LDU7ajV9t+CMM$cuaVy5W z5lED{V=cmnjfKCUmbwa?z9&(&ea7D@{Xv7oopdBOKb$XOea~LPaGB-(qM95AAP>~f z5+}4whhUC59&ht>pSsOMTRpy~P71LepefZt?kYxB4Jz?jh5a}6l(C9@I%+{}UNm@w z6#n+zNS@yW%+JcG+qy03P2n3H++eLf{R@H-Xl_*kXGD&-`MX)IxL<{f%Tm`Qq)k?C zXt5jPY^Hzs%7`f(03-6Dl+pt^n6I=v6=4P%P}{E@>|Id6*hoDWkGRCg#P z-Pcsl=dSF}7~ivlB{a^kEAOxpyjSq6{hy!vK@39POVi zU$u-3vRdrCXK`|kPgwKtUvyymyM2-~FX{KtY*KbD6xmrTTk>LHTA+@$#&X3&eD7HF zPZ=rf!=hwb`&BxdZ_Bk0uPY3GECqKqm4yCBJekG2e9k)_KiSPPkp=$>!bVbX>{{Vm zFfX^2dzmoa?trnE3Uw9V0^aZ+(6YC@;>TZi`W|>fUE|>bVG=8x8{yJs-loH-L7_o;a}=M?sdG$|+{D#R_+ipdt~;pri&$=Nu}Qg_ z0qJ15u*#U*p?v0I5RQOp}x|W%IoD&EK_M zIn53yhoFJ`fY0QiuKylI~Qxd(3m== zuZi=n-duqSL5UA%&dRG-`B`QyUP+B8wueAIAf4^Hh!0CxD5yUfFMK3ljg>6PISB{n zM3y>G7riqJPg&sB&W&2$N=!6ZxX~M-6UF=ney94DrbE^s1UdJcF!J#n>+e(4V!V72 z43r7p*`~#&uyXT(?sa^4yoo?!?-jE!81J>NbyJP4aBeKvF0rYi1N_iM{rB zdyhPf#CWrjobjq9RJx{ugpC}DSmMEKzi_oY_Q{8Lf9xP6|2E2J+Qi&{9;Ao)tseh< zkQ&nbHU@Q9y*F(@z#4QH0tiM`k&*q=+qpafLR3|_QarE%jf$!8GJ$X!0o@stm6GM( z%HAQqAx2^M)y`2_hvQ}Bd!NRmRo9h_x^(M#pN}dcD4No&zXDNUC;I5jVvqML^v3%_ zEP;o6AO`_$nG1$U33gy`HCi9@W@H)tC!48XCMBoP>7W+ zsf@9HakAzSH8kh0S*L#+u^ht&j$Li#4@A*Ivp`#JB2w;BFf-wy0xU8fA3#u3ib% zt^TI_Iv?sI4;pmqKiAkd*`OywZcwe8(6dkyf_MMt=>ej?&-|z$irQ`Hj>y`+-#e}v zw7p}d)(2Zomgou7343@$KN=l}I_r(0vx`t;`u2Y9CQ*~+zcTL){?@DC5K3Rnsye^9 z#eVYR)3$nNPTI}1JQ-0(lV?~T>f6{aGd`@2dPQ|tw^BZ-07NOxcOaQMIR-yk|E-n! zU9iE)BB`65PYja`Fikcn`^<3RewO~zJO=(EGNGIVh1D-{R#m5GCNREy=Y8i(oQ@x}^mpoMCQN96V;;Y>Ki zbA+91!elxL&xCw!)dEVc>EJXjJb`3Fq0Y;kk4Z&_Gg zYbf42GS~iuJ#zlHYD`^+5UDsP(`4mZuA^928kO&loI<`U56(3 zA6yRMCz@G#uAA4czR*Y#>al+xUoO6r^?pyvPC&@${G#t9;8Q;GxWP+XPg+4)8f9UB z6in1W)?IaPxy%u>oM{gtW#u~P-+?w>H4$XIy?ubcV zvz>Ylsd^X8PpL3hk&<)f{xDMbKD2ge@+hIpHuK2_97F)*xTVE(2IQH>VPU0QAyTV zLv#vit)W|!=^Fy^Jxbpy1Z#z)vGaI6ti=?YjTN?_sX;(!V7Vd_8gP% z$L*nf9fZSsi!KsAhGXQ$OYDYczwog2v9CNF2RjA&g@Ee{GiSrmLSWP!?aq6&XEN}y zq1D3kz~kt-adHoGejI9s=ROOXH;4WkJi9I8i4t*=k1huucf={u6;@9iQ}qD&`6Eg+ z536EQb9}EkpB>V>Edm-9$2!ddSn%D_tyHe88XX4b?~T_2t-dah8Bud|=YVa;I)Pi>LphU9 zW_{E9tC0@JU~*Z--!}o!>%R$?RF+*>w0gi zjCXkRTZQ8%fSWx+XXj$O+{TjRgSU(f?-3u3X8>qqT_7)cBe$+rxDH)^ydWnsR?5#T z*XT`daYZx-uOK*vp*IGjY)Zf{17iOh6|V!n`o`U|2Eya%-3IGdeWU&$0{hXAvOdK1 zgb6>+{JZ*zNzFUfTCznAU{#Ah`7^T381a3x{%<;~QnccaO|Fh~Aq~W*-=YzQ02$o? zXPRHync6C})g_g#>nS+hpAW5!U(>BV+uaS_Oa7-qz5WB+Z*O;Yvi`R|pK@s6_)p8Z z>IaP1er$2EPNty4J_A#u&I#Ob$XNKrOv$|woU$Oxgy@-FG;1j&1;z2*vB*@ylc$8-C@9D91?t4+BbzLgjf~qU?)Z-%RjcnyMrCEq?U3-V z$*-1&+|c6TUpg{MV>w*d+=vP$$^Y`Cuy_($$O3>{`t4n zL2z)vmc#%4&fErIn-_m}hmVL!hJ2M!uW%g|0n~oZ1Lg1#+iM7#IQ8;n)7?jxyE;Iu z`GuMUI!JBo>tAuRKkZZpox%@h0(YJ>Xr@D+H1WSa!402*hj7tE?TI1eY;Od zbe}#gbaaDh;(*kWPv#7db3Pp-oM%)t!uY~c@UEgaSG;tM6csb*-9AcN{Air^HOeO4 z{GSePunMWg@kqLlB4;YrJq3Isld+BkBS1(i32$@ixp;8Ugv67U)Fc8i=TPg;9;Uc# zR>CtK@Z7PrtIPXtHd{%J`Z{bWv*1i_cfAG(L%|ovewoT=LEg&9@q?z>m|Kf+uA?4H z^sxeXkYGJfHUpI;R#pCY)QCtPA@*oQzHe3IZP>7|FdWg4@G3HqvFBWBFpVxQ;G9tm zeKbBO#t*V}JnP)ckMPCC&{i-29}5UQ=?h7pTF#vET7I1|Oj+5}P4&e^A_51QUD6`& zdCv=eP)?d@?ISt492<2>ufI6m?l37PqV3!h#xX3-x~3Gqdu5Y7L7e)yQUPhOvVZ{| z{uUvPpXM$brm_Vdr%LG?hkRf%+WR;?Jt~AOVJp)CNM62;mNhp)8x!)qj<(CpZ>SIm zbnG1d6k5kpjh+4wu58#R{v(;}1Ds6Wwke-o~^TM|5#_&)}@-;{;k=dJiHE{`>+k8eK*aq@Fs5a%1M$c2S2kddngdrCnSw= zh!f&v6roeAD!!jem&y&sr|I$81jU~0-IoHh%BWsiUbJ=e7>~Uj6&V>9j#XB#dq`?C zQsg=y%7qv4QQ#2Tdv{v*V=tT)Iz4GaXljaD70AzOS$C~*L^YQvbJ8Yu3`u7cn1*ac z_re8RwbIDL3QpGPexO!uR7I&+L@M@E?@B(Lt5!-=8?}p7ch$u=|Jnjxkh&~7N+kBO9Vdxwj~|f$6`2yk zTlbGct@OGscKw}FzTvJnJi1q?aA?_lJdORVfda5TVivZSW{VODZLG>S_tn})?9xfl zK3`luFL?qX-MjE`Q)dVIcS}n{6wY!vE?4OF3h7MC4W|1B9fOpb_*&GO1prm^^y*QDSkXrab+Id z#=Lz#&J(L1!Zt1ik_l!2cK0*-_PX>1N@1RQ(iY>$ar?^i0L=jS$Yl4^IZ4sUuIC1m zXR!Ko*YoDK;GlN6wmHEW)g1!ASSMdH7mP3)gnQFEwp66+@?LPI_AD21E*pobyzRMC zrNMs5J17#u8se$+S|9uGkXQx*_o$9y91kuP_9lOq$?GfURnOZ1=;P&A#72g$+!aFE zjy%jxEPI+rm>C&pq*O@0sc+v}!-Qged{bpCE$-}0X5ssuWz#%2(;g5%eVgNpWp3Q@ zyaZgeK7FjAO|y?6sgYk#EU9L+8UQaN5rdC)vnP>SpzqnpWimVIZRt%LlI#$7`MJWUBvv-W?_M~VzIo8 zxX3qe!e?H^0>f@gq+gAy+%zbZRi(UE;k$6GOPz@wlULZW9OVPL%u9v4t&{$^z)cE1QpQDBA_W?{BcG zol6=c9(K-@MMt1s5$&!2wIV#9o9v1GlkaxXzEA4?uNk3wIV2PR-ahdr{1Ej}rV(EO z&|kVRX5?^WU1ccVLI(vhh!2hl%^ci-lWLJjp{E?IPV1tS3tAG$Gk*KAE1R2OJm{;F|iYRq{bMcznUF>E+B_WT^{-n)_EUOAI zCr~bH|5T^aJ>g`}5DN5}4<{X)jqMcK)|aTR1YGb5MfjX4eSv`B8)w?ja^{28%g(l~ z=bhZiz3j72f#g>Y7-z=o# z=}|;UZ%h*feSY_&Y%3b7sT& zulyJWtxmqhQe6K4q@!i@pg?sqr6F~e%kWLCj`{7jk1DB;LQt_54;8(VN~hjO-j8>oeUv=Fdut z7sX0zC(p@-KqeDdL?8MEj(+JZIH!Y@EIg8IYZX_gSlSLK<(W@tR7JgOta{%otFJyLRxI!NzBf& zVu1bBf6I(^KjxJWD-l2SZrMKDg8m;>Um4bB*EI{py|@RL3SJz77h0?>EmE8y#oZyn zU5h&uZE<&ZcY?c>1PSgOp7%Y^Ip6ndU-$oe_S$RKnwdh+{}JDIP4Qn7eR!Vs=D)(P zb|Va6tm@1`7eBNO_Hz!=#`CT~kJ{0GSk9U=le*B-V9OyV&7f|oQq3S;ry@f!tx zw>po+$&$E~*VVG}3n8m%5S10cE*?#-?dHJ04LomZ-4bnf%|C4Rt|K2KN3wBi-Bi5*Zc9(D#&7X5vFG zq$!3pa^lC9j?E-zi+8!*N||C5+H{N}G*OfHGX@P;m;#BWvnqlZ&el#WrW=S(eO{-2 z>vX9X4TX{zDutOAe*V|05xSvj$j%?DYPV|7eBbZFWuj6vT4GS zCb>!LO|fh;a1vLrJ5X}{JW*DBQK4L)&jHDAJn2##(=R)@I@3mqa6Kfgw$@IH!w(ng zOemIz*mCBv7J_~wxAQzKHSF`I-|_EBJeiwB*$zZNzSSq|SVECiboBg*b5Q+A6u{V9}%XFQ->YTUiVMRi^1R(L_tvlAk0o_j$Kohb`Mj; z%&r{tb(LnEmx`S>g7g!zcD;DN*Q$i$kr1v$>zrqhiIrK~2Zl`XF5B^zeih0yaQb&0 zCj3CgxJCjO-Pd((Y+MdNjzp@YL9!p|f%JovDIophw=-e>3wyVH#H5+Bi4N^-9sIx# zb3<|!!FYsd3NAAWZ~6)lO;G^>y59y89?~>xrBlub%HZQxX~y$9hOfE>7g{f!x*iH% zqY+|2Zl&7h6X`!Skm8KhuIFn<>D|@Qbf$G)$bJdH)S0&PskZ4zR8p*JzxGyTK4g9c?;=mr+Ga7*a7B1e zvP~=f8EvnllvXmxRv9xgsfs?05$`}qSIS^Rid}orcd3}m8oF)MoPyTY7&Z0NHj&TF zziyFJzqb!&;@JWnJ}z~J{~ffJo8aSp@X%|vS7WMLSb=VG7x+0IKDgT>sN(`)_c461 zf20ls<`VLL|4Uo~1pLP+6ma)f-TmJ($@LcrlBFJVJUL8WVdZpq5UwwszjvCnB+^*B zrD&kbe)oMr3h4^X=H0ml`HB&vY2Z7o8;^}h$fI6zS*|NBJ6{Z$ymh4fa|lK_`CV5G zbNz4~UI*@S^<1Isr-RvhQwl5c_qyl7DV1k${=A2SXMM=h0vG20)VgJQ2=XDHIw|)O z!Y;-m%HCOu@8ep@WX_p$eBB00v%A@Iu^JZioeDQl&+RpNM)0fd zt{NL!zu~(E)f`tA&~G}#+54D@DfwvS9{w)rZ)VD#96)^;nr-|ywWG%`Ps+MwAliZ{ zt-@?GRje5)I;`$zcqlV$s;Z$Es5a#PuUyuuE!0*vu9y6bS?AYL1JJnlb_I>KAlpFOLdG(^dV*A+2Qy&yu>g|0tuO2;w$mq zhmTQ)@8S>hhWKATO!d_ot7M>Vj7U1bXS^G%uI$k;0Yvy?_H}_Uc9!Igej9zFg{BHD z<;TD+4Mw#Mq0hV5R6{2@Z+{^^5s2gYM%Z%tgzqo%S zp>aNc5QwOYli|_~8e|`CU=`-GwDtyp#lZU*&%@zv(&FfEJwNH$>vRYwLVuFFN^{Id zjdIl>)vREEb> zyD_-m11J>p=H$YGT)92nCoZ#8GMisf8aqPw_IMSVXKN=R> zxhS2$s$FjQQL}c4^M*#;)B#>=EBy`~_~MVKCe6N?p>#@PFFWQ~q9yw`u5)k4oDNYmd#bNoa5dT1 zw^6Y(rErCP8hk&wIL=zh9=$dln0H~HdFH=WBG2ES9j$g_ zodu!<*Mm1N?SRTAuoMtp zaMwsS9%f??mo0tU6Ni{@{x77qso&uZvt zX6nFi0*oCkw$fj!$}1I*zC#@cl*8p)EuY>QAXJ=SRU$aI8<2iyLkAIC*-ueex(s>x zb#Q&BE2CRO>?PwQqCX{kVrjmac{Wxa%8`%Y2mRa9cNBZqR^KA7Woza1| zuqQ@+^T38G@OZ50&OsTxL!yY;t#@aahB32i+sPz&5IG&VB%16b_C5mpqO zJD26e0t9eJ@Wv)sDAz8FytuBLu3x1 z|M30s5`KI?_Rqp>34ajYP0Ck>!IZ6d+UQoCRp*8=4;0_t%HXE!fv?TY8)Eo8tX~%T z$7<|2ukAvPnZ+yW6m8o+Dh8{0R~-f7x>^(81=!y5sGIaA3uqWmM@3JO6=?4LbS@TRR6lxm32Xs(E0+jjbk?oMo`WG}m18co z@q(MRKSofcwNSWMUQp3?`C$VPhb{W8Y1h!f2PXuErL@B+C^!OHoo|hBJ z&o;Jq59AFID_6w=@c+<0D3C$19fd67vl{g&#I2NlZH<1yW5hfEIt zt-!&N5HcmXd*45nTuVhhyvQnGd2%D1Ih98@gz|FheCn=8+G=CHhtuZa;ulr(Fma{!=U zPkGLD+oeQcq+g)~SC^}8(3--<=}q-QAW|k2BYHeD`OUu`y#EQG5&K7s0v5ZRE6nMpOYFoaQdanBUKy(|q;{pWz9~@|CqsWHABJYVY}XH>w9z z6l3?I?t#->&l4Ez>+pN~ss#3{AVev1PH)PmXM=z4uvZ`Tl;+opA(PL&5UOO@I$QoT z%30_HB18jF+M1JhFuWu@!wz|rU-N1?v5bVMWo2I!ntcG-^9@I95(k&<0;kbH5CCWdcD3%6z|Ki9zs_ zzKmlWb}iS(+_Ci`oEc=c^2i&o?>7`I=A4-c%r1fG;t? zd*RccS0hFgcR))O0~Vv*95cs^OPPYJoBBw@Rh>IpXYO6Ep?6V{HRMNw$H%$y&RYIm zMU>ptO*6|2R|0^~al0LcSoMi-jCUCSDhj{xsrI_ul|MIM1m)RE1HAi{e^Z8k`(vy& zC%|4@VsR?WJzwIId@d;-`#y??_wqW`-6P`9qEP0hDuqCh^>_U{iB&iD;93+Ds#v`p z&D9^UFHp~bzoSvk4g^wP(#XLc^_P6{!FudUeT@LEW&miI>*cF-^}65FG*&^b%X*1W zMsj~9$(VJwA{b4zdV@NX-%)B@JXJ@kZo!7%nDa{s5ceLi67GeXJV|qMZF0svP~*TP zqZpMT)%Q2laWcG<(o*ne5RFx2oFs}{Z-ik3$06F|D4aY^I0fOmn7~CYx%!i?KQFJ$#2#68-TDxK906-)2@Z#b=wxc_3@~;uj^c*X6kWNPzcCVZp#_4`rq}>7Q>zI`Ahvkt|+&T)=vxv15 zCW6URTSa4AS~H~2fWAs|1hLy&kRu0E4ss^zN9}qAyLWWwdgC#~Q8v_JUo8L`6LEq* zC4%{YM$+j=Q2;+{U?}l^ESWehPqF2@0R4*ytd7s*tQI_`@PXl7)N7Mit0+VkENPHu zxNfsgYLYKzG3_+p?;J^!1u{2 z+UK+H(Dg&3xbg=1AfMaI@=O{PU#Kvjy9?g$MX!^CBQ0RUbLeXbr4;DeF&NLp=t&_f z`JoC>`!IIA8&{)?%VWv0Id?KDd|%b9y7&D{k0C)HNuNoMo?-;|?XcHajM!l`5gJI$ zd?VfcAVf-{lFqqN;H(m>aQq2%sk_pB)e4se{>D?OK&z!n*aa~e$IUIj>|KRV7CizW zY6Xzo@tQ?OagQ(UaS8doBMDaEh^#OwdKSwRtL>+eRlQNf79x6H4c9H`m;ZfuBlBG8?yK^^D)NM7Oe4Y z8oQpcr3{l~nW%5$gbVg5GW@S9oah$>R%yPpLh>2_`C4m&7#~f`aR3L4B$g&C{dy?s zhLn2UVLmPGJE&vV+F652U}JVtFR^4+^i3^d#@jMjh%%2PAe!!RIK@o+D^w+8*RYuD znDD2eg!?8XhVhFcG8v_V^%!9aLPqqd0c=SJO!acEw)FB7+_`%xR!l7}p|QoFIHgzY z+)?^-Ta@<`LB+{4XWL9+%iE0a%P+tcr$hbR_=Zm5vCs39?%-jNy#f>336|>U)Dp^z zOfUB8mk2lSK84KG75Pr}aRgsSHCcboS@DSdJOv$9vVi$BOZEf#jdY2oItnu>N9 z$p{2E9U8}KrHDaYUW7D?zr4jG4C8ta4|#!zwE6)5%U)+|7Lz#~GAL@IJ{qnKJoyrj zv!)(HkhsdCA%qnD;Kq4aHb7sm0WUK-)>_m-+Az~FD)svtKG%x)cas5F-%4uz>)m$q zfC$YDt+wqh82^S*%PzK;VHXy6Y(nyI%l8T^8R-x#%`l53O4Z~%)hug1vJtq1-AjU1 zzcfFFONW%nw#(}3-0%DBsYRd@iX4B!Hum!r$QNfB9ORTrPqUi0oso_eAdq)8z_c%3 z1sPnLzDXJ2nAf67v-jh?vavx;SuEuY#*H?SQ86RBj1NV3IK+h-Eo^&M&%L36SX^4_ zd$*kY)dEbMRwPoHGPLE8Dq7jZ|LG`Cis6g-Mg66EubyKj(z(C8-oN6m1w7mkO;@f9 z+iEcx-SOC6NsodyHN!acJ{TG#ch76yw_`Hl2j17&89xq!kjF4*0q2d z=KeB#be^Yhr+B$=lM1hPN~g)`H8^rr0P^~)!F@$fU{zWvZe7->)4oXXnZxe zrr2BK8k6=q3$if^DZSdda&Fo2-V-zJgU)oSEyZOPx{mIAwg}VQR&)3r?KV~){fRDm5PN2uJ$p9HX5J-IHn~D@3^nF3e#Yuj^;DnG5Af-Cvu?C$R zhmAW+GLs$pK5D~JUD%y&^Mdbcy5?}^Su6kV0xb~yALbT(2Uqv{m%06e(j@W}&t>S{ zNK?qE-dHpn@2e=2)b-du`;NR(fSNfQMF4-06%-q6Y&V&I-t`^Kgs+!vd`SN^*EiHF zz(ahMsL#FTrqvDriXPy1N-3H3#X-`Vsm~zv{&5xx54$*1)f+f zQDetgolErNdQJ;ZOwob)(d zjA2zug=b|n7oOnl^{l)$WUkx4str5qleeXjpp1CMnN-z6vFx zppxDs{T-*aDM)3VB85gaKFix3a{ABZyL5z<59+%8k9k_je zYsu@af9$y!eCynDDRyOVl>s7cCYVoW-^7a&yT{guveCn}c8>bCy7qKfGfu>2BTSpX zH?ddk)I8jsE|`>l97h1iif*wLwX@Kv#U-45m-Hgt-1K=ZiaMZY@mhe~tm1B>NuVbd zb&f=){v_IVHg=>sTWf%mScdVm&9LUw$lp)w1{hs&MlTL|f|L!UVv4=7$zz~kykoj@ zLs~z6I^s*UFxLy%z%BP8x$#hX;1|{5KEtO;vwRUgzRt`W)jJ0i?qb?{&2AscYxuQq5%TZ+YY{fX>7em0zAI5mxp0{*kZFgg88+!{S55;Ff# z1BG#C{bnZ(ifB0r0|tT>O4j_gPbtE`U!R?42Cau64P%&j3)`Ht3#Zdm)?+_lSkRAq z&+hF_Ulck1(x_Q?jq$TD@sMCdFY(H|w@o&qMGfhl?j}rEVQ4z2>oZ18Y`EOo{=%mX zO#8c8wUWb{JfGt}QWO=;R1CepuR`k{*U9PNxxqrk$+wJ%THN5rHWYba(;atqVRbox zH5veY(?Z3vo>U>{JC2c!XaCZ+|D65h|E$;c+h(nV{fl8eXGuX8h>pgewiIrSl2*GN zqeb%8YuX@SowIw|n-v|WJAo*1obqtcww@R@n+a#DjFlaug4*Afj($y1^7+L67^?gt zz392oxA4<6uS(S7QjW;VZ}+^Mc^)%q*p?4vQX}i=3g60X1MC-mRW<=iydg9uNfeFj>O#amb!Fk}ED8GTkoNeP>KI%5NisrD4z~e=z z;?NIBK~MtOTF+dN4K}5adL1pdj5@N{GLQd6)Qi1VgEZex4_fg9C5t=hkdVih!!8$5 z%xm|chqA@B;c}rPlN7=ojgkC4c%%cY*VCx80gI3$F>-&mRIV9DEBZzkW~?qjls;FQ=N%+X$>d_^FN~! zRffu!VSFf8ZV~f2Ly`e^<9r-3^>2W6^&2FXnp=f;k!98Xo*sdjy*jK7wS3Q4WxAma zlRVADL|PMO;;Sfc=S)=Q1TlI8VZJx8BMkuhLJ-M z0TKg|>-#P|T$#LCkLuSO&BOk+dzfEDY{NO2%`as1P_T!PzdOMU9UlHSyrce*6 zzfv|PGJuTEzO{3qIyPF%M-rGx@fFHVb3mjveQCT|B8aQDwn3#*(AGvZ><)bu@F@T< z@3MD>$qM9XM;;%7%sWNcwiaxpzBYQ5Ct$*(A6a0g9To{&kFyb?Z?X`Wef8#=h zXhqyKM3%3vH*o6pD-MB>qL03*gIXMWc1S|W&8pR!mdtGSJ<&RQhhodyXfUDW=f@`E zFsc7uNfjd#UyRmGUU}zQ5lei_v?ZA&@licf%>a$8^psrfqs7cg$jIRPXTigWO2FccPl;wDuwo z)hlVq-wX8&fKI6k7;guJY$(14xy+T6U(7jXZ25idK9aYvI9cB$XRND(iQt+Z;5i`W z+m-fgkrON85Z6OhhlkhqSm45H)H!sI2z^ii4(eE~RLgjcc`6G}s#I$i_r|^SeFt z@R0ep$y0D$%@F(7U0TLduYGN5TpRCJ(JAkCnv1X8kpc}f67ZYsF7nAA!&pR=scfz; z4VIcc@p_^&W4Z&y(rc|%{au|_TR?DBx}9qbVqqeQ3q#-0?-K@M6}GCK zNw$+aIAkpt6sK*i-cJPH5AG8mL^BajBI_Z@EVEB*1qr`KYg z-T6qRn%3Lg6u4l&L|Z3T43~o+dhSI2>evnH0Nl1-|L^xJtgKiCFAtW#@bI^3)u;-5 zTx>bVU&};HMnB4A4KTc}-qy9YZfH!JvO&gjH+S?6lI!OfYqBT9#?5Hq&R@h4#@It~IiJ5YPM z<)m2pC(bexM-q#e=^YQtm?bX8c*zS zp;e5ZPFde@xfw38g6$>K^+{!uol{?zEmMx);E?_#WE@^mw5Yv4V0V;Uo4jSiCfMfX zeRY%2zf@`l{x3-X0j2&bzSuLD>|Va2cJt5oKPa}sI4zELtR9lV0Ib_h4|$j0uI?FK z?UF^S&?zk27G7<9ddNh+Eby?s&gdpw<;ByFx%27q(fIjOIZ}{WPETR`t_pf!a#&4PH27Xg)L#IxctC6y10r6CtBm(@8*V^L5ZxnVBZj6M5(s$SONv2D zP3g8ewpF`-M7Fg0;H02>qH<_F>T9~%5*@-`GX6!j`&92>bh6W;Z^_#zMLU{pqXU(#Nej?qNn zY;}dgQhO3ZS9PYx$FI2YcjDDd8~*N)I)CNN^m1vfr$dDH%%_u>Y8Yo6EXmAOr4e&F zeR^|n`g)MfZ0p?KV!|?_uGH&v6)0;n+Z^;J_=9Lz(xcYHbf;C?~zt9uWQkeO2 zyVkO|yE0iS$iLp`(2h2UUF6-t+PwGPmbVU>kR-h2GG+Yk8+RgZatK)X%4wF34~H9h zakSr4jAShK8ps_lbVRp&n)r&WovG6Ab4a*KM3Mb~wy3jjJ?VReDPrGac^_RaKCsXr zFC(wlc8~ZOdHYlU21Emyo!gCXI5+V6_RB_NkTdD5BhUOSu}rc$E}HNg6@aA1_BI{e zC7yphPEOc;Xm?o{#~+9w$=|`_C*BA;_mjt!sI2SA$F`tLkelft8P=u#!@_U>`*VMo z;2U~nW7d}KuHe=0M!M84+it4&p&Tf_qf#{S!?bb(yMf(K%w;$m>;1RCP~v52LRdEF zRC&sv(+^Il2$ zE;@e8Qnjtx1Yo_<_%UvBoEV8rXCLGWep$=!m?sI@UPydF)0s0<)%;3P8=^-&UQgxs zU1w>MDl&kL|JKicpy?GVdgArzj-|~__3!^HxR;lXGIfWbOx2;kBro4Yw{2uVqoq4007G zs}Y4+=Ht4c%`yYIpZL~8z`J@2Pb93yC|OfNf| z5kU;!k|}&(A@J5*((CE8t7kBmR~s9L~aKKGXc7pn^qy49j=kaSQE$1W3ZHO zov}RA9OD;l0cw!2!?khD4j~#|lIq4%2Za<5(vAwp5(I|2?L&Z^SzsU zKm~N={mnwnk3H;^Qrk8y)Z`6zhe(}jxh0x8H@RIyOS0vY;M4ii67(sgLj1;?`8v>F zz5xBQb!&!FS(^tYAb(&%5Gu)8M>Bc4@d`Q^rdt%!m;6%SdQR3WsGM|j{psOR|FiEf z9m~7jpJnNidO^E`ZpCIF*}r;nZ|^=ZJ11HT3xbn7IYRhz`2Mze6u?#;?dscX6Ai8J z?GpafmaO51t{I2mp4t2svj34+HqyzNI%HhF8&UFrLDX!n3*E}2jGtJut_KO zI7O9t^Z(H*Mtkkxx_*;=IqdzAd64zr=W)WZB%sR6G1ac!cL&&5-@82jesHv0u$2$? z?I_Z=XNkRz4tIIv%|}^3bVP^z^li!(dMARnE{a0`o+7e)n}y8ial#R$LU#oJHe-)luOz9y^xzVi^G@_yY+ z-z`O24rRHyu+A(ijR!4xeD2*8r@VY^@mIu|+^aBG@Afn-B2g-;H_SJ8ko#D*&1F4)M}4|X@J=rFO9$RJ}OvfjS2S9f{9C&ddUg?QY%9jE-@`Sm8ak($7olO30F`IE; zL_VDeH1Tv&(xvhHWK?#2ItbPf?HlF44uyIc`E62dPV4vorEYBPqpldt+0)SLm#8ek zjQ7;=m7Z&|Z^TEC3Tx(Kb`Xxwbd$y*Qy=Nx^uV$z9~|J2xlGFsgWo6511)MY@cvyd7t_;*{ETay8aXKcI!|eTFQ`P>{ZmwwH;d{ClB~ z+sM4m%Z$BpY{yM0^6k?<^dg+kof``7mI)|_6nb0AxXKjl|LW#iwpnO83U~G=nM3k< zQbKKmMroE#s3bn}lt*ZsE^6yrY%6yVE_AGw7x;8!zKF@~LGPZ!_{L#8uug)MOq+U& zhevY>^E8WBBRD0M7aZnk$&Fp#?o3Rb*%(ED&yNj~#+O;zcm)0+wgSjKK7r*3B*jne zs6zN$JW!S@oHF@s-hwd#a0?`!&Qh3g6R%<4eN*;38x9PxW@UbC(|RiRQS)6S`BR)$ zpzDWsS67bElSArlz0LGgOf5jqdW>4u^QCzx{;YmxXe+|NoZ#TiWg?17WTi=4+Y=pz zbiWqJrzgVZ+K8K}8vj6(b}0($hwXR8yMbE_WBTIe$TLGXD|=jJv-8Y{u8Yd760Te*tO+}CQ&DQ}{EG=(gGS6^n(Z3?6c8aO7K=Wuv@fIj z@0Jdbb=wwcd$Y1rMV*rwaeCUjC;+ZTwGzx?6lT^Z0LrYMTW)Jmkv9 zTb^3A{n04A+8OzlfEbCkxGTDy@X{9rA?)RrJkL06&*J~`GK%14knH_9$kQyv(-!o7 znl@veI%|2RbH1bE&c_g*)=WT)ec`p&i8S$*@Rr{(Lc2>GUF+0++W;3mGU&YX(?QDh zVb7ccpoZU=@s+9OJ`5eY3?p%AXu+>PO?1tkBcFK>_#M<}x($4()n9QMWP34bmXg?7 z*>UX*RwpYN`^gnm3->r^6LOWH;_){1hWq}0hjldgy1cg~SI2GMp$823X^j}h-ZoKE z_L_e-8R(8AlxbZ$^Pi=)p7U8WeJ%v~l7Ci)6p2*iZb?%nbd(*x~+9})LgB$;({Y{2FoQjtnLZ^S(Y9j`Nq1mah45I7KT$i zIgEPH!TyMxI7jaT$FQ>!knr(imGcUb>XE?+~G^c6_3_KQxFtt}Q*;l}qP(F#Y2Ewm>Tz0s@l(DQKA zFmof_yq#Qcg`dK&KxAXobl!S=e>MDpbMqQ3(0+Pt)|M%^s*Wzd8D%2$7ZIi~T#1uU5gWboU%rAAMtU9lcq2j*Z^*qR$Q3pp|>6PfeqLMP3ZG^5TSsSkyo1m`30l|g-T#Za|2%84Y2AQD4GL4;-=LXhxJ>BI)0Jq zS16HVZ|OF!!JJW#5a=L==GWB&ra^glia-)2+vU%Mbsx>s+eBy2*_v9H(S)ni6k=>X zJG`Idy3~t06G?PE-e+kX<`6a3uJ^cKl~kMie>pdR0YK#ohClBtErtC}eih73 zi5&bXC8%5l52#K&szAan&%897Yn98W7rcDjr0^44t{S|!N9|@EN8kCRY&9`chj2OI zzip0hRlzgf5w)==wrD?{`1!*F4$z%HNtJm@!1z**rAeR?7oMsR_PbCI0;g4UFfm10}ZPuLY?iM)sTth^Q4)X4s}R=w^8$Hk^6 z0gWru8lPqjGuys^M-i7b=@!6t8`I(4PfiAu(?||CpqN%%XmF79BovGP0+;Imfj0() zko7l5eBI!PR05Uf9gVx{J<(tQh(IX3_p-_8;o4j6xU;BEdX zJRUd8@Lj;a!NYE8|6qXqf`NQ>soA;))tbwer8cUKi?ABRPhANdT9y%lXVZR>pwT0vAEo^fM;<$3S0>8IL3TPIrSfBV3Em%x zJIA4(%EUXjLO>W3b7nhJMpzEO|Y*j;^A{_2b(C=Zx?7qbPU>ZATYkp5~UnfCe}9;cE}B;EfwD z>K}W2|AW3QobuiCUsT=s2!#D#LRX^(rP1)AkJHg3i}g7|kvgU<fknu_)tlor90;zWdo+J0DW9cA%Fmim{PfKRDVR}^VML?oBLpUCF654sHO+Q znP7LY|D<1J)%rmw#Y2VNfL~wWD`>d2c8Gssnqae1YIBmRNXGn7>QE%Yt&<4HLs(K) zK>AnPBM)BQoZ{LdeA+0PfZLBQ0Q7++PT$pd#&0DhAvAjHPXBIki3{6HMHK@)gnz&I zbdQi2XuGrOUhq5Wra1k6c8oq!*=Tkpm-es+>uVUg&CPP>mb~@F^x9d5270#n?5_NP zQ53K+8yd5z%*f)O_1F&wyLQK1YzW$<17+7ek!jY&|Dv)Aya2bkggNzHJm}9<3Wl|f z#4dNwxWni}fzr^Bkp}w$NsAhM_<$>973UpoS+C#lM2hf@!eH}<>e&rZ?Vd#k&IJR@ zEAf$nf$Ls1BOMN5l`c_S7v51ZolDwi#Cks?!R0|>z}<=_B+a1|es1aJ8A)A2P?=w| zI52Z~#ilc@NRNL|JD|-X5%-jIss99xTGN+{5U6y{-b=pNJbN+$sswEGkXH&bMKqF? zdEN`5`Or$D^u+>7bWJgdhwXW-bq;x412ED-Mgte8S6m-{idv;5YQ3+Bv?*n}yM@ZP z#h+D0`IO+1z2Dmr4%pJ;g#AKqz+9pf-U^G3FW<#=fMSF|?qfr@;8new8hQ+WLd9n5 zb$DjU-wFV|3INeX8-J+?ah=JiM`C7OM9IaEzQMm)iMn14N;p%hN>NMR52Q4;YhD?7 zuxOWeiX(C?^OE?L%BWxa%r?~B<#<}9Ij-<&W7Y0;pNv1Y>R+EMh(6^4{~faYhrd1j z4}UwzwXXK~FMoSo9DQtk5|oy9bQkGrY+K=Y28%pecD1FcU*x~oy<4u~vhm+;{naoG zyju8J-2UBumJfV@xd%+2e+Ts+9*u1%rHq3$lp@pBAzIrTCA^sF*FJpJrM5KFh55fh znXc4AapyVmZMHA-*T?(8(djEl$3t6~Xo!?Oz8r3}yPvwPH7x1%gAY7)Hi3^#a5$+L zJHV?PJfrPAs55vnM>%{S26CQ5sSHgP#pJ=2U?qb&#Tx1_kNFwRCJ{qjl7oykckt+6 zx1x>Py{DW14%PE6xpZZ!oIIY~pjgn-4JlG1b^gSpGjiz{{GmI*THcT>BEeroRb{)! zaxXoQq5Z)}-~L{84VX^wqn^TI1arV0b-SB^M47eFTbVLH1yeocqo#a~zebc`-$jEu zZ&jTxT{Ru1%_Y`Izz)##8xKENLudIC@8EFL7=K+n$vGS+DdEZ^+uHjmx>Rk%Xb^2H zpN;}C*YAE1^EH^wQaGnGU4%2Dcv1ynyftos(Ov^x40&DYi7oP+Z97!bl5n9zTXYxe z^g6}6)g^xvVyHzcRL|jd_I@01qF&-IVUO)Ie9-asx5$a*6Rh9XMB+gewRzBS2zsQL z05`c1TFxoH1I}w8r#U{g*|*6b1<`t~c@C-preg)S2f71xsAh~#<*rCC0PDdhX~zz% zWT&BW5pBixpNr3cDw+EM6)Ih03~qB=knNnq^VC8XxX572vEb=urwYm0{yhr)!-Y4l zyZ4p`2K_$2i~9*rk6XTGNE7Eu`gi*^oc?I*+nPg0m&sCrm{F;D?u$D}{A3aaD#a;b zeQI5Ly7tF-w^(X}c*HAH2GG4U-aIu~6oa=rG_v&3o19aveUE02G?nYaVYKs#MYgaq z(f!xDC&5GB63A|1JSRBDRk#_ui46FYH;ntwD@oWfO#h9?ogk09A%@ zmNXO?dnHPNCf+GO)0#&7pR*1+KOg@HwCr7ik(fidUwwCk+d2A?mZawSFyYl5h2xpJO8f;G*RC!qjVLVvh?I7klU}Ga1MHSxyF5=-^j^dTnG~ zqitVIgUqfOsM4bDej_KDocE1={9G{hT^e(3gJcEFaI5A&(z9bAf&c-UW3ShTRI9B3 zD~o5uoc;;y4O3IZZ*xI3Ye2C>8EFQ8l%;)L4DX%E5XgG--VlaEHm$=I@`R^1ptR=l zgh!`*Ii8d(N+i|je5XFD6Gg~GX%+oSDI#HGDS5u-5tZ}R+gR5~a#)4h8}JY4yCwnE zq;YUuw9xZBMqNUHRzz580>gNQJ7rAv3y|jIDP!j;`(XtFP_nGjpJpmA{;G96-vk}b zpqCJ{9u;OvR#7C`1z75-j<$}$19tJmqKuB9G@j_pZi=Bq)5@RIvqq+thH<%v-6(gcbWxc8#gP7vA)U!KhT9wGrYa9(E!WA$&d{O-jy8@V18M>{%oingTJA#LSB3W~DNm+u|VxwMAmC@UKX3Ln|6mfiw9pn^ybv zLB{c`zCW7?suA4X0$bY$Kr7I|K(l0TquqSlhHKz=?s38ZUic?D8*7xe%imwN+F)*H zIWI0n@<@3Y3tcdgC~8ixG;r96-8^#ck%iuvFdxBgAm&dqSz>b>5HlKREhnys#~yI9 zhd+x7ljIZpFUIwJXDeK_p@zt|!gpmn_=1*lqLiCL*6Edne!1^%q%0>*v6|ZBs-hSR zoeCWN(n;^Be~7BD|J}77(|{3Gdy9Oxn;Bq2g`~a~&*5r6R2r#1J%l=!_R5$%?ZQL= zpyRc#p(Oj4>N&g!-J$eF4J8ELU0?LO8_c2#V!*cX`e{ei>baS@M^7Yy`)d0>zP@t5 zbo`1_X16w{6&me~*B!H3_U6XkhW4^omP=!w1pr@<9A2w!J3HLd0H``IZW-M*!jaM?-3p?>7~P`>(u$0dW+0<$z=$u` z{anxQcR#QFvHy4OJdV%johJWTIU8!W>T~~HIlssp_AQ^?RcuBt5ZdSX2c+lyf_5yO zS@=&a0#10m-J+-!C@C3#!u2;3qs(}5fj-kqfhZvfN7sP|>dOoq7)NB^_fWb=HE*l8 z>0*G@=U6=A$KS8_&1OI;J&&5dFTQAP>!u0xsveN4V*QY`-}eb$N5|DvDqDL0S)EZ< zPhm|5bw_BJiDU}f&phe?TRH1Q;SwshkkRMGvD3L*CJ(A^iV2nrmxyALW4Imj6}(@J zSk;V?QjBW5`?Q*hKb{0mwWn@igiAmCOJe;oa=& z3PV_w%k`+#gVg5genMI~CjH>rYPKu3j*yu+pmbdOI!$eTe^fpTj~z<-hK{krqAbyN z{HW^ynz2Cv{giF=YX+CLiDYUkQrVtqDlYx|Xn)97*oBb7^^@NFMdkV#^NPxR^Kvl8 z;(S%I4i?b4AG!;4kf>-EBQD*ak^dXJV4HyH>YU15RZx~>gVs4vxszq6)o-PKQ~PPT zTuG3GF4uq}O$R@Iw#TY%3I-jD*9+_7oQRUR+1@YDYe9iGnwY2FHlMz)il^X{&snmY zc?dJ0M8?}vOdw79G{ETFM9XL z;8J?5%|4xOj6xC5J;)ztZRij`!@y{4M^k6(9bSPSw&YL$&NOGu z@3WQ%!$-p>91PB`D^A#4cdPA@dF>YneizbJPa0DgQ@#h&ove=t_~rMI*Q{)iIC-@M?XM8BmfirAuiGYt3f~}f)TI8&&Rey;t>GSBHKM(6}JtwJ;^wER# zIAm;M+03&F82_-ac8*1+Y)Es{;a z=}en#J&BLnLu>iB%FW-ATbweIRiwgjL*&4duI2l)#$nyp&nP94*+-R z1J#M?-3=tp5Mzn>kW&It%DJ?QTCl^3`8&5Ql09lPWc z%D{srn05LU>+-`D{7>oiYp?X1Tcn0?_a7N3nptklg@~owj>twWCZ=wRD4TxFOAWHs zmI~u76B`{P{fcXLr0q~m$v9%%pE>e*Lo3M`;YIRAI(5uda3v6i#~0{O7EVh0JVd`8 z0id=m86U7xI4I+#N3K8XJGhJcn>!EwK&F)BoNgE7`y(O!g3*=ATs(jF`q^GjKa6V~ zQRpk;KEWXAxUFVKBYi=TdOS$HZLa;N$a4d;U8yqjn=}nH>d^mcg82SqNw*B13rQ48 zq6@;JEU|*_4M7fI0-H3nZ_!FFtVGA3O-#pU?|*r^Nf9+V1JbFUzlm&^hcfEZ$(OPw z*6_9(YZ~O2~q!RMT5X+1B1Ks-BYv_%}`?Z z^2cc3UOD>#amce4o73X)YY{ZNyNF=22`Ow%Vv2O((7I3Ouv(4RjPR0jO6(f*yM{C* z{|GR5`C&q~X?-u>Yd@&W%?2hD~$y+oAG`E6`4&8cIyvj@! zmv3tF98zvi>6_u+xO<6Sv7PT=JXi@`63^9;3b`@F{imxIUd6!~sQy%Hd$%s~KRszq z(E|xgcS#^A5&j5a+iNWj8#TO&XMT3B9)mCVo@Y;dJ%|*r3Y+I>!Hwx_LG9vZt@Z{5 z99w<7SM#65%&`+RN*}Y1p_&{xf<>wQqz9)?)6g<5N=#Ma>q?{kmrzJ@;2S@JV63yr z9%_&H-w&5UrrZM0+fpC5{juGjSgDmxVAk$Eu3BysRJ^U6xZ%BJ{ace!kvt>TnzFv{ z#!B!7v1XvHxyA$_PqACh4|1=N(pCmt0~+qG(K5IqlL7>>eY4?#1vG}+SCJ?Waj8o0 zu^^k{zBl=aehwN_=8B=`)5Hl0`zC{uC5gsQ64qy>MH+>-CN@OK##LWi-!0mrP`Re2 z#b9+y*MuE!1_l#NC2!W{OMg#O6^B1yY3k>3<5zoq8@cc2a;rtEQm3S%Othvu(#xgV zY6;>i_!Iu>W}rGTpEyD+n)|4h51++9qLowtIw^=iL5j3nw3`9{z(F7XX=i~qAK1e} zz5SjFVC0kJf6UmD*LVJj-r4ma6A;6B&6p0sb?GN49cNMVNGkRuR?Bo09T8{c(b4~f z6blj2R|)B=xDTyeh?vN=`4w{c0|!2Pd?iD1@}lT%MUt%0`>C9hK`VM>5;ptp=q1Wz z*$}%~QTy4YFt}PzYrv+WZC(Q>jkpG55>NN3<`o?!Sdni~@5F(%-0M#&4`9yk;wJ3) z13^1V1xB}4Df-o#S?8`Rd~xlA;Ovc&({Pj-6!qZ!Umilg0qmi>8b!v1Of?Qx_-iG4 z{64=@ZdY!)jiOs>cX!1T^}2o3H`kk92^Zv9WppsiyVza(G@|MN@*W$iUjwaPJ$1D|;Wp5u2j;q@4QeM>rBF7#^ z9oLA<^z4ha)~PuYHk|ZR1Vo@-7(3XFqS2kB_Uv4m3Z`ZVk2_Uc%=2Ul{93H&Mv<`em7^M8x=b}QP>Dj3no6J( z23IS>5vCeZrLp=JYGe@iuyN%hA*^i(=1>D1Sk^9+VVlW9I!D zWTi?ct&BIg%-)as&R;%=(YTPDL#v zqFACqWNL`g{;Z3vIJ#LO;5bSz1oiQo=Sdk-H)5c3n!3qFOA6F^h`o2Pd9Ne5Xl?z} zWz0=(#Oz%MNYzd9_j-%IJ!)q0eq#i)aLA4@mE@Vxeq-Mucp!ien=uBeG-P~TtEBX$ zwrfg=ON}c^IHp@%OOI+JW<`={UF7TMWe3n^t%bM?hbyfSh7_&OEq!=np$MfDyXunm zswmW~*2-4Y=oH!LFH=#@uaFWh!uv>vp>AAQsAmbL?z%Z#G|F*%v_~mV?}fc%Iuc2z zn)b-^ifU9y;ZA7p?5Rx@cPZ!>t|a85+hCnsZj{!<@oZn&HhkLw@x+7G@$4$XWX#=7e1z4 zf$rKFP>GP_0mDp$SfZ#npr3oOudOuyls`S$XsuSf;$1h`+9q#Tr{S|pQ>epc>)N3ZwR#~*Y8 z7V4)j${3Ss1I1~;vkyhuIP1HHjCAGFZlT$PyDM4o_YK0b>et?3O_--5Z{keL? zj&d~Ulh)PlOH|o5=`AzBaa(QNBiMXI;nUroPbwRjE}GqXnZP$6I;%wWX^jGUl?#$g zM{B1mS3ywXF4Yx~zE$#FN|$Jc_1#WgSC zbuDy_ah*@1O8xL`7KHYA2n2C$b_|B!d+&vyBRmtq6N+Xx`<9pSfKY18e{(0lB6OSo z(H0c#H-Ze#|A*z&?ZRzcxM?;1O#VCrLii$>8X_&(v9&KHiXH)OyGo<`ji`$%V|T*U zMRztc7+p?;w^j!8-oq~st<%7KVU!B_ve=xt^VvNtrB|E?TEermv>mL{31Kp`(;pmP z1-_j;elczcU?|Up6GQld&9oU6axQ zrHhpJVzcd;O#$NqgZz_)ToLVhUN1!KX2*R!s?BiqX5K7K4aB&wm3{o(&PJCf<$V{S z{BE3SPaSO~_?CCDQT5ww4!Dt3|~0Y@hv%0V44m}r`|9@~xk#qMI2d|BZF+g0J~ zV=?^2nGICtnM=_+|C0|b*yJ}epb5X>zY%hYY+vBV{mrno+3Ycm!Itw}%oUG>8id}H z2LEowWHD1Fu4ai*4n@Q%QvEP(#J@U6;FLk82k%+msMq=o!)WZQN0|^n4Buw8Tdk1o z>6;7%yT&e?RrfpV#5G+&dUMP8QGqb7j-`g?=Y!-8EdN^6069;Pjw8#;Ju*2;+*JD@ zGsgX~6!>c2F$~q`z8W<6E25|YH|*}5ts3(H$InOYG*wjn4ID>UR##sqyW#EP!Ml#N zb6>sw-M<}l0SDQ&bUaXZn%(WAaC(I5$3HDzOxlF3~lG?ySg;1{k#V7F>4R0oJl5h5p{GKb4X`^ZsEyllW(G$CiZPE66mg zEL#4T>ocDjo8^~OARB51>E)~gv$f~XODhp{-7K^8hjlc!qeSFJ@Z)Q~(A;yBg}R*0 z`oaN^4bNxKlG$1NE(`}oc{kj1DtVu4)?0WrJ4XXIP`yUb;Nmqwe2JkGB|*Oax@Phe zLJaS4mNHRVoc2OAs=3xk*hZVX0LAac(I3aaXZ0Ux)>Z>qjSb>^H$nod%-uJbHS3&V+D4<#8`lF4i^V7TdDs-nbL2^~fRx>mqA!FA*o{6a44 zlRZ`PHt_S1nm=o*YSQEmO1fbrIg5GJe)ee%3^=U9NirUL5zO?XGjBnzD9Cs#px6AX z*JDD$7>kzSk=Zkl0$?(9Tz3+A_xW)vC3p-kkK6(@_IlyM0y!H4BLU}$Q~nBy-Mf;) zTs1c#-w&9w&sNF;Bt&Zvchj$5S~g=1CK%bz*t&Y|qn0ea6UJ$k;e$7zmqZV1NFfv5)Gp3T%3zG40R z#X;VkYY)E`nK4smb^7ilv+mI=q*!?~k;q)ab+{<+{1iUlBo%Jm>w9>1u>e1jSvVm= zn7u8cKj=0_ZT|vOZCH@UuI`fMVsbl|q#L+9B7!#0dp(8L@0b9ULMvyzVP(b?WgTU^ z)lWl*=@*z7-+++=iQtu7x8OKA*v|&G)qeTKEetN#*0zkYPLfJgA+PW{&HdgJDXVlTbCvzREYZn8xA zZqK-kPFK42Om#CY+!=qh8sb*CTIa95eO`Rns8i(F0zK1*&Ht5+6e1Z&y(S#3^$Mr%JYVu zJTs?=vS4X_n^)#S!v?@cW5eK$3T!mYyIr@$@rlDg6|MO02=S}y>3TjJ6xG?DiD_r} ztnB#whMa-%0t6W5PC9x;i5sL$%_gw-@ z7s%)wLfl~71X5l1E=Zp1L7^|Qf9(1?cRlp$d@#`HJUNvsaZC%ppxh!Smy1^`A#nTm zVg7+QPTJD|vlVzbJxFbRy?n`7sK(rN6MLe8i|Ko`_S^3r6^{D2HKs}IXyup2AdjCb zZCi_Q+G?QUXEI}w>eK0d8M@h2$>sU8RrL2xV@7!!VZL&Swc?D2B4k~MBbQggcD*w~Ot>TrDsB%7w zU~H?TLm${0OW^t;s0T*8LMSD3W`r%*_zJh&a^Q}&$l(Hek1memw4c#lXgm}UCMK}- z3^6QojJQ=hikqGGJZQUP4Vlp#+P@AyjS>i~i(XG=RS+&-4#V`hFOOX(RNyLl z5{9lzDuk||kh{ZDyWNra`(15&=9eL>2NsTieTY>et$2Iw0g)P7B{`UFbwSXa?F#w9 zl)iM02!DciUDmkHE7s_6ytiy9IB%6>xoYB|(#mkzrCDa9IX1tzbd>nscwRH>d2YDI zA$I8Z=2fw<>pJc_;`C2={?}CK{i%BMaw*j4xku_@6bIr9u54jqnZ&JLYWX=9%S-`N z=p7-s_Mn~ac;ErflTg;30UGTt(x=G`i(Vw3LXw6zuX0H}5mKMP)e5bKP?m2D;6Qd2 zRTdvI?~EV2`C5LlJDffoy1XVx!fNd7QlA-6N_NE_{fOm`IidDld=$?MCp zIfInzDstxsUIlM|DpWCDRAhG3sq<>%gKbbT~$Sl2}5|5vBEVsjv%k4QqgO1~&ZHJ;~>9zC@6a^jpA2JQ#>oQafi9q^1g;4$0dLsK@)$^(4>60aCm zT<9$y+y10BY)1X*@#t9@5j#cVHaLB#oaIt{CL{$L*QaojkQqmhKYemNzQAnPyX#1C2TMTImCOK+nP-z z32plItK}TmKltG(%}jS9+m7$7E>8F^rQYZB#66PBmoZ-(U&Ft{fuXNCu#SfKEC;Mw zNWCIY-?mF1)J8Mf-5#}O`9acF+|>Ut_>+M#I0gCrx$P0{<>s2`ohvF5N1p7bTp@S7 zSNF1k@tEbLt@}eYbdBu#7X$_pGTkv%$5^-{SGa zbS)p;ZB&G-X+0m=htEE^H0u7iVnGLxRT*Fy~mhN{$n;u&zI`_Y>m|E zwyO+wxm`y5ph6UDaVx`|l~jwvmwbV3NWV&0`)jM(4;%qU?S*OqOCOVnM?Z_ArF49~ zuy}<|ISf2pDXSxRcWg+vGEG1p=}#U_w|VAJjy+axFCUtw?Yoe$XftjeVUa?W;f#0P z657g%TEWNl$}_Y>ykZ&m6gCgCJ9Xk+W#bM}$doBdBRFM3CRj~8_LrFpo z>f8RMBzKq(qa`HQgYS{V)|*X(Y|JSzzkNq0)|jbyigcr5lq3V+(XCdTbxG|p3sFiu z;WI{QyfJ*-&<~7M1-sBOfxm%tSWUJoI|^9N>;+e&#vSC`8yB8akyg6XNV8+>?>|(C zi|f-E{ZqLz|su;<)^Z7H+>_+@MExi$#2ugOzl=L{!%}t>}yQzBpWuM~s74G8M z?7HvMnRlNmnIo!Y0^3cYO4C(kB3x~#ww5X13~7;DwvgH@p>HQ8r>o@nt;{QAmf#TH z)`JKeI9ZAis=wSOpw;AI;6;5??~IqIuD&zkl@9ON*bg4HClv9CE=lDpi}0#3;xt5` zP}n&?pey;G$tLtC+4Ys;#RYKgQ=;G)xBxz6m zAoLxw_PIgfVC4uvi8_;7&hHQfcMz_iqo3|P$-a_TP`encP&EhpzuJa^>znAvw?1>c z|0w*+vuslX_xvnJC?SO%OsZBdYNQf*`WOHXAJO51CjA*NwVxE*Uf;w}w4LYIZ6kYv zo7YD$+Ef_zH6+8-?cgvXUk0&E(k1kyFrgTH@TB&Gkh-h7ZsrWlB&g{PE*JsFus;vv zD)URqzBp=6ZR55&y1Y@bQG!j-&C^hj3}}2bvfh$mz^a}efd#LFa>Le>w<_M>d9+v! zQ(g#T4BI#L_@1T1CQ%)} z<0hd3&O7TeQj-W8uz3J+gRD8f$mQC+cRtiN-4JloJMw-=rz@^ku1Pl2;({Vu^X;d0 zX2r{FdX9WwUoPLjBN{b>PV>1+eER4OmRD%tQ03M!#p||PQ0PvI?Q8vsk;Y_Kgi45h z7qUu(=`@uozib!9{jpBsrC+!)Jqhs3wnUxXI-)V3`o(Yg2hMc9uV2b9-(3(EE)#hL zT@(G+q{{yv9V}!hD)iIkzer9s?%hn-^-*3s_x=a^#TA*-lP@4wPm=x6U~Nu9$vco7 z^>w6@;jTiYV|}sHo{|2zxIa1iWYPPndK9j+?=(FPL;G~DSB#c7nz|T6 zP~C3j7as029R06NI$rFaVeJ7%lhoqb$&TIc6H3*v2vLAkt-fgJW>9#z^82$&RgXywlUo zdy&~!?BiOLRHIUeA!NKotz(5`{KGa37kwC(W3C8ssR0It5{zNFgIkHny@CcaV3K>(5 zm41Zeq&yN{w75G?pyqAd3?3kZ5iTNx1EbUw9vTO0)oGiRDxdBBLc0xuv@ygPFhqi<|E zVX)u=7P{F_mL+aQ?__*B;oCapR_ndC5RKh#gIZ$O*q?YZhuob4a;&vob57kme4tu2 zC$~?>-yzfsNtP{p++yvZ6Qf-A!k$`2(jL1;tTG{C$h`4uBz+C1r;<*H&)_7=g}%8H zTVW8)hV_9<`gpe}IO@s`sxh8B+7t59iu~!tQ|s39CTf3A*9nWAQVD_phn=Q#%?i1Y zv3jEb4V|G(+m}1($@*#~4{mOC9~+J-jcQZT67#gE%MBDP67orJwE;AH(#icH+t_bUh1x!J@!6jh68lnv(Q{*85nXf&GBDy0*D&n zx#x(XZR5m~f6bOYE9rl`0U^N{2by}xj$rR#pU7718f}%sPS0|3g~b#&F?`gL zm`-tWZdL`OZ4R=GL1S#497bG!_4_gmQpJ#nk2p zWqic}N*+Il@GGJrBTH53K{cm9JS*Q8L?uY7P2r86JxWTBG9*O?I;c8R6p*9Go}Yb$ zidPw5{fmO-6PUuMd&N0E#jM5zT$OU@T&GR|Ntg(sc$*^uqkV*YBGM1ViA9>Nb!n3S zkZ-Iqu}C#Nb)|MuIQ(A!sVt!YD}W~5Si$4$Z%^_KZ%fZ;>>}5Bf$GE>t$~tJOcot+ z;}FlY3P0Q6B_>B9)q+}?PXG%LVCfbDJ84!3QQwo6XTBhoJw)HF!tdmYq;AhTkh6N2 z+&OeEu-zVl#up);M9b$Xjn?!0!5pb?KJM*WmN!d6GO(u+P^dacueVgJJqCA)O@SWw zFemE>H}eAP!_x@}jx+W|8DEgfZUk5NFd&NXBgze zeBi}bpnRk5qIOpOSY1=I;<@_r((Sfn21r|3LR`Rr+JWRqn|S~4A5&9Y3d?jluUUB; z1Iv{}^>M71KoSMS^A64(58T5mlhKWjzHjj@^2i*#`$$)3we7xL#qoqKf`<~QOmp0} zX0ya*)^-RqJH+Vhh*#9UE5DB`s|t95_&FJ;xy?2FNJY@H!7>yvK$wGV{Lr@`lA~7V zW%Q6q<8M~y^=y48i~X97a^Z!FDm_%pgAaRc*62Da7PH3hd$``{N3A!2H?9lR)pG|- z(uxI=`JHh4E%%l9X~(sqOQKe>Cv%rWPcIjiFU~DPLpg}#1MgAx|6MvSzWM$`U4Hi) zC_4LB(oVgj39K7^R?8Gh%UTKN6x)zBs(#8KUmNk1q5t(-|tc|ZQO|7a0 zjjXEk8O#&YyTwy=>Z>QGm*}0u5RWFAFC+U{^2AAy-}VTeKa;?@$Xim!%L5xbia4cP z_V+|`vNS@FB3Aj zU00eVl&5smKp*Poig>qSKZQ1aD8_XHT!;HnWG#s23Iyi_IpjFPrV-)6bd8G`ZZXgt z``v(;v-> zagXD%=;+M>${{NYjR49%KXA$y8v^mR+7q^pd zMdK9(yb_|#tkM!)9ZSDj^Bs5nM7w@tC+n_rSn?R9*?RIcbWc8qJ#bUU3>DM;SUSri z-TjbLx@Fr`=;_-MM!1}Bzb%VH@~5UDy0aqk;SD}U1#*|%2j%47aDOF^dLDQ?Pc!9( z!G$X;PO)l!^vjku9dMmvI+LcztJ)k};9XzOW&m3=Y;IGtmnO`Gnl*&cOw)W#-=2Bn ztkOAcRxO;pkOl5OJw{CG%3F=;eoU=i>Hly68l1Sxp@q*upeFiW4Phx;K_%|}=CG0H z@oBb4_Ep^E-5W<>i57C<-eIb4Bom{EGLg^=TzB!qn}wx68n)g}j5;mubasB5zN9># z^~X73v_b2t)A&g9{6;R5+n%_<&2N6P?qlf$29~z%UE98$@z6oy`A4$U4=Eizdb6Sa zGh@SYN)@`j{M0jOyzu8Sv@i58)#dc1HWxxx7d=%)jKKI?x?^7ER6E3myF*9jWoN;A zA|~hnHg#Hyr?=zH(w)eoVd7?MF~-xQy?Xb%FI#{-ZQ1`Le%+M$Cq^W*ePiOozc=N3 zpOwDkrQ?H>i50aa#-$}@G`Ez6i=4+wIbBxs*rHN=5u9^~)Zn$6E*7~>xcbqk24ZTB zzHccUWztn_$@1j+epa}lCC(UC*2yqvG2fx}f3pB4$ee)AO8nr4e9l9*@Tf%{F4x!N z0|K;1pD=W%>Jo~a8wx|daLSU$X46}_O-)&VW;E02Uyk|TS7kUtHS#ZMeod;9 zY4e2li3~Uq(%e*O&?_;CokhI19q~1z#Pa3!WOhTzcU31}BJa9mv__N#u-T3&Nv}j$ z5ipO|M(uZTza+U@x$WNIjLQv?CSs50y@M)e`C@3)%mQ03f8d!<3es@(B{Zh?iGwSf zi43GYZ|!7e7_Ishgu8yzJG=P$pNF`NVYj~9Nem z2-Jf{9=f4aMMFz0QX#j%nvfMxvUa3M&wP6{{ldk^M0J+%{3@)QwH8`O2{es0HS54o zYvrYG;a%3JB)N5-y>7@I0C4xqrS^bx|Mn&qE$U~7X6qfQ zLqPnv%Yt7BacQ`<+u5r3$1pT3&=SPydXYBb74f>74QDZc8vwL?#`mem$|s@Y)c~BI zmFKe7okWf{>qrgxDCHS25^o`{;MPe|nI}`+=yOHi&$g%HK8^w%zu|Hp5JB<79SQvg z$j+f-FP1^A%nz3Ihld@OjWUZ&zqX3WVSy5op?8$J!1w1GAYs*t=*=H4WbwI6Q4MFb z!J9_>ftPU}w2V3#PbYKjsRxf4W{?$JdrZNPEq!I8rux1MGd~M4f%9nn9B%b< zu|dnIR;ZDAWim{z0>`uc!V?8fH<)<>c|G50=*0#w!|Rw@s=u_tF5<@c>|d+M zHS@*%f@Dxk$fq@M?Nmtkr#w5i514Qg^@C!xLYw4}f~b__m|VwXQBEFm$;U9-nkA0; zDS+&KHKN^bf0Qc@3t%Rju~p7wx!aivb4Xiy*$r#4EJw&G-6*RfY9)eLD*@hp4jQ` z*Ok;uBnuKDINM*t?MykD66)kQ!{Y<;Yc1F1w3ehCJS$J8#hT8dl#*5j1jgljn%Grq z9gCl#LQSx1n!`JRZIDKJ(Ea5bBwZN(c_vHQU&1Qopj=n6NU&72S#x)O{!4 zKAuQj^ecmnR^nK1{D_=Y2IJ)|+Fp+Rgomc_%t4oEX?`bNkvH4V9IsIkk$Xt5;3(Tm_QObF`xaX z)fy)ov3Z?lA9H9QW5f?57#0Ry1P@>W}rKEH!l*vJdi7Tu#IC0 z4}Hg+DEI_2j=D*4mI<-fe5vIkeM-69J%}`ENLtfzE#54;C53RB5d~U3$`F%KDr`t@ z=AQYHYP3s;kJvdP^i1TUNK3C=X<-$*$gTu~PJ|fzC4UP9LDXHnmw2w0!+$i!nQF7&4c{8+!P=GavYZP|VlBHFC@JX1kp*kr+M(qAEbY2&gS1W25)B4tyoUa`@6Vm#!}4wT?De0tqPfd+L|6?8XU_USj0=RsAH{D8Y)Fyk zcvFHFf!@>DZAd6}k&&y%hSf2)=DUJvrzjO_Mp*iEpgRt@aOgApY3^yIPG9qxNMx6F1Xd-dHZ&Q~2=WZEV=d!S&dd zA^tpU>y+Ae1pz}JnF3(v=fF9Y-7hzx%LiY!p>@*qspy*@pe&;EhQ5`qm;^5U{QmYh zOs+_h86y!79g_HwcdDwhg}*FxP|37#UhH zl#t7u%A2d-g(+b}jH-tHtsOJU$48eeA2hEsTpkVTLyu~Q9Cy8pl8yp@9m)Ug@aOCh z=_zCboA5Kpqq0SFZGD33mjTVW)!&awyyO=Olqvna$Q*q3P|MN^2L8!&pcb_!E{O#t zxcXhA)cHT(86cEdNJa-qjkbT}Oq8y5OUBT1u@ISE7nIHoc*(3@_#fW=yoI`N%l@$p zLxSXqEir?lF{gtDAd(pOLrm^FZKlQBCktGx03DwYCV%<)8tc99?)S9%myVi2k6y{n z=N*>WNX?B6i!kqwk!o+1W@4wdI?fFc}9BgJ-uc0Tr^(c+06`aHedTD&t2h;_EZ)q+}x(ddI>uCngwz5cf(@ zZ8S0X=bO3VDVD5Ggg8?i^qN#S82D3fty2D@lykw8W+Nt3UDdJg>Oh!6*L^T$*!#V0 z@1XzX9`A!G|Nh5B`9iymrccdu=|Vdkf9VxDRhQ55lf@pv7g zk=W6^9vOgQ9$jjYeABm>hVID(Jb79f`Q7a7j5`$AdTq)Oxz#h&ngd&l6P~|nPBR)c zG@FYt&5!r!#O04`eYG7#Dwj;}+X89jK3%=I5D)2G?(bnFJZnksw0W9cYi4FFU~c69<7BX)+D&X(I-`~sQMS!*YS-L-^VZiq z<@;?WrWxMJp9K$s!r}r3C<|AD*f}x+h*0e($7~-U}VMJ*Y&JPnZ%e%I|iZaEov~aIszT4n6bXV*}0>XoeduK`t$W_Nj>C9$U}?f&GL_% zb}h3!>d_w&pE#PTDdVLpMeggim^l)bSJoMcA}>l(shP|3lCH}Doj3nr<1mKHdm8J% z0zeEq{u7UNM0zN2_pdE$hHO+)7$EAgHCiAHPg)`_%Cm9%bby}hoEsckk5=%Sq#?U& zl*x#BxE~te&GJ68JHOoG*<^nXP$WIO(w^m0da(Xwv6~cf|8|WrMQ&(DL2bvNzn$38 zer-pP({GxlE3@cQPJkp)%apuFQ$=Bo9xX!!MaqC9>=MpDrN~Usm#cuPdR)yqZdUyD z`k<};3If9vyvc@FMxQ+qftcTf!jGn7Z1Fa0l@d5+lpcE(I``-#LWX|3#VbFuT=)%Z zbk{!9{h^mVlquxg4iKm9@>{9k;aKo1Va zz@g-Do|bE3?;9lPQ)wn@+awNzy*5Y9=x=%4r-L2_IdXc7gcn8=O6^VilsTh(8v5ak zT_34i-Vf+1(qy#;yV*FdM!M*l1@GGJ`*!F2ya-E(skinZ=cXW79BfajjLANdsq9&T z0>1}(bK7|1)1=m)y)6t7!OiwbT-Oe$6BXyx&%jV3x@86sh_e*zBE?PS>$T4hKgid0 zoZ~IRn=P;0VJE8?%AzBm70b4Nz!~zJuB`B)k)F^~@icj4%_9BtbEaQRIQX`tw^rcT zf*VWphiBsuZ9!N9m|8rTaZWBh9nE9GIHD>DT3L2((43Ka($-z|uy0VEzI3nzW_mDf zca=Jzm1O$qI@9U$6KpujqJob%y2C(Rf8t6I4|5T&0mfxA0gaW?s%BBmzV_)_9LrMO ze5n-DwrV!V6bR4+Y={6hoa7r2jL!~KJViKdS$eWntDkJc^9f+9{{5?6jLnZ+;u^_; z9FDOo^ZSLbXY8u+(Fc;7SY`1qqtL%o9M!G|(so_zO8-f4!%lj`2(t9W39w#;pI1noTylpqWvb3 zZ9EB3$iks}Qb%aG8AdF~!{~Tv>=+J@C_=Pha z-80s{hAwOKq#26-Ri1B;8$TawuCdQ-JpdOd@k%i)y{2-%Ww(V7_0T1K1$tKd7M{Fb zI<5X|q4{U);I4XwLI?(meG|QE{pK@8ex;_V1CDfPk!OwPHS7#<`(;b=!?gk^X!O6{ zL4L$P5;@2sR~XH|A_3hp+(4`oZ{y+Cxy>3Wc%W5eE+g`U0?#F>)BSvjLDQ}3rq9e4 z>}t{SE@R92L-t*%BlK)g#2nvS@#@nfcgw}~mCUc_R!Pm0&&V%xc%RkQ?0 z5Az==7==@eu2H>Te8(Z3EIa$6uG_dYMIViKv0{S|?ymlxB22nm0Kdw`SEx&QK_O)I{m(&ZBuCpp!?%4d1y)K z^vpT^{cZr6MUpAGx}!{XHL>j=G`Wh>&AFY_L)OCLE+S$&%(>Ty%!%wVYq#uA#ezAY zd}mA=Q7KQD1z1zw4!-@eC;LHP z9y>#rwyQo6=M=B*X&ly*Uvf&1DJi(|tPi;=csFQYM)V;K5K@-_1hZ!M~U7A(9ciB+#~x= z6gIcte3hiZPv$$YaeT)42SA#q<%I_Tc~h?1#!^*ycOh@GX0bxt1j9#w9j{N{s-ulc z>k3m|6$bRmen?jnXk8K8dM!9k{G!JX>AW+j>wMUz}Q?hw9yZ% zVtFLBXSF=#g9VubPB{+%b@20+aCX1t-x|RG`7XwVb5ty(EJXb82ckph1J4g$39S9{ zqZK{IH-crY^|q+>i^O>D!6$D*dC4)tXKNI@UzxS*=Bdey;Hb}Bo8vb6BFK!F5z2u>*!cL`8v zfub#Kai`D{+%;%%E3^~}0e=}!R&R%=%z1Nip zzZ>g?zvkZAd!{oxy;;Etql%4B>swdiwCqy1?T;IW3u&(t4(7HU9G4#5+-^cH7H&7= z^5^cmU|$A4Ub-`udM*44(0k}Ys@*eH6vi6hx(S?lxGj4v?%W#7BnNxm&8XS)tD-VY zWtaCl&kPGsp!B&#Iu#y1%2bOmiy&5lod}eRr`hsA6rFphxma8jgJ!;HKk1z~XbxnT z6MZNnVY4;+7)|G`9Mx|G6KGcm551Fo&936;tTk`8Z+rzc0dVF&bw6~swd;|uz9?YmII%T_SL!^wrU!7!-$?eAx#E%g%F2_>KeX`z zPM9(YA<(Az_iVxsdY8nb+UJt7B6Ew6@pcoW8*BO!zj)*uuP#c2ZSZ0{V@0sOrfAA6 z!B~PaoTmh)PS5dWN6uza0EIBaSD?f}Ue|f-2LR<>#4^uZh2SpZO=^;GqRa*N8MHtoHQTvrsgGQ&hFHmY;EK`kj+|}#!W3Dv#g&L>_c;FF>RCv&JsSAS1-8~bx8fOzp zUa_0#c{SS42eT(P68p~Tof)GDFQ(B|OP#0a7W6x5M@>II2-|bJSAAtRl{1mXM;rON zv;l(K^wMdAvWyn|+(MG{Hw0JRy4p{SkNa2{M7|^L*sV;*`{?hRJuasoP8k{ouehID zDgtTsrntF&wmHI!QlN=DIBA8^D+$i0{7j<7I! zpsyL0_E%M#A2uHJv}YW;H+NgSA4mJ6DjOd31T!!_{(9hbR@*JLPhS4nnG!#l(ff)G z^QK6vTLLP`G{$Q{?m>K@Yw0p11vY=gG5Zhx>q7g#?;(ihKO8TbwZMz*cg4O7)O3IW zjNx2D%$hqA&DfLp_B3n9l(t|DS|Tmd&u}sz2`Ubte^yvg7Q6kMXZ04pU_lSs)omr7 z=(J$y>3Es>CTqmbXJ#T3>`bVU@`KCB4Y(3*)>THvqByw0Fr3n1U-Y(#C$-mrneTnZ zSe@4^(@8V4l%*Yn+yG8$>9Q@nmB$eL9Qi5UE;)CC7-#){bV&GV_io4+m5{UNIufhn zrsGd9+TX9(+E7Je*#*VDoZn5flkj&A#p-;T{zTGD$ieoj!#cZvCb7+?u7cSkY9$zOo!qFi?EvKOdwK@y6dZd~X*& zp4R4iJLmp1)&G!sFxES$m#<2>g3RT%)_#P~>%H%@lnSm_Yd4Vyk9g5~Vq;d#Hqtz2 zJo`pUF-uQo%lV~gV!l1hm)@6gNMrAvG96K)?QfsgkV)8%iH^$<`y>E<`%;33*N#6L zZRd{6%whxhZ@tN-OlwND%BmE;s^Lib}ppr*Q!Nw#!0+-9h zB1_xa{9@0<$F;=@1Hihss6df*j)YzQuwy-kx+QL_UR~&p{&}Jb>khtk{yVGCpcL4e zG*uIpR(Z9&(dT;;u`@?oIl6WC!ZyM8%6%2QY(C`OzFD*$If*+MS0f7G5eUL<)u}UB z)mdI2G>zS!=9Q*zSm|}NKxW8ezk)*}DX^v4o<52jJx4w;Mavx>g4sM10eUp4A#x;SDP_uiPSQ`m~4XO%NEEoK6tf?>$CXVA&N; z<2^ax5q$x?z?Uk2<5}G(?&bQ(StMqsnwE+FxGKjbIS#zhbAB%vbD2~_=`m7m7wkN( zK=0t_Rcqk|Tfxah+ZS`iV_=EIV6{CoU%frR`xa;vJl=r|;xi$5TNOgo!a-MVwURCP zY}4a2cUV8UN&x0;6^4vzHl^^#?{?SehruOyRi?4KoLy$H>s zS6a(QA6V)ry{MPA4Lu5`zw`%c@B$iK_eT`wNFAK@Eeetn?s(TISEfA#>uiClb6qV~ z4Ab^sUepK4b`?f&i__ku;m=j<@T~&6ZB-jJU$DeLZ1KTxpD{jZAF?oSqhyK*rxVHN z4B!39L6F8tZ{h2bl4;>QA;Je{zv>VD1NwY*OB8o!TwV;(3@z;vRl=PcIh7Z^1Aw$$ zcA<~@L5u^&78CE9QpKtGcYi8ofuAt>I7IM&1M>d|k}1F~&L$A%=g~QO2cjVfyMy9P z#X&3HiU+DcpeJdR1`@<5zvA2S`{$QslppExyHS(->Wxk~7XX#yHM5z%`pem)ep`v$BgeXJ_$6Hlc_AY$Yk&t?mWko>kNZRRSg z#!f1?c7JczD!*M}Ztt$lwK#-#YJsAR4r(GZL!HWo+gtQpZ&WwybxkyxB_a zU%r?k8PUsr4HFBa;oZ)tMvUq<68QE~29+3964q^WIi@m6=LaR3G5PGJeX2RTsK1kn z>`_mBMyqc$Nb>M0NW?Kwocrb+;aJC#X2OE+vcS5+{}$5lKGO9h?rESlw+wIIw5Nkp z(!}yR3d}WR;%wRbK5ZV53`%L}%W+=vzS>%MIj3(2%qT7VnvsVN6BZ(MFD!;OAJ&=@ zyv%3YOV*UAONbXz39mJ=o&6+|P{&Ktc!0EGSgcGX)WB)TsZpApYw$R-EN+8#q|KNM zmG9<>w#Wnnba!|n4Y}RM@R7ylr0mVw<}BI$YzuEXq@!FxQ-_qrOo|_9LY!KJ;eU1d zj{FAR*VMiZnq`aa7)j0s9ifj}D%A3+^LyG3-TqWipqn>Lp#~$cm&box{pfwuvUV0q zlZMqHQ^g~=o_5n#=Qe1WCO*J|QYBYa>o==k8`?4hkvH{MMpdEeQx&Af$KZ@%CvbX`E;)m zKB;Ks>pn)s!}qif*xXC=&-|q93`x=j>RhLl8N{llRKo{sr_G(ZGhVmnodj>>QXkHi zcu(%?qESPK1tJFj&^sqpk`7m&cnU<4ggpi7C@Oh6dy51>ltjttRa~VVf*k!XH&ePUM>W8+&&%b1YbudOAQ2A z&`bJtH3&S!&`KZb)jAz;TVj3V^N}p*OB!A1=Gp9q_Lmgxd)olnt*h)w`zN8`y^t<< zgA#R`C$DHKMSIvr_sd#ptQuLFWx}v86%^y+Q>yW7In@E|`t{(WAM)s=w}lyd3$7(J z?nu~5zoIL+G0`^o7_jJ`ImO#d#$5l6YR}8o3=j3yI`-$DPadvGUfp}EkjiSsNhuO1p1pB$>U|_ zY==poAILLg>ciFL;o_f9LI+pkG$TQkkJZi-QB;|Oodv%89*qOL=Z(#e?@nn+qa_rg zoy=f_xH0z2hup6E4bOw~D~JSD45>Ft4H1aNpK^honT_5)JV( z(a$~fc$u0voMei_ySI-+7AB_7Oly7C@ANgtg$UqTyPAi@1}IDq$R%gSFL|wL+i4yp z6bKd)RiNozhWx?Y`4aH1tntALOA(HzmD430bA?*e$VqxgeInWTFblqu;rw2@|)*}oO;((E}OIo1YE#$7)gM!cjO_#n?Q-| zDK>xBN~RRs0H|u(d1j>N502oVoqn?x6pl%KO*~d+(So89v>KThp#_n5N_Sxi%;&-5 zIdv2RV`@v@veim8zZSn@#s)qPU5^(mr9OJ_xW*Ed_qOZavmsPaxiTlefzJopXLF9E4-$w)u9 z%u#WCMWZt`z`h`W$I1_IakFs1^#lY)1M@3}9SS|=<7EW8&q^Ve7?A5^5UguW(`jLjMQx_NTK1Q5i7UI?31z5 z5?ssN>iL!W_j|z`ni}-9Ds;)~t#vOWZ~K+1QP--{Kgf|(6R-P5I<|$#h=^2K7IN$xd0A%0P3@w8hgU3RrhSfGmo@ z=jQiG@fegzlCBH!dm$bsl;)Z@!o+P#DTZf(uWe*jFhnMb!z0zl)VV^8!b zINN+>FQ@}zheYd4Z0Zy+G3Ayv#j`HHiybPOz-yVGe#MQx$q0(t*lULxr;YM zzDD9+F3F>Gceo}xz0yIl>FPhO+JWEYpXdT^E*h{3&bsp=VN7{#glJ%Zz>f-1hxA*e z!D6wxMl@qHy86#JC(Rplq)O;>bFCAaxGfj`S1ABA=n>9g;+L|$+;Jl^R?Nl(-S};h zR^LTT3>gU_lTFka^SSiNTe*Bn$+>kuUykumv8u|0slAp2`mJso{nQ8NbFsz$^#aZT z8w=3gH|)Cq#oT_2MhW^2Vp_tH@8I@$q46>K*O8CWqM#ySD!%63QDp6E7p=h0j%^mt zzjhkUuDCs!l$J1gXM0?H4Cz`+W5Gr8Sb5lXjK<47(G#DSnkmTAh6xV9YYLXPjmrzy z*GE||Xn8*B^P9Tmc497v$|AX0?!vye^?XCTXAiAvi3WV~M?XA{p6}-l+XV+_|4vC_ zHuiU+R+{ShRR%RG8vmv`-wARjR7B@aFE%&AZ=>Qo+0=vzt&WBNT`j{iZ8=fTb5*VsUf0CELUA8z*2j6d9zJU`R zf2r<1?b3KasH%doFPjdSyGskE{6#Azo4QM(!^W4<;w7?(&!gg@fZe8|UM1-OWzDfI zjBu%LCrP0&=_IlVH7u%+^ovcC@rby003yXKKI+^%=L+mT6$2Euj zExp|VxH!fV5?tZ#V)#sr9o=8N8Yj~aAkthUkb_Rc0d_hPIEUkChi@<}BvjD$FY6wb zWniUhhd@&{lxbVrcG(h@9cJR*)lp`w+6!{&PafL+3Z|x? zQ|P{i>9JYnI`t&5T$UG__Mt|d6}B3(-Tb|L1K(@MjZ7GIog7phJ25Jf)!0kdP4d~~ zC|rHAK4eT@B_f`$%H=NH)UN>r)bUELX+D3}#*FDFjvqL797Hi{eTQo<=#Crn3`J(% zb;&j&-5{c@VdxjMn3WnDEhm$+heBLNFor~o8#-F6T1o?kqooL_r&x04*}dV+?`zC zCj1>Xg-b||DI%FZ`m5&`3|A;Q3mGLBmwdg*xm_jER>0MqI66k^r^3<^inqrd3){|1 z|2tA>T<^cGrKCd}|3`he`o8O9lLWRYaN--lD?9wNdJ)0TP%XaIi^uP>?u#WkHD_v` zq4o-)Y{pFl65L-MTG()_G#!KW1iWLAJf$u)6? zh}_cWiSpBjjL5j!%~Nu*znr54@z{}@J7)cLWEq+pt39c$$IiI%++wvpayDj`Y|fLZ z4|3Fu_+=!4l~^lHqh3nxLoUeb(EXb)1Y-&AyQr4t5aBtGk`V6BJWyijJk`4(j^;iSUi@-ZdTb-Sgj z>O(6hmHTcwH(v{c*TICr;lef|W@!40s_F~xbWYM#jG;o^h|Yxt$u)Lqh7?7fj)d9c zqf*SlFq!;QRh8mDdAuHnvF4Vk!E$Pg53PsZM~yHitK>^hu_JSrrN=SVzZQ}()fX2= zE*gRi+Ro|wS4}R@Xx*G^Yp$g3%Z+koYc4Lhd%r4FxJQj;gO3Dt%1fAdzF(OV-WPqv8yi$%zv<_1$05%-9f#qwMCDAAC3S>(8vdZr_Nu zS<~w;%34W_L~QJD5b^% zhY+;*7MXZUQR&|brwBi9y;!J8O@-|W5$1a?$N^gr7!wy4r4euq&fWd_t9K-Y#pSCb zfo_gaG(LwtWHdjQqeZX+jsX5{%n~ z$$Nq8<41s#n=&tc&^(V1P9lY$19d)>69mum%2rE3m^A@Um5bKe7oJ=!z0|r)yGLAz z@V6M7+T&oZW^9q5=Or4Vg0F9z6T*l)X3Yue0CK}~<7@V8>y8q}@Egs(GHQd^Ml!q> z*mFI4g{WR%dt7M-KbqJFyv($$Ch*^E^QWu)uM+8heg1Q)p2TP7j3t-y8TTN3mPM}6-bocu*>qdFNTDxJlv4igWHr%$)I+Ze$bg))HY1yOeqfamf$eFVtBE=C zs?JsQEzSTHM2d|L%KGZyspVmNdD-UehS;iuu4pd%(hmF!3y9UP*Z}V4i?0y-Sy2HW zmwgPnTg4MCFlrkYwc6A&yjIG%WRUNL4A@J(yW1WX{22MP+jPeF@!H$#`bX)Vm9|Yg zj9b(rRANt}M*k5_QUA#zRtVVxQ|{TiV;%M&`L|gj=d z+}ver6u6mC%q~(IoES)HJLM)H9i%f9-SOOB*FUJ8NRq_ZyY@ae7-H!7L0P35yz|E9 zRrFhx!C1x5K}EVpR*}(!RE?*cd$N5rvee?q8O0YA9}Bog?lgbO4V@Vgrh}4JN33EO z1J~pu$j#JzZgFxV*@8Jpw_^h@e_)e{33>!CqwqV+QVqnr$0Aeh$^|1sIzOfM?w=d3 z9*)2iB|A?xB6ya>;UYZ^mV~P`vj^`!$B47TjMPI4zAHX{of8kzZR}}0Owzb$Z2mdy zJNV=-ZrfP{dsZg0f{XV+m(*3p-aMIiE>L~2lF-{q{~KU!EaEvhr2QqSU!wsL3&_>t7D&+ljkKFwggIhfM0-H8sttf$Kl&Rj z;08hFD*fd`WXBOWibK^Yn5L7CXJJf5!&P{xjW(%iutUVn(nEdAx84+p4B(7@A5_Kl z2vn=)_oxJizcXvNZqoIzcJ{PgY5=K%ox8Dz=jcqb(h+S`AE@h?PbvFu>0H0tNm>1> zCw%G;KkccuUs9zW+x7IKnGwnfA&>aVCrp3nG2}H_lzc!^_hmSdB(PZ+ATu`}41Ecv zhGVOxBa*bZaLOuX5;0ZO33pn?jUKd*8Rb}UpI4eMaB*{6Mq86RcTOAV7($@0^toCK zJp$RdUr8jyiXIMR+xR?r-k?Mvn>-l@9vg|~X0i5ksWy{iS!>tB*}(X!f`^%gi5$mJ zw)FxX*&)^9;$p+$^H4zH>C1L>5C!Y*@mOVqZrrz?NM48^BJ|l zJx?!Y5D?k9W-7`PZ(~M&bK~Ht8X>k*7AAbXrF-$SkkzagU&%u8h3PKkYWGrku8iLh zgriD-FN_Stl*|uo_+&g8d}3%%*Q!|+8gkh9TJC7qXs2uKGJb=4<^CqE`Bp;kE=)DQ zE)JFV6AJQZ%4bnD1uhL+4hLAyPmnE7OSB2Ws9K@5dQ;3MM%BuvBJ#03ek=x13af-F z51Yi0nX8&H6r}}$_lgd?-n_S$2ybty9>+_Sf2F~H&a@2lOaGbSku03L|ISgbI(K~z zqP@^1gw|lSc`vOpwXKsq%!l?`i-i2A=8VXOBX0Z@LI=?C0OF~8b4qH*rF3e>FIA^{ zGu+vx;chaG{V<6GeUdMv7#!0k)QNpdFz;jTjrbNrAv`ML%TxK3%z zxYPmum|m7UzXX_kA>Lx_Vi?<(@o}=O7d~L9N|AEhx8c>Ps%7nQRTco75XW?nBfxFZ zw%lxA{?67LP?&ceXfkcE3XlUjkPhntjW<}|lt~af;5YEd-Q|n%9359-KCJ-$y~J!1 z`Tc2+ebE(6m^Kq)d%{eZzQ)bn$MPOYuR-8}oYY?Bav#K|m3DvnZ6wVz+KHFM5 zX+|wEnr$sxSyfS9Vfd*Fja4{sxAKPF936Tc-68n*hMsO|()V%O+v8eiMh)z!I!NmP z7n~F9r%#?A2m%$_61}5JOng1T8~yGuFAsW-IpixG@g=L!;DAE9jx(GsQ)Tdm zO~$zNstI)^WR$p}{d3_Wh!yqW)T0gFUu(8yq?nB<)VhG5$@9kp9ntw;yD7UT7$JpG!jE!x&HLg=jGd4P7tSlwv_E(BZ1mP-g^S4i&bkJY7_GY>lr| zn;fS9YW^$COh@HInTXmc;@q4Mu|SavF3p4v`+m1ui`MxT%dV0 z9yRIktgiP!_{+5CqZJ1^Ef){JknB^BSrE~M10_nCc>2g!B@xSHqJfqH6I*I!|3J%> zIXg$kIeqM=C#&ST^113oWQ%4!8WK=O% zDd&Y0>0^4F+RA^oc=&FT;5M3@oO>g#ZXYq+^)|@*8n?rc6(7uKKF!;7raO2o2$ar9 zO6$jPtQ&%|Xp35VrHJ=M zJ6mw}2^p}C=4(XB{;Gk9&@WIt!}?(>;9TcR|N z!?Nw{Br12P;jozXoBA z)|!DB6iCkx5%cxTuBNPM;4`?!$&}mH58062_H@(PbLNyGEXwCdDI@{+n1E z1Ab#W?G9$NbOfO9ZKI7=)YWN*x`nb`Waj7YL+Uu6t(>oEi2Kx@Kf+9Q6>4%-OP=W} zFZGW9-35S!TNtSf@CwvR&f58XE1h(lV_6B zbT>UFfdtGUky1_Cp=@6l@?^i{@MSEbvhp7eW=K-_0FjAz0Z%mDrJP^T?mN5Xb_;EL zI^6it%-KK*z_MecN%Nl0TpMd=2OJsDM#SvhnvDgjGXV-ANgkLe!oRK6aG@9w-8dO5 zS9;fzM~*Y)Ap_vc4zv!gpV0mc)&BTr#xVMY@f_uJxkdoh!J^?8{8dVK%_+Yx&q7UAlW?j zYa|`AY&5jgz;f+76)R{_+u^0^pgO=UxgR?kTimisdYsmW`z2K23^LmbSx!J&?m2p6e+_-m5J2 z-fc7C)WBYBDL8%S8iC z9)vFwD*xU*{P>WquhqbUc(5CqN&pt#!MF%m)Or~0HtM-&jkU_~6O>M-P>L5HT13|j zxJ`)L)lgEn)6Shpg{w}`3!!#^m0$TvA_KGu?zUUYRW z3pdF6D99lLMecZuJ7@aX1iO{erS0sx`qF`nx~fHGGP`yk9AD`VcO_vgUN$F5woB2? zF%vZZ7Wuh4c(=EdebMhy(Zj$7U zWLhc=P%QRub>{y&AGAbmC3El1w`U^$hceT4N55A>aFq_yL>Y8A zd1*s_>ZbP=Fu|*}Zho32vIXXWn!-Cp+=9Cn6Sp|YgJzy4`vX@QX0p9oy50aXjA^Ct0-f#<-|0~O-?QXEkl<IA4=1a?=q+YHXTj9+`e1o#{NK}2k~T|+1jUq< zIm_0S(q-Rwdy0hc5yrWwtTrz;Q9{|cXt8Z>%hqq3Je@UydRkN6yqE767I7ljugg@B z=yN`9s_{>oO%5r4zrvM*rsK{vQ0?Ndw8v&Y#e2(Iejuz#LDB@jh4lMyvZnmZa}uqVqhg zs4b|sZZ}g%*sPQVNil!^t^=2wh)?9{AM^q7q`4f`ARhM~Lxk!7FQLL#?CAQx5a)Sc zzx6L!G>8Un1<`rdc+SZ>jO|fveloTh>9$?)0rA#Mi3e*-6PUIHNE-bea=q&k?;`!} z;oWT?Xd+M3?(Yln@leA3j4u4lj&8>n9TY>J?4JR-`-`a|$tNPdGe#{aMnY6Gd7od3cUbQu&kG(-OOkhTX+K|lRoW3awDqEgqf zuj10A;3z>XOjb>ibErIa5Yxq?VvYz<4&=$IcWa$?l)h!f5$7QSIU!gCacFNed6S99K-_-hmwECBE3fOoBu z?$>%E-nkN80NiPf8TpFM#&~c2Qlrox-c1i6j*DhhPQFGyYB~M0XyI3HqLFHAm?%jR z;8_al=*1FzK=&mUd0*L%-4+un&eFi2THNO*TUB3)a&GpH^4#uk7R}oHtbyNeK3OH6 zabhIzGj-T?^Vi>X94~av8O?qUW(}f;j1CjOW<5%0Q60gbh1iX@B_QG>=F&r|JWix~ z;Pu*I{dl=tZt3;Li#U{?G6tK+k?%=-oJakP!Rzkoc= zv2U<`z{axJYcs_!@zowHtaBDlkqJDTc#XABWe@ln?xxOZwGP*Ag)?HM8SMIF`yq`K zoWqq(E@WRRM$hfaV?mIjs8?B%)K2RQt@+ts4n_zX2S)Ud065V$vS}_cZ+)e$$3dpJ*$&FF88v6N z6W?C?0^jw+Y%zoV%(D-^`@?5EdSXHRU*e$4!8DexXGUD&BSV(JPrz(Rk`%V+mRz8XQRE7X0qeU-OSi@(S< zdow=dmpsI^ei!aI?wSyk=8OQ1fB%{=u;^iWS1x-4T?_F#vAp~SSts;cW)%U2P7*o1Bt4Z754vY$)c z5?M#~XcImD=idt1$yFXP%v#lRKCU!G>4t0hnIP0-qclSP64~P8S8nR9I{#5a*ZcGm zS7_9&w<`@)FT}u6!IGm;{F6y6U)hk!_3MRGi?O-qR95Wa9|WiShOFP4zdURS1~=+G zwd=}_7_-BTrY4WCZw!X2v*Ckq+F3esQxk<#8Bam z?N*RrxpYP4ekXl-OH%LWI>;4nIvLA_LIH$oA$g;&(S|^GZ1@_~Vr_DliFUf45W4 znlo-;zCy6PS5l5QFpieXK%;_bot%2q%dVqFe(CP{9eni3kVEB1lVE>@H#`>_Bjm>+ zMOAYlCQd~DGXF0*tUH~rG@{k1OZ3SJv-WMw@|n127#1pPY^h90NX+pRdtDXj0X#KX zs&B2d4x@9#ym#X?56BkF-ZqZ)p>YI%{cHb+R@Q-cYn0C!tOK9Q=6(+RjB+&ukCb^e zR}VTuIOz;DY}Riy(*eqAAJ&h8D!or{hryD+OPv3gO8?K}C-zUec_-08@UL!xK%p6F zPm`R$E4RsYngMxxA|aRi^_fE&)(a8wsEyXOZa!!;L7vs8V}Cjf#~ZPL6H=#`;{YD< z@SP?JT9Ct@I1J6#1eNTstt55&kcg$Y%1BX=zJ7a$jtXr%YTGgjzzFVin0(Osfw8jk zo6q)uZnC+`O1qd_`8aBVEH7UbMciEg_f1b%p9OV<|gNZglOE;%8O#Y;$!r8f~N`x=ZxmOI!_ch`vJJm z^=J>_k8qfKk&he`H!P32sv^7|#EVSSCd)s*p(Ejjbz$e}g_-PMkbG?pP@3xKT24hu zh@`aTglJNe?3hYat>35>SOsEiB6sPK?yYQYk)+%XYyu4=yj=P#riCh;mtV{#{cX-c z#l191cy!{E9Q6HUX-xua=zCMduYEu%jpRSWjk&w4yyzN9S%1tw`gc0|?@p4Vi-feJ z5?;}z>MP)84n5330mEAl$(@D?#(NRTD<|%;-siaTv96yBYlz%h6kML|gnU6GH}JS= zM_i^s9)HCfZwU;F%Y3)heR$YDRa8P3eq(R|iH`?cd2j2OBaDi_xMVzsQ&3jNG< z4xcQ=kb)*%_iFP#D*gWO4cmA;n``G0?Ny<-Nm~uO1L5uu?M!^~;2%pc%4mUANADX+ z`?~Bk&nCLD;GN3Z>}Rf4AC&Gte<~M!)W+tJ)62Y=$@Dv1iAxda(2SS<1b-a#)+^J+ zVcTarCN@j*470IJqmRq{{X@6>B7dk-K1FmIJXnR8W0#YW2AtJV< zJ>~DRm&Am6lsGMd^)ZgNJ*0l;nb3twv-1n}AcMybU?j=H0aYC4aCe&L{x;z0b*y*! zU)`kpEo7tr3|WwkcJ|x-H(rm(CVUqRH}$Mg%s}YJM3RCm z!thO$4OjB_8>KXhxL>iiH6NBw{Rz->k7Z*%Y~}G_2Y#_Q_h;tDWhw1Z31wn*w#SP+ z7wm8AGu{>60XZCnwDUFb3$WH+(>YI08}_&IiOC+;I zUK#vd{C$6MCovO)AEXq$K5yj=H`129An~LeA9d~MT0x%`-T=VRg+-b{2x^Gn_W?9* zxeZ4$gMu~)obPQ`9z`Mb6?s>W2GOZMD45|3f8exTZ;U}E2l`zEddvGJ*Rx5s)O&U~ zYH(DCx$f%q(G0%G{An(eEy+eo{Q#q+;9=M#o6I$}3PV?M(wQOLtLQT)H}A^;2@C2u zOk+^c{zibg9tDzMaqUAezzs;jJP~OSdvD0ZT|}#%6i>%~nlF&w%GsqQj^QJBCRKKLBLAg~`O3mjwjKvMKIBaU0UjW#Cp=Y*-Tl zyOzGdr?qRmoSxD~*Lp+;Ir&~H75=`Jj7rbaWC~#c`R;7F2hs-ENz}22hD;m|*p~&; znc0(j>4{peuo#qBAs!8fE&h(hU#Hn8o3CgqXd1=6@!&c=O2cOLUhQMf+L7=X)Ju1h zyH>tuDtch@?@w(${FL{Zdc}Q81~_Tj@J3Du7GM|DQDoEZz!L_*1PK%@YQSgz(gptHzCo|q?5c)Ol|r>9i^?2 z53El>tof(*{hw%V`KM5dXfe~z|Cb#~B7ouuw;Q;a)uPqrhMRSU2Hs@d@`ZBE0AF`; zTAb!ZZRzGQxhiH>u*bnJSxecV+Q8D@Y2Nz}9Bt3*hDZZ_X4pUDZv>3*X$P|+2>_Cy zn&59$A>G-J;mn*$Vyj&ZFR1;Pom)Y(C}zBi<71RG{UMZA0k-7OOxl5#`c%RJ@hAsE zcGp@ga(&^ebdtO6w2$O?3GxF&n_3cO|A(uu3Tvwkwnhqp;>8_`l|qZVLy;D13&lN1 zA-D%E8eAGE?i4BRPVhi+3-0dj_Vb-{z9auL7w^8>H~X3W&a7E$jZ}W9EcKh%??re7 zri8tMo@hsnZNl2C_586kCxMgVM75%4giNr@BGuugG1YNbDla>}ZouIdNj<#;9;Rj4cZA2MI+>5!*8t z6A9Dj3x4e;-}MIU9L)8PzhjHLlp9zNxX|s{+kUj?zUP$4{&+kmfW%C_T)5EO20u{f zU#V?X5yV(e^btO3M|F*D>@bQ{tY`fZA0T|J8hv&PP;BLkq?&W(6%Z@HOIepmSml_~ zXfj_zp95Lh{+Q7GG=+f{t~ddac#J+Q!%?a_ycrih20UGFKsxS!wDcrS^(s~LnLV_> zNw{LgKWM!zzld=-@SZ{ZLTfgGc5EdE_1oIM!_>q4B@|oJgq?DE1zo}X98SjWLeImI z@giwt3L>C?H2{VsBLSt>MBRG^*R8LsHSn%ve}40XmtwlCFq4#7b7A32!|`%#CN|=4 zy|GgLPLhDmcU<4k#c*H4=aR>CAj%VVA%4ZxN727n|DJyzKMI8;#~$ItLM3a3%@#F7 zeStH}gx);Gtik>}7zwX!%Ht|aVZ?eR>|aj$cglA-sAyhrjku`GikRX@$hqWQ>@9WR z@W-nXGT!Lk#>1B$G?5?yds%of+OY8gn&Ar;$Dxj|9B~vD+CYk-g&Df=Z-G8@$`x7( zqMlppT@4rSzDU-1M^@})`Uq+2nt2XX0CjcuwkLJ&>VMEHs0@WyV31N24c%IK;~~90 z7cL}n{xTLC8y4?$Wm(!U=q@^^jmXFWj#m-_!-fR{>o`3L- z;i2kS9_9bRV~%Cro+b8ovTo<63;!j#xNmS?-mp-8u1KqnetWwecwRv!z?@yw4^*fA zTL!6=m)C@=aBRoR(FloUErDIp2!=4@+~4B(p{rF5PSTnYR_8`z6|}f3I+*^JQKgC+ zQ)C=}H=(Ivg3;EkT4{5x60c5V-djNDFsvNXyVO|r{Q7(xqig_1qW5T}I{WC==t8s_ zA0r9tJl}q9SU1eRqc6Gd`U;&93K;nE-Pw3wqXgYfMY_RX68>J{a}s3zw}cdyWQxgALNQd;p^5_XF1T5k zP7HTz#N@u_U=|tEbtu+`9%ApcB7%1oyx5RgCET%s*KN=Afch&!ThnATmj9@jGN*t1 zqvHrhERFa`53l(PM69@&AokyyCfKRgVEtN^>oUvJ`i9+3%NZnKnC9otl7_2AP>Z{3 zPVMWZyJqhk(|!|F2+Y&dd~cO8gf(&C#+(7P*2z62_VH8k!!drq#lh%(DZp({D3c$@ zsKugm9{E%!{Tov}NPSFO{xrnYdHWRk)2b#oj7MrJB&VC8^+%{;<@ui*I8<;^jTU2< zy6B-&nI>Nv@w``d=??TlfnC@|NHX<8(bvaa!mhQM@~BlLM}e1$5+#R;yK_f7W)Oyw zD)PlgzPkc`PhpBJpLd|Tyh25Ed0X9k%2Ey@qp*uH;de={;%cL@(rTPmh1)&$KU&V3 zouwx}R`^a+4p3z;WvOxcME&9xEVAd?HKaR9)D<5j4?v4*-$W1uf?paYF89~LhLx?I zurjgg(hy(d-fd+W(n zDw2PQjNWw`?Mypg-?CWm7{EMVGjm=X1?6v^c-{A<i`Vsjw)w3P^|=qmJM-wT5n$!k!*MLmJ>+GM zmaFsoBG@WyR4(D>RLXQ?Mf`xDZ)YNo0yDQ#ofLC!MA-bfqKcQ7mPoW#;TyR4WwZ~b z8w8|v8Lgu#Rw}0_;gI^>85D0JQN8RwM=#Yl>SE@_%B)6m*|l1`LUpvV!Z|9{A4N4X zJCkC|cCt)%-ZpQ`U%^Y0zkK9U;Zsf>wTKMGJ?edEg4sj#1J9`z<_nk5LsSp@lo@fa zKJs7jGkZQy%>NK!ua8Xuwl?+GSuF(1J=90`4ROSJ^l0PGuZp|zRpd)rX>7;b(-17r zt8UgaeAWgZ;^E`zBHo_>&-9Vm2??Dh4Ux*D$yp6=+EbspAp_v|(vZJ28+`5a?n=U< z?tMrU87s)J4qm!42r&nJ7JeUG73F=t$#H(js~2@O?+Btdq2}imV$*wWjD7bi@uC5= z%uZzJyBD{kL3Yyj?-#%opLjCtJswbob%IZp`!C4ePg&%lY(4Cpb4;BWi1VvzBeU@= z1l!@`<_mG@UXHn!iSN$0@4!(71h0vIkk@2J z@9bY^$=!EIkx8BJ@>-)K?k%xmu^K9S32^lwpF~c`*uGpP?d0xx`C6Ee*Fw7!5+UTO zZ#kj3yco|PzCw)8!eeX?Hmt*?WHGl#w8@U#7{T8|z>z`@wJ#;A{MO_ze}KM0AGpMC zLC!brWrlV%Lq;8@b*eA$3*84n3QCBItYc^&`g(J@sR7^Lml;BkwR1iU9cm?W%I2yA zXqpCOO}`A&uz$sDNkIQkt~suy3*%aG3I&ERR!Vjti`x*;iRj##@Se85gm%r=ysTmM#(|C}7H|IkA@TJsZ5 z{++@PXQ3WFEIno-+=f2EZQSfS*fJW~e)<9MMD2}C$Fz}srhl9q=lE09I~~V#(f%+Z zx;!B8;Vi{z#xxzVCMQU8ztfZULWWyQoFL!OXRJRQe>f>I<|NvgkNk~|yJNsm#i<3% z!FO(!i;7Z4RYPH?{Dc#1MKcoa6I7N}0vvpa)vMt2v8>MtdBCYlHA^;6zIa%}s)I?C zu$H-!HjT^Y>cbz0S|@1uLw+pMU6_C**PF`BGldL#C)<9YFSyJfF&)^XKr4|5f9Q(+E7h z7-*X})G{Q|5a(t!{eGLQAmfQ3a3*;ARZB&n0>s`{qRnX zP{ttf)G-1PS0(nxI^@;A91d;w!yiOQKw{mB`ScWzbttrNS=+u8<1HQ2#Il3~rwZu? z4{l6==)?VGhy%*9ZW_bPYl5x)S0EF|Id!qkKNsru}s>5nDt`W_d` z^pPJ|p2bw~0?wzVH!u9@)W7h);F*CadJuf1i4>M?36?GCUy?VK6=(^_9Z3F20L6#e zU1h1b>3(X|ot8>=L7L*U=z=@FbT@;BEuh_HYa zCfA>duMw>r`)N);52yJ1l-G6sD(SDI!4vylCF(&BLqDL&7_s%xWDHL~82?#~2vyCD zU`}#BGVH@Pq!$QJt&ElP;F+m581I^3p%YZX3{a`KM<8Wk2yz|65=(x&BjNGVx!1{a4fL1*X2vd7kYS9v0mc z>d4Vh{mo1{n74)78mfv4wB1~;`BkjfF1Q^T1)X=+PSNMGPB=ND1kBxde|1(E2ugrp zgpUWWJ7^=@4*ByAs9y@jUy--!P8Ktg zw!vFb!cA;@NBOKq7^Q;CwWVS*U8wA-uQ0Jj11@K$&qm`xJ`9^w=sRdQ;jXrw_DrO; zMoBf(IMj*U-&^_>cq=@R+#ym!Kvx?5)co zY7qnL3tseo0jP#ugJH%!&Cw7k{(1+#GULjE=D2XppDgU{3}%^Xk?8a6Dteo7^LVcQ z3B+)v7w?+Zip+YtGKYPJBPnd>;F+O&73g50@;SjR8?6y0rB8VuR>_A}{tUHZ*vhK4 zRhK{2CTZOjv-F%9Ul@#Hm&-lpBe3k z^r+9-3@1Ez;bAe=+7NYH2U4Zsm9^&6-H)^O)paFhVKf*P#87o zD4}9}!eG`!vM2$&^mN|`4lyy`y_7!xr5Rq$b3ig5FctaoGgPmL3&MGclerA-B{tI92vOHkq0(d*bTyNyKi}(U!$+AGIUh~WKTQ#2mj+j+S1DH> z4%VIMWFns)RM>GZcg-t_b!BXpP3OORl#q{8^ah2~nTSvtlmhuPr{OMwM=Ju|4ySkB zI`yM#@$7fCnQbj?CuyL$QeunoSc!}Mi{D3`kxs^}z{+v9Q1An2;jC4f??D{)bxxp# zOVjG|uB#ZkGN`U36U<|vaJy-qeaKT;sUrOh!S`j4 z@#{KU=Tl(k*lq2yD52tT0yEPydX^-o$>&9XG#y|;5+6$x&oGw53gZ6#y=up|=BGlf zSkJznCDzc$?`kXFTYJ9WklKx+D5%74hQuWsU2+!yPcO}!l&!A5o66{pPxF>cNj&1i zcjoo5DC2{Lul^u4JQYb`?#+CGdsqwb^ErFpd0%aFEPvZ&OcQ05(UPkF^(&d>qo#%a z@p)(IPZCv{z8TGRJDm{1FCjJK%zzqacSC9qLDfz=*>kw+Qa$XjKC< zQ-(nBcg8punqTpN@#C1`58FVI-9RVVK`3g@P(H>_u-1ezfs1uFC8_}2kL5jH;n#18 zR2%D~LO@g~U$#k>8~X14%6tXOYjZeG*Lc?vg!!CvzN@7DqU}**utY)OialPq>H_df zPtBd~QdFdEetI8+H5(^D-en12m`GAN+A>$VE4J~3)PJ(mp$3twcN=rL!|^aXK2G^i z#75-!>DU9`m_^0nezmU^%C1BfBy~(rGk9~%X5jShsf%4~KQzeEgF`ra^>d7Fj@jue z+RugnwxNzxW`xTa)>*Eto_2oFdW8eL6wj+KNY$kjQ1WHaSb*=QtpZQ&6${W;Hs^`v zphJ~|Xe_;^bF)G$PVdE8QjxuOs;anQUEe_;t|Gfw{g6Br?dgPF7C3AYyY3G1ZjZhz z$E6SEuCV!_iM^Mgq*KrC^w*xsgzMEj=y*tA=%h)rXL;Dz);endtPgGIMB1y@&bcv2 z7jK50UhmJw`x^Yy&7D4kTy>em)a;xhkCM&A0k8I${x~4O^2<}YzaYwrO8F4w2+(!J z58)d^`nCH%0~cvsk0)<6-VP9!%ruOwfG?6Ql>-i)ee4W3q^!Nz*F4L|8 z+kAX~4fYMtB^!y7|fSbI>-Ml!j_SrY+I)wWskx!3CuoRtg1f9Aayn z7Q9rHwAgh@UqMb!He)FrBH?*dWAZ%fF420h(%aPudSxWTz?b8@C2($hAYdW%=aV_Z zG4Wf6-k8^wbU>nJz&R2;m;0IpwfWPwcvg$oU3 zoXL+l&?0$S3z5f~pI(RrhVm^{4hZ8t zc3zxg!Va}N_lki)UDUImI{$K%;i~q+c z=GiW%o_4~=vZST!U)06W6>vVW9i0rcZN3xyac3uyx|%mHu;A4BUhmvn#_nYUAQpf^ zwxaI!2+D?oZ{mO(^mWFZ(y5&kCJ$#ZNOzs~k!RBY?V$@KkV%A_4Ya?;mgKYy{%+8M zxk6|tx->9(Kk>%SU3B=Zk;|aL#4;sjf>OW7--+GCq!I1mV$4N{gvghikZ7He$l(YU zYOVo2keCOOoHN<#a1wwg9x2zHy>O%W<7laq)ij$3#%}*UBtX6d8COpt_Vn3>>6Z1Y z=H=(qFvsXhP>XLd>Tg`ZJU|Fu5rZq;t1&_pgMRK%!F~&LwV~a#jn|7{yy?|0EdF}a z=wHo5yqcfS9%Ed@69=~Xqu$GYPNsIIT0Q@2dn6nxtwW ztP0cRkIIL&SJVsqCL%Fhf5h)TuXN+l8ftJBw_BZpGWP%>2Nyrs=IKtFy3m|ZC?AY# z4)g(^xPSW_sYNHf0vx?Y`>0gKl~c`a^IQ?tOcVA&!x<1Z|ieh^K`KNvizbIma zzPXx5tQfRZh5mg(n?8i8F&K_oE_e5v4)zG_M!p*x(U0znUHOEk2k1pp)lbyZoy!Kd zXwst||4^K5hT+RBkuLaC-`JCM^6_Nc-_pHlUW)^6v3@Zr%)F>Tq^bT4P-;A_PnfIj z#s1c=XYtm#=Y6J=B-^IKX1B*tU%znUss4=ulrp9)vK?1p$gT97k5BTY$dbcR|3`88 zuZC~F>R$O4N!kHlUI_cCX68vNnGEgI_}1q)9s`uoV(%Lz*~bBd}>A2oo*P{C&i8IHv2tAZ4#2$NYeJvQt_b6 zujcUOR}vy@!>Z{oO?cM%Dr5Ig`z^zj54tW3Zn(Z^WHCs{l@zbT(sEbiwzV`qe*B>3 zpw3k)isXUH`Yn`A1=XG{G7i-PIfteE?Y9bj71W7OO!03&Gkmi(SVZEpX@4;D>LGI~ zsTn?Uiv_Z^wG_JyKbF>PQUM1VHr)=qeLN35hmcXL@$8ExE%YK=Gio|hAZW>qwRP#| zDH4Z}>Y_L|d$#|HW5R-eWcMte*C|&umj5%JGG1;onm_EW$tBjEQ3VgIEK+fbOl?6mW-GA=yBSR=B~10r*(m@E8X#iFK)Ds&5c&tnFJi5`X@Vhkqu=EBd-)4zRm)$ zU+TRh)WtCf;L5=-5v4@_{a7Y`-TDmjsI_`N^uKLe`c1rvwQQc@0W-_5ihb}yX`NlT zkzq(r8EB;CJKwt<$ma+q&B?@+14T^2D-C?_=DGe#1q|;=H9Uq&RwHebzdpM)f~N** zmkmnh4|=3bB^Gu@_0>xQ1wPj%3B*_VY-a9Fsa&JZ=Ges27I(H$MSn|1aJja29RD^M zxcX}F=3uq}%J5{-s-0CHn&%O#~W1%TaCE{UNY{6@5QhZR;?|fs#IZRcos} zL&hs=3nYh&fzj9wJZer}6!|n{pnux(U9hiDg(b7W1Fxj7mvOkh{PK@YihR`aXjgsnx<=#z$V~;qxRKKb(&qEXRQaYF+MCdcpopgquH^pHy zGBJNm*Kr;f#r--+w&0tA6M>O+axvRB20S=vTHaRe2-5O_YHw1+5ua)K7&nwb3h+9B za*sh^iSW>`_?{9nx(_{)STb~*cU(C9H}C#AS+xHtg;gtO1rQ}|{~3msXy-k*!w;K{ ze<;RJT^~ffPVanS1cpEOdZqN1*3KS%Yg)aB^;~_-lJKg%UX83Fh2ScPO2Ms3Z3q{=Q2j}TQ2oN7jNBGk6nN80{8C|^CFo`Z59f4$5>$1#9#G~<7$fTj zVcPjh$=rBsrk}SlM=J1m&!`)jURAozH9~BKU7ApTUTh(L|6z!NB4k}u!wcf5&}^Hd z8I^Bv?Um@UzAtE!M)g52N4p9qEag6ukLC%Vx~&1aq(#o?hUk>3clfocgEK_7TIk0^ zVu5p5xA1B(UNYTNnL2v#W1EZ-&G)fIpWB>&vM|i^;e`0w@Colpe^w&#A$RJV0oJ`R z?)V*4%wTSIZQzbAid2g;Gp5pk)&wT(OJTo?3EEC(F>QSk&=Lu^6lLW)1rQB2(4*QI4``YD)mqNulmZ1Tn>yvkCq*+={J!u&x>N{9yg^^ovzp6LBzw~P94>eMX^cFF9EQQydguJ(j!so=JitXT1hI^^STC0`y|< zTiE;hebn=XBj8vwBPV0zq2lcs2j@4uXR3wVER(cKBD&eZ5ixHP!ElLl7FlM z$b^Sd3}U;@I5Su^G8kM;tHK`K@+kP=@+z&-mVMC zV4}`2Cg~45!3W{+#L)BK^p1j2zVZa6lKrhSSpgNJR4EtvP6+zae#tCda?u8Xuz9V* ztz61QwnAlJ^U!3_%L$3;r+W)7zGVToSryZVJ+{#^W1n0Ylwj1X@qIVZ1v;i0#DGh) z*XrMJ)k=2Qo3+|vI-Po4oIl`sE$>kJE$)@HiD)ioJg@YziuS!gdkxs(h)B1p0^?a_ zl!%3O%Gq`AOQq*6RuB`YUhf;1R_g&duyGp~;oohGl_urq-Vfg0mji%n$A0)PJRpU6 zPTz~2ltd9fZ1z8w7jEbnyz9kvt>k@Ga#L>o1|uTmuB&};f_04Tvbdeb@uXwtB1WK0 zx04eSbkWBsuE<4WfQ>cB%YEfi=C2Scr&k^MUL)CCKm8Uz)pPZ3%z@J=i|^{P3|{Mh z5&6Psao5}`D83L8m)M?!&?{tm6~#2SD)+Ak8KfDiz?Ama9O!Pls@zfFrhGq_c1uZ=4lSiUerVE z1G`j?F0Ko>c`=H6ahNnmpRl_c;G5&@5;CaJUeg)Bvqpbk@#X3dx&?A(Q?1GpxKBgE zW!QIH19R>K1gVRYyY7`S1WK^r!iZQDK;$fb6N%OIMaI#gf0@~4+b_J{e-BWIkb7&v zDH2xGjJOrgg2~@G`24&?d&w{P4wci(0^8#rd>F&k9aVOf5 z2e#JRlR2A6Liv%dP72#N$M00u>Gtyp*X2n?6j=Xy0o1x<3+HWt5PE#OnH+1H!$`Wv zt)v?8&lw+2i-m)waiRHFho~DjJD{t4OSOXkxCuwk#w7?=v1Sdu+Hjnijz;vX9VBjx zWsfh!aK(ylJ~7{91ebG>fYwnYtvLG%fS zcMRA4)A4y_iVbln&Cq^qRvSLVdujEH=DNp)d^yJ?b^`}{r0Q(FMV*B-XV5NNCj`{& zanh0E@# zKGA(@8s0(zR}quX`)Q9&i~2=RarkQjfFTkJzbsAzyPk|z@zh2G>eEVt`piXwIgEPS z!I`5c1Kl%kf3sfJJ@&&Myd-iL%$jp_{r)F1q|uxWT;~402TR(Ts!${*05ukyTb?e9 zL3?z_yR4?9}xW&{+1plQ8uDcDLhZZ$)@3lmo_HH#;*JNAE0o+Vl*? z+3Kd$u;<0z@;9K~%|$e+m_?cleBFsaGVZl?|+VMHuV%HV&o2A!l4A^)= zA!2GxEI}t)aunmxYG%X-IVUv=j`L|fJRnOL!wXe|5Xq6w8U?A6)`p?WDo(5mhz zMI({<9Eb1i&Q5~FxK?BpQVGXZU}80tZ7$hEFQT}CG*^^A|47t^{5@FYO2)tmDAz2; z8o|2VV9Um!Nv(WLf+An46c$M-ugpEsZNy+$%Eg(fD@=A;mEb!(a9iF>V~ImnC4P@T z->F830iBybk_fJV-`RUFrwTgZp~|R&C{2Lx*1I%dhstO6iz?0tBIV55`l;RuXQ}5( z#Z``2S4WG`NM9SeD7|qK#dFk zlUV;esg|IKy}T>zhWXk3*TrXx_L#exE|8<+M9NMb07=aVh=C2QAX=!!1ll^dtyA8e%gq3`w(qmetvOY5YRbIQ2 zFO(5RIn`KjhLLh0cf`ei4pNafKr1>c@OE6{ms_z7y8mOci)499m4&HJLk5?yC!{pH z-pv-*;%$RIn}}5&6h^j=g-GS-f|Q#bHhctAvtBqW32p(^&Cber(8aWRrjwwQz*ApC z@$+t+AM^HOoBK5@X zkeA17(KW2F&B#LPLhsJja|rTcb<)=Cv!bviV%;clDl(Wdxf@NFhuZbV@6^ll`^G+A zo*e!}ml%&Ul2Qhi(gj^J2aA55rH?moOwZa*86Xk z8oSRVR+~{aWt1LQ6$>t&!C3HRFHoBR&5M z6+PDcirg~lqbThI8%%MHVp(b3Lu_Kgm;C;I0S52MezHilITV_`< zUDl7wqq>7c6`}sX>A0@0tE>d0$L0O;3=fan5x^>&b?%UsgQfQ`+Aj~eF-PrG6lM?k zWFq#Q_lE}Z0%;B|aqFgOcw>nx{m9zVR)@nkrVM!`5=|m+8kn)z(0mw+F_N8tyI5il-|$E4>ZCK{uk0-}XYGSy6d<0_EqX4>iN5 z#ZA4d;BYHWBk zaNDY2#-$h-3}4E^#k}WvcN?04!8<$=McE0K{nS<5??O#**Y!9FD}5gR(|6+v?j5P~ zBN~0@Z3V-pTcL`^&XEXA>J| z3jdI`3=bBV=ug8y4;D&lG0Z_!&>1hOrw#df@(5kBNA482bv)sjf^#sF3|uHA9go$4 zeZ=cEV{_{?>bAKzW31lw$8S!Y7k*c}hLsKH32`YSQ{@Xc9VEzAh9MFTt$ zhX)EK(yP&?zT5&&>fbluxB-kfzFB$h7)sR#9Xt4C!WqQ(N+2C(FgUmHa{hnC{RCU) zS?1io4WBLAVhiy|%E3|WLpb3NAKHm10kh>q) z_ri?+4A>A%RB8$fG{xm(C>wwviWa{O@=Rn0q$Zc8gRG;x0B#k?Zx3|{$;2E(NZF<~ zXq7!s3L6AC&Vth26;`c|V%FF;M3Hnrm}cEVc)$YLRSn5isA@JJaMc2j{m5F*TFnb}@Ynex#pec6`QKb{q(IC7^;rWM-qZ$uG zBbzI`)SkJ72`<5j|SgrHAy`>zzwxW@@( z=r34*1pyi+u5 zWO%$ex_E-6jft>APu?6)RPHka3OJWhKQTUlOO(!KWI;R3VF^?@0+UI(3E!Te@QX&$OMBz-f+)$7CXzf&=6U!o$cQb+?`# zK`wTt%x~>F1z#zo{+w)mTJC?ETmnD#T-*BouhE}9+i}(Be}K;64*hzee^c?kNptyT z2XORZb5QtbVzP<8*2P*Tp{1WBY14r^VGN;^o)WUZ`@YiHVgrBTD0zIW&`` zK2A#9zJdW4sWsbE8NyU+G@_gq1GA3qg4P~6Ej=#ZE%uF`JqzXMTU_qODIy+Lc7GC) zq>T~E0_6DIOXO2|!kBsuqrZ3U?M)}AyC|mLNjZuqOE0-|L}NqigvSy+59Yl&7}inW z4yXN|{3>x@NzUKOEG;19g!kxV*lcX4vZJg>0=d3zI~~Pn>ya{pq`$u_-+Z z-g?~z;?V@|qZ8!x@Zd75{ejU}{t*svxz{gwFQErYoslKj3S|5n+7^5FbKX0nFJ~f1 z9!TKe&r)_4FbFW=OziT^v~_5XltuE+(uSSAe0}34N{BGsp6JoD7Mu-hC-U;HVTie# zOQvzhXwBGoFTTeW6`m|oo;D|E!@TLwsDDV`+HIC;?hiOYMG9x#K4+%M!)=f-@>UhD z&9mO4xlSk0Yea``73E93aC+{wql?-k?qG%wV%}O;fPL8`+5_r`T++Km-5sVnS0H># zOpH)V^!v=jo6t?LDE+kz@_;-R1G+EAc<|7bw)JF<)_&}Uu+qitUpJufuNI8E*EOpN zjp=(nujrE~)<6Ch+A9|dbnj!Bz2SVB`lYC|BXFN3qx8d1YGpg?_kGbvCt>Yku`}DH z8KE$ivwH})6AriCV`N%jwtrWLR<#a-d~usDqD0a-B7|H{)HOVSIt3L&L@#1pxXgFR zkL*?zbpFs|PHl2LGU;^j$1ed_u2ooc7oE^q2q-U*v(3}VOwYSdIe-*?CHzBVS}-Yw zgH9w{0I1!9+e8>(yxh@ryb-x3@tAU&kBbyADVp^vyy8>|OJYgWY}C2zC%Dy@VY$W0 zF_zPyAjZ(mD68RKKajBrC zNJ>Uw$Q_L2YWU%aEIx+g)@()h#=9qnNUxJS2%LJztSnP`!PFdGdvsL9U(qmQU#BG z_T<~PTIX&yn|Mt@F!k4=QUQ05B|*b=@^sLz03L9@u2Kf?`Yj$lPG#_QgM;lx$4w)^ zu4m&6^hD#|nHMR>lj0%dx@7RYtfqTA^tPa;rVr@FX2|~6*ZT*jl*PjUEiYh%M(T)u zvjkO0d2pU3nH&V`L(FcHbjZHGIo>OUCVM1AOWGt4mvs)^s;zyz(OtTRT+umOx!eh8 z{&?QmbDop`6r?QY*#t9| zob1H~lXRGOdyXvbanGRZ`-ga~f~hN6G+Q3?-uT4@5Brqn$R7nMw}hSOFdKNT zPzbfu<8h;^sfvx~Ld0pYqx-~!+7N4_Svwk$piP2un|I6j8%JZ09gtsC#Y{GstiT_8 zG`7`FW-3rMLv?B2bH2|G=4d@u$_NviGYp}rvl|JZDB_Fi{iMf{MN}=)S-CbXSuzh8 zN1~4r5FNza6G4m0hw^tD>%+UuYl<(?@`jf{tpi8%cgJZw!qR8I;ftst5MX}r2RD&{ zbdkhw>>U`?o%piz4v?i9_dyCMK+prh5A>)S_v9vJgu|!x)rOG#cfAKPElvO1~`lUNkzsDMw7E#luz~MS3 z@8M?v#bbG;W?bS#nbv3S#>HOL1^q#Fyfk3_B8KvtHeFTXMr;vY!?7R>dZkFchtGpO zv$)sUBfqEmnzB;Cs?xnJf-XS!E@WhAAmEe&WVy`(%#F2lfp6{Dhh_#=2np;@Z(F3& zS5-As=V&)Ob;(hpNT!K9A|++4@2D=kG{TXo8Y97@dx@}rzsWt-mTQcT$~)Me8*v#! zm99;3wZZ3oVoj-XuABC%D3rVW()HG$UphvRFd*Y|vKG1=aL-jdRc&1L8B)DO_=|y8 z>+ILe!v3V3S(c*Az9hEs@{#!>hEeIg(B;`ceC?kK~4o_o{{+yDECjAMaE`E;IfXmpWS#xksk?<;@x}C8DOLtYcjDdWw@sKcI z=luszIIAra%PF}brY>&P8T$+IXN4D64k?+ue}t!f6iD@bxl5W+DRdJEEawy=YbEt$FjQwpdlNM!~!pdp!sp zJWG}dU;m`vZ;*t<89q49GvKrR`W|R}eBm25YR@-?=WzNLcsO2( z8Nr^A#)_<^O1-=9-(nfQ>4CqDR~oMg&(8Si+Pn3iNP( zo(8)<9w&Y7-7=Oamj3@tL%dyfiqELYwH5!LIo?w(@pbrCz64?I(eMMh_hPPU^hD=0 z`piAEFKlM(Go9VzIM=g|C_3nBB_O~76ZrqgddsLb+b(|_D*=jAJUE56P~0WKT4;-w z7WYsrxCV#f4y6=#E5(bu2e$%2ixXUf>z{jO?suM9@5+a3t>p8WbMN1E>|;MM&%#7E z*@iZYCh=%~Kkve>yILU~ytm>lG?txIV>sOlbAX5Ke-QbZ4E=3ts1(1+jz zB+e+}XRg?frQ_xZ$f9rU+Q;L)zfD)aIN$!}j6mhgz6lLGCW$8UK@$2!(_TTBYY=kH ztm`6|1ch#no!NHuYcJUS;+X2WmMd^E4Rb~1&OHP+8{RRn_>UdI28cu(Z5hDEB9UVtq;kb+^BUcYX?8H8F;@jpts#q z!rrTzy_}#W7QY#)2aPAWLrtdJpFtu|K!5oH2y45I*n;a9=Ly{`$jk$Q71u}K+W$Dv zo4x~GN)82XZj~4tEDf`p?{X-Elk|ON>E?H3RB3Q@r`1)o{ubXqW3nv_O2r+%tyE^% z+@hU!nZvZcbj_LQI9(S8U3bj)1q~HEp-zO+n3fnYuE7=PBZ+E1zY1=WO)fGt(X#7V zfX@Ul{oG{spApNgY@HuqFK@G=WpYf-QY*fUmcGZVn}W_$tSY z@*<}GO-=HLBWaR6Ax!b~npuj6<^D;C+Wv}3fO)dBQo#)=&p1pmwQ`$p1lVGCzi0>Y z-5xab^63R9@H5x7{YP$DPkw2sVRX-gniyJv|8JyudGV`#=~_R%aQ(Gt2yOGAN-w!* z+kDZQLKc5A@0LiwqTyL}s_>PWQ9L^5QMJ6+>bmMM)ml*C1h0-LTD+ zN7N90*lhlHmcY{{1b(E^7tgq0!XEQb0hQsA@PqH%c#4mmpq2f)>Z~hei ztiR+T8InxLMhTPCHigasUYMdf7(ilcb%MM*b%nrQgw=^1Ic&hoL7JwtHK`|c6MBaP zx)2ko8xZQU%erK1qNmq^+a=v=#5Kuy*8OefES>hG@}33S`Wwm%IK?!GaE=4XpdIj< zhMcecsBMxCpHoiN3()=~6|lA=fM)1cY#&ooSpS5j@k0%Aa1%qQ?39do%Y46ZxGL!a zUnu2}J5AAW!H$~U@HXoJ=y8)}ezlKq z%SU51vJC{@ zr5o1Q(#o?%WtQX+L;^K23v2IfSC7nwMIJpLCrNw@=W85Cw;hG$JJaqDG&hF}CW@wA z-O#2sJEa(A6|wW?ik!Vu;9!{xO?xf=qY&Glls*G@%7~u&rr&HdRrh#2 z99w7egwxpgZAaj1N0fl!+HIluUS-Ln&QmDB#a&e8{5o;-=!>8MEyK*7t$0!*ysVzTHn?_d;pwei#_Mk||F;ykZ1L{|MR? zY1q%wkp2TrSSrUfdyi{SO#IitVTD?9cmWt95kkvvp|fgg^y)GsDTVu`*RcMxa`ZUM z$3U=G*3;1;`ZsN1zm;j3YZB|qm51`0E+av6SvqalYfc>jxsf!auL4u1!l%MN!?ad1 zS1Hu3%A!_G;B9_E2rN_drMvW3+*hm zG5o2us%!d>dkLob>7Vy$W%WwJ{r@r~ZFv~JuO7s*R^+6jFtNZ#$FY+1o@YWn%5&-Irbp@EZ!}NB%TAcfgf&htU)4VyNfpdJIMM%BOlLDRAt)!}0$*A|_sUeyNd# zP<36shJ_G?r?GUDuJUk-xB07IwqA%^U|K;ZI9SHIvw$+`|)Esv>`-+**=sQ z^C#Ed3)GQrm57(b_htz7`X`xc`Wng8^cN2OM4m@C1_SMP?JF~Ar&%?Sq??+3>JF1q z)tpNEnWMOhfI1dHinZ^r$BXT?%0JvI-K&2txt(o}#mj(gr=FV#@AI7D`!Bn*f}X?~ z@ISxPTl%D6=RE4E&Xu!OMiosi+;#*Rx*Gf;cOyeEct-UFfPpVk%YvnOC|6B>KlY@> z>^3YtiE^gZG1&^G(Y5Z-;eSl&zA);2hW}^nh_wg8<+= z)a`rkke_4_OvP8H9@^WI3_+Qsk&{+Tt+TqXBPp98cS6DpT?CF>@1zCW>C?!JfJ*rh4?9ifwcLZO9Hkp|_~{?&hl;F1kOAq{2KF?>DKkoo;rw z%ge>1ah$O`%Bu%oqP>^{CZ>hpo)f46u;?A*SU>`N(dAAqL*7TzdSonm@M@PAoq;_- z8^TvS*vr@xTWIUA{Awih6T(SIzRhx$)TqzSf% z$%7lkLr$tZrY$XHtb^ zVfnL^-;7nN{^aFNV4_h)26Ul~+S6cGB3f-w z5#7&(bp`C15oE9w&*gmq&)P*nhL`>T$pXqcF8X`<+18)nZvHmR320MBS)^wr&erqCg0XRLGW`S9cX3WP%owYS0J_^>R) z_p&F0MvC53UdB?nX2Y~0D6SFbD{_|iQMNPwVUaw){S$&^$1<;6fSCat&E{d^Ya5PP zQh3E5(yJ4mC6ANE0VTf{s2zse3?5Q-{<`=Wh55%YGfH2*4njAG)h1Ucu(pzpnnMcW z5p2DVW)BvBT=y;T3WQ(tMY4a0jid#1p>0R`_a>-qKQ_aKo8YoHMfF7Tnc%o%6luv; zL9G`1z+@D?GK0%#OV-5)Y{fx3cMaOlGX<^fsvmY99_#ay(;n^zBuY2s|99wq{nw#$ zX|nzO@1e8%<+nKQ8{>B7V?KIwy2e;in|%z*KnkCFG(Esd#=0}u zBg%kTNONXR-7K3PDFEH6L(4DCazvS{Nt1C-^l0Nl zFwi?LlIp@VNTmC}_BHaGk7ra-#0X{*v5{4{I7|7UO<9e5JCK{cAj;^UxZinJe{_kg z>>D0NQJddE>7I%QbbL`3^oseB%BX1SCb@G2cHR#y7oA_7!xF|BJ;gdI-xm5&FK>;0 zrX9rz5%=&SQP>~u?o98yPGd+iF{exVF)E98QszY)BKpm_k8d&kEtO@=CFgS^iSG2b zbWxfNhMVcfjj@v2glCopx&9Bj*Oqg2KUN4IDFRjWhk>=iLPON9g-}H%bxKt})hMBl z(O|=#(S}@(_z6`c_7(>IpC?hIDD-)Ro>-`cul4sRD3UV4XakPNW@>C{mbASM;nR~v)Q|XPKB5KfEkVTTtMDG zRxDCJ>95%NE}vc{iBwg+Gu7I~#RduS-HIohvlGCN;*(?FgWRg9Z3w&wNqE<96Z2zU zD(?gjH-8U?XgrE>BhGDlH*2o67UWtu6*C8^kY)ueeP!v!8-4in!qZBqAr#6I4I;iA z3puT`1XHe*jqfv6NzJsP5l#LQTp>Y>_rn z1U~}^12P}j%tl;3tGSk&*Y~)C<&55AmX1CkEx0g)euarh>W%;SwTyeZ2l` zwpv}u0qCc2F~IZjtrh7OHb->3-&`Z__C(itEMQ-n`{pa7Z^@dj$Ua>5FBPEcF>Ldko`ub zWsL$$Do4Q#P)onKS@ifre&3kK?is4&JlgBWPSj1CssOZi>7a&^UZ3{FuzB#;qMgp_ z2PAYQCC6XkiBtEh(zeQC)-0IALWG#lqe^`S2iZOnZj`8UxsnMBS5x)J*YZRHcm(^> zthl|C*}~qXS0^E#fkM%yCx&Cg4^sPq+|Mbp<`H9AYG%Pz|q zGAu+#7m)#o*M{zN#LCV;y^MLH>+t2J?=uB}#59Rx=hIDC{NT|Y`fDAk?tI&V?4Xx4 zdby1?>HJBE^u>BrD~4PD04L;%Xn|>Fdx~aa+N~7E9!bo$m4%LMdQ^O$j70@1`EXmm zNP18_AS~#7>C)xfH=)Md(oBje9{#digbwS9V_>QWnUej&t|w54L&=`@{Eg_k`-`@d z9D~UoNH)T!OW57c_3b-e;|icxWc1Jz0>nbE$GxtuPp^h1kdK3n7xuF>P2jC$65R6M zAY{DUFjD?;t=xun%E)!RNClE$0XQ4ZPYcGTIoBI1?l52`jLg=xG^g))`E89r^|827 zzn%hm4%4Wkin=&4cu(7j0F_f|^}I-gvRsZdLy?kyz}D@l=O#uy{8~x;VL#D#_lk(( zpMS&u{456j*U5TnH>Y&<@5!pfc-S$NXv-Hq^0no#L!J2;002IyktXje*wUdatvJdj zGyAPaAnL>@>;1{ORtI82F%< zz=bgz)DrbOI;?A(4~OCTG1;Rb|2m0TRfcg$Q>%+kd#RZBTcOYE`x}~bY;fRmKK9BUTHJ4VSmG?Xs+Y6AHh982|I6dNtH2^sO+~V zy2W2DW-0O9bqk>1BUq@|%H=X7jQUwxj|IqstJfCbxsv%!hrOTTe+Y0|a|nFV#*`%*;H_m?G~i=RUWH zKk~-ScjpseQN3p6VZzm#Zpi-2n9KR{z5Q9pS_siwosJkrSkz5>FAw8Y3G^w#D1f-) zd|w$KGoGmYc|AL_`5gUSRiTc7|Imz;Cd1W8@n+2@Q#srPxqaKOhUfeeJq5;^UI6DctS z&A=;zxp#N6Dpa zC?nvoQGVS~cdylvwv|YT4-cY6E>d#4jbK!kLz+w~7jGwc8ZzH%=YJ z5up=Vyy9O!Y6rm+u#mFy^Nuh4GLDg3AN5~^4Jeq&aaJGC*vR0~qc4ag_4VEBXbOk* zx1-}E0T-F884%Ted~q30St_5fIW9tprLoGhXIV5QULIHE$L9xqu5}s?CY=!t4kL)( zg|=H*VMNc^7r0Xqq_&?{B2C|9L=;H3V$IGLKC1$)_7T{w^15NZY{R8#eYjJ3d@Dx% z5Z<_PzT9lF(a9kw{Gn!f=IwwVx($mZkfC5L>)Q?evVncnkAg^1EGTzxSb%)hXTlqe z+xvkQG>rpn?deZ(wX3APdA+bSFv?^*v|%rjg1$+kj%Pr&WEh?#Bx+C(yNDq+Wm>>mZ5iKSD*kYr$|bwp^JF|}-|5mVxtPj(Qs zI8A~5UmMbIJ)(55fR9>W2H~i9K++p;Znn+9fO0^5r&>~ruqdFojp%W1 zrUNyNw&2Qfq)a}hGU4;t^KAMy4FVWHN1D(U4nL~8WIA7tCZS|gvZ=f1_XFrkrmvf2 zerJk;}l&2FQBNZQN_H${3YVv3~gihN!Iz&n|Lq*k*>hff!p0Pb(!dL#+tD`i-nDO?)loiDZPl2hJGJmPwnl?jtXuv7N zsi~4A{p6;z-P0k}D%VAiGM|%jmSN2B^ArWup5)9I=?YIv#3UxQB;@1n*Y|Hr(zh&F zkBZ*`WH%THjl@hDf!g&2fTESMyGTtK&=ffWl)I(VY;g@rDl zt=iEyN6>SIbQw;>Lac>sNR`-MBPG^6usa~{qudAIo}~vkeEl7*6PC&LJi=xW_K`|H z?j^}S$EcLsbz)2u?QJgudt{(j)D>0%p-S5fvf@8_wfyZxx+-J9ZkP|8@3}YcRw#?Z? z(?nGG#Npl=9U<4Pn-<+)o*YJ5jitW^eP8}wSC7xA=*uHdv~<~0d(T=}QVbd^iHiPR z$M#lmSB~YThLhV4THX>Frnha8_WR0M{&Y_ZXBk&^!#R_sgFHQP7gYV6SM<60m35UV zH2t`N@Ei0y7F#9@ovm^~<2PC#kCdu3o!cFdh+`vt*Pu{CVvpY5CsCA}XQ9xg_g zNKubuzFUdkeef-KAHY>L-cs1S1XH%$v}|*izv(oX!cLvW$Auu7px)Hwn>$DA!laB* zo5*p#375y3UB5hP7uP8^RN^X2zAR7vo~+ki=_qc)n6k_1Vgx{7-thI(6StwgFp*uN zdQ4*e1Qh<=+*FjYFuOy?G8)|=CRvbtK70!Ko6Z>hum<6PsysEAJW6+cwKmAM{2GCHWvpgg zhiW~lyjkug?qyh)Xj$2|d&a}1Y1i;w{sm}_582y(Mv>zsvO zi!6D!1H{{&$m^kJUj+TCq6@Kw6q`Qtk1pCJ=imCi;+WRygK{NDp|f9+JD6%tY0#(T_&ULH*` zGSprLXe$K?Pqj!L$#Z;iGTW-C$?8JK6M7+`42CdN5bN!K|BIsc;RJiI|Gp-7t&NT_ zum?#^R#dUBG}9!WcJvAS>jJ2pX2%wRJFXCfSkpVjq(l`=M`tPs z?R=dyeQ(gGBeteZhV=lz4pZ?t*}j4>C~+buLjNLHc-@lrg?7^T*n-ap==15!2whbc zWm*K@Tb!?06d2+YQ4E7yqzDC0l0pieVTYv8+!!zGWLneQu>Z&cY^iY(UjRbK;rv3! z{gh-Wi06c;6uxfK`O{1B0@RY8fqM|NiMwT<7zRqAI_w_c%o&%Ia^U((q}_{bP8P8H zeWLQf3QiDqp953P;*^A}jY0#vgt`7EzhIhlB@leM_%UkjfvH`AD{PahHR+?>Dl3*q zgaZM0Ku{2Ud@Ox?a-|oaiEoxAOXrQpXInRpBRJme;9=`^xa)v#xO(bO-Orx=O?;!| zWcMbg<@bCsb*OX{PAgi^Ot14IiW)n$(o zi4(hOt2s(u&c%r;v@`Yi3Bvy#Pn3tYkV6$h(Pq`(Yqi*Hj(J|-HE6APCo;bK$&Jn zr<7TLD}pR&Bh@;Wy_%yxQsr(Y&Ht#e81aA~);yVCM@#BX2uLg$VblLj=;7?DlTuEx zTgFW|n>LL>7w}7jvWw6#q;} zLr;(EN$$5s?V|WW+*0(N@k1P{s|wd?=o_}#Xskx0 z<5gjop--@Tb7Tm1g&Zm#t|0v(3CD@COFmWGofbYE4p{J@FI&-ga-@O7m zXy~f(1GW6_uCB{T^$MBIm9C@7K&+dFX1>TnV3QF&6y*M7&ycWz^<$z# zeRV6i1+3)xY@5)q80~Rg&&_`E;L6{Omb@0Y)6%G~hfvbZ*SmGdk};)*Q&pf~5DV{jPu>f`88eNH{f2Kp8i9A*z?FPV|YpDp2UO_oo)i# zpI7b&mCM0)#+L~yS}5l<9B6O_;W(?0DVJ_JZz)yIU! zvo=OI9(Y*G>UPGfIIJ>{l8*nC){YJ-?9v)<|z(o1Ni zx-<}t@>ebzWlbOv$9qA`{8n1{?U2-VbreQ`#(G(|J-YyzcDWCCR^FmH!UV82R{zP=Q(jWHPH!ap3 z0_969jM&P28a2;>zp)@mqs%FZPU|?bYUss&S^L9DBNHp7IvA5*s`O7S#tQ3_zkk}=s@xv^d$fEC~1|r}?t&7&IVDNKpL4VoN zE`m3Eih+R;@iAGBpRmY$AKu!C0-vel;!!WFO*Du}k?+uFUWJ}x?c7yu>+Ak*X65mZ zou=FUF0cEO?dTAlDPw6a2~2rDAEzqGd`p?KOR(BSE3r7YhNytUbJSvP?C}k6-X<9+ z&2EA9ua;xpMkCt!4OTb&xv8$2>4&4ZgMlmklyCG=`5+H=pM!_2d?b=bZ}RPEGnEd< zj&Ud#brPULdb8DU;C(`uD@4N&nUE|XDgj4eH7cX5V*n_;7dXff+iUi(VmJGztj!@A83!PTU8N*+9d=#-nB; zx3I9>YSc@b*3p3D4v6xZ4psV)S}G{XwhsmqHE%YZHM0*B2YJ7C2-~yyC8Bss4jz3% zyCon*;kVht|06&$lSp2S8{WFI%uKYZiA`l&IS-YyGTMm%-GqMG0J{8y%`E~n&62QT3>)|&tj5Qm} zvBN|(uR#SteA!U{EpB-%R;%b4$$J9`LhCa#8|h7f#TzE z{Z6|$A?AB%cIGEm?8aq2tM7s_e=Bjm2;3?TO(cav_l94uPr^l|Si!Tt8&3BLy%n4< zG!aHj+kQ0;*k}X2^wfwgm+oicLig$=ah1;udZ#lARQybG_&uj!5Vk0|wEC4UwZo^{ zdUi50_aE=M=mBN0sEr2npCx)WY=oFl72A}LR4+JQGzj>w;1AzkGON?ABne~uR6A;S zsLbB1`D&pT%p8O9p#BLFO4r=v7yf4SIMr}fL$|g%==ZYD((1D}pooB@qhp2|qwuHN zby294OX6ClI(Z?LF|~=MBIOb^ZT^M64OtIAFwEy+V!G{iesn2x)8PLO!YnqCZ-M<6 zo1Qjv{0nPcivDUxO=MQ;&~dIWbAB)k!SZ-$gVWjb@Bq9;?a^2ZNAc=mStIgb3amDf zz=`HwLV~R|Y$u=tA-#t4?NLs80G_rNV@?3xr_eeWZA5Vq|0kB@OaHE#wg5Rk`_0f% zKotI0BKDA=$g8Q4V~VUW%R#X-Vll$J)r9_#uv&>|r?FY!hOY>*4sSZayDe4o>2Dq- z-&8q#OF3H(ie_8c*J3o(-}f%%-c1>fhr}M9mNOmvqE`a^p&7wepmAK+ycg4P(yi1e z`;8{@WE^0T-aR-Iw=b9@?4~iHkKrT?%|bGYb|2tJfQ@+Az7KWeQf&0LDEuOB|B1UQ z@Tu&!ad4*LM@wawzou9K9a--nHZlHmnf*4a3{_Dw(QSCmU&x10rPN&!EA5mNyXnsI zvuJEa#DOTyol%deqo`wP7EAf?D>m27c)yHUZV(v==R(S1tEN6oUW@S@6XGRgJz{62 z$$oAnGv}dL+iEs0he`OL?$-;0Q^zn=SuMg9wxgjceMw(^gjg2HR+j zMp5c@%oM6N8=6001VBnb4^6o?zrbskDx9{W-tbB_U?)6rI&MG=k zD*!J=CjKzC_S@T)%^UDcuJ(r?GOjyM*sqzsAIfmc)Tux>JoUW1 z>xI!pO__c3y{XW%O*`(eKr0_MZIZ@<{`fo0*dIOzArIbPuZ-1(Y=F3IM8me)Tk;W= z6XQK2Nik5b}ELzFlBTQ9G6OrAhuBKp&k#;NaL2{=Ti>fr8Ck@>^uaz|(Gk8W@2etPZR zfJ?$u_{z9X*Lel~Qs#82*R9;Wx1BEy?q-%1q@j%8Cs+U`^P#23S!nq%Tk4X@j;HOu zOTIog+aE4u=MdYj{~J8kVH{rJHBXGMd-|-n`TzUm%JrA`BVquaT`hZ5ZFzy*;tLF@sbq~2%HRJQDuhhOn50D(E*i{$nyOr{-Q*bAMIlmFF zOo`AJdp|PpyEj4fjK!{(uEGQItK*jj!KwxEuj~-zvF3skPKe$E#oktA>#X8(Kv+O= zX@+g;+J}HP-$tDUrjk9a2%v-l3{)a$iSuEFDi52Mmzp4NSJ?0PavoA{M}@^6R6j6{ zAAHgO;kA{>g+&-v#CsUC|Ag;^btdjET}jRI`1hxuZp=aw@^t*A*-O&|_l>OZ6d+LT z$E`)0cUwa)rx<2Je~20q#YYLMlwKNQZ#Gz)@GqL^L)Ka!yf5q~Mqbz7rE+9te!s4D z%RNsL(sWJ1P8q7jb2yY1(yKUW?k*jEk?F8?WO!a?Gvlzk5^4d1@I%vZ4Xj~P_8DyK zaHAjZXjXL{y-qjcNI=3wLiZg*ffC&W#^3P5H;ceyJX|Tw=Wm-x-nLPtd4ZMRgo?vf zU*P*d8h-kxA1U5wRhE(i7klg|PDFl8RPgO|yCudMs(eWpZ$x4R8JMIP$M}lX0!=Z{ zdOT9vqRvX|{j|BEGAfXWT@!Z?Y@q>D7S`m7ntrb#_^(#P_$%L{J{znyrhFcZ{j&Ble}r^L4RT))qjvW{Ca_bQ-Fof zD~aI-H?r*^)51}-z6z9j(Te8uszTa8PjF|VLbpJ2F@d%~nf8o2et>SxGZfMA1 zj_ZAxiTRXG^4s>dG$E6hn9)7`8CqApD42@3h_~7&#!7KAAJ#46rtm@W(E#3Bl;V_y zSyF^d!yrAshUl5Z?YTH7eTyFj;oxgd#BaD0R2}p?RGfy&g)ayUBucii6_B-=lZ$L2}N%KVMh8t7S?d<##WHcY4|}*|ipY z9h$Qjx8)D7u&(at7rDya_oNM!E~*bEt*s>^wMCweh^MHcq+c{*L*8eo2T%bAQ#iZa z1wg0-hO^MW4tf2*|4@;HXqzZ?OLEYt;{CSzjj~-B;4FLkGV^(THTG7;4>|;{_-H$Q zRdW3ZIYm}CkdoJI_=-G3d-JxX-5!Y8<7(6?QR;esbC%ngL^rr=7iks(|K*R8&J}OJ zsyIjJdd#M7$1yI{-4}wJeOaPOm(G#@lZTxDp*->+s;rclz3IQ<0VjjX0~Qk(yZk+& zU56QOjCV`IE=*Uc#v?FoyRriw+nce2OHd|^&>EDRtOD+AA4*?*cSHKxr-q&Sx*r5} zz|gutWm2IQSf_FQ=oW^8m@c0D3>Zmk-0XU}O4BOWSKCIi9J=O0V%SzN?M_Veux@&P zm2QGj-Z!jDQ>DSVx?M#vuUDA#U6$0Ngk2~Fx0HZ0TRTw4Aco4gxJ*BJ&7ta3Lw8CI zTgl9yUu?g~au48fX1jFFxf&paHlN%e@-c~|;<#Kn(htW;Ga zyB(i@%`0dJg1wysIemTXm!Hi%)rg7TCEYcxCo?oN@AqP)x$;?!mn2LR$Tq$4zb?NM zez-yjLz<`m#r6ODnVE?P1cQ%JRa;Ge{{7{`>`Chd`zUzq=C~1EYz}naz`?q&_Ci)ja zeeiE;st??rhrg}$9rZW&0~-BS38egmub5?G&|1*cYByq^xdxDYlg)chX8kLhXN3|i z+a7DSYKyYs5<5$0M?|lJc83}0T4A|`izU2gkL78}3_T_<4MtBPiul3fIWA+4VSQsrWKau8J-gxV>H*U1fUsI+C)FN-X9$ z6CTjAb$E=hOZ1xL*Xu7Okc|wzqw|(LK9&_*rTL%`c&YA+s=xo)k&0zR6I4{Clv_UM z(w+6B-kV*^^O9tkr9&8w;NF8v+>FuHWnAv`%N=C#1ML**f-_QPecC!e^tN2}@a>gX3|Tc1^* zS&;sI@!p1fnIq;b>SXDAR87~4;QMlyZah~AoyWc-x0ya*2bD!wqTO5@cjVfJBN*7b zR!RGnsnQ)syID3orweC<`xrI%T(hRmv>KRc9qW*_egtHRFL!#&KEKX;h}qg(AYw-u-+*v zr)nzRac7shd(+$Qc51_LQ+Ah#g+8&mu3n&jjBYO1X3ws>NS87AvJ2gbSiy#E@nq)C z;}5$2ffF(p9Tm{;?X5O#Mj(WAJ2G$di`F1S<xYDEI2>C@IHVdRZI z{63NZ6V@-NM^o8K+;A|`ZZEah?O}a*t=RWr`apJW?YF`4f2N#|$`RWT?_e{pLXZC$ z7C0&@^Am!A{+OXXJdE<{;taV90cR*GN%Cpx)2u7;e?*Z8y_(6SlE@MLFk<%E*=!pg zKtd~gm4u^=QDCEXAN@IM%`T&Y%yZs2i2y#kypR8_TtuTP6}}}R0N-?ZZ4x^j=#S>E z#yjRPm-w1i{BeDG4^ZU&N|<=T-hE2@jO1Z3qu?ex_q0J5uK5HW&>(WQ1hf9n@5yKB zk*JP~7B>d&wi6Dx&uVwI{d>mLq8RryElC-nWQCWLE9&1ZgE=K6eg>9fq3yqD3E)|1 zOLlL;vpS{r#b^&|>4-0U7e61^@dzC#9>qJo!oIm=!WW*7a86WXd9pOEQ>!Y@aN5s` zQfi)jS%5JRCP~CUh2j(%F<=jkCO6)QYxsaWq?{0Ed<`2kS2CJ1~6=Y+G29NNMYdh<&dhxFxB3FO!S);FUv5qXdOQX zdNWg~NCuwSkzcMaO)Ai~gnjZ-3~Yxks@(Eu#`DAzEPw6shq_wqS##>(?7tL!|13H_ zz63!_g$RY0#)oE1((u&U9`g;fZ_y;W#}VLtJsR=a`<6%P;S(~u+mfKRx{`rYs;2O5 zP_O)AapG}bUyciu&6U=0W3t|ryNYr&tO^*&q{qMg@gc!+6^8<5&VKK`)L*b*#7A38 zPexN4gwDZO!&AuOr^+8wT`LIhuBF3wAhlb1_<|83BGJd%!)~*^rZ>y77BY(2hOEY8 z{bkl9Dmf%ULX;k|PDeS)O*Z7Ub|sWKPVz+i_^tiYUV#CBU9w6uAGJ9fyD?v-y-@z- zS1JLXAv;*y5&{ltt6F_a_*GUKhLo6|#xClmR~SKTKm5JF@ja?ZEWd|`T+oUyY8)2- z8>IYWlf1P4WMl{M5kh*J|96@CsMdN}?k7ZmSmOUdt3@BgsAMn@PaFYcH&OkaXzkZ9S| zElZGh$A7zcCAGY;Qm2FGLAbU%$+gJONLWt|Wjv+|1IX!|LX>)d3dpGU))L{Wl3&i6 zJFD6U!^DUV&t=0kq#Q)ZyNOO8*Ui>s&w3;XLckI~un$f~*+u!;ih)N>rDLSc*+o86 za$18Ye}V?tEjMbsjHC=HPuDHPTjf&WTEE+~*<&K3cr?T|(MmE-6&Jymk@VaziPF3) z6T6z>eS_1|Gz*@~JFg~)h?Iw)FK{sb5V-v-Rw(!@HjG63bqAtrUZ(G_fS-pdLy&S6 zZPK-h&&ca*9sxl7%77LoQhe86r7K#$<&AP*C)?Xz)iG;z@Rb5drF&|(LcloE_>Ie8 zG*4^6{`UW4?5(@ndbhP;+FI$)%u#Wye3E&bs3 zrYBDlJ~R39=@*$uILP(DDCACW1S{vv%Z&c;Y^AW!G6IpLNmUil5308-V(V6JYHWz53XVYPe8e$16Dc@E! zB14Q~Z|)O`Ug0F|wn~TJr5H9GMs9aJtaSWbq&}YehbH;&4IEU9)A=!oPOJ15cJc4c zL0%=sq5th=cJl0=I4~8j=f~#@JxeJ@?it0UMq#J=nfRgP12HNn|B!#@*5LE^!YrK| z4v9yXWXu^Lky-El;|Gwc8f^VO7MmgouG;!J1NnWn3t`kVr zFnVDQ@PR)wSXn5hkrPncuE%V7GiJ-F^QhY^cRf0}aE2htL~b5X_jauapdJvTJ7loEewme(KI+eez3- zc=P$0g&N-0g4?H<^)y}+^WOR8vS!a9%SJle7PD>%5vn7G>wa_)WKytg5CpR`6d4p# zhpI+Y#dt?#;5m*>N3#r1wR+yxm5j1bf^#yw89QtTmx}re#JwQew|jOxzTu3!I6w+y z=1RYZ%BxH>YhaVU>Ad>5nuO!S6h8EJrBwVp<}nj>*Ziht;i25ly8*s)n~CvPzjwd1 zDtRb?Vd^>@O=45AD`5vB5i26K0;hY3b=D2@U%S@0?w{`QcZaBt|#k(7IljR~gsC1Jzxm zIF7CB;E6U#%RvF$R8`D~8<4udm_<&po6nx` z_bB^Cf@9K>e|Eo1uQUJH+nUw}4VKcKCeHnK3RL%!`6z-|36A;@lN}GwkTlW)Y5H*#EJ~V zt=eXK+GdhCNXknoO5;ZtYdf}D35zy!Xz@!5uz)ziy8GlRswK2)<`liS~H zJ-nf{+s)OG%}6JlRx-O7ywX}sp5qMnl4GGv6bNhZQn|EL-2dp44GwNMv^}(uRG|6|4LJ0@tmgiu?xMQB?i7dd z1rxW_-B?u#zyM2Qvrkx%45VmjLR{dm`~*p(fc{r=P(Yp9k}EYtx*Xu2xm{=^y+Rk# z-=|`gyk}xX=Ib^iX}@z^mhAim6X!B^HW`!R)P|PFY0iaKtZ_LFLM102R8c1}y<|+p z=HqNT!S|Iw&;S*RGcuD?7TYX;(QDyKeA!sd6Ju`Wz?1%K>eK(A;E>N8(M(s<)GI zu}vF|qwoy1GHh8dhVf`+VwRZoP(OcH^8wuMeVmDfY`%iQ+002=O*B$(Y3M%?QDmqI z9B%jYQt`*02^CV&c6?Q1PGY76PWV`V3-xjGjTeU%c1I;9XAEwU_u!a|Mu+RFy3!yf zR0223T*|xVr#<*QH;heJGbhw(sGcR+n7Ktieolh+-1dj83^~oTOIC4;G%#Q&*he$k zU*ko}_5%($9}8xOF2{y}#Cs9Wxyu?e%>q9J?o$SK7dMYOLMf})`npEQeB@BD1xgb1#aW51G|+0o!ta;AL9 zd6^6zOGN~;1pD|8ANn6_jfLeK9N_aDY%Euk3%yU*HH=<%|J@H)y5l+ zN%=|I!8uO+54Ff4xvwiPOU`&ZDcv@$R8YtOP3O56^dUU1N96tTpLv026$TnITu$Ll>h!PR2X?dUC z_6~Uqc`rB4Xj04_d929(_3<{G+fx0oYi>lmHa-Q8I-Lj;?T_7Cv>OA$c$S~IQ+Wn4 zd(HLE&*onP9{l_ymc+6!a>BzMpTMMhftBZxPsV|m!@1A0rE9Y7c5w>EShAdnc{GGo z_);k$_mXqzz#;^Pjj1M@Q@>Ap{2wJJ5jDp|Bj4ukPp6L>!ww5WY0KlVjQu61q&7GC z&yKa}J_TKyDbyk-n%p5wT6P-mJiJvMWudF(h>Exgz6`)(#$y6>#L=rx!9>1 zo_eWR*<8|o$ZI zKZV&>9Oy=QkLb0t2g`nTqNw*9^pI|nr%p{hQ?_3rRmOn|p6D2B$agzAspHlTvc0S; zq@AU9dVMMG$3gBX0%6H0|2YtNd?WGhSW~}F*=~H0puO)I=IVZ37iRcV>zF!XnpRBv z4G6>?!>!4{3iA`uBU9{E5jLy=@97<_#31czJ@*ouQ}SJX%pVtBMGGQ?H@ckI8B1*U ze*5UOhRI3X5sh2_O{mYnmN1=S;64s!_{yL0goUU0RT6p5x(-HaThDn%|L+IXvZT^dx#A8qUOGt_4uQd^dCX| zfc8|X0uieoWBdM}N+%qHXZNCRV+#P%@P1=I<+y>R= zR_XuRb>SiPB#CxFcGyHg=3-FOaJUao%Q{yQ?U&9$fl4ga?T=W|M5Sq$}82yLUtFA%QNtYS>peVS-2 z#Xw~qt`_TgZkt71=&86^t z6qkzdhiT_g>9DZ@8$Gu!UO;XdnJ52hOSXq&haG`SUK?gE5FTpg9`qu6V;7#tst|hI z=Ayxq)7lx42gBe29`rpNQ&zbP?0z0*1qJn7E5?Q^ zrZdhN1*F0=?L@l=p(Ams4Ik4z)qX!4@dUF3CJ>k-kjGnX?R+}drrUtUc(Cra!%K?B z?!n3CGq>i^Z6GBwn=kp>kcw*9CDa4ppzbRPR z54k;`E2+3R+k^Eh%Y>yYYg+?{p!=cxVbig=~UOQW>`5P z=wJG->@P)YXBjJ7g9vxZxMe42<3OKXWX$%a-rO7q8-QPhiTi8xDS@nL+vVA0>04^d zC_(C~PZ%acyM`!XfYy1|%q!R|k-Ezo-*=^%j@LtVp3@_TRh*4}-)wvZ9+QU!H86Rf zqGvNH?-soj{ph!~)Pa8Gb{%eYiz(>GQg(*@g-q)qBV9FJbIo;qJSe;i<5$ z_q;E-vxdc|yzU+M29@h(8_b~4hhC5bPV>3;Ver^^Yx4>plDVw5ZMF?*v65v|Pr>$; zeSB^8qME$%8VT~GPabgXp)Y^h{N1v(V+PXpQ}o$VJ({SlJ4m9ZAOsVC{3bBV!qqye zL>mk}@UoS(86opN5E{;wzfpCFv5QTdn-+CKl5pR!iOBp>bgYY&asJqn)$;mg*$KMk zBw0Qu@jo2=f8Ut)@aJ)=8Yr~u|F0d-<+t~bj#5x)YJs%?!-L0SrZ1M=51I;)Rh0-` zIS1UhdYDzt*FoMyNX;J%0+UHl+ zE(w6N%l82$Z$uQ*XGV% z@(xle9_~)u3`@9G7SAgmdNxn#enug^A{owxd(aqiJ!x zr;`(SzdgFW)MIMFF{Mq4$OGc^u*sz|Cy$pCMKHIJT*+J}mnKy2mp(-ZvQ2doXF%FE z75Jn(#vjp*0h6OE6hj})6h?)Rj ztjdMvZI*(n*M}a+v#4;2nQ@8UU#XvQJk1NM-UwCqi{rSbRi=Z&J%~nj_3s36%iSl} z>9%0cLz8zEkm6s$f8kb0EIzy=O>M*mBsu4p>hpPJXDjfg`}3D)t@c|X>q@0NR9`yB zq)Jxk51vm(;8-cOs(Ig)a*89?3H1(YwkU1wJ4co;{hPM!7E~sQr@!NPZt}?w8#fVq zzuHh#i>G-DdcS7K6Vtgp5(zkKS2iw&@Z4J32R^e6XGa5SQWursWqZF2Y=kltW9J*=e{J0In7HE13%&2!v5ACO#S$&J$Bp;td z#!y8RT;YC=hgF?#5O7@NG(p%-Qgti~<~=vM!U1ViP^Z@QB%i+H6pxZ~A2?)iqFW^2 zD111QYR>otYyW?zzDM5yfbF8z_y0!vE;&C2U5QmKeC}0gG+{_6{ybUExg3KfOg5im z=4-J!eM~jJH3{%PGY%fwFov1q91BZwR(UV03U+ijy;Li&3z7-k-Gdd9O3vsJg6I3j zB?SoFA_49F9$IY7E|cm_)kDNItcxRA1pY`Snj6wks*RWBuBHRxW@k)KI~<-N1pY7| zyi~c2bSTWxEURzHQcoLUog`NI%S(n}H8WchHO;;rslP}gEGNbz%yUfSQ=~OY8wlzo zZ|h2pVYlA!Vi9F$7M1LFqC>Ns>M;8x^)gz@U}U+PR&teoUz12re4**VFUTEo+zo6&uk^;)$EwZYG^D@l4MbT#{&Ou#hL4r7roq{ zP8$75{`Xinff)TD=DA>HCqsHFB)%+1_t-`}4c!pq+i+unlDHck@wM8h7BukMpZ?sWk)_-_{ht)=mI==-d<$`1Uu z6ept_7^zC?w1kAyq51r@6m2_=XMvWo_#UWQ*IFg%#r+>ymD^{zng!-xL~a<2r>XkF zwAnlKSN>RbSZ_RCq%t`ngeibVAj?Pb^&&|{V%6E^mN#AZ2u|i@mE224mg;1xM>K)3 zRg_UbjqE+Bo#?(deIcpf(u&kq7 z@^}d^Q{fQgmZ)=+L9U|E<`V(;tEn%^;G#NjIk8q>uuU5W28Q^Sp;pn^kv=n_1OU0V zFl8V03ShN|V|tDCD;vokKAEc{2jT-ESD+g|iQ_TnH$;vKaVq&139hAyXiT4ra~~J( z(HK2Y6QIds>MYLAqp-R*%RIkAOOGU$5;`&4GT36HH_~)%m4vK3(IYaQvHvJzTPQ)o zpfxy%5^H%7G8wr< z6ZUMa4K%gQp7}nh?jG)+2=qNRlZX$sq?ORQ2=fc2edyxB^asT?Ece)~3tY6I*0A#e z!EexhUTvV;u(MhP3f{I_c2X0w%WX!fO3H%+S)xlYJ%_QNehf!>R$L^BXk}_IyT`U9 zroKrgIGj#*W6n5i6t?;7gDh{5J+ZL72R_mT1y_0z{F83_#b!gS$dAHxjV}YJ{$wDl zVJ{qQCv-vXJJJHt&t?FH#V>GkWXb`het&+58+e{55%)u~zI~?)1aynC@FB-1(r$gD zPpN?K-mHo{+Y_EsrkyoSC3ov|BimHo3AQax9t`p99FDzOWaNDiBCsWd8cclQ8%+OX zUlLS0;Q8IXh*RvToK)YZ@X@5{@-`LHB<>RxH41nVZxYkMhN@*)k{!5DO2_{B)SeGl z(UXeqWgC89ViLu=TQOoaOxxcZ?k`{+Or(+X`xm%L~+~yZTI8qnH;Z z7V)I&KHIsPBNG0mB00>7$r8=u_lpFiV(2qJRJ&qO7hwDcu*X)qfrSAsap-PR;m@;*u#!aMZ|9_)K)~dGy5W zFKJ6722qlk%3fgw5e;*oQLT#2eN&ssLwE8B%f5z=G~Sw{u=F6ucqiESi*0Dz%f)NB z%TwF4K=GwY@n>PsaFAat(&i`oXVNGP2UewLMU9FL`#$C!@7U47!Av41X$pi`14^3VA0|4A&UXIS?Pb8)+i-Qa&7;1OP ztAnp&ZPj?|iT7*3Ii1Pkn`j~qVDDO=t(U)?mn@{)2q&!6&N;eaf(}(y$2ynZ_Z&MHN?Cf zqW}6eN7nT+b6C7TuNW|&`Q(1B?~_kH<@V7m1+cVuw^>$*F9PDC`i}7u2UAiYwj^L! z+qSB2CM1n_DMYHS)uS?(t@SIhU8i``Rj8<@TufnXS8IrN%f>q%*EcG*M)|-p7gosK zvp9b7HCp#vfWjtQB!vNAtjyg~6ia@3n*)A`kSfVby0{-d%n}?8qQhdg}>m*CnWXNZ5G+{2cV(+CDw>%BN=oW0H zs?3%;G#y`%T)(eDsgJNpg zJ58F@ERJbRiW@gNySDmB7nQQaH)s%j#642Qpy|P;E5$?W9jHXa_9fd}el@MH%dYuo zy1Qi#6U%l6FC*;e*gBJ5qz#*x7p-pJD`?XT(BC&}y}NI_$?%1qN#;o4dw2bVLHzra zlEpd*nU#`F;9mQOBT;II_2`U*Oy}AIuUFub zyrBtP+ru44EpVc@Qq)7GaU;Q}EmX~FB^<1FDP2fLtNz0`y^&9h0C!#*%O)E4s#2q9 zt=MI#nv7CPZH#P@-O184b8_j?`lS1%U$Yh%(C}+;PhOI>`omYnF64}!{3Qgh?nr-% znpP||`4px6kt*aQPAxiQps}!KaV<*uE++$D$~-s(7O%NaA8FKu825tvsXfTI)^$Z^t6lktp_g7)hW zeRzID)vqWeN7!r^PlOD7>WVxed*zUAu9*C@kIp3lKLg5$n1K&i%Ew`PBRQ z=us|vxBNw8RkZDhaiA%wxoWnk5!qUHHvv;y(SQ@)nIZFfY@T+aD}e|EI>vLc618?| zcL&^y1!$j~=$yCtJhJKC;sPH34=q<2jkk!>fXm~%ki)3|=`{a-3kbu%d?>vqtR?uj zUirV+5S$-^4*m60pE%LcOE?4rQ^`_Pgemzs&p$R6EOQZWPhp2v)0f!*Rc?>)X~Ucc zTbM;g?(ILmT+*;K!$#C9v8&asY=juE8Nwhq0jJJX!;xY1G!N6|-AUT-+oTZ?S}z*9 zGa3lkekthvk)oC>Gu??ZlsZ=gTR*hQ&w?JZT{t@bytUm(c}u`%&HuuJ=)ih1|2?%6YHL;+Uj;3V=L zli4jAOeaR4+b*dW$iA1cU}ZYAe9ix(t9+TC6CX!>ns79duecsJzs;^Q(o*W#WLA1d z@LR3=lJ&EcE?{n*Ur`UAaD z?QG`hU8&@072;Y>KVy2=I!Ud%AOn62Z00@nj<=Csr()wy#KX2nZ3Xfh=Y<%JkA}Ckg|JpUt#bsPk zd#gzd}u-srckUL6dytQB<@J*h{NztR@^-2)V{p{IwUl$Uypy9Vb#{^c z5|x?J+n17JC5hC)Z;hzlMvA+q=49GlpFqHD`;C>(mZe8iU^7=*qaJBH$y#BfQTOl` zIg^j$I_Jq(d>4q}h;ho~J#2aKx*g-8Y00OGKbudsSA`e>`{YB~z`ZU$->tY}gcBjI zv}p6T>G~dtpGuRTuJ<_X9EuC-AYEL$DDCsA#=7Uk3-q^Gh2^hY;ux=QH&9KBH>F1R zBdh;{!#|)u?ro1ldXRUfJ+9-ksFZ;fGYbTbxP?w|BCp*uSW9(Hh7Z@K_#kRA)1tUS zaxOJ*cY@y_v>HUD18d4%SJoKl5|Ze#7T3*tVWQdNT>!H1HiAhm45Y(xRvs^&PJzV6EDu0NVA6c2*Tw9mBc?QGN!KtG;9=_XK zMRoCrQmm_erJL*9L2K=_7hz^pIP=KPY=%boi)ibz`aae)W{T{Aj1_I4yDfOx(PklKMdn zbGWXMABVmDdGF|smE9&fz4!MY0k{fZ=&z;%Im>;?1jCc*u_xzZSG8GPiB{Dm@#{kv$*a-A`bLvCHv~p$&#++&dC4r_#@cyKS_H3)tXMU zm;8U74;wY?{x?xC(J(0PE>iFCwRK0^4aH0h`021^sKcJB*J_UbTmIr9uy^1LaQKpW(PR_HWT$6HgQX9>4glPmEnoO6`cpj2l-D zlL)mjTNA(q)#d@$EcYF^g5gQ+!Qv-rfog-;Cx^9TS@3}43u6v55$oe}hg^QoYd;l- z;kt?$Q6KiSudMP;iyo@{YO%*A*~rYJa9RBDZpj3Nbbkhd>8l}NMM8iiQrZ5yDWMYSdR8x!Y)|5V=819@H>)36--)YU%GMct20h>m$1* zr!-HTeHLV&@7DxA8YUlA<2T+Op@z&Dd}gjr-*EhGH01emn7HX74j{QzGo!m2(t9%e zLWr`kDu$1djk6)PjoZWTd*_yG%Tj*WSaT}pMNs!yfiBnuLg{;u7@4{_<%mbWuE+}E zWvJrgn>~%tI+dfFwg(_>=#r7IZ;Ex`OFw$qoG!)bAE8&X_?N1&Keil1#FoBi2>BP6 z#NF-rVUzi96sC{xhNnrBhPR_e_raEOhZ*R?a^pVuRGIIHF3#iM-@2w=mXtDbsJXh^ z67MI1h^;oMZv$(wpJXbmT>!6>BZs6BQ{L;>{k)BcJi6PDvpl=wm1P{CbG{aeRvFA! z@4kPXTU8X(s3?f+BTih4-G{q6cV6nPF+a(C&C*s!OHvfQoM1Dt0`;R`zvr$_KNn~@ zT{*kqyi)c1Dl@u+8z=Eg6XG|b&aE)^nhX=oWkT%H>qNt9({B)yiiJn5S|@xlzVIS+Ec_upXgL@FF^>=?0s-2EeCi(@VzReU838$@yp^w; z#4l}Eoo+V*u8${g;;TQ@{rxxH?w{WlvwvNb0(vkEFaGIU8IQ^=r-z+&CW{`+U=h%C z%;=)n3AX&RK3I6tUtIJ))_!|=D&v<=uV7e6ggtmlGzy?TewquAb`l)@k~l985U@O9 z6OT`_?&9}69>FHz>+66o!()=zf5(Vrca~3#A5G_v`(6v~Q?`)25@;>Q6DNC59QOFh ztNgAacC~{It#P!U>Bh4o$pw<@%~*DbL@@Sr>G%`KF5y6}qOCZwKs`l}O5knbx;8_~gPVy~#bI-(MJJg0qI&<|KJ<*uK;rCA~L)1@DaZ%!u zue={E7IyI;?ffRMkA0SNJh~)mk#XkOqTYRQ*1Qk$^ib_u?B-7zvv?QNIt`UsE>f4| zpB6b9i6u?ik~Gzr!%B(Sq)RuDKl*TeC)()wuZ1t|F$Jqz`!wm5{Wjzwm41$FQIVS?S8YaAWb-r zyrSM;7m)Cw_$u-Qko^Z)YtRWVC@R$+%Y_qAE`|TbDMa0zpE|4erfa&V=C*VL0bJ!2 zPuox>BCYwrel=@A4@AMB2{zj?6VC|;G^!rM3;%wii)*$ze_ZsQ>TqA+04%ee`|j+XP|qY4@Y<5Ob$c-Vw>y zdRQKh74#{|p^8pP|HbFk3@(y_p`ZId>;oOImn&9XWBq0nLvenF!-z=d)c@M)qVdl3 z26Za!FXhiRMhduMHl%{99iCN1{5cyx;vlwMH%o&Ts5j+*+w4d);ODh^Y3^P=7mhL} z^HvSda#%7Fa?8F+ZF!*)vlNe{y6fcF*lT6!yUr)hrscl(wYAjwGxKMB_^#-ibcDyoa|*=*Ly;2-9c{m=2cZM#K$u!$ zGxC++am@!l5lM|%=c%7?>gi9_++}MpFVw0YC{WhGmIdvnNC8)ZZqJ0tP>9Z02cL|# zdL;wfMUWh}l+Y^aW1L!Ad~_W>byZd?G9}Kb)8O zgLvNfdA>bmMlMCtw{NS22kR&v{|8#0#gNrUleEXs>ha1+Zw|P>yVPI^PH8@sp|2&V zeBRw_CP*65cTu5vz>1as$&#U)h&my83ee<>3EW$HM^gR_FOn%e$SMs~kBz)2eFelb;MM zP)hOrn(VFYz=?hA93AsX(w^}s1?w{&bC6jyd!+kjVlg&KRNMT<{EU}^@W zn^s{&i|PZ`o2sX@<9x79<2L@WjM-2YOm$MHPGbP*Y)`TzWHfy zBuhr(8m0d-YUAU*#s}ME!szNP+~!N^6}wN!xPVqOBm}RbG;URf1?MKzz6Y69mx7sQ zu2;4$^A=Hi;lq`Qo)-E=%C1i~qlRw(R&vWu=)6Ki5#PsXcugj@j%OI$eWod`I$F8#>njmcKy;sNe;d8~D zcb#KW=enKC+Mv)2e!FqJM*w{DhW_CQwYY`8AKrrcba;qo6z-cIe?9=bt9@K z?0oKJI-n@f3_l7cXcGQ>XIuo0jd>4cU%ZjgSTl@>-Ii2Y zCk9(Oo3`eBDw~yU#%ciHx@ph!at#)UAtw@t3gf4pJ{rvkDIX)ksUJyeM=Mc|R_R<3K}2AnK) ze1Fv#O860$&sCaPb3u+6X*f?nVuysIq0XX$Lk->bBt0TXNq(6cqF=734A^)ZCQ(Or z{9h%IOZ&21`b?~NH*3$HeJCJK$BOsdV007zf^`U15MP;=5W@ad@IvU=ycO>O@=hR* zh{|yV+YgsSkqGC!yM6f9;yXu?%vTiq|AnC$Zum@hLi%CcO1GW za8e-&BxtW)WS>w$f-U1HY~(O8N-4x)r9Eg5df5YVCjWUO1@U5Z6#-ldBXzFxZWgOy zHwg7GgxJA4HS9`R1t}g;Pcyv&bQ=Q6Ii~}T*9w>)mhv7-dlqjM0v?eEPx52@{|(;- zw2?0@TK`9i$x%UZtJtAb^BpQf{9epK7z(E)vzJvIgfwU@)S9kZ?7zb^j=r6q=o>x> zGpH5_CdgPL9h8bNw(Mk0Hsex(O_RX6^jRuUW}JDBNv$2ch9C%Uau}pqO(EW11Cr^c zLL9v+<<+C`LC@5&$W#kJHwr;bj>e8`t4`b$t)RM=utfJx*l?|EzV5SrMB7ub5d zN%8xos^WMw*AbQ2-o0S2={>TB%|JDx0EBQyjC@G_n*`L3h0;)ATwdf zP7j7|K{=dKj22P_o%4+uxHphh5|iMwdp1d&2Tkc2fBiM)NB_>(CJ!Zw;Ti|ZY!YWR zt3g8aPa1}x$=(5;Sd~XA1t-^Xg++;nmI?12r(O^Ur&baoa`|?B%Z@}}Rg{$;T_(2d zvqNTQU^umi>3#vrvg!VLeTIXTga?I-@yc(j)iocMV4E$fyI6^-(p$Qj6^s_G-C3#a zfEw|14~g0$t9#}k?cX4%T0~3W1qCnR6iq%i1mJK zPBJ6O!jJ)m44Mf33ib^hxqhiDl`dOS@-E@6GvMo*>NU$*bKNwT?W%lq(tMX#4Jz7)eX|k$;i?a z>JodOvV&@?Mg;5~c+lvd%6?m@@4{p8 zC?qn9d;8udkt$LN3HRL$@&|V-h(1n8@`kIUMK_CYbC{MrN8GreT-lznTZz(vYkS_3 z>lPE;-hU&9sdkd^dOxUc;*Rx)6|9z7kBGZE*)`rTcgH$J(=*fGE8JJhvVX*2C%8*L zayoU8YPpNMFM0T;vhx2i^}WHG&i>az{+~xv{}Ca-S-+VzzjPE4nie&~>`Y~yjW!m0 zqB#h0O8sqNg~?0y{p74QJrD6=5lgU_z(ncIp8(j?qgx6A8(gxlvs*Pdfr{ z2idu%5vA})vn6zpNZ#KG)g`L0)6Y_vd%NqztPLbE#oj0Z6L&)q-a;9%vXW1*0e7!qN-$-ZV-ic@A7O$RySg#6{SLv4Q)xI_W1&?w;1%NnHAD?IiD{C!v zXU}sX|IrY;8a$Rf=pEDiF#|T*27lVtEBGn~O#{j^5|Bo9#ekIh&I50p*{Xfj9J?Bh zBs1R0fh&!RiI`4Ny6YVuHI{)Cre+iJ?9)p@1D}c6Yz?|6+k}X+(c6if6R|$0&(86r z2`e5p7BuY|{n5aC4_4{2Deq7!IF=d#4K@^L_`SJtz1= zM+aG^e6zP+08`a8-8dZkwKp$HS+Sxe<(1Zgw`#|k)a^>M0rkE`?|#geG1Oi%dO)R? zT4&u-Tzg=?nG#*8`h4-(+lgA62eS8}Y^|J->qABZnymA5tS~&6zM0`nwGJD>mN)u& z;6Qx-n{+7rI!oR|Mvbn^SPa@7N0SDyrtwOX!&3ixmew{rA*$WN%7m%knFY41Q#m`a zd%GUyywfd&oJa(IkMu~cng(Q*HMlq{J*R13Dp~VC%_P(BYT>vC=Xh z%A&eFj%ySrWgsM{gyLMR@W;Ld!+O;HBr|fWO3+qh2TZIO3;Du6na{a@Z5O@vhGp1k zFzq7P6*>72*z0$Ogcgrm1EGV7cAZ;QM%_ad=bzuIxb2vO%+wtjXk=rpFs&56g?z*> zkQY%aM`6mbEdqiGdx{SCKlt2+DwZ+xOQQnjKvFgP zrF!U3(2sD2R0fxROB_saBT+fVo2;0x=$1^v%&}|)T+mtfJ*%%%3oQh70%M!u1-k@#WR{(&0s-V2T_JInk%;$7=&Xu2Mye*Wr1nbF;ED3x|ax z6LlQN+oGRALkh@?y9@d_qmA*(RCGv&=*!3=zC1?x7Yd_=77YU{$K#5bWLDG-C?OxZ z;!}H?aCUZzu;XYz+VM$k`O9I4vi%sg4*RkoHM$X%g*8TM!#ts8UZk+h5A{o9VtLqW zFx#v5X`5Lxmo5xpVq&vqLjVpy=2J@}SsJiM z9B1yEtIya% zuHlMea4of}Xu8{ZqphN!MkgvxBO9)SWfc4`7T@u02+7{9wc1TUF{lkTq%Q{-52GK$ zP%yl&*NRIAJ*|t#Ki<1>Wsgs1eIn*WVk2&jc;lIlN8^;lz4!Z}9*8s=w+)TiHSpDU zM_wvqO4(QM&mviGzq-AX5ph6un5>`V1)liIYsg20jEO}bnT=u{1$r}!CSiZ;*usO~ zYN{wWn8;G8B5oyS0g~XArD22PINz@do4a^F)FOv`f3B*w^Pd=6XIEeV7SU#XP5bJj z5wwt#;8*9*GT}#{zY`Tz7z(>Bx~bMv9Ow1^ux)(H48-@yd?9mlTNAvF-pN*dT5oRP zDR{zgO>KFd$ z#U}mRO4^P8DXkujpihedw^^R-mM!fK&mIL|weSj3v3l7#BBCG!h^UXS&D(6XGDZZt z!JX0L0$f}sL@e3&_d35b{ZxNypPOF;3$IM%xveq*1vnMSaADCx&K+9q=gi$+kSO5S zVe)sg5lfQs1n>5}oFOcif|-hoTxE-$5njbXcf=&=vIVrOmPjZ)pbirBV-(MjSk>7g zBk{em1SX?mJY|1@=Juey<)gZK>oPd0d}(ev;c`y0m|DST+qMv{VWxfJcR74zC{4Jf zYY

TD;k)RhmN@spJv9l20JouTOdOL!Y2F<=1QbI?m^!C>ex@+JvWXBeFrkV4{e z$7IsG{OX|gNC^F9Qtu~LtSKp~G5%8OybQPU{duh6vjk5RUjVWAijW<1^CUNvck0a= zXXWb0SiUa~G!(N(zq#i`64z*!?8nwb?AjJmLL!z@)JL(41u{yiBq5iC+WtGm2O~k7 z)4CRP)-4uykF@>9KmU@ZuUv}~jM@o#PI1{Gh!Xeaji$U4EPk6T9{wS0o#AAIHoVy1 zL-D`P@8GO~0m4xF5JAe78I`!44yCYJv%MG-O+P{rLMb8Mp$y1t{Z#bhFtnte)9E}d z8dd-5ILW0(Ng*avasuRp?+zjUMknd;AG;GhfK7-ig+S@{^3Od;l{zcQrU~=m2fNIcGZXV=c;sqCc0Yze=t7f@@n4=Nr)6piepBqdEdZs)~ zDH89Ko!s59yIf37SO~Vy03;M~Pnbk(dfwGqsx!y+h#jt}gBuGMB+q{g+Es2CNDjz} zU&UQSf50Af`_TWYpR?$DV~buv;wnfdVe<|sNBrQ3jp$%%hD0#a*bYr&p3xN%f5C3E zjCX6lY20sioFs?FK2=C5SYLqwX9>XG7Jmtq6HiF&Pp4KMg>-YTxfZIDFCO63og5B3 znQt3AvBUiU8*M_rLz7k348(wS4|xcpit=Z9oAitsd31y?m?Y;?2t1p8bfp%_mO27% zKN(6k0&Fzbe4GETe&S#IqDO0ow^~b*`FC%%Zo2CoD^RQP2HCN>^o{NCSF(CPdRF|Akc4f{ax|xM>R8<~>B2K74XW<9;pa z_R-#%YH?Pz+j*>lqglyZwd16$1y;ViI@5>rVOxMsK`qZuiC&4IB72;pgnUeO41dTN zyQC7?5Na}QnzUb|Y*vOJw+u%2@6v$2UzC*IxNhPY@mBuf)O!uH_f$DPzU-9a8J)IQliCNMmIhs=UUCvSo`Vrg4`u;?qpb~8@j_xLoIl8x5I4p0 z@q8=IzLao6C6$&;VcAHrXMPyyhAdwgWFyZ~pC1FT410j$PBXt^hxqN=?~c^z7K8Tw z3(LDqjH5RizrLQ7l^TdxP{rWnIEG7B^@d2ehhU07=_+>7f*-_m(Kx~`t_@!h_*=!h zT)kX;GLzL=aMifc7MD6!3s;YDNr(Hir1N%no3!^U>rNa6%h27AD(~l_PRU%?Sv3C- zS6>+v*V=52L$JY}AqfNt!QDwnAUFxZ-DPlhf;$6D(7_T2gy8NDgS!mw?hNi9_rCYk zJ>RYV@l@^obJw%GSNH0*I+)$pb2W8)UHPzY>bFvG;tOgv>6R@XPJviAaglpanwC!`$c*e0w=u50K zrE+bxPf&x|oqvH*je6)ZJT`Wk*gB2PehhN?;tOp(eJhaZ5$3zU{8A^lkM&pbu&ls7d!wb|^Lq0C23H-)@y zV&b(5fZY7c2rQnzyt9WIitZXsizs1|pdbg`+zgcnh@zBz)xl!wb-#siM9EOmJW6Wb z#y4_is0gc-kR2Qi3&ol^OiiXMn}t@q2^n0zWLD?A3n^&W zH5~(k-Ug(hi@043UY*JWM zTr6Dh#%Mh|M~K41NwGL{4cIr+;_%xLS6TTiyQlOuF)==-wOH7MU$YS)zV#6{hZ8hpw~;jIWxs5%$@J;RhKv?PmK&(dJlB1IJ8MMl1! z?7jVN;+Ke>m82uFlk;A<%p^Kw@$E7o5_-6svl6$Rp(DzdXp;(iXm#bP2M4!Oi9XKO_5*J1Ex9p ze#A#eUQ)wQmvwaw`|O{c%9yG+c6HsMu}?+T$1hU>$dqZFVot7zzHgF}ri>~}O+4&f zF(#@9I?lv`N^$a$H_ zELbNdXV};#+PBewQ@d*Ps5nS%4faX^A2nSd}>5lO$pj3 zf0tSC)2raXcd(v(v_4hFaNT#V1*J;SC)5}d?lD|>G27JH{!Pi?p3<4&j})WSeh}T$ zqB~g!k}AGR)#XgenO&lkJ|EUqbV;E=>ad29KT2I8m zg|&)tPQXnf-I2D~@wpYDE$118Sqz&i6LtPjkMqF={B1y@%jLi4srMsKchFK$qR-~! zKHm&$Eaa%wv&=FaPg_mjy@-7}C2@NkM`xM70wXH5TI7)@wr64%SON8G@ikm>#}G0J zync09GV?HH&XXYH{KaMr`k>vic4U9nxaRMRu=@{`Mk(4MJkd$a+*>Pqh_X zmA)SjX8BU;BPJSx+aU2H=bJb6S-zrvmlkPiu7N3z*+)WZtGc{tS5I5!_HeK#&cMCi z`UxXPA6DJ~-&irB`2@uMWNJ9O*#|@NU0+E+)VFZw@TR>A&9qNKL=_FEP<`>5QXdu0 z?`q<#Tk+0=-m%2Bo?H4@BTUoD>yhx8P(E>65*uVo)GWbbiqCNeFxP(yPTHy-@J)*B(25h4x)N-e z##;z|pOY@f2!wjgHksc42*{2zKiZ&9Lc{r*R?t&=|I3*(#1-*ph}v<^NAH|~v@&sJ z%s!@)l>PRj%j31&ZgiaOhp;eAEamYOr)o?ofU-{LS6a6o6zN6$rdK@pVfki%HPRyq zOj{eA*4SFc)-k_svm}R}CJud&?m~fj{*;#&x||vI`VfAsYXHx7ritx7tRtou4M-ve zVx~HJqa^ZBUPWs^DYlfXUpFQ%LUuM$XSKbhsQpV^>&3#>jT}1oF+JXv=;lHbL9ylX zB91wGd?^de+Z#+{7nB(ms;^xOGm}nv%7kQgo9eUXaJe`W#0Xq{j$0q{Ip|2;8+8J< zv3Dk_w3CZ+g)X%%6rE)zF10&{#W+E6W@73`5#1&uYZ#T+{J)R=dsco}Mme0XGdV5O z35(=iAPT5cqb>XTK3nV02u?pJBev1pFi?ajc7$aIdrf-iV$R|)m@#@xIA@8yHtmTDW;T(MK`a zG@_%`c6l|J5qY9~{6tj>Qan=0^!xo)=AMswgwPBT1!TV=-?+;<&C>);2ygpQNLdV9 z*vb$?w6i<1u8B>qsj}LfIT$d9uel{|Pp%&Yk_TVejkgo^ldrNp-1|}c(L*$xFP<># zS}MMz_YHMy7_ZIjku%PQWO>b1=bHk#IaynWWg`({z-4&;^iyif*0ufa@u(lk+W)~W z&*(+=Pus(@fO2r5gY$pz%=5GOZ<0`Q|6EA}XHGm1q=`im;Y)s%gJL3HDv(AOHQmxH zqe}YT*$YF}9;n2*%H&`kK!RGL2Biv_xH5jt5G_xX$hMX{znx+Dgyg%wGj;3iDA$LR zF&)VlA+el}>?lA4h&`;Ezynf!3kx1T4Kt4U(i>BXTovaS?o#q}!jKftjm_%KO6u=> zyAdO`jB|_#tTgfWrqnequE z7~7UBqj!Opqe4PS3bAa}1nr)x-fQ7c;q^}b9a7wELMeEIlxV=tXZHo(vD=1eCN*ro zq1w6)FozrWYxp##wZc!dH3qjB&T$yP6ESzo!hKZJS!=ClpfGK+=Q=g>Qw-ozs(reY z;pWsC@*dG}c{;EVmu!ODF{aCdmik^aBS4cfYUqebV&v)C+8*V{ z`svNpSsWQ{@QEhl@$guHw9;g1#uUJA_&ov>pzQV}&Dud>Bun_`X~5KQVWD+)F|gM;;$Z}j2b?hQtHu_PvppD+ou%54(#fLH=1hz(|_3N)yGkl>L#uF{;9O z;qe8+3-uk~vi~W6)5NbXF~B*EW?g2Zzi9By;RmD83R(Skv6VN))mhx0fin!?NfKG32{5;nm zlC*YThUjVeZ=pI1YhZwY?RjB^;!61oEsapXQpBQe6rk`k8;#i5h-V6qUY~S&6z&T^!ii#=m_xck8+S`YmecQkm*L9C6{TL%B_Hz z)md$Jz>h2~w2|tsGzgnk%M-W9M)(_-Kc09e8b#htV;to7*FCT6K41w5UInpHDoJba zJb)*hdB8$n8S8rNM<;lM@>@uugP~%gA2^Z66lpq=S7b!-A z6$Wag!QvlHMS^ogfS;|Oi}ry~8fxu1@p9pL=B0BgT*LSjCVla{=SyG{nNeeB{S)Cf zu=YC7n8coXVI4dqdaCPHiNj2P`C|X{x(o`%qryP?S_>?3>bc*-8?}FARvciP8`H@<_qG zI6z7aR2lIR8V2C8XcRWjRY#=~5WIOm!Zef15DE@JN?H^&N&(0`1ir=K=G!JCgjWSQ zZ|g(fL*}>S26y5!!iF#H@n1L?hw|)9(hD;m$Pc;t+_^vXJ(v!$!xQsRo^HX*KA%`O zK}GV5B=r)SqI&gvO*HKsseGgmQKNupMibr zMx?5*KAnHi>OM`3_J%OIleny-K3W4I*K$Uc9QJt=d1qnWJFitxG-%^IVo+spft*}b zL*a{Xt*XIz)6trIL`u-cCw9EYSZd#rprFH>j;Wb->()d7Uy$ar6jA&pL6+fHXcu25 zF|p-wV7L+tu@h-)Dj;-3(AB+oiEzQIAy^L`M;Pz(J;B)=`qN`kD$rAYa0T zh$<0I19uz%0UVeJvd+W5?cusNsl13`-{AD5;34dz^rX;! zu@@XOvZqgsUj#99JWpvSR)UEAh*XaBORrr^T#96MZJd9_kneqbzg(018zPPP%j+1d zXa1;kX(}e@6%fcRluIjViz5#WZ;SAK%nI@>$(1V+`aQITAOHkMrW51hFsu9&$s!p#H?enwnf|!5ykC3D8p`JKW2XH85pm1HC58j5M4;PmEa{p)oK zRMC@*gO4@`j5+TphPeJ9+?>J6Idw*tKZzF}Z*tkHdCNS61)YNnAM2on>+u=NwvL>3 z_R+?j-wk}k7&Q>n#4_-%6iJjJRQV34x>S^GgnU?UuUJY~HHIowL%IBqaV^KjMmK8D zui`7!QNv;~ST&*e%{!MS(O?ZspB3|#9YK6rMw8s_9=tEEsjor{=ryId0%eH?j*Hmh z$_SEc?jnSmhC93R0A55Y$1H;88_3aqzH{o>&c+TUf-E?9((c32ffmgzryA|ht4ure zVeI=8lLuRE^)KX&b}y5Nqxz{Zh!9>tTnmo&c9fL~I|}JA|CMI&#|^ql94yR8F=_K& zF+B||=V;^E^`3{7(4{Lw-waG?b9D>%jai{-K7g#Sin|J-s1AIm#e4dG@U6 zYRi|FId(j0K;jDL46o6kZb_A3xO2R)H1fS+)GF6mJ1Py!(aEtrT#wNy zwr9^U5vOsG{Zz~OrobQSn%sb})IUW^fiYRNo(DYP2CLyy@LQbCc5H=@QO=vwqcsmc8A zgNi*?{V*o^`XzD#89^5o+D9K${(yxp#yit{SW1ri;X}3Q9$@HEb;_dnuh4di$#7cX z^in>^*E_4-?C=FIT2#+Bhh-}?`Gs+!aoed-Pu7Jxw)Az|mJZB{Bfl{;yubA*fnGbf zj&j!~n#ha*VVevCErHp%_|iL@`;|(GKfF#>C9z_CGvq~&&QzOKv`l!WPw}D0q7T=X z7qyR<6SeYQx2ggEe}LW4x7=I6ZV60{|NEl#5BB{WbfopZy|wv4Vs0>H#B4Z^KnFPA z_`35qRdb{5I}vKByU>VQrKZA!;8~@gYMY0NKe3u$piHO6z_@fQaEIqS%5B5dt=D&3 zpRh6NX+#K%8trYjVB2YSHQzf_Z3Ws6_(cUhA7cxf+?5cTY}9hfkI*(Az|F$Bz)%W& zlNl4DTZz+ZI4*H2u=qIV&s~Iu6RRaq<@_OuUY*+1bfQrA&#~|5pG5BQ^ssGqSW18W zi6NbnV`QUU0G|i$^-ik^B{-wr>O&^a#cOb5T_6=PSSBfXBjb3uZgbr;no#upafupY z)~LqW*9u}0oPO-QWPF&N<#y1fsvMJOyl3KHccm@bJ8X+sSnsxiFMu@`yDSbmU2ABQ z_pXG*Hw?FA7DLIO`0^F)z4}BCE<3T1kGGCa%(nyT;OIA&!xA3bt)91D@3wv3I;eeD zo_O52xs=iVJn|qsvDA~T8I>;D;?)YPsBtTLB4egtliQDydB=Y#N-_29jv?X~9%2dI z-J77`76Jre2$#2k4ohcF25cSqfWAF>?T%@-RK&vGE ze}6yw-Bfdny881<&|9HRMB*b#yF9^x3zM-DPu2=xt_@|a~T+59p*!^e8;geC47;ow)gFV)YvW7GO#=5%e3COAj` z!Fv!Yw%U>8iLK#%$0vZ7WVaQBNBfFG>FuM8^*Ce2K#xmw&ngQ0XA{bw6z9BB z(4MdzD9R&9w`b4#L?TZ$v(thPxlNYB)%24cZ1mxXwKStuO8%9S2&v$|;<`@lyMdze z|318){O$ib}zq>JOW@HSPr(&3QTrhe=8;;IfB zR1W=a6HNBLmEY=l4$3X>x0@mMILzV_W$D8+GO$(rHzNPYh<$~q7#ftpI>XB~!{x|B zY4L19&ycUDsKC;I+|ULhaOmioO>0HaVG#hy*nlv_7XOi?TE~uH7_I_CeZG z&Ba)F1BxMx;Ues$m6zN6$Ii~Ecq^f8AaXm_;2s9p=qJbKuuf3A&I=^uC zUyae@8iV8EbTIQ8>t{k0iZ9aW`Oj>`>6tLTd6+1R@v1-$2(F=G#*WB%Ulm|${GwE8 z1{kHAFdO@kE?d75J%DHtX~~bM^ca_kPFeXPa$wd(L7No%dC?x;bhv*0-AOlA>3eB- z!`4OC)Q`N=COVG{M{QV9lh*e`Qwv3mADRmSzC#J%!_DP8t%2MZp$inK0d@eH*n#hC z()!f*w=c_uR_wfmN?**FI?H5w2VS@uqKD02#>^rFd8W&$ZorFk5ACG&NVp7wFy=Db zrtzk9u7!!3aJKln?sCW3-}g?u1O1?o!(Al+l0Q3B>B^|ZqNdC(&P8FSVQk1M;NQQ)P_yQq zX}VsY@3a+8Ny5#^E;90+ekf0$OVLKt0eU3g^9ks#6Ixlv^xU3dO|NRu-Mi0rSVqQU z^gLSvnQ__LO2f)orpWTfBqZonB&#={w zpUKz0&2CS{PkYDd&(}cg|6T(@^_6O{$vD&Y|7HUTW%Q~DL@fWONAx?I&G-dHsQ6y5 z8zI*BIodw_{!YIy_ZViM`S;h%Z&xuOF=WG$9b2(BQ76clKoL(*T)(+F8=6>7?3OZg zM#jwRQ90F`{`c5r-KIRu)N(e~T5{~>bG`4p-I$XnDVS&KUJLpRUCBv*-X{(^tymq* zw`xTss+iDA`*CB?Pur!u+4lQt{Kq_~BDvzsEwr%XGn#S7bZSryXvDT`zvm&*wtwvU z17|5@9&jmUxBJSuFAfF=Xqz=XqKm9=QhXdX>>|F6-cE-%X_Yoc^=u|JA2|?o-UOdC zJcYGgqVp_VkzPGLLtC>=a)1}r+2VGj5+m^Y4c}ck+03Fg&P84zrnU$sO071i20po7 zK0hY-VIB2n(~8dR-``)550+JiTAO`Ny=@8}u9YZyH2v1gM*@716!&!#oUJ9xbW6kP z7}`P4P{4dt(6DdqSbmlBv~}cR%|{lz7PQ)C@QX`W2xv4)&$FcM_~=Yov8C5XhldY9 zBDNmA(byLHd>z8EV3+k^Gnh&5>>FOa1_Ea8oQwy!`c9Un@zC-0!H;oQtLJ!rGPd6+ z=-c)e8{v}b4Bj6lEI8pk>u}X#J##MRBG#KqS_6NSW)><*!hK4(uA82o$GiTaN1|aT zOyN~KDG}Z%q92oY;s)Itv2d+QWQ9i2ZJ>v$Z}!c2?pDMs*2naRQrbh6%iG6xo)^~^ z&-snhsBApWivNl)K7Nk$&&8~ItYlwzfBq)_31UNT-hZ?J{&@yALZ2BBIsCTrPfVx< z!0nE$Ce~##d39K4S;vw-_qTUldmSYB zOYiXy15?sgkdf*Bd0ek2_jY-;0oQrN>z<^=CI1_akkP>Va~0ce9u{Qb&sB+MUqPd% zv}8>R_g@*BrFw<5p8so@{vS^+kkLzB=X9aU+~dgu=HhI8{J7QePyrJ$&Qua9D?%l? zytL084jp(TW&#Zn>ldtn$$N&aJF8d7GSqG`VXoGy)yroENTujhOd&10jXBMaKW0xe zplA;L{>54a3!@{Pj)&Sq9SbZQ>lkdq=ggzq#>0X&6nt(+DQ#SUEs%0k52l!KY$Bz4 z)F6v!apKA3FU3yRMM`3snisoEqqj4hb$cXt4Q_x1L8(7;;6jYs_}DvRJ{PQWTKVht z`PQ3r!c=mOe znB-DQ)g0Z1*2~_|AKQi#m7_x~LUvNA9vZSAGw!OJLslAwhR#Zd#4@o3g`oL20`JUU z3vy(iuKI#$aCAKTm2_M?2(yfP^qaP=j&yT8Kt=6;hBTD&ah|Y6&D*+GM@L)!U@4Te zmAOX4xH0%d-YEMUtMVgnxw5+bNjcXQ|5y*g63#8@$EC zs>hBfk!SIgj=1$sOX|vlxfBKx6q~mj; zi07#t7F!a&YyWvN^QFX-JIPS&CgD?4y2Ncy$_EN5;Ba@U4mGjp+RHeE&W)1Fz-5rR z!-cd2zs38*G$?7`QEbjl4cSUz5S+W5@$+_z6NT>~`Ji~L8oo^j+fLGPT{m;nzQAQk z{;+^^aJY7Rfqu}k9)pF$+cLG4DGj?;yZF1#+T&`sQFmXZtUH6aL%-qum}3RvuDnk@ zD3jjLb13s^2Cw%GN-xyfcHWgzfB0H1xO4+MYj7_In538{uvi? zq{@1O)4c!_uumFFgu_|4I$2UnFW7+7OC!!li1A~iY`&bXBlA0%sG zB{?VoRG(QFo>CT1d7}@Hc$de>gQ8f}R0HNPy%u5xNY)=I4R}WR3@qbk!KJkE&yhUA z^!R+#O3bqR)-{^vO-alK-xGMiTVlQ!QW%U5vo}a5ky)SJkM%T81ZQjSZ^O)3!}{i( zRe+USsw3aM0H26js!uz;*e>nl1U=s{*S9^Q>wvVq1a8 zXl<_bp3r1J8uCozes?Y$=igaziTg|rTX8Y3oTA?8n~aX8pyFMQu{rHhfV*$FTJJy0 z$5x=Wi!ou?UH*_bozsR)&!v>^v4U^*OpJFY{=~@ID;Id{5f$0&o{e%sJzy+Lx|FC* z@pYSJXBcsDeURvBG&P<;3sO^6JD4E;Bu$VM{OblQ&mr&)PQQ!v4BL&DAiwJdcCFGU zw?)nEy1q{GEMZD!T0o#JfC+b4B%nCDkq!CgT_C9f_LdZr@npslimlM_M#;W{c+?r-h~Yu;72eT9n8v2I?nw7$Eua_^4oT;eRcHl;;rt5$GP9}zx3NDDOC z#HF9oUU}*HXT}=|c#oXa+SKyG1F4>5ICP$8<}O{4ex6J`b|^6g7={Ea+rP;2!mFhf zO9J23KV`IUsJ0+DF1olVxl+8tQwJKJBJ{))YDF0cAM(lwn8|h)HJ3=d1$TK^y8%UZI&RRh)*oe%?48tF`yAWmXq8 zb)bjmN&+p11VrOeHTmz&l`gn2t!;)Z*KzV=QcL2d34va@!KZu=!-XTY?&l7dn2tjK zf-L{3%ap&O&y@bVDpS=6csjc}pUN7kC7*lI#~9`1CNo3%Q*k?k*wnVDETW3PH5h%# z`PQ;1sg;F{9m^$Z&IhH4=0K>w7cDn^2~_f!rwPH6ViB!*C62pq`xGA&G9WZ-WILJIS$PM3l%o8-${KWGAi$ax zkBo4L3gYsCEXz43oAHNb51EZ_O?S)u5F=V7(&ST-Zz|bm98FQ z7I6^&ZM$u@60y^EBcEiYiU}_9?$c2a3W+%6jb<^6|HaA1aY_-P?)FQxpA7-~-d(VE zq!rd5Og(EHT507kJY&XonY6wNpj~Wyh$X^bqjTAuo*u1w6!j-C>K2%O#t+9@0AoSO0J9lKq59V5D5E>@JRRhY`eCynU zlq!f`Z{)S!L1@r4Q2g80i($8{mDh9!p$xS+hEjjdwex;`*LQ9w%&9v(76cmC)ls3= zbQ1zc>l|}aziE5%)eV`+(tB*uW8Ue;BHLI%H|X+&NjPJ-WSD-a3GW_{Z9%HK?M@>t zfYFLjEc_~>LVNG6f(6yVu1f#2l!9NNW==dlFJgBkGV9( zYx5ZjQqkYY+UJsUvfXc*JLWeEFZ;>E&O{T98Fv@qv7@r5smUc|A!v3*@eU7)Dcs$Y z;8He&Mu+Gil@N35iHxSReOQVtTQm7y!nd&(jmf1xTsx2R&>7TvakcE@wJ)0cJMdq{ z)_)aUKHRJh;$QCino2Cx^HKg25}(kk=n#!_B%YmjujhbcTQ30O3nS)z>v@{C2i;{_ zoiLRe^$JjD9s#xBA}9AnlH6wY>L?bSi3?*`e0z57P*X(!ypwvHF#oih@l(Az5-|>a zH$lZ4-V&}78vguLNnY>*gr0$=t-G=!waHfYV;B?J5TI>R*=E0JncL(#sx?JX*~TeG z%_q%5U}mK^G^yye+;4W@#OX_%JnWerJfvXPtdtaV+TDd}<11iS)@O3k!LT+s0l*}M z(BM(tr$ud$0)LyX9W;UN+rIdEUt9H3a7I2lXoFw0*~G>kM;1E)a-2E?!I z_FwgB&*#-CG0r;)3{&b-Y%@AKjd**1^j^y`vCmUmiX9OX&T4V7+YsjWo~84nT}U5( zW#cKyG&wr&|2E3nKcif+f3Md)CJd;){jSV;{tV{6wh|SgutPEPFwW29~bBfb7k88&?u z>ptc##+e5Hj1g~ru6>44tm3kxg;5+$Ae!idXI^Evqot*R*_~ zI2P=k9I(FXV|(TkE5>?yh@yzImX%Z$biJXq@_Fj1ofm1n*}8!uH0pc-PKlj{47sf+&<2f4M?fmM|et^+2ZPnh%z3Se$GrETmWTDO2hkj(QM6~+M$b@0uFgsKhpMKN zS`3A0w$D$LzfrCW{?I}K#B0qd(yYKOu{_Ry|JDCxD`INYjS<1&hg%XNaF+1n41Ghf zI;7Td;{6gObyGJXnZ&_HAssjawZlOGnX@W|cjl(3W;S2UoTNTBdI0kM+3|E^)y5r{ z{W=vgwo*us2eU<7PzlJCay?|jVsVv@bmntqbj*5)$$flwPZx$BYiynapFFoR7muiyDV3P7 zB#t5vsX@Xbt5IjXOCy#;FL0dqn@vrWx8z$c4aH|hCr;=A5q`x{{K2#m=clzGENlDX z&!HFuiyK>~ld!8+lV_0P|3;+EK@tVi2i7UyGCrDdhzJ-7pfkRn%K89cmxs&(~{ujHiE8TFAb#HMz$3K?!&3T-&ed1egty_*}C=PURyMAhxY<#2rQFZES(LLB*BZSAl*!3rfDa`JCD?AI% zD78s66WgC+0iXGr!}tktT3OojeY9@`p9K(GB1W-UWdmKZF`@skw7-&2T2EE#Yzbt< z<8b(>#9fI&VaoQ=eU_ooR`fE0Ou56D5681A^W0U6jyy|@-Ogr!4lS2iyecs&-AdSg z!#{ifBxc#;Y?r$AruZ!GQflA*$3MUR|D0KE*y)(nS#42XdH>+`lL@tz=3}wu(wKPi zIoef_Y^6*BTb^CI2kUQYHk*b&H@X?5q~jLzW^TIX#M?llG@HLft{yTVN>R*r7u`pS zYJl8BjCe^{Opry{>=A`rp173g6oIhBb{Qt-UZuu|w{c>- zOqlM7=k;~*)9fTuIgT8$A0SZ>fgie~CB*{SYsj37rpvd|C8+P$FWA#)c-kYKAC=l} ztLw2~E#0RtC>-%hZEKX@?eiR|(^@T5uM+1>3a5hwWkc2PJJgs^@2BUj`Y!kRFoxlK z___5TKv(0leRHd(ML(5uYKuij(*-hxU@cs-5I)Qi*0*VnmBTv_~bT(H!(BE{4LiJ#rX!3F62iw||TJ@7PN z+eA^Ehu`NU_xCDx50kIJj1+;^nnM_ipVJ`d)hUO5SQn}PZEBDna!mme>EhYTQu9D# znS7%bb#lFH3QY;!x+%W5H(sOqDEPJ_9_Q+83P?E8fr{#9eNx>;dDpfkC@&y=#00_k z`@BAi04x7fa^Bv%zXpYlgs`v|W^SEv_3ZwCG$44MH{tENNJrn}$?!!`7P_af-n;06 zo0M~7b6i=p6Mmr62~MSPwDe+(hoMeQZJ>QV4J;1vw7D+6oR)W6{LT~ltE3Q&v9#4* zHJwJAp8rO5(|rAgmR*kN6k+g5{t#1-ORX&MDd~;oqwwI8pcjAgW z-SjL(5&LzaI9?Vh7)~N|Hz%@pJ@6SKDMYZlF>r5^Mxl203hBAm zZ}6^P^5+Jpxa+4??{-h|#TJ~CD%F7I|3TQw_RTCA$pvsVvV-baQ&ZnDpC`+vBl;ip z0P|F6_=P4}w)*%nfX=qe$ryFwp`u$`sI3-lh9MgjfZp5y3;0Ea8;bPO{JXS;V7;-b z^ZjaNs9+Pu4??FNKxxKXkx*Hpd{09D^Q{r@Da5(qpdUaQ~8Bk*Wc0P)s$K6|7c+2^aPFD-m2D!S2jGd`cS5dE?{T2(J@ zQyYt(gMGDHFnYYtA19e&^c%R)1Y5YQ*S)b2aeNS)VFe(clG<a$vm;7>3)cX3LeW})wJ;4{TBn+9Vx@@UwzvD>e-&`7Pfh+ z-0e1QS-}2D7dq%mcg^|abGYk}>ZQ`tBSq=#rssKzu%#_!<B zl2v7Wc*6{Rt;W|FnrE(U6x-G1kp&e*GM&NKkYAhvcN|j3A?gF(Hndh91s% zEFR1TQw`CSXvHa2p~=Q-nG=um^~ODKGs@OXQW&tv6@&Gu5A&hQbuq5kuL$cVwog1E z-@S*%%>VpDWg5uOkpT8{j>E5tT6I5LJhAhg_qNGv8v>W1p9-Kn4c=Wk!Q-1f))E*q z0^(o_jq*`r1~sz)A*{4DRAWEoE+i=bNF=Og@ozq z#7&yuqUB$W9Leplxf-A}U==ob0Og`!CU@>Rqgu%Tv1e989cZX zG^Zs^r`yhKW4KlbB}91@@IDam9If-bJxvg`fu;5NMR&+AQw%XR zloiedL#}^3&%%{=n?|bs>AfnUtD{%xAZ%?@nub~;`868KJHHRTJYK{Vq^_0j zO+Tz_jG=OILWE8s`d;c|qm}d9UIzoA&;D+Z;qo%a(em<2`=d7Mzd{2oyGICS0_->I zK17n(PlEVmjk>?X3ng!{CE{!?Mr zT*5KO$a|EmtusNc8u&8VMTv&7W{N;SX71{K>d;eKr=vE9UdAPdNe^Hzw*zxd~;N z5Lz}?j`@-%BNqrQ@yto`%dM_>TMwG=GneD_fC&uzK_7a^k8MHUXoBGOGRBq<_O56z zJ(d~?Fg_As=R};|?xdV#H`oHYY$&seO~k|NT<{heN=El7xaDKNykkV_lmVJbGJ2mK zo1^-2@_qMe_V-ymOOsxbAri1)lFsa6YlI{S?OYnFL3y4=5v4V|BpYU%-1r8b_LW zEDq*@)UhblLfcr2>2Hq3U};XRZ%fPJ!J#&$l_Fr|4=YJCt_A=$i*-juV~>UcO;Hl9 zfwT|-T*x+GepD97bI9a;Ys!O3x13R`Z(~z1SIkXhSNP%;3(aUsBxIW!-=~CShW96I6EDLadQgD3G*a6U8-|F>Hj0^EyJR0xBg-24n-OXDV6RTKte(qlVJLYe%fD7K9DB_AHPaEO~{BebPN&>tR$$ z8>xZu#Rz zEoR~uJ#C-HhEL2aE?#xyCdkSimERU4n&NbkcpdHgB-o?*!f}IY6$3|$UhP+pBVM0#+NI$>PE4(VqNs`8`DLEKGtVnbbe++gJLfvPpp=AT z7LHTJM$=x>>Tna~T}&QUAP+vPC$E1a4sa3rA!8=rmbRBCM?hAIP}|dljMzwTrI48; zIDw{P#fH5a-toD@fNbtJ7JL;i4#jOTq>TZ&KAU;Jz)?P3wo2XM_(wn#rUmnlL%Uv6BUd}WcV?>&6B@up z!x4NDJHEdY)!NMS2X{^+#Lz{jdw1tH-9z$_b(>n0i7St^-xV2_NVp`D=X`E4EZkVW zZM^gg*tw;B-dXRkLK%1NbxqiD$=)~?-{UoCjw}AK`#^emgeFFNCmJ;cS;IyucMUoQ zeRGLSumle}0}T{YBtOSgSJ9IC=gaM2D( zd47R!R3|8|A3mwyYW`XQ?)q#K=DO)sL-#?k>AABgcisTc_Pv*pJ|W!lIPnF$e($h2 zecDj0Q-*8YRUn$f0HKc1H4D~>oFQywW%}+1em6h{M_AMtzX`G=_E_&d`jy*pN!p*_=nIJOV@WSHAeRij}>_}!+BN(tJZ%@ zgTFC`STHl+x2Pxf@9Rk{;R(6!bFU&lyKEf%vCrVE`&v)vR|p0y$Ff5v%|+9Cd+_bK zW~pa~hb~tcQX6%v*Od^Z*dpOnEoH~gV4G|g9|vp+dntj4*GUMAnap0-o`FGhdat&M zx=y(?1x1DiL%HfU36vEX2!&Y%^jNMIzq2tFxFe9U2HzwRVt`M-!SI||s`L4r33`Av zUwH7DGbri_AgwgK=8@#js<%xJpc^}3TIM}9uCez4`4kx8maB5O#%qv)Xdt%KJCz&d z<1hFP&tDaS;|BdtZ22Wcw$j~$k20Q6GE}Ldezc~WiEx-RO_0UUmdorZYOYvPV6nCh8okBNc#1AT0;ajQ$k(DJ#Gau z4auC8^N_vKG8`OS7RtJ{#SL?JesATtR{92xU+(&x=cSbPJMfiAOl7-hZpEh?&IfH6 zF8eZYaW`KY#l0=B{|UCQQ>g_V4csF`oVTg?iJ!IxWp}fC$@PR^vZkWPn+V;ll$t&^ z2T988HbRja51}d+h)0}Aj&u5rP~R^#L15oJ6}qyi$;jc`;fDxKk2nHL4-a3S42SJ! zI~sR4!bp>L4b@@CShD6`ti{C7x?OCVqp6jAPE-Tb=_#j@mv{yaD|~ttq)8LWzTzWL zb*hNOj$x?CMBrV%aMYN#fMgAl2D_VIt7qfs*ROV5smC@m8`8=%;v<>Wf=+60Q%#K; zL|ujI2){1#^4T~Q8Jc~|)##4nchV3kc(Pln=g}n;SOOGJ00|B?nvx%T-Y*88?UR;jYJJ#iTo4xgR?}IdxzRNIHhY8bcBf0oqlEd#t!5-30=8%i1K_4n zHKo+d{k$Zu&*!1R@K*@s+R4NF6c@D#Wujc6P$^Ph-sEz$yDGO9Ce&#y;T%G%uHu^e z@EM;fCCU36xg|ZAJ`QUU)qjw^Pdz-r7pr7X0EV&vN4JNVi|C<Ex!0Rl zE|8vjafS`CjJmUo3#m^_OW>Gz^kj5St@{vxJ4k?#M~zumC%7pT<)PsF{5KJb_a!%H6HU3N{!;ra<%E_NyGT z&>`K!1{)$Z;AD>oD-x*6@*?`r~M7N9d>~KJ3yc@CF zWk@LXi!-|yCl~~85Qa?)%>zc*%?>Q26UH?bSk#KeD1=Ww&kLc)>uAvX`s0XTj=E|k zK_jW*rs~dTn}frv1sGx-z_}sI(9XdQp%dPDT%w`+0NohV!LU%TQFO~dkQ5OSC;>;W z8ALeT#9(!>c|_-jL9C2$T|1L{&i_#-v$F_#T|YEFm!jgQB&PfkY`jLMmqrvja`oF} z-+OE_g${wtz9mOM>T08S6!U=BTr5u8=F=`9Y4Vir@ol*)yMntiVCTj5fal)*kjRt`wci%07)-bR4?KuPXG@}%N ziuBL=a&mZtk$M1gSvutdFIKdkCt}h9*)S=J%&P}F^TqJ0f3BFTJlo5en>zmX+xyIV>wy(seT<%8DJEMHSZU_2Zjy`! zpxROmnugXq^k}(e|Ea5BIlIQ_fULo}Lt+$zHP_{2t?bquDmOPknZk(jC@LH*!U|AneF{T}P+xe=_2r zA0;u1li4Kzs112b6=d`ae;x;5e_^e-T41o%Wpz(Xq&oEi^XLP<-I1s}drwqvCPwHB zU%ZGQB1-5TMuT9liUk6hvb;=qB^2MY!d%L`cKMrUOv{U!l14hR$6nO#&_>lLd*`n> zZ#kBZbYo$(S#}-)K`|00Jb4%E&oxe%tPWW3zAkG8jsHq%G4r1F~|k z8y1J0-}%lK%=~%Mk)On5_+4KwZ5KX_Tg?1fJQ^!2KU6YoFlebLu8^zYi&%sc+8}v} zmWwroxZf55k8U_FB^)mj7cbcYxyr5$CC$|!1l8*d^kskMnb5I468h^^YL#f|BXPS? zw4)*|lLU&ko(41|1FxKy6!uka4K9}P`Wkr}BMDG;x-U9PA?>8ua|6$p{h>5sE|3jl zionip&u6JYuCQBwVwz&&>J*1lKEy_oRnA9{k|KeZ;I_mOWE!Kq=iR3%QYl**`fj{SjH5H z_aBD2C|HD6gn7E@m+4ckf-T41c=2Vni`yH&Q1_Or8_)L&2LG!n{{Ne=6`yGzAxFcT z-i`lhGKr}XdmMVJ9D)Qk7iQ8-@?>rS)(11+N8hLM*m9bK1=jqh=aI7nkI^lfAiWi-zDx{&>?tL?=5msPTxnW&^37 z(!d8ZhhJF5($tI1n4*DexhO0~Dac6hTXZ`0^BKESJ9cj2X0D6zUq}vBR4-3$5U>Mh zc8gW7#UWxpPhcofnb*X!5_=kp>x}5|$(Xm#isS9WoWmd2{U_AzH*(42++3QDi_XPE z>fCf4WyK=D4}$F7Z&}T08^d9b(g*FV4%*CfUE|PcZ>s6wl`$B@oVlPWHDO&?;$?b5 zp}e%9(@m;e*zSYuYnm%KY2S_MBD@D0{|l)n?2eOJe!{*7mxxg~ElkU3;sPF+;S-^9oDWQ%ws@!{oUv^09d!zrjK*WmSNn+^Fwoe*Vu(59@w2cASTG^_Uv~q zS7y$}-17-^@+QX8u_;;7nidV#J&Itu!&i3)M9suX0?73}8nXJy81SPjy0Z7(SzyH( zHCjr6WlZ%0ws}r7yie8LWg!g8gaTa7!4-TOhX6q&qN!NVUz2iU`s(lyEW6x738cKh&1e~%LE_Ygn4*!)27c$!zU zbTj2yVt23X_ursfUP6@J~~Dhls(o zFd?ZJ_|YvzYq;Vg&jd@hyMZ%4QB?t=lJHUmDn_F^VFyZ#Jbkxx0rj$$+@+7rUcUQI z1#)lSO0QJ_f6YdqkV3&Se*&gUZtg)=p8olOsFLxM#Go|X4yYhqwxo*fz56g7ZG_?O zvBsAEpM`2zq0N$4twS{5ub9GY!`T&ZG>@SX4Q?NSta-v<20Av5+@f@o^M)~gt(dY7lviuUFOL(G zWOuG*w71Zxb^x+5{hfav3Z@|_eoph$47U3XC0H0*x)I+zzsK`?>J}CIQ~&VMAb6(* zG`Oq^ITzwDX$fo{So&me$Xr!$2r@Y!WN{93C;7F+a*L(x;w8}Mh5Nw-;oZYNxQc#qbO;&Y0Qz%~SqRaYsb^0REX2#-ifWKY`k4cc57`QLy|KCsF>r zWeZx%f#n~(G)NaTQE?BI$&3f%%F5j{qJO6hjkX5zx$M;^lodJq$A-G(ZbVsX%tW}H z5iUw9FF??Rz1W5`d3j92QXE?BC5?g`eEvKtbEOlkPR*l|5q5bW#vjqnOueZP)LXqU}O*GmqXbGL@um`8!5Vm+$g^UF|Uo{>S3v$N8)~u!> zVRk^c1%J@aVEoZ_$Ius6ePM`bDQ*so5^ypS7QIDV5!_H1!E>73H(2psfJa>Yw$9 zE(<1}Q*r=34gwJQWzy%0b+OQJ@t}Q*B2a)CrK&`qz&g8jNZQS11#78f&Rou*RFwbr zo8R3LU$xjqA=umtgUY`5;?%lzBcG$m(H>Bl#+AA-=w>SnAiZhp_7ouvvT?lfzbum| zD-oms}Zc$WZqs-5@aRrBs&;rQSMQGws5XQa@ z#A7V^oV@A7%xrNiQt{=`T-7*Lg4)TK@1EamUEE<4Wb;1vU|%;<7eCXEhp+$*<)O(n zwi3DqU^>9oYuStIYCIjg7TIUNjJmTqy!Ex0zLAaxNa=OGT?w<(nS$b-InMC>qjRkx zm?}7lzC{y3I^=B0MsJ;yNv`y4qK@V+m49vj73Qz`8b+7lrtqI1pLkXVXU&hJCYT+t z=Udd3-rSwL(dv-Kotre2kk^MPwEI2Avx<8Wj(kQ=Vx@iktALd&NK5LA*)1)X6gBt~_U?A7rkY-d|G zz98UI4RF87V}mS_z^8-$otz_C;@K!m-S9R|j8Ltx6!VJHDXXO|erXTrp_T>io6%Kx zSvt)$3WN0v;jVug))h~9%a+`cf-z_zJ&0)FM6?aR8WW)*G$@EzNp8LIt^zsri zh9Uk2=#yzD&;JFBSU3Hi(6>XVyQg`nl|k6})~@9~*mBiUGXGn6DGSM3Y#LD2NoA7~ zG9j-1IE0be;Co+lhBbTowYp3A{%@xKjZZ@jhnQ_1U;pwD{QF=L(;@a~_LU`&^fRE8 z00BQz3foGG+Vhf+EHDw9*pY|=)!~j^6P@HZB^sKW@EvQm zdNcjk>wG8Y#hEA;N}prKlDppmQv0ONy&bX$JS+YlV+T~YQ?pO|<*GYG*mEs`sx)PI zPn))CX#R$mP2bq~Er*ax(C_n>$hh@A%VrFGu(Dk~>2DtrH@~-34qkg*v!vADVgPYz z;}JD0WCwLRQ*USH=cpXELcLeL9z4_pW-Ti0lgKePgxF~2seJ{+OWw}xg0T0555(*k zXRa%mI^;tSpVVl6iVLl6bNr{e2;*@Ms$(~r*MBU#f`NO#f7-3V$-EJ9Qp*~PH(D7~ zeJ0235F|arqwJ8#;$zlx)YoqC;`;kePRX^QuFYO2L=&KS0dggN*F7G2lK$|?AN!~Z zZV1!$eYi3D)~I=e)!%4g%R-c$cIXE^p~(6Chp#x}7PYg;HIWy@@BWOw%2ZQ-&-xDt zle(8`9_46?CdroyJ2T+RPn5wg*Vl_}xz~ff6MH9{ybMp1WBH8a(q%T;0m3hA>1$sG zbk}ZjJTIg z=N}!w5}`KoPcxz)iZ;`<8*qR@FOxGIt_a2JgfR9xdIdfi_Z)u8|B_be#5dH<)>0;7 zP8;|8r2V}_!%1^DqQ*~<5`z}L8dNFbnar3sH0IZW@Q3*rKwow8CtZbZIoGZ8**t&- z<=TW*A>&XHuR=zVKP+$?^-AKQOKUr;aJ2!7(0)W8U9i(hip0s+Xg}V($DW2p)l~a8 zUk^=LXGntl^7Rhf?K4F(zo*B+{?A!$srnB`I#WW8VB>G*!yAyFrlO4F*x@#huuh-+ z3DLd)SX#=W&o$Cd?lapi4pFHP$`n|3+Q;o_;t?1Ke2?nuC2$+r-A14EAXBy2WeRpW zlET6^dZ0uDrk);M^`YU&Hiiq&>p(BeTpKT0!y?y>#X{$KHgJa)ByR z_GE2Zt*I?CHc`0b>NQu%sRGQIj3`fJ@uvC`TDJjuj7`6F^f06-;d{@|Q}Q!A_sVpx z`>`+esTVN)q=Tj2Wj~5ISS=536-G`wKk#FrTAUDEUQqb|6Kn*m*HDAr?~ z>~oDEjUaM*ayet3)mnB14fe+xxl;PC={|h68M~?3MjQvOohs9L*RvLd0(zl0KjA+8 zVtYJQzfrZG(_YMPtcO;j?lk5yTf*8B(wb|Bh}csdd(Dvb5MQ?)(YdbWdD&{aguul3 zyIr4*G{VsJPVr*I2SqGgZH@yN0Q7~xb$v2kejjxF60W&|-h3up=orl42U>g=tT!gr zv1OvFRD?V#+QPbB;a8+bztFY!3t{M@(?C$o?0!=wVDY#X z`j)zbFy}gVHrGP0i-kGZb2I90Z^E+qjL7+FF3#=Jt5b#0h;4>j9B(!&ckDK#105n` zq0{=ZyLsIM<3jxG&c1D**xm2H=D9{2_kO8%3DQ~Ul(JU>#E2~FcK4fUvHeb0#j}oH zX*{(DIBAy%LL8N1pbzX(IlVu@r3-+uRw>ogn=ZOZ9G2lf|H$+Gwm~tE;=VsfV!O^v z25*Y$iVKT-tE$)G@6OB9s(OFydsFZ7xnm%;{}iY!8V_$c@S7?*9eFm_`ijN$04wlZ ztdwBcnp)TT!^wy1ZH>@DmBwZ3^~{v#?}T~Xf8QLR0w^O0>anSwNAA!9gtvyM_AI-$ z)fhu3Rd7$2QRok4A5hsmKX${t@Uqf+B2hkrzl2pg7pP3QTdq#3gfKTxHDxwt)Go(U zqLc*p#K)YLqkGfvcK1Rk;@Wr!^wqXG71-Zzl7=NhSyR62GYQxPEL;!hdvr)wBkAoB zX-y{~4HqKiV?iJ>WUp*)y`N!dXOc6PY=~TFlfb_unqYdu3C!P_7rY-fc z)U0Hwcj?Hx%0c(8%jHIOI-&4)FITj|5w2h8E0hGv_KKFU+TLm}?<8~(RPis}FXPm> z4Q+1vQQo3zyqp!Y##56fIe|yeV%ira2^2>ZJe)gBi z9l+g3FLdSgdT8~kBNC?v(}KtEyn9fdRzrWLz8bzo*PecN9)aQP+Gr02rv&>V!hHXv!|5GTZJ$paq%QahV| zD^go~cny|i)b#Q(t=SzA(h1WnKPvfUfC@r6i<@St1pr0vm*kS55l4p2OJix}&Rf z31bA0VpCJuwoX3Ak}V@`_m5rBg9k>IX8Cxr(sY>)ePdROFX+MpZpHjkQ1{~Uq z#4I$~M%t@aKmJ79w=lc@sRN;4*e{4-OZ~mem<@q^SNFLM8eVF?UGm-ibH5_8@b}pM zPi#s0N7C|W*yj`YZ?6d|mhVbwhc+l%&|ZVpCwUE>d*>#30|2KZM58*3Gk-8K?tHX# z#o8{tREL?mAx6~EVVl?nZiJnmFj*oW(HLc#j9GvO?`( zc4EMf40T=KOQD_6A&ZxZQ2R;4!j;xKbg6J7ZI{ONyk0(f0z-R~%qW{5!2kNi3=d6O zMTOnjKo(?QcI%zs{(2Jh(_6F4=_~1DeX5eY?eLndMeVGF1pVp8%xN4Ep|iGNr_TL6 zg|3DZIx{dc^=sjp-p{}iC2~rfii%Dx@n9E9cCbq^uzr_9!?#W^t%x=&eINl!1p0m> z5>k4UvsOgU#-f$Ds@74qu_-(we#$p|72o+Z8MqV?3fViL^gg9anH>oD^w`E1?YT9} z%9@;TDlKKdXNNm%vsU4p&^D7Od9qMNBfBI%&03SFQgiwEM^EJtZ__0YxdLFnH1VUq zzCS|elJf^D2$4r?`Nd|xzA9$jyI;z0M-5bx*;uKr2$A|~eBdNmYFJ3A8$N=pBdOWU zciD^_xGx&ql6wEMA9RTtA2$P7677^GWxl*3vsCwsMDy`|vOkWWBf~`vBEogr^2KH5 z1QTpMWUj+FFKTZAKIg%w^ORmV9PW zGTpA_OhU;{>Vrzmt}F(%dF|ir*GD<@QZZkgXO#7zAu~ron6}v5Lx(#Q2wtW6Wi?h@C;XjeRp2qfX5t|&_^?SRu}Ua+JK%u{>z zO3|?FW`sX3yC2CKP4M5 zEsyEr4TZyV%eI83p8AGvTmH~LW4mU!KmnU)vf9fy(^kw!XLZ91_C|MTF~r!zo*1PXN`m|)4od_#8qq*}@&H?l8| zcQtt%(u`Q7+TfBX8(>?^k2jZLIS5N^%3}YrAjDV$Zh-DKhY%Q!K5I7@6yrx6=2o5NU*yM83~F_8cxyc?wTn*K1C`ZmB>6T zX#I@jtNs$y{*vhS&E~QGOu? zNq}QaBo&ze&5i40l42dt%LA{L1>23J2tWN#Hd*^-Ile+dJME53x1|)wjh;AFBEHwEAZtjuCc61u?gZCiuy94-1y@KC~ zrEkcGCrmS8A)}{3eOZX0duMFoAYjku!4&?cXP=&JEqeelg!g+hnb5fS@k(GCG+Tt` z3sJp?6p>al2k7#OIa2S%Am1q_C^#PQXP3(4RWs6SZf6-=p_F&&HCtbreXfS}_utL! zbj8wGFPEZqcbh8^URGg*>JME!pqy!QE-geK zGpFB?I?J+t(cg8JfGP7dZDNZ$UgcpzGii1%+cI*H66POD4=zl)q5DOX1}u&|D~{C( zyi9xrPIJ==pV~+|6juV>gs&J6{HEFgNlvl}kL%GXahc zLR&YQE^g85Hhk1; zIWO0H{0-B#mRfkIS2TiR$wcZzbeh>cGXut2iAa-TbPqRK*@1EVS|AIaQdhnr2s zqB5SnexvM^OdF+hn#y?Gh9qsTMIv+ZPP;@;3%c~%G=eyXjIDlOqIE~u3G$NDuCa-h z=jhP8y1!xMT!ga1ui>iMI&P)~8;Z4&z4c`r{-%M)0olOb&`*M@f6PeU8g7e@5m-I; zF8O*PJv`xT|GhHZ|Irs_UJ?r){~PR|CHC03DCT!xL|owCO3$F4@qZJa;nDkCaT~wz z9RwQClLC1yXqlq)lij?V8@BlNG<&mduhgGhq(R9zFzC=`D%=0bVrWC01tlsQ{$#P@ zTRq(u;pvZVGHe1Dg7&JyH!Hs(;VIzqXz>S#wv<3VG)r#N0>#&N0qK{h<@UcoMVn@? zz(KkaJdRrFw`G?|uU8GIu0uX8hiHO#~6EMm8wU8|~Ap#LZ zv?yI~J-c|&(X?+I<*Cv?A4}wIUXyuj)WCJ;ad6=4f%tL9mxOQop0n8AodhOTFD|9$ zyxi{1G=!HEEV_9sALP!|ie9p`@VO&QshD@!ZaY_L_!qj+RjBcj8}nQkffwU15RMqd zi)SxB28&Ji3sge}58FRB4G!(l_L{2#-mH^WSOh9o{wbv9ZR4sRD$Mj@MYQ$0Dq}+B zWyV;L#9I@3M^cPVcxJPlky&0MT*d<>1FZi%)*c@)3nWuT#&4`tJGX*xMT7`LkFW4q zAKI);SGq#P#rU%7(}GaohF9e(jy6iR>DJj$V^7vKL{%n8Z8|aj^T{!a;l`B5$MShk zrSQG^fc_Xc4wsv5@hN7jVU$^t%d@{E-@lP2;h$GFO#+M4$-nUXC-W*f&3_5UUu8Ie zB14rj?rqWJpNv~A?eMXNa|tn+F9HdrL3Ua+8{5qyyuh*cr( zzr@*wBu@>JN)8iI1{#U(0#fV3G6|RIvIBIQ+mM^rhz2~SIvwdb@Qvb6I>*R{KAn0# zwmd>l-_q^)&VEK>OAx4xXq3^`GWcW&EaK1$G>T*cx!?bmEh*j%00ervXT0bauoSCwa4VeWQ}A7Ai&1EyXNp{f*3 z#qk_6E5gV{I<=&Rj(QVSq@i?mkX?<84#+c$fGH`hyuZs@9;w%7Y=np!jq()oL$4_6IxDzS2c>-FL>xa>KkNqy6SL zqx2;|@vvKvl6PdO5Hv_=!QgT$4$%n`(dIaG>4HS2$$c6f>uHzI1v^&(R5o`%4;x90 z99NjQn~$?V_dH0ZF$>*M@y`vZ#;)mX&5W3V=CPbJ7!L(rQG7ZgU5 znh>5QlF6<=sfw7(sGSKCuf=(f)DJG-kS9`NdnBL6OtjqY#5lCv#5^8&zQ0xNrqB4d z5#hgzM4#YyN3*hTlH&XRQ%TB}BhzeaRF(KR-m=*t`RY)L+5RdguXKQ!2gwVIG8CLU zu}{HcMXL+TvV)QBt+{3Zv@z$7-ELUbw}ny6FRptKwa(!vcrO=Lff_gulikCVPSt;S z@6L=@_$t11@^pKc&Aj6Ad|v9AtVNZaom1l)4w1XP+2zjJ2>9MxB4iS`6wJlRdfev7 ztT3ph!j0mvjzrYz>47WE1sf*hfLx&?&nt1in}34hb0y?04f)Y&#}l;pg=MMt>@Pbc zoxFM6BlnXtM1(dzx^eHOssOge06RcE<>;ET^slx=H5y3!H?e+OBh3km&bT65*6XG5 zy`fK9xoqW?R3f3hhp1jxmomFc*{v0AVJdwQ(2ultwO_wz+A1|n0|rr7+*WFt!!x) zQ-%PmM4bZ^3@s}i#@vE?5=U&AQ=kA_3@AFm$uTN9j~ZoMwoyq08dD5&bMx8rN zec3uU3iq_boHAIJ*Ti8b~4|z@u2e|b-z58uuQx9FxII4nAIBY!!IWO$@K+e zt^>g91RAn_WWcS8#ZHNsvWpRa7x03}2wEV-M8zh+{7sJ=y^Wb|jmuNcS7dl(dNGR# zTs%rxcB*+58D%n86dG{=HUHM;wO`65f6dAxy6-IUmhDt&#JoZUkqL5qK5fAST`hKK zAI)UH_7ku5z1^?LAj|yU<>9|NfJd>#{}4}PZ%$zA{{}L#iI+91`qma^?o*nwL8tj? zb`Uw1?`Hha#&g~VS=;2#4O9W;B8-v_xYh6kO={#9DBfXw5VTRKQt93T8WGzl5*Tw@ z5ZH-u^RitosxW?;Z9h&-K&k40%$*o8zcxwT838D$q^65)+6IqO&ZM3i#es~*tXiR#KrIwB;C{|&raQ9 zZJ7G1c+4jzQxell50)ya7NpklqePedG(Sm?-VNkOeg)v2Y--e2wv#oR<&mWOD z)i$nR3*fQ4<9yZb=PwgA`c^prcMW?DP;T7}rnEQBd7J23n6IOuq54e!M4$PK;1VRbCVa`9f!fXQ^IuKGcaK-g&f?KU3@LbKU_WaON66a?w6|@D#;j57ab&IfumVY8MwUfI^AY8)zjW= z-i&jsGxZL(L!4z1uB=KdRfB#W2C6A{qY{{|3M|(|aXm2b7ndSJ3 z+w&UinP`}yP|Wje!5`h@_yo@Wgn_Ke=R0v`rHon>5d;ia#f5)RPB2NptpUmp`T$A7 z{kSh^n5UJ1D6rUGOpG1uH8oGiF+pb3kEdfPOhc2*nRKa`qA5Egd-Jh$ABX6g*5$z6Qrmiv``QonO8>P0~T>zdS8 z$N!BZ0Sy99rT5`CXa8#pu@fI@RKhuY+LU^ zw-l~^o@QLTnkC|kd3C=5!p^uW-p05444G@KqDh>Vv0QpOQNs_@AjxTFba~Rr?Hx75EQS{ zG)PFdUVO(7KZq6lfiZ;cSQY6tDa)Vg)ZbTov-om2zqRZ)S@}*VnUMQRkicv-C1`?l zsuyG8{W`ACl&vJTrT2SC|8_jYz{i&|We-bS%=tscb-v%G^w7#bP?Ej;88ugDq|AdBf_H<@e;hHx7A1UzV zya#rb-3!|xmP?jX{YREZr%y4_)4xeyR$hyKFwED))GJH@^x;_4?rAAE9v{`co8pZ- zcEV=~WP3~v65ZoHyyqlxcoQZ=Ei^1`|GRZ$o`v%HI(^V2{hUQGepH0O7YLpBBPT_Z zECp!WvAYW_JxtT_+_I!_$T~xgF@w_$8cI&CK%?iA6%ltAlHPnRxylDv^XRm*r4Xu4 z;ZFew6S;?%k-=0vDd~IJq@^hH^YVWpT9o>xGhzkzIP^5ylR;L_srqJ^3)tK~3S5DX zWqk0Th+3nD*1C(sfef4zfu;^c(cTYB;)SQTb1fG)9S(TIPX-l#uYtc&OrBU!Wdag6 zG}U|lH}&&0k;Fe29@d#gTDhe&Sg^#}(N{%deElu>XGZlGfd|BD(OBw$Y$2?bd0@;N ztd7ZFtZE@pDz^QTr@K3ku^s)tal|^3kIdV$mgE%dH=*0baf;t|b@ir@PT@g5;jhex*8g58?# zF(!qaYgh^cWmz4N(AZ;Ljq}t$B(+CtjYR5{o8Q+A^}2}!LFz;6P=_syV17^|{p}1* zTCh2@7Tl2BoOQ7)+!|Ij^8o#tu~yK!e}Qo*1~GKK;>HQ)Tdm@a{2*o1IYJXq$mNi4 zFqb@a_;QL)ie)!1_V}DD1v3aM<}D{-Skgo@f7GsPnBR3kt!UE&D3mri@7}r6Sn-8U z7D7L#tiWwIe9N<^smy={Q8*t|BY@Z#Aa3ZM7D1ZFbzh|LXvEYHD%Hd&KF(U+xZ2_8 z&ArtTKYo;F>!j{NnK-MG&ngLSmGD^jY4>_rCYAUUE=Tp(Ol#zUL5ah^;enQn<5R{*$s zb4Y9IsVE0HJN3TF&MmpSZ#h3o0LSxJ0pS1Lk5REe8zQR895{6=7yH{)eEaFU$|OW7 zYvyXme$rx#CwH8O8uz2fu(sz_d@*^>7#q=gz zB-!lM@6oJ5N|thudB-uKKzn>91^f&>aEqjBj8Mr==8cAckLJ9GB&bChIGH{I4HyE; zGS_89v9{z5?py+dLp6{-FJFTfa_oR*j?jS{ing1g9MVJ^1Gu>XFxwJur^_pZot2C+ zD?aXXgw@1=E)L({c6U1YEj3kk=sYZ7h?$0GV0znv`HJdNA9JdU%T7Fp zm_X~XzK1d7>*2#2D%!{1_Fgm!F)tp?fDLQdTY#F&pzc?^_n%n;NL98rW_}K}*`NBh zZ&1OP?#;|p?iVL%{LgZI2cw%zhvvB=_UuKsq3kV8qIBe^57JHd%@$Qu$3H8?0WW&M z&TO43y}E8_=6*LXo#AVlZ`a?5Cv99~)Q9(mzxJTmtx|VBqCFoDS6Cd<*xUND*L@96E=kzEi^gy#N_55F_P1W@x7^NNb1e%_) z8Sz&(X1mr+1r4%jH->kiYo*cm<~?69qCboY=cdS)w|Tv^KQ}ohTGfd??~L!ybRmt( z;5ji()N^CsKO+WyCN8wleB_Ww6X@KYr6m(f_a5aPhL<(wpa#i#8%(q4SwTvrV31U6 z4e(dcb_bwLO?k^0SbnNQyLq)Ht5Cke>5y>r6-CMi-Lm2=I@C8%deP*4y1+-nBY!RN z@-0)nvhpqKgpokk(B)#qmfV}8p;ku}q2f^Ej!E&>8QoQPRJ97Rhqcu>Kf$aQSGok~p zB+V=G43k>hO>wu_i@EJ-66$iXkg(&ninQf#U8ET#G}o0>!;hq)2dg39iLm6WrZ;`R=(r z`<%V+SU=_*`MJi-yXO16kLbu$U(s~pZPUQ>!)L(M`Z_%#?DlH=4pI*b;S^5 z#1@ih63$5pHo4$XMkh}Vf+p=!h@F;`U>Wdt>DirQ56MrbbOJ&}GS7Rzfw(^3)PuB- z8bA*EugS=Mo-2T8++5Ny{`OCZJLbPM&hLM#n8{;e$LIilgZ4S z3Z7$@I1%5k0o>*rtl#Ug{64yy1`iJU*Z4JKfcF1@W1j7bf3P}c6+KF2w{I-=J5lsXpwlscU{$<;47g4o4HNth(JcE+tI83`P? zs4ScxCWOeM$dt|}&~0oFh5P*AF2T<}?Ame)19CcTu}IcEu`Qh&bJoM- z{GQ;)JXJ_HiDp~mOuU!Etu%VZuF`6{^%iyZ-(!vwhc({B+^~E_-X9tH;1^lnctifC z-o8dTOP3try$;5Co|$UZ5>}!;BrXx>ksS zF}+zc*J%1Hy^(h>N5)C1oqY}-nmgk8)$4YF!R-Bhgc*;UE|yQ_N$&bK4b`DeBYfwf zC8zW$_i;>oory!0Un2V24ao30g2FHJgTS0YR?v~Pg^{$p<3ND9!`w{8Z_+0 zj(58qpAUD4U}s;0`g&}l6*1yM6a!5go9}|C2n#FE;};%)L=GgA4CGIT=9hoX1{WqPK%^ z++cybxvek>v4ew@$b1heW%HsHj`kL6q0jJ|k@48b!oV=`hOY*h|6=(PsNlNKNsGz#oQ%9+ z)Pex-^$7gGVt*31_4N>xs{vklf#{+zcJiy+>;W41Gq(g|RP!)@qhW#(k1)sWyK;Q^%F^zleUggUOTtz`;&Z6~zlpuPEs=hg>0 z50n!a&zp$+` zCyKq%&g~2S*sF?;0T( z62VnYgY6~&61ObJwIWn>WhHTaf7QR?@wqRg5^Hg?pH%MsPtlrHX@}>JtKS})W6!<| z|MfiSvF05A^4(ADTl6oEF5;|6hd}`e*9|T6!84>3O{?FPI^WI{R5J+~EVuAUMYtHw%o&*VkLGMMT!MInsJf*52zx#0K0>)7MMG0HflM3x)# zn}A7l`Wjg|fH*uf0eVLl&ky%%pPP07?qJWaA}Y2U(+|s=Pg0NK`WZSnXNG!`X)fP= z<4D7 z@HTepjL!@~{8SHL8B(@E2KXrUxmw!Mw~Yi(%R7yOt4i8EwbH4Oll&p_s6dsxMm#Ko zJ>(AC7Y2=UpJK+c{5`zSsU8l`AFGQmK>t1zYQg#k_h`eixE=oQYR;sCnDuKKdf`wN z@DnytgwhWq&;{EOhn$-e{-TJo0{p57;I$AZKU`TM(`DBg>U>+m#%>LChd1f>mc|2sWu1~d`cRekjH|YZ*e)jh0MS524KZi7G~`?JLYP2zv~uMDb)d?Trl&&eIA@V zvlk-IGe#IgT(zP;;vZxwyt)d2>`~MMl#lzr2ko<>o>_k$ZXD?+hRX%NKRPJYSLqYi zr|fn<+GsjWCTqpp8jmGYKA6EE2PttRWcSrZk8-(e<)9Rz+E%u2d`zj$gyM0M&piV*X6QnX~;lI*C+e^bu(e$Yt-2f zl%q`+)Gp`020n8lr;ZR(^zmmcSqDn%P0M@ANqZDY#@h_X$b5b)xT?4S2ho?I^Ciq* zJg2bEc*-_o?G&!4#bZKTAJdmmr|{Hd4F243AZem}>mF(tffIc4f-B?15siEJbo=j; z;kv`$t^xd;FGUt>X}IKzuFP|AC*Rh^+?H{sl7$6LlWq0ajbYDC;6j{J#MfCmzZwvB z)B7La*QeW`d|nD7!X&=&C=*~VWGPH-)_AJNRUD00`T4EN(VYj6X?Duo_QbG=6}(N} zHLbnJ-es31IAKKAOvjAV*6)TPBa)AaD!ng^I^f9m!H1EkK~D$YJ|BJ6OcjnWLSYKy z9k}t8`T!OJ6n_uS)^Sl{slxu$b?~c~$0m=C<;1LVS zTT|F}hoa1kE4M4$^yYN8n zb-@br6xmQ{QpNmIlgm605}tBhACG*IZ~(2w)!=Z}aUDHEKet}WQ6}P!bhd!fukI~Y zAb_VV?8W^CQkd@)0EPDZy8kVhWWQk5arFA-0wxjCdi*%|sj!U3j%iAx=Nxmw?9$GQ zt-&>erp~o^yZ4xkqad`r^CA`6*8l+3NGn_ZR1?2kQ)44~l;z}4n*11E&V8kfMj9_m zJ^d+TuQx4`P;(bd-(2cT561C~TuUjr1KxP!tcs z-Ys5VC45%ApSFHDH8(#UOlPBV({7pQP~R65Re1(_=8g{1uvbT5f^9~)KI zSmUZ9VlgaKV?>7^hsLq9@SgoW{Zi99=4;qc3Et3jZklPA(`-2qJm*FtYKhxyE9k2) z35=u-cqMl3+sruaZ@-+rWJ+{+bxE4Ze?aCscQGi)kGHn(TP9rLj6S~b{zR$wCVGXA zqCrg)KNeiH;kDYMaI6gNlkJyxS1AxwKc{zD3EbM@a^Aq%s2P3pdl;NLUgjD1(^~$; za8%Dptw`IA658yjwv8HQ#Az%J*VF7J=lk0u^xknp1QqhGs z9~tfkn4AtQyu_{dG_#UVHZC1X1v*X$+U~9y+Ah0i?H#hk_?%hB*8f7$e^-VwgnP^X z#f*Ije{fryG?u?!71(I8E3~#DvqQV?hy296D6?oM-<(!`G+BOmfWtUy4P@% z*!@^`vYcV=8nkkXx;DlXy7`z@1o|l3cf0B2A4>!%1~jyowvEfp2gt7kD#}nQ>^U#G z$*P)C2Aly_>R?DJ^cgafMkpsDV8uPK<{(LdIdW^ES}qVr$4;_ZMhjU${kjxdJvf0R zfP;@MSxn5ynE`1D1=p5>tlGGa;Bt0{Hg~c~1u-~%%_z3tJuo$D7@ExPhMzd8$FwLaTIh?r87Q+nK=8W^_Q&Yr|gwk zU8gn}17zQykb5=(G;%<$sOeif8JUJ@nRVns{h6$V1!fTfn4{+cBFcfm(|D&ru|#FQ z<%dy+Ah#2~EaD`NyhF=M;!jRw$*I4pNkkLyR=Xm@-bf0^2P{jx+57cuHsu>1R0-7s z@G5@Y>h#w0?2Kg@(4(7en41Gs7p?8$oqqC%u1Jy z=qBu0&)N=QveH6I*DKIYcmIgIJ0!7*uV?+Td$8L@w8tS_OA)=C0mG5&P_-o4x{S1Q zaA%cUG*)|7FHwd&s5_u0D5RPkN!zHz(pQVanGfD$*dohV?JTGj)^8L$VUVnf7;J|0 zYSs=;^iF`S@yVfHO!ERL=5crx`Dc06&*OY4-)==!RUtoC=$7aY$*lVfdfHQ6HJp!G}+lSU_m>zyk!zKtp16W7@g&fdzB~B>j%TGp|}V|QY>D?Uej}bCkzwE zgWDV9pzTNrPQku!^|GA&x7>7gJZ&su@ojYgZ3f43MaCK=;UdjiDhQU z)FeEZ^v2sSsINtMI8SmP==uW5`qa#_@1w2@f=>)_ja>4b4)LMPg@C*0FeZ<^Mo`r5 zXy4t$w<>}iy;!F&7L=v{8HTrN|UFQuQoi!NgI zajSdw!(Lr@#A!&5%Xa_8(SszDNAdJfm98Eb4iQ)&_~Lf=Llycbvr=_=}Qiv z>DTm@g(F!5T->(i5OGxFGt11? z^f7hVHF;b})16?Z$K1-e%2n`bw3K){Y3t3rCN%G5txUVg&N5MV?ydk(CA|mIGR`_> z%h<<**^FL0FE8ubXp?WEDiumyl5mza-ney=@?ePZ-Zx@ioATLfq9Zg;-3(Te)zs)`FKtwztuasoLWm>c_i4J{zHQ|eLVLCBJc)zzClTq(siFS ztlIj#zD?PJgpV}J^#rh9c6~cZY~S5K;Pd)z-_U>#{CtNz)Y5~uK0{%hyL&q#4ePzf zeiw1%yepUdtJRZ>xuh+7ZjU99RtaO|7z!R@%&|-8iEmA-oPyVue72@N*`AFzSBW3W znCH)I;i>e}s6FQ(N)GI)008f+SQ=JJyi5#oY@~6L#-rDeDE^MpoFmi58|)e=)M%b% z-{LL~wUF{mO1fMsr!e{$kCA*S!h=RbOwTS`3i>rV)R#y)RvCEhf4qKs2>BEAM`KmY z+kUc15&l>A_^-7>Yi+4$xx{JfZxL1xpsIZF=O8nzzDDR$#%A3Zw1 zlUBy-wVH1nra)kRTA+P7)c#PVly7FNJ90OI(w`nAA#tq4cj1@#ULOADCy*WpgbT&2 zNb|`F`1Z6*!aF)3XuKC$nc(j*u-6Ya^9kWhPxUUT%%!Qt`fjEmp|lTBZr#kysVq|j z_M;!f`@JpT?r&ah`mgnHO>UC$17i$F3MI_;Z4YV2?>l#uPs$OjMh>DGw~ibOx7X@=~8c-aYh-m9e&uf(8kMz1)1##uHhE)vZ0?9oot&k zARC^7OM;gHEOCd#QkwPOuhgl+`;vtRuL438TC%dwcZHoabZybRJWIQ`K7FZ7@NXz3 zees%6WNe5$GYJgHHkXQ>FgbZmycyXs2fLt@GIFvS`FvoLEwrlIjNyv>_Jjcv`-ma` z*<8-8b6LbLb>Bc#=cbfxrr2Tp_FcGG=z7Za42{>4zqrE)S0{qBvz~f^ zMUIQgMIOPbuUf)0ua98Ll(%w}8;h&gFF-Lc=FtDWQgOmgIAsUT9?77`brlM3|2suL2*p54Fe8b{P-1q)jKi)w(T=n%Zj{*NBT>sD2BliV7FV=v0K=m)O{HzGGd@~+8wSRW=*$vX7 z@H4<=rR5B^G;W0%Gs4PG<7>J(_14ZYcb_@k5GoE*KIM`77%EGV#nn=Tsj7z+sxgR} zO&m4NSQv$z;I|&}GuLj!Gn#?TmTMGqc^Efq_5u<+=2M`Z#bF9onSLF5iz~)$YeT7v z;ePvSx2til(%UN&pFG`C{zXw)EWewNjSE`CH^tTJBtI3?GZfLajikXl7{dwVRF%)6K8<1xk8Jwa&_9>14Sm@S{>}e&5pAJWs*(RaUdZCf|5%r z1d~do$0n#aGgEMo#q3~m$eZ{P$mA9`nIF_NG|;0Z-h@Vy|BOXfe8(LAQXPS+6M?0U z{ESZn?1ZDN)<1v=*xFGN@kzjdve!+JGDTjv#i4vQg$a%DV)ZfC6R#`#w%uMrL^GJI z3+*{Q$DYwQc7Ii%{+Ux#X`G+lp*|^RQ`q^h{l8uS<=uO&!`db-c#a}D+1x+$-4g6Y z&peh(SqunIsA)bVjPO0CnC94r?s8ET>Smm}VziHMP3dJ-BuC-E^zhrBRM&$j@d zfeNYz=h(vyv=@G_aoVZ6dAVOH*-jI7Q|l_#^p-TMS^5rryQWj4lk3gX{32vAMg=9I z6N;rgwb5<&7U3A1>swXta=Yz(%!xIONxuM?9nHm8L+?BfKzR!v^RK-jH5X};Rg1IP za)s7kagWWJ#2(NT(tRd;?-%PA&*2l`?{C}NX{pKlY4pismFB|wZiA7w1--m%zmX+W zj<{1>8;0Yg2i!XT{*6PPlHKeK-JtU_35o04$4th3cC8aPzQCO+8KC+qgy{%$+7X*2 zT7_|GUSHNnno%UR`^>g*y~U4)yXV12^&$}GZ_o#^7wR3vyuJ5*t`9ypj{TcC!#{1E zN?Avv>V07njQB6Sto-uH_RUS$VFXL`Dqoe0MgyiYI@m8E-ix7#dkVgd#w`R^KKd-250$N zn9aq7?W?a4Pu;xJZiA=WrltE~rRq^=_Xy(o~X(poSXR66aB>X)4mUzYhQlckWi`Zs(m1!eK815|c#^ke!_7S3WQF!H<;o*I=!8$c39YP47 zqg4Vgjq~GJa(d`*uZoQ!B?;_MP6=K61M`z+~7||NE(|c#@-Pp*c!{b0xfX#wH8k3V8 zHQ~)HS^(bdo-0kh=88=V`u%M6}DlVHW#i9L5YF zFd~l?NL+>aLT)p*%872yDWtbAWnG4eL2z?e%_K#{;vwIa9fi}<`CI3B*di~>ir=PB zjT5Fv)4%Qye|KWuFGr&n#JtOJ&iJi1&IRlWB7qZpH~WpsMHIj2%4Et3ZnRh2U2c3+o`~c9+7<-g8_j6(q7v>i6;sgP zMpfnxCK(k^lI%9N6%<;HgsJq{u62DBb<1vz4apE8%GrT0VP$($tdZb^&Pau=>%cWM=w{WZjsA@9Jbwy5ymSHY zBx}=vB`XwIBO^af?T19>66Nsk3tGQ9WTNDQ#XsNnTckd)}qhS{YS|E0A!FusBI8ZsP_v2jcWCU8jSe5)*xXKTP&-QNm)Oh!O>xUBMBMhJRcN(^NORD=^ z`At1$sg69Bg20y2x#%;V&t@?6M?Sb^Q_o@FOfy^N)x6`!@4?C_+a4cVJyJyyycxrQ zt2aXMylC|X@ZYGze_bhVCRiQqr=E8Bg(&}Oz6xJ(Y8XBbKSHOI?S|{L>grl>ld#z- z3P0_IF7GT287}@Fd2f_lZ+ow_AaxGNVh;XleAsQ4P$hbU0dA+M2TSHw3d|I&5ysY_ zRSH|vxfg7XEGJs_RaMTzl^*?rjtlJqC*vX)+gp*if@ygV92FkI^_~I+mU6aqh}N&<1`k~7%0zbf*YMX zehWGeWEA;7m_|Oh@vZzM(y9|XMXlBDU%H@nb-3_1R%;R2b_g1YjMbJ`KgSGUw z*+4O4trSMK{tLN9|fqjj8!1H%NFHSw~C^_ z(nTc-w*pTu&Bs?=$u2-eZ7?~2DTrz# z7`mRwiAK<0^(-d@n_QUZP@)s(WM z>+#~wTRp7h{25QtL`_2IQ3W5evE>DJmvD=$zP~SXFyPJ~ZTH=fQy%yl1px>`tW2!Q z^zW>CXe8g9A`9T5$EXH2OmwLCt7-W=YZ|k?x`K%o|8Ya3*#XhX% zr49Vnn+7^KKAhqh-W*6y?icIB<{G}Fg45xLY4mE&9RlZM^yGJVSH2Mr?Pr6B&+Nr! z+~erm|Ij1;b4JDV|0%Xq5c|IUe-+yhjGg4YeJbIVl@X5A;f1?N^O>gH!SW?r9Ivo) zEFl;=%cA8n;5mW!^79=9IG2nFmtQ1eD;B^==xH~KZ*upZ=2g1y1l{i=-?AyFq3t`j zgz*m)GfO2WDaS?2X+UPB4kN%zd{^f)86C!Ok!x%d0(90dEGKGWRRRG`RWSN%AK&f=C-&+!PFKO8yxzx=qUz zYZ82gIcwIj5@G7c{%zAxr*xvp8So*byEaC4i_W8FT?t1@2aaHwT0pfCf@ri!xVq`F zg-e?i|3PI>ux#^e>bLZY#WQ(Py)e1uPmnv6*q?{fD~2)(LY4AVCVnH5sxRgsb8b1U z?H!_=r#Ubpu}uopV_qFY(<OS755%OkxQ?Ez( zbzTG}9=D@>0gd5~x#an;L1E0p)$IX9p<6(VUbn*V+!A(y3eJ7z1-Q_hqFCD>*o&l$|V5$9BN+PV2sd6UUsc(D0Gt7XVNoI`h+nk!^gMd=M>$*>2i zca~X$F_BMSdOL*Pe(bBVDtAwTJ~&SxxW$w^Tvq)#GvFTae(vp}V#X^$oc)khPOaY_ zbhRa4GYTy@HR8v$xqVJrg7*ddGsJyMUm>TPqFH4gSLLO**m7zJ@(Pr}5Q%h{P*Vy{ zck;qLVM5xmk3&MDy-A>7`f_4e*o|Kk2_=EPs>+P~IVgMj<8NvdqP z$KP4pGiG-29O&gvx$@h6x-GZ03fK~GWr|dp?(7ca{HeQXM;E2zrE*w27CMkXYg^`t z$(im~YayoGH=n{gxEL37wEGr%bs|82?@Q(RE{MsZzm};8T3~Y$vnEm11pgLu`*dJ2 zBr@X_#-kVy2G_`o;qj=3gH8d6**Yh`n14#o5iH&n;~@#ja(-55T{;3N+MzQ2LPp1F zr9ZE8Y?}!G7+TB1`Xw(x(qx{gVg`wcAB=&TZR*Gh)IfPzkJUBN|1x`L`ka?+lvwMm zlgy9`$0}f5Rw<2>amy4R2z4|d8DMb55+WZ!7lRp!pa!0tbuRR~KaJ9d-yzS_oonc- zzq9Wc;8l?sTJwCxe(uDRbk4^sY~%OibE6KYzHx3oUXrJcfYXn@53AwMscG}{VWJ|R ze--Fb;-}BvoiY$q+H!CUqSB$tL0X-?+i8@qHSpFYMYj@XxEDW$bs2`spzl?RjK1tB>W#2iOhNqF~+xLKPoD3K$W4QlPw;X~M-!&u~S-gh$~C#;V5Q+g+hDU0a4ZQOP|GmpBun zM1RJzL;310>P8&vh?fwTwkb13ZEY!>8OiCliCm@hWN9G`Y7Xr-`toWshSD8})sJMs z$n9LIf#hO1MMcmfxG+mJC>?U%VP{LX$@@f>rDr%MePsWN(jeyJCJtwJkKOVbR9g4l z`@Rg}Li4?lp1h@fD$C)^b&CE z8dHuRxmsStA!rzzOU+7jO;I8W@<#@DmFo}axeAQ`wl}!y8o$e#6&%2>67IB2z$xt} zpUT_P5w}2)jQ*rMecxK5()6P7finuU$14SWqaqq5(`T%b!CIb=kk)62kN@J9FLofY zp&6gI)1g7~&7l{SseY#JL+%_*P1^NUV`ORGKuKSi)NmMjo{JK7buvHZ zT%&kQhVX7%Zfd@#hq4V5!%YvrhmD++Gasv}(-J3$O-?AtIbaG|Gt+KmPZXd|h#IP8 zk~HzPI3&{802Qr0+G*R;{cb%EB~V>_RlGvd4vwOb<{w?AG|I4BLb~xdbXw@YL2mhw`SN zGUeEhnpi$c6Q>v0!+UnGUF$esq0dHtv`HYF?UaGV?dPRJset-j__Hi)Hc!rj&OlB& z)yb0pE$usI_Au?Q(NM(Kd&(5RjXi$y_|P#=qe=)4l%Z~Y#OQ?8faOdSk@e=A!En@m z?OB-rg%;p+*y%AzKe+R-k3!6LG$6nP{qO_w5UW2m!rEK1M%ZVnXTLCRzdw(QdD;2C z)&`$K+t^YU@o`wry%S03QQ-W?$wi^8jl@F5uK@Vou3fp>FM`W|t_tYW3rH5wKM{en`y$3+5y)VVU-nk+xH<@QJ z8?ly0-9IN{{x^G#a`*2-VmAJDHT}C|(*K7RtkRMncJlWpGf0P+FMPes|F|T!{fFR< z_ltQ#6V73>kiB^sllBoZ=RLD)sF~{uARSwfoHa;q#7C6v%@JQS^)uymzl`p62G-}yp??3ig# zLN(WzZO`j4nEpUxu)yTk`qzmUa;QiBM06l@WJG|^I#AJmrtaMZjLbAs+8+#d7HOZ) zOL29%skg+#0pyN74mO-S2W%ZVj&oTJu1@$=RT7@>FCk2FozV-ldSN@Wswj(;4sff5 zkKgHvUfk}O$miNXh!AHDW)u{rT$60-1YKLQdtbH?Y7^xrlXC5PWRovWZbp(Q&bryR z1Sb25oT9(e%5U-Rm zp9IB*_16iP3x&)orLqdz>U8P%AQInxy`0Dqll9;52I3Tz^AsJjaQh2 zEAs{>L&HLz^PK0Zf(}_$B_lA~qBksyGIk4z8aeZ(NZED5$6@HYQ7D_u-Etif=8L!! z^IvENPUEyAy`ox5HAI(ReGhf}#N&4}Eb}lFB!I9?Z>jc#w$&Uhx7T5A*^#)_iQOW~ z{;msq$5xnX{(V-l>+h<#B@*V=hkhgbw_WN9=g&j1AQ~Y2#alxPnPK&ug^Rwu_=PRi zhzZ_MQU0OEs8Q;Obq%(G9O7n8oB7YyTUC6C`-H8i zAKv$m?5)${n%ZT}j=D=JmwO+ev_)q33x4(TB>?yg(w!%K8Sd;&84HVp3hYL-^paDu z)no{vXYHg#u@}^eac{;o1PJ9%+qjMPsrRN9aFn8r@}&%wI!R#0a&tp!m9bziWy@~! zU)2_mHnloE%efA(R91YqVuM6g*kOUEcS8%#5iLpOu89mFOhx;yG3Gh~!py$vEPj|E zQw+pkG-fu2Gzib*Hs~C!g)_oNX)%eI)glyzmTacsg$-|k&sm(@Q17SgucAm0&k|ut z@pTZtlJ4vGfPHB@cE%gxe8qi1)yH=U>y{FJV8~mcHuS9~Fe3FZwH9cLlA-i>!8f&? z+_H-@#G2eLlIV;1!X}pXUV)+kM>XouD(mUoj*P!6<&X4rXP59wtwlpad>|cFYVabbUaeivnFW-VskFOU^7m&}d zh*9NMPA-(wahC!UQZL}&2*hWo9upT7%9>;;e38gKm~ z=ZUznE(a?+A%y+X>yPQ-QfsWal>)@IvAiskrV0|fP*%ytL+T89Sxyy!PGU1ta)H)! z!qA=D(Fj9nyK|0S%?k3>JnBieVUsVS2x}ovKNWa|2)fm!wTNaS((M>C?SENc=ZPDe z1Y#ZaaW8K~(mTdKM}4mb_mzH!K6~3?7Rd{zYc#gCQGVo~Fd#}LI}RAaB_R@!852%T zD&FYsIA#QNXlE`iO%-`G~j)6eV`~EG~ zSVg=Kb89Dj+ZTr_dGms2}dl9zjd6Ws`Gr>B0uxOOrI zbD&rs)>W98Q3G<2ZhZDheI`N zexG&KRGqqKI8On|3Zo-^8}-#R&ghsPJrabCyc1rL6^$ZkzveN}Rvo@Y*8(geCZAjN z4Kzy0R)0$A9Cnu%>jgWVoWl-bP)SmHZ>|D3M+#(q?lXPsI3^|ch8g$ONB z5;?;viSBH<88%EK-#Y*mX$-XBSjYIXIpuI*+4JW`IVGd~L$E_uB#X&-sHW`FkU2l< zh9d_lCqJS^o((d}dr|4MIqf0->kttKj}3TZj4WsJcn{HZGx_ry9}n6$NPTNsY`6b@ zUs@qlf#(?0*WIMmS>!U-@TlCMy)J4S*}kFh__Yi0^klv=v3jr@Z&VOh>%RF$&*Q8x zpg<`Wz|&}CM0u2ASdPb7Le-9q*l6=2UDxjlmullZ{<9tGd7uSl-XW7l%?P1UUYz)bEeu27$o89c$UXJcZj5LlL zeC_9P?;MGixXp}Zy#z;(mCl^)xQ7weYQ%1@4zD0>KUIb8x=_6}jH-{-raj&x(9&pE;cw1Lo~$n+>JX!7r9ILL2Ms8+41$ z@EY?U_$jw_I9121>H{@8%)9lmLrDvuguHVXM~MXP&mQ-D$2}nie_p;s>IkJy${3_J zvlVuW#0_1i`d%42%_Hhq#%M5uw(06|DXiMOcOH+agYO^mQ`UstRix_s(F|kv!k06? zyyV3j<5^7LA5jEF@7(&yf}XXswNQfxnG^3sRZvIzgZ5CPM0j7*4DeuU9oaP~LR6*v zYp;8@e1ZK6(TtJ>C}F}{xvIhG_hpYRHaHJ#pJ>rGYSjDERAZx)*OkQI8r3*No9*#gxGs2K&Kny3MLZ3A)o#e_cCKz^pk{ zTmz1L{PfOA7cWu_*S&AnEe{^}W7x8srCx&XAn4OPl|v_Z1qomPGHh?%$TO~EYDueh z@*z0sFaHwr(js0Pq`01@<9PNUa{F*K_6+ueo^hA`|0RC^ukN1;f{{U1O9eT1ssjDB zd-(ow4V7wTh$C|a?jE|V9gJ0>}0r878^MQw%*k%kAJ&wd%e=YOkxX`(C>{vFxK#!VSO zPHnl>9l4p7-B(nX{=F`UcHA*|d!s0C!x4Y&ml+%;eu=t3Uk;9W$2pS*N?XK;pzc4h zTuTdxeyy1tUTHMr_zil#%G_bRVYo8X?L)bNYN_L4EA!LS*aC~~jIdyr1)UZ|c8F?T=34yi|0(IlMj^j-?n_pl0 z?nir6I?R28~pq&xSgd&nu zpf8kE&JvoOmuE=ks4SUzD0r3msf-WdB>L3Qnum01?z>RyQDo{i`?k;(76Z=(A@Z#h zgv(k%RPvO~`#aHvV;?Of=kZvbG~O5wl`i&3P(70*$Q>-BKoi zJ6Mp65VQywR}02m;bDj_EDa~LWvQ9Rc#EP(Qx@LQ{(2vxd@Ddy0trH>#uMH@qMQW{ z1*HsQj7miiT>TtgVj_Iy%`di!90LVc&gXcOd({r3chdFRiAHh1wg|9JU;%BD>m4|X zGbk~Z6%PMo4uj`+uOXS6DmZHHRb-1{M@WeluYa+Xg{sFkq617M>xsJqSgmpJ^=Ylz zEwaHL#jGd)81JaAs@!{i9lu<^{NcJivoh3z08zRKkvf^CCW5T7)i`mJap!u2b1)FSeOF^Wyk&C z^_Br`h1u3{DHK|~g`xqfP~06tTUw}~rMLvQ;1u^#iU%mAP~3`>;10oq1}C_CfB?aQ ze$3qI%zW>?zn+tG{_d>3_uBhe>%NFb18m;JzV|{GepMNK;(w!W_n$S|zfXJn&}Q$E z9)x6X?0?xau+`j#UrSO9R9GRvBI+aH^WvnOxsW9GvKCZi`=1{Ria`4-56uDAbM5$@ z#txG`cV*tyjczl#LE)%Jp;2MQ^7b-i=WJ5V4~-hkIOZ7kMiO8v4@qi89G@?MNmAvbSH>P3omshr(Yp z1!C5~PBeFA8qH1oj6H88?oJ+d1KzB@<*BKrQLCn}7fp9IAE_prJ|$;XGh5CvhloRT zLD#JJ1HS-?+Vb}ua;jrXfl;lc$Ns-_eKhV*jWQ~&6Zo2%&>K`43MpI45K$EPB`ZcW|N{wod$doC>9w=)9S5CL*Y}KYp*cyCajU<~OilNZg`Jqn?EIxo|NEr6F)n+v z!?y4&h5E0e84&l--QCygvQ5+eT7l6DWGG^z?O-G4*%nFG;Ir&xEAoMxk;l!o z)B7U3ak8$^RA6PYK>@HJB*K}&ES1#yYMXy>2RHNc$q~a{C~7 z@GkCo8n=oifQq|@C{^lE{+;Jf{v)Tarf+*)+48>uGADlu8#0Z{?S2cgo)V!gBwW^e zo9|d&G70_0fUi@sDmdpfZ83V^wr@0tQ7xT; zxmZ2Xy*6Rs*SZ#_x!EfR;ITXLVc7|+$?2Tahj=8O5bQbj25iw;BzTPs8A7Eq(Va*v zynjEQ1S2WLZ<0h>XY=COkx-?;WHfmA3~V!Zk3fGGOdFtY@l`(PiaQ%hJv&^nNiY)< zWUJ3uIQc%JYVS|JwoxfhdbqJ5U?8$3?$W$V+M>ef`FS;D>ccc4XJpdea;y95V|EuM zxQ%Nac>~5FYw(Cp_*+R`nv~Q=GB1)fX+{{9|2y|3l!x+g(b@NR*Bik*1*?)@DSbhD zQM;_gE6;;5KG&}2eqUmLG5(SJff_Wp&e?cFqpM}630P;(9W7ptNTw_g7ShUkV7U5% zNkGwMhH|Jsrr}Cx*%gXHkdUP2>j^jHI+J8{vBCk9r4;*M+frR0ghO4#v=ao4b5gKi<~xEaU~_ zLd}*7xEO@3>8v2kOW{Ud(oR`UFL#&4u134*KbP8NTiNii@e!<=hs^4qnl~6@UWNCY zemU$%I4q?&&-ClE_f6N#Or#Q4S? ze28Sq7M>LQ`hf>XD?QKIWvJLb*}U}XQ3p)CQesWmJzU(k*j}6Uj_&&;tSt~xC!p*k$L@J; zxA^t(`+hk^`zHM%!!H#$;H1K9%ZIb28~C*{kf*Lo$b<&B?Dqv)dj8!TXQJ<~6#pn& z50Op5uizJ&6d-X?s}l}p+<(L3|2)TP{u3NA$te;42FHwtr*lNr)xK+S(=f~Wop4VN zs!vHy;N|Gtem!050|&-5Lsn*nLp&3t|G=No3eGbHeE$Txc3@(mHvDiMFbfV?S}7;OjTSrexRB+qxlZtWJXvNT6QlJb`&QHP*26 zdbmefX6}^b`MS}{raVf_&7F_);?(yI@BFFlc3V=Yeax?bdlTu2vT zqd9D-a_^r|R3-QZN}*Enq~Rn$VcDH_e^pNqh1MbhSY;dw+TRz@ zK6Uy0=?Xe>vy~L;tSIqbq6Q7l;f5SRLQP?7uQ*Ph%Z1WL1^LQzC8ySRr_2QfPG1bN zMJ+f!5Um>f$fgWu3sC$}6&s#w+Mw$1rNq_bu&1bhu8*yzAo`)=JeU2d)Axxc!zTg5 z2e+*Lq-``dUiVM$Bzbm|8c(gN_1A!(lxEyGEWL4csRq`C3;AjuKl$Rc%;t?=RCpFR zYf^lKG5)bv5(DV6mBMW`tSv_eeA_>0EA(A^W})Lqe``s;c#>}%)4CX`_;w+ee-0Jf zYwx!^Hmz&#eYtp%fuuh8KQ{K#_Wsd}r|nU>56k@R#aBKrFy5fxHR@_@89nvvLf>`P za++|iZDu3lxx5JVWCHwY4k4^!eBeuC8p|2GTOul?FrgpPaY8if0ywf8Qy&toLSuG2QT-K4XArA5^u3+a9E}c~iJ#dVmvYzom;*>5I)DMo4G%z>ZK8?Gs za}*Qz|DlREc*-Ee=2>G_R_u;o_{3)&CSJM-*SS<(cmjI$bcCNz{nY6a(FFBld&DFz zB0|kFX6VQq7?kF{;Ru_XIWvKcQn1m*2AWuI&p*!V^00Xsu7`QWFaq#e3_I|?$3?!* zygj>LdvG3qjoCTg!TfyYj*|0et~k&I`a2Xnda#xd$EK?6pGTX0I1a!D+)>$Ca0;7Tf67ZVBL;b4XPfl!PgaGS=%x z9{)@(90F9}*k}4I*Q84IswF6by=s-HWZy{Kuw>qq9NfT84|`N3h*~y{A&U08ZOT+o;a~?z3 zPB9JG_Bioy3BQver-Nt`lcdvED?TYhnh)Q3wVt>Z`eBA`?$+RYS2|zB&jA$A9@Kf^ zn56+=Zk3fu&oNqe)z6S*vao!yrJ#ujMQ0o~d-osPC-=1~Dte8UVk$Ll6AWOh(zWW6 z<Ui^;yoc(2D6YSr3{wKc6-S!jkiFx7GEeMy(Q zt``#uo$(XnEs9T3{hbRC6y4Ln6r3+L#h32_wD)-49yorQ=%Sbh?teIqvI&;~_qcGE zjM9^($!RBTbvp`Y1e4hOC>zU&jP(6uJfp@OxnB?&W1+!jp952a;mGWaM?S7&t8+y? zkYs1Z3X)BMs!^OG)1mwc`$UqS&Kaj6&O9<&-q5!>6g1L1e_+jp)u2H#@n7FjsL{Xx zUQ24aY8QmqNA?`@@pDBf2Zc5_;DJV>2k)1`mcer9qWVW3iOdbpsQ2>uF_%?^zNV5M zPj1z8)0td6BWd1p!+*lRpSc_o9!2+5Uv@8rv+7lPxjk42x7!%F_yx6+Pw>Fm*ll}; zsl+3bVz_i+F-m@|v-*2%Ad^mcy~DApg3a0qUMAAe$-l^h`aF*@2m;;j1Jtz?Cl}3- zGe%WXIX!xId!0h2X7(!T8oQQM88O86{&5>~rFC&or&@NNwlh}#J#^r7D#*}ln#0oW zb#Rhapa`3tq3H?SR$xQcabmu%UtcBbH_uCg)8wWWsKB7-+$qw$is!F(MKewe#UIj zq%StN$|g6+q#l?p$Iu?fsE++IV8ljPwYI!+j*8N)z?#b22;UpAZSSS^cW$MDtc=BA z^RF{&5B6wS?HmHReU}t8ke@{OP=waTyfWTahBM)=-Zq07mA^g4+B|z#oBcNS7EN-P z5S|u|w;*^JC(7COr@*U-T$JJL4C73SG*F~P-1o(T+Ij-%P`%M?Vt`P`lb2)~r%Xu%h~Tn{t!QK8{29Z~|x#?w6I zVT2itKTX{&t#I*S475JI(U}t6%++2$wR}=^@&WtNB6VfeMH+Qqn&5epNym82IByog z+hd)71s8YiFSwZcGlB6h9*B84pym#5B zCdwPUj%su}uN1C@o;Qs>GwX0nhnUDFhGp7dr;X1@ztdMl+EI;(hWW^vJ(P~N0- zp3M3zjJn=yV95Za{!b5$&VowU@}~0f<4sn_t9(zz)*uP|!-vT=nj;PN9~LofJ|>Ks z!o@FMv|HKu9FQ~##}7821#|M+mQ?QRUR~g4K*x;rO^qhWWBhslJMNHZn~hmP@uHq zBovN3GHEdPg>n#y1v_SiD*NEs>ON^?`Bm(Z0fPyezpIbrC%C9$MyZJGJ*$Xx83#b2 zW9a$ql;ysA5+GW%AAwS_|b2Ezt|SoR$tg0 z+>rlevlt0{O@0zV8uD^m@DfvYb!crgx!js$iV)Q-T{%kgu}wWjT|K`?pPcr-dT#!B zYosiWIL8-$az#7$P*Ymp=cK_vjqPQ}S#0M1nef=h5`CA6F*K|)c2Q&Yiily9xXJoJ zM>N@_YqIJNuP(~OlkI!=Po~%pa|SYSWQX5aJIR2Ks7E=0^ZMqK&b$M5*o}_jn1!FT z=;+p6eU3CgqOpEmZ@b2Ebv2I{x4zqNI$wgWXc#L6sYBCD0xw)JXcAyw;``1%! zO-u7XKeu*d7CF#_xOAb;n_?IJvUOMhFaU4gd|I)Eb)BjqHQgP#fWOBAgq=^+8Z$u! z>}C3&*X~5@dsoYo%aO}()enW#aVjygQcBn_rg=$L5$BHvgO&?rn}HY8Q3T3qgMhnE zhh6#4`z?YLrl1BQ^(H(lB3iXSKsB@TCTB-ufW(?{=x>0^i&XC%s_(C4R>~(YR-b;? z08+T%#pAno+{Gl47UI6U*%*c77ULfv^9%CYbntJ%ouet8>k!Z|p7~!Oz)F+dXrjy1 zoVfjZ;iCiLHkaMmk%dPG7pBtUGeFd;L_L&sd*;yBH4Njro>VKq5G)8bi`-W9Obv(j z9TsP7*XJDLzW#1l1V8-ka$!4kvOa56=dMp)uug`Qc8iisFWu@^`;&Yg;yI>AyBy~C zX}4227~iKG8{P#v{NMFqs0FWOVEoznrx?BfI*5UTk zRjhYKt%mx}zKIDNH*B=(@Gjy>s`b?Qn|*8f8Ehq3)1$Jz`@PEoddtw#NN+;!0n)_WU(Wk=_x z;U9HBrQpj!w(c}Lo}Y9(7=Ap#uN4OtXQo~EUT=CkRXt0z`~L-?A$3hTaS?V*vap%U z`|p=ie)hfJ$_56*EwlK@ovm-Y!O;RvvB$33KBv`#WL-w)^X6j#iRF027Czdo`)j0y1U3&vOS9>HGaZ3*8i+q# zm@~7XL3UfwjJ4l2!EWHXsS+>J?I$+Gj)E zjqcAEyJjN;xzAfKiLSd>uL5h|dlet|{Rh7O2h1c3n!PiRA;A6e?SJ8#+xMH>FS_yT z*JCnnSV4*Aa}^ezPufg;P8$>QzAhhX$NCpRkCg`*ZZ<*FEIf*&39r z+T{hb=f)~+7}}KLMK&QMs*IyQVb)zP$gj-Atb-?AQ@Q1b>d-o_Nmw<%j-+@;SiYyV zcCioB$P{(+#L~9`4|`nQu8secW-J5;ep#-lH6FBHHR{DLr>n#q87GlS2wx6q7jpY6hdyEnGrM_-M>TV{7I4~SWzx~DR9k2sd55p+JRyRu z?5>`g)8vO3HaT^%NM1+!w@$vF`AYRJ*$t2EMvdTk&BQ0gxpt6i{VSq6@$*kA&i_h> z|D7x!5%)z-P2S6De!)i^aXYIyN;{yM2T_ix-`9Mkb`Rk#G454_sIE@NccRk@juAL5 zF?h68{~Jb5W)faa!5SL+R`W*iFw7<0{LoH#;n|Upgg^eUccgjd04KSbj(AvsBst%h z;cnoZIR>}m4l5nsT4=HnRhS<2DYF3=Htet=de~S*&woLc^BU1dim!~{nof^X%@@nh zR;SFBHZ^C>K&H3w0u?EoC=K;iEAuZRtOjdc0BBWR@F5p%Zj~~vVLhZB<3T(um7jYO zm8=U^NP@2IxlVWXa_BnaqZ#waGnkD(P3fp%O5<|f7biXX*FRPO?e*|Thxygpg5W_L z#&?M|QRWqgTbIi|Py14xgQ}n_3ph*Pa*fEOen6k-B@EUh8fX(KN35JqS?VfyTu3ghbZadHYSOz-8ZjUxj$qykYE)7xxuve+b_cIyQY zb=cO+TlcECG0&Vd$oB77-TBN^7M5e}Y@MlQav)LKGiQ775_IQO8s85~_0{d1u~?*X zUhg4yuvxlq(}8vh=(@>~h~#tY1N1$=Hl3q`^YT-tKwd1am02qYX6ED-SvE^9L~eMRi;57 zNJ7CA@H!fmvw}G}Fa}t0~;A{>1>Ht=qAH z!mse+7LimIxpQ!sn2!_k&>m$ir>*%oY_!P`V>cfMRsaZ(i^$1gd=he|(BNxCex?p$$hq0QLpOmc zArL{JUV+c_KE@@XTLp3;o@$~nt+d_3W{tu#XQDZgdc|2u;j8ZTLfMAJ(0I!*Fk5#)85EqIt_ z10*0Cx!O%L4J_H(J}Q!sfVyM9+c=xhW-Psw+;bVpX+2RwCB7Gd0;b z=IUG4Hp_F=DPFRjG~XfO-a#$ea2XBLzMPQ_gY9%o(&YhkB?Ljhk|4yK)GTjuN^J#q zE!x8lvNr8xn<3Z`OWfe%9pX~XRv~i%%wgI<-KLeEP@B_a{;6yNum1&~XS+C~jc4>B z^V+qXW@4J_Oc2ayL(hpwr4qf2sei`stx)<@8>O-G>UB6r0FVa8w?&f;ORr`tXwFbCeWe}&=s>m#N zp7Z$Gr|MhnSUwF^{a~BI#p!i1gK<#%RckyX%YHblnXfjJ?2#~)C~X2WcAiSfI=uKd zE5tjIS1BVzj?H8>7vw?}6e$t%ln?pSz{GGi*>AGGObU}rnIF&|@VZFDWyM3bEy4LA zk?_w*WgkC{2M0{p+y3vqn`}{qQ&L@9RAil?AqW zF$4D2=!rxl1-Ce^P`0%SbR=%6C+aeVdK|WsK?HbWtb)l%sdIl|0+9>UHPMsQ zT;G)a#FEZRE1&OUIsK6j5OF29Q;_SRL}sYVCX(pY;qn`3*!kGT|?VL zF76o=*M>J;Q_5v(uUjmBU*mn_#569bQhC3|FjHn<{Mj7)suE|GurR!Df(|_-F(PVS z{i;lJH@SULCBiH4+t(~_P0vc708aRJqw9-0p0*x&iwMHvmR8SZi3jKza{nGKIR~RD zbeE19r+sTV%MWsWQ*}xKdU&z82er*>p}l4sh{eh`vtS~%Nol)B(i3MrlLqKHHYG9Z z7d%}$mmMj_c(1J+2rUBdqUH`+4tRI4^z+hpDo#>2rF+;Ui(eiy$j;Gv6TNTrIqNdx z+b)|^*)r=x!;PyiHy)dAADIO=EISqi<#eV{C^RD9ZAS~={dLySfyP&AK)waJ-Y9+e zSgT@7f<=m$FoQoEfMz-{vpE)p4YSye;$@UXDRkGKIx@WjROMPThkUEQLXm@V zKl1%~yR{x9i7I=j!UWyu%yl6#bmP+_(?Cx&Yxw;)4kX%>Gv7|CI*kgKw|HWv_hvi3I+c1^*dV zG7NW^eLsLg-JGTBOEL0+K0I9+&>eJ11v#D1X`Wz575;Er8VxtHP>ftuQODcxR@d5c z?~;|obhjdD!$Kj>fexrE+d4+KJOGH-1S$RuO|j{Z{J~Btj{m#?ycfU`Yu0tYkRl() zq2=_zpT@e%UfL13zzZ3TFTk17Om(b1y5^QbSoX|!fZ-l38mag!bndgmX}BA*p=R25 zX<7r!$xz2ozzfo~CR3svCe!oIcW(>dMS;5k z!PJi2)u+iUuWQe(0fbz>gxj0zOEc0UApMZNdF*V_kS6m7OE1*zrcO?^ReKv58E|BK zv)a*+_CvCn^6|>+us>o?Co8$3+w>z&84vsLYw!*h#7j~udtt63 zMEBO8p3@5IJ&nc&16nzJxTdjT|4s>y$fq2g4jYD!xqYU)ila^meG3mX(1f1nZp}UG zd39YiH4?7Ngf2P#CF9l-Xg!x{O7BmqT8^KL_POfxpRPaVjoA~XhuGN`UKPT90PxGm z2DZ>I`^0wNPS08JTKxSGhh8EgEal!0Y#lc$@srq z#J`z|Q~Vbk{gIu!6KA&H)b236s8dotrV&#Je?*_<(Do#fQhq8BE!|unc=ydTT@-NTW)z;VecL@XdvTs zm7G;A%8Mz z1;P>cU*@+wYZ0=S?=mxRXvUYuwwdUPhhRJ$kA!}%N8 zuE{|x%GXFTTHK{zM4r7r{$qNxUKAevbT)}9GBkr@^W=5SRO0Cqty-ZIG(?KQO&YS) zIwip_7{96PrNfSBeJqLADGmvnHjfM_sx&OB^}7y?i;aNhzaSNOHJ$%1pq*yz%;zn{ z?pgK_dVm^`c7EZAZ4`YFtWB}C%UD*JOXID#al|)X-p*w)Stj=QhV8K~LrhwgA#0mk zOMUwvruz{s153%H?{^GTb*g8t7dayyzNoL`7+R~D8I}3^Kp)${H657de(7#>b-c}f z5b^)g4XO)7nua$jWeZb^EB~&kWHtR^FRwJOW|Jt;w1?qOPK@lBxS&*hK&_Sb=<;?u z1`t#7+OtmvOp@c9#w>QnMo$UEjdxs-5{Yuq`hdEnG=-iE_%;GYl%QxSyhb8iWkMHi9l+yFR$}*T z(6bml5>YmprR51bXrMf(QS@#4F_a(K)uBT}(!#=H^M z{q3drQ4;Us;%2DM+#WsBFSWQMLHY-HOV6~6Vd%M*v)DLSz;E@0vb0K?`#LqRc)mk4 z?W0coZz)WzWpHl33*J}%c_mp%f>zh)ha%m1a-n@wxyeX3r;`xjuOB_iw%BO8gjxgo z+X|!&AGD{bzKkF<_XqY#e}KG&Jnet#jMQYQW_2s`+sBHYOt1(Y7kcq9>|k3f=3#z@ z)~;jc%=K|7Gc`g=1Dkd%bD06-%*5f0{%kaXCV)Ui9@Sbgp&w4)(Pu!z3hkK_Id#0n zNo&L`0>ct$wt=}y)&1nmREU(}yikb-*0EV(I`T5?_dj2irMKLO<`^#*r^c=K6I&ks z_-wkU*NFP?!_t65VvD1q)kb$&M+V>`*l_6qr?tK0*5`0HMkh95nJ)LyylXjUgmx)Y zE2%o6g;Vk7am}lXyS0e22g`D4;x5NB3y+~1*{Rp`m8}vI%@3_I|n_m}(|KJ-~6skl2-5>gz5?>7S z8UW8>m$gajU!uFSk_H}&M{*?vI~@-_yR!Q(_Gq6Zyv_A-q3G9-=cel=qpr89lH4_gJN2W|1 zV{iAehr`N2|M$)>m~WcepBR0UBzcbXKfLHQ4cYb?=4z~Sq6Sv_DCTb-zQx9k zJGQ?xGkC6#4!M8gqU-T6yObi?D{{}2{%7{M`c78nQ$4iP3x2cXF2JqB3(J{aA{&55 zzDu~y;(0naPBDXR3SA@|7+gWDC2D6AA0v66<5snxh~1r^8GFd5SBDvjGvD#2BN_1O zt@@_;DvD9*9)dOYGi4%o0P5hR#9pnC=8ErR1-P{9z12Sgif*D0YfjqD%0sQG&fYRd zU*iStY=799@wGilbspeMXDA(ekWu`OR0M1N8IUkhkg=ds^OAZ*&rHjCyKHD<{9Iv? z6J*|x2hq7(AXjAn(+=kMa-na!nY;&#g7ysYc@pi9!R?sTM(*^X9k@H}#KU=|ODoSH zoQb<%2W`T^Y3II|y?$OuYn=3tlgGHDrP53^ypxq1!pMJV?~+&6zTu&3@OwCaEz5Q z3c|tQe-~Jf+0)^g=M6{_ncjeBKd13B*99Eu3b3;0(xVBTi;{bt9-p;3n_|ARBvEiN zttl^3s?qP1v(SA@QFz+b($W!=OQ9XujHXG;n)-RA?sK_s{e)6;{D+AaY4$SPfD4srWFz!+Zmo*Q0?L5ZiEpiOB zYWipjo0g@jCQ>6cU`$^pOnh6^`=*><-R3vP(9>39Dob-uG=H23G;}OB+L;(!``#~s zthC3XIPh{KOBow|k@M>B;Re^QQs}a~LY6OIi@%%HJ4D9nF{7qjL(-CAzB@Iz15Lm@ z5FUS=?G8g>;Qf9@Q6+?^Qd@;6rg-3U91EdwQPQn!a|qhG$G5%m+uqCeiq{kVJZ1c#I0*O$yWDj z5c$)15a%kIJJHrQMX^>(W%{3`m^Hr8nm#Z14yh&slGv40n(Qa#aU~Jm*jIIhoKkk4Q^=3nHVLA4k!@^J4L#E!Gh0z3*0tN3 ze+*n6ZvJXW%j!H}Q25w@DC0*b(Ztj^=b@AjbJ|-)BJXMO9uMD7+VoO_ci84L0psiQ z{paHS>W*LA-}9{6z#Yx+m&`V};YP*16q81ERj`MRsMmwuiPCc#Haopn1^R5kOjjwI z&U`#izTD|YyFBM?dPt%n0wr!5Wi!8=azH-$>}|lb)d%ZR%;Us z94R_1>Vmlb2oi_P<9@Z>AOh9m!1Zprr#slk;b_VX=qRwfe5sjIc^_Fy=NZ=@h|l3- z)%rm5J9D)kKbO+m%5ofSo}N1AMa>NLz&9z*nXIJc#r@I!3((~a%Wx;<|D6c_BfePj zZ(~EJSn?ZWfqwz)Vu9FuEjB*>OZ2HX|8{VC_|HJOG>5eWN2Zr&d!-O&pO^Gn=e3*5 zZOS1Gomy1NsGwR_hdkU~k|Wh(?|?vMxF`P_<>#2N@<(4wi)9OhZ`@QvFNV*Ay-k(jnZ%gLdOp?FZE-@Oz#_)v(p(Q*BCb92y_pE`_ldBp z?=-R^=ZT1RNBNRtH}QC4fynXKx*(WNX+zZO&#T$J8(T>3)Kole%z=;whms8iX(3G9y_=l$aLJ}TZW;mAkX#S$5|fHo z!(bH?Q+603!>S@!8{d=#ov~mz@Z$I>X1dcz1A9);XyNjhKXQ&dLBwRfi<|W4(boML zDk;dmqIAPvG~BwYzb$7S1DEjU6Aly<0{(IDFFi|S{Qin+|1z;K7)+G^f@?y`Nyl0` z&KXId`6OVk*PJIRyn`^XaXjt=oha|8r^do-;?THBrcd;opvA+7@Y(lH{1y*h5`|JcOn%yFyxAtNyt>$|TFl>fW;iWh?AWVAln=0`nadzP ze3g4|h2J2awFsDIgI8q8V`f1);!%RWc&rm#`G$$tZ+bRNJ$t1kP)sQBAzdao~ z{;62x@0`LL!+V-!UnfD~drq=XmZ5kdxQ!HNNq5AGJQO$~3|k}T@~<1)tKSXVypxzj zeH2&KcaPXR$je{Z6*gqTYFG$cNth8bY|L*c`Z7WCi2z(xv+!Bhlg4=VBEOb@!PEAe zhd0??s&y1}zKCGX zS0o}M!alc0%rr{`Z#I%YK=8`rX1Z&(>^Wkjj?WM|^2V(zdS-#My_Q+$;F&Q6Dp-;hRFs^-iwoZ(X0@~);p1*)qQ5=zhhiRu_d+DZP+()F*lPP`TOxI5 z2rmzKIZ-an(h>7CIA?3#UG@*jJ&OJ-Qf)Qu-gK>Z{JYWy1L9nwUQYJ=HCC1{dmq=5 z)qa^-8cPQ|y+b|uE)C~%bXJU5Puw}G=PBVz-})NE?(xZO%&fklpDbP{H7ZP%r?xh6 z;H@EFiSfM+<87z172^qz%m;-ai5Xf!HmSF)%0Gw$;AjgS_x-wEWKwIDgmrNNw}fkP zXf=)3)l!FP=^z24PsF6Fv?wzRNx_qMD`G^+U|VLx?`f6PN8LuUp%qS_`%fDZO#7TY zz&^y%&o`yA<0_5y1F;)Ul}dN8R>n4sNRE!|2=$SQdZ@oI+fRaXbX$_{d1wE*yjSSu zFo<1mc`jq_{r3Kpz4GVEOR-Q*LFRK^@BUI7&2xqb>y3-Vd%p{9om!s8?(|1>{~;n- zI6G2Kj@6XN#7YF@-&I@^$gl#g=fO;W{dQU5Oyne=p8ND}v4H%-mXT(-uv%M4sMw3crIKC$^w9}8mO!5C5pQq?ZP)LhaxiC(5vPsARmvqOyK@k*DCZPCjW_l#a%kj@sAH z0furtcF7-~fT!zuY>Gg^vz20e{jy)*xXg5_+T>@rhqNy=ELEE4j+-mpk~MK&4$|iC zlGvgut!y6E^yt+HM-$)GcuG;o>ZcK-thRo0|8cIi7XuGX8qDeQ^$!wWP$L1PNa_AY zuIn7#9v<+V3)*RXj_zJ{1U~>C|H6x-DnP>JzwTbPxlhe%EX*}|+iQTz;w~ieq%F%` ze~65q%`T#TTwDpLQy<;_$#~nZ9?#^m*|5Q0N>HJw zUoS7-fO|-qqbRra1r#q=ND8ov7`55FC%N*^EaA~u=(pEGjM7p=opM4Gz}TKmD;FlE9l-BnN@9sPy_kOtipZX zpig>7H;+)fQX`bgYCDPup|x<}D=%?_1jdSY0=ECF0-s|iKE3X1Pz(Dl@gJIMVdvqg z=+$Ksk%ZMnl-nDoOsMmF98_j<7``dKv7(}b1=fDXm{=%K8fpqcQpJfZjr4@g{q*n%w(j z&Luly#0Nfwr8LBWY!TTMe$&ZWvD|~q(Lck}OMJ;qBalJ)e9m?r+i@|8X~~$Pdt7Ek z5*;QVBmP7lY_)sMD)71O_%o4fSC?5>mw}B|UVtC1Wka0WJq_aF*6>DyXr^s8lFW)i zsf0O^;F|moG7wkDOapfT!UX?NCqi{sU~*0O*7RD&uUHuq1iK|pYR#$Nr85IhG{4I4 zzTpG?cXm%mNf&AX0~a_7kU^`^&My1j673eZ(s@8*R}(ZTA|!^fq{bTVaeZo>cCxsW z(3$uWmYCW$UyN|UN14x5oyS%A+Lx%q#KRE!o%<*>OJXJAS5EeslxiEC(Ds^zWipWk zmwCuVwbMN)O1njA?n#yOvRMY}x@OT83Qn8B?YeI-3Mvge>DBl7erLX>Z_@kQq4V1a zW}y?x)$cf~c>8@(d8d2ZDsFLY%e=muVoe2%m6qvR$9;8|~GEG3+l zzUq-6^1sp=hU*_=VNB7wNdf&|xSG=lIPp7i-}Um_K6U%D;7*~UBu*CJO%$UiW#C-D zL#oFX7qs^(pIl&5eCC-QQ>s&w6=*uFau4w7{N*T!`yJ#U=~=S(rx<**%dSE|gii^_ zDJP5>!Ge<4IW{L=EV+lyHxbrMrYNa*OD>e&$)8It>7rn+J1%Y|YcnD(-(v*iqB4z8 zHmu`im5D`3MXeILM+Vi-)5$J}4X5A^woP@ewc)QB-bL$6-x#WuPG>}l*7U*T6QS)B zZwu=LI&wmNy_bI_pC%eE_C=Fa`kzFA1H$0K%Aj534xLn3uE-@}o5 zrZg;UaKltkdoa|~Z8rJyU6iTo#a)OWXz?(23(UklF;Wm}L z75Qxd{S9hx&1uI-jXc+Ntn~B;9Z?{~P28kU(MMG! z`fMJ}D6nCp&Z#{4v-kJD(OYoIF8zOOePvji+qQLaTC}COR)7|l2G`OeEz*`kDDD)3 z2X`rMZ7FW0xFo^d-JJw?5+Jw+|2X%az3;x?J-_li$-k`i&Uef)#~AaD>X*@=FyFTK z7;q};4YG=!cE&E$mMpHhQQ+MV*zf=ZRiCe_`ZV+Q?g6aNjix{jkneT96t5K_Mk&K( zZ3bB9;j0F>a}HO#d(+>jfX%A~vL~Me7=TjNuhzE~mnTr7lFevfzhL^JXzsg$V)C10 ztZLGkd)KM{LNG7$iJYX;JT|Li>&Ynr;i~kPdolFf$2n(=-QZiauk*QxQr_RQmcOCX zi+$D4cT{;3MMhkKcFLp!h<~Tq4 z2NqW-8Nl1#N|Eso{7I2=>Qq4Q=%zca_NL6*2ShLndJXWgkRZ4#WYDPlU}teKY9^Ok zfO)P>hmQa>=903rou$Lk}V`BjS;FOB9WHho>&Td*J3y*u-8MMyBh>^IV>iBG9GYqVsC z6kCNfaeYM1rDW9T!Fk)mhmS;+HI-(qd9r?sXSlW(RzRl?T}wVF>-HOM9{Uko>-nJJw#Ie;e*c0ULhiJ`Zq!oIMqWR(L0e2&Qn+O< z)X3L@EwQUXe#XFMq=N>*Ki`f@ZgV%TlIUCoetY2Wv;J-NpzOO&RB~DR4n@)F6k5yT zDC(0GM4Lg#qwQxbjt=a;hsnkl5K?IJLL&EZN4OJ+mx1c1|HAoyB2RH$_}r%z>f~rt~=R2MGI)MQcgj|0Y8m=NpdIL zlruJ#MVb~klt^`j2rTvN`6DO@PcBPJq-bc#0eAMiG9}XPv55^8?`C79-;xY%0`mC7p6?$}mB$16iq>K*| z>@5M|a%{+zVe-#KQ!(!zI~ptNy9r5KwF)zV{&ivBV9I+vRStw!)0EV(@e24 zBuc@;C&ih+Q|;9HqCT%>@Zi`(y=c;6-1H}R>_M5yHV_NCz3EqDzL@0F{*nWB+h-wm z3X$`GCC@ORQXsj=myyEUvgYIkG@pLf(Jeud^gV5u6Pe}}9QzyX?|O#zCpniZ?^|mq zHdSf*rc&C40@3*=Rl_jgidbIH5Q4ik?d`)3s?%&6wvUfpSE+`(Yzz=8JZ+t|B`OW@ zPdH7DuZ1mR_U@8fF~)ko!ynPINgl?$ADWSHJiyp>))Efb3@1}~JANMPpisv+4Rk`H zQLg-a1`P*TKa-#ygF#Qce5IKB9B+LuBN8rsuX%@5w2zbj!&}b_4=KMRek+>%;BOet ziFb3utIM>(a+s;cb-4tvNK4g+f2<_qCHZL2oaM+eCq(*wctZ-ilM_TB!k-@vGQgSO z%>EO3N|T~=O6+p^;S9NM2m0jyIj`;_chQmndv;4=$SPou18V#LkDEwoUBh>ykI5MP zJ%mp6b)Lg7Jy9tk=ie{;9JI1LioWI8ad_Mx zNf@{HyUH#toUepgyB<)+48kzwm6yN*9A_A^rOyUQn z-quh@e?S=(Bbte$k*~QypUx$KJ=!cHUTvB?xm<3?8$hE-1nd?&-gYRg!1;x%Yg$&{ zl>TiTPP*-2>&481|NDKjd}ng5Xqfl4h|dWknqKN-k^Dj@R}&>`R>98p;sL2U*O0dS z2p&tZ9o(b1w&0ghKX#wU7E2~V-Pv^g!;0VpjgGQ>rN?L6yS`w9Vu;MSq;>F%?U>Ya z`^lR{|v_P%sSKd`h zq4-jX2_G${q|hC6E~G^V^(dBOmsJ_(X%StsKTIz&a3RQ1AN%lY4tQ{f@3m{{VkX-J zKeyNSuR~9)4{3fx?8x+~8C2T4)pHcIR6e?VrE_moGN=7Y$hip#X3RlqtG(L5ad|_m zclK5lI%Ja00+#cyEd5o;EbU={_f^}WA4-EZYG`LP_eC8Ucc4)T$;VolJ_RvAp2=Xx zj3HPgjlKvUn79&38*j+*i%0k&M}dRRf__%JP*f^TRiDCq6gT}`3`F{&2a`h?=|eOD z1LCXO45mZi(T>z!n(ohWI!$i>F4DczY5_ea=SwsMD_O&TmaYzet6;8?3$5C)(vZ+e zhEudphHl000+n}fXyamaF~OL-$CCz6pf7))m1L}-?Y;;b*cJKP`ITC1eN5qEq#vqR zmT9zY@U>~zS8#PPr<^|A@?cUorgAST{oX?z(=29Ae^5tA36QWlm4C4ETBZ(*0 zIJVh>B_NQ?!_>6>^Dk_l#9Y1zgzEL`k+P5tq1sBI_jHZwnpi(+Y)LGKDi&&ZrlW>A z3uZE}E7BKHC}c5Z`roYM-xsUlJ>`-Y=pPrZq5m;vfSs3j)9>gD^W4_{ct~=wY+fQA zitsa#R1jTEkWL+I}o_CQ)J)OF>*ZFEevbU zl%;*VnnIi$7#4@6uu#zk`QpD8GH<|G+^$WO8Ev(X!Oq1D20hDW!F^fW-8zHSb3SMq zJ5IS<9Fh3OX)LZ=E2n+2bq#09-B=C!;OlEt2onRD6gQkEYKc3;8I)J*=or{W=+}X; z0_NY3hk*uEsFvEOJM<3NNT?uqDK)L!tR%Zhj9puQ;*(R~d$xU;rLl-lr32>g6bI37 zKe<1KR#Z*|>FObp(kCX|#RRu#wyc`1;i^AyJ?DE{C{yfi+EDqJ3I_fcaJQNO6~Z@t zONnj0W8@xF7ow|`s|>j92yX}R!@=5*^hUc&8p325M(v{&k~HV|8Lq#G8wn5~E}1}c3tq`*=uS7ksX|v^Lc>kc=RkHDTAGdJTJ;*_&|6%dRW%x9S-;{!5kmT5 zB`HodKREuiQ~X*w(MR*n$qNl;d1J~qQri-V<8=w#dr_?&o|5>xSKrOoDx#k)Adj1p zA|Z~f*^YiXkS)cEa|!Em9KiV%bu_*0m>4Xo3$Eyb{c7Cf;=1p#0PVO}5@eegzIUs< z-A-kT*S6`#Q#wn4AL1RCCn9s=$r^6DC?Y{T7$Rl$X~ta&^8516HJzk3q8(TJ4=(cG zC8}QA|87Gm)aN1>^KW2OU)-{IxfTSw@btqMs~(`uRec4H-;^^Tl^0#L&gh0Dkx6^L z)*@zj4*oEsP@JoyMQY?(cD81;@DTvLO3Qh+)X-4aoQ7fpO%ivy*YM_TBPq!UYC*a` z!iq4+uc}ED%zO<6r2(A8Ma%=UxlN^RB$>hlILVTwT_m?koC16|-D_8XE9tNlladFc=E2s)r|#2J&q(!T^7I^p=)u??YkhzxQX=?s z%4Tq~N0#z~Yk9Cz&jGWDo3PzFx~(blHTQrfo%}R`VS3T4*wjkf*KQ+o=#|RuHOKf? zerzY1hoAJeo+p06qRR_d#>II8BZPl{{|NA^-2Ro+u&Bdp8^BbC-^!$E6I~uB_M9Y;mSFE21?GsWxj_gr79b)BQfY92rhtVowJqZPZSKv%IPdM&ztjN5 zae_ovPC>3~^5!jJA1ezB9OmWJA~U4Pfc#KchQa z`ZN4g_Y(`|yn=E;SKh)hv zX44=mR*omU_-CJ(kWSF+y5T`80jUcI)l#evs5~!=hSu2q8GCW?)B()9f|h}H_a?+5 zUlMELylN&xjmD~D!-OOL2m zJQuMNkX-I@XxUuzaOH}wm_}j%r38uE3zm{j7l?p{7N%EeH@c2M|X_4OFfY5G}($Enq#_4ZvTe%-S5 zyM=B9NuA4t6e?&P(fHG#@x~KIlp(1zc|Rj6T@;~@GvR*SKJ7Nm5LkWXxPJDj(G*G( z5RsQS30c%*3VeAJe0Nxol$N#m2u|tTs~atibf>O26a-nWooNMCA`4k!QAhl|jn`~T zZGT!ddZB+_0DM$@Lr!nc*H@A22{v+I@*<030wH<0$!Y{6Lgz4TuMOU`rA1dL1^*>n zu+qWCAkioW4k#+7tC=>a-4yuNXg)|r7aO|dk-sga1b@@L@xHdt=FFZpiC zZyS%T?*P?*bJn}r*car3<$KKxyjyRMEE(+`e{Z&bVYEm3NfgdWeI1@Iiur^v${&6s zYF#N9k}Ku4UQ$W=elR!XJww&05hTXK+0i>KFmWFk@BAGUtswS6pS07FqR*YL4Uc10 z<2N_-kws_y&p%rZ7x)hM7;YXsg4n1m&yD2Z=keqZLCT?p+|yYK7-z^#7`RwggNTSf z)t#==o+hRp({wyfV5p~l$uLj6#$VtU7xDvK$@nOl@HkfS@E~9NTg=`5ZTq_%Q=r`L zJFX6m=#nz3J*=9+T2x~+>(j)kOdT;k-I)(Alhow;FxFZcO&^p^p5WBDusZJN*m-n; zHh}bzDh_raXUo!^SZ*tgXKKiJusyw|M$PuqY_3%;I|$M@rFFu|&NFz}Ad-o?ssGdQ zDPpkh_hiMLIdRZo`11GJI~zfl^c_~B)tTlg?{N(_IV)bhsVO1*(RAa$QQ76@ox=Gf z6$|K<-sjZGt=y6`m+s2F14gIGu$)bj}te794~P_k2DoEb4It$7iQ$J=2F>E^d(gc*x0K z1-C@Zt;T{-l1)cxtC%_6 zS6$k5{*g(pMW1s-VAjkUI|Mb!q~_vUkmRwmN`?LDSl@j^Pp`Uf>igxq#{Y+n{<~v$ z7NySZ9lEtT1rmkRzQketc5(c;C#>-x&+1Xv z6HxhdTP8?H(Pi?m2cahY`lq?LRPG{1IlF2A|2}GS>_$jC>sqSo< zUuztZr%;{DVB+hLe6u}kU8>NCqT z$fvy{jb8?29i1swYHhDt=QeZrsrt+C-f|9kylB>F!um(q6eMGl^@2F)cT3%H$vU6CDLXJNkLgpFOxknHBPPin> z;9X)HNEYfH$fDlD69s6m7Fpic72cf4V{&*&dTF(9m~}FRNeqq1LOviRsO;?)i?SdE z2;n!meGSYli1BD~8CzO@`cz6JslYjJ;h;2J>ip4!NQ;LPv0w@&QPWA}DERBa=kEv^ za_v_M-Sz;2-9qV+cfX(rLqcbvT(_U@L0W1F_j3@F_lYd?90i?8mK&nOe4_bcW7A=^{xw0lox!M*6J)9HZ8^dk4Y%k9n;R$jea!??Iz&EQ(Q0vVA`Te=0-RAwyRZOL? z2g8Nr)>#A}%>udObCt%~@NO{A^FRFh@;Yl)dB})uhS^y$)()?RTbmz6yGuCAcx@W0 zmrj-ga^72*n{E`oO~2Un|7p+Xu>Qs7FuMJ;2>UnV>?-Hqd=}QP;Iw~kso5Wv*CmCS z0C=13%N7#*TZdFRh>M`gFf6_PTa#GFT|NFDr0#MfwUHLazK0lH7wMk$y-nwPIIH8X zZ%BWG16i~t%e$QzHoXG_2JpzqnarVr&kPPQx&HjU_wh=jc^<&wa#SJHLzF%k^h@erkH3xyyrVEFCx;6?c)r1>|-%eqb(X zCx2iHQh6`Py5;w7*Q14Sk*E8Gfrk48wks)JM7!Hqw7w2 z?^HjB{d))L;d5b|FM-z(@-Bq!pkVqI26m zR!voG=KS&crnA#4;)~P<^hakMxhGXjx&D=BJs@w$_o8+cV_`70MQlEqz0c!WeSRh_ zCHY(F7nI1UiC~)jk%@NUinx`_nkB}Jgx=SZJaoiobaWTO-Qs>K`a^ob`xKDp? z(+UL+&@F5Pcm`RK>+0AZT-e8p`1R=>t#URyGx%N@Jo>oJ={r1mi61ABbY7(=F9B7h zwt8>!+WP8qHeXWeKRi0tviUS6_>o);_l(nid3Am{ax)F-X3=|f zAn=%QW-v&ATCc}is{6o5`OQNppsxu|5ORh8NFn}>*&rSGS=nJnIfnxY4__9g4soH( zR3Av2no)|6Gl30mGO2YR^6`7LUFwn1;w)Qm>*4u*7G~$Kwho-RwaTk)-xLCWW*P1h z#+yv`*V%8Zq>#X0fB^oj^1oc}eaR9VK+XvKs0I;(?U`aZb>|@rFL}N(p~vpu69;xn zJI{dzj$J?bFE~sO%`o_QD?Qkw&8>ue%xlI@Z0rp-8Gc=2l(-wUBaf!Hk2>)bCG}Qm z64x`dk-*U{C|XfzG6`^rI^}njMIP4}_mzkZSn&MpY(d-s5I}8ZQ7%6|`ozTkhX%Da zd4&AQCcMMiiz!@dg;qO4auL=}yHgPCr!R~*S#y}o{KwX2(Pqa}Zt?X2x=!hGa?vHK zWW1+S81K2-mx!{(r|L?PJ~wgQdvYp|*gp1@d@M%k-`HoLsjL?|U#o_+H?UrwJiLNpjL31k;RCM`}$LnoKzu#V)VgRRg@i zR^}DPV48tf20F6<3=3o8A!dPb^=)KY0dHN`4~>5L0S%rK!{Zj7&{;b3k&v0?SV;1Y zYLH4y;iPS@WQkhrFAbNU0PGT`^=i>^;&qejHzK(X>1TM#S7V;=zfSS_=epsXw`xdEI<_ z;Lxt3jkwhmJ3oKtE+Epctr)I#dTQq#YC2My25hv0H&~TzgM|o^udWvkdPMQr>uMxt-Opz}dq+ZqT0W3zHU?(BrDP|( zN^DADH*8}<`kg*9Y?RBNyf{9rv_IEhl<#Ycb_#t2ioVNzs7``)0#JLj-S7qgHEr%2 z#0~i6jEoxu0o;uSV5QA$Q>1xcL){Z6=v3KtT{<*Yi6rQNR&Vd)M4o6uCt6g7#>BT< z9r1MTR;Kdj`k0b`Z(d0>f-Jv7v3)m~_EKx}x=&K=y*727^3ve~-`e<26_gMU4uZP185p%$;4n`oLt>5JTZ3-|eHnJ~}*u*dBjd zC>u4uTrMkUyd?AkO53BFYdg4(OX-Oe7(02`kT|4mdZe93jeGupz%0-InQ1|<6tNJU zbJJprBV492BJb(8>t~*{ahO@=U}40n#HMofv(gNJr!FR{>E~z44OB`+hGg{OWi$e3 z$$UOF=(p12_E>bX7?WMp{p|bWAp3k&=hH%S>qy#yES;Eo-ulH^dQC}Cg@8uevq9-Y z@a^?Ft@q$Tce35Ze;6?CmSKalPI;s+%TNFP>sc|j?-@k`ftcHM4VmH>Gv;b|xVK^9 zsybsC6vwUp0lTzCV~ZF3!H^&U)qTbz4@`?teg`h{nRd6uP+YsNEj9zJ*@q$K*wt!z zBr4Ay%g;hwn~I7FQMcIBhCB}rrslbAsjZ&6+se>U{b35=U>^C->TOAD1b2sv2i>tK z@2+3xX9l$VbJ_c!$u5%<(&Dcu?jY@RugQ_ zL?=26wg#MnJY@&P9v^VNMgO3OrOZZ*rk;G0sHFJ>YM%yaWgb)#Gj1^eKZ`># zOHY5p>7)5D9zQo1H_6+dSye>1rblnMW@^v{>I2W}L_P1kH7|rgrB7xSl&fZK3wROE zp~T?_d%kG!&!n9F$ieK?X%PF+GsTn|t9AM78_%#Yw*?INe#|fQ`PuDJx1jW`w7!1L zTfq2#x)T-HM|Xi~$K%ow|1KYHyqxyuVXIlfi;_3RaJON0s2F$7*(lmwB316QE{5dZ zqhh2K14;rezoJGQ0_*r?b}kTNnklJIFtS#FgQCAqo9WNEQ9roUww|OlPcMv#j#PQV zoa7}ZyYvApu^@3zWlnLVO|&q+a8iQ{Uj(X_vW&M{5e+M*&kKHK5}vJAT&?{i0Wp~I z!F=tH-=#gDB#)V$mFbw@>+OfhIlGQP5ecn zz^*BkB29H6kY%+`Z2qpln{PSV)BAWiA$VGQX1Mvp;KrrMqbh062W?wh_M?-s3rVy~ zMSX7nxa#QcAN_Eqd*soNzW3r1z~59Ce4|sw2QZ+{ZrUPSz={)qb*`D{CF2N$;5RfU zvehI4Y!%%}ew3FM@WM|nLh37&qJB~8J4ZWvKL9n~j=sC)UfK$D{t+kSp3)8jv3a7; zflVF^&4;(0a@?(SSC^=p&CG=X!MyW0*i6&UKQq~{(&!` zf-m=#Redce0R6*|_i7ILjo59Y*5YN8*(c;?;MvR!ra7| z`M{yYxCXc8hn6*mR#TPFb5f%|9Dn18jyGQDE<+Q*2>MVb#bL;Ns! zL6~6z^-6;ExxeMQk}V5hw~h$EW2iCPv@P>ttcJ;!MH3v`x}EZA<+fDRFb+muHudpP zdCY2AY@RV9Qa-MAs#7+=>%6C#>(@9yC zLA=*fg-XxNAJciRH@R~P`>yhq@S%=M4>Tk(S_nzO!FAP_`xBQjWLCp-wkRQ!=KK@= z10Rz;OEojJJMp)8Zv&}z+_9L&jOi@HshEXJj6DZIT4SANssk=>Mo9D~LYD8rS8SvC zp4OH*cjnDsQ&&C=rt7Q_3Lx>p_sI)@i$uHz*gDu*Uqn;YzjaLWP{*WJFVE8{zb>rR zoX10j4jr1DpOqBYI=g-u-) zUQ6}juTydSwwG zV9AIlXKhqu!Y>$i-}8T7Fm9o-L)p@3t_X{-`m9ZP#-Zq_zS!%n7(03IaO$TEO4mid zhOtw5g+ieH?>hAs`?6^25p{Q42cV>~Fpc_1J@p*Gz;l{!oqOl!27m5oCS00eJ&RUq z0%)J20opM#Lt&qd{QFFRT6eK^m(?!77_H$~EgE+J^AU*!K3g^cOlkOFhvLd->IYH7 z5@Qk5PWn&M0naBau8nCqR!1bJT?J5e?=ljZNNn;ONy;PX(LAH?Im)7!%6mon5H8ALFy&;%GV5UzAef6`0D38< z-|gF_d$l1iSqyo(FUU`D@_?`!^o-DOw$=DBZZsA_=qpUZ`HqSr?Sqs5B>7sNziA~HcypFu3nZ2o6L z|6=f1(jvIXn3@@Uw6r#ohU3$a>{S>nQ8Bm?eaKGs zN2bMz;<&Hr5@o^(7Zce`w{XXHI-EJD0)JMKCR8O8i|te|q}N7Q-QQ$UybI7X(%?cx z5AZi(oa&u)2s-j%&3o8+e;3nhVmqN-Q4b!?v%Gz~hgTIY{P{E{cUrdY6#kmBr13V< zbJ6VsCNd1)vq}DOcQBXE3-r4g5k@$1x*G+^j;=5JjB|22Y2hG@xad2b(~et7^|0a( zF=gu6&9Kpdxz0^Q?hd(MwxQSwPbQiV?e4$$ZQp!OQ9#D%sn;6v2@zs~(a9cz=1k`- z>nBwC@Z~#q_d(a4Z>7Jva52nagAhRsIy8L~hJ072L0eU^a{9((yLjGw!A_8Se@nAw zE84aV3yveX^p)6U{ADr|3DXw6#4Z|tCq(*u>2SQ~yJr2g-(wcbd189&=rzpU-0TXEW6-v;|QV zOx&g{Jiw^LUq1GE=Gz`3Ay}M4Sd~nDE6bV~jmPpYBDtlAr}kT;V4f=!*3vXwP#k8! z40%d-hbFO)3Fi=q6^f}35l+XUL06yI3mS+9L27rm8O}^IT&f?t&A>Ld!+g9E_+wI=lKoQS`UNmX z0~o9I#ex2ufr;YRg|V`3&>mZ`CCbrYf656^%~SL-FJS4YX+15}o3zEW$=ugO+(dlx zwTnt{nutL086I9`xBEbJ&hb-tR3cN(SrkH_xAyAA$kwkGQ8BRr_YCr$xBUux2!4Md zf&Adx_?^i+o?Y;Eqh@qZPQquS?Gh^~aSvn~P03hZX8#)0xU={E596rmjyA_P-^SZ% zSR{F2@T|?3wcFw*=*{9qhe6%k?V3TIL<33c-!Wf*i%tIPW&jQEqPory77c$F5l?yl zel>>S1+P7fCHF=kDv6uD+?L<6Ow|Bjt*h#TmT?2Vx#zP*jv%OW^c-4t>`ZwS-FU)a z;d^~R;PX0`F)z^Zs%?x~FD^eROs)^h#g^P}GBL3XB12+bzeU-6@I7?QSUd1J)>eR( z6?y6_sGbq*&no@6_rCC>jkZDgwwf026IX+smRfZS{jOi*wTt))r10(6qGNfa$U3p( z;&Q5I646~&8(*LkDrVPL#ww{4U-Q$=Xuqk~)=clBvVS95=F63&>G6iPATpn zsf~>|$(coyw#rU(Y9H7U`z$}Uvpz4c8)DqC*Ldn*d!T<+Whcg3a6J(gA|NJvI;@%D z%~o3{B2UFT%Ea~9qiw+XsA)AY&r;r17V8u$EbUoz+G&C|M}0;^)Khw4a(1kz%kY5$ zQO`t&^@I5FyEv$ukotq%@6<8}hksV=4iW= z_ZNpO(BI(}ikeYa zg!_dhmrjCoyEnpBo0=XHL!aX6Psc9SnvNR@Bmo24D7M)bUnhMhiouAltbJI3K78g( zNY~ZDrl7E0UO1f#HQ=}Z0P^*i@=9Dresm9afb+Gk~M z7+Mr#of1NU9~S*w6T~O^Egb7%)H4qF6ryt`X`&hltrMv$*$q`-_K4Tj!iLs7xo0w0 zKtdyY*@|KJC97f#rdF-hCB9SDH4icZL9^%nQ{C$f{I+^KyNN;5wkM<^u31gh zcj`Z#Xz__fbfp!Mn{){;t;DGZk2I$Hlnyf|(P<+skvLergD&IsL3*UBeB{A>kIx4= zGe88rZKBi+Y~&Os_W2&D#kO{gW>&XW(J0Z*DmIMU=rTAXOR#vHfS-}P8fEsWcDukm zW*NKM$hGU_rhLD1up#0&fP?>($>-7)%?7cBZv~&;6k1SPmX_J-Ot=zxU(xo5FozOX zJwz!W*UKRMQw$2g82b7me({ylCy4!lQo|gZg*= zAsGz~*@1Afvt`KL%x#dfODyhW*^?35a~BW3Tw)BH5xa_#wq-oP9{0a^z3K<1g=$IE zp7#NbUum|-y_fwauEnr&!0sL1_T`)Ny!g=S%0XW3(!*$quQiOZIF`29hGUh!iTSJs znXd@4LqLX8M{e6cYkMYI6>Lh~NfHO{a!a?S>E}c?)IX2tDE1B4W_3WvlRN-88@xZ}_zWC+5T=?^;U%;}3gXBl4` zE+;b*&vA51!FC0-548rIbagQ*57FtxbfgkCez#HRv^1liz$=Cv`foHCmr(3 zDDOG4Q|mqS7NYHm6r6nvUaxgd9n(bw8@pQY9@4$E{_B?&u46UCnfK1m;IeMFV$ z2{Nwtih~&p>qD$Pm5_!7nWN6&2m*2aZjVIm)3~(ZKu%IP)*Ik+J=AWc*O9AJ?CG5( zQDZ(k$B5V9@J>nF24d~BArXTfim2X1tF4DWgF8UvF?6B*dj)3ubE{*1hVvL7fBK4x zyNprqt=9F2wg1VUaaRbIA1BgR`ifk$dHn6qK)l@FM_miANxfSZ4ch_Fa0SU3lR8a; zTZq0PN5#%}+Cjw^8DxHHrb8}4y#*y?>1X@|qoT^H#plwuDMM&eAhiY-+40t3`=U|Y z69&=mUGqm?0B(DNmy8TS?WSCDA#j|?)6Fq=j)m6i&36R;Ph?cQN&8I{ho*KGgLAVK zF_RQO9$OS6su{!sf$Uxo@uCxn=PM67WM{X24u^>?Pb=uKIt}$9v~pi^M^`Pjc_`uO zqAgS*#jy*-xbP#T7@KRA`6^)QH6uGIg-DwNZPF{it|-lAtZNWr&i#R^N<|K}4^pCL zDMl%m|o1p#}R?QkOVVKy>}PR4K#6=CUup3)pAF~zj{ z6_)-m+&Ce$?so9s5G zABVBEX(Xg3wFeqFO$XNM|G48KGl1=n{2)>;C9~UZHw+|Be8qhAXu!X$Hlm-Pz3k|u z+u&0EoHJBa3&l15$J~!hO54G_izHCcRyKh6D%=_T%X?mTTLOBtrmWYCEaKS|9#D-) zczy4@b^XA+$Q~`vY;p~2|G=Gi-MqqK!7#K+GaMJ#Q0S{t8|E%vc{C@W$;fHH+Viv} z!m^0pB#D!@AnlT0dGa2LLs_UxfJ;5bx`*ylJ)b>QlMO<PC zZC7V^1P*r4X-(PeroirSZqbF1)plWT1VUsOsF1UVcvNe>{94%p_7qb;KEC@Mdj>~s zQ5(AGJI%VlHIuP@W}U^7+?I(KD~r6;=* z>Ut?QRQVC8NbQUQXTU6nv;$vt#|w%k=fp3c^qk(7pV(-ED%jYBK|8gmvTfT*^jQRr;F)!4lL5ho5JIm~q%uf5LH+_>HsH$kbH4 zaw^ZIwIywT_h3_=nxm%F?;a%(`>43Nq2m!A{RK4_jmXPU1(>wo{`{p zq8r<;pOK_*jmBc>(?l&Lr7FHvY&3z*{K#k=xr#;DN9dg){{Dc4S>L0n=B(g!B)E9J$N@sHFa z9$K#!#`4bSyS~ZF!F#8LRmsyA8rDVqtMO&<;}?^&@=YG9g*~{xVf_!<9cJkqyq6=C zgl|)@e9#O}1HD&Q-34;V&uf{Y>P6MNXJbUJ#%G6XxiVkL$4E#K{1C~$u7DP?rN1Oe z!?oI-JKnH~k?X<~R(g{>U(<*v{chbfy7*j3NJLcz7~r|~br;PXZ+9)cSHBPFc4d^T zHZr84!4LNT-ygsrf6;tzjjxO&e|^71($*5uU0<2w8Dlk_F}av=M9R0?SZZk<>ly|M z1Y%V-gSb=r8TDrdD_)S zdb6Kuo<954zcK@U!Hj)r&!kmE)O{oqqBdJ-apj^nzVL>4|IZPVBI4{M{o6+sJ!@L| zIE(gV{VcJXBUw<4nQ5b*!VyzxCO}AR#VJjt2{d)SW`Uq7#)~#$QQXQzY22&fk`$=j z&$1}4`gD?SUxGSM@V#5+^N?~4Wl&YrMSc~BV_`g$dLZ3>tzThJT%dz0e?rp@yRIX% zbSRyD;28g4(=~Dc%L`}}T1Ls>K_}@091k0Fu>eP|z*0GAzQK!pZ;29C8KsYj^>U=?>Ujc(}yaBYIoG3>&x@D zR+DevN-35Qn`1Xj$4q$`+r@;%iPe7lH4-G-qY>*p8Dw;3K;S!emifZ3KktgRT6IOk zdu7@gqn~n67it+$n5V=|R$rJ}~m&EGf!O^16I<~>~s6f`fUcz9Ll|973l*r@sG+MmL4?_Ji zJd+M*Xr69yAIvOjZ-mED{{KGSMoR$0rBgT@^xg5(Kk9u}haVY;%)6|LzP@>Sbg;|L zlsWq;yvxzkA`cV!#p9ce^why8h}?q9oa2`h`ew?WDp*s?6oZ9{4niYfY_&;B)+{EZ zDrfq~sl;iNi&N4|!pXJZnCm`$jS7VlkL=nCUbmvVm7k!4*izoh6?IXXXZ4iGF%2$Q zdw6&038&Dhp#>A%iPU&I;y3(!j{R&<%$id0QxFWouIla#<~Cefm6!aPGCnqQypJ`C zoIR-ae2RqyCW!58SYE7(W;M5)0xY!anM~Hzd#FkhtXQSvo~7=iWK4~0-O~bV;I%QZ zBSV~9F-zswxWY%%5_B<4YJA*_40~SpQ$I>ViFKo^CuhDCnLt?KsYnQ3+o9s>xflYH zAb<~Jq@96XMwd0>*PyomXeO4xG_;6l)}95~j_eL$Aq1gO~1v zitDO%Iwx$h1POXd)TX_Xc@m!w37F}r6T1de35QDa@JP%S`AI&}zKA?szfG2#8NQx= z=T8TAPX}xAIBKiC>-7XFo~>serx#iTtA=0Y$%<0_5fp$8Wd7j2(2OGJPGk1CU5{=; zV)TphnEy}tzI)u=Y-kb#XAr@tUV*<}=@Mha8+(%rlgOQFkIVQdOO1M$fay?kx#{q^ zk8@Vj&&^FlbXwfpFl5?1$|=Z@_j;9u-L@=QC4 zr2Q&e!dB5D(ZdV)>V2XeS-S0R3;q19aOb9{7&voirsAQeoyIQ46ITZ=L*8HW=DT<7 zL%NlM#}G^^K^Cyt;%)70RrS@dD}3i-$BK_j7Cd`AXAyfO*H=Wd1)*|P z%}-nIy<0__SL8Qct*>G>Go+(Yw{3u(bZ!IY6pkt+_Pw}DgK#eEUyqg_{-ApoG&YkQ zHy2vK)n=~ZG&pQ|wE&ZHkT{pSwZ0*RXeA5%b-4d{jL~f^3=>T}6>4LDmHnkrlcn7= zy@kB%xxCM`^i5vQ5c-t5M`e1c^}<1oqIxM^WiTTf8gaVX6l+-uQI%s1@O$(hMoQ( zRH}0EIJa538hxr&+aSB>OfV%;gTFoRv@uEoIjVt=cY}F#R$aYM4|N~lSsT!xPu zN+EzxSw!NEN~a&$p`;1C;+wWbF?}?$cm?UOO^o0bV1d1*eMop&!&`vxIq~M>NC-*R zbA!X#4>gEPB)-%UMqa+o%;1=JtB-8kV~qL;c+OIa&rZm^DxS|L?mE53aHVt6wRo|H zT;MLvw&(c{4evBAl2R&?o5>h^0`Wk`+*$z$^aYt;W#GT$(61}x)7(5_N=`*LVo4hv z8CXrPwB|8=61F`VZaCrY7QUJFb#dRilWJkc3C90_l=ff8tIv)q^~!$2YY*#0dB?RB!z`3-^fInj$LplLhFVqcrNtzNA>#PQi>HmynulXO z7Jw_)%bWXRsir#aMe-AaSce9)E%+v`Tl_+mTPvt`^sA)OE^FtY+rZi_xctGlr1^7dmww(eFc^ zfuOwKI)de;kJ>Vqao|>(xGkL2)n*FAN3mLqAK&VchZ_$l3SZK!z`+*E3^OJ{I`$He zkjUS<*8ueTci(3WjtedL)EPRMV37F3s&+H1g+sEh%kv2KuhJgEA(f>6kFDCs@fxn9V?U=v8rlQTkTP`#i+e!>@BfZY=R(&`RaRJ&+~kL z*VVt1zjEhu&VBB4pL3L@De|Dt^YldI_Zkx4FnGyzH9_4jS7;~h`l5|q2d_n_ROo76 zQQv`hounDgi36PKa~X{PLbj2yzAz7ia@GBRp6hk=UZ!$&5N^~+s@WY|<%)-VL7F?* z)|LBilbGF^doZxdlh)dA?$94Bgu{_XpCCIc)s9Iv!fsAWoYkNfN{)7~29s8Fw+Wx-A2Z%pBc8w~*C z3dQK>D_h-ii>Gn49`J&C;lfFTlyR+W$FOT%(6h~Cs*FO5SGtz4Mp@$-l>zleypCk9@dmX}SF}ujYixF`B-j}V4$ACov!#Wrb zu0+qb5Rk)_;;Cn!%$Zn9vl=Mc`6m8i)m7!H3wlO$wXxE0Q;GJksrNHgg6f!r2(07N zf4TP|@r>uGqYIcgJQR|i&K|)LPFL01%ft`dkf|K- zu0zCDmC{CNH#c*plqyh~49w)tZjx7b6(>#9Qte_V7@=Q_s=VsJxeO}H2=`Z3?Y5<& zaZa{aA(N1MQsbWp4%8F00G@>lojbVC&{Mi3hx^-Nhs#UsZpIwV{92r7dq8uSD&U~< zF27dCwumX*gipKkOiPbE{`{!2$!Tn8_8WSFfxNEUFd!R5oRkD2Ogxx|Y)3MB6CNgd z^p6x^LKq544S$B`r;^l->soaGK44%iLKZ)DD?>P|lpe3L+T(O!a_)*AOqbaWD9(3|qJ)?$&A-1iPS)BAaj{J)m%%-g|@ zvF`DT&bwscD3qkfO#R-qSG=E2A13RoKVDL3VMw6W4F$i5S})wK{mEoUVI`h;nw=L& zoU-*JsfuC#q)#$QMpr25Z+SJV^E$6eSi`!;`2LBsVmFA_OOEFJSi?o9ZZ)Q*%oSwT zOTP>w%W_{JF^Q=V+^#M_TiH{U)dzM1pS}Hv+o7GwrTdsP37Sco z)Vw(sV7KqFzDF`Uh2|0y7_MQT!&=vG5;j5OxaKU9J5vfgr_GG3GD}@NIk(8EFg)-l#xX1~X zN;6dpbhg>h&)M7%d7KI&W;H;{;App+hR+s$LJ=8i5e9N*&i%a({RLy;v1HgiB{dHu z0(<6=kEILbN2a2{=M7|Dd#kpwCbjTn{HE1un&HpL)1xsR8LUJ|iKhCY?RElI?7{Sw zb%^z6geiQ&9tZj6{&f4d7&wd|KRfQj)+FB(d!!ZhyyKilYuA>GLJ=4SbxV8m{TGI6 zUA>EBtqtuc?0GjRa~kZci0oe~I&Ug!D!L45+DxweEH?jo7`!R?2$UCFbD*RiZT3>g zg~@$evl4*Q=CD{J*IdMNP{o5BLM-Qtnq)jwcmAF-8Ken|t9BS#Zsh#@pOEWGwP%bD zktp<>OKOW*G+3Sz9awd;r=QlP?JZrP?Is^0tRZtD0PkoXn^z`J(B^bMPkVoQxSOh= zXTqVjH#M^3YDzp?6@B_eoS&P*&#sQ9m-Ylr_NI5!Q`;reP`)FCB&9>a@k8L^XouwuuY%S`0rzZ|Ne}Njh7Hs)x z!g*;409=XZ4Ay4eT_c#A3o_wfN*AOvH4RASus)?IKsFcCepnYo0lTw>adI999$~*yUl%uWCmlaV{^dl- zB;UGuZ#PZa#`!7d5)1vLKHTRBfzU~PLt1pj;&wkOYGqKfOfcgPcMY>F_hh~Jg=iC{ zw^+R}7pG^KhkC8^*p0?rG`BKi7iUwjV7UES22nyMQ)-Qi1WNO*(~xjJAi#qL(64@3 zT)QMyvzPZiW`Z4#7D=fCaySo0>XXqY#*rB?(jDn*iZ6_>WV+CqUe5hodeP5s-_RZ% zjvcSF91k2H7pDpXo?TO2Xv6-#bJ>8lzJH7VM*G4&c$suGB&?V8<5r?xoqE>S;!zPh z4Z#MtcjKqUvEYj0vCHY4FD;~s^#<$$ohiKR#Tss_l=)ZJ!=)yy4Q7& zE?|&a24sd0OP%%VjB{R$XB5f?DSdh|l4vH0jVpwt(wxq-1gvZFQ+^Rs>0U^hJs6v? zRj!rN(!$V*jRR*DBh$U*txEOr5`oazbSF-mn;X|B?uNd2*wvmBM45A3)x|eO z!-Nqzmb(Oewtpc(#tXydMx@q^Xrx8{znB|B2qlgVSFCJrO1^tyLsOoSEN*-h@N9m4 zv@CGWrnuk2ly1zUd`94gPxsO1o#Dl4E`*cEVh3u!MiQyDETS%)&mkvaF!mUJnBH6% zoqS2$6cw7?jBYL>lMx-<-@UQ*$_dE_%GsUTi?reNG-&zsZdK~R$(F_Vgd^j!ronR5 zi_0q0vDb`vnueYC)N6`Ymyt&Wmhup_ny0_ zN7xQ18!=es!HJ*Sr8`)Oo$5?;4TB+)WugRkJIX{?+w&AKp}F21To;121#g<{yNSiJ zw+DUJtO)QvX;R>qQjOLPl z5eb67qAZKE>kslN%iu#UK(dbVfgMJmhU~VwN0jHFYz6+eU%TeakyQCE1%EOXO!U#Jx&&upu zrv=^G;Yq#+7yTjo&`avFL=U$&GO!dw)3O7r%X(EfV-=S8_ggwj*&QE*6B1`Tof>P{ zG^|B8{FT>~e=8v5l}u%}qw&t_xzO-BC&!TU+u6zmR6IvT7N>UzR?zy`b#1nsu=UnQ zW^fg4E#Lx+T2((~<}91L>VHIl>~iuTtb7|6N0NuHU%6A5$!x6C8u8lbnNYJJUidMf z@zNDebOq~$(0;c23xvc3_H2Z!=|?13N9EFgKi`5k!yDK3V=6<_j#x_VDk5w$%xr9! zk6jB8dOdT^#p33Z+lCUA_Lov6!(O=2K?cEVJ;_MdO@ycK+C+Mn;r_~D(cmv(B1)kl z1q2ne>hkkXqWpGk9=CG(`Ppl<3ZQq2vPjRfyB>R(ZmR?op^7Hb<4Dd`J|x^45_6M4 zFX{Jw$q~GYC-Z9j?9``evGUscrn?QEtX-#XoXQh4I}C;S{ZQ`8b-QMhsm03p76bnc zc99$7*58YTf;)s#hSD^jsTvgQd`oA5KeuSw>FkiD>z?8sNRgn%lcm?Ku$)c7fzByC>`Gco{HqR=?36*H*Cn3OHpQG|?V?WHkE zDQWK++G2Ov;T=28kAw?Lt^CN7a#k!h($g+po^bAJHEk%qzAXR_#S)6mi{53d>U5sP z-(go7?|DJgy@lJIp^$6-Q4Y;M^w=x2byC!!Z`kL$)!G@4760`MaFUHWIo!3e-WY3r z=if8WFYoP0IXT$m5V%BbC%H<+OpJH*z5(xb^4~l377qa zUOX|MGa!^d!Zd;#Fs+xMrhm3974=pFudzSX>}7DCSY@q5PazdS-Nf^b)r_IroyRsI z2b!@pfU4Z=dI}415d%ZU=kTUAwe-X~vIK*AlQD?Fj-btm1!wBPy1u1Px-%3xzSSeJ zdPfVqywhnM(ZrINnDye`92|2*<~8Hp^!bIHs||IoS^JxPy7F%xwZq2K;TKCtF8-dg zL<9v$Q3R25wy)QejIX&;);)2jd7iqVn)97{0?*@O42PESOYJ2OlU|nkR_x-h=(H-a zt5DHbm8NVL3ip$C(WLc{#6!{6pQ79H4kckSQ}b7$C(UCA&OcpeY66RQ-wL+7U-Br_ z@Y3)-_~Ej65M%%ZgU9$3U@imIw8SViL&yPPphRT1r^ z+nvi@Ez31YM9frt${xLa!n662y?v?}-jMQhrzXB^t96M556NbC4~+kekn$?Hms46; znB=Tc?n&X4*)vrN&8*ndt3v6o#vA>e+6R=g9Wj*2vRW*GESL`Z3}Qr|mwYYDVFDXMFY!o?OLFR-<#Gl_E-8 z-=CvF;&+qsSzf$2@m*Ty3u?{969>QtFP6aPi{5HXcKZZbdL3#R!fm zh;T>3v*yZKq;UM(e#4Z~fVq=E+vNM5Qbiy{hZa#W?y1>({jg0z&lo+HdTve6Np$2` zk2h~sc3-}wLX9lOs{XLO{8os0Oj~_$ACK5ux937crO!yH#5OOUQJ~!BI1>R2Xun>@+Mg+#v*)a zFZt6r+}^QTtW9~6Oj9jjwQx^Ib2YAN9tsDr9#+=Iq(=10_Rm=QCyf-$X^UNPy!=wd zasK(?kGs5!NbSx%{m$x?It7gWU0#rRn{jHaWZr(?p}Wx~Vgkleic5NCW0qN7==Ae) zC8+=P5~{s9dbfI}j-S!+%#*+Hm<$n#lo#8l8=tZ!Mo<*Ur6BLSr@oLpVAG46Yjo*4 zeF@+`@FEp0#upyy$ne7V`_9&-sX;4Mb@}f0T6+=N<-PLyBi+RO!CcKR?k7eQdjb

UJQGCxjB+rg`{l!Th;vcs9lx*Fev!4f3nrTaKoMxFuI*O?q2sY!X4*; zWIr@%`{E{({|fXhc~psR^pW(7qT&GxXW62I(GdbS%~RP=83yWd zep+5?wnT*%T&ONP%S}AithZ*FQQ5KT`%95LkuFwxYc~RXnyz{M5nS?mX2^S>df7+r ziUWyLU!X|Dn87=og@5UHg%y>2GC$1UZkA-jSLeLM9>pBeK?zF z_{o>?55fx-#y)LRRdjHA^y_(Gw0oV9&A#`vtg9{P*z2|ENTZ#1V&szVX5I5$N5xb0 zyxF>+(DAw_=2)G)B_nyoXM#j(M%N!2ZcR>4QMz-0twRR*Q;jXl=n+{{ph%p1%ccY7 zifdz~))WP=ly$bv^nN*J7Sy8NDFtYy2nEW?6~c(a1tFWS7%A5M9$1f(VfnP?4R(L@ z5#0}u92XGHtg#~vI;wx>?74FJAze|Zl^Fr_F8L}&8T#UauUdE^;+1wuRal!PS5~>jmgQgcHhp~ z6*;+(Wp;bK_fSNJ`&WN+32KGfPtJ#f49b$lG>(Hako~((ckd9Q-fvV=PgY(0 zNlc*97!?=oTcxpg4NvI#45 zwd5%09dcx-zbf&M^7ro>yk^3C)jUIbY7x`*<`Vz%;#Ye#ubPdEM(XvDo+G8GzHb#G zm5B`x(8_C5>76+O87Ti7v0~-DwxYwNo$>v)ySlxYDsS$zeEt#{&x0I&Up9(Mjh=@S zW4o%Fo&CWiH%qGyH=Lar#utFJftG_y0fx6i9M{xa7kESoj_TPFC)&*#y9iufK<5Niq@P9aFWAWuN4aRu zfS6Cu`RkpUh2K%nEWQ^Lk3GHKFV#EMv!X@}wiMd-iAfu?>!%*@{4nMz{3(n=3P}~4 zlPCWqfoE*1bk(2hplDx}PA?{n!N%l%(Y&2+Smycma&zulL4;r<1Bj=fZ7bf*Q2dIm zOdFvKR4z6DY1r!zh9j)YCAAR*GCsdOc{D+x1#18`Y%##nKcWg1B!+U+qzwPcAHUyH zrS~ON^(CM-oJJM(<8`7zC?G1 zd1q;U#ca{bR~Yqn?TUv64RQMk{p<|4s{y`_OmoL@!lSQtM7egS7v$*vV@ChH#p?zP zG4;fi_X<#`;m62-dA9yB@%ipN^gzW{+*`k9&gINo|B%IXe31myU5#ZCsGEy}0D5g~ zkg|dp8}}>wt6uOqtk!bd9hKv1-+bL+ZRS9vJ&jg9<^1)|1b3>#^m96CQGV&9Uq#`P z^l6QKML{sZ2Zo+f^Jf|>SURfBR@7;+v6X6`lYo$?o;vx^utSp>K*j-K6n$+)P7Qq= zQF))WP99_j5i{YXRa~jKV{@tc*2w?MaA}6k7v{BUZ&X={VsPh4nhc&@HQ;+8 zbC6*ivh4c7+hWvEoO^s}AyNJenOI^qt|noy*3$`{((Ks>Lkk|02B#{DF*G(g)T6G> zC09ow{j;bE$ulB%I=7Ya+Ny-Lw#OS6`o@D#BS9NJELl<=BxMzbT2M6+5HHsK-Hq zvQ-n2%R*BM!J6~8U5|s|6sg72YYRbJ#`eQoSd2CE?Z|kNeXi~!vuZIDw@Nz zzfU7MnZSRu24fR2@5oc^zBRVPthrSKW^R$Kk6<}1aLeXkoqiZqy{^GXH8#@t{JCQY ze8+eraMZiFzwCixE74n%O=~`$$|VIaXie>S{i%Ik=23mE*4J4BoW^hxMR3IFjw$ChBdu{$5+wDpxEDdZ^U*&wH}+GI-YtcUOeJ1kibONkakO? z=qW(lsfZ*_Zjz5p&v$RfrZf#>2&{fFK=gBDGJvPdF)e4o=_i z{)^-vj&#ZnYY_gdFv;ZClF>OkHR}oMsi@0FUDxq(P0i2J3&$|L(mn=mut#}W- zhBEM@<*6=Gzo6a)H1>mJ=8yQlh1_{fEPkfp8SFx8CDS$YZzcK3i~)M z_f_G4LUDc1pC*izt@0I0T-nyL+_yoX(smG0A&8lz^6uhdy)gu|plood;|AcaH=uRT z>!T`goB_}Z`;PoJ*>e#e1EBF;vgK)8bdu<9<)nS`+ljYKZG?Gk+MO{|Nw{A9OV1BB z7j7I0iOc!Qq|8oscw?0btL+k{vfBwqkQUOHu$@fQj@E52f#`xKf+E(uD&6ak?e42+ zbl8+?RM#y`O#|1K5x7~!492s#f{-@YmXzuM!)G{ccoJlLk~S;Q3fJmy@PDzg^xkQV&kiP}Kx`%=Oq{INEQ%aGj!b zB)&Y2wovbqBbh>{HPQYV=KRGMCIibF6)q|`MEnf>>GX|6I5%`S?Pmk7l~Uok++Y*< zpb%(tJ5^q&$JoJt{AT{okEuLnl@daN@G8#}Q7%<4)62)`r=YL@f%R`4I`{IAx{$OI zo9gzT`iDuX!|exlzp)Jv~9%)#yy*VjL$0XX&j-{c@OF=eKN|hiHYbg zrTHoG`3(;t_*&8A2-qGACxM)H?kD@v&+>Mu%@GTF>rH3(Nx9g1*+!Xd1d_>ONr!Av zc7888`0I3~fkj%s*A}J}n#R|R!hYm|cuHhr3qFKu1>L<+Scy`VxxS#F;9@`)4td>t z7{N(kC?Q_=Qcm)*vwBY37{X)rSSpgf9wDpwFWiV=fC@Ft)B)BuT*XFy!RlAw8hc6vrFZ--%qI| zwU58?q*Q`x`1aeZTA{)T)!Ek139=$L!R1MI;pzY)&QNk0+ft8Yw&&ZzZ-;9rdw(|P zI3S-`uc>MCz7|-=0J>f@-&xL%^KjHMKxDGseR*yfo8*=oKKi}TMQ7mV^OCLSUdL7v z5PHX)-qWE#Xwi1tN%w5 zoGK4+Wq*Bqh{t?kwHm&CPG>i2Dm<1blm>YWZ}fV-Q<-|T4uvDVBQ&3FU!0%)aQG7L zLgtvr91`3eby)jyrAAhCs-~`3w+T_K4}9~ZpJElY%UQpKfWvB(o5PzT~mQr>f-ZB*c(z3s_l#JCYL=(Qts zd05W-es$9_$U>H6b7!?=DC~+bfQ-qIa#up z)hVX9n%)Md=%tJ}nQ}H(*h&yO9hkszP+}h%h+|S^ZW8iy5#zNq1FqH837Yt^t&`5y z53+|3yK6oh9o^T9K>J>IKh#4a+hB6fqK%xV`Pn<#}jvFX{w>ErDA%! zC2s}a^u!d8f1Gg@??l;3?(N#og$rF{=~J=#F3P!?#^}OL9=B0xlSO8j@y4B-0qW6` zVPV5}Tv1$h6ZlNaEAk0fqo_A`>vEw0?Ti_zR>E_<_yQiFZ-y@$X)-;-$+5n@H)j#ALeN2V&&a0n zGY1{CD~_OJL7R{q5a2^gS0DoDtD&?b75h0A)idkn`QbKOqpcv*QIU!@YX8Y+o15Bl z+!Xy643r&KGEarIPn-(ecH|x%L9TLw|-nV*W~Rmbpu;9rjuV815Lp8~i^``+t#A?)_uUv;v&|IQa+Ny-mLBIS3Q!)zu(vCgK_qOt z;P_)qI)tl?qKLD;xJs<~NW+!-<}}OU!`z1b`%=zp;J4QYdT-XeLTmAE=!2fNsh(v3 zX*QmVj0mkPwXwbsvpCRpqYEOxedz4Qq-654Dq}zEHJm!BJ=kh8upPM-hooVB`CSc5 z2VBhm^&#R2Cu7ETy82PYu=2UvO8v}F~xd@ z-q*10=#AmLI1!zDS_)l(6?ew^1eq7|n}3aO86XJjY%vGCNUmRHfS{gp3rn{~)Z-1U zLxi94x_~%VS5Ka*{L90nFo{)gTa z4EQvzVj8A4yzwI$t!6v>2^Pql=^dtRsi1D(M>0fIH;=>u`ITl z@Q3f`*K45@2xe;oZ2QCV;^M5&)y|w2JgJo4z<8;(BWCu7(gZmJqaixgR$^qs`Mpf3 zp1a>1m!nJQGw|S#9=Y-pPCpefC2{v!IBdC1z79PR?eV2HKCHhxh~jl74T$Uy=xSlI zWuB$y5UoijQ?ia4&>rw1G{a~NPk;&A8XL`+!2QoUjc5WY2)^kW6Ef9g6WeuUlj3SM z-CZLiW`hax*3vbZ#fp_-xP$B8RAiE+*WHBEHeX`dG{dxEaoH@(<1uH!^e%oYWb5+o z3zj{<52*3Ts?;l=buahT2`6ETi-(K)Z)+1NHWUhDiq47ycqmb+FbBk0r5}h(tLtvf z86O;D;k|SG?mn>$!1bFZ8}uzDtT_5XSD4++)%3K^&8fL7NiS^mL1Yg1@$J7_+pmM> z%pVZ#`FQ_Lf7eB!2Gz-X37s?B8-uHm%5o3&Y1+A&396i|+oql!1^nm0Y_3S`l#Ih~m9A(J!7t)?vl zIk*P>$?@V()mskxT1!1G65_w4@=OI;spBFzzUzxKXw(4}=7|J~pAp_KIO=NyV5fx+ z8<)(XM3k+zO^zWI)=Uw48U{R}=h)U*Ki>3GNgdV-I3kHmDsvl_TFfq`kX#C4Ap8*6 z#FC(05#LifJq`E5y6ff;b5JLz7s{TSmp`ua{9F)JNH895D~?}hgXb9UwK#EK>wH)g z5+z9F+JK&io|}_`+K@mGK!^(8nEM|4Is*myacyQuLldbGhdJkz`{fGUgR1ea1m*NU3r&cwY~H6x?+-f9(0j(RsMWiu^PeJu#{v)g0C!_ z1&!f(eUVOiT`DodFw;j}~)lbsg#ADz8eI9Iq{uCl0nB|#;H>WAVBCy|a8 zZi-ShiwI0ev>)K#tg#jI++=zcz*%-HoO$)DYLCnFZgNHx5&NC)+b(7>Z*eX?YMsO1EQ}(J zz&^=T$$tmUB|3w{#+pzV2;ZPKty>~5q>Dp})ee+tRDOC!Z#H2%3G3Myso)|Rut-rO z=e$rT=FvWhOu`Ne+!&G+3Wq#V^*E;*0(qzDxTOr0lGZcVD`|7S)+CjE5m&)DW@ zKG8jk*pN6Hg=6%Z)OYn-R(4(p`rngRY}da2`z|q~>4_9+7DZ3?6~$L=_MAODf0|(a&PYXTt|Y28pD`ht z+Smv)VUa3A2_qxJR&X()s_zQJ-if}Ou%L>Hj1s@1XZmnLoieYh1Rc16D_B7+Qg+j8 zap{}t_%u=UqX<}mOyi1$H(elTC>Z?RndfA#GBrBp<1I#dl@N>2#rs4_rn1^K-{VUS z8TE5>oP2$Wi)+;H8;#$0I+^V$Q=f@jJNKg86ZoD~M@Ky2 z6AES>IQ7`?LFV95_GyI4?@aj`ikyY^?lnQ_xa+A{ zcVS!KLVzGY#)8ijr2-hF3-k`htof@)rR&vTZ6i@jf6MKGNK+(H_Sa6qw6E;}l@G^D z$b47s{fbt!6Lbe;b4<1@OiO+k2ItJ()Rf}^KV@MFd+r*V=~_j5Rc+qHhN&n>fCe)sxi@l)V+FhUxk;ai-$|t0ABl~ zYiGwa+PiK?5wdozFwZ@U_vlWsmNhM9DKc-B$IwqDt zx6*H<*iJkcbN~ zu&m$dHT24h^ko(aS!~pKFCHAfckQz|U$vD|@~Ed8a`y_SF6G)1XCADIHH^O4KEWNG zilOW*9MB1*WviN#WvS~oeItFHpoDj? zlSm?xKtIF5_?+fh-FF&V#j9VyOIH{Q3l9kFCQkq!(&c zcyyll6s27<8#5}HU33riLoJOo4m)u@(EQ35?)9f35)IvN#_vudb3XkxB=lm?@o13H z_Gz%0;h1yDe3+aCM^6@hH}oq!bJgr>jboViwB^tt^=;Am){}B7Ku60LZv=@Xt!wn1 z7lzHeUT+<$LQ{Hcr2QO!XIqpI4r|`9CmnbmIk7OrgDc5^Ox2#=*XVor-=mA!k!c$m?Z_1l@=F7xOT& zr1W5U)7i81VWPXxFBMpe!AhvhmOVX7GM6yZ@I-*S|C6rQ0kqEpnDaSVW^tbj>mAe8 zE*XwF#U+HMA}o<1VaZgUPTm9flAn5fEpeZfJwNVu8|0zaQa_DE!(hR-Hk%IQ!*rU= z457I-XZQVFhlq0+QZbP#lwii2@VRhaaPI{r+S~+ zs|>W9eW9UhHO2X%0c=)va|IXMOWIxnvyC|4_G}Ob(f&guu5>hN;=oA6Zo+G;Dgs66 z-BIKE*i`_%dA`pM5ZSsDBX#jSciwbulq$CPjO?9-wT3H^IC?yXc9a~-xGP+%XVUO;x`iJ>G5RXFFjuw#V;vW3r`c8nzS&b$V`l+ z{IvzB_J_owZl7sy>Xn^*%>Xrja;8j%zxW{Fe=}|>P_?0WO;bWt;C4docII5sS*oDs zS^SUi1cSAqk?u)~6TC8$?DBgMqK^)*1(>XpRTqL-BeDtJ_Y+AF#9cE8bY*8Y!j^?&881^bR`9qY2lGAaGPFSuq?@68uB zqV`njQ7>sqQdY<@uVw4 z-p*`El1T}dqP81bw>z35@TGcuW$Fh$KGYTNqVPZ62MF=!nZ+|ridC~4l2k_w?Ddhft+&3|d(&=&ajQXCDxLV~#54_&;je?}&-Cw9`QG?D&-zoE z^bkpIz%pX%*C?vSo=z$cR2J;gkVJz$z|9+)+M%sUH&$6ei&9qma~c9qU`Da(@|W2JQBpDBv$+)6)9zZPWygA_OO+yO_ia0O+lHx4><)4s zq_#Bz;_GqRYxSn?2rgNGXE* zl^w-`E}HFw3G?VdxBj^ey9eQ&tC=*$YvI_{N<>(^5gk$B5JNCy>AX93n}*9ipjXx3 z`+8OmlGZpwVDfhY_-fDb&zwwr??OA-Kc@S(W{yrN&$6TG3Hr5kA4Y-UNhLY+a=IU1 zYt6`K;WyOMcaJD8di=cOt!|5jyKs&PC0pTYYlc_^_Jg)vUf;`jVp5_||SvS; zVDq~v#(R+ij$3=|^ca^{F*Vvau;WW%5YxMlKq2))I<+$_>kZF6;)N#)1^0|#{jekg z4$Ty@QUwbgXh6WxgG4VAMTWKCfi0^-9-hlg6i$e+=N3ZnpYIE^AamdxUo+`rMBZ@^ zOPnI%0mX=zOA+bbrjw^dST);f!S!;hUq_|24J!*Uhr018Oqua;xkSC;I%?#La#387 zrgC2)1stgxQ=gjiO>K7tiRz(9S?bopQe_`#E!9hEzQR3LSt%^VYN*OgeD*LD*hEN$ zUM=0b)~33^2U_0Q8(OdF4>n58Hk#FK0+Ip?cyv}!uFI$sR>q6eUcs&JE*M7a-@4j= z8l_F*f3j88n%&d?Ar~4(K216WDVUr?iXU@Q$Q;JW5#(I$bWL9Bg_9_@Q}p^E!03d- zmAdDx{hTw7@4Z7Vq&MP{?|<9+{<~4LvdIvUbm|hw4TPWV`Q(2lHmbpDcGMh>Ar6|q z!!!`*$s7mUQS7e{N~84X`M>KKNt~d4Ha!wtqZVipQBOp+i{pI~LGeEl%24kMk{?sY z6~htfg*Wn@lAQ_RFGCKj2-$mqaGbf9hyd2I-Pc+WDV^%-|DfB*Sn)$W`c3^|EQd>8 z-<|rGU;U{~Wj>-uJbYTU>K(Z$aeK%6`-%3|uUR`iYXDvzOG1;o9 zTivF@+3vJJmrj0#r(NC#OJ~zd{JcooWLS7UwLFSQ;W)m8e|Zz^!m;RfEdUQitd_VS3FN3- zmqFO>-O2mk=1^Uw@>YO8aP3vQA8G)8x!ZddD*E@$NX82krbg38?zhy4tp8InzWK(t zGzT=b1yo!m7<}Gs0Rb-_5%jH!ezY(1Fjd~RX(qqgy21!a46daK(7N+aQ^3S=*76^x zPg>&o=Mvby$SN_@A{Utg?v*X$efoGNj4u@olhHw{v-c&$d5_Cc8m!DZiZqgH>ouGX z=m|;mmFp8d7g|EOKaXzmd-1j(VyD+Y96#=L_cx*Ks;4;727NkhO&7JAyA3tR1ZIY$ z?$z*6SJpSl6r!2tu@oB4SCWOpaOE;5(AT_I>}p|tv{&jb4Cfa&j4N2|8nq1Yxc)e6S4Ukm+7^vmtF!0bZu`Bagq#Mv9v=T=1VF*y0!|7A+{)uD*P~StBBAuRXZ0 z0hh!z#Mj9tP5(y~{)ghd+PlklZ4!aK${-N@kI2J_2^cR2dPfCS>E<&z56`v}%7d;) zV!ho%G6Y9F1PvZfPjfdW-^Xp~T&h>GLl-N=NjtSuTNv$E) zQ+QzX_P3W3N}N{`B0QhQ7j#t|l1_&@x`J)5ccDg=#1x3gN@-8?o84!f&vx*nvZ=3( z9YE9;O&R#b%tDx9lx5LKj<2-37bo`*HI*3aS%!wCvnn|UDz5+E*@pdzxghnQ6=RF8 z>0K%3>xC`f)(dVW-PI6*$M=JaI3$66^LZq+5y*xncSuo&dyz+2shze9Ncf0Kl2)Om zdZs@0_1=W5f2rEqG0i#2(@@jAid+?U|5Or5yoT@3rr{=Ss0G2rHO_EE-NUe&-P^T z1KaQf4k*_vIG)wj3`)Nx9TuW`*KJJX?l4t%c7sz~jy$`ig-1~uLrdt@$j(%@Gp4}d zUH|f<-`BEEWdfTSQR09T#o3;_J<`U65+9xnq-n4C96zq)OSwZEY_o7GcI!E1OLe9N zUHn1c^L*x#2)a!?qRv*3G`Qp*Gmk%!IkHMfO1e<=#=~8Afh!8jranFkX+5<-4qw7x z`-wvuTFGmENG=0-URZjlu>TQc-XAOF=r|mht>)3)P3}Bh@Y_Y>Dh~I_R_(C*v*(BD z0}MB`Bo+E@>v`+LeC%j1Yp+5heLdFgG8<2Bx5$lb=sUmGNu@2%W1Tb3@Akd4elaJm z=$>`P)c$pHg>)K;S;zp*XpuSV?9LyVc9Bt-5W4xHie*Q}taHC)uBxxwTJDn_ZoxZC zFfvEtvf<#^GQ;-oq@m#dwa&PEP$ua1BF?#Nn1k~rH|luxU0 zr&OJcPmj~?+YIy`>7D9TocB+Svy;*-3EyvCO*r&C37~0E*R%&%IhLrEhN8Cu>0S$@ zYS>c79k#Fm2t8xD?;`PJS2%Y=F*$apc5!v7Z1J-<1QDl#{@ug^T(Q3A zhp9Z+sRpu>mI&6*C;v4~W+A+=J;fWx3txIu%=8Vi_tB1#&36*upWN2hhoq*7_ci<8 zY_h>bDIl)EC0J-JF6LhrS4tXJ^yy__kRlW0H~z;a(#)XsZ8W(7^1+fDs5ysxme0^};a)O*?FL z-2pUU^l|?By@dJ~?*V?Hu#ty;O-m=cI8+NJLh`8L^z`EIg;HBHsQFJ9nUGmE_KCHEYhQda97d(tyau zn)6BTU{J|k1FPaUf6~Ayk8fc4-Vg5qUTA(MjUDY10QGV^uwQK&qn`SWzaHIzG6UxA zVB2s zH=dgn-{*9C94xRz&&{*ABC{U*=9-Lo@R1XLmh^(HS_B6e)0y22wwxYB-;S@Ib#eg% zIQ;&?{in6sE=T0&OxXlN00`-eEpS#`8 zfhC7V5sub1kBhK})X}V%mV`s(bg+-qy<&TQ9oK_4D*d-l3_`*Ptp~RQd@PdcljwPaxA(q0=vM}`&5Vvt_@XIpUnPCX zQy3K(GZ$Ry2E=aJCU&)u24@CXuxIEitrQEixOqnWutzAff3A(>j6``GkgMLXL)FNX72#(cj`7xq1-{3D9*XR-?Q0dtt7n!RtxK(moj5>A9( ztXc!-3yZb%(LnpbWD(AeJFQXy(vrH`Z}Xp|D1}J2qtpa$^-S+Tmyg=z(h6tsVrG- zZ#k4E$bU-)`9*O(>;=@x7HQ109jzlD&6Pn`9k}lj9^lGDv?GnFxo+R47*xmW(oE+1 z-@%6dJeA?MRHImpv-s!j(1K08sQ?-;N3P=48)Kl}I~|t8MgIww_VBg5J*Y^_`z99& zEv(z5H!-l~GM*(87V)?=QwdfX3a@o60U_YTWy<3n4KRL>Xc41_W3&Neb~3T*|Byj` zgKK?@bkRiy>2lEsw?f<~^0X--TagdA*owWprdr`nWz&|MTF$p;yxZ4=zf@d~4k2M< zowu5QM_h8w{>@rrFHVtkATP1IuT$@fGB+t{5!`7DHzeCTgslE=))8AV!*CO~qcA@X zs;h^0r6D@U11x0>^pVhCxOm@#yc;bmihm#>OX{Vb)hv&$_)x>m7(>i_zE7EO{8sOf z^wz$Rkzw?}$^+)MdS?2?&2e?^YQl{&qxIqX;X%DFRN|dEKhjY^KW0cBM6yMqe(O%V zNQY;ptxg0IIXq{*v4yJVf?d7&N5p;pwmC!$R;T&U$iNtZCA|AzTe~2-bgKoF9!614 z`(u)rZ1V*8opV;RgstUM&-IlqZHF$p#iMiTm$FTUMo`#Z-KyP&Q9H$E{43WC%Z6lcgNzvr)^+1tkbX6) z)_|em@RAD4{+vG2bjiq9fkJ6)(k(1^d!=LEL+^w2dzk&3wg;^GGT2J^&WB~B;=Y_4 zovT#WN|eMnv~OP`Pa5agI5rPH`rct^R-4=)<6%$c?%xUb=j&N2mEVd){QRirRUA0c zIZI~xmNsa30Lg{}lq88Zr_Nq3V=!mL(|mY#USv)^&vx3I{(JHXI)oP8ZyvkR^Su10 z$z{Z7V}Qp7WMui1*D>=wRBXhNAiDb; zF zTpM~B_QBYuBEFC=_VVUOw#*0cwl*Nc_X|(_#&E3B8ZvD>T1<5o8+QM}x5Y?#Owu>p z$1)KGi8PReHz;#!5~^)|oz-rFR*j)Id@#`GD|-!(i*g{jr+)byrKe0f+W--+C$}bd z=B_o!&UTlvq5(+BZqw)Po?V-BsvtY|0$tQSc14_DWgaK;P6+3&#SME_?h|4gVI%br z!^Icg32ld6EBc!l&QWE%(JIpG$xp0q>$8{F))o*B8?V?$dGm2bJM7W=x_q-459x(A`q34$`>1(s4m@2#1?*0r?-yV1*gQdR zU02q;=GWmPypUb44?woh1vkd%pwolbcduZ;*xS=$T+_dC;onvSm*@X8-!$rRi0dDZ zj{t@@rF)`&&78Qlf=2rIq5;(rTiEzq`Jnw8v31|WO9@Hc5-yLAxr<+sd(LL~VQAC8 z_uvwJb?qT8-ttU~hyAID9Q70oQcq$w2-ZjDw3n@EHGHe;89{%BKCp7+k=fg$R)e+Dp3QzSz9T zyL~vL>sq?6gnh-9uNqp%y0>^Vf3kn8S8Ko6_~~|&F`wD& zqyN;mZc02AM3TB3+V?j1V#EWw6mp?j(d+RjCkYo%^Hv&4Hzn;x#S~D%E`lL35EI7k z0E=2bP=}oqq3nSwqp6JXc|=l=N?P8Fgw&c@B7%?lMrYmQICP?B$6SAs73p+{&qy=; z1OeWwuhs`DbkhFn+^+4&FRRH_eYwyJjPcz0I%LW1ggdP5B{fK#dK5gdjccX^X4y<74f@$bz)l^a>W%}!jIwdWrr+zx+oCz$DW@BcRo;D7Tu{{L=7K%%m%yU11x{#`tH~YEQIBi2`Td7Ng%JZ0!=g{$hI@+AWdvjq@dh zm`fDPWHaxM0P`7jip7ljA<%SHF&rYl(G6swvUBFwyIhTVmMK9>rd{8v-zjJzKGF`H zu&XQ^pT2L{?+Qq*I6T}Kc7(fvX2vKlv<8t3U(Mf>7M^OG)6U5LaMgUbs)hA7(`VL; zv(ZC|J9bqmso4oO)1EA1Z+HE5HReN$H<-#`~o=@M@J zJhFvHTZp*U1jEIaS$OX@=Tg|Zn)7Qs_08+*!>iB7)Fhax5~CMp<)22Bq=he>)H;-@ ze|PD~a}Xe}43HI$*s4iq?5M=>Tz|F4_5vkg+_len>`78PGhqb=;(mHH#hF@bejMF- zBEc0I`_K7QZ*7Lp82gsr=R0GI|F3G8vbT>hkIgS@gf+w&?nvl5F)yoqkzrXJ_4~yk zkrs~&iGd6I2e&aRNA#ZpcphT&knYNE5DVgB(s0MOyOXnv*Ju_Cz^XIImim=OEMa8tc&1OYh?BCnQ`Do`MNtIC=cSGc)&PT{nSFHP3 z26(=k@s90xR9fH2TY9N7F<;_uj0D{KlY~@{gAM>#JRQf780i@y8Uqzihv;^VTANvU7C9 zJjgo0_;6ixchzn`vD>~8b5!)*@a*-f(To>_7uN|7dr0qH^;{#r+(MV-Smoo{2}QYH zs?`!-7s(zw>e6uE)!aGvW|EQ@hJO$Q7AmvP>54~Gm%ByJj#m;(4e#jZirj7)K~ss0 zDze_^pSjE{07m8<#l0N8mv4Lsn)jx$X-0{6G8;gF`78!nz-ZHS^_7L%%caORT2zUwvjeF1z#0%8zPXZOyk*6d9|v z!GUM{t?K)-&orD`)}$mp&VCCy*Y*l59I4zkb{3tl2;n(|;tgpA=B3)55IqYmy?vic z`-_^=qr)?T+D5#YBieYct_ChRJNIn&;`SWn%d)slt(Tvm247}mUb}X<=Vci&-)c*L z@%;ljF3oQlIqAk-kox!3B>>%J7nt<;&{}`yX~VuoCThKHez%r&emU-CeY&@RkM%eO z+>{>}EA(>4=?0FOLET$3gSZ^Lze)~V-Zbv$GhJJnA3ua@;B|xW1q0_UP@DImd#cr+ zUMJQbKOQ+|>;WIa$VuYd`p*^Jr&FsmU(<$?ZBl1SR-t}6aJ0uUO{c9W7!=GWB&Tgt zesG9siBzAi*fN?jg{;#T3B?JCK@OSY?T#Ul%@g#EwGc`)z;z>?CPqg5Mo9TZEWPsV z%yr%QD^saF6WeyV>?g9Q z?|vOSc_6YmJK1M2PG@;p+R+3F__gtx2T!8}yx>oHpH1KzSMtRDnwQFw9hdDRgpIIo zct9-XB~m$ejvc+M9c`*?CQb3rnXaE^yofUNyo(b^kD(KN~8lG?u|(QLAVPF{r&%bh+w=&t`~82)=2wva$bVy^18mv)s(KbmcPEO%!G(| zA@P#T&$fT}co7EVe(rk;nV?PcdbaKa9#)z9!pMEK;DcyQ(I97M@mmP4-jz~&DiXjUQM@bC`E<{x2_eiTYje&OWxk+XEqNDWcHoPnJD5yzKs0J>x!_Ya)?Fo+E zNU>(aJX!?brYK)Conu34j)^>!?0u&zV4V$*{=#!fw;stpH^*KaVS96+araG(=ks!d zAv4~f1J8AMNNKjOX`B7$c51@$?0eksiS&1#&lhmv1Fkh97mtt4m4F%5Vf{ErF7R}u z$l%^|iVUi87`XIL5Q|F%B&m1JvIu&=)Qv+_03^Z>;v|c~qE&FgHn@z+-1+xz9&{&X z9+JkL=6rszStln}n}eq^6%qoc}LO|9?Mhwh`%N-M1SDKVtqtyYh>V zh^MNI5;sEUd?zk7pByw`i1(>N8?85W@I92z08a3>q(09g z65xi&d?8SfT>x#1PxO3SZQuxfbRaIqbeSEc@q_~o*jFJ$ktHgiXUH;Jo}d%n_TV6# zS0XomBv5dFK;)Ikvk1q11P79iSeTs!T~nHU(B(Wp<+O|FcNqr8(FC6GMlD0uOV$Kl z)8Q@7By;E$sW{+&shmi(2o3mjQ)IP`)Ej|0(_MH&5>sIiykvL7hwh1*dnf5y^v*RS z25zx|TPB<#Qm;N|EB5u;2$ZFE`l3Q)lX1w7#^JXr!B$@SBE5mV$Ja0Bb%`(s%H-lt zi?ENAHpji36zAdTA&FzL@}Rtq(w<^FB`P5XWe;bcdR>+qf@bfiM;ddKGxGH%D+ZUn z=)_hX9iX}gZo0_UYJbr{Tm1*-I^dBXKaiS5^|3UI{_lnhZ_E;&4^~>x(y=DmBknct ze$JV%5`BLGXY2R0)ONpFlsZ`1@0J3fr z&5Bk%a$H^ewT?XHcFb)y`}yRGac@btGBynJvX82L%A=WKGnLFilFcOYz1Jc5#-5Mz z%U2|J&Kigd)b8;WU}Kr)-}{(cmjo$NpF{}4bNVid5koniX+pG&soWfZ4SHN^gDCLw zeOuD7uC$zJuiu0q40)gSRA`qQEda^gnZ_D zI&*K8c(_8VosqgD6KF{Np(UQpu&x-}Xp(zEs=dfn+wIGuoR5=3Cv5SAZBMh&Gzp~aV&tC53Pp3CzJF5S)0og!PbABvM68*u5d$0>&|GF01)|F&{+g!|g>hJL z!tyMYet>C_kF;y>x>2?2HTagN5wv#D!!wjnC!s`^&H>i}NNmGyRnp7NaqLL%%V;7< z;IW!YlA|S8TX;CFKDvuS`~)hKjwgvpk5sqpSh+Dl0Ey zqss^ARo&7bq%z^p_!}cj37W}e*>VWuzMEspamdKP!_immji6u;(xgJ!F!Gv#Gz(hc zh*~*OAv&jiEV;_wN;Ixe&I4nVmJ(&JeA}`95R7=4VA6-emuW6}9rb~@CvxsR6UHmL zcWs&o`%MOI`L6puXYbATw92Q<0wke#Jai`#>%ELWOZlt%a-pAVcSKDdDA}#uP}h)x|-NOw|BO=nm<*%%7LF0j^Q)tz^B$B#Ch+RdevF* zTqyt$2+%Dc$I*XAquqUDh{?=1?11M-M zyM8^an=cgDerf)dh3m@QX404dT*@^S@Ts#*z*PaICCjCkk#{C ze%XCwb=6i-$IG>X*ZTUQHTzb}IDpx9H~OG!W{-(Dy?cflcehb1)u_W^ww3yhh6MD9 zdea7ZW!*7M`cjR{R59PF-64^R6Z@v?)dKS^xTzT-$4r?7#a%z@0-B3C7_ku@rMOLqv&b7LfA z2@4X54}8)bp7c{A#FoH*y8PvdzglkqN2mc z<`Zwbn}RfIZok0V`=LtAg8c+6WV4^K`^yH`0H}2fex0!}DrQ89ttMD?a8xvs@~u)C z-nqhphhbsOc@%;nM3O<2b%$t+u~l?2jK*Xc*Ckp_q7NX^@=V8h62FoVTll@U!R4ry zmL}aePt`pxTCp9iBdWAwh^bxn(wog`b^#H2Q+uGk$5-V!(6t@9E?V<$;vTh~P>6L3 zDlQ%)xE1w;jda}*a80lEF2<1x_&LXT9Y7v+<6$G62g7a4oFB#4vaQKZqGoO17JCTe z)K;AHtM|_9%Gr!*7O6oqPEPvj7c%rA$W7%zY{@4S@((TlRns==P!v{C)+VHm2vGn+74YwjpK!1u(LQ0+=F^8A%PBaU1k0$&89KU{I~<*o3Ipg_8XQ zl{Q}SSN!KQD*>ul#p+?QE#)tc%y9D_a*3Gd+WHQ%DrRGf=};Q|DfmxRyh4=PH{n5= zMRmdZ2_NP4HqwxG;1)r5-0j?c3nwasHW?+4lGn-2Jdh;GJjl`X6bYp zlH>AWF%coywwY~HDU691$s#DA(Y}0*x#_zph9t%NyXFMgtBk$?COxgF1vDN|+KaTB z&-Q<*4QzLC$r;>7n(GgLY>bb(&sPuYlQmvY{#bMH%{SZ62=EuiW&pn1ZTXSg(uvdI z0qRfTq__yq!3oC}5XA9)?mB|BF_xENgfiXVW~fJplfK{Imb$;OgAe#tj+A~31p#5^ zlPr7=L%$(zM*npkv1CC@429rMFsKApwJ$yqtDZ8Fp|E!M1WgS_kK3N8fVSMQjK^N= z%SBy>i=s`;8e!)rB)eJvOrK*}hY<}oO4Wv%amRsgOP6BK#0R+@TaIhl8S@Lb6w`4v zp|aI=Ud#m$voSsjucoUS{pY73deI4YM!0WBk% z4GlY|ApAgR?B^^GbJdr1?IiCfyBL}r2ErtVZ0j^Ao0FYBV#}^=qd(O9mouCZ-}LlZ z&e*lwU(l7Ky4+tU#{BqT+DeIFW8d-BBK#op*qk1@Ofa4<`2=MIz?BybYI>j$jWH!Z znjK&e#M8YY#sCUSc4i_%uu_;aSdb`~N_7*1rhMRT4^*@g3iXpL2S{h>^WJr^CcJoS zN*RtsP<=_b8hQ&@f=OX|j%**v-aFyMnQ8{d#^c}?6KFm`c1&%_0t{3E7iWp}hPaFP zI@;%P4Aio{%)5Yt7L>vh{$!bs$bIfXbW?17JA*b4I{?Z(rA*(PZZsQkvKWCwD#u*i zK`a@7`RIp|2BTry-S~8{lW$Y_#9ja4EO~9S%_9Rivlju3$S}kP;-;Ne>qfM|qJj}~ zK)2}1U!6LSN6c)IqK#V!s_OTev}W0#nkt0oT~>PmI+7A=lMjQlryNFV)j6&;=C#*o zt=*<%rr^%G|4|(OBM+Zeus2$E9^i39{X;BWG=dv%s-xNEu)lk{-aY!G4U`^o4!j&8 z$bUcU{lC`#$bgqON?Zfb;tsBN;6SNdJl z7WeJrVny0jLJ)1s!ZOF_!E1Ohe*d9+k&pW+jjsglPbjSMlll^0fCbB$g?mFHRB6m+ zDqBBQGapuJo@e45F}LK&aNI`CkgBg2rEHt5eDfm6Or@q+2u~yahwoppv0?RFMX%PS zX@&g_fFlU^W7>-vz}4a%ej7-4J+fF~Z*t^G#1Iy`jwb3TPY2bCkE+XpefzaYP`!L| zqL3Kxe<5B1=wfrFWc$3t-lpb}Ffdk}o_w*5J@3gKghP+MC(^4tu^}wHB=urACLxm6 z)|DXlkVuM4CYn<8!9d$$Kn^iyu8*D7SR)i^{Q`w+7bIM6Z3NNO%b8Ck(JjGKT`OL}Xq`kU~#a#V^2@uKQc zXS+G%QNvoyAqIVlymS;;sZ(}Wrmcq7O7a39Cp&Rr|I4+FMUS?+p2I^#n(LhHsTvk>6{nWfst=&)}$SU5f*$ zY~UUnQ}aH4`mcmi6V~rI$a-2bZ}5jqR*=BgGS=1ISycSBp*MA+aesXMN*!$Ia-lxb zFtikd((*x0A8JZzGw(u43d<0_K4)V%NohDA>#8AZ0Kq5PEgS1u*C}4sU^LiYQv+3- zF&M26dTg*YRhO|BhwfpL5<7?3N;$&-qr^}yRC-7$sgTJPS3pWs8Dn${74ktl|RJpJ6T^C!D?+FsNMQNJv`ycWYw#;?@&zPc}C zwPiv}%PsYRW{f?i`qD{1C~-(ZzE7(S{>GuY)svDwo`0NI#>g@Z^~>E$y^^Z{qE{n9 z$q_N^={X9IVejR#Ypb)qITm^SKkjZ9)Cv$Pxv2f|c7}@K!~clF3h?1|JBj5Cs{iB% zK1Zw{`7K`@KDJBEEf}6wLmPxDjNr;}-rh;l3WR}HJwDkS3rN?e;)a_`hgN$r9(X^L z2h6p$%hwMH=c7#vroYLRzD5jj?I)5a8R)<=t=^vP3zg?d-oXB>H6~C9z7t-tRYbR* z_^B-UTi7OJMYHdK!i502>p^aAj50CO%l_=tw`@Rkn_F>Bpn?Ms^2QK(({&7k7Z|${ zX$w~5xVI@LATL7z=&soLAXaafNo**v%rJ+nrG`Z`R;u)oVmXG`VvBc$BoTUrCv<)%9z?U+W5EGUP`zwcJb>xgKJO&G*`dJc5xHPX(gCOXd)h8Gb)A3E=qT7m3kB zyb!AJsktnO=TibwqB=-9a}<^0kyA&E&dbgei8W`gOwSp5QM}Kx0xxM8Pk?zbK#GO} zh}bXGg$bt)Y&0y9jjSK8@F0e_>;+GQ%V^Hc>89~RcD*T0X}c8bRxqzG;eI+W6wT5X zCmA(CkWHesCce{7^74&pL$!; zCMLBTZo4y5G87;?I#|2{c)p^evlcmaYC~Xid~+b|hn9xck4rK3a01@pq>rZE2r1*@ znaqnr4JQx#@mhOi&r=OZBW*x_r*bXV72{?_K#<^g!QnM~60x2(gP8h4(_j4l0PWL? z`8&4V+`8HR@5+XEl?!?+6J)JXqY>`%MtoNDCF@MJSh#hb3o zijMFj)-4LdGQb3v2$XOGw}VZ)46)tiFA5f&S?VBVz+zX_UKS~{!eG%8T8NfPO%KT0 zETKK55;}s1+S&RjzS+9#uDNEqhydlPO9kC`WTp5y;asr%Y z)`h!E(_Nt}v`yCX3iJoFJFVFBB8b(j(zVYJNPZ4T)E+tzExIvi(}HA-DVkB(T{=tt zYFsY~);G99L1*dE6Uo-xG}KytVDHgk*UTvmwW5+adD};N1?@8ij{52588V9N8CMD| zXAj$mjhH{t>fh8`E1J)P_ED>|k5n?bds5#n}g93J-xW8%NT8v^Zg>e9p3rm1H zFi7i&ChgW(+%vodnAS$gVF3YWxz4St$7Lf>p*H+=7*nKCeqKW+Exz)27vN?m#FbD% zTn$M{?TCJSEOE4SH{%2vdVQ(1s9M7qMS`fy@v$rR*g zKB$iK+N85Ei-F-}C{q-DP~Uqgg4;m6A@%;6A;ayM=d$%;X{#wmYz*HF2i!Wo94w4$ z(>h6hq&1UX>@)U%rH^g+5zdk8$qaJaCI4oR=Liuh`8&{M<~t~Ic%13&xKvv~?E^_C z%2@#;3++__*M2IK^ba^`so0bPqG4J9bcXSljk_keG$YZacK(f~tC{rcXxd(C{T9s4 zg8uYm1lB1sU80)A7XCgJ&tV*W3jsgZ22`+*0*DO7wR&2hnRZ_?R9}29f4>Z$}FlpB$w1&@?kSV`LThz7%hfN z2qH37C_PXUbc39Fkix7KPhNbCprc)CRRbZm)LR-=EaN!yAX`&}Z^NWeRz{^SWj8B$ zT}3Q?UEEhow<$#Av8c=x(n?C2LU*(wU8jgkG#jrp71&}7gT#vMns2X=_}qKGACLO+El~yKSFf2Y7oxoKx{|Tu*3EDhUw-reH1&-t zm{Bi^LWEyCWIC;{;Kn@ugHPWR+4v&72`pchWeMiL;fnjin+dk&sbfcrp_A$rjwK}U zcw+pq=}7>AtUIa56v8kTC;G#qX5J<>w*veDZuwitd9;i)I;9d!f1J7h#-SSAcz&$D zEhQik2>SXUltb*txQA~VZ+u5K@~dQXu1=7MRxe>Rz3IATK#)iDAvD`UPq8+#Ep|&C zkgHtQ6j4uf1ge66&wy>(JB)}N;b6R)KXL{mt(mB#Pn!FszX>fwk#9&Q7t1_YEN*qG zsKG8cU~IeAW77G%

6kG!I%4gG?`e5a~9dc>hlXLk)wR)yE%XjeE?OCkyxpkA+_3 zvFb%N1DOLIbBRIe?Jq2)Y7tYs<{}8HZd$*qXv8c(sW0vo{h3<}1uOP^0Zn zb>m(r+)n9^>AZlmZhz(IUvDeCv5jB#cvKfxYgIY(Pg1xM#m5V~l0VYhI>NkiF#Mu- zVRnLUxk=c(2D~6gJ)D5s<$<9O$_-oieiY3!6uDO{wc-2rq+=#MalvLG^4jFwy_Ddv zs;j{K`*^hF!Tg8VIifX})tXJEF-=zP+g^+sd=n<&M8&U*Fqep$%jRVa)7n?WQafQ@ zx~tWxf>WCmWN2D%Yv$XAV?YV5<}pKRcaqmeks6OGQD&8x2Q9nwr1i%fq&0K!DUyeQ z0(BMT?n9SzH{WwINp&W7+b$W3vGb9{TIWPkVeG2L8_AQc2OxZ&pLdRyMvC>udE{ft zY)S9aZIsB6sq^|J3phU2{7g@#3BABKb+t=!nd&R|bE1b@g6Az*Nxn|$%ksabkQiu} zuhgd1a5a#xtGImpuRMY9M(^(z-)m8i_BZvoVg>G7_BN0`>@%O4hEIGjE&~jQ9+>K* zB$sNb*vgDN!d4RmUm78k*}ib8?VzAhgGch$u%CfCFzO%px)X>sOXIqR6mpal6VDM-!6C&7UN5Qe(SLHhQ5$Yj@YTk}db1*a*R|*{#FtteiBv zuHgJj#sDD!uI=Ipdp?9+=B+kct3&$)14|M$9J!xYUN-FTdZT;Ot67HQ*^*nNv9}k_ z*0+>-oPVOsza@DxxHrv2W;N2T^XGWOiLk3Qdj0Bi+GjosjquNM{t_n#6EvUK)gQ~z z$b@O?s=mygAh=37?7IsKS;lKSiOuQxSI`!SD_uplQfZo-brMkUZeKvYko8;}ikG?H_Khuw5n54eJBoWjXc6017MdSCeU{*w&~RJwcI8$EAy> zfC&EW1HzuH)M*~=+3=Dlfwh)MiaR;Rm$frj*XF2rs{t?{tPuv@2sO^E<Bcs#2+&U|K}P;`!axU!+}e-bZobFSXd;ieLgsoZ$hG+ zF)U~2^5AMg`d(3TTv3v7H*cU)U+dMa1~>Djpn&aUr2B42*@R81D; z4If%Jpt091EiY02sZ_ul7+qYFp$-zGdPI=*cc4H(6_mOsL~BNAHy9#KFjvXrLi2^> zQN$BlimrCRP?ir#mPp8{QkEXm>rO?LVI>r7-_G92co&~CjVX%C`k<@L(p~MKOMhtT z(G%V#c8=sN+!=}dkpN{gwzSlxH{x}icXuA|bH|nqr!$Kd&ZsU&p33-7smm2F;LAuv zZM?C51Yo?BhqqX{D7aXdm$Q8jNCBTq`iw|F#~c3r>v7N7RN;E7D|tDP^-qZYM!*B}tK`fFjis4*t zQvs<7%CYXeK6NJzbw4x|{(yb4XR2a4g5Q$zU14RgoL)7+12u@f+5|@+aHJut1=e+G z1D~mzWxypr4=7Ip>^s>%z;g0ePOp=i&=nfAJJVpFP#)8Zu-ru>z^b)?E>jG5L(DE~ z`LR(@;5dibS`kXP4D-!Y|8lCP?W6$z3$`k_p3L1_%t2as$x5otm>}r-N4{bqZI6PO^H6Cw0sxJ;N25T50GGZ6nL^ zL}Q)T&Ho~*#R$H3^=9EuB6ci@J>W=*f(NAH>b;&SV*x(b2p0s2MARu{dkn-dy*UVe zha)=1$qdB_l)))Ok_B>!aayh#m7j3!946hQ(_`g&U0 z^?l8AVZg9Oj{8=mNVnWey;a8nNJ3@ZF?<`_XzJ^Puy0~^qN1BCp??@o!Isb2-y;l8 zZ*XGMs}gtowkiyjb?)g4>2Jzh=q!~j9xtJs6PsW}eJs1GMDC_2E}st~B2yoCo-jmY z#o0Y%S5D43vhPVwp5Np&<-Ja}n+b^(o*ksfU&#U;6Qw!F&t?2$8~?eV2ygk28^Aw_ z>MnEtuiTpMEKs%1%oLZKVI!9dohpfiymaIG3Jd^TOglfDAMbJm4L$+KVnobsM}$U0 z48-sdONM6itXuNwWQvS@L)FFYzL#nwo2Zzzcsf-K2qBk$VH3>lkk0aLa<%{$g3@h@ zl|CrUvkQfqO46u77vY`5t8EUH#8Xtl5mSk!%ec8Vr$P})b^7syoZjYzuE4WZb5>_VWAkYs~!WLPdX$LnGo^I>$1)vy`p_%H*8EDhMEPz z^R{!Z)1F4LeOTUUF8Y?$Q=L@5_nZQ4>G`rnyqygjg(*_WSc4nOg;x{i&AA6jE-KfL z=Si)-7fF3QND0gO!aqrzdEaiVx)xgcUsb9%d09oMljGFaP4tH%dHi=35eBvQOx4mBltFEULQ3WaN zG;BX{#ubQXVLBJtW)=gJ+?KDiaCBB@F&q& z3RDPqdy*@SAX+QTDp_I!UHY@ayP9l|g5@n-Z$eu|7CcW{sjU;stq0!ww3FMdN#T%Y zgeZ)XsUF1uAkuk>CmY*gHc9!&Z!ljyYoGc+BlBav}ME7uoj(Qv(p zJKlD9|D(76q=vi^7k+nPz+q?pE7I%vHdc8%n`?lY(e=wa$_aqM2;Tc1L)TZx#GL>% zex&e_ihbV$gq!!KIrAuFX}&_sCgEx|inQ8K#AYAhdh#rVv%Z)rHH4C$=AQ^;tBjIC z$^tC?a%c||aa!#7=JKNY#YqKZLkN8s1bLr7r?4L$yNGMsnF-=1Y5k&nj1@}`(CN?5 zsZx{$4bOYD+dS%^&}@E#%XU0#x}XkWot;heX6-^X8_iKVemQXcL{ar#DoYzM2C*Dtb9U^ zz0J|H<^G0xj{Otlc(;jbe7}RoJN^nkTB(J`iPxLgc;By2KdJ;L9k(GXQu9!0JN~1a z!W)q-_^mI?FWANEPZl2CXCBJO`SsZ74Db0Y?a^=C1;3&lU$KEJ`}Ri^vFb84WS(f0 zAJk+tnYOa-BoV=9lBaNm$)k|5%%E@n27P7~LeIf?9ru%nVeh$D@o)6_KZ}TV@hu@} z-_8VPVjaRvRYNRFt|%mAhfi0U4I(|P8R0_r4*RhmweR3(KPkIWQQ?pzUU4& zjaK2AWAL*Z;}H1G^jafmoqTJyd+y*fMBfEITs|nk?a& zL+|lads~K5b;|V3s<|2|d zqJIf4lTRkK*(M;0DVT~-Z(D3{o;XL>mS9p+_9>oS8s|^yxxlK-L zGba=-*zdaL?ypv#9aK1M3ebO;xGnpPWhKNVwKb~vP;;cluQpPFK2so(+7=TRw#bBQ z8^krHEIIX7d_)}p_7)`%7vV!*ZbWf0lv?#KGAM;B3T`fLUsjk_2;T&qaB_M-=7x1O z*J8b758MZ#Fa2B?;D7*TUP=;5YK|N{Qk%p$s<2V&;v8NNc@sP>U5#9F;(ex2!|0`< zIhY34a$Tl~u%J!0{^#AJ{}4p%0Wr zZ;jj@qQ$C6+}hE6TFWzzrXXDB|6ZsSM9R)Cno=VK1`5T`Y8d${w(pOv-sd|w!q&1! zpIfIEHWA`gBws1*Ny4$9<86rcuEgDSh@LYMilKx{m~W-Wrv<_Ea29P`l8_7e~WG5 z4bHa+a?9DRpZ`yY)=~%eeBNV)Uu`mGM>81EiY7`cRIWWHQQRoCvO_tw6zt^DTFiodnkYne6YuHdEY&wHmnK z0z%K21)rUm&*a=_0j#uoRE2>A(Aj$B%*Y8gV&8K_kYEYoWVIy|${gehZTm@tQ=zW# zBN%NQP6~sYEB&@-)yyhIfcO1b&+;S7Jp(7fLxuRT**iha({ggTDYWQl0c z7Oz)x7oDQuej4FWgr|qL5T{|-R~!bZC@#=ej^CUI`@wVtJ^$prdqJ8!)lf>C-27rc z`VE@{rm!bF)#pZL&$I$2#Tl|kha9DpSt-rMD20=C@jjCk#9KCV@u9@heAsF}$gqnmiqiBB^7|2tN^%^^U1 zb9d{AxK#i6Xq!ER`yk%NW|xN5gGk zpthNXc_W&BebUhzVtt!CKqwg#EZb7hPv0#J7;&C6jHW2~pb%d*VJZ@_VgC{g-0hLE zo=}!{7D4f`eBz$W?|X5a4rWC8kb!v1Ldt1e7VZc!Y0u)w!zq3v!&OhMVN0syxCfnO zl9cIYV6RHF{*NgBxA4M?`i7Plr69|{8aYE?!_LF`r1IH1t@ekH2DFjEI+D z^i#bGj}zo=qUs!qNMY!Ln9W^Lw;0jw>A2e7P^C(Gs}FXCw@iZ%^s}jYU!l#y%*%XI zzP!^-$csN-hQyF5e5)N`>MolrXdCA9NtucD5`C1~x)dU1&(7QaLK8ZI*+s!E0s}+E zrJKBc+fV$Wld(-J51wN$fSF1Nyojylcq)>~oT69$ITz)|FFiV4nB-iLe zpKbk*#`_nxtWUqOBu%#XCqL`M8TJ+`*6htdJ{xKkPo7+gk1z1FVOjy$hNu&SyLs$M zq}tyN;SL4JreaXD{W`M;$odIk^f?C9?Z1oK8-NV7hMi7_5qV8ZtYO7!`20%(w<9U> zTcVG&2xCMJlwD-OH>`rwsp^?kyhF+{xNR zWc7`!3H<-sd#k7_-zRKX5ecP3x;EVQiGb+@!(*yPK;OoLN_u?{Ln z<{rV($E>e8SmSkcMY6_G7UAQf+vX^0PfCnkR}7)fx47x_68#m?f?_`MDB=LV;YsI< zZBo(!eiE=dW~n2bv%uYnv>?&l>s1YRL91lU1V54@$F|r;f~2*=^2W}8omnW9+X)hp zYu+cxlB5dIW(%xkOiwnS5;HuHh;IOg#J)hC_MuUY zWKSAUEka*nwlRiKK$jrQB8D)U0O$(ssWPXOhYS`_L?#^rHaU?LXNe3OJ&j_v^)8lOFTG0=sZAE>4e>kHGV)cAHsZe$2~ zeejRD$6as0tFjk7B+jw^sf%M^vuoymNFvZ3*Y>-gbS(33U7$Vxb^ zE9?reqEsW?GBODgJ%FF*Gy$Ql5DiiFdoB({HN(7>SyyQ8j8>kcu-;HH%v?BI`c(9I z#@2>+1Y!5{_A3k7^(ZVib+_JJeG^9!h?<=Lm(?=0Sc#RG&cV*nieb8}AIbbh&QGP> z#5DdD$_}3W3jEkwocH=FEyJ%rWLtQhnsA-NhaI=zG*|52I5j>?*#7thGYO`%EnXg+ zO7o(>)@%Z-^V~_cEl#1!p`-A0&YAE!9~lE}0fBTf9SM)-sR{gNGF%Xe zpG82tDg#E~D1>Xhc^GcK9%-^uonZ-QKi%u%r;OM#vX*wS&mE&BT@x#a zY!$?LPo_5h@9-!Ga43rv3mjU%G(x?ykLB1X+K9D_dvh~%-un8H(A9;B5@oi+gsa|R zNOK%#>CxO@J&FETNlGu&FK`czuK)xlHR*ojJN$V|^Zd_HDEK<*VjNk$Z%N-$ES zDA7B^@W-g@8Geypjc3WYN?$1A52Hc`^48*Zv~_-?6OJZUNVFmNkI*k-1>ugX0D*PX2ean$BeR{HT`?IJjW6@e)aR$) z?uQY>lwN`|^JWL*!D&ZhRh%yefL##CwmoY~?xp)_!extp?A}R(0{7-Z$%ez`kpF6} z%UUV)fIis#bs~8vjjrbP^+cL{YViK~ErtSGMk`V8cGtZZflPciwZ;d-PzL;*c~%Pp z{M-nc3j#2U4}LGjT{bZsHgT5gzoRZC(r-sB@E*VXCcd+VK}kAiAW+Bglh|}#QFvkD z_VY$d@wt340m@#!9AHP90}+ldgEZ(Qv2e~P4H&zQZzQm_I>cIsy41ziT>;ad?Fi8V z3Mg4GrPfH2+PN|YwfK&Qd^XTib?M+cArDsUb2O_nZ*l3OM(r#6s*AZ8iM?;_zI$GM zUYT%}>D#gnDFc}Roa+T8<|JxYaK|?C1cM7i-T07V*DQX)>*&2B$H1Fw98R8U)~3ya zuZ)(ne=UYwe4#Yd!?)!Rnks?pO=?*TtM7KUaGkVxu$#9=gJnpO<7oz$iDB`e>^bF&uY#PU?980u?@XSI1{m&r6(aITGxUs zMKqT&4jtYL>AUk#ejc*1>B|9~((j&;T%L{oQ=e_&2UQX*&cv834bkLaJ@n^*YQ@F& zMS2f%(0Q_Jk#;j}59>Wxnv!DCA}RTM zYr)4j#Z6u(HZ!%q`?P;>EFC`pzGd?a8#{h3=-}kq>)~aq z-n1cjxxbAytjxskx0)oCEJ$fE!oSpxn(V`um=dWLgJKJ|HUO>Me2M!;@}@pyI@IoM z5_cVz|M-mSrtOz1qE5$;;&1lK^O~;EefP&O?E}?Jic>7%cerJ%l5|!r10Ycy^4r20@#pT|b=VIwDqBfs@@cjom#wd9IDmg|+$zuZaCcL8jP z(}St(W&n9{KC3bb>sUbR2M3}!o#Xv%+$l%${Z>DuyJx_6e(iRthWK}Db?gcgN&?{J zjBe)hOcCdy15F*Z{kRBg2~_XBG7vSXQ{6y3XOncwIhSa1Z)xkOxxnF4ay0i{000@t zj6=nadaus7 -P-X*qoT`2Axy=|lLfP4I^W9IorQt9}RQ}7cvW5$TH?u~BFzR#AGPkF20`l%OjE#kX%zydPqW3tL+Ib*LxMMG}Ij$<* z#`<@)dQVL=PCj%OcDqf^{qdf6gtSD6f0!go<1TMFK=yL2JrKMCqB3J2N4yawYNvud zwKt52+7#Q2*~2B_lz1VRMe1`rZWD>h{|ui)w2ACsHdlL%BRk6KQi^Yqd-}9wZ{sIC z8NPUd>#B8juJv3iaa1f3;d!#>hRIRx#57KQZMyPvKG8?#4IRVIS{>XU2;N5C;hm_e z?RAEXVibRCvRPt&SA_HgH53-+XnUo)GgT1GbgsXIG)Ccn8HRk}p4-pA;&qWqYAzT> zcfCwve^^>)cbaC!l;wZ$2ipJpqowe53vg`y85U9dy~NV_=&_Ff_0YoiRV;aV>c&-}_174jx!i!o;G(@u-Ic>=UCtj?<)fJ8mWiT~P39T# z>8SOrsjHE!X-4ojFHsvcij8}M-)1v8_=7Fu^ffuBs$`4WS$2eJuQlWam#B2N$>)vQ zaRs%Hu=YcnEQg1UdcUkA)gz+|*g7^riuRm-<_dHJtz(_{ab4_QqSci0;Sl6CstASD zOq6Hcgx<_raR?s1EF93l)zRHoC!TUV?7L^sfA)Srclo77^{7PnzHsk(C(7PyPNn!Ey6xL9I}|kEdZ0&e#J2y%_wC0Vt3ygABU1k3 z$lOl&>7h8Dda^i~-V9LmSrnUvBB4QLfd`NEpv=N)2#AxMq>`pbgQU`qXyR~K^>!*e z3T>Dkc)nTkwU`qEF3vx~2i60^IM1v@v$YnJAD73*>tPCaJc}7Ko^kAF)5#1TzU)k$ zOYK%@BEg2$;c3(|W?pG_pR@hJBetWC@7B$EroZ{~?$X}?EC{C%H`0H5{6*Jw7UAzX zz-H%{ylJPzf#TlqgpdH1Nq1K3j@NoY>-s{ucbeJD(e=XDTK+344_eb(^^04TQqFwD zQL<6dG1P)E$z~&0@EWbCTPO?CGF@>Wx;OxbEP)3lw5$-};tNg$EIPJro`6Aj+IL)# zLqu2*`ZIi1bNL01EbH-c3kXVFjge+kyVpcF%MGu;0k9S;XWcL)jVi_;Zzqh?jx9Za zf%>N-vdFk=4iOnNqjLRVr?TsNHT9hO{b39v+}5y}vM^rE-56J#bH&ij@asin6E3%- zyk(2;`_~L>1LsV~mw_+10%l!{Pv#u!9ic#4M1raKWL~_cSR8VT$7D*=gbl5>7+dRZ)msu8~OkPb(T!vY;{VyZ< z#DC-!UQxX_Y$_KwaN4mAnBUJfCx{^*vyL-?w04z=-uhea0!%!r^sl?A?M6kYRdEj( zxngA`OpTd3?z#Sd&}h;2g=U6&bKXYWdw$Wt279~yBuV1-yH_>0+o}B#e{@n3;tUnn z78xwL3`SUpA!mRPmQ)qhFlN++k7wT~g)w@VpH!z_JOsZGc1u1q$RBY4kIK-1i_6aW zMwy7+Eca*K0F|<#C+P^`>02TWhkb4mZbX%`P+B(Z=`3ZKX@3?6C8q+~`Yy}$SM;w# zP{DC^7If~>^(%(2+jSjPbXOc=B))qjT_ud(+1B38Y%(+{Bfu&WkOa*hOMvGMfzP^EB-pqLqfRbhnT&Z^r2rW?fRVraIo=8;P^C^t zba@nWdbzz_X>u1m_i4smZ*|J8)D8Gf&wT%~D&MtlS{%P_bS^%m>3? zX@u?4hqBRmLSkIN+*wY`PJ2Z4+wGv!H}5{vPtXm%f8%}_m~TNYUO^REei8kd_YyP5 zrO}R0l^2Vc5D|76cVAKRof2^`UthA{cWb!eim+iXI;ftsa>F>Otl#d^{?7fRB;@aU zM?Khg&!HP=*3S!2e(TC`y;p);7Q!aU?ojW>*NMEAPJ5?akbt87ve&I*knI}N@Irgc zR?r#zOSNpXO)=c97bBrzZ+Lc>w-40B7B~Tj^z!1$1!T1KsW@_Uy;O2h1wrba6rhlN zLg*KjHpA8IQ1oDV)sRnoXWQ9-?=olGs|p$TJhUunJc{jbY9Ys48!xHgv;;Ao0X~V+ zf8|gxHx&u_OwFjOJ7vLl%_ENc;mL7bRU74c1@A4J?~R@ZbyA12iI*H(6ml^7KJR=$(1_gRrUx=VYQ)!FTKnDstt z?1uN^>Y3;+p_+Ub8J@Ly6w-*&=rl0}^iX&-^~u+B3hR>R<6 z%J59pt>3fMOKaEJAxyB=GOhVV`$gF0?L;vj3hqBvGMu1`p7TxtDff}lN#Nc5(=e%5 z@MHzrVcpRRiqSIR2@7g#15$=r~Kb5|#XW~SCURtbz}HKFsT zU3UR+5=AzE6`JCUYey*@d&Fenw7_6$e{RqlT0@`WcpTC^M(eIGruG`v1fg~HNxnau-1+tzr}Q4g(f zr*P>I@s!|3rI3^dquSntYtk_ITt#-zIt6ba^voR#Kk2-i`lQA$G^+I67uC|!cJpr= zfxn2~JAz+cPf&sKTfK(sUH{zs?yQp&=U|#)<70svt_J)_=)`KudbqpL)4%{8goljcGAU3D3qZSPQD4xh$qhp6J`W-U(K1F0Ia1aJdYI;9YKCob5J#|v z<{MZfvuEUOUFo@f^a^D+x?uf4$mlyphKYx-)DeNExsI*QHfu0svA>u{y&E7?K*sF0 zmLGC4Y82-&xCIXt2#R8arnpyC%6CYnSf$w>3TJTlby`hQ|Au;Nr~R>(t_lMZ!?Jd)F6cwJ+Gn zVB#}X%Y*61fc25}g1FHfTRX}P@B}k3D=3o1a@q6~dc-FJQBvDT6b4(k*E*$|;jHW= z-(#YmJ%Fb^j3(bzHMtt87U`XcKgN4uoUaBQUnm}{IWIpd zYODGn>E4!lJxs}(+FGeK&XKnTyWOo6PC*5x5LZvnR?Wk${AN^EJlNR6H_-?Rk zrkXdj<+hA(^s48Z-M1;}pYvQn*JGHoC#&zyX0vjt*Z5?a0Rn!NwCye>jK#^G^Mp1nY&6o-J0jhnv6-D}qNe{;Ou|7e1!yV_gxYY(>k4qoo|;pfXnG$8)BN zS3if8I|_=gaN_U>$LX9H8Vm$@HZo(T>E ze{_g^Web#ELe9-`n1bZ&Wrd)<7b{0vb_$=O6k8_(zugc{&Ks_lE5i0zFL)-Y#I!VJ zD?)Y5`4XTg(MPNhrS%mg3tRBql~zn=C#J8~X&i&6dsN#3B(@f1@%(j5mQm2mS>tO5 zEzH0Dqr*luOl|C+;4fFSg5;pt@sFR10Y9J%AeN#?R5T@)$V<_+$$h?- znqVu$&tkA%?hMB>fJn7`3&$UFB!d2IT)j{z57092tRbjn59Pz1{3-d;A;b-c*USIJ z7KgjAwJiDagqg|u;Bfzd5XSlyK{3lb!{jth#O^KuC~a@5BTOszCui^4pqI@_S4#dw z!o5`WyTDJDg~s*NK9BRfdyj2;(T8@zy&O&!bNB2x5z_sAhLUFDvD2wB&@k9S-fDX? zTS-PD&kiq@M}ErRkQC#4njaurqd~kvMMpW|9upx8%v>k6Uz&NY&oDv{E9MzEBwG9- zC5I@ylcSS#<1xFeXo(Yl)D@o!(cX;hrHVTLjAvkk<$A@NpU|a4$%+eNvoq0+kL*JfR$VS@N0UWT&Np9g)oc{px=ONmdm}Wg5;;1NWByv8Wd=?hW$8yY&GbyVSj#csW6HwQnZA3BvP!k zILOs1UnQn;MdBm)kylLQ>Efv8T(9sOdLjBWmJb2J@ql-wB!Pw>`EHfto4TuDdSY#- z!CE`0fqlc#pCvU@OH})UX2gfnF2Oj}=l+c|MB=1p8+m5|{6=Y}m5OMUrRg(JF>3JL z@vzI!iN8`4XvNwOm0n&YitK;7$6R0GA-tZt{SjtK{GkL{>A((6d^)3;`ic}K3fGdT zT!@m=m`3o2hbk7j0%iNR0Fe&Ec~7zhvK-O^muIT_Lu(z;rU`KTPWd{;DB|j6Y~Uv{ z-S#7#UE!ixMZT_D;Jr5$rUFNFICL^Mhf%g&hxux9bw%kD_&xQO^jgm-dy`l7Rdytp zlWK-hXAKHC3w=)CL}_A?1qOBV%um4m^4}SPUUs9&^&e8f-IJ-hv0j(Pdq?)aBGu7= z>So_PLw-*x`n zsbMWr_oGmojzz?;ONKZ;ljl01ef|n!y3QkpyQI^HeYrej+aBf?L^+uBqsy45L(@ux z-1u~gO+peVm&g`|zZ&o*(NcKaX-t?n*C(>WpPmAb8Vd;ub5FWz!2YI~04DDf^9cNN z4Zsvl?&mt{#j_vB1L#veydPT#1|amGxq46Ma|IB99`cd?f_JU`8C?8Q28^md^k-e{q4x_dd5$u{Slf$U%%kPzL$GO@vAWC3n z|DluXSprF`se2))TK{~9DA6h|f9J7oEOQ5aSXy(HrA{?N+`fXCyv5)13>MU1J+SWO zRXx~!1Q@v~Ca&1$iY@KoZsXtdgERc$z*I%J+fqt?S~=mTeBaE1i82)&hW06=(jCBo zg50r1x+b&7JwA$Hw98yu$QQo>5$=~Az525@lnOt13{uNSVFgA$a|1FU)d(VP0(j4jtZ${X~+uAf(`WC;Fd3XuRLkq-r3qUiqEhkp@Tx&qREJEMdYup3ilJ7Qf0S?MPmVzea`j@tkpe&VcUHQ{1i4Rk>8 zBxZSmvEA0GRE|M?EL)oz*b2?-hcUa2D!!!9wM*Vv?`_d{yoE{k1`^+qkv@>Q(Q0hTb(o1=r)6~92(Om2%??@w zUftKO{pW|??P#02HH6>F|EB{w3!S8#cI-9w=C0k6#?QZaxd`2?9nKfRdUtL(A=uwW z0jZI#;@eWM>z3IsB(M`URbs`izY%F2&Fd(kLJwpuByy7t5 z6hXZI3Oe99^eguqFM8DQq#Eeucy(RY?7qN!-BWhHuRE38_=NKB#zD6;5nwzs&d?MX zeqYf5HNEBpVGJ5Oy|(?iOni>qNF`_Z^XT3xiCTtxn*#`z+)h*E$)o1+ini=sJV&9nfaIZ+>UucCYUYdOSTtVzlL$48InJcG zYn8ocofd*Ya&GGj{LKt$cguELm4o{sfB4;hf3#Hpx}dFE1Y&pJZM~rd9)YKe{bjbN zsXb>`do`Sot1%SB?AX~VzJG4$oXqZz-R|IQ%fRQ8N}XA?y1Oejr?lQP1# z-n^US5}Q_nPz$54D-`aG#D@;zXO%-fnJ)66heg)_D|cJF{hW3Y{=PRrTB2U$xp%qN zb0An(>u&PQ=FR=jeh+diP{eA|$7SNSFn#oF)Ss&bB1rt2H1BgwdOhZaRY@o|hnNWlh;C`u3uN2-b|_ zSYqCN+@^Op*0(OU`sI2Idzv3ns{x~;1(4j254)&K72BK8t}^l1UvX0DOzy%U#>jzY z$XMkwhgdOvnG{;J5)J%OaG!j3UvtC7v7OgN?c8J7Wm(I-%*t534E5)08dwtP&G!yC#D&s)4KCCM&^u-4bRe*b~0Y1x>E|hKqp8JDv_HFs8(mX zStFU%+Ex2U0|OcgBGES&8k3EX8h)?L{pxJgBX|QloYPaAN|VFRahlmZry4;rm_E3f zyGd*@<^U`*DlxturV0^%N`6*4R$7dTy-~nHls0(aB{-{tP*FC?K+bhL zx>gI~+%vz538!73K`8u;o(AtN8;5;C6I+mQTPTMkP{1`KkFIjP3xf{IfT8q~W$u?*1p8tnFx&ogR+fDHCdfE+Yc7~~ojni}_Sg;{#Q`7m!_k@WZ@tF4aWY)Rn zE`3FaVW4VE%}Noo>wUaYfPlKH+q@Cood4p{+v}JAtTHT+IMAZ|A9rZwxcBlHnP&gK7QU zlgAvEm&v0&K zALKH!n~5;uW3ok0Y3kU|!jV}tii%*ChZ3|?1@Mwq`QQq~6!TL#!0wo+vyzo7Ne@&Y zj^kD%v8#?<=D{sXfvWYxh~*#yPxT1PilmN8g5LXCqCi~AwVF* zx}ZD#`)mc&KzuNjVdAdO7^P0dfLH~gOuQ4BjJ1(kUm*;g{MzfnWUK0)j%ol^faTC| zPGL$0s-5O(hCW?VO(n?*1_})Kx>>M@{I!bJla0Sh524F95zw#;lwbYcX!>WuvB87^ z3fA+NH^ZveQ<(AM1(>eFZw?_VvFW5G8?Dk=pV~A^vApDck`S1+wl!sn&;FXd2534e z-5hGvQfO~ng7K-QYxtCQlET!M`^O#PIuA?GM0$R*^$M<^|3zqJxa@*AlvZoJcKoYQ z3;JG}VEk{D)>qq>V*YSOTyJb|q7f(c0snQ`@@RHE?l7OTzHGS@>b+C!mZcDysrhf} zGNc`raf78!$qLzq=wJFivZ=~D;1#FYh!shIj8*HBj+b$)rq(MAd$epv-=Yn($?VBB zVFL`qt2I?-n8@%QGf)_yXSTBXuQRhnC}@7oZ7XyB@efxFX>s;%F-e_kqV)XWY44H} zwliN7$%(v-wI5A@WqjQ|dA;t?aEoJ)=hr&h^SNkzOE*Y;$`hd8>n#tqifSJED}w-R@%o+nm#Fqduxz zd%D8zAyOswu{;Z1#exJWT2h5z1mhy5wr^=~`(0@Rs4^K|*Xa*6;STd?4A9xgDW!1( zKplh&R=o{L%l>)<2l1g|+COCkYig%>&j0)bzr*+|T7y*QhWdD zbid)B?*BWt&+h%2ZO%AP?fl`X&~DPA*$gSk0!G#rUueBx zsxaEhYI=l<#2xE_6GdxOPw~GWO6fRx05}{k#6{G>rqKJHJXu92Zg3qwyofI3qfa+j zN?Q7gUoBMwDf+@&Nw_XMbW!wOd1g(EPqm)wee2t+-6YHWhrY4} zfe;ziMa~Yb`uqrNHS|poU3DvPW)r>}u@-N2V@WWdTn@v*EnF12e@P(y)fA7!`N&Cu zg@BbCOEa4v<3iNTf?#lO7syuWjV+e_Ip+j!DsOGu9du}W)lyVz@-OeIaYM&#R;zW3 z+l=`iHkJt$?azuko->|83*lHnbc(%m?4w)|fxixFp*gmYqhIJm)&{BS3_K<0t6Y6u zLrViHL?fH490`Hx^ub4tVd^||P3GSdOd9%52wpl$!ZrO^T#OC_MS-E94)o$=GQB_~AB;E0<%d~E6uU9v4d|z)X@E>vE z9Dvr0Vf%+GLtBT7Ipk=odzYl|4xV$K%#(6@0U+*^d*>Z$#b^R*UJ;q_9RS50FPKOG z_7mO&)duSglGyS*n#pc2=c!>aND)8ebC`KIfuOpo-G`mK^Pv)wx zy@UlH^Qub=-jZb8pg{C>N;Mpn@2otydSmSGI@a6dP+t80XMZ}!B9n;Tb>te8W?Y=% zpS>t~1{k5md4gaZZ#Q%GCa-!#7_L@U6YSqvr(jzf@AWh)gdh?Fh@7VlOi_85-we$z_li(?wP&b z;k1dJ=w=)Pu0Ari=IT_4)ko*AdZ_6JNwcbHmqnfQNyVMc`*~us8+IkTU%}4*&ztYO zcpXTeJbLtqrEB3Qu`ZcW%ZJBL;E-@x^d5eBID`jJctF7e3La4KfPx1UJfPqK1rI2A zK*0kF9#HUrf(H~lpx^-o4=DKmB?_doOVS=adXXe0Dx~tzCwyp@K6H#9Q1F0)2NXP@ z-~j~>D0o1@0}38c@PL8`6g;5d0R;~zctF7e3La4KfPx1U{C|al7DrM&k<8FDN{dve Qvh|Uan7n9_u-?c20}S8J9RL6T diff --git a/apps/legacy/computer-vision/assets/icons/favicon.png b/apps/legacy/computer-vision/assets/icons/favicon.png deleted file mode 100644 index e75f697b1801871ad8cd9309b05e8ffe8c6b6d01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1466 zcmV;r1x5OaP)F>1w{Y zBeHf{*q3<2*AtQf4s&-m0MsH$EBv51Nj=s=Appw|nd1Yi(-DKZBN$9bAlWN83A_)0 z$4U=S!XyBuAm(`t#aW=l*tHPgHRE~MrmzGWN*Eidc=$BV2uYe|Rpi@t-me&ht6I?| ze$M(9=%DxSVTwNL7B*O`z`fRE$T)18O{B^J5OHo#W%kD-}gAcJO3n1x6Q{X*TFh-d!yx?Z$G16f%*K?exQ+p ztyb%4*R_Y=)qQBLG-9hc_A|ub$th|8Sk1bi@fFe$DwUpU57nc*-z8<&dM#e3a2hB! z16wLhz7o)!MC8}$7Jv9c-X$w^Xr(M9+`Py)~O3rGmgbvjOzXjGl>h9lp*QEn%coj{`wU^_3U|=B`xxU;X3K1L?JT?0?+@K!|MWVr zmC=;rjX@CoW3kMZA^8ZAy52^R{+-YG!J5q^YP&$t9F`&J8*KzV4t3ZZZJ>~XP7}Bs z<}$a~2r_E?4rlN=(}RBkF~6rBo}Sz7#r{X49&!gODP+TcB*@uq57EII-_>qWEt44B z`5o+tysMLY*Dq^n@4_vzKRu3We5|DI+i%NV=Z|)QAl{di_@%07*qoM6N<$f(5Fv<^TWy diff --git a/apps/legacy/computer-vision/assets/icons/icon.png b/apps/legacy/computer-vision/assets/icons/icon.png deleted file mode 100644 index a0b1526fc7b78680fd8d733dbc6113e1af695487..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22380 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 diff --git a/apps/legacy/computer-vision/assets/icons/splash.png b/apps/legacy/computer-vision/assets/icons/splash.png deleted file mode 100644 index 0e89705a9436743e42954d3744a0e7ff0d3d4701..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47346 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 diff --git a/apps/legacy/computer-vision/assets/icons/swm_icon.svg b/apps/legacy/computer-vision/assets/icons/swm_icon.svg deleted file mode 100644 index 8c62f039be..0000000000 --- a/apps/legacy/computer-vision/assets/icons/swm_icon.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/apps/legacy/computer-vision/babel.config.js b/apps/legacy/computer-vision/babel.config.js deleted file mode 100644 index 6b2006979c..0000000000 --- a/apps/legacy/computer-vision/babel.config.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = function (api) { - api.cache(true); - return { - presets: ['babel-preset-expo'], - plugins: ['react-native-worklets/plugin'], - }; -}; diff --git a/apps/legacy/computer-vision/colors.ts b/apps/legacy/computer-vision/colors.ts deleted file mode 100644 index feb75ac336..0000000000 --- a/apps/legacy/computer-vision/colors.ts +++ /dev/null @@ -1,6 +0,0 @@ -const ColorPalette = { - primary: '#001A72', - strongPrimary: '#020F3C', -}; - -export default ColorPalette; diff --git a/apps/legacy/computer-vision/components/BottomBar.tsx b/apps/legacy/computer-vision/components/BottomBar.tsx deleted file mode 100644 index 4edad755d2..0000000000 --- a/apps/legacy/computer-vision/components/BottomBar.tsx +++ /dev/null @@ -1,74 +0,0 @@ -import ColorPalette from '../colors'; -import FontAwesome from '@expo/vector-icons/FontAwesome'; -import { View, TouchableOpacity, StyleSheet, Text } from 'react-native'; -import { useSafeAreaInsets } from 'react-native-safe-area-context'; -import DeviceInfo from 'react-native-device-info'; - -const isDevice = !DeviceInfo.isEmulatorSync(); - -export const BottomBar = ({ - handleCameraPress, - runForward, - hasImage = true, - isGenerating = false, -}: { - handleCameraPress: (isCamera: boolean) => void; - runForward: () => void; - hasImage?: boolean; - isGenerating?: boolean; -}) => { - const { bottom } = useSafeAreaInsets(); - const disabled = !hasImage || isGenerating; - return ( - - - handleCameraPress(false)}> - - - isDevice && handleCameraPress(true)}> - - - - - - {isGenerating ? 'Running...' : hasImage ? 'Run model' : 'Pick an image to run the model'} - - - - ); -}; - -const styles = StyleSheet.create({ - bottomContainer: { - width: '100%', - gap: 15, - alignItems: 'center', - paddingTop: 16, - paddingHorizontal: 16, - }, - bottomIconsContainer: { - flexDirection: 'row', - justifyContent: 'space-evenly', - width: '100%', - }, - button: { - width: '100%', - height: 50, - justifyContent: 'center', - alignItems: 'center', - backgroundColor: ColorPalette.primary, - color: '#fff', - borderRadius: 8, - }, - buttonDisabled: { - backgroundColor: '#888', - }, - buttonText: { - color: '#fff', - fontSize: 16, - }, -}); diff --git a/apps/legacy/computer-vision/components/BottomBarWithTextInput.tsx b/apps/legacy/computer-vision/components/BottomBarWithTextInput.tsx deleted file mode 100644 index 045ea06c16..0000000000 --- a/apps/legacy/computer-vision/components/BottomBarWithTextInput.tsx +++ /dev/null @@ -1,156 +0,0 @@ -import React, { useState } from 'react'; -import { - View, - Text, - TextInput, - TouchableOpacity, - StyleSheet, - KeyboardAvoidingView, - Platform, -} from 'react-native'; -import { Ionicons } from '@expo/vector-icons'; -import ColorPalette from '../colors'; - -interface BottomBarProps { - runModel: (input: string, numSteps: number) => void; - stopModel: () => void; - numSteps: number; - setSteps: React.Dispatch>; - isGenerating?: boolean; - isReady?: boolean; - showTextInput: boolean; - setShowTextInput: React.Dispatch>; - keyboardVisible: boolean; -} - -export const BottomBarWithTextInput = ({ - runModel, - stopModel, - numSteps, - setSteps, - isGenerating, - isReady, - showTextInput, - setShowTextInput, - keyboardVisible, -}: BottomBarProps) => { - const [input, setInput] = useState(''); - - const decreaseSteps = () => setSteps((prev) => Math.max(5, prev - 5)); - const increaseSteps = () => setSteps((prev) => Math.min(50, prev + 5)); - - if (!showTextInput) { - if (isGenerating) { - return ( - - Stop model - - ); - } else { - return ( - setShowTextInput(true)} - disabled={!isReady} - > - Run model - - ); - } - } - - return ( - - - - { - setShowTextInput(false); - setInput(''); - runModel(input, numSteps); - }} - disabled={!isReady || isGenerating} - > - - - - - - Steps: {numSteps} - - - - - - - + - - - - - ); -}; - -const styles = StyleSheet.create({ - container: { - alignItems: 'center', - }, - inputContainer: { - flexDirection: 'row', - alignItems: 'center', - justifyContent: 'center', - }, - input: { - flex: 1, - borderRadius: 6, - padding: 8, - marginRight: 8, - backgroundColor: '#fff', - color: '#000', - }, - stepsContainer: { - width: '100%', - flexDirection: 'row', - alignItems: 'center', - justifyContent: 'space-between', - marginTop: 10, - }, - stepsButtons: { - flexDirection: 'row', - }, - button: { - width: '100%', - height: 40, - justifyContent: 'center', - alignItems: 'center', - backgroundColor: ColorPalette.primary, - borderRadius: 8, - }, - buttonText: { - color: '#fff', - fontSize: 16, - textAlign: 'center', - }, - iconButton: { - marginHorizontal: 5, - width: 40, - }, - text: { - flex: 1, - fontSize: 16, - color: '#000', - }, - textWhite: { - color: '#fff', - }, -}); diff --git a/apps/legacy/computer-vision/components/BoundingBoxes.tsx b/apps/legacy/computer-vision/components/BoundingBoxes.tsx deleted file mode 100644 index 2fef444ce4..0000000000 --- a/apps/legacy/computer-vision/components/BoundingBoxes.tsx +++ /dev/null @@ -1,90 +0,0 @@ -import React from 'react'; -import { StyleSheet, Text, View } from 'react-native'; -import { Detection, LabelEnum } from 'react-native-executorch/legacy'; -import { labelColor, labelColorBg } from './utils/colors'; - -interface Props { - detections: Detection[]; - scaleX: number; - scaleY: number; - offsetX: number; - offsetY: number; - mirrorLabels?: boolean; - containerWidth?: number; -} - -export default function BoundingBoxes({ - detections, - scaleX, - scaleY, - offsetX, - offsetY, - mirrorLabels = false, - containerWidth, -}: Props) { - return ( - <> - {detections.map((det, i) => { - const left = det.bbox.x1 * scaleX + offsetX; - const top = det.bbox.y1 * scaleY + offsetY; - const width = (det.bbox.x2 - det.bbox.x1) * scaleX; - const height = (det.bbox.y2 - det.bbox.y1) * scaleY; - const labelTop = top < 26 ? top + height + 2 : top - 26; - - return ( - - - - - {String(det.label)} ({(det.score * 100).toFixed(1)}%) - - - - ); - })} - - ); -} - -const styles = StyleSheet.create({ - bbox: { - position: 'absolute', - borderWidth: 2, - borderRadius: 4, - }, - label: { - position: 'absolute', - paddingHorizontal: 6, - paddingVertical: 2, - borderRadius: 4, - }, - labelText: { - color: 'white', - fontSize: 11, - fontWeight: '600', - }, -}); diff --git a/apps/legacy/computer-vision/components/ErrorBanner.tsx b/apps/legacy/computer-vision/components/ErrorBanner.tsx deleted file mode 100644 index a5bebc504f..0000000000 --- a/apps/legacy/computer-vision/components/ErrorBanner.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import React from 'react'; -import { View, Text, TouchableOpacity, StyleSheet } from 'react-native'; - -interface ErrorBannerProps { - message: string | null; - onDismiss: () => void; -} - -export default function ErrorBanner({ message, onDismiss }: ErrorBannerProps) { - if (!message) return null; - - return ( - - - {message} - - - ✕ - - - ); -} - -const styles = StyleSheet.create({ - container: { - backgroundColor: '#FEE2E2', - borderLeftWidth: 4, - borderLeftColor: '#EF4444', - borderRadius: 8, - marginHorizontal: 16, - marginVertical: 8, - paddingVertical: 10, - paddingLeft: 12, - paddingRight: 8, - flexDirection: 'row', - alignItems: 'center', - }, - message: { - flex: 1, - color: '#991B1B', - fontSize: 14, - lineHeight: 20, - }, - closeButton: { - padding: 4, - marginLeft: 8, - }, - closeText: { - color: '#991B1B', - fontSize: 16, - fontWeight: '600', - }, -}); diff --git a/apps/legacy/computer-vision/components/ImageWithBboxes.tsx b/apps/legacy/computer-vision/components/ImageWithBboxes.tsx deleted file mode 100644 index 82b31ec515..0000000000 --- a/apps/legacy/computer-vision/components/ImageWithBboxes.tsx +++ /dev/null @@ -1,76 +0,0 @@ -import React from 'react'; -import { Image, StyleSheet, View } from 'react-native'; -import { Detection } from 'react-native-executorch/legacy'; -import BoundingBoxes from './BoundingBoxes'; - -interface Props { - imageUri: string; - detections: Detection[]; - imageWidth: number; - imageHeight: number; -} - -export default function ImageWithBboxes({ imageUri, detections, imageWidth, imageHeight }: Props) { - const [layout, setLayout] = React.useState({ width: 0, height: 0 }); - - const calculateAdjustedDimensions = () => { - const imageRatio = imageWidth / imageHeight; - const layoutRatio = layout.width / layout.height; - - let sx, sy; - if (imageRatio > layoutRatio) { - // image is more "wide" - sx = layout.width / imageWidth; - sy = layout.width / imageRatio / imageHeight; - } else { - // image is more "tall" - sy = layout.height / imageHeight; - sx = (layout.height * imageRatio) / imageWidth; - } - - return { - scaleX: sx, - scaleY: sy, - offsetX: (layout.width - imageWidth * sx) / 2, - offsetY: (layout.height - imageHeight * sy) / 2, - }; - }; - - const { scaleX, scaleY, offsetX, offsetY } = calculateAdjustedDimensions(); - - return ( - { - const { width, height } = event.nativeEvent.layout; - setLayout({ width, height }); - }} - > - - - - ); -} - -const styles = StyleSheet.create({ - container: { - flex: 1, - position: 'relative', - }, - image: { - flex: 1, - width: '100%', - height: '100%', - }, -}); diff --git a/apps/legacy/computer-vision/components/ImageWithMasks.tsx b/apps/legacy/computer-vision/components/ImageWithMasks.tsx deleted file mode 100644 index 9bd542566a..0000000000 --- a/apps/legacy/computer-vision/components/ImageWithMasks.tsx +++ /dev/null @@ -1,244 +0,0 @@ -import React, { useState } from 'react'; -import { Image, StyleSheet, View, Text } from 'react-native'; -import { - Canvas, - Image as SkiaImage, - Skia, - AlphaType, - ColorType, - SkImage, - Rect, - Group, -} from '@shopify/react-native-skia'; - -const INSTANCE_COLORS = [ - [255, 87, 51, 180], - [51, 255, 87, 180], - [51, 87, 255, 180], - [255, 51, 246, 180], - [51, 255, 246, 180], - [243, 255, 51, 180], - [141, 51, 255, 180], - [255, 131, 51, 180], - [51, 255, 131, 180], - [131, 51, 255, 180], -]; - -const MAX_MASK_DIM = 256; - -/** Display-only data — no raw mask buffers. */ -export interface DisplayInstance { - bbox: { x1: number; y1: number; x2: number; y2: number }; - label: string; - score: number; - maskImage: SkImage; -} - -/** - * Convert raw segmentation output into lightweight display instances. - * Call this eagerly (in the forward callback) so raw Uint8Array masks - * can be garbage-collected immediately. - * @param rawInstances - Array of raw segmentation instances with mask buffers to convert. - * @returns Array of lightweight {@link DisplayInstance} objects with pre-rendered Skia images. - */ -export function buildDisplayInstances( - rawInstances: { - bbox: { x1: number; y1: number; x2: number; y2: number }; - mask: Uint8Array; - maskWidth: number; - maskHeight: number; - label: string | number; - score: number; - }[] -): DisplayInstance[] { - return rawInstances - .map((inst, i) => { - const color = INSTANCE_COLORS[i % INSTANCE_COLORS.length]; - const img = createMaskImage(inst.mask, inst.maskWidth, inst.maskHeight, color); - if (!img) return null; - return { - bbox: inst.bbox, - label: String(inst.label), - score: inst.score, - maskImage: img, - }; - }) - .filter((d): d is DisplayInstance => d !== null); -} - -function createMaskImage( - mask: Uint8Array, - srcW: number, - srcH: number, - color: number[] -): SkImage | null { - const downscale = Math.min(1, MAX_MASK_DIM / Math.max(srcW, srcH)); - const dstW = Math.max(1, Math.round(srcW * downscale)); - const dstH = Math.max(1, Math.round(srcH * downscale)); - - const pixels = new Uint8Array(dstW * dstH * 4); - const r = color[0], - g = color[1], - b = color[2], - a = color[3]; - - for (let dy = 0; dy < dstH; dy++) { - const sy = Math.min(Math.floor(dy / downscale), srcH - 1); - for (let dx = 0; dx < dstW; dx++) { - const sx = Math.min(Math.floor(dx / downscale), srcW - 1); - if (mask[sy * srcW + sx] > 0) { - const idx = (dy * dstW + dx) * 4; - pixels[idx] = r; - pixels[idx + 1] = g; - pixels[idx + 2] = b; - pixels[idx + 3] = a; - } - } - } - - const data = Skia.Data.fromBytes(pixels); - const image = Skia.Image.MakeImage( - { - width: dstW, - height: dstH, - alphaType: AlphaType.Premul, - colorType: ColorType.RGBA_8888, - }, - data, - dstW * 4 - ); - data.dispose(); - return image; -} - -interface Props { - imageUri: string; - instances: DisplayInstance[]; - imageWidth: number; - imageHeight: number; -} - -export default function ImageWithMasks({ imageUri, instances, imageWidth, imageHeight }: Props) { - const [layout, setLayout] = useState({ width: 0, height: 0 }); - - const scaleX = layout.width / (imageWidth || 1); - const scaleY = layout.height / (imageHeight || 1); - const scale = Math.min(scaleX, scaleY); - const offsetX = (layout.width - imageWidth * scale) / 2; - const offsetY = (layout.height - imageHeight * scale) / 2; - - return ( - { - const { width, height } = e.nativeEvent.layout; - setLayout({ width, height }); - }} - > - - - {instances.length > 0 && ( - - - {instances.map((inst, idx) => { - const mx = inst.bbox.x1 * scale + offsetX; - const my = inst.bbox.y1 * scale + offsetY; - const mw = (inst.bbox.x2 - inst.bbox.x1) * scale; - const mh = (inst.bbox.y2 - inst.bbox.y1) * scale; - return ( - - ); - })} - - {instances.map((inst, idx) => { - const color = INSTANCE_COLORS[idx % INSTANCE_COLORS.length]; - const bboxX = inst.bbox.x1 * scale + offsetX; - const bboxY = inst.bbox.y1 * scale + offsetY; - const bboxW = (inst.bbox.x2 - inst.bbox.x1) * scale; - const bboxH = (inst.bbox.y2 - inst.bbox.y1) * scale; - - return ( - - - - ); - })} - - - {instances.map((inst, idx) => { - const color = INSTANCE_COLORS[idx % INSTANCE_COLORS.length]; - const bboxX = inst.bbox.x1 * scale + offsetX; - const bboxY = inst.bbox.y1 * scale + offsetY; - - return ( - - - {inst.label || 'Unknown'} {(inst.score * 100).toFixed(0)}% - - - ); - })} - - )} - - ); -} - -const styles = StyleSheet.create({ - container: { - flex: 1, - position: 'relative', - }, - image: { - width: '100%', - height: '100%', - }, - overlay: { - ...StyleSheet.absoluteFill, - }, - canvas: { - width: '100%', - height: '100%', - }, - labelContainer: { - position: 'absolute', - paddingHorizontal: 6, - paddingVertical: 2, - borderRadius: 4, - }, - labelText: { - color: 'white', - fontSize: 12, - fontWeight: '600', - }, -}); diff --git a/apps/legacy/computer-vision/components/ImageWithOCRBboxes.tsx b/apps/legacy/computer-vision/components/ImageWithOCRBboxes.tsx deleted file mode 100644 index 07175b8596..0000000000 --- a/apps/legacy/computer-vision/components/ImageWithOCRBboxes.tsx +++ /dev/null @@ -1,93 +0,0 @@ -// Import necessary components -import React from 'react'; -import { Image, StyleSheet, View } from 'react-native'; -import Svg, { Polygon } from 'react-native-svg'; -import { OCRDetection } from 'react-native-executorch/legacy'; - -interface Props { - imageUri: string; - detections: OCRDetection[]; - imageWidth: number; - imageHeight: number; -} - -export default function ImageWithOCRBboxes({ - imageUri, - detections, - imageWidth, - imageHeight, -}: Props) { - const [layout, setLayout] = React.useState({ width: 0, height: 0 }); - - const calculateAdjustedDimensions = () => { - const imageRatio = imageWidth / imageHeight; - const layoutRatio = layout.width / layout.height; - let sx, sy; - if (imageRatio > layoutRatio) { - sx = layout.width / imageWidth; - sy = layout.width / imageRatio / imageHeight; - } else { - sy = layout.height / imageHeight; - sx = (layout.height * imageRatio) / imageWidth; - } - return { - scaleX: sx, - scaleY: sy, - offsetX: (layout.width - imageWidth * sx) / 2, - offsetY: (layout.height - imageHeight * sy) / 2, - }; - }; - - return ( - { - const { width, height } = event.nativeEvent.layout; - setLayout({ width, height }); - }} - > - - - {detections.map((detection, index) => { - const { scaleX, scaleY, offsetX, offsetY } = calculateAdjustedDimensions(); - const { x1, y1, x2, y2 } = detection.bbox; - const pointsString = [ - [x1, y1], - [x2, y1], - [x2, y2], - [x1, y2], - ] - .map(([x, y]) => `${x * scaleX + offsetX},${y * scaleY + offsetY}`) - .join(' '); - - return ( - - ); - })} - - - ); -} - -const styles = StyleSheet.create({ - container: { - flex: 1, - position: 'relative', - }, - image: { - flex: 1, - width: '100%', - height: '100%', - }, - svgContainer: { - position: 'absolute', - top: 0, - left: 0, - right: 0, - bottom: 0, - }, -}); diff --git a/apps/legacy/computer-vision/components/ModelPicker.tsx b/apps/legacy/computer-vision/components/ModelPicker.tsx deleted file mode 100644 index 9a81bec371..0000000000 --- a/apps/legacy/computer-vision/components/ModelPicker.tsx +++ /dev/null @@ -1,198 +0,0 @@ -import React, { useEffect, useRef, useState } from 'react'; -import { - Dimensions, - Modal, - ScrollView, - StyleSheet, - Text, - TouchableOpacity, - View, -} from 'react-native'; - -export type ModelOption = { - label: string; - value: T; -}; - -type Props = { - models: ModelOption[]; - selectedModel: T; - onSelect: (model: T) => void; - label?: string; - disabled?: boolean; -}; - -const DROPDOWN_MAX_HEIGHT = 200; - -export function ModelPicker({ models, selectedModel, onSelect, label, disabled }: Props) { - const [open, setOpen] = useState(false); - const [triggerHeight, setTriggerHeight] = useState(0); - const [expandUp, setExpandUp] = useState(false); - const [dropdownTop, setDropdownTop] = useState(0); - const triggerRef = useRef>(null); - const selected = models.find((m) => m.value === selectedModel); - - useEffect(() => { - if (disabled) setOpen(false); - }, [disabled]); - - const handlePress = () => { - if (disabled) return; - if (open) { - setOpen(false); - return; - } - triggerRef.current?.measure( - (_x: number, _y: number, _width: number, height: number, _pageX: number, pageY: number) => { - setTriggerHeight(height); - const spaceBelow = Dimensions.get('window').height - (pageY + height); - setExpandUp(spaceBelow < DROPDOWN_MAX_HEIGHT); - setDropdownTop(pageY); - setOpen(true); - } - ); - }; - - const dropdownStylePosition = expandUp - ? { - bottom: Dimensions.get('window').height - dropdownTop, - left: 12, - right: 12, - } - : { - top: dropdownTop + triggerHeight + 2, - left: 12, - right: 12, - }; - - return ( - <> - - - {label && {label}} - {selected?.label ?? '—'} - {open ? '▲' : '▼'} - - - - {open && ( - setOpen(false)} - animationType="none" - > - setOpen(false)} - /> - - - {models.map((item) => { - const isSelected = item.value === selectedModel; - return ( - { - onSelect(item.value); - setOpen(false); - }} - activeOpacity={0.7} - > - - {item.label} - - - ); - })} - - - - )} - - ); -} - -const styles = StyleSheet.create({ - container: { - marginHorizontal: 12, - marginVertical: 4, - alignSelf: 'stretch', - zIndex: 100, - }, - trigger: { - flexDirection: 'row', - alignItems: 'center', - borderWidth: 1, - borderColor: '#C1C6E5', - borderRadius: 8, - paddingHorizontal: 12, - paddingVertical: 10, - backgroundColor: '#f5f5f5', - }, - triggerDisabled: { - opacity: 0.4, - }, - label: { - fontSize: 12, - color: '#888', - marginRight: 6, - }, - triggerText: { - flex: 1, - fontSize: 14, - color: '#001A72', - fontWeight: '500', - }, - chevron: { - fontSize: 10, - color: '#888', - marginLeft: 6, - }, - modalBackdrop: { - flex: 1, - backgroundColor: 'rgba(0, 0, 0, 0.3)', - }, - dropdown: { - position: 'absolute', - borderWidth: 1, - borderColor: '#C1C6E5', - borderRadius: 8, - backgroundColor: '#fff', - maxHeight: DROPDOWN_MAX_HEIGHT, - zIndex: 1000, - elevation: 5, - shadowColor: '#000', - shadowOffset: { width: 0, height: 4 }, - shadowOpacity: 0.15, - shadowRadius: 6, - }, - option: { - paddingHorizontal: 12, - paddingVertical: 10, - borderBottomWidth: 1, - borderBottomColor: '#f0f0f0', - }, - optionSelected: { - backgroundColor: '#e8ecf8', - }, - optionText: { - fontSize: 14, - color: '#333', - }, - optionTextSelected: { - color: '#001A72', - fontWeight: '600', - }, -}); diff --git a/apps/legacy/computer-vision/components/ProgressBar.tsx b/apps/legacy/computer-vision/components/ProgressBar.tsx deleted file mode 100644 index 304f964b4c..0000000000 --- a/apps/legacy/computer-vision/components/ProgressBar.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import React from 'react'; -import { View, StyleSheet } from 'react-native'; -import ColorPalette from '../colors'; - -type ProgressBarProps = { - numSteps: number; - currentStep: number; -}; - -export default function ProgressBar({ numSteps, currentStep }: ProgressBarProps) { - return ( - - {Array.from({ length: numSteps }).map((_, i) => ( - - ))} - - ); -} - -const styles = StyleSheet.create({ - progressBarContainer: { - flexDirection: 'row', - alignItems: 'center', - justifyContent: 'center', - marginVertical: 16, - width: '80%', - }, - progressStep: { - flex: 1, - height: 15, - }, - progressStepActive: { - backgroundColor: ColorPalette.primary, - }, - progressStepInactive: { - backgroundColor: '#e0e0e0', - }, - progressStepFirst: { - borderTopLeftRadius: 8, - borderBottomLeftRadius: 8, - }, - progressStepLast: { - borderTopRightRadius: 8, - borderBottomRightRadius: 8, - }, -}); diff --git a/apps/legacy/computer-vision/components/Spinner.tsx b/apps/legacy/computer-vision/components/Spinner.tsx deleted file mode 100644 index f436869ab8..0000000000 --- a/apps/legacy/computer-vision/components/Spinner.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import React from 'react'; -import { View, Text, StyleSheet, ActivityIndicator, Modal } from 'react-native'; -import ColorPalette from '../colors'; - -interface SpinnerProps { - visible: boolean; - textContent: string; -} - -const Spinner = ({ visible, textContent }: SpinnerProps) => { - return ( - - - - - {textContent} - - - - ); -}; - -const styles = StyleSheet.create({ - overlay: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - backgroundColor: 'rgba(0, 0, 0, 0.1)', - }, - container: { - padding: 25, - alignItems: 'center', - justifyContent: 'center', - }, - text: { - marginTop: 15, - color: ColorPalette.primary, - fontSize: 18, - fontWeight: 'bold', - }, -}); - -export default Spinner; diff --git a/apps/legacy/computer-vision/components/StatsBar.tsx b/apps/legacy/computer-vision/components/StatsBar.tsx deleted file mode 100644 index 621ecd21d1..0000000000 --- a/apps/legacy/computer-vision/components/StatsBar.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import React from 'react'; -import { View, Text, StyleSheet } from 'react-native'; - -interface Props { - inferenceTime: number | null; - detectionCount?: number | null; -} - -export function StatsBar({ inferenceTime, detectionCount }: Props) { - if (inferenceTime === null) return null; - - return ( - - Inference: {inferenceTime} ms - {detectionCount != null && ( - <> - · - - {detectionCount} detection{detectionCount !== 1 ? 's' : ''} - - - )} - - ); -} - -const styles = StyleSheet.create({ - container: { - flexDirection: 'row', - justifyContent: 'center', - alignItems: 'center', - gap: 8, - paddingVertical: 6, - }, - stat: { - fontSize: 13, - color: '#334155', - fontWeight: '500', - }, - separator: { - fontSize: 13, - color: '#94A3B8', - }, -}); diff --git a/apps/legacy/computer-vision/components/utils/cocoSkeleton.ts b/apps/legacy/computer-vision/components/utils/cocoSkeleton.ts deleted file mode 100644 index 9f1e051ab3..0000000000 --- a/apps/legacy/computer-vision/components/utils/cocoSkeleton.ts +++ /dev/null @@ -1,18 +0,0 @@ -export const COCO_SKELETON_CONNECTIONS = [ - ['NOSE', 'LEFT_EYE'], - ['NOSE', 'RIGHT_EYE'], - ['LEFT_EYE', 'LEFT_EAR'], - ['RIGHT_EYE', 'RIGHT_EAR'], - ['LEFT_SHOULDER', 'RIGHT_SHOULDER'], - ['LEFT_SHOULDER', 'LEFT_ELBOW'], - ['LEFT_ELBOW', 'LEFT_WRIST'], - ['RIGHT_SHOULDER', 'RIGHT_ELBOW'], - ['RIGHT_ELBOW', 'RIGHT_WRIST'], - ['LEFT_SHOULDER', 'LEFT_HIP'], - ['RIGHT_SHOULDER', 'RIGHT_HIP'], - ['LEFT_HIP', 'RIGHT_HIP'], - ['LEFT_HIP', 'LEFT_KNEE'], - ['LEFT_KNEE', 'LEFT_ANKLE'], - ['RIGHT_HIP', 'RIGHT_KNEE'], - ['RIGHT_KNEE', 'RIGHT_ANKLE'], -] as const; diff --git a/apps/legacy/computer-vision/components/utils/colors.ts b/apps/legacy/computer-vision/components/utils/colors.ts deleted file mode 100644 index c38493a3b0..0000000000 --- a/apps/legacy/computer-vision/components/utils/colors.ts +++ /dev/null @@ -1,41 +0,0 @@ -export const CLASS_COLORS: number[][] = [ - [0, 0, 0, 0], - [51, 255, 87, 180], - [51, 87, 255, 180], - [255, 51, 246, 180], - [51, 255, 246, 180], - [243, 255, 51, 180], - [141, 51, 255, 180], - [255, 131, 51, 180], - [51, 255, 131, 180], - [131, 51, 255, 180], - [255, 255, 51, 180], - [51, 255, 255, 180], - [255, 51, 143, 180], - [127, 51, 255, 180], - [51, 255, 175, 180], - [255, 175, 51, 180], - [179, 255, 51, 180], - [255, 87, 51, 180], - [255, 51, 162, 180], - [51, 162, 255, 180], - [162, 51, 255, 180], -]; - -export function hashLabel(label: string): number { - let hash = 5381; - for (let i = 0; i < label.length; i++) { - hash = (hash + hash * 32 + label.charCodeAt(i)) % 1000003; - } - return 1 + (Math.abs(hash) % (CLASS_COLORS.length - 1)); -} - -export function labelColor(label: string): string { - const color = CLASS_COLORS[hashLabel(label)]!; - return `rgba(${color[0]},${color[1]},${color[2]},1)`; -} - -export function labelColorBg(label: string): string { - const color = CLASS_COLORS[hashLabel(label)]!; - return `rgba(${color[0]},${color[1]},${color[2]},0.75)`; -} diff --git a/apps/legacy/computer-vision/components/vision_camera/tasks/ClassificationTask.tsx b/apps/legacy/computer-vision/components/vision_camera/tasks/ClassificationTask.tsx deleted file mode 100644 index c99a7cdffa..0000000000 --- a/apps/legacy/computer-vision/components/vision_camera/tasks/ClassificationTask.tsx +++ /dev/null @@ -1,129 +0,0 @@ -import React, { useCallback, useEffect, useRef, useState } from 'react'; -import { StyleSheet, Text, View } from 'react-native'; -import { Frame, useFrameOutput } from 'react-native-vision-camera'; -import { scheduleOnRN } from 'react-native-worklets'; -import { models, useClassification } from 'react-native-executorch/legacy'; -import { FRAME_TARGET_RESOLUTION, TaskProps } from './types'; - -type Props = Omit; - -export default function ClassificationTask({ - frameKillSwitch, - onFrameOutputChange, - onReadyChange, - onProgressChange, - onGeneratingChange, - onFpsChange, - onErrorChange, -}: Props) { - const model = useClassification({ - model: models.classification.efficientnet_v2_s(), - }); - const [classResult, setClassResult] = useState({ label: '', score: 0 }); - const lastFrameTimeRef = useRef(Date.now()); - - useEffect(() => { - onErrorChange(model.error ? String(model.error) : null); - }, [model.error, onErrorChange]); - - useEffect(() => { - onReadyChange(model.isReady); - }, [model.isReady, onReadyChange]); - - useEffect(() => { - onProgressChange(model.downloadProgress); - }, [model.downloadProgress, onProgressChange]); - - useEffect(() => { - onGeneratingChange(model.isGenerating); - }, [model.isGenerating, onGeneratingChange]); - - const classRof = model.runOnFrame; - - const updateClass = useCallback( - (r: { label: string; score: number }) => { - setClassResult(r); - const now = Date.now(); - const diff = now - lastFrameTimeRef.current; - if (diff > 0) onFpsChange(Math.round(1000 / diff), diff); - lastFrameTimeRef.current = now; - }, - [onFpsChange] - ); - - const frameOutput = useFrameOutput({ - targetResolution: FRAME_TARGET_RESOLUTION, - pixelFormat: 'rgb', - dropFramesWhileBusy: true, - enablePreviewSizedOutputBuffers: true, - onFrame: useCallback( - (frame: Frame) => { - 'worklet'; - if (frameKillSwitch.getDirty()) { - frame.dispose(); - return; - } - try { - if (!classRof) return; - const result = classRof(frame); - if (result) { - let bestLabel = ''; - let bestScore = -1; - const entries = Object.entries(result); - for (let i = 0; i < entries.length; i++) { - const [label, score] = entries[i]!; - if ((score as number) > bestScore) { - bestScore = score as number; - bestLabel = label; - } - } - scheduleOnRN(updateClass, { label: bestLabel, score: bestScore }); - } - } catch { - // Frame may be disposed before processing completes — transient, safe to ignore. - } finally { - frame.dispose(); - } - }, - [classRof, frameKillSwitch, updateClass] - ), - }); - - useEffect(() => { - onFrameOutputChange(frameOutput); - }, [frameOutput, onFrameOutputChange]); - - return classResult.label ? ( - - {classResult.label} - {(classResult.score * 100).toFixed(1)}% - - ) : null; -} - -const styles = StyleSheet.create({ - overlay: { - ...StyleSheet.absoluteFill, - justifyContent: 'center', - alignItems: 'center', - }, - label: { - color: 'white', - fontSize: 28, - fontWeight: '700', - textAlign: 'center', - textShadowColor: 'rgba(0,0,0,0.8)', - textShadowOffset: { width: 0, height: 1 }, - textShadowRadius: 6, - paddingHorizontal: 24, - }, - score: { - color: 'rgba(255,255,255,0.75)', - fontSize: 18, - fontWeight: '500', - marginTop: 4, - textShadowColor: 'rgba(0,0,0,0.8)', - textShadowOffset: { width: 0, height: 1 }, - textShadowRadius: 6, - }, -}); diff --git a/apps/legacy/computer-vision/components/vision_camera/tasks/InstanceSegmentationTask.tsx b/apps/legacy/computer-vision/components/vision_camera/tasks/InstanceSegmentationTask.tsx deleted file mode 100644 index 153214c122..0000000000 --- a/apps/legacy/computer-vision/components/vision_camera/tasks/InstanceSegmentationTask.tsx +++ /dev/null @@ -1,236 +0,0 @@ -import React, { useCallback, useEffect, useRef, useState } from 'react'; -import { StyleSheet, Text, View } from 'react-native'; -import { Frame, useFrameOutput } from 'react-native-vision-camera'; -import { scheduleOnRN } from 'react-native-worklets'; -import { - models, - SegmentedInstance, - useInstanceSegmentation, - CocoLabel, - CocoLabelYolo, - FastSAMLabel, -} from 'react-native-executorch/legacy'; -import { Canvas, Image as SkiaImage } from '@shopify/react-native-skia'; -import { labelColor, labelColorBg } from '../../utils/colors'; -import { FRAME_TARGET_RESOLUTION, TaskProps } from './types'; -import { buildDisplayInstances, DisplayInstance } from '../../../components/ImageWithMasks'; -const instanceSegmentation = models.instance_segmentation; - -type InstSegModelId = - | 'instanceSegmentationYolo26n' - | 'instanceSegmentationRfdetr' - | 'instanceSegmentationFastsamS' - | 'instanceSegmentationFastsamX'; - -type Props = TaskProps & { activeModel: InstSegModelId }; - -export default function InstanceSegmentationTask({ - activeModel, - canvasSize, - cameraPositionSync, - frameKillSwitch, - onFrameOutputChange, - onReadyChange, - onProgressChange, - onGeneratingChange, - onFpsChange, - onErrorChange, -}: Props) { - const yolo26n = useInstanceSegmentation({ - model: instanceSegmentation.yolo26n(), - preventLoad: activeModel !== 'instanceSegmentationYolo26n', - }); - const rfdetr = useInstanceSegmentation({ - model: instanceSegmentation.rf_detr_nano(), - preventLoad: activeModel !== 'instanceSegmentationRfdetr', - }); - const fastsamS = useInstanceSegmentation({ - model: instanceSegmentation.fastsam_s(), - preventLoad: activeModel !== 'instanceSegmentationFastsamS', - }); - const fastsamX = useInstanceSegmentation({ - model: instanceSegmentation.fastsam_x(), - preventLoad: activeModel !== 'instanceSegmentationFastsamX', - }); - - const active = { - instanceSegmentationYolo26n: yolo26n, - instanceSegmentationRfdetr: rfdetr, - instanceSegmentationFastsamS: fastsamS, - instanceSegmentationFastsamX: fastsamX, - }[activeModel]; - - const [instances, setInstances] = useState([]); - const [imageSize, setImageSize] = useState({ width: 1, height: 1 }); - const lastFrameTimeRef = useRef(Date.now()); - - useEffect(() => { - onErrorChange(active.error ? String(active.error) : null); - }, [active.error, onErrorChange]); - - useEffect(() => { - onReadyChange(active.isReady); - }, [active.isReady, onReadyChange]); - - useEffect(() => { - onProgressChange(active.downloadProgress); - }, [active.downloadProgress, onProgressChange]); - - useEffect(() => { - onGeneratingChange(active.isGenerating); - }, [active.isGenerating, onGeneratingChange]); - - const instSegRof = active.runOnFrame; - - const updateInstances = useCallback( - (p: { - results: - | SegmentedInstance[] - | SegmentedInstance[] - | SegmentedInstance[]; - imageWidth: number; - imageHeight: number; - }) => { - const displayInstances = buildDisplayInstances( - p.results.map((inst) => ({ - ...inst, - label: String(inst.label), - })) - ); - setInstances((prev) => { - // Dispose old mask images - prev.forEach((inst) => inst.maskImage.dispose()); - return displayInstances; - }); - setImageSize({ width: p.imageWidth, height: p.imageHeight }); - const now = Date.now(); - const diff = now - lastFrameTimeRef.current; - if (diff > 0) onFpsChange(Math.round(1000 / diff), diff); - lastFrameTimeRef.current = now; - }, - [onFpsChange] - ); - - const frameOutput = useFrameOutput({ - targetResolution: FRAME_TARGET_RESOLUTION, - pixelFormat: 'rgb', - dropFramesWhileBusy: true, - enablePreviewSizedOutputBuffers: true, - onFrame: useCallback( - (frame: Frame) => { - 'worklet'; - if (frameKillSwitch.getDirty()) { - frame.dispose(); - return; - } - try { - if (!instSegRof) return; - const isFrontCamera = cameraPositionSync.getDirty() === 'front'; - const iw = frame.width > frame.height ? frame.height : frame.width; - const ih = frame.width > frame.height ? frame.width : frame.height; - const result = instSegRof(frame, isFrontCamera, { - confidenceThreshold: 0.5, - iouThreshold: 0.5, - maxInstances: 5, - returnMaskAtOriginalResolution: false, - ...(activeModel === 'instanceSegmentationYolo26n' && { - inputSize: 384, - }), - }); - if (result) { - scheduleOnRN(updateInstances, { - results: result, - imageWidth: iw, - imageHeight: ih, - }); - } - } catch { - // ignore - } finally { - frame.dispose(); - } - }, - [instSegRof, frameKillSwitch, updateInstances, activeModel, cameraPositionSync] - ), - }); - - useEffect(() => { - onFrameOutputChange(frameOutput); - }, [frameOutput, onFrameOutputChange]); - - const scale = Math.max(canvasSize.width / imageSize.width, canvasSize.height / imageSize.height); - const offsetX = (canvasSize.width - imageSize.width * scale) / 2; - const offsetY = (canvasSize.height - imageSize.height * scale) / 2; - - return ( - - {/* Render masks */} - - {instances.map((inst, i) => { - const x = inst.bbox.x1 * scale + offsetX; - const y = inst.bbox.y1 * scale + offsetY; - const w = (inst.bbox.x2 - inst.bbox.x1) * scale; - const h = (inst.bbox.y2 - inst.bbox.y1) * scale; - return ( - - ); - })} - - {/* Render bounding boxes */} - {instances.map((inst, i) => { - const left = inst.bbox.x1 * scale + offsetX; - const top = inst.bbox.y1 * scale + offsetY; - const w = (inst.bbox.x2 - inst.bbox.x1) * scale; - const h = (inst.bbox.y2 - inst.bbox.y1) * scale; - const label = String(inst.label); - return ( - - - - {label} {(inst.score * 100).toFixed(1)} - - - - ); - })} - - ); -} - -const styles = StyleSheet.create({ - bbox: { - position: 'absolute', - borderWidth: 2, - borderColor: 'cyan', - borderRadius: 4, - }, - bboxLabel: { - position: 'absolute', - top: -22, - left: -2, - paddingHorizontal: 6, - paddingVertical: 2, - borderRadius: 4, - }, - bboxLabelText: { color: 'white', fontSize: 11, fontWeight: '600' }, -}); diff --git a/apps/legacy/computer-vision/components/vision_camera/tasks/OCRTask.tsx b/apps/legacy/computer-vision/components/vision_camera/tasks/OCRTask.tsx deleted file mode 100644 index 4cb55a7467..0000000000 --- a/apps/legacy/computer-vision/components/vision_camera/tasks/OCRTask.tsx +++ /dev/null @@ -1,129 +0,0 @@ -import React, { useCallback, useEffect, useRef, useState } from 'react'; -import { StyleSheet, View } from 'react-native'; -import { Frame, useFrameOutput } from 'react-native-vision-camera'; -import { scheduleOnRN } from 'react-native-worklets'; -import { models, OCRDetection, useOCR } from 'react-native-executorch/legacy'; -import Svg, { Polygon, Text as SvgText } from 'react-native-svg'; -import { FRAME_TARGET_RESOLUTION, TaskProps } from './types'; - -type Props = Omit; - -export default function OCRTask({ - canvasSize, - cameraPositionSync, - frameKillSwitch, - onFrameOutputChange, - onReadyChange, - onProgressChange, - onGeneratingChange, - onFpsChange, - onErrorChange, -}: Props) { - const model = useOCR({ model: models.ocr.craft({ language: 'en' }) }); - const [detections, setDetections] = useState([]); - const [imageSize, setImageSize] = useState({ width: 1, height: 1 }); - const lastFrameTimeRef = useRef(Date.now()); - - useEffect(() => { - onErrorChange(model.error ? String(model.error) : null); - }, [model.error, onErrorChange]); - - useEffect(() => { - onReadyChange(model.isReady); - }, [model.isReady, onReadyChange]); - - useEffect(() => { - onProgressChange(model.downloadProgress); - }, [model.downloadProgress, onProgressChange]); - - useEffect(() => { - onGeneratingChange(model.isGenerating); - }, [model.isGenerating, onGeneratingChange]); - - const ocrRof = model.runOnFrame; - - const updateDetections = useCallback( - (p: { results: OCRDetection[]; frameW: number; frameH: number }) => { - setDetections(p.results); - setImageSize({ width: p.frameW, height: p.frameH }); - const now = Date.now(); - const diff = now - lastFrameTimeRef.current; - if (diff > 0) onFpsChange(Math.round(1000 / diff), diff); - lastFrameTimeRef.current = now; - }, - [onFpsChange] - ); - - const frameOutput = useFrameOutput({ - targetResolution: FRAME_TARGET_RESOLUTION, - pixelFormat: 'rgb', - dropFramesWhileBusy: true, - enablePreviewSizedOutputBuffers: true, - onFrame: useCallback( - (frame: Frame) => { - 'worklet'; - if (frameKillSwitch.getDirty()) { - frame.dispose(); - return; - } - try { - if (!ocrRof) return; - const isFrontCamera = cameraPositionSync.getDirty() === 'front'; - const result = ocrRof(frame, isFrontCamera); - if (result) { - // Sensor frames are landscape-native, so width/height are swapped - // relative to portrait screen orientation. - scheduleOnRN(updateDetections, { - results: result, - frameW: frame.height, - frameH: frame.width, - }); - } - } catch { - // Frame may be disposed before processing completes — transient, safe to ignore. - } finally { - frame.dispose(); - } - }, - [cameraPositionSync, frameKillSwitch, ocrRof, updateDetections] - ), - }); - - useEffect(() => { - onFrameOutputChange(frameOutput); - }, [frameOutput, onFrameOutputChange]); - - const scale = Math.max(canvasSize.width / imageSize.width, canvasSize.height / imageSize.height); - const offsetX = (canvasSize.width - imageSize.width * scale) / 2; - const offsetY = (canvasSize.height - imageSize.height * scale) / 2; - - if (!detections.length) return null; - - return ( - - - {detections.map((det, i) => { - const { x1, y1, x2, y2 } = det.bbox; - const pts = [ - [x1, y1], - [x2, y1], - [x2, y2], - [x1, y2], - ] - .map(([x, y]) => `${x * scale + offsetX},${y * scale + offsetY}`) - .join(' '); - const labelX = x1 * scale + offsetX; - const labelY = y1 * scale + offsetY - 4; - return ( - - - - {det.text} - - - ); - })} - - - ); -} diff --git a/apps/legacy/computer-vision/components/vision_camera/tasks/ObjectDetectionTask.tsx b/apps/legacy/computer-vision/components/vision_camera/tasks/ObjectDetectionTask.tsx deleted file mode 100644 index 1ccc54e0a4..0000000000 --- a/apps/legacy/computer-vision/components/vision_camera/tasks/ObjectDetectionTask.tsx +++ /dev/null @@ -1,157 +0,0 @@ -import React, { useCallback, useEffect, useRef, useState } from 'react'; -import { StyleSheet, View } from 'react-native'; -import { Frame, useFrameOutput } from 'react-native-vision-camera'; -import { scheduleOnRN } from 'react-native-worklets'; -import { - models, - Detection, - useObjectDetection, - CocoLabel, - CocoLabelYolo, -} from 'react-native-executorch/legacy'; -import BoundingBoxes from '../../BoundingBoxes'; -import { FRAME_TARGET_RESOLUTION, TaskProps } from './types'; -const objectDetection = models.object_detection; - -type ObjModelId = 'objectDetectionSsdlite' | 'objectDetectionRfdetr' | 'objectDetectionYolo26n'; - -type Props = TaskProps & { activeModel: ObjModelId }; - -export default function ObjectDetectionTask({ - activeModel, - canvasSize, - cameraPositionSync, - frameKillSwitch, - onFrameOutputChange, - onReadyChange, - onProgressChange, - onGeneratingChange, - onFpsChange, - onErrorChange, -}: Props) { - const ssdlite = useObjectDetection({ - model: objectDetection.ssdlite_320_mobilenet_v3_large(), - preventLoad: activeModel !== 'objectDetectionSsdlite', - }); - const rfdetr = useObjectDetection({ - model: objectDetection.rf_detr_nano(), - preventLoad: activeModel !== 'objectDetectionRfdetr', - }); - const yolo26n = useObjectDetection({ - model: objectDetection.yolo26n(), - preventLoad: activeModel !== 'objectDetectionYolo26n', - }); - - const active = - activeModel === 'objectDetectionSsdlite' - ? ssdlite - : activeModel === 'objectDetectionRfdetr' - ? rfdetr - : yolo26n; - - type CommonDetection = Omit & { label: string }; - - const [detections, setDetections] = useState([]); - const [imageSize, setImageSize] = useState({ width: 1, height: 1 }); - const lastFrameTimeRef = useRef(Date.now()); - - useEffect(() => { - onErrorChange(active.error ? String(active.error) : null); - }, [active.error, onErrorChange]); - - useEffect(() => { - onReadyChange(active.isReady); - }, [active.isReady, onReadyChange]); - - useEffect(() => { - onProgressChange(active.downloadProgress); - }, [active.downloadProgress, onProgressChange]); - - useEffect(() => { - onGeneratingChange(active.isGenerating); - }, [active.isGenerating, onGeneratingChange]); - - const detRof = active.runOnFrame; - - const updateDetections = useCallback( - (p: { - results: Detection[] | Detection[]; - imageWidth: number; - imageHeight: number; - }) => { - setDetections( - p.results.map((det) => ({ - ...det, - label: String(det.label), - })) - ); - setImageSize({ width: p.imageWidth, height: p.imageHeight }); - const now = Date.now(); - const diff = now - lastFrameTimeRef.current; - if (diff > 0) onFpsChange(Math.round(1000 / diff), diff); - lastFrameTimeRef.current = now; - }, - [onFpsChange] - ); - - const frameOutput = useFrameOutput({ - targetResolution: FRAME_TARGET_RESOLUTION, - pixelFormat: 'rgb', - dropFramesWhileBusy: true, - enablePreviewSizedOutputBuffers: true, - - onFrame: useCallback( - (frame: Frame) => { - 'worklet'; - if (frameKillSwitch.getDirty()) { - frame.dispose(); - return; - } - try { - if (!detRof) return; - const isFrontCamera = cameraPositionSync.getDirty() === 'front'; - const result = detRof(frame, isFrontCamera, { - detectionThreshold: 0.5, - }); - // Sensor frames are landscape-native, so width/height are swapped - // relative to portrait screen orientation. - const screenW = frame.height; - const screenH = frame.width; - if (result) { - scheduleOnRN(updateDetections, { - results: result, - imageWidth: screenW, - imageHeight: screenH, - }); - } - } catch { - // Frame may be disposed before processing completes — transient, safe to ignore. - } finally { - frame.dispose(); - } - }, - [cameraPositionSync, detRof, frameKillSwitch, updateDetections] - ), - }); - - useEffect(() => { - onFrameOutputChange(frameOutput); - }, [frameOutput, onFrameOutputChange]); - - const scale = Math.max(canvasSize.width / imageSize.width, canvasSize.height / imageSize.height); - const offsetX = (canvasSize.width - imageSize.width * scale) / 2; - const offsetY = (canvasSize.height - imageSize.height * scale) / 2; - - return ( - - - - ); -} diff --git a/apps/legacy/computer-vision/components/vision_camera/tasks/PoseEstimationTask.tsx b/apps/legacy/computer-vision/components/vision_camera/tasks/PoseEstimationTask.tsx deleted file mode 100644 index 3d6452b9bb..0000000000 --- a/apps/legacy/computer-vision/components/vision_camera/tasks/PoseEstimationTask.tsx +++ /dev/null @@ -1,164 +0,0 @@ -import React, { useCallback, useEffect, useRef, useState } from 'react'; -import { StyleSheet, View } from 'react-native'; -import { Frame, useFrameOutput } from 'react-native-vision-camera'; -import { scheduleOnRN } from 'react-native-worklets'; -import Svg, { Circle, Line } from 'react-native-svg'; -import { models, usePoseEstimation, PoseDetections } from 'react-native-executorch/legacy'; -import { TaskProps } from './types'; -import { COCO_SKELETON_CONNECTIONS } from '../../utils/cocoSkeleton'; - -type Props = TaskProps & { activeModel: 'poseEstimationYolo26n' }; - -// Colors for different people -const PERSON_COLORS = ['lime', 'cyan', 'magenta', 'yellow', 'orange', 'pink']; - -export default function PoseEstimationTask({ - activeModel, - canvasSize, - cameraPositionSync, - frameKillSwitch, - onFrameOutputChange, - onReadyChange, - onProgressChange, - onGeneratingChange, - onFpsChange, - onErrorChange, -}: Props) { - const poseModel = usePoseEstimation({ - model: models.pose_estimation.yolo26n(), - preventLoad: activeModel !== 'poseEstimationYolo26n', - }); - - const [detections, setDetections] = useState([]); - const [imageSize, setImageSize] = useState({ width: 1, height: 1 }); - const lastFrameTimeRef = useRef(Date.now()); - - useEffect(() => { - onErrorChange(poseModel.error ? String(poseModel.error) : null); - }, [poseModel.error, onErrorChange]); - - useEffect(() => { - onReadyChange(poseModel.isReady); - }, [poseModel.isReady, onReadyChange]); - - useEffect(() => { - onProgressChange(poseModel.downloadProgress); - }, [poseModel.downloadProgress, onProgressChange]); - - useEffect(() => { - onGeneratingChange(poseModel.isGenerating); - }, [poseModel.isGenerating, onGeneratingChange]); - - const poseRof = poseModel.runOnFrame; - - const updateDetections = useCallback( - (p: { results: PoseDetections; imageWidth: number; imageHeight: number }) => { - setDetections(p.results); - setImageSize({ width: p.imageWidth, height: p.imageHeight }); - const now = Date.now(); - const diff = now - lastFrameTimeRef.current; - if (diff > 0) onFpsChange(Math.round(1000 / diff), diff); - lastFrameTimeRef.current = now; - }, - [onFpsChange] - ); - - const frameOutput = useFrameOutput({ - pixelFormat: 'rgb', - dropFramesWhileBusy: true, - enablePreviewSizedOutputBuffers: true, - - onFrame: useCallback( - (frame: Frame) => { - 'worklet'; - if (frameKillSwitch.getDirty()) { - frame.dispose(); - return; - } - try { - if (!poseRof) return; - const isFrontCamera = cameraPositionSync.getDirty() === 'front'; - const result = poseRof(frame, isFrontCamera, { - detectionThreshold: 0.5, - }); - const screenW = frame.height; - const screenH = frame.width; - if (result) { - scheduleOnRN(updateDetections, { - results: result, - imageWidth: screenW, - imageHeight: screenH, - }); - } - } catch { - // Frame may be disposed before processing completes - } finally { - frame.dispose(); - } - }, - [cameraPositionSync, poseRof, frameKillSwitch, updateDetections] - ), - }); - - useEffect(() => { - onFrameOutputChange(frameOutput); - }, [frameOutput, onFrameOutputChange]); - - const scale = Math.max(canvasSize.width / imageSize.width, canvasSize.height / imageSize.height); - const offsetX = (canvasSize.width - imageSize.width * scale) / 2; - const offsetY = (canvasSize.height - imageSize.height * scale) / 2; - - return ( - - - {detections.map((personKeypoints, personIdx) => { - const color = PERSON_COLORS[personIdx % PERSON_COLORS.length]; - const isVisible = (kp: { x: number; y: number }) => - kp.x >= 0 && kp.y >= 0 && kp.x <= imageSize.width && kp.y <= imageSize.height; - return ( - - {/* Draw skeleton lines */} - {COCO_SKELETON_CONNECTIONS.map(([from, to], lineIdx) => { - const kp1 = personKeypoints[from]; - const kp2 = personKeypoints[to]; - if (!kp1 || !kp2) return null; - if (!isVisible(kp1) || !isVisible(kp2)) return null; - const x1 = kp1.x * scale + offsetX; - const y1 = kp1.y * scale + offsetY; - const x2 = kp2.x * scale + offsetX; - const y2 = kp2.y * scale + offsetY; - return ( - - ); - })} - {/* Draw keypoints */} - {Object.entries(personKeypoints) - .filter(([, kp]) => isVisible(kp)) - .map(([name, kp]) => { - const cx = kp.x * scale + offsetX; - const cy = kp.y * scale + offsetY; - return ( - - ); - })} - - ); - })} - - - ); -} diff --git a/apps/legacy/computer-vision/components/vision_camera/tasks/SegmentationTask.tsx b/apps/legacy/computer-vision/components/vision_camera/tasks/SegmentationTask.tsx deleted file mode 100644 index 82c10e4b0f..0000000000 --- a/apps/legacy/computer-vision/components/vision_camera/tasks/SegmentationTask.tsx +++ /dev/null @@ -1,235 +0,0 @@ -import React, { useCallback, useEffect, useRef, useState } from 'react'; -import { StyleSheet, View } from 'react-native'; -import { Frame, useFrameOutput } from 'react-native-vision-camera'; -import { scheduleOnRN } from 'react-native-worklets'; -import { models, useSemanticSegmentation } from 'react-native-executorch/legacy'; -import { - AlphaType, - Canvas, - ColorType, - Image as SkiaImage, - Skia, - SkImage, -} from '@shopify/react-native-skia'; -import { CLASS_COLORS } from '../../utils/colors'; -import { FRAME_TARGET_RESOLUTION, TaskProps } from './types'; -const semanticSegmentation = models.semantic_segmentation; - -type SegModelId = - | 'segmentationDeeplabResnet50' - | 'segmentationDeeplabResnet101' - | 'segmentationDeeplabMobilenet' - | 'segmentationLraspp' - | 'segmentationFcnResnet50' - | 'segmentationFcnResnet101' - | 'segmentationSelfie'; - -type Props = TaskProps & { activeModel: SegModelId }; - -export default function SegmentationTask({ - activeModel, - canvasSize, - cameraPositionSync, - frameKillSwitch, - onFrameOutputChange, - onReadyChange, - onProgressChange, - onGeneratingChange, - onFpsChange, - onErrorChange, -}: Props) { - const segDeeplabResnet50 = useSemanticSegmentation({ - model: semanticSegmentation.deeplab_v3_resnet50(), - preventLoad: activeModel !== 'segmentationDeeplabResnet50', - }); - const segDeeplabResnet101 = useSemanticSegmentation({ - model: semanticSegmentation.deeplab_v3_resnet101(), - preventLoad: activeModel !== 'segmentationDeeplabResnet101', - }); - const segDeeplabMobilenet = useSemanticSegmentation({ - model: semanticSegmentation.deeplab_v3_mobilenet_v3_large(), - preventLoad: activeModel !== 'segmentationDeeplabMobilenet', - }); - const segLraspp = useSemanticSegmentation({ - model: semanticSegmentation.lraspp_mobilenet_v3_large(), - preventLoad: activeModel !== 'segmentationLraspp', - }); - const segFcnResnet50 = useSemanticSegmentation({ - model: semanticSegmentation.fcn_resnet50(), - preventLoad: activeModel !== 'segmentationFcnResnet50', - }); - const segFcnResnet101 = useSemanticSegmentation({ - model: semanticSegmentation.fcn_resnet101(), - preventLoad: activeModel !== 'segmentationFcnResnet101', - }); - const segSelfie = useSemanticSegmentation({ - model: semanticSegmentation.selfie_segmentation(), - preventLoad: activeModel !== 'segmentationSelfie', - }); - - const active = { - segmentationDeeplabResnet50: segDeeplabResnet50, - segmentationDeeplabResnet101: segDeeplabResnet101, - segmentationDeeplabMobilenet: segDeeplabMobilenet, - segmentationLraspp: segLraspp, - segmentationFcnResnet50: segFcnResnet50, - segmentationFcnResnet101: segFcnResnet101, - segmentationSelfie: segSelfie, - }[activeModel]; - - const [maskImage, setMaskImage] = useState(null); - const [imageSize, setImageSize] = useState({ width: 1, height: 1 }); - const lastFrameTimeRef = useRef(Date.now()); - - useEffect(() => { - onErrorChange(active.error ? String(active.error) : null); - }, [active.error, onErrorChange]); - - useEffect(() => { - onReadyChange(active.isReady); - }, [active.isReady, onReadyChange]); - - useEffect(() => { - onProgressChange(active.downloadProgress); - }, [active.downloadProgress, onProgressChange]); - - useEffect(() => { - onGeneratingChange(active.isGenerating); - }, [active.isGenerating, onGeneratingChange]); - - // Clear stale mask when the segmentation model variant changes - useEffect(() => { - setMaskImage((prev) => { - prev?.dispose(); - return null; - }); - }, [activeModel]); - - // Dispose native Skia image on unmount to prevent memory leaks - useEffect(() => { - return () => { - setMaskImage((prev) => { - prev?.dispose(); - return null; - }); - }; - }, []); - - const segRof = active.runOnFrame; - - const updateMask = useCallback( - (p: { img: SkImage; screenW: number; screenH: number }) => { - setMaskImage((prev) => { - prev?.dispose(); - return p.img; - }); - setImageSize({ width: p.screenW, height: p.screenH }); - const now = Date.now(); - const diff = now - lastFrameTimeRef.current; - if (diff > 0) onFpsChange(Math.round(1000 / diff), diff); - lastFrameTimeRef.current = now; - }, - [onFpsChange] - ); - - // CLASS_COLORS captured directly in closure — worklets cannot import modules - const colors = CLASS_COLORS; - - const frameOutput = useFrameOutput({ - targetResolution: FRAME_TARGET_RESOLUTION, - pixelFormat: 'rgb', - dropFramesWhileBusy: true, - enablePreviewSizedOutputBuffers: true, - onFrame: useCallback( - (frame: Frame) => { - 'worklet'; - if (frameKillSwitch.getDirty()) { - frame.dispose(); - return; - } - try { - if (!segRof) return; - const isFrontCamera = cameraPositionSync.getDirty() === 'front'; - const result = segRof(frame, isFrontCamera, [], false); - if (result?.ARGMAX) { - const argmax: Int32Array = result.ARGMAX; - // Both the preview and the mask live in a portrait coord system: - // the activity is portrait-locked (so CameraX's PreviewView always - // renders the preview in portrait orientation regardless of how - // the device is physically tilted), and the native side runs - // `inverseRotateMat` which always converts the mask into the same - // portrait coord system. Treat sensor-native dims as portrait by - // swapping height/width — same convention as the sibling OCR and - // ObjectDetection tasks. - const screenW = frame.height; - const screenH = frame.width; - // Mask buffer dims: the C++ side returns the mask at model output - // resolution (the `resizeToInput=false` arg below). All built-in - // segmentation models output a square spatial map (e.g. 520×520), - // so sqrt(length) recovers the side. Non-square model outputs - // would need dims exposed from native. - const maskSide = Math.round(Math.sqrt(argmax.length)); - const maskW = maskSide; - const maskH = maskSide; - const pixels = new Uint8Array(maskW * maskH * 4); - for (let i = 0; i < argmax.length; i++) { - const color = colors[argmax[i]!] ?? [0, 0, 0, 0]; - pixels[i * 4] = color[0]!; - pixels[i * 4 + 1] = color[1]!; - pixels[i * 4 + 2] = color[2]!; - pixels[i * 4 + 3] = color[3]!; - } - const skData = Skia.Data.fromBytes(pixels); - const img = Skia.Image.MakeImage( - { - width: maskW, - height: maskH, - alphaType: AlphaType.Unpremul, - colorType: ColorType.RGBA_8888, - }, - skData, - maskW * 4 - ); - if (img) scheduleOnRN(updateMask, { img, screenW, screenH }); - } - } catch { - // Frame may be disposed before processing completes — transient, safe to ignore. - } finally { - frame.dispose(); - } - }, - [cameraPositionSync, colors, frameKillSwitch, segRof, updateMask] - ), - }); - - useEffect(() => { - onFrameOutputChange(frameOutput); - }, [frameOutput, onFrameOutputChange]); - - if (!maskImage) return null; - - // Match the camera preview's cover-scale + center layout so the mask - // aligns pixel-for-pixel with what the user sees. `fit="fill"` lets the - // (square) mask stretch into the preview rect — which is computed in - // screen-space dims rather than the sensor-native ones. - const scale = Math.max(canvasSize.width / imageSize.width, canvasSize.height / imageSize.height); - const dstW = imageSize.width * scale; - const dstH = imageSize.height * scale; - const offsetX = (canvasSize.width - dstW) / 2; - const offsetY = (canvasSize.height - dstH) / 2; - - return ( - - - - - - ); -} diff --git a/apps/legacy/computer-vision/components/vision_camera/tasks/StyleTransferTask.tsx b/apps/legacy/computer-vision/components/vision_camera/tasks/StyleTransferTask.tsx deleted file mode 100644 index e4fa579432..0000000000 --- a/apps/legacy/computer-vision/components/vision_camera/tasks/StyleTransferTask.tsx +++ /dev/null @@ -1,156 +0,0 @@ -import React, { useCallback, useEffect, useRef, useState } from 'react'; -import { StyleSheet, View } from 'react-native'; -import { Frame, useFrameOutput } from 'react-native-vision-camera'; -import { scheduleOnRN } from 'react-native-worklets'; -import { models, useStyleTransfer } from 'react-native-executorch/legacy'; -import { - AlphaType, - Canvas, - ColorType, - Image as SkiaImage, - Skia, - SkImage, -} from '@shopify/react-native-skia'; -import { FRAME_TARGET_RESOLUTION, TaskProps } from './types'; -const styleTransfer = models.style_transfer; - -type StyleModelId = 'styleTransferCandy' | 'styleTransferMosaic'; - -type Props = TaskProps & { activeModel: StyleModelId }; - -export default function StyleTransferTask({ - activeModel, - canvasSize, - cameraPositionSync, - frameKillSwitch, - onFrameOutputChange, - onReadyChange, - onProgressChange, - onGeneratingChange, - onFpsChange, - onErrorChange, -}: Props) { - const candy = useStyleTransfer({ - model: styleTransfer.candy(), - preventLoad: activeModel !== 'styleTransferCandy', - }); - const mosaic = useStyleTransfer({ - model: styleTransfer.mosaic(), - preventLoad: activeModel !== 'styleTransferMosaic', - }); - - const active = activeModel === 'styleTransferCandy' ? candy : mosaic; - - const [styledImage, setStyledImage] = useState(null); - const lastFrameTimeRef = useRef(Date.now()); - - useEffect(() => { - onErrorChange(active.error ? String(active.error) : null); - }, [active.error, onErrorChange]); - - useEffect(() => { - onReadyChange(active.isReady); - }, [active.isReady, onReadyChange]); - - useEffect(() => { - onProgressChange(active.downloadProgress); - }, [active.downloadProgress, onProgressChange]); - - useEffect(() => { - onGeneratingChange(active.isGenerating); - }, [active.isGenerating, onGeneratingChange]); - - useEffect(() => { - setStyledImage((prev) => { - prev?.dispose(); - return null; - }); - }, [activeModel]); - - useEffect(() => { - return () => { - setStyledImage((prev) => { - prev?.dispose(); - return null; - }); - }; - }, []); - - const styleRof = active.runOnFrame; - - const updateImage = useCallback( - (img: SkImage) => { - setStyledImage((prev) => { - prev?.dispose(); - return img; - }); - const now = Date.now(); - const diff = now - lastFrameTimeRef.current; - if (diff > 0) onFpsChange(Math.round(1000 / diff), diff); - lastFrameTimeRef.current = now; - }, - [onFpsChange] - ); - - const frameOutput = useFrameOutput({ - targetResolution: FRAME_TARGET_RESOLUTION, - pixelFormat: 'rgb', - dropFramesWhileBusy: true, - enablePreviewSizedOutputBuffers: true, - onFrame: useCallback( - (frame: Frame) => { - 'worklet'; - if (frameKillSwitch.getDirty()) { - frame.dispose(); - return; - } - try { - if (!styleRof) return; - const isFrontCamera = cameraPositionSync.getDirty() === 'front'; - const result = styleRof(frame, isFrontCamera); - if (result) { - const pixels = new Uint8Array(result.dataPtr.buffer); - const skData = Skia.Data.fromBytes(pixels); - const img = Skia.Image.MakeImage( - { - width: result.sizes[1]!, - height: result.sizes[0]!, - alphaType: AlphaType.Unpremul, - colorType: ColorType.RGBA_8888, - }, - skData, - result.sizes[1]! * 4 - ); - if (img) scheduleOnRN(updateImage, img); - } - } catch { - // Frame may be disposed before processing completes — transient, safe to ignore. - } finally { - frame.dispose(); - } - }, - [cameraPositionSync, frameKillSwitch, styleRof, updateImage] - ), - }); - - useEffect(() => { - onFrameOutputChange(frameOutput); - }, [frameOutput, onFrameOutputChange]); - - if (!styledImage) return null; - - return ( - - - - - - ); -} diff --git a/apps/legacy/computer-vision/components/vision_camera/tasks/types.ts b/apps/legacy/computer-vision/components/vision_camera/tasks/types.ts deleted file mode 100644 index a3293e51ec..0000000000 --- a/apps/legacy/computer-vision/components/vision_camera/tasks/types.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { useFrameOutput } from 'react-native-vision-camera'; -import type { Synchronizable } from 'react-native-worklets'; - -export const FRAME_TARGET_RESOLUTION = { width: 1280, height: 720 } as const; - -export type TaskProps = { - activeModel: string; - canvasSize: { width: number; height: number }; - cameraPositionSync: Synchronizable<'front' | 'back'>; - frameKillSwitch: Synchronizable; - onFrameOutputChange: (frameOutput: ReturnType) => void; - onReadyChange: (isReady: boolean) => void; - onProgressChange: (progress: number) => void; - onGeneratingChange: (isGenerating: boolean) => void; - onFpsChange: (fps: number, frameMs: number) => void; - onErrorChange: (error: string | null) => void; -}; diff --git a/apps/legacy/computer-vision/context.ts b/apps/legacy/computer-vision/context.ts deleted file mode 100644 index 0eb0560768..0000000000 --- a/apps/legacy/computer-vision/context.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { createContext } from 'react'; - -export const GeneratingContext = createContext({ - setGlobalGenerating: (_newState: boolean) => {}, -}); diff --git a/apps/legacy/computer-vision/declarations.d.ts b/apps/legacy/computer-vision/declarations.d.ts deleted file mode 100644 index 85e178f497..0000000000 --- a/apps/legacy/computer-vision/declarations.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module '*.svg' { - import { SvgProps } from 'react-native-svg'; - const content: React.FV; - export default content; -} diff --git a/apps/legacy/computer-vision/index.ts b/apps/legacy/computer-vision/index.ts deleted file mode 100644 index 3f443dcf95..0000000000 --- a/apps/legacy/computer-vision/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { registerRootComponent } from 'expo'; - -import App from './app'; - -// registerRootComponent calls AppRegistry.registerComponent('main', () => App); -// It also ensures that whether you load the app in Expo Go or in a native build, -// the environment is set up appropriately -registerRootComponent(App); diff --git a/apps/legacy/computer-vision/metro.config.js b/apps/legacy/computer-vision/metro.config.js deleted file mode 100644 index f8ab2ab96d..0000000000 --- a/apps/legacy/computer-vision/metro.config.js +++ /dev/null @@ -1,21 +0,0 @@ -// Learn more https://docs.expo.io/guides/customizing-metro -const { getDefaultConfig } = require('expo/metro-config'); - -/** @type {import('expo/metro-config').MetroConfig} */ -const config = getDefaultConfig(__dirname); - -const { transformer, resolver } = config; - -config.transformer = { - ...transformer, - babelTransformerPath: require.resolve('react-native-svg-transformer/expo'), -}; -config.resolver = { - ...resolver, - assetExts: resolver.assetExts.filter((ext) => ext !== 'svg'), - sourceExts: [...resolver.sourceExts, 'svg'], -}; - -config.resolver.assetExts.push('pte'); - -module.exports = config; diff --git a/apps/legacy/computer-vision/package.json b/apps/legacy/computer-vision/package.json deleted file mode 100644 index 598d4b390e..0000000000 --- a/apps/legacy/computer-vision/package.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "legacy-computer-vision", - "version": "1.0.0", - "main": "expo-router/entry", - "scripts": { - "start": "expo start", - "android": "expo run:android", - "ios": "expo run:ios", - "web": "expo start --web", - "typecheck": "tsc", - "lint": "eslint . --ext .ts,.tsx --fix" - }, - "dependencies": { - "@expo/log-box": "~56.0.12", - "@expo/vector-icons": "^15.0.2", - "@react-native/metro-config": "^0.86.0", - "@react-navigation/drawer": "^7.9.4", - "@react-navigation/native": "^7.2.2", - "@shopify/react-native-skia": "2.6.2", - "expo": "~57.0.28", - "expo-build-properties": "~57.0.22", - "expo-constants": "~57.0.21", - "expo-font": "~57.0.4", - "expo-linking": "~57.0.12", - "expo-router": "~57.0.26", - "expo-status-bar": "~57.0.1", - "metro-config": "^0.84.0", - "react": "19.2.3", - "react-native": "0.86.3", - "react-native-device-info": "^15.0.2", - "react-native-executorch": "workspace:*", - "react-native-executorch-expo-resource-fetcher": "workspace:*", - "react-native-gesture-handler": "~2.32.0", - "react-native-image-picker": "^8.2.1", - "react-native-loading-spinner-overlay": "^3.0.1", - "react-native-nitro-image": "^0.15.2", - "react-native-nitro-modules": "^0.37.1", - "react-native-reanimated": "4.7.1", - "react-native-safe-area-context": "~5.7.0", - "react-native-screens": "~4.26.0", - "react-native-svg": "15.15.4", - "react-native-svg-transformer": "^1.5.3", - "react-native-vision-camera": "^5.2.3", - "react-native-vision-camera-worklets": "^5.2.3", - "react-native-worklets": "0.13.0" - }, - "devDependencies": { - "@babel/core": "^7.29.7", - "@types/react": "~19.2.0", - "@types/react-refresh": "^0", - "babel-preset-expo": "~57.0.15", - "react-refresh": "^0.18.0" - }, - "private": true -} diff --git a/apps/legacy/computer-vision/tsconfig.json b/apps/legacy/computer-vision/tsconfig.json deleted file mode 100644 index 20b5fc01ed..0000000000 --- a/apps/legacy/computer-vision/tsconfig.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "compilerOptions": { - "allowJs": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "jsx": "react-native", - "lib": ["es2022"], - "moduleResolution": "bundler", - "noEmit": true, - "resolveJsonModule": true, - "skipLibCheck": true, - "strict": true, - "target": "esnext", - "paths": { - "react-native-executorch/legacy": ["../../packages/react-native-executorch/legacy/src"], - "react-native-executorch-expo-resource-fetcher": ["../../packages/expo-resource-fetcher"] - } - }, - "include": ["**/*.ts", "**/*.tsx"], - "exclude": ["**/node_modules", "**/Pods", "**/__tests__"], - "extends": "expo/tsconfig.base" -} diff --git a/apps/legacy/computer-vision/utils.ts b/apps/legacy/computer-vision/utils.ts deleted file mode 100644 index b576d63e4b..0000000000 --- a/apps/legacy/computer-vision/utils.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { CameraOptions, launchCamera, launchImageLibrary } from 'react-native-image-picker'; - -export const getImage = async (useCamera: boolean) => { - const options: CameraOptions = { - mediaType: 'photo', - }; - try { - const output = useCamera ? await launchCamera(options) : await launchImageLibrary(options); - - if (!output.assets || output.assets.length === 0) return; - - return output.assets[0]; - } catch (err) { - console.error(err); - } -}; diff --git a/apps/legacy/llm/.gitignore b/apps/legacy/llm/.gitignore deleted file mode 100644 index f779c900a7..0000000000 --- a/apps/legacy/llm/.gitignore +++ /dev/null @@ -1,38 +0,0 @@ -# Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files - -# dependencies -node_modules/ - -# Expo -.expo/ -dist/ -web-build/ -expo-env.d.ts - -# Native -*.orig.* -*.jks -*.p8 -*.p12 -*.key -*.mobileprovision - -# Metro -.metro-health-check* - -# debug -npm-debug.* -yarn-debug.* -yarn-error.* - -# macOS -.DS_Store -*.pem - -# local env files -.env*.local - -# typescript -*.tsbuildinfo - -.yarn diff --git a/apps/legacy/llm/app.json b/apps/legacy/llm/app.json deleted file mode 100644 index 2598330062..0000000000 --- a/apps/legacy/llm/app.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "expo": { - "name": "legacy-llm", - "slug": "legacy-llm", - "version": "1.0.0", - "orientation": "portrait", - "icon": "./assets/icons/icon.png", - "userInterfaceStyle": "light", - "scheme": "rne-llm", - "plugins": [ - [ - "expo-font", - { - "fonts": ["./assets/fonts/Aeonik-Regular.otf", "./assets/fonts/Aeonik-Medium.otf"] - } - ], - [ - "expo-calendar", - { - "calendarPermission": "The app needs to access your calendar." - } - ], - "expo-router", - [ - "react-native-audio-api", - { - "iosBackgroundMode": true, - "iosMicrophonePermission": "This app requires access to the microphone to record audio.", - "androidPermissions": [ - "android.permission.MODIFY_AUDIO_SETTINGS", - "android.permission.FOREGROUND_SERVICE", - "android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK", - "android.permission.RECORD_AUDIO" - ], - "androidForegroundService": true, - "androidFSTypes": ["mediaPlayback"] - } - ], - [ - "expo-build-properties", - { - "ios": { - "deploymentTarget": "17.0" - } - } - ] - ], - "newArchEnabled": true, - "splash": { - "image": "./assets/icons/splash.png", - "resizeMode": "contain", - "backgroundColor": "#ffffff" - }, - "ios": { - "supportsTablet": true, - "bundleIdentifier": "com.anonymous.llm", - "infoPlist": { - "NSMicrophoneUsageDescription": "This app needs access to your microphone to record audio.", - "NSCalendarsUsageDescription": "This app needs access to your calendar to manage events." - }, - "entitlements": { - "com.apple.developer.kernel.increased-memory-limit": true - } - }, - "android": { - "adaptiveIcon": { - "foregroundImage": "./assets/icons/adaptive-icon.png", - "backgroundColor": "#ffffff" - }, - "package": "com.anonymous.llm", - "permissions": [ - "android.permission.READ_CALENDAR", - "android.permission.WRITE_CALENDAR", - "android.permission.MODIFY_AUDIO_SETTINGS", - "android.permission.FOREGROUND_SERVICE", - "android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK", - "android.permission.RECORD_AUDIO" - ] - }, - "web": { - "favicon": "./assets/icons/favicon.png" - } - } -} diff --git a/apps/legacy/llm/app/_layout.tsx b/apps/legacy/llm/app/_layout.tsx deleted file mode 100644 index ee2fd12ce8..0000000000 --- a/apps/legacy/llm/app/_layout.tsx +++ /dev/null @@ -1,152 +0,0 @@ -import { Drawer } from 'expo-router/drawer'; -import { initExecutorch } from 'react-native-executorch/legacy'; -import { ExpoResourceFetcher } from 'react-native-executorch-expo-resource-fetcher'; -import ColorPalette from '../colors'; -import React, { useState } from 'react'; -import { Text, StyleSheet, View, TouchableOpacity, type ColorValue } from 'react-native'; -import { - type DrawerContentComponentProps, - DrawerContentScrollView, - DrawerItemList, -} from 'expo-router/build/react-navigation/drawer'; -import { DrawerActions } from 'expo-router/build/react-navigation/routers'; -import { useNavigation } from 'expo-router'; -import Svg, { Rect } from 'react-native-svg'; -import { GeneratingContext } from '../context'; - -function HamburgerIcon({ tintColor }: { tintColor?: ColorValue }) { - const navigation = useNavigation(); - const fill = typeof tintColor === 'string' ? tintColor : '#000'; - return ( - navigation.dispatch(DrawerActions.toggleDrawer())} - style={styles.hamburger} - > - - - - - - - ); -} - -initExecutorch({ - resourceFetcher: ExpoResourceFetcher, -}); - -interface CustomDrawerProps extends DrawerContentComponentProps { - isGenerating: boolean; -} - -function CustomDrawerContent(props: CustomDrawerProps) { - const { isGenerating, ...otherProps } = props; - return ( - - {!isGenerating ? ( - - ) : ( - - Model is generating... - Interrupt before switching model - - )} - - ); -} - -export default function _layout() { - const [isGenerating, setIsGenerating] = useState(false); - - return ( - { - setIsGenerating(newState); - }, - }} - > - } - screenOptions={{ - drawerActiveTintColor: ColorPalette.primary, - drawerInactiveTintColor: '#888', - headerTintColor: ColorPalette.primary, - headerTitleStyle: { color: ColorPalette.primary }, - headerLeft: (props) => , - }} - > - null, - title: 'Main Menu', - drawerItemStyle: { display: 'none' }, - }} - /> - - - - - - - - ); -} - -const styles = StyleSheet.create({ - hamburger: { - marginLeft: 12, - }, - centerContent: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - padding: 20, - }, - mainText: { - fontSize: 18, - fontWeight: 'bold', - marginBottom: 10, - color: ColorPalette.primary, - }, - subText: { - fontSize: 14, - color: ColorPalette.strongPrimary, - }, -}); diff --git a/apps/legacy/llm/app/index.tsx b/apps/legacy/llm/app/index.tsx deleted file mode 100644 index 61f7872ff6..0000000000 --- a/apps/legacy/llm/app/index.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import { useRouter } from 'expo-router'; -import { View, Text, StyleSheet, TouchableOpacity } from 'react-native'; -import ColorPalette from '../colors'; -import ExecutorchLogo from '../assets/icons/executorch.svg'; - -export default function Home() { - const router = useRouter(); - - return ( - - - Select a demo model - - router.navigate('llm/')}> - LLM - - router.navigate('llm_tool_calling/')} - > - LLM Tool Calling - - router.navigate('llm_structured_output/')} - > - LLM Structured Output - - router.navigate('multimodal_llm/')}> - Multimodal LLM (VLM) - - router.navigate('privacy_filter/')}> - Privacy Filter (PII) - - - - ); -} - -export const fontSizes = { - xxl: 34, - xl: 22, - lg: 18, - md: 16, - sm: 14, - xs: 12, - xxs: 10, -}; - -const styles = StyleSheet.create({ - container: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - backgroundColor: '#fff', - }, - headerText: { - fontSize: fontSizes.lg, - color: ColorPalette.strongPrimary, - margin: 20, - }, - buttonContainer: { - width: '80%', - justifyContent: 'space-evenly', - marginBottom: 20, - }, - button: { - backgroundColor: ColorPalette.strongPrimary, - borderRadius: 8, - padding: 10, - alignItems: 'center', - marginBottom: 10, - }, - buttonText: { - color: 'white', - fontSize: fontSizes.md, - }, -}); diff --git a/apps/legacy/llm/app/llm/index.tsx b/apps/legacy/llm/app/llm/index.tsx deleted file mode 100644 index 681a134b94..0000000000 --- a/apps/legacy/llm/app/llm/index.tsx +++ /dev/null @@ -1,208 +0,0 @@ -import { useContext, useEffect, useRef, useState } from 'react'; -import { - Keyboard, - KeyboardAvoidingView, - StyleSheet, - Text, - TextInput, - Platform, - TouchableOpacity, - TouchableWithoutFeedback, - View, -} from 'react-native'; -import SendIcon from '../../assets/icons/send_icon.svg'; -import { models, useLLM } from 'react-native-executorch/legacy'; -import { ModelPicker } from '../../components/ModelPicker'; -import { LLM_MODELS, LLMModelSources } from '../../components/llmModels'; -import PauseIcon from '../../assets/icons/pause_icon.svg'; -import ColorPalette from '../../colors'; -import Messages from '../../components/Messages'; -import { useIsFocused } from 'expo-router'; -import { useSafeAreaInsets } from 'react-native-safe-area-context'; -import { GeneratingContext } from '../../context'; -import Spinner from '../../components/Spinner'; -import SuggestedPrompts from '../../components/SuggestedPrompts'; - -const SUGGESTED_PROMPTS = [ - 'Explain quantum computing in simple terms', - 'Write a short poem about coding', - 'What are the benefits of on-device AI?', - 'Give me 3 fun facts about space', -]; -import { useLLMStats } from '../../hooks/useLLMStats'; -import { StatsBar } from '../../components/StatsBar'; -import ErrorBanner from '../../components/ErrorBanner'; - -export default function LLMScreenWrapper() { - const isFocused = useIsFocused(); - return isFocused ? : null; -} - -function LLMScreen() { - const { bottom } = useSafeAreaInsets(); - const [isTextInputFocused, setIsTextInputFocused] = useState(false); - const [userInput, setUserInput] = useState(''); - const [selectedModel, setSelectedModel] = useState( - models.llm.lfm2_5_1_2b_instruct() - ); - const textInputRef = useRef(null); - const { setGlobalGenerating } = useContext(GeneratingContext); - - const llm = useLLM({ model: selectedModel }); - const tokenCount = llm.isReady ? llm.getGeneratedTokenCount() : 0; - const { stats, onMessageSend } = useLLMStats(llm.response, llm.isGenerating, tokenCount); - const [error, setError] = useState(null); - - useEffect(() => { - if (llm.error) setError(String(llm.error)); - }, [llm.error]); - - useEffect(() => { - setGlobalGenerating(llm.isGenerating); - }, [llm.isGenerating, setGlobalGenerating]); - - const sendMessage = async () => { - onMessageSend(); - setUserInput(''); - textInputRef.current?.clear(); - try { - await llm.sendMessage(userInput); - } catch (e) { - setError(e instanceof Error ? e.message : String(e)); - } - }; - - return !llm.isReady && !llm.error ? ( - - ) : ( - - - - setError(null)} /> - {llm.messageHistory.length ? ( - - - - ) : ( - - Hello! 👋 - What can I help you with? - - - )} - - setSelectedModel(m)} - disabled={llm.isGenerating} - /> - - - setIsTextInputFocused(true)} - onBlur={() => setIsTextInputFocused(false)} - style={{ - ...styles.textInput, - borderColor: isTextInputFocused ? ColorPalette.blueDark : ColorPalette.blueLight, - }} - placeholder={isTextInputFocused ? '' : 'Your message'} - placeholderTextColor={'#C1C6E5'} - multiline={true} - ref={textInputRef} - value={userInput} - onChangeText={(text: string) => setUserInput(text)} - /> - {userInput && ( - !llm.isGenerating && (await sendMessage())} - > - - - )} - {llm.isGenerating && ( - - - - )} - - - - - ); -} - -const styles = StyleSheet.create({ - keyboardAvoidingView: { - flex: 1, - paddingBottom: Platform.OS === 'android' ? 20 : 0, - }, - container: { flex: 1 }, - chatContainer: { flex: 10, width: '100%' }, - helloMessageContainer: { - flex: 10, - width: '100%', - alignItems: 'center', - justifyContent: 'center', - overflow: 'hidden', - }, - helloText: { - fontFamily: 'medium', - fontSize: 30, - color: ColorPalette.primary, - }, - bottomHelloText: { - fontFamily: 'regular', - fontSize: 20, - lineHeight: 28, - textAlign: 'center', - color: ColorPalette.primary, - }, - bottomContainer: { - height: 100, - width: '100%', - flexDirection: 'row', - justifyContent: 'space-between', - alignItems: 'center', - paddingHorizontal: 16, - }, - textInput: { - flex: 1, - borderWidth: 1, - borderRadius: 8, - lineHeight: 19.6, - fontFamily: 'regular', - fontSize: 14, - color: ColorPalette.primary, - padding: 16, - }, - sendChatTouchable: { - height: '100%', - width: 48, - justifyContent: 'center', - alignItems: 'flex-end', - }, -}); diff --git a/apps/legacy/llm/app/llm_structured_output/index.tsx b/apps/legacy/llm/app/llm_structured_output/index.tsx deleted file mode 100644 index ae22afa4a7..0000000000 --- a/apps/legacy/llm/app/llm_structured_output/index.tsx +++ /dev/null @@ -1,269 +0,0 @@ -import { useContext, useEffect, useRef, useState } from 'react'; -import { - Keyboard, - KeyboardAvoidingView, - StyleSheet, - Text, - TextInput, - Platform, - TouchableOpacity, - TouchableWithoutFeedback, - View, -} from 'react-native'; -import SendIcon from '../../assets/icons/send_icon.svg'; -import Spinner from '../../components/Spinner'; -import SuggestedPrompts from '../../components/SuggestedPrompts'; - -const SUGGESTED_PROMPTS = [ - "I'm John. Is this damaged? I offer $100.", - "Hi, I'm Alice! How old is it? Offering $250 USD.", - "I'm Bob. Does it have warranty? I'll pay €50.", - "Name's Sara. What condition? My bid is $75.", -]; -import { useLLMStats } from '../../hooks/useLLMStats'; -import { StatsBar } from '../../components/StatsBar'; -import ErrorBanner from '../../components/ErrorBanner'; -import { - models, - useLLM, - fixAndValidateStructuredOutput, - getStructuredOutputPrompt, -} from 'react-native-executorch/legacy'; -import { ModelPicker } from '../../components/ModelPicker'; -import { LLM_MODELS, LLMModelSources } from '../../components/llmModels'; -import PauseIcon from '../../assets/icons/pause_icon.svg'; -import ColorPalette from '../../colors'; -import Messages from '../../components/Messages'; -import { useIsFocused } from 'expo-router'; -import { GeneratingContext } from '../../context'; -import { Schema } from 'jsonschema'; -import * as z from 'zod/v4'; - -// Defining schemas -const responseSchema: Schema = { - properties: { - username: { - type: 'string', - description: 'Name of user, that is asking a question.', - }, - question: { - type: 'string', - description: 'Question that user asks.', - }, - bid: { - type: 'number', - description: 'Amount of money, that user offers.', - }, - currency: { - type: 'string', - description: 'Currency of offer.', - }, - }, - required: ['username', 'bid'], - type: 'object', -}; - -const responseSchemaWithZod = z.object({ - username: z.string().meta({ description: 'Name of user, that is asking a question.' }), - question: z.optional(z.string().meta({ description: 'Question that user asks.' })), - bid: z.number().meta({ description: 'Amount of money, that user offers.' }), - currency: z.optional(z.string().meta({ description: 'Currency of offer.' })), -}); - -export default function LLMScreenWrapper() { - const isFocused = useIsFocused(); - - return isFocused ? : null; -} - -function LLMScreen() { - const [isTextInputFocused, setIsTextInputFocused] = useState(false); - const [userInput, setUserInput] = useState(''); - const [selectedModel, setSelectedModel] = useState(models.llm.qwen3_1_7b()); - const textInputRef = useRef(null); - const { setGlobalGenerating } = useContext(GeneratingContext); - - const llm = useLLM({ model: selectedModel }); - const tokenCount = llm.isReady ? llm.getGeneratedTokenCount() : 0; - const { stats, onMessageSend } = useLLMStats(llm.response, llm.isGenerating, tokenCount); - const [error, setError] = useState(null); - - useEffect(() => { - setGlobalGenerating(llm.isGenerating); - }, [llm.isGenerating, setGlobalGenerating]); - - const { configure } = llm; - useEffect(() => { - const formattingInstructions = getStructuredOutputPrompt(responseSchema); - const prompt = `Your goal is to parse user's messages and return them in JSON format. Don't respond to user. Simply return JSON with user's question parsed. \n${formattingInstructions}\n /no_think`; - - configure({ - chatConfig: { - systemPrompt: prompt, - }, - }); - }, [configure]); - - useEffect(() => { - const lastMessage = llm.messageHistory.at(-1); - if (!llm.isGenerating && lastMessage?.role === 'assistant') { - try { - const formattedOutput = fixAndValidateStructuredOutput(lastMessage.content, responseSchema); - const formattedOutputWithZod = fixAndValidateStructuredOutput( - lastMessage.content, - responseSchemaWithZod - ); - console.log('Formatted output:', formattedOutput, formattedOutputWithZod); - } catch (e) { - console.log("Error parsing output and/or output doesn't match required schema!", e); - } - } - }, [llm.messageHistory, llm.isGenerating]); - - useEffect(() => { - if (llm.error) setError(String(llm.error)); - }, [llm.error]); - - const sendMessage = async () => { - onMessageSend(); - setUserInput(''); - textInputRef.current?.clear(); - try { - await llm.sendMessage(userInput); - } catch (e) { - setError(e instanceof Error ? e.message : String(e)); - } - }; - - return !llm.isReady && !llm.error ? ( - - ) : ( - - - - setError(null)} /> - {llm.messageHistory.length ? ( - - - - ) : ( - - Hello! 👋 - - I can parse user's questions! Introduce yourself, ask questions and offer a price - for some product. - - - - )} - - setSelectedModel(m)} - disabled={llm.isGenerating} - /> - - - setIsTextInputFocused(true)} - onBlur={() => setIsTextInputFocused(false)} - style={{ - ...styles.textInput, - borderColor: isTextInputFocused ? ColorPalette.blueDark : ColorPalette.blueLight, - }} - placeholder={ - isTextInputFocused - ? '' - : "Your message e.g. I'm John. Is this product damaged? I can give you $100 for this." - } - placeholderTextColor={'#C1C6E5'} - multiline={true} - ref={textInputRef} - value={userInput} - onChangeText={(text: string) => setUserInput(text)} - /> - {userInput && ( - !llm.isGenerating && (await sendMessage())} - > - - - )} - {llm.isGenerating && ( - - - - )} - - - - - ); -} - -const styles = StyleSheet.create({ - keyboardAvoidingView: { flex: 1 }, - container: { flex: 1, paddingBottom: Platform.OS === 'android' ? 20 : 0 }, - chatContainer: { flex: 10, width: '100%' }, - helloMessageContainer: { - flex: 10, - width: '100%', - alignItems: 'center', - justifyContent: 'center', - }, - helloText: { - fontFamily: 'medium', - fontSize: 30, - color: ColorPalette.primary, - }, - bottomHelloText: { - padding: 20, - fontFamily: 'regular', - fontSize: 20, - lineHeight: 28, - textAlign: 'center', - color: ColorPalette.primary, - }, - bottomContainer: { - height: 100, - width: '100%', - flexDirection: 'row', - justifyContent: 'space-between', - alignItems: 'center', - paddingHorizontal: 16, - }, - textInput: { - flex: 1, - borderWidth: 1, - borderRadius: 8, - lineHeight: 19.6, - fontFamily: 'regular', - fontSize: 14, - color: ColorPalette.primary, - padding: 16, - }, - sendChatTouchable: { - height: '100%', - width: 48, - justifyContent: 'center', - alignItems: 'flex-end', - }, -}); diff --git a/apps/legacy/llm/app/llm_tool_calling/index.tsx b/apps/legacy/llm/app/llm_tool_calling/index.tsx deleted file mode 100644 index c67c91c373..0000000000 --- a/apps/legacy/llm/app/llm_tool_calling/index.tsx +++ /dev/null @@ -1,330 +0,0 @@ -import { useContext, useEffect, useRef, useState } from 'react'; -import { - Keyboard, - KeyboardAvoidingView, - Platform, - StyleSheet, - Text, - TextInput, - TouchableOpacity, - TouchableWithoutFeedback, - View, - Linking, - Alert, - AppState, -} from 'react-native'; -import SWMIcon from '../../assets/icons/swm_icon.svg'; -import SendIcon from '../../assets/icons/send_icon.svg'; -import Spinner from '../../components/Spinner'; -import ErrorBanner from '../../components/ErrorBanner'; -import { models, useLLM, DEFAULT_SYSTEM_PROMPT } from 'react-native-executorch/legacy'; -import { ModelPicker } from '../../components/ModelPicker'; -import { LLM_MODELS, LLMModelSources } from '../../components/llmModels'; -import PauseIcon from '../../assets/icons/pause_icon.svg'; -import ColorPalette from '../../colors'; -import Messages from '../../components/Messages'; -import * as Brightness from 'expo-brightness'; -import * as Calendar from 'expo-calendar'; -import { PermissionStatus } from 'expo'; -import { executeTool, TOOL_DEFINITIONS_PHONE } from '../../utils/tools'; -import { useIsFocused } from 'expo-router'; -import { GeneratingContext } from '../../context'; -import SuggestedPrompts from '../../components/SuggestedPrompts'; - -const SUGGESTED_PROMPTS = [ - 'What events do I have today?', - 'Add a meeting tomorrow at 2pm', - 'Set screen brightness to 50%', - 'What do I have scheduled this week?', -]; -import { useLLMStats } from '../../hooks/useLLMStats'; -import { StatsBar } from '../../components/StatsBar'; - -export default function LLMToolCallingScreenWrapper() { - const isFocused = useIsFocused(); - - return isFocused ? : null; -} - -function LLMToolCallingScreen() { - const [isTextInputFocused, setIsTextInputFocused] = useState(false); - const [userInput, setUserInput] = useState(''); - const [hasCalendarPermission, setHasCalendarPermission] = useState(true); - const [hasBrightnessPermission, setHasBrightnessPermission] = useState(true); - const [selectedModel, setSelectedModel] = useState(models.llm.hammer2_1_1_5b()); - const textInputRef = useRef(null); - const { setGlobalGenerating } = useContext(GeneratingContext); - - const llm = useLLM({ model: selectedModel }); - const tokenCount = llm.isReady ? llm.getGeneratedTokenCount() : 0; - const { stats, onMessageSend } = useLLMStats(llm.response, llm.isGenerating, tokenCount); - const [error, setError] = useState(null); - - useEffect(() => { - setGlobalGenerating(llm.isGenerating); - }, [llm.isGenerating, setGlobalGenerating]); - - const { configure } = llm; - useEffect(() => { - configure({ - chatConfig: { - systemPrompt: `${DEFAULT_SYSTEM_PROMPT} Current time and date: ${new Date().toString()}`, - }, - toolsConfig: { - tools: TOOL_DEFINITIONS_PHONE, - executeToolCallback: executeTool, - displayToolCalls: true, - }, - }); - }, [configure]); - - useEffect(() => { - if (llm.error) setError(String(llm.error)); - }, [llm.error]); - - const requestCalendarPermission = async () => { - const { status, canAskAgain } = await Calendar.getCalendarPermissionsAsync(); - - if (status === PermissionStatus.GRANTED) { - setHasCalendarPermission(true); - return; - } - - if (status === PermissionStatus.UNDETERMINED || canAskAgain) { - const { status: nextStatus } = await Calendar.requestCalendarPermissionsAsync(); - setHasCalendarPermission(nextStatus === PermissionStatus.GRANTED); - return; - } - - setHasCalendarPermission(false); - Alert.alert( - 'Calendar Permission Required', - 'To read or add events, the app requires "Full Access" to your calendar. Please enable this in your device settings.', - [ - { text: 'Cancel', style: 'cancel' }, - { text: 'Open Settings', onPress: () => Linking.openSettings() }, - ] - ); - }; - - const requestBrightnessPermission = async () => { - const { status, canAskAgain } = await Brightness.getPermissionsAsync(); - - if (status === Brightness.PermissionStatus.GRANTED) { - setHasBrightnessPermission(true); - return; - } - - if (status === Brightness.PermissionStatus.UNDETERMINED || canAskAgain) { - const { status: nextStatus } = await Brightness.requestPermissionsAsync(); - setHasBrightnessPermission(nextStatus === Brightness.PermissionStatus.GRANTED); - return; - } - - setHasBrightnessPermission(false); - Alert.alert( - 'Brightness Permission Required', - 'To change screen brightness, the app requires permission. Please enable this in your device settings.', - [ - { text: 'Cancel', style: 'cancel' }, - { text: 'Open Settings', onPress: () => Linking.openSettings() }, - ] - ); - }; - - useEffect(() => { - requestCalendarPermission(); - requestBrightnessPermission(); - }, []); - - useEffect(() => { - const subscription = AppState.addEventListener('change', (nextAppState) => { - if (nextAppState === 'active') { - requestCalendarPermission(); - requestBrightnessPermission(); - } - }); - - return () => { - subscription.remove(); - }; - }, []); - - const sendMessage = async () => { - onMessageSend(); - setUserInput(''); - textInputRef.current?.clear(); - try { - await llm.sendMessage(userInput); - } catch (e) { - setError(e instanceof Error ? e.message : String(e)); - } - }; - - return !llm.isReady && !llm.error ? ( - - ) : ( - - - - - - - setError(null)} /> - {llm.messageHistory.length ? ( - - - - ) : ( - - Hello! 👋 - - I can use calendar! Ask me to check it or add an event for you! - - - - )} - - {!hasCalendarPermission && ( - - - Calendar access is required.{' '} - Grant Access - - - )} - {!hasBrightnessPermission && ( - - - Brightness access is required.{' '} - Grant Access - - - )} - - setSelectedModel(m)} - disabled={llm.isGenerating} - /> - - - setIsTextInputFocused(true)} - onBlur={() => setIsTextInputFocused(false)} - style={{ - ...styles.textInput, - borderColor: isTextInputFocused ? ColorPalette.blueDark : ColorPalette.blueLight, - }} - placeholder={isTextInputFocused ? '' : 'Your message'} - placeholderTextColor={'#C1C6E5'} - multiline={true} - ref={textInputRef} - value={userInput} - onChangeText={(text: string) => setUserInput(text)} - /> - {userInput && ( - !llm.isGenerating && (await sendMessage())} - > - - - )} - {llm.isGenerating && ( - - - - )} - - - - - ); -} - -const styles = StyleSheet.create({ - container: { flex: 1, paddingBottom: Platform.OS === 'android' ? 20 : 0 }, - keyboardAvoidingView: { flex: 1 }, - topContainer: { - height: 68, - width: '100%', - alignItems: 'center', - justifyContent: 'center', - }, - chatContainer: { flex: 10, width: '100%' }, - textModelName: { color: ColorPalette.primary }, - helloMessageContainer: { - flex: 10, - width: '100%', - alignItems: 'center', - justifyContent: 'center', - }, - helloText: { - fontFamily: 'medium', - fontSize: 30, - color: ColorPalette.primary, - }, - bottomHelloText: { - padding: 20, - fontFamily: 'regular', - fontSize: 20, - lineHeight: 28, - textAlign: 'center', - color: ColorPalette.primary, - }, - bottomContainer: { - height: 100, - width: '100%', - flexDirection: 'row', - justifyContent: 'space-between', - alignItems: 'center', - paddingHorizontal: 16, - }, - textInput: { - flex: 1, - borderWidth: 1, - borderRadius: 8, - lineHeight: 19.6, - fontFamily: 'regular', - fontSize: 14, - color: ColorPalette.primary, - padding: 16, - }, - sendChatTouchable: { - height: '100%', - width: 48, - justifyContent: 'center', - alignItems: 'flex-end', - }, - permissionBanner: { - backgroundColor: '#FFF3CD', - paddingVertical: 10, - paddingHorizontal: 16, - alignItems: 'center', - }, - permissionBannerText: { - fontFamily: 'regular', - fontSize: 13, - color: '#856404', - }, - permissionBannerLink: { - fontFamily: 'medium', - color: ColorPalette.blueDark, - }, -}); diff --git a/apps/legacy/llm/app/multimodal_llm/index.tsx b/apps/legacy/llm/app/multimodal_llm/index.tsx deleted file mode 100644 index 8e657e2509..0000000000 --- a/apps/legacy/llm/app/multimodal_llm/index.tsx +++ /dev/null @@ -1,545 +0,0 @@ -import { useContext, useEffect, useRef, useState } from 'react'; -import { - Image, - Keyboard, - KeyboardAvoidingView, - Platform, - StyleSheet, - Text, - TextInput, - TouchableOpacity, - TouchableWithoutFeedback, - View, -} from 'react-native'; -import { launchImageLibrary } from 'react-native-image-picker'; -import { AudioManager, AudioRecorder, AudioContext } from 'react-native-audio-api'; -import { useIsFocused } from 'expo-router'; -import { useSafeAreaInsets } from 'react-native-safe-area-context'; -import { models, useLLM } from 'react-native-executorch/legacy'; -import SendIcon from '../../assets/icons/send_icon.svg'; -import PauseIcon from '../../assets/icons/pause_icon.svg'; -import ColorPalette from '../../colors'; -import Messages from '../../components/Messages'; -import Spinner from '../../components/Spinner'; -import { GeneratingContext } from '../../context'; -import SuggestedPrompts from '../../components/SuggestedPrompts'; -import ErrorBanner from '../../components/ErrorBanner'; -import AudioWaveform from '../../components/AudioWaveform'; - -const SUGGESTED_PROMPTS = [ - "What's in this image?", - 'Describe this scene in detail', - 'What objects can you see?', - 'What text appears in this image?', - 'Transcribe the audio', -]; -import { useLLMStats } from '../../hooks/useLLMStats'; -import { StatsBar } from '../../components/StatsBar'; - -export default function MultimodalLLMScreenWrapper() { - const isFocused = useIsFocused(); - return isFocused ? : null; -} - -function MultimodalLLMScreen() { - const { bottom } = useSafeAreaInsets(); - const [imageUri, setImageUri] = useState(null); - const [userInput, setUserInput] = useState(''); - const [isTextInputFocused, setIsTextInputFocused] = useState(false); - const textInputRef = useRef(null); - const { setGlobalGenerating } = useContext(GeneratingContext); - - const [audioBuffer, setAudioBuffer] = useState(null); - const [audioLabel, setAudioLabel] = useState(null); - const [audioUrl, setAudioUrl] = useState(''); - const [isFetchingAudio, setIsFetchingAudio] = useState(false); - const [isRecording, setIsRecording] = useState(false); - const [hasMicPermission, setHasMicPermission] = useState(false); - const recorder = useRef(new AudioRecorder()); - const recordChunks = useRef([]); - - const [error, setError] = useState(null); - const model = models.llm.gemma4_e2b_multimodal(); - const vlm = useLLM({ model: model }); - const tokenCount = vlm.isReady ? vlm.getGeneratedTokenCount() : 0; - const { stats, onMessageSend } = useLLMStats(vlm.response, vlm.isGenerating, tokenCount); - - useEffect(() => { - setGlobalGenerating(vlm.isGenerating); - }, [vlm.isGenerating, setGlobalGenerating]); - - // Updated to use local error state - useEffect(() => { - if (vlm.error) setError(String(vlm.error)); - }, [vlm.error]); - - useEffect(() => { - AudioManager.setAudioSessionOptions({ - iosCategory: 'playAndRecord', - iosMode: 'spokenAudio', - iosOptions: ['allowBluetoothHFP', 'defaultToSpeaker'], - }); - (async () => { - const status = await AudioManager.requestRecordingPermissions(); - setHasMicPermission(status === 'Granted'); - })(); - - return () => { - if (vlm.isGenerating) vlm.interrupt(); - // eslint-disable-next-line react-hooks/exhaustive-deps - recorder.current.stop(); - AudioManager.setAudioSessionActivity(false); - }; - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); - - const loadAudioFromUrl = async () => { - const url = audioUrl.trim(); - if (!url) return; - setIsFetchingAudio(true); - try { - const ctx = new AudioContext({ sampleRate: 16000 }); - const decoded = await ctx.decodeAudioData(url); - const pcm = decoded.getChannelData(0); - const name = url.split('/').pop() || 'audio'; - setAudioBuffer(pcm); - setAudioLabel(`${name} · ${(pcm.length / 16000).toFixed(1)}s`); - } catch (e) { - setError(e instanceof Error ? e.message : String(e)); - } finally { - setIsFetchingAudio(false); - } - }; - - const startRecording = async () => { - if (!hasMicPermission) { - setError('Microphone permission denied. Please enable it in Settings.'); - return; - } - recordChunks.current = []; - const sampleRate = 16000; - recorder.current.onAudioReady( - { sampleRate, bufferLength: 0.1 * sampleRate, channelCount: 1 }, - ({ buffer }) => { - recordChunks.current.push(new Float32Array(buffer.getChannelData(0))); - } - ); - try { - await AudioManager.setAudioSessionActivity(true); - const result = await recorder.current.start(); - if (result.status === 'error') { - setError(`Recording problems: ${result.message}`); - return; - } - setIsRecording(true); - } catch (e) { - setError(e instanceof Error ? e.message : String(e)); - } - }; - - const stopRecording = () => { - recorder.current.stop(); - setIsRecording(false); - const total = recordChunks.current.reduce((n, c) => n + c.length, 0); - if (total === 0) return; - const pcm = new Float32Array(total); - let off = 0; - for (const c of recordChunks.current) { - pcm.set(c, off); - off += c.length; - } - recordChunks.current = []; - setAudioBuffer(pcm); - setAudioLabel(`Recording · ${(pcm.length / 16000).toFixed(1)}s`); - }; - - const clearAudio = () => { - setAudioBuffer(null); - setAudioLabel(null); - }; - - const pickImage = async () => { - try { - const result = await launchImageLibrary({ mediaType: 'photo' }); - if (result.assets && result.assets.length > 0) { - const uri = result.assets[0]?.uri; - if (uri) setImageUri(uri); - } - } catch (e) { - setError(e instanceof Error ? e.message : String(e)); - } - }; - - const sendMessage = async () => { - if (!(imageUri || audioBuffer || userInput.trim()) || vlm.isGenerating) return; - onMessageSend(); - const text = userInput.trim(); - setUserInput(''); - textInputRef.current?.clear(); - Keyboard.dismiss(); - const currentImageUri = imageUri; - const currentAudio = audioBuffer; - setImageUri(null); - setAudioBuffer(null); - setAudioLabel(null); - try { - const media = - currentImageUri || currentAudio - ? { - ...(currentImageUri ? { imagePath: currentImageUri } : {}), - ...(currentAudio ? { audioBuffer: currentAudio } : {}), - } - : undefined; - await vlm.sendMessage(text, media); - } catch (e) { - // Updated to set UI error instead of just console.error - setError(e instanceof Error ? e.message : String(e)); - } - }; - - // Updated Spinner check so it doesn't block the ErrorBanner if loading fails - if (!vlm.isReady && !vlm.error) { - return ( - - ); - } - - return ( - - - - {/* Injected ErrorBanner here */} - setError(null)} /> - - {vlm.messageHistory.length ? ( - - - - ) : ( - - Hello! 👋 - - {model.capabilities.find((c) => c === 'audio') - ? 'Say hi, or pick an image, and ask me anything about it.' - : 'Pick an image and ask me anything about it.'} - - - - )} - - {/* Image thumbnail strip */} - {imageUri && ( - - - Tap to change - - )} - - {/* Audio URL input */} - - - - {isFetchingAudio ? '…' : 'Load'} - - - - {/* Audio attachment strip */} - {audioLabel && ( - - - 🎵 {audioLabel} - - ✕ - - - - - )} - - - - {/* Image picker button */} - - 📷 - - - {/* Mic record / stop button */} - - {isRecording ? '⏹️' : '🎤'} - - - setIsTextInputFocused(true)} - onBlur={() => setIsTextInputFocused(false)} - style={[ - styles.textInput, - { - borderColor: isTextInputFocused ? ColorPalette.blueDark : ColorPalette.blueLight, - }, - ]} - placeholder={imageUri ? 'Ask about the image…' : 'Your message'} - placeholderTextColor="#C1C6E5" - multiline - value={userInput} - onChangeText={setUserInput} - /> - - {(imageUri || audioBuffer || userInput.trim()) && !vlm.isGenerating && ( - - - - )} - {vlm.isGenerating && ( - - - - )} - - - - - ); -} - -const styles = StyleSheet.create({ - // Setup phase - setupContainer: { - flex: 1, - padding: 24, - backgroundColor: '#fff', - justifyContent: 'center', - }, - setupTitle: { - fontSize: 20, - fontFamily: 'medium', - color: ColorPalette.primary, - marginBottom: 8, - }, - setupHint: { - fontSize: 13, - fontFamily: 'regular', - color: ColorPalette.blueDark, - marginBottom: 32, - lineHeight: 18, - }, - filePickerRow: { - flexDirection: 'row', - alignItems: 'center', - borderWidth: 1, - borderColor: ColorPalette.blueLight, - borderRadius: 10, - padding: 14, - marginBottom: 12, - backgroundColor: '#fafbff', - }, - filePickerInfo: { flex: 1 }, - filePickerLabel: { - fontSize: 12, - fontFamily: 'medium', - color: ColorPalette.blueDark, - marginBottom: 2, - }, - filePickerValue: { fontSize: 14, fontFamily: 'regular' }, - filePickerValueSet: { color: ColorPalette.primary }, - filePickerValueEmpty: { color: ColorPalette.blueLight }, - filePickerChevron: { - fontSize: 24, - color: ColorPalette.blueLight, - marginLeft: 8, - }, - loadButton: { - marginTop: 16, - backgroundColor: ColorPalette.strongPrimary, - borderRadius: 10, - padding: 14, - alignItems: 'center', - }, - loadButtonDisabled: { backgroundColor: ColorPalette.blueLight }, - loadButtonText: { color: '#fff', fontFamily: 'medium', fontSize: 15 }, - - // Chat phase - container: { flex: 1 }, - chatContainer: { flex: 10, width: '100%' }, - helloMessageContainer: { - flex: 10, - width: '100%', - alignItems: 'center', - justifyContent: 'center', - overflow: 'hidden', - }, - helloText: { - fontFamily: 'medium', - fontSize: 30, - color: ColorPalette.primary, - }, - bottomHelloText: { - fontFamily: 'regular', - fontSize: 20, - lineHeight: 28, - textAlign: 'center', - color: ColorPalette.primary, - paddingHorizontal: 24, - }, - imageThumbnailContainer: { - flexDirection: 'row', - alignItems: 'center', - paddingHorizontal: 16, - paddingVertical: 6, - gap: 8, - }, - imageThumbnail: { - width: 48, - height: 48, - borderRadius: 8, - borderWidth: 1, - borderColor: ColorPalette.blueLight, - }, - imageThumbnailHint: { - fontSize: 12, - fontFamily: 'regular', - color: ColorPalette.blueDark, - }, - audioAttachmentContainer: { - flexDirection: 'column', - paddingHorizontal: 16, - paddingVertical: 8, - marginHorizontal: 16, - marginBottom: 4, - borderRadius: 8, - borderWidth: 1, - borderColor: ColorPalette.blueLight, - backgroundColor: '#fafbff', - }, - audioAttachmentRow: { - flexDirection: 'row', - alignItems: 'center', - justifyContent: 'space-between', - }, - audioAttachmentText: { - fontSize: 13, - fontFamily: 'regular', - color: ColorPalette.blueDark, - }, - audioAttachmentClear: { - fontSize: 16, - color: ColorPalette.blueDark, - paddingHorizontal: 8, - }, - audioWaveform: { - marginTop: 6, - minWidth: 0, - }, - audioUrlRow: { - flexDirection: 'row', - alignItems: 'center', - marginHorizontal: 16, - marginBottom: 4, - }, - audioUrlInput: { - flex: 1, - padding: 10, - borderTopLeftRadius: 8, - borderBottomLeftRadius: 8, - borderWidth: 1, - borderColor: ColorPalette.blueLight, - borderRightWidth: 0, - fontFamily: 'regular', - fontSize: 13, - color: ColorPalette.primary, - }, - audioUrlButton: { - paddingVertical: 10, - paddingHorizontal: 16, - backgroundColor: ColorPalette.strongPrimary, - borderTopRightRadius: 8, - borderBottomRightRadius: 8, - justifyContent: 'center', - alignItems: 'center', - }, - audioUrlButtonText: { - color: '#fff', - fontFamily: 'medium', - fontSize: 13, - }, - disabled: { - opacity: 0.5, - }, - bottomContainer: { - height: 100, - width: '100%', - flexDirection: 'row', - justifyContent: 'space-between', - alignItems: 'center', - paddingHorizontal: 16, - }, - imageButton: { - width: 40, - height: 40, - justifyContent: 'center', - alignItems: 'center', - marginRight: 4, - }, - imageButtonText: { fontSize: 22 }, - textInput: { - flex: 1, - borderWidth: 1, - borderRadius: 8, - lineHeight: 19.6, - fontFamily: 'regular', - fontSize: 14, - color: ColorPalette.primary, - padding: 16, - }, - sendChatTouchable: { - height: '100%', - width: 48, - justifyContent: 'center', - alignItems: 'flex-end', - }, -}); diff --git a/apps/legacy/llm/app/privacy_filter/index.tsx b/apps/legacy/llm/app/privacy_filter/index.tsx deleted file mode 100644 index b713c96aa6..0000000000 --- a/apps/legacy/llm/app/privacy_filter/index.tsx +++ /dev/null @@ -1,234 +0,0 @@ -import { useMemo, useState } from 'react'; -import { - ActivityIndicator, - ScrollView, - StyleSheet, - Text, - TouchableOpacity, - View, -} from 'react-native'; -import { useIsFocused } from 'expo-router'; -import { useSafeAreaInsets } from 'react-native-safe-area-context'; -import { - models, - PiiEntity, - PrivacyFilterModelSources, - usePrivacyFilter, -} from 'react-native-executorch/legacy'; - -const privacyFilter = models.privacy_filter; -import ColorPalette from '../../colors'; -import { ModelOption, ModelPicker } from '../../components/ModelPicker'; -import { buildSegments, colorForLabel, matchEntities } from '../../utils/piiMatching'; - -/* cspell:disable */ -// Sample tuned for the OpenAI base model — exercises the 8 entity types it -// recognizes (person, email, phone, account_number, address, date, url, -// secret). -const OPENAI_SAMPLE = `My name is Sarah Chen and I work as a senior engineer at Acme Corp. You can reach me at sarah.chen@acmecorp.io or call my direct line at (415) 923-0847. For billing inquiries, my account number is ACC-8821-4490-3371. - -I've been living at 17 Birchwood Lane, Portland, OR 97201 since October 3rd, 2019. Before that I was at 8 Rue de Rivoli, Paris, 75001, France. My personal website is https://sarahchen.dev and my GitHub is https://github.com/schen-eng. Feel free to connect — I usually respond within a business day. - -My date of birth is June 12, 1991, and my backup email is s.chen.personal@gmail.com in case the primary address is unreachable. This message also contains a confidential API key: sk-T93kXpLm2NvBqR7dYwZ4. Please do not share it outside the team. You can also reach my colleague James Okonkwo at j.okonkwo@acmecorp.io or at his mobile +44 7911 123456.`; -// Sample tuned for the OpenMed Nemotron model — covers categories the base -// OpenAI model doesn't have (medical, financial, technical, demographic). - -const NEMOTRON_SAMPLE = `Patient intake for Maria Lopez, female, age 47, blood type O+, born 1978-05-12. MRN 994-2210-AB; health plan beneficiary number HPBN-552-9931 with Aetna. SSN 412-55-7821, national ID DNI 88-7762-X. Primary occupation: registered nurse, currently employed full-time at Mercy General. Religion: Catholic; political view: independent. - -Reach her at maria.lopez@example.com or +1 (415) 555-0142. Mailing address: 84 Cedar Hill Road, Apt 3B, Berkeley, CA 94703, United States. Vehicle plate 7XKL922; driver license CA-D1294883. - -Payment for last visit: Visa ending 4992-1133-7820-4419, expires 11/28, CVV 884. Bank routing 021000089, SWIFT BIC CHASUS33. Employer EIN tax ID 47-3320118. Customer ID CUST-553201, employee ID EMP-A0093. - -Workstation MAC 3C:22:FB:8E:01:9A, IPv4 10.0.42.118, device IMEI 359888061234560. Service account API key sk-live-Tn8x3pLm2NvBqR7dYwZ4QF, password Hunter2!Spring. Session cookie sid=eyJ1c2VyIjoiOTk0MjIxMCJ9.`; -/* cspell:enable */ - -const MODEL_OPTIONS: ModelOption[] = [ - { - label: 'OpenAI Privacy Filter (8 entities)', - value: privacyFilter.openai(), - }, - { - label: 'OpenMed Nemotron (55 entities)', - value: privacyFilter.nemotron(), - }, -]; - -// Pick the right sample to display/run based on the active model. -function sampleFor(model: PrivacyFilterModelSources): string { - return model.modelName === privacyFilter.nemotron().modelName ? NEMOTRON_SAMPLE : OPENAI_SAMPLE; -} - -function HighlightedText({ source, entities }: { source: string; entities: PiiEntity[] }) { - const segments = useMemo( - () => buildSegments(source, matchEntities(source, entities)), - [source, entities] - ); - return ( - - {segments.map((seg, i) => - seg.label ? ( - - {seg.text} - - ) : ( - {seg.text} - ) - )} - - ); -} - -function PrivacyFilterScreen() { - const { bottom } = useSafeAreaInsets(); - const [entities, setEntities] = useState(null); - const [runError, setRunError] = useState(null); - const [inferenceMs, setInferenceMs] = useState(null); - const [selectedModel, setSelectedModel] = useState( - privacyFilter.openai() - ); - - const filter = usePrivacyFilter({ model: selectedModel }); - const sampleText = sampleFor(selectedModel); - - const onRun = async () => { - setRunError(null); - setEntities(null); - setInferenceMs(null); - const startedAt = Date.now(); - try { - const result = await filter.generate(sampleText); - const elapsed = Date.now() - startedAt; - setInferenceMs(elapsed); - setEntities(result); - } catch (e) { - setRunError(e instanceof Error ? e.message : String(e)); - } - }; - - const disabled = !filter.isReady || filter.isGenerating; - - return ( - - { - setEntities(null); - setRunError(null); - setInferenceMs(null); - setSelectedModel(m); - }} - label="Model" - disabled={filter.isGenerating} - /> - - {filter.error && ( - - Load error: {filter.error.message} - - )} - - {!filter.isReady && !filter.error && ( - - - - Downloading model… {Math.round((filter.downloadProgress ?? 0) * 100)}% - - - )} - - - {entities ? ( - - ) : ( - {sampleText} - )} - - - - {filter.isGenerating ? ( - - ) : ( - - Detect PII - {inferenceMs !== null && ` · ${inferenceMs} ms`} - - )} - - - {runError && ( - - Run error: {runError} - - )} - - ); -} - -export default function PrivacyFilterScreenWrapper() { - const isFocused = useIsFocused(); - return isFocused ? : null; -} - -const styles = StyleSheet.create({ - container: { - flex: 1, - padding: 16, - backgroundColor: '#fff', - gap: 10, - }, - textBox: { - flex: 1, - borderWidth: 1, - borderColor: '#e0e0e0', - borderRadius: 8, - padding: 10, - }, - sampleText: { - fontSize: 13, - color: '#222', - lineHeight: 19, - }, - highlight: { - fontWeight: '600', - borderRadius: 3, - }, - runButton: { - backgroundColor: ColorPalette.primary, - borderRadius: 8, - paddingVertical: 12, - alignItems: 'center', - }, - runButtonText: { - color: '#fff', - fontSize: 15, - fontWeight: '600', - }, - buttonDisabled: { - opacity: 0.5, - }, - centerBlock: { - alignItems: 'center', - gap: 6, - paddingVertical: 8, - }, - muted: { - color: '#666', - fontSize: 12, - }, - errorBanner: { - backgroundColor: '#fdecea', - borderColor: '#f5c6cb', - borderWidth: 1, - borderRadius: 6, - padding: 8, - }, - errorText: { - color: '#a94442', - fontSize: 12, - }, -}); diff --git a/apps/legacy/llm/assets/fonts/Aeonik-Medium.otf b/apps/legacy/llm/assets/fonts/Aeonik-Medium.otf deleted file mode 100644 index cd9981f4395768ed55c99c15b78cc5496142c792..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122080 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%0Ay4Qc^?@`Wq8)%=22jZbG(k&JR6-zvoudr7B!Hqo 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

Hpijw%Go_B>1~L<0`$dq7+;&@pwlD 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 - - - - - - - - diff --git a/apps/legacy/llm/assets/icons/favicon.png b/apps/legacy/llm/assets/icons/favicon.png deleted file mode 100644 index e75f697b1801871ad8cd9309b05e8ffe8c6b6d01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1466 zcmV;r1x5OaP)F>1w{Y zBeHf{*q3<2*AtQf4s&-m0MsH$EBv51Nj=s=Appw|nd1Yi(-DKZBN$9bAlWN83A_)0 z$4U=S!XyBuAm(`t#aW=l*tHPgHRE~MrmzGWN*Eidc=$BV2uYe|Rpi@t-me&ht6I?| ze$M(9=%DxSVTwNL7B*O`z`fRE$T)18O{B^J5OHo#W%kD-}gAcJO3n1x6Q{X*TFh-d!yx?Z$G16f%*K?exQ+p ztyb%4*R_Y=)qQBLG-9hc_A|ub$th|8Sk1bi@fFe$DwUpU57nc*-z8<&dM#e3a2hB! z16wLhz7o)!MC8}$7Jv9c-X$w^Xr(M9+`Py)~O3rGmgbvjOzXjGl>h9lp*QEn%coj{`wU^_3U|=B`xxU;X3K1L?JT?0?+@K!|MWVr zmC=;rjX@CoW3kMZA^8ZAy52^R{+-YG!J5q^YP&$t9F`&J8*KzV4t3ZZZJ>~XP7}Bs z<}$a~2r_E?4rlN=(}RBkF~6rBo}Sz7#r{X49&!gODP+TcB*@uq57EII-_>qWEt44B z`5o+tysMLY*Dq^n@4_vzKRu3We5|DI+i%NV=Z|)QAl{di_@%07*qoM6N<$f(5Fv<^TWy diff --git a/apps/legacy/llm/assets/icons/icon.png b/apps/legacy/llm/assets/icons/icon.png deleted file mode 100644 index a0b1526fc7b78680fd8d733dbc6113e1af695487..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22380 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 diff --git a/apps/legacy/llm/assets/icons/llama_icon.svg b/apps/legacy/llm/assets/icons/llama_icon.svg deleted file mode 100644 index 99e29696ec..0000000000 --- a/apps/legacy/llm/assets/icons/llama_icon.svg +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/apps/legacy/llm/assets/icons/mic_icon.svg b/apps/legacy/llm/assets/icons/mic_icon.svg deleted file mode 100644 index 955808bfba..0000000000 --- a/apps/legacy/llm/assets/icons/mic_icon.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/apps/legacy/llm/assets/icons/pause_icon.svg b/apps/legacy/llm/assets/icons/pause_icon.svg deleted file mode 100644 index 2f5164d284..0000000000 --- a/apps/legacy/llm/assets/icons/pause_icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/apps/legacy/llm/assets/icons/send_icon.svg b/apps/legacy/llm/assets/icons/send_icon.svg deleted file mode 100644 index dfe227a3b2..0000000000 --- a/apps/legacy/llm/assets/icons/send_icon.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/apps/legacy/llm/assets/icons/splash.png b/apps/legacy/llm/assets/icons/splash.png deleted file mode 100644 index 0e89705a9436743e42954d3744a0e7ff0d3d4701..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47346 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 diff --git a/apps/legacy/llm/assets/icons/stop_icon.svg b/apps/legacy/llm/assets/icons/stop_icon.svg deleted file mode 100644 index cb051899fe..0000000000 --- a/apps/legacy/llm/assets/icons/stop_icon.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/apps/legacy/llm/assets/icons/swm_icon.svg b/apps/legacy/llm/assets/icons/swm_icon.svg deleted file mode 100644 index 8c62f039be..0000000000 --- a/apps/legacy/llm/assets/icons/swm_icon.svg +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/apps/legacy/llm/babel.config.js b/apps/legacy/llm/babel.config.js deleted file mode 100644 index d872de3f55..0000000000 --- a/apps/legacy/llm/babel.config.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = function (api) { - api.cache(true); - return { - presets: ['babel-preset-expo'], - plugins: ['react-native-reanimated/plugin'], - }; -}; diff --git a/apps/legacy/llm/colors.ts b/apps/legacy/llm/colors.ts deleted file mode 100644 index 03defcda9e..0000000000 --- a/apps/legacy/llm/colors.ts +++ /dev/null @@ -1,11 +0,0 @@ -const ColorPalette = { - primary: '#001A72', - seaBlueLight: '#E1F3FA', - seaBlueMedium: '#B5E1F1', - seaBlueDark: '#87CCE8', - blueLight: '#C1C6E5', - blueDark: '#6676AA', - strongPrimary: '#020F3C', -}; - -export default ColorPalette; diff --git a/apps/legacy/llm/components/AnimatedChatLoading.tsx b/apps/legacy/llm/components/AnimatedChatLoading.tsx deleted file mode 100644 index faf750f263..0000000000 --- a/apps/legacy/llm/components/AnimatedChatLoading.tsx +++ /dev/null @@ -1,46 +0,0 @@ -import { StyleSheet, View } from 'react-native'; -import Animated, { - interpolateColor, - useAnimatedStyle, - useSharedValue, - withRepeat, - withTiming, -} from 'react-native-reanimated'; -import ColorPalette from '../colors'; - -export default function AnimatedChatLoading() { - const progress = useSharedValue(0); - progress.value = withRepeat(withTiming(1, { duration: 500 }), -1, true); - - const animatedStyle = useAnimatedStyle(() => { - return { - backgroundColor: interpolateColor( - progress.value, - [0, 1], - [ColorPalette.seaBlueLight, ColorPalette.seaBlueMedium, ColorPalette.seaBlueDark] - ), - }; - }); - - return ( - - - - - - ); -} - -const styles = StyleSheet.create({ - messageLoadingContainer: { - flex: 1, - flexDirection: 'row', - justifyContent: 'space-between', - alignItems: 'center', - }, - loadingDot: { - width: 8, - height: 8, - borderRadius: 4, - }, -}); diff --git a/apps/legacy/llm/components/AudioWaveform.tsx b/apps/legacy/llm/components/AudioWaveform.tsx deleted file mode 100644 index cac4035614..0000000000 --- a/apps/legacy/llm/components/AudioWaveform.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import { useMemo } from 'react'; -import { StyleProp, StyleSheet, View, ViewStyle } from 'react-native'; -import ColorPalette from '../colors'; - -interface AudioWaveformProps { - buffer: Float32Array | null | undefined; - style?: StyleProp; -} - -const NUM_BARS = 32; - -export default function AudioWaveform({ buffer, style }: AudioWaveformProps) { - const bars = useMemo(() => { - if (!buffer || buffer.length === 0) return null; - const chunkSize = Math.max(1, Math.floor(buffer.length / NUM_BARS)); - const peaks: number[] = []; - let max = 0; - for (let i = 0; i < NUM_BARS; i++) { - const start = i * chunkSize; - const end = Math.min(start + chunkSize, buffer.length); - let peak = 0; - for (let j = start; j < end; j++) { - const v = Math.abs(buffer[j] ?? 0); - if (v > peak) peak = v; - } - peaks.push(peak); - if (peak > max) max = peak; - } - return max > 0 ? peaks.map((p) => p / max) : peaks; - }, [buffer]); - - if (!bars) return null; - - return ( - - {bars.map((amp, i) => ( - - ))} - - ); -} - -const styles = StyleSheet.create({ - container: { - flexDirection: 'row', - alignItems: 'center', - height: 16, - minWidth: 160, - gap: 2, - }, - bar: { - flex: 1, - borderRadius: 1, - backgroundColor: ColorPalette.blueDark, - opacity: 0.35, - }, -}); diff --git a/apps/legacy/llm/components/ErrorBanner.tsx b/apps/legacy/llm/components/ErrorBanner.tsx deleted file mode 100644 index a5bebc504f..0000000000 --- a/apps/legacy/llm/components/ErrorBanner.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import React from 'react'; -import { View, Text, TouchableOpacity, StyleSheet } from 'react-native'; - -interface ErrorBannerProps { - message: string | null; - onDismiss: () => void; -} - -export default function ErrorBanner({ message, onDismiss }: ErrorBannerProps) { - if (!message) return null; - - return ( - - - {message} - - - ✕ - - - ); -} - -const styles = StyleSheet.create({ - container: { - backgroundColor: '#FEE2E2', - borderLeftWidth: 4, - borderLeftColor: '#EF4444', - borderRadius: 8, - marginHorizontal: 16, - marginVertical: 8, - paddingVertical: 10, - paddingLeft: 12, - paddingRight: 8, - flexDirection: 'row', - alignItems: 'center', - }, - message: { - flex: 1, - color: '#991B1B', - fontSize: 14, - lineHeight: 20, - }, - closeButton: { - padding: 4, - marginLeft: 8, - }, - closeText: { - color: '#991B1B', - fontSize: 16, - fontWeight: '600', - }, -}); diff --git a/apps/legacy/llm/components/MarkdownComponent.tsx b/apps/legacy/llm/components/MarkdownComponent.tsx deleted file mode 100644 index 111019a363..0000000000 --- a/apps/legacy/llm/components/MarkdownComponent.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { Platform } from 'react-native'; -import Markdown from 'react-native-markdown-display'; -import ColorPalette from '../colors'; - -interface MarkdownComponentProps { - text: string; -} - -export default function MarkdownComponent({ text }: MarkdownComponentProps) { - const fontSize = Platform.OS === 'ios' ? 16 : 14; - return ( - - {text} - - ); -} diff --git a/apps/legacy/llm/components/MessageItem.tsx b/apps/legacy/llm/components/MessageItem.tsx deleted file mode 100644 index 7e1c17a8e4..0000000000 --- a/apps/legacy/llm/components/MessageItem.tsx +++ /dev/null @@ -1,127 +0,0 @@ -import React, { memo } from 'react'; -import { View, StyleSheet, TouchableOpacity, Text, Image, Platform } from 'react-native'; -import MarkdownComponent from './MarkdownComponent'; -import LlamaIcon from '../assets/icons/llama_icon.svg'; -import ColorPalette from '../colors'; -import { Message } from 'react-native-executorch/legacy'; -import AudioWaveform from './AudioWaveform'; - -interface MessageItemProps { - message: Message; - deleteMessage: () => void; -} - -const MessageItem = memo(({ message, deleteMessage }: MessageItemProps) => { - if (message.role === 'assistant') { - return ( - - - - - - - - - - ); - } - - return ( - - - - {message.mediaPath && ( - - )} - {message.audioWaveform && ( - - )} - - - - ); -}); - -const CloseButton = ({ deleteMessage, role }: { deleteMessage: () => void; role: string }) => { - return ( - - ✕ - - ); -}; - -export default MessageItem; - -const styles = StyleSheet.create({ - aiMessage: { - flexDirection: 'row', - maxWidth: '75%', - alignSelf: 'flex-start', - marginVertical: 8, - alignItems: 'center', - }, - aiMessageContent: { - flex: 1, - }, - userMessageWrapper: { - flexDirection: 'row-reverse', - marginRight: 8, - marginVertical: 8, - maxWidth: '75%', - alignSelf: 'flex-end', - alignItems: 'flex-start', - }, - userMessageBubble: { - flexDirection: 'column', - paddingHorizontal: 12, - paddingVertical: 8, - borderRadius: 8, - backgroundColor: ColorPalette.seaBlueLight, - }, - userMessageImage: { - width: 200, - height: 200, - borderRadius: 6, - marginBottom: 6, - }, - userMessageWaveform: { - marginBottom: 6, - }, - aiMessageIconContainer: { - backgroundColor: ColorPalette.seaBlueLight, - height: 32, - width: 32, - alignItems: 'center', - justifyContent: 'center', - borderRadius: 16, - marginHorizontal: 7, - }, - closeButton: { - borderRadius: 11, - backgroundColor: ColorPalette.blueLight, - alignItems: 'center', - justifyContent: 'center', - width: 22, - height: 22, - }, - closeButtonRight: { - marginLeft: 8, - }, - closeButtonLeft: { - marginRight: 8, - }, - buttonText: { - fontSize: Platform.OS === 'ios' ? 16 : 14, - color: '#000', - }, -}); diff --git a/apps/legacy/llm/components/Messages.tsx b/apps/legacy/llm/components/Messages.tsx deleted file mode 100644 index 18ef88aa7b..0000000000 --- a/apps/legacy/llm/components/Messages.tsx +++ /dev/null @@ -1,78 +0,0 @@ -import { useRef } from 'react'; -import { ScrollView, StyleSheet, View, Text } from 'react-native'; -import AnimatedChatLoading from './AnimatedChatLoading'; -import LlamaIcon from '../assets/icons/llama_icon.svg'; -import ColorPalette from '../colors'; -import MessageItem from './MessageItem'; -import { Message } from 'react-native-executorch/legacy'; - -interface MessagesComponentProps { - chatHistory: Message[]; - llmResponse: string; - isGenerating: boolean; - deleteMessage: (index: number) => void; -} - -export default function Messages({ - chatHistory, - llmResponse, - isGenerating, - deleteMessage, -}: MessagesComponentProps) { - const scrollViewRef = useRef(null); - - return ( - - scrollViewRef?.current?.scrollToEnd()} - > - true}> - {chatHistory.map((message, index) => ( - deleteMessage(index)} /> - ))} - {isGenerating && ( - - - - - {!llmResponse ? ( - - - - ) : ( - {llmResponse.trim()} - )} - - )} - - - - ); -} - -const styles = StyleSheet.create({ - chatContainer: { flex: 1, width: '100%' }, - aiMessage: { - flexDirection: 'row', - maxWidth: '80%', - alignSelf: 'flex-start', - marginVertical: 8, - }, - messageLoadingContainer: { width: 28 }, - aiMessageIconContainer: { - backgroundColor: ColorPalette.seaBlueLight, - height: 32, - width: 32, - alignItems: 'center', - justifyContent: 'center', - borderRadius: 16, - marginHorizontal: 7, - }, - messageText: { - fontSize: 14, - lineHeight: 19.6, - color: ColorPalette.primary, - fontFamily: 'regular', - }, -}); diff --git a/apps/legacy/llm/components/ModelPicker.tsx b/apps/legacy/llm/components/ModelPicker.tsx deleted file mode 100644 index 9a81bec371..0000000000 --- a/apps/legacy/llm/components/ModelPicker.tsx +++ /dev/null @@ -1,198 +0,0 @@ -import React, { useEffect, useRef, useState } from 'react'; -import { - Dimensions, - Modal, - ScrollView, - StyleSheet, - Text, - TouchableOpacity, - View, -} from 'react-native'; - -export type ModelOption = { - label: string; - value: T; -}; - -type Props = { - models: ModelOption[]; - selectedModel: T; - onSelect: (model: T) => void; - label?: string; - disabled?: boolean; -}; - -const DROPDOWN_MAX_HEIGHT = 200; - -export function ModelPicker({ models, selectedModel, onSelect, label, disabled }: Props) { - const [open, setOpen] = useState(false); - const [triggerHeight, setTriggerHeight] = useState(0); - const [expandUp, setExpandUp] = useState(false); - const [dropdownTop, setDropdownTop] = useState(0); - const triggerRef = useRef>(null); - const selected = models.find((m) => m.value === selectedModel); - - useEffect(() => { - if (disabled) setOpen(false); - }, [disabled]); - - const handlePress = () => { - if (disabled) return; - if (open) { - setOpen(false); - return; - } - triggerRef.current?.measure( - (_x: number, _y: number, _width: number, height: number, _pageX: number, pageY: number) => { - setTriggerHeight(height); - const spaceBelow = Dimensions.get('window').height - (pageY + height); - setExpandUp(spaceBelow < DROPDOWN_MAX_HEIGHT); - setDropdownTop(pageY); - setOpen(true); - } - ); - }; - - const dropdownStylePosition = expandUp - ? { - bottom: Dimensions.get('window').height - dropdownTop, - left: 12, - right: 12, - } - : { - top: dropdownTop + triggerHeight + 2, - left: 12, - right: 12, - }; - - return ( - <> - - - {label && {label}} - {selected?.label ?? '—'} - {open ? '▲' : '▼'} - - - - {open && ( - setOpen(false)} - animationType="none" - > - setOpen(false)} - /> - - - {models.map((item) => { - const isSelected = item.value === selectedModel; - return ( - { - onSelect(item.value); - setOpen(false); - }} - activeOpacity={0.7} - > - - {item.label} - - - ); - })} - - - - )} - - ); -} - -const styles = StyleSheet.create({ - container: { - marginHorizontal: 12, - marginVertical: 4, - alignSelf: 'stretch', - zIndex: 100, - }, - trigger: { - flexDirection: 'row', - alignItems: 'center', - borderWidth: 1, - borderColor: '#C1C6E5', - borderRadius: 8, - paddingHorizontal: 12, - paddingVertical: 10, - backgroundColor: '#f5f5f5', - }, - triggerDisabled: { - opacity: 0.4, - }, - label: { - fontSize: 12, - color: '#888', - marginRight: 6, - }, - triggerText: { - flex: 1, - fontSize: 14, - color: '#001A72', - fontWeight: '500', - }, - chevron: { - fontSize: 10, - color: '#888', - marginLeft: 6, - }, - modalBackdrop: { - flex: 1, - backgroundColor: 'rgba(0, 0, 0, 0.3)', - }, - dropdown: { - position: 'absolute', - borderWidth: 1, - borderColor: '#C1C6E5', - borderRadius: 8, - backgroundColor: '#fff', - maxHeight: DROPDOWN_MAX_HEIGHT, - zIndex: 1000, - elevation: 5, - shadowColor: '#000', - shadowOffset: { width: 0, height: 4 }, - shadowOpacity: 0.15, - shadowRadius: 6, - }, - option: { - paddingHorizontal: 12, - paddingVertical: 10, - borderBottomWidth: 1, - borderBottomColor: '#f0f0f0', - }, - optionSelected: { - backgroundColor: '#e8ecf8', - }, - optionText: { - fontSize: 14, - color: '#333', - }, - optionTextSelected: { - color: '#001A72', - fontWeight: '600', - }, -}); diff --git a/apps/legacy/llm/components/Spinner.tsx b/apps/legacy/llm/components/Spinner.tsx deleted file mode 100644 index f436869ab8..0000000000 --- a/apps/legacy/llm/components/Spinner.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import React from 'react'; -import { View, Text, StyleSheet, ActivityIndicator, Modal } from 'react-native'; -import ColorPalette from '../colors'; - -interface SpinnerProps { - visible: boolean; - textContent: string; -} - -const Spinner = ({ visible, textContent }: SpinnerProps) => { - return ( - - - - - {textContent} - - - - ); -}; - -const styles = StyleSheet.create({ - overlay: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - backgroundColor: 'rgba(0, 0, 0, 0.1)', - }, - container: { - padding: 25, - alignItems: 'center', - justifyContent: 'center', - }, - text: { - marginTop: 15, - color: ColorPalette.primary, - fontSize: 18, - fontWeight: 'bold', - }, -}); - -export default Spinner; diff --git a/apps/legacy/llm/components/StatsBar.tsx b/apps/legacy/llm/components/StatsBar.tsx deleted file mode 100644 index 20bad6cfa1..0000000000 --- a/apps/legacy/llm/components/StatsBar.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import React from 'react'; -import { View, Text, StyleSheet } from 'react-native'; -import { LLMStats } from '../hooks/useLLMStats'; - -interface Props { - stats: LLMStats | null; -} - -export function StatsBar({ stats }: Props) { - if (!stats) return null; - - return ( - - TTFT: {stats.ttft} ms - · - {stats.tokensPerSec} tok/s - · - {stats.totalTokens} tokens - - ); -} - -const styles = StyleSheet.create({ - container: { - flexDirection: 'row', - justifyContent: 'center', - alignItems: 'center', - gap: 8, - paddingVertical: 6, - }, - stat: { - fontSize: 13, - color: '#334155', - fontWeight: '500', - }, - separator: { - fontSize: 13, - color: '#94A3B8', - }, -}); diff --git a/apps/legacy/llm/components/SuggestedPrompts.tsx b/apps/legacy/llm/components/SuggestedPrompts.tsx deleted file mode 100644 index 1303f28e30..0000000000 --- a/apps/legacy/llm/components/SuggestedPrompts.tsx +++ /dev/null @@ -1,43 +0,0 @@ -import { StyleSheet, Text, TouchableOpacity, View } from 'react-native'; -import ColorPalette from '../colors'; - -interface Props { - prompts: string[]; - onSelect: (prompt: string) => void; -} - -export default function SuggestedPrompts({ prompts, onSelect }: Props) { - return ( - - {prompts.map((prompt, i) => ( - onSelect(prompt)}> - {prompt} - - ))} - - ); -} - -const styles = StyleSheet.create({ - container: { - flexDirection: 'row', - flexWrap: 'wrap', - justifyContent: 'center', - gap: 8, - paddingHorizontal: 16, - paddingTop: 16, - }, - chip: { - borderWidth: 1, - borderColor: ColorPalette.blueLight, - borderRadius: 20, - paddingHorizontal: 14, - paddingVertical: 8, - backgroundColor: '#fafbff', - }, - chipText: { - fontFamily: 'regular', - fontSize: 13, - color: ColorPalette.primary, - }, -}); diff --git a/apps/legacy/llm/components/llmModels.ts b/apps/legacy/llm/components/llmModels.ts deleted file mode 100644 index e7334bfc56..0000000000 --- a/apps/legacy/llm/components/llmModels.ts +++ /dev/null @@ -1,151 +0,0 @@ -import { - models, - LLAMA3_2_1B_QLORA, - LLAMA3_2_3B_QLORA, - LLMProps, -} from 'react-native-executorch/legacy'; -import { ModelOption } from './ModelPicker'; -const llm = models.llm; - -export type LLMModelSources = LLMProps['model']; - -export const LLM_MODELS: ModelOption[] = [ - //Gemma 4 - { - label: 'Gemma 4 E2B', - value: llm.gemma4_e2b(), - }, - // Llama 3.2 - { - label: 'Llama 3.2 1B', - value: llm.llama3_2_1b({ quant: false }), - }, - { label: 'Llama 3.2 1B QLoRA', value: LLAMA3_2_1B_QLORA }, - { label: 'Llama 3.2 1B SpinQuant', value: llm.llama3_2_1b() }, - { - label: 'Llama 3.2 3B', - value: llm.llama3_2_3b({ quant: false }), - }, - { label: 'Llama 3.2 3B QLoRA', value: LLAMA3_2_3B_QLORA }, - { label: 'Llama 3.2 3B SpinQuant', value: llm.llama3_2_3b() }, - // Qwen3 - { - label: 'Qwen3 0.6B', - value: llm.qwen3_0_6b({ quant: false }), - }, - { label: 'Qwen3 0.6B Quantized', value: llm.qwen3_0_6b() }, - { - label: 'Qwen3 1.7B', - value: llm.qwen3_1_7b({ quant: false }), - }, - { label: 'Qwen3 1.7B Quantized', value: llm.qwen3_1_7b() }, - { label: 'Qwen3 4B', value: llm.qwen3_4b({ quant: false }) }, - { label: 'Qwen3 4B Quantized', value: llm.qwen3_4b() }, - // Hammer 2.1 - { - label: 'Hammer 2.1 0.5B', - value: llm.hammer2_1_0_5b({ quant: false }), - }, - { - label: 'Hammer 2.1 0.5B Quantized', - value: llm.hammer2_1_0_5b(), - }, - { - label: 'Hammer 2.1 1.5B', - value: llm.hammer2_1_1_5b({ quant: false }), - }, - { - label: 'Hammer 2.1 1.5B Quantized', - value: llm.hammer2_1_1_5b(), - }, - { - label: 'Hammer 2.1 3B', - value: llm.hammer2_1_3b({ quant: false }), - }, - { - label: 'Hammer 2.1 3B Quantized', - value: llm.hammer2_1_3b(), - }, - // SmolLM2 - { - label: 'SmolLM2 135M', - value: llm.smollm2_1_135m({ quant: false }), - }, - { - label: 'SmolLM2 135M Quantized', - value: llm.smollm2_1_135m(), - }, - { - label: 'SmolLM2 360M', - value: llm.smollm2_1_360m({ quant: false }), - }, - { - label: 'SmolLM2 360M Quantized', - value: llm.smollm2_1_360m(), - }, - { - label: 'SmolLM2 1.7B', - value: llm.smollm2_1_1_7b({ quant: false }), - }, - { - label: 'SmolLM2 1.7B Quantized', - value: llm.smollm2_1_1_7b(), - }, - // Qwen2.5 - { - label: 'Qwen2.5 0.5B', - value: llm.qwen2_5_0_5b({ quant: false }), - }, - { - label: 'Qwen2.5 0.5B Quantized', - value: llm.qwen2_5_0_5b(), - }, - { - label: 'Qwen2.5 1.5B', - value: llm.qwen2_5_1_5b({ quant: false }), - }, - { - label: 'Qwen2.5 1.5B Quantized', - value: llm.qwen2_5_1_5b(), - }, - { - label: 'Qwen2.5 3B', - value: llm.qwen2_5_3b({ quant: false }), - }, - { label: 'Qwen2.5 3B Quantized', value: llm.qwen2_5_3b() }, - // Qwen3.5 - { label: 'Qwen3.5 0.8B Quantized', value: llm.qwen3_5_0_8b() }, - { label: 'Qwen3.5 2B Quantized', value: llm.qwen3_5_2b() }, - // Phi-4 - { - label: 'Phi-4 Mini 4B', - value: llm.phi_4_mini_4b({ quant: false }), - }, - { - label: 'Phi-4 Mini 4B Quantized', - value: llm.phi_4_mini_4b(), - }, - // LFM2.5 - { - label: 'LFM2.5 350M', - value: llm.lfm2_5_350m({ quant: false }), - }, - { label: 'LFM2.5 350M Quantized', value: llm.lfm2_5_350m() }, - { - label: 'LFM2.5 1.2B Instruct', - value: llm.lfm2_5_1_2b_instruct({ quant: false }), - }, - { - label: 'LFM2.5 1.2B Instruct Quantized', - value: llm.lfm2_5_1_2b_instruct(), - }, - // Bielik v3.0 - { - label: 'Bielik v3.0 1.5B', - value: llm.bielik_v3_0_1_5b({ quant: false }), - }, - { - label: 'Bielik v3.0 1.5B Quantized', - value: llm.bielik_v3_0_1_5b(), - }, -]; diff --git a/apps/legacy/llm/context.ts b/apps/legacy/llm/context.ts deleted file mode 100644 index 0eb0560768..0000000000 --- a/apps/legacy/llm/context.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { createContext } from 'react'; - -export const GeneratingContext = createContext({ - setGlobalGenerating: (_newState: boolean) => {}, -}); diff --git a/apps/legacy/llm/declarations.d.ts b/apps/legacy/llm/declarations.d.ts deleted file mode 100644 index 85e178f497..0000000000 --- a/apps/legacy/llm/declarations.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module '*.svg' { - import { SvgProps } from 'react-native-svg'; - const content: React.FV; - export default content; -} diff --git a/apps/legacy/llm/hooks/useLLMStats.ts b/apps/legacy/llm/hooks/useLLMStats.ts deleted file mode 100644 index b3e21bb5fa..0000000000 --- a/apps/legacy/llm/hooks/useLLMStats.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { useEffect, useRef, useState } from 'react'; - -export interface LLMStats { - ttft: number; - tokensPerSec: number; - totalTokens: number; -} - -export function useLLMStats(response: string, isGenerating: boolean, totalTokens: number) { - const sendTimeRef = useRef(null); - const firstTokenTimeRef = useRef(null); - const lastResponseRef = useRef(''); - const [stats, setStats] = useState(null); - - useEffect(() => { - if (isGenerating && response.length > 0) { - lastResponseRef.current = response; - if (firstTokenTimeRef.current === null && sendTimeRef.current !== null) { - firstTokenTimeRef.current = Date.now(); - } - } - }, [response, isGenerating, totalTokens]); - - useEffect(() => { - if (!isGenerating && sendTimeRef.current !== null && firstTokenTimeRef.current !== null) { - const endTime = Date.now(); - const ttft = firstTokenTimeRef.current - sendTimeRef.current; - const totalTime = (endTime - firstTokenTimeRef.current) / 1000; - const tokensPerSec = totalTime > 0 ? Math.round(totalTokens / totalTime) : 0; - setStats({ ttft, tokensPerSec, totalTokens }); - sendTimeRef.current = null; - firstTokenTimeRef.current = null; - } - }, [isGenerating, totalTokens]); - - const onMessageSend = () => { - sendTimeRef.current = Date.now(); - firstTokenTimeRef.current = null; - lastResponseRef.current = ''; - setStats(null); - }; - - return { stats, onMessageSend }; -} diff --git a/apps/legacy/llm/index.ts b/apps/legacy/llm/index.ts deleted file mode 100644 index 3f443dcf95..0000000000 --- a/apps/legacy/llm/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { registerRootComponent } from 'expo'; - -import App from './app'; - -// registerRootComponent calls AppRegistry.registerComponent('main', () => App); -// It also ensures that whether you load the app in Expo Go or in a native build, -// the environment is set up appropriately -registerRootComponent(App); diff --git a/apps/legacy/llm/metro.config.js b/apps/legacy/llm/metro.config.js deleted file mode 100644 index f58bbc2131..0000000000 --- a/apps/legacy/llm/metro.config.js +++ /dev/null @@ -1,19 +0,0 @@ -const { getDefaultConfig } = require('expo/metro-config'); - -const config = getDefaultConfig(__dirname); - -const { transformer, resolver } = config; - -config.transformer = { - ...transformer, - babelTransformerPath: require.resolve('react-native-svg-transformer/expo'), -}; -config.resolver = { - ...resolver, - assetExts: resolver.assetExts.filter((ext) => ext !== 'svg'), - sourceExts: [...resolver.sourceExts, 'svg'], -}; - -config.resolver.assetExts.push('pte'); - -module.exports = config; diff --git a/apps/legacy/llm/package.json b/apps/legacy/llm/package.json deleted file mode 100644 index b0385d4edb..0000000000 --- a/apps/legacy/llm/package.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "name": "legacy-llm", - "version": "1.0.0", - "main": "expo-router/entry", - "scripts": { - "start": "expo start", - "android": "expo run:android", - "ios": "expo run:ios", - "web": "expo start --web", - "typecheck": "tsc", - "lint": "eslint . --ext .ts,.tsx --fix" - }, - "dependencies": { - "@expo/log-box": "~56.0.12", - "@react-native/metro-config": "^0.86.0", - "@react-navigation/drawer": "^7.9.4", - "@react-navigation/native": "^7.2.2", - "expo": "~57.0.28", - "expo-brightness": "~57.0.2", - "expo-build-properties": "~57.0.22", - "expo-calendar": "~57.0.5", - "expo-constants": "~57.0.21", - "expo-document-picker": "~57.0.3", - "expo-font": "~57.0.4", - "expo-linking": "~57.0.12", - "expo-router": "~57.0.26", - "expo-status-bar": "~57.0.1", - "metro-config": "^0.84.0", - "react": "19.2.3", - "react-native": "0.86.3", - "react-native-audio-api": "0.13.6", - "react-native-device-info": "^15.0.2", - "react-native-executorch": "workspace:*", - "react-native-executorch-expo-resource-fetcher": "workspace:*", - "react-native-gesture-handler": "~2.32.0", - "react-native-image-picker": "^8.2.1", - "react-native-loading-spinner-overlay": "^3.0.1", - "react-native-markdown-display": "^7.0.2", - "react-native-reanimated": "4.7.1", - "react-native-safe-area-context": "~5.7.0", - "react-native-screens": "~4.26.0", - "react-native-svg": "15.15.4", - "react-native-svg-transformer": "^1.5.3", - "react-native-worklets": "0.13.0" - }, - "devDependencies": { - "@babel/core": "^7.29.7", - "@types/react": "~19.2.14", - "@types/react-refresh": "^0", - "babel-preset-expo": "~57.0.15", - "react-refresh": "^0.18.0" - }, - "private": true -} diff --git a/apps/legacy/llm/tsconfig.json b/apps/legacy/llm/tsconfig.json deleted file mode 100644 index fc43a7226d..0000000000 --- a/apps/legacy/llm/tsconfig.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "compilerOptions": { - "allowJs": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "jsx": "react-native", - "lib": ["es2022"], - "moduleResolution": "bundler", - "noEmit": true, - "resolveJsonModule": true, - "skipLibCheck": true, - "strict": true, - "target": "esnext", - "paths": { - "react-native-executorch/legacy": ["../../packages/react-native-executorch/legacy/src"], - "react-native-executorch-expo-resource-fetcher": ["../../packages/expo-resource-fetcher"], - "zod": ["../../node_modules/zod"], - "zod/*": ["../../node_modules/zod/*"] - } - }, - "include": ["**/*.ts", "**/*.tsx"], - "exclude": ["**/node_modules", "**/Pods", "**/__tests__"] -} diff --git a/apps/legacy/llm/utils/piiMatching.ts b/apps/legacy/llm/utils/piiMatching.ts deleted file mode 100644 index 66f9e2ec99..0000000000 --- a/apps/legacy/llm/utils/piiMatching.ts +++ /dev/null @@ -1,126 +0,0 @@ -import { PiiEntity } from 'react-native-executorch/legacy'; - -/** - * A detected entity span pinned to a character range in the source text. - */ -export interface EntityMatch { - start: number; - end: number; - label: string; -} - -const escapeRegex = (s: string) => s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); - -// Word-boundary-anchored search so e.g. "John" doesn't match the "John" -// inside "Johnson". -function findWordBounded(source: string, needle: string, from: number): number { - const re = new RegExp(`\\b${escapeRegex(needle)}\\b`); - const match = re.exec(source.slice(from)); - return match ? from + match.index : -1; -} - -/** - * Map detected entities (which carry decoded text only) onto character - * ranges in the source text by scanning forward. - * - * The native runner's `text` field is the BPE-detokenized form of the - * entity, which often differs from the source by whitespace, punctuation - * spacing, or stripped specials. Strategy: - * 1) Try a word-bounded match for the whole entity from the cursor onward. - * 2) On miss, fall back to each non-trivial word from the entity text - * individually so we still highlight most of the span. - * - * Order-preserving: cursor advances after each successful match so - * duplicate strings resolve left-to-right. - * @param source - The full text the model was run against. - * @param entities - Entities returned by the native runner. - * @returns Sorted, non-overlapping char-range matches. - */ -export function matchEntities(source: string, entities: PiiEntity[]): EntityMatch[] { - const matches: EntityMatch[] = []; - let cursor = 0; - for (const e of entities) { - if (!e.text) continue; - const exact = findWordBounded(source, e.text, cursor); - if (exact !== -1) { - matches.push({ - start: exact, - end: exact + e.text.length, - label: e.label, - }); - cursor = exact + e.text.length; - continue; - } - const words = e.text.split(/\s+/).filter((w) => w.length > 1); - let localCursor = cursor; - for (const w of words) { - const idx = findWordBounded(source, w, localCursor); - if (idx === -1) continue; - matches.push({ start: idx, end: idx + w.length, label: e.label }); - localCursor = idx + w.length; - } - if (localCursor > cursor) cursor = localCursor; - } - matches.sort((a, b) => a.start - b.start); - return matches; -} - -export interface Segment { - text: string; - label: string | null; -} - -/** - * Slice the source text into alternating plain / labeled runs based on the - * matched entity ranges. Overlaps are dropped (the earlier match wins). - * @param source - The full text to slice. - * @param matches - Char-range matches from {@link matchEntities}. - * @returns An ordered array of segments covering the entire source. - */ -export function buildSegments(source: string, matches: EntityMatch[]): Segment[] { - const segments: Segment[] = []; - let pos = 0; - for (const m of matches) { - if (m.start < pos) continue; - if (m.start > pos) { - segments.push({ text: source.slice(pos, m.start), label: null }); - } - segments.push({ text: source.slice(m.start, m.end), label: m.label }); - pos = m.end; - } - if (pos < source.length) { - segments.push({ text: source.slice(pos), label: null }); - } - return segments; -} - -/** - * Pastel color palette + stable label-to-color mapping. Same label always - * gets the same color across renders / runs. - */ -const PALETTE = [ - '#ffd4a8', - '#b8e1ff', - '#d4c5f9', - '#c3e8c3', - '#ffe8b8', - '#f8c6c6', - '#e3c8a8', - '#ff9aa2', - '#b6e3d4', - '#ffd6e0', - '#cdb4db', - '#ffc8a2', - '#a2d2ff', - '#bde0fe', - '#fcd5ce', -]; - -export function colorForLabel(label: string): string { - let hash = 0; - for (let i = 0; i < label.length; i++) { - // eslint-disable-next-line no-bitwise - hash = (hash * 31 + label.charCodeAt(i)) | 0; - } - return PALETTE[Math.abs(hash) % PALETTE.length] as string; -} diff --git a/apps/legacy/llm/utils/tools.ts b/apps/legacy/llm/utils/tools.ts deleted file mode 100644 index 730a1937e9..0000000000 --- a/apps/legacy/llm/utils/tools.ts +++ /dev/null @@ -1,198 +0,0 @@ -import * as Calendar from 'expo-calendar'; -import * as Brightness from 'expo-brightness'; -import { PermissionStatus } from 'expo'; -import { clamp } from 'react-native-reanimated'; -import { Platform } from 'react-native'; -import { ToolCall } from 'react-native-executorch/legacy'; - -export const executeTool: (call: ToolCall) => Promise = async (call) => { - switch (call.toolName) { - case 'brightness': - return await brightness(call); - case 'read_calendar': - return await readCalendar(call); - case 'add_event_to_calendar': - return await addEventToCalendar(call); - default: - console.error(`Wrong function! We don't handle it!`); - return null; - } -}; - -export const TOOL_DEFINITIONS_PHONE = [ - { - name: 'brightness', - description: - 'Change screen brightness. Change can be relative (higher/lower) or set to minimal or maximal.', - parameters: { - type: 'dict', - properties: { - relativeChange: { - type: 'number', - description: - 'Relative change of brightness (from 0 to 100). Change should be negative if user asks for less bright screen.', - }, - targetBrightness: { - type: 'number', - description: 'Relative change of brightness (from 0 to 100).', - }, - }, - }, - }, - { - name: 'read_calendar', - description: - 'Read calendar events from now up to given point in time. If nothing is specified leave both empty.', - parameters: { - type: 'dict', - properties: { - timeStart: { - type: 'string', - description: 'Date and time from which we want to read calendar.', - }, - timeEnd: { - type: 'string', - description: 'Date and time to which we want to read calendar.', - }, - }, - required: [], - }, - }, - { - name: 'add_event_to_calendar', - description: 'Schedules event in your calendar at given time.', - parameters: { - type: 'dict', - properties: { - time: { - type: 'string', - description: 'Date and time of an event.', - }, - title: { - type: 'string', - description: 'Title of an event', - }, - }, - required: ['time', 'title'], - }, - }, -]; - -const brightness = async (call: ToolCall) => { - console.log('Changing brightness!', call); - const { status } = await Brightness.getPermissionsAsync(); - if (status !== Brightness.PermissionStatus.GRANTED) { - return 'Brightness permission denied. Inform the user they need to grant brightness access in the app.'; - } - if ('targetBrightness' in call.arguments && typeof call.arguments.targetBrightness === 'number') { - await Brightness.setBrightnessAsync(call.arguments.targetBrightness / 100); - } else if ( - 'relativeChange' in call.arguments && - typeof call.arguments.relativeChange === 'number' - ) { - await Brightness.setBrightnessAsync( - clamp((await Brightness.getBrightnessAsync()) + call.arguments.relativeChange / 100, 0, 1) - ); - } - return null; -}; - -const readCalendar = async (call: ToolCall) => { - console.log('Reading calendar!', call); - const { status } = await Calendar.getCalendarPermissionsAsync(); - if (status !== PermissionStatus.GRANTED) { - return 'Calendar permission denied. Inform the user they need to grant calendar access in the app.'; - } - - let startTime = Date.parse( - 'timeStart' in call.arguments && typeof call.arguments.timeStart === 'string' - ? call.arguments.timeStart - : '' - ); - let endTime = Date.parse( - 'timeEnd' in call.arguments && typeof call.arguments.timeEnd === 'string' - ? call.arguments.timeEnd - : '' - ); - - if (startTime === endTime || (Number.isNaN(startTime) && Number.isNaN(endTime))) { - // default to today for empty function calls - let date; - if (Number.isNaN(startTime)) { - date = new Date(); - } else { - date = new Date(startTime); - } - // Set the time to 00:00:00 for the start of the day - startTime = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0).valueOf(); - - // Set the time to 23:59:59 for the end of the day - endTime = new Date(date.getFullYear(), date.getMonth(), date.getDate(), 23, 59, 59).valueOf(); - } else if (Number.isNaN(startTime) || Number.isNaN(endTime)) { - if (Number.isNaN(startTime)) { - const today = new Date(); - startTime = new Date( - today.getFullYear(), - today.getMonth(), - today.getDate(), - 0, - 0, - 0 - ).valueOf(); - } else if (Number.isNaN(endTime)) { - const today = new Date(); - - endTime = new Date( - today.getFullYear(), - today.getMonth(), - today.getDate(), - 23, - 59, - 59 - ).valueOf(); - } - } - const startDate = new Date(startTime); - const endDate = new Date(endTime); - const calendars = await Calendar.getCalendarsAsync( - Platform.OS === 'ios' ? Calendar.EntityTypes.EVENT : undefined - ); - const events = await Calendar.getEventsAsync( - calendars.map((calendar) => calendar.id), - startDate, - endDate - ); - - const eventsStringRepresentation = events.map( - (event) => `${event.title}, from: ${event.startDate}, to: ${event.endDate}` - ); - return eventsStringRepresentation.join('\n'); -}; - -const addEventToCalendar = async (call: ToolCall) => { - console.log('Adding event to calendar!', call); - const { status } = await Calendar.getCalendarPermissionsAsync(); - if (status !== PermissionStatus.GRANTED) { - return 'Calendar permission denied. Inform the user they need to grant calendar access in the app.'; - } - if ( - 'time' in call.arguments && - typeof call.arguments.time === 'string' && - 'title' in call.arguments && - typeof call.arguments.title === 'string' - ) { - const calendars = await Calendar.getCalendarsAsync( - Platform.OS === 'ios' ? Calendar.EntityTypes.EVENT : undefined - ); - let startDate = new Date(Date.parse(call.arguments.time)); - const endDate = new Date(startDate); - endDate.setHours(endDate.getHours() + 1); - - await Calendar.createEventAsync(calendars[0].id, { - title: call.arguments.title, - startDate: startDate, - endDate: endDate, - }); - } - return null; -}; diff --git a/apps/legacy/speech/.gitignore b/apps/legacy/speech/.gitignore deleted file mode 100644 index 4a2f68b457..0000000000 --- a/apps/legacy/speech/.gitignore +++ /dev/null @@ -1,39 +0,0 @@ -# Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files - -# dependencies -node_modules/ - -# Expo -.expo/ -dist/ -web-build/ -expo-env.d.ts - -# Native -*.orig.* -*.jks -*.p8 -*.p12 -*.key -*.mobileprovision - -# Metro -.metro-health-check* - -# debug -npm-debug.* -yarn-debug.* -yarn-error.* - -# macOS -.DS_Store -*.pem - -# local env files -.env*.local - -# typescript -*.tsbuildinfo - -.yarn - diff --git a/apps/legacy/speech/App.tsx b/apps/legacy/speech/App.tsx deleted file mode 100644 index 3bbd8263c1..0000000000 --- a/apps/legacy/speech/App.tsx +++ /dev/null @@ -1,110 +0,0 @@ -import React, { useState } from 'react'; -import { View, Text, StyleSheet, TouchableOpacity } from 'react-native'; -import { TextToSpeechScreen } from './screens/TextToSpeechScreen'; -import { SpeechToTextScreen } from './screens/SpeechToTextScreen'; -import { VoiceActivityDetectionScreen } from './screens/VoiceActivityDetectionScreen'; -import ColorPalette from './colors'; -import ExecutorchLogo from './assets/executorch.svg'; -import { Quiz } from './screens/Quiz'; -import { TextToSpeechLLMScreen } from './screens/TextToSpeechLLMScreen'; -import { initExecutorch } from 'react-native-executorch/legacy'; -import { ExpoResourceFetcher } from 'react-native-executorch-expo-resource-fetcher'; - -initExecutorch({ - resourceFetcher: ExpoResourceFetcher, -}); - -export default function App() { - const [currentScreen, setCurrentScreen] = useState< - 'menu' | 'speech-to-text' | 'text-to-speech' | 'quiz' | 'text-to-speech-llm' | 'vad' - >('menu'); - - const goToMenu = () => setCurrentScreen('menu'); - - if (currentScreen === 'text-to-speech') { - return ; - } - - if (currentScreen === 'speech-to-text') { - return ; - } - - if (currentScreen === 'vad') { - return ; - } - - if (currentScreen === 'quiz') { - return ; - } - - if (currentScreen === 'text-to-speech-llm') { - return ; - } - - return ( - - - Select a demo model - - setCurrentScreen('speech-to-text')}> - Speech to Text - - setCurrentScreen('vad')}> - Voice Activity Detection - - setCurrentScreen('text-to-speech')}> - Text to Speech - - setCurrentScreen('quiz')}> - Text to Speech - Quiz - - setCurrentScreen('text-to-speech-llm')} - > - Text to Speech - LLM Streaming - - - - ); -} - -export const fontSizes = { - xxl: 34, - xl: 22, - lg: 18, - md: 16, - sm: 14, - xs: 12, - xxs: 10, -}; - -const styles = StyleSheet.create({ - container: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - backgroundColor: '#fff', - }, - headerText: { - fontSize: fontSizes.lg, - color: ColorPalette.strongPrimary, - margin: 20, - }, - buttonContainer: { - width: '80%', - justifyContent: 'space-evenly', - marginBottom: 20, - }, - button: { - backgroundColor: ColorPalette.strongPrimary, - borderRadius: 8, - padding: 10, - alignItems: 'center', - marginBottom: 10, - }, - buttonText: { - color: 'white', - fontSize: fontSizes.md, - }, -}); diff --git a/apps/legacy/speech/app.json b/apps/legacy/speech/app.json deleted file mode 100644 index 734503bb04..0000000000 --- a/apps/legacy/speech/app.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "expo": { - "name": "legacy-speech", - "slug": "legacy-speech", - "version": "1.0.0", - "orientation": "portrait", - "icon": "./assets/icon.png", - "userInterfaceStyle": "light", - "newArchEnabled": true, - "scheme": "rne-legacy-speech", - "splash": { - "image": "./assets/splash-icon.png", - "resizeMode": "contain", - "backgroundColor": "#ffffff" - }, - "ios": { - "supportsTablet": true, - "bundleIdentifier": "com.anonymous.legacyspeech", - "infoPlist": { - "NSMicrophoneUsageDescription": "This app needs access to your microphone to record audio." - }, - "entitlements": { - "com.apple.developer.kernel.increased-memory-limit": true - } - }, - "android": { - "adaptiveIcon": { - "foregroundImage": "./assets/adaptive-icon.png", - "backgroundColor": "#ffffff" - }, - "package": "com.anonymous.legacyspeech", - "permissions": [ - "android.permission.RECORD_AUDIO", - "android.permission.MODIFY_AUDIO_SETTINGS", - "android.permission.FOREGROUND_SERVICE", - "android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" - ] - }, - "web": { - "favicon": "./assets/favicon.png" - }, - "plugins": [ - "expo-font", - [ - "react-native-audio-api", - { - "iosBackgroundMode": true, - "iosMicrophonePermission": "This app requires access to the microphone to record audio.", - "androidPermissions": [ - "android.permission.MODIFY_AUDIO_SETTINGS", - "android.permission.FOREGROUND_SERVICE", - "android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK", - "android.permission.RECORD_AUDIO" - ], - "androidForegroundService": true, - "androidFSTypes": ["mediaPlayback", "microphone"] - } - ], - [ - "expo-build-properties", - { - "ios": { - "deploymentTarget": "17.0" - } - } - ] - ] - } -} diff --git a/apps/legacy/speech/assets/adaptive-icon.png b/apps/legacy/speech/assets/adaptive-icon.png deleted file mode 100644 index 03d6f6b6c6727954aec1d8206222769afd178d8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17547 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 - - - - - - - - diff --git a/apps/legacy/speech/assets/favicon.png b/apps/legacy/speech/assets/favicon.png deleted file mode 100644 index e75f697b1801871ad8cd9309b05e8ffe8c6b6d01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1466 zcmV;r1x5OaP)F>1w{Y zBeHf{*q3<2*AtQf4s&-m0MsH$EBv51Nj=s=Appw|nd1Yi(-DKZBN$9bAlWN83A_)0 z$4U=S!XyBuAm(`t#aW=l*tHPgHRE~MrmzGWN*Eidc=$BV2uYe|Rpi@t-me&ht6I?| ze$M(9=%DxSVTwNL7B*O`z`fRE$T)18O{B^J5OHo#W%kD-}gAcJO3n1x6Q{X*TFh-d!yx?Z$G16f%*K?exQ+p ztyb%4*R_Y=)qQBLG-9hc_A|ub$th|8Sk1bi@fFe$DwUpU57nc*-z8<&dM#e3a2hB! z16wLhz7o)!MC8}$7Jv9c-X$w^Xr(M9+`Py)~O3rGmgbvjOzXjGl>h9lp*QEn%coj{`wU^_3U|=B`xxU;X3K1L?JT?0?+@K!|MWVr zmC=;rjX@CoW3kMZA^8ZAy52^R{+-YG!J5q^YP&$t9F`&J8*KzV4t3ZZZJ>~XP7}Bs z<}$a~2r_E?4rlN=(}RBkF~6rBo}Sz7#r{X49&!gODP+TcB*@uq57EII-_>qWEt44B z`5o+tysMLY*Dq^n@4_vzKRu3We5|DI+i%NV=Z|)QAl{di_@%07*qoM6N<$f(5Fv<^TWy diff --git a/apps/legacy/speech/assets/icon.png b/apps/legacy/speech/assets/icon.png deleted file mode 100644 index a0b1526fc7b78680fd8d733dbc6113e1af695487..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22380 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 diff --git a/apps/legacy/speech/assets/quiz-data.ts b/apps/legacy/speech/assets/quiz-data.ts deleted file mode 100644 index 10158b39f3..0000000000 --- a/apps/legacy/speech/assets/quiz-data.ts +++ /dev/null @@ -1,844 +0,0 @@ -// --- Data --- -// cspell:ignoreRegExp /export const QUESTIONS = \[[\s\S]*?\];/ -export const QUESTIONS = [ - { - q: 'What is the capital of Japan?', - a: ['Beijing', 'Seoul', 'Tokyo', 'Kyoto'], - c: 2, - e: 'Tokyo is the capital of Japan.', - context: - "Tokyo, formerly known as Edo, became the capital of Japan in 1868. It is one of the world's most populous cities and a major center for finance, culture, and technology. Tokyo hosts the Imperial Palace and is famous for its blend of traditional and modern architecture.", - }, - { - q: 'Who wrote "Romeo and Juliet"?', - a: ['Mark Twain', 'William Shakespeare', 'Charles Dickens', 'Jane Austen'], - c: 1, - e: 'William Shakespeare wrote Romeo and Juliet.', - context: - 'William Shakespeare was an English playwright and poet, widely regarded as the greatest writer in the English language. "Romeo and Juliet" is one of his most famous tragedies, exploring themes of love, fate, and family conflict in Renaissance Italy.', - }, - { - q: 'Which planet has the most moons in our solar system?', - a: ['Mars', 'Earth', 'Jupiter', 'Venus'], - c: 2, - e: 'Jupiter has the most known moons.', - context: - 'Jupiter has over 90 known moons, including Ganymede, the largest moon in the solar system. Its strong gravity allows it to capture many objects as moons. Saturn also has many moons, but Jupiter currently holds the record.', - }, - { - q: 'What gas do plants use for photosynthesis?', - a: ['Oxygen', 'Carbon dioxide', 'Nitrogen', 'Helium'], - c: 1, - e: 'Plants use carbon dioxide for photosynthesis.', - context: - 'Photosynthesis is the process by which plants convert carbon dioxide and water into glucose and oxygen using sunlight. This process is essential for life on Earth, as it provides oxygen and food for many organisms.', - }, - { - q: 'Who painted the Sistine Chapel ceiling?', - a: ['Raphael', 'Leonardo da Vinci', 'Michelangelo', 'Donatello'], - c: 2, - e: 'Michelangelo painted the Sistine Chapel ceiling.', - context: - 'Michelangelo was an Italian Renaissance artist known for his sculptures and paintings. The Sistine Chapel ceiling, painted between 1508 and 1512, features scenes from the Book of Genesis and is considered a masterpiece of Western art.', - }, - { - q: 'What is the largest continent by land area?', - a: ['Africa', 'Asia', 'Europe', 'Antarctica'], - c: 1, - e: 'Asia is the largest continent by land area.', - context: - "Asia covers about 30% of Earth's land area and is home to more than half of the world's population. It includes diverse regions such as the Middle East, South Asia, East Asia, and Siberia.", - }, - { - q: 'Which element has the chemical symbol "O"?', - a: ['Gold', 'Oxygen', 'Silver', 'Iron'], - c: 1, - e: 'O is the symbol for oxygen.', - context: - "Oxygen is a vital element for life, making up about 21% of Earth's atmosphere. It is essential for respiration in most living organisms and is highly reactive, forming compounds with many other elements.", - }, - { - q: 'In which year did the first man land on the moon?', - a: ['1969', '1959', '1979', '1965'], - c: 0, - e: 'The first moon landing was in 1969.', - context: - 'Apollo 11 was the mission that first landed humans on the Moon. Neil Armstrong and Buzz Aldrin walked on the lunar surface, while Michael Collins orbited above. The event marked a major milestone in space exploration.', - }, - { - q: 'What is the smallest prime number?', - a: ['0', '1', '2', '3'], - c: 2, - e: '2 is the smallest prime number.', - context: - 'A prime number is a natural number greater than 1 that has no positive divisors other than 1 and itself. 2 is the only even prime number, as all other even numbers are divisible by 2.', - }, - { - q: 'Which ocean lies on the east coast of the United States?', - a: ['Pacific', 'Atlantic', 'Indian', 'Arctic'], - c: 1, - e: 'The Atlantic Ocean is on the east coast.', - context: - 'The Atlantic Ocean is the second-largest ocean and separates North America from Europe and Africa. Major cities like New York, Miami, and Boston are located along its coast.', - }, - { - q: 'What currency is used in the United Kingdom?', - a: ['Euro', 'Pound', 'Dollar', 'Franc'], - c: 1, - e: 'The British pound is the currency of the UK.', - context: - 'The pound sterling, commonly known as the pound, is the official currency of the United Kingdom. It is one of the oldest currencies still in use and is subdivided into 100 pence.', - }, - { - q: 'Who discovered penicillin?', - a: ['Alexander Fleming', 'Marie Curie', 'Louis Pasteur', 'Gregor Mendel'], - c: 0, - e: 'Alexander Fleming discovered penicillin.', - context: - 'Penicillin was the first true antibiotic discovered by Alexander Fleming in 1928. It has saved countless lives by effectively treating bacterial infections.', - }, - { - q: 'What is the human body organ that pumps blood?', - a: ['Liver', 'Lung', 'Heart', 'Kidney'], - c: 2, - e: 'The heart pumps blood in the body.', - context: - 'The heart is a muscular organ about the size of a fist, located slightly left of the center of the chest. It pumps blood through the circulatory system, supplying oxygen and nutrients to the body.', - }, - { - q: 'Which country is known for the pyramids at Giza?', - a: ['Mexico', 'Peru', 'Egypt', 'Sudan'], - c: 2, - e: 'Egypt is famous for the pyramids at Giza.', - context: - 'The Giza pyramid complex is one of the most famous archaeological sites in the world. The Great Pyramid of Giza is the largest pyramid in Egypt and one of the Seven Wonders of the Ancient World.', - }, - { - q: 'Which language has the most native speakers worldwide?', - a: ['English', 'Spanish', 'Mandarin', 'Hindi'], - c: 2, - e: 'Mandarin Chinese has the most native speakers.', - context: - 'Mandarin is the most widely spoken language in the world, with over a billion native speakers. It is the official language of China and Taiwan, and one of the official languages of Singapore.', - }, - { - q: 'What is H2O commonly called?', - a: ['Salt', 'Hydrogen', 'Water', 'Oxygen'], - c: 2, - e: 'H2O is the chemical formula for water.', - context: - "Water is essential for all known forms of life. It covers about 71% of Earth's surface and is vital for drinking, agriculture, and industry.", - }, - { - q: 'Which metal is liquid at room temperature?', - a: ['Mercury', 'Gold', 'Silver', 'Copper'], - c: 0, - e: 'Mercury is liquid at room temperature.', - context: - 'Mercury is the only metal that is liquid at standard conditions for temperature and pressure. It is used in thermometers, barometers, and some electrical switches.', - }, - { - q: 'What is the fastest land animal?', - a: ['Lion', 'Cheetah', 'Horse', 'Kangaroo'], - c: 1, - e: 'The cheetah is the fastest land animal.', - context: - 'The cheetah can reach speeds of up to 75 miles per hour (120 kilometers per hour) in short bursts covering distances up to 500 meters. It is built for speed with a lightweight body and long legs.', - }, - { - q: 'Which organ in plants makes food using sunlight?', - a: ['Root', 'Stem', 'Leaf', 'Flower'], - c: 2, - e: 'Leaves perform photosynthesis to make food.', - context: - 'Photosynthesis occurs in the chloroplasts of plant cells, which contain chlorophyll that captures sunlight. This process converts carbon dioxide and water into glucose and oxygen.', - }, - { - q: 'Who composed the Fifth Symphony known as "fate"?', - a: ['Mozart', 'Beethoven', 'Bach', 'Chopin'], - c: 1, - e: 'Beethoven composed the Fifth Symphony.', - context: - 'Ludwig van Beethoven was a German composer and pianist. His Fifth Symphony, composed between 1804 and 1808, is one of the most performed symphonies and is known for its distinctive four-note motif.', - }, - { - q: 'What is the boiling point of water at sea level in Celsius?', - a: ['90', '95', '100', '105'], - c: 2, - e: 'Water boils at 100 degrees Celsius at sea level.', - context: - 'The boiling point of water can change depending on the atmospheric pressure. At higher altitudes, water boils at a lower temperature due to reduced pressure.', - }, - { - q: 'Which city is known as the Big Apple?', - a: ['Los Angeles', 'Chicago', 'New York', 'Miami'], - c: 2, - e: 'New York City is nicknamed the Big Apple.', - context: - 'The nickname "The Big Apple" originally referred to New York City\'s horse racing tracks. It later became popularized in the 1970s and is now a widely recognized nickname for the city.', - }, - { - q: 'What is the longest river in the world by length?', - a: ['Nile', 'Amazon', 'Yangtze', 'Mississippi'], - c: 0, - e: 'The Nile has long been considered the longest.', - context: - 'The Nile River in Africa is approximately 6650 kilometers (4130 miles) long. It flows through eleven countries and is essential for agriculture and water supply in the region.', - }, - { - q: 'Which planet is closest to the Sun?', - a: ['Venus', 'Mercury', 'Earth', 'Mars'], - c: 1, - e: 'Mercury is the planet closest to the Sun.', - context: - 'Mercury is the smallest planet in our solar system and orbits the Sun at an average distance of about 57.91 million kilometers (36 million miles).', - }, - { - q: 'Who developed the theory of relativity?', - a: ['Isaac Newton', 'Albert Einstein', 'Niels Bohr', 'Galileo'], - c: 1, - e: 'Albert Einstein developed the theory of relativity.', - context: - "Einstein's theory of relativity, published in 1905, revolutionized our understanding of space, time, and gravity. It introduced the famous equation E=mc², linking energy and mass.", - }, - { - q: 'What is the main language spoken in Brazil?', - a: ['Spanish', 'Portuguese', 'French', 'English'], - c: 1, - e: 'Portuguese is the main language in Brazil.', - context: - "Brazil is the largest country in South America and the only one in the region where Portuguese is the official language. This is due to Brazil's colonization by Portugal in the 16th century.", - }, - { - q: 'What instrument has keys, pedals, and strings?', - a: ['Guitar', 'Violin', 'Piano', 'Flute'], - c: 2, - e: 'The piano has keys, pedals, and strings.', - context: - 'The piano is a musical instrument played by pressing keys that cause hammers to strike strings, producing sound. It is widely used in classical and popular music.', - }, - { - q: 'Which country gifted the Statue of Liberty to the USA?', - a: ['Germany', 'France', 'Italy', 'Spain'], - c: 1, - e: 'France gifted the Statue of Liberty to the USA.', - context: - 'The Statue of Liberty was a gift from the people of France to the United States, dedicated in 1886. It was designed by French sculptor Frédéric Auguste Bartholdi and symbolizes freedom and democracy.', - }, - { - q: "Which gas is most abundant in Earth's atmosphere?", - a: ['Oxygen', 'Carbon dioxide', 'Nitrogen', 'Argon'], - c: 2, - e: 'Nitrogen is the most abundant gas in the atmosphere.', - context: - "Nitrogen makes up about 78% of Earth's atmosphere by volume. It is a colorless, odorless gas that is essential for life, as it is a key component of amino acids and nucleic acids.", - }, - { - q: 'What is the chemical symbol for gold?', - a: ['Au', 'Ag', 'Gd', 'Go'], - c: 0, - e: 'Au is the chemical symbol for gold.', - context: - 'Gold is a dense, malleable metal with the chemical symbol Au (from Latin: aurum) and atomic number 79. It is highly valued for its use in jewelry, currency, and other arts.', - }, - { - q: 'Who painted "The Starry Night"?', - a: ['Paul Cezanne', 'Vincent van Gogh', 'Pablo Picasso', 'Claude Monet'], - c: 1, - e: 'Vincent van Gogh painted The Starry Night.', - context: - "The Starry Night is one of Vincent van Gogh's most famous paintings, created in 1889. It depicts a swirling night sky over a quiet town, expressing van Gogh's emotional turmoil and fascination with the night.", - }, - { - q: 'Which year did World War 2 end?', - a: ['1944', '1945', '1946', '1947'], - c: 1, - e: 'World War 2 ended in 1945.', - context: - "World War 2 was a global conflict that lasted from 1939 to 1945. It involved most of the world's nations and resulted in significant changes to the global political and social landscape.", - }, - { - q: 'What is the largest mammal?', - a: ['Elephant', 'Blue whale', 'Giraffe', 'Hippopotamus'], - c: 1, - e: 'The blue whale is the largest mammal.', - context: - 'The blue whale is the largest animal known to have ever existed, reaching lengths of up to 100 feet (30 meters) and weights of up to 200 tons. They are found in oceans worldwide and primarily eat small shrimp-like animals called krill.', - }, - { - q: 'Which element is needed to make steel?', - a: ['Carbon', 'Helium', 'Nitrogen', 'Neon'], - c: 0, - e: 'Carbon is combined with iron to make steel.', - context: - 'Steel is an alloy made primarily of iron and carbon. The carbon content determines the hardness and strength of the steel. Other elements may also be added to create different types of steel.', - }, - { - q: 'Who is the author of the Harry Potter series?', - a: ['C S Lewis', 'J R R Tolkien', 'J K Rowling', 'Philip Pullman'], - c: 2, - e: 'J K Rowling wrote the Harry Potter series.', - context: - 'The Harry Potter series is a globally popular fantasy book series written by J.K. Rowling. It follows the life and adventures of a young wizard, Harry Potter, and his friends.', - }, - { - q: 'Which country uses the Yen as its currency?', - a: ['China', 'Japan', 'South Korea', 'Vietnam'], - c: 1, - e: 'Japan uses the Yen as its currency.', - context: - 'The yen is the official currency of Japan, introduced in 1871. It is one of the most traded currencies in the world and is known for its stability.', - }, - { - q: 'Which vitamin is produced when skin is exposed to sunlight?', - a: ['Vitamin A', 'Vitamin B', 'Vitamin C', 'Vitamin D'], - c: 3, - e: 'Vitamin D is produced in skin after sunlight exposure.', - context: - 'Vitamin D is essential for maintaining healthy bones and teeth, and it plays a role in immune system function. The body produces vitamin D in response to skin being exposed to sunlight.', - }, - { - q: 'What is the tallest mountain in the world above sea level?', - a: ['K2', 'Kangchenjunga', 'Mount Everest', 'Lhotse'], - c: 2, - e: 'Mount Everest is the tallest above sea level.', - context: - "Mount Everest, located in the Himalayas on the border of Nepal and the Tibet Autonomous Region of China, is the Earth's highest mountain above sea level, with a peak at 8848.86 meters (29031.7 ft).", - }, - { - q: 'What device converts alternating current to direct current?', - a: ['Transformer', 'Rectifier', 'Generator', 'Inverter'], - c: 1, - e: 'A rectifier converts AC to DC.', - context: - 'A rectifier is an electrical device that converts alternating current (AC) to direct current (DC). It allows current to flow in one direction only, effectively converting the AC waveform to a DC waveform.', - }, - { - q: 'Which two colors make green when mixed in paint?', - a: ['Red and Blue', 'Blue and Yellow', 'Red and Yellow', 'Blue and Green'], - c: 1, - e: 'Blue and yellow mix to make green.', - context: - 'In color theory, blue and yellow are primary colors that, when mixed together, create green, which is a secondary color. This is due to the way our eyes perceive color and the way light wavelengths combine.', - }, - { - q: 'Who was the first president of United States?', - a: ['Abraham Lincoln', 'George Washington', 'Thomas Jefferson', 'John Adams'], - c: 1, - e: 'George Washington was the first president of United States.', - context: - 'George Washington was unanimously elected as the first President of the United States in 1788. He served two terms from 1789 to 1797 and is often called the "Father of His Country".', - }, - { - q: 'Which organ breaks down food and absorbs nutrients?', - a: ['Lung', 'Kidney', 'Stomach and intestine', 'Heart'], - c: 2, - e: 'Stomach and intestines digest and absorb nutrients.', - context: - 'The digestive system breaks down food into smaller molecules, which are then absorbed into the bloodstream through the walls of the intestines. The stomach and intestines play key roles in this process.', - }, - { - q: 'Which bird is known for its ability to mimic human speech?', - a: ['Eagle', 'Parrot', 'Sparrow', 'Ostrich'], - c: 1, - e: 'Parrots can mimic human speech.', - context: - 'Some species of parrots are known for their ability to imitate human speech and other sounds. This ability varies among individual birds and is thought to be a form of social learning.', - }, - { - q: 'What is the study of past human activity called?', - a: ['Anthropology', 'Archaeology', 'Sociology', 'Geology'], - c: 1, - e: 'Archaeology studies past human activity.', - context: - 'Archaeology is the scientific study of ancient cultures and human activity through the examination of artifacts, structures, and other physical remains.', - }, - { - q: 'Which substance makes up the majority of the Sun?', - a: ['Iron', 'Hydrogen', 'Carbon', 'Silicon'], - c: 1, - e: 'Hydrogen is the main element in the Sun.', - context: - 'The Sun is composed of about 74% hydrogen, 24% helium, and 2% heavier elements. Hydrogen is the primary fuel for the nuclear fusion reactions that power the Sun.', - }, - { - q: 'Who invented the telephone?', - a: ['Thomas Edison', 'Alexander Graham Bell', 'Nikola Tesla', 'Guglielmo Marconi'], - c: 1, - e: 'Alexander Graham Bell is credited with the telephone.', - context: - 'Alexander Graham Bell was a Scottish-born inventor, scientist, and teacher who is credited with inventing the first practical telephone. He was awarded the first US patent for the invention of the telephone.', - }, - { - q: 'What is the capital of Canada?', - a: ['Toronto', 'Montreal', 'Vancouver', 'Ottawa'], - c: 3, - e: 'Ottawa is the capital of Canada.', - context: - 'Ottawa is the capital city of Canada, located in the province of Ontario. It became the capital in 1857 and is home to many national institutions, including the Parliament of Canada.', - }, - { - q: 'Which planet is known for its rings?', - a: ['Mars', 'Jupiter', 'Saturn', 'Uranus'], - c: 2, - e: 'Saturn is famous for its rings.', - context: - "Saturn is the sixth planet from the Sun and is known for its prominent ring system, which is made up of ice particles, rocky debris, and dust. The rings are thought to be remnants of moons or comets that were torn apart by Saturn's gravity.", - }, - { - q: 'Which chemical is used as table salt?', - a: ['Sodium chloride', 'Potassium', 'Magnesium', 'Calcium'], - c: 0, - e: 'Table salt is sodium chloride.', - context: - 'Table salt is chemically known as sodium chloride (NaCl). It is composed of sodium ions and chloride ions and is used in food preparation and preservation.', - }, - { - q: 'Who painted "Guernica"?', - a: ['Salvador Dali', 'Pablo Picasso', 'Henri Matisse', 'Jackson Pollock'], - c: 1, - e: 'Pablo Picasso painted Guernica.', - context: - 'Guernica is a mural-sized oil painting on canvas by Spanish artist Pablo Picasso, completed in 1937. It is one of the most famous anti-war artworks, depicting the suffering caused by war and violence.', - }, - { - q: 'What is the largest desert in the world?', - a: ['Sahara', 'Gobi', 'Arabian', 'Antarctic desert'], - c: 3, - e: 'The Antarctic is the largest desert by area.', - context: - 'The Antarctic Desert is the largest desert in the world, covering an area of about 14 million square kilometers (5.5 million square miles). It is classified as a desert due to its extremely low humidity and precipitation.', - }, - { - q: 'Which sport uses a shuttlecock?', - a: ['Tennis', 'Badminton', 'Squash', 'Table tennis'], - c: 1, - e: 'Badminton uses a shuttlecock.', - context: - "Badminton is a racquet sport played using shuttlecocks and a lightweight racquet. The game is played on a rectangular court divided by a net, and the objective is to hit the shuttlecock over the net and into the opponent's court.", - }, - { - q: 'What is the freezing point of water in Fahrenheit?', - a: ['0', '32', '100', '212'], - c: 1, - e: 'Water freezes at 32 degrees Fahrenheit.', - context: - 'The freezing point of water is 32 degrees Fahrenheit (0 degrees Celsius) at standard atmospheric pressure. At this temperature, water molecules slow down and form a crystalline structure, resulting in ice.', - }, - { - q: 'Which continent has the most countries?', - a: ['Asia', 'Africa', 'Europe', 'South America'], - c: 1, - e: 'Africa has the most countries of any continent.', - context: - 'Africa is the second-largest and second-most populous continent, with 54 recognized sovereign states. It has a diverse range of cultures, languages, and ecosystems.', - }, - { - q: 'What is the main ingredient in traditional sushi?', - a: ['Beef', 'Rice', 'Potatoes', 'Cheese'], - c: 1, - e: 'Rice is the main ingredient in sushi.', - context: - 'Sushi is a Japanese dish typically made with vinegared rice, raw fish, and other ingredients like vegetables and seaweed. The rice is the essential component that defines sushi.', - }, - { - q: 'Which famous physicist wrote "A Brief History of Time"?', - a: ['Richard Feynman', 'Stephen Hawking', 'Carl Sagan', 'Brian Cox'], - c: 1, - e: 'Stephen Hawking wrote A Brief History of Time.', - context: - 'A Brief History of Time is a popular science book written by physicist Stephen Hawking. It explains complex concepts in cosmology, such as the Big Bang, black holes, and light cones, in accessible language.', - }, - { - q: 'Which city is the capital of Australia?', - a: ['Sydney', 'Melbourne', 'Canberra', 'Perth'], - c: 2, - e: 'Canberra is the capital of Australia.', - context: - 'Canberra is the capital city of Australia, located in the Australian Capital Territory. It was selected as the capital in 1908 as a compromise between rivals Sydney and Melbourne.', - }, - { - q: 'What is the largest organ in the human body?', - a: ['Liver', 'Skin', 'Heart', 'Brain'], - c: 1, - e: 'Skin is the largest organ of the human body.', - context: - "The skin is the body's largest organ, covering an area of about 2 square meters (22 square feet) in adults. It protects internal organs, regulates temperature, and enables the sense of touch.", - }, - { - q: 'Which gas do humans inhale to survive?', - a: ['Carbon dioxide', 'Nitrogen', 'Oxygen', 'Helium'], - c: 2, - e: 'Humans inhale oxygen to survive.', - context: - 'Oxygen is essential for human survival as it is required for cellular respiration, the process by which cells produce energy. Humans inhale air containing oxygen through the respiratory system.', - }, - { - q: 'Who developed the theory of evolution by natural selection?', - a: ['Gregor Mendel', 'Charles Darwin', 'Louis Pasteur', 'Alfred Wallace'], - c: 1, - e: 'Charles Darwin proposed natural selection.', - context: - 'Charles Darwin was an English naturalist, geologist, and biologist best known for his contributions to the science of evolution. He proposed the theory of natural selection as the mechanism of evolution.', - }, - { - q: 'What instrument measures temperature?', - a: ['Barometer', 'Thermometer', 'Hygrometer', 'Ammeter'], - c: 1, - e: 'A thermometer measures temperature.', - context: - 'A thermometer is a device that measures temperature, typically using a glass tube filled with mercury or alcohol that expands and contracts with temperature changes.', - }, - { - q: 'Which country has the largest population?', - a: ['India', 'United States', 'China', 'Russia'], - c: 2, - e: 'China has the largest population.', - context: - 'China is the most populous country in the world, with a population of over 1.4 billion people. It is followed by India, the United States, and Indonesia.', - }, - { - q: 'What is the chemical formula for table sugar (sucrose)?', - a: ['C6H12O6', 'C12H22O11', 'H2O', 'CO2'], - c: 1, - e: 'Sucrose has formula C12H22O11.', - context: - 'Table sugar, or sucrose, is a carbohydrate composed of glucose and fructose units. It is commonly used as a sweetener in food and drinks.', - }, - { - q: 'Which author wrote "Pride and Prejudice"?', - a: ['Emily Bronte', 'Charlotte Bronte', 'Jane Austen', 'Mary Shelley'], - c: 2, - e: 'Jane Austen wrote Pride and Prejudice.', - context: - 'Pride and Prejudice is a novel written by Jane Austen, published in 1813. It is a romantic fiction that critiques the British landed gentry at the end of the 18th century.', - }, - { - q: 'What is the largest island in the world?', - a: ['Greenland', 'Madagascar', 'Borneo', 'New Guinea'], - c: 0, - e: 'Greenland is the largest island.', - context: - "Greenland is the world's largest island that is not a continent. It is located between the Arctic and Atlantic Oceans and is an autonomous territory within the Kingdom of Denmark.", - }, - { - q: 'Which planet is known as the Red Planet?', - a: ['Earth', 'Mars', 'Venus', 'Mercury'], - c: 1, - e: 'Mars is known as the Red Planet.', - context: - 'Mars is often called the Red Planet because of its reddish appearance, which is due to iron oxide (rust) on its surface. It is the fourth planet from the Sun and has the largest dust storms in the solar system.', - }, - { - q: 'Who is credited with inventing the light bulb?', - a: ['Nikola Tesla', 'Thomas Edison', 'Alexander Graham Bell', 'James Watt'], - c: 1, - e: 'Thomas Edison is commonly credited for the light bulb.', - context: - 'Thomas Edison was an American inventor and businessman who is credited with developing the first commercially successful incandescent light bulb.', - }, - { - q: 'What is the capital of Italy?', - a: ['Milan', 'Naples', 'Rome', 'Florence'], - c: 2, - e: 'Rome is the capital of Italy.', - context: - 'Rome, the "Eternal City", is the capital of Italy and of the Lazio region. It is known for its nearly 3000 years of globally influential art, architecture, and culture.', - }, - { - q: 'Which metal has the highest electrical conductivity?', - a: ['Gold', 'Silver', 'Copper', 'Aluminum'], - c: 1, - e: 'Silver has the highest conductivity of common metals.', - context: - 'Silver is a metal known for its high electrical conductivity, thermal conductivity, and reflectivity. It is used in electrical contacts, conductors, and in various electronic devices.', - }, - { - q: 'What is the largest city in India by population?', - a: ['Delhi', 'Mumbai', 'Bangalore', 'Kolkata'], - c: 1, - e: 'Mumbai is the largest city by population in India.', - context: - 'Mumbai, formerly known as Bombay, is the most populous city in India and the seventh most populous city in the world. It is the financial, commercial, and entertainment hub of India.', - }, - { - q: 'Which mountain range includes Mount Kilimanjaro?', - a: ['Andes', 'Himalayas', 'Kilimanjaro is a standalone mountain', 'Rockies'], - c: 2, - e: 'Kilimanjaro is a free standing mountain, not part of a range.', - context: - 'Mount Kilimanjaro is a dormant stratovolcano located in Tanzania. It is the highest mountain in Africa, standing at 5895 meters (19341 feet) above sea level.', - }, - { - q: 'Which animal is known as the king of the jungle?', - a: ['Tiger', 'Elephant', 'Lion', 'Bear'], - c: 2, - e: 'The lion is often called the king of the jungle.', - context: - 'The lion is a large cat species found in Africa and India. It is known for its strength, courage, and majestic appearance. The term "king of the jungle" is a colloquial expression and lions actually inhabit grasslands and savannas.', - }, - { - q: 'What is the primary language of Egypt?', - a: ['Arabic', 'English', 'French', 'Greek'], - c: 0, - e: 'Arabic is the primary language in Egypt.', - context: - 'Arabic is the official language of Egypt and is spoken by the vast majority of the population. Egypt is also known for its ancient civilization and historical monuments.', - }, - { - q: 'Which country has the largest area in the world?', - a: ['United States', 'China', 'Russia', 'Canada'], - c: 2, - e: 'Russia is the largest country by area.', - context: - 'Russia is the largest country in the world by land area, covering more than 17 million square kilometers. It spans Eastern Europe and northern Asia, and has a wide range of environments and landscapes.', - }, - { - q: 'Who painted the Mona Lisa?', - a: ['Michelangelo', 'Leonardo da Vinci', 'Rembrandt', 'Raphael'], - c: 1, - e: 'Leonardo da Vinci painted the Mona Lisa.', - context: - 'The Mona Lisa is a half-length portrait painting by the Italian Renaissance artist Leonardo da Vinci. It is considered an archetypal masterpiece of the Italian Renaissance and is one of the most famous paintings in the world.', - }, - { - q: 'Which chemical element has atomic number 1?', - a: ['Helium', 'Hydrogen', 'Oxygen', 'Lithium'], - c: 1, - e: 'Hydrogen has atomic number 1.', - context: - 'Hydrogen is the chemical element with the symbol H and atomic number 1. It is the lightest and most abundant element in the universe, making up about 75% of its elemental mass.', - }, - { - q: 'What is the capital of Germany?', - a: ['Munich', 'Frankfurt', 'Berlin', 'Hamburg'], - c: 2, - e: 'Berlin is the capital of Germany.', - context: - 'Berlin is the capital and largest city of Germany, located in the northeastern part of the country. It is known for its cultural heritage, modern architecture, and vibrant arts scene.', - }, - { - q: 'Which famous scientist formulated the laws of motion?', - a: ['Albert Einstein', 'Isaac Newton', 'Galileo Galilei', 'Max Planck'], - c: 1, - e: 'Isaac Newton formulated the classical laws of motion.', - context: - 'Isaac Newton was an English mathematician, physicist, and astronomer who is widely recognized for formulating the laws of motion and universal gravitation.', - }, - { - q: 'What is the main ingredient in hummus?', - a: ['Lentils', 'Chickpeas', 'Beans', 'Peas'], - c: 1, - e: 'Hummus is made primarily from chickpeas.', - context: - 'Hummus is a spread made from cooked, mashed chickpeas or other beans, and is a common part of Levantine and Middle Eastern cuisines. It is often served with pita bread.', - }, - { - q: 'What is the largest lake by area in Africa?', - a: ['Lake Victoria', 'Lake Tanganyika', 'Lake Malawi', 'Lake Turkana'], - c: 0, - e: 'Lake Victoria is the largest lake in Africa by area.', - context: - 'Lake Victoria is the largest lake in Africa and the second-largest freshwater lake in the world by surface area. It is bordered by three countries: Tanzania, Uganda, and Kenya.', - }, - { - q: 'Which composer wrote the opera La Traviata?', - a: ['Wagner', 'Verdi', 'Puccini', 'Mozart'], - c: 1, - e: 'Giuseppe Verdi composed La Traviata.', - context: - 'La Traviata is an opera in three acts by Giuseppe Verdi, premiered in 1853. It is based on the novel "La Dame aux Camélias" by Alexandre Dumas fils and is one of the most performed operas worldwide.', - }, - { - q: 'Which city is home to the Colosseum?', - a: ['Athens', 'Rome', 'Istanbul', 'Naples'], - c: 1, - e: 'The Colosseum is located in Rome.', - context: - 'The Colosseum, also known as the Flavian Amphitheatre, is an ancient oval amphitheatre located in the center of Rome. It is the largest amphitheatre ever built and is considered one of the greatest works of Roman architecture and engineering.', - }, - { - q: 'What is the capital of Spain?', - a: ['Valencia', 'Seville', 'Madrid', 'Barcelona'], - c: 2, - e: 'Madrid is the capital of Spain.', - context: - 'Madrid is the capital and largest city of Spain, located in the center of the country. It is known for its cultural and artistic heritage, as well as its vibrant nightlife.', - }, - { - q: 'Which planet has a day longer than its year?', - a: ['Mercury', 'Venus', 'Mars', 'Earth'], - c: 1, - e: 'Venus rotates slowly so its day is longer than its year.', - context: - 'Venus is the second planet from the Sun and has a very slow rotation on its axis, taking about 243 Earth days to complete one rotation. However, its orbit around the Sun takes only about 225 Earth days.', - }, - { - q: 'Who wrote "The Odyssey"?', - a: ['Homer', 'Virgil', 'Sophocles', 'Plato'], - c: 0, - e: 'Homer is attributed as the author of The Odyssey.', - context: - 'The Odyssey is an ancient Greek epic poem attributed to Homer. It is one of the two major ancient Greek epic poems, the other being the Iliad, and it consists of 24 books.', - }, - { - q: 'Which organ is primarily responsible for detoxifying chemicals?', - a: ['Heart', 'Lung', 'Liver', 'Spleen'], - c: 2, - e: 'The liver detoxifies many chemicals in the body.', - context: - 'The liver is a vital organ that plays a key role in metabolism, digestion, and detoxification. It filters blood coming from the digestive tract and detoxifies chemicals, metabolizes drugs, and secretes bile.', - }, - { - q: 'Which country is famous for maple syrup?', - a: ['United States', 'Canada', 'Norway', 'Sweden'], - c: 1, - e: 'Canada is famous for maple syrup.', - context: - 'Canada is the largest producer of maple syrup in the world, accounting for about 71% of the global market share. Maple syrup is a traditional Canadian sweetener made from the sap of sugar maple trees.', - }, - { - q: 'What is the common name for sodium bicarbonate?', - a: ['Baking soda', 'Table salt', 'Vinegar', 'Baking powder'], - c: 0, - e: 'Sodium bicarbonate is known as baking soda.', - context: - 'Sodium bicarbonate, commonly known as baking soda, is a chemical compound with the formula NaHCO₃. It is used in baking as a leavening agent, and also has various household and industrial uses.', - }, - { - q: 'Which sea creature has eight arms?', - a: ['Shark', 'Octopus', 'Dolphin', 'Jellyfish'], - c: 1, - e: 'An octopus has eight arms.', - context: - 'Octopuses are marine animals known for their eight arms, which are lined with sensitive suckers. They are intelligent creatures and can change color and texture to blend in with their surroundings.', - }, - { - q: 'What is the capital of Russia?', - a: ['Saint Petersburg', 'Moscow', 'Novosibirsk', 'Sochi'], - c: 1, - e: 'Moscow is the capital of Russia.', - context: - 'Moscow is the capital and largest city of Russia, located in the western part of the country. It is known for its rich cultural history, architecture, and as a major political, economic, and scientific center.', - }, - { - q: 'Which instrument is primarily used in jazz as a brass reed instrument?', - a: ['Violin', 'Saxophone', 'Clarinet', 'Oboe'], - c: 1, - e: 'The saxophone is a common brass reed instrument in jazz.', - context: - 'The saxophone is a musical instrument invented by Adolphe Sax in the 1840s. It is a key instrument in jazz music, known for its expressive range and timbre.', - }, - { - q: 'What is the largest planet in our solar system?', - a: ['Earth', 'Saturn', 'Jupiter', 'Neptune'], - c: 2, - e: 'Jupiter is the largest planet in the solar system.', - context: - 'Jupiter is the fifth planet from the Sun and is more than twice as massive as all the other planets in the solar system combined. It has a thick atmosphere made up mostly of hydrogen and helium.', - }, - { - q: 'Which chemical element is liquid and used in thermometers?', - a: ['Mercury', 'Lead', 'Sodium', 'Iron'], - c: 0, - e: 'Mercury is used in some thermometers.', - context: - 'Mercury is a chemical element with the symbol Hg and atomic number 80. It is a heavy, silvery-white liquid metal that is used in thermometers, barometers, and other scientific instruments.', - }, - { - q: 'Who is known as the father of modern physics and developed the laws of motion?', - a: ['Benjamin Franklin', 'Isaac Newton', 'Albert Einstein', 'Nikola Tesla'], - c: 1, - e: 'Isaac Newton developed the laws of motion.', - context: - 'Isaac Newton is often referred to as the father of modern physics for his groundbreaking work in the 17th century. He formulated the laws of motion and universal gravitation, laying the foundation for classical mechanics.', - }, - { - q: 'Which country is famous for the tango dance?', - a: ['Brazil', 'Argentina', 'Mexico', 'Chile'], - c: 1, - e: 'Argentina is famous for the tango.', - context: - 'The tango is a partner dance that originated in the 1880s along the River Plate, the natural border between Argentina and Uruguay. It is now popular worldwide and is known for its passionate and dramatic style.', - }, - { - q: 'What is the capital of South Africa (one of them)?', - a: ['Cape Town', 'Pretoria', 'Johannesburg', 'Durban'], - c: 1, - e: "Pretoria is one of South Africa's capitals (administrative).", - context: - 'South Africa has three capital cities: Pretoria (administrative), Cape Town (legislative), and Bloemfontein (judicial). Pretoria is known for its diplomatic missions and embassies.', - }, - { - q: 'Which substance is needed for combustion?', - a: ['Oxygen', 'Helium', 'Nitrogen', 'Carbon dioxide'], - c: 0, - e: 'Oxygen supports combustion.', - context: - 'Combustion is a chemical process that occurs when a substance reacts rapidly with oxygen and releases energy in the form of light and heat. Oxygen is essential for combustion to occur.', - }, - { - q: 'Who wrote the novel "Moby Dick"?', - a: ['Herman Melville', 'Ernest Hemingway', 'F Scott Fitzgerald', 'Mark Twain'], - c: 0, - e: 'Herman Melville is the author of Moby Dick.', - context: - "Moby Dick is an 1851 novel by Herman Melville. The book is the sailor Ishmael's narrative of the obsessive quest of Ahab, captain of the whaling ship Pequod, for revenge on Moby Dick.", - }, - { - q: 'What is the primary material used to make glass?', - a: ['Iron', 'Sand', 'Wood', 'Clay'], - c: 1, - e: 'Glass is primarily made from silica sand.', - context: - 'Glass is a solid material that is typically made from silica (silicon dioxide) sand, soda ash, and limestone. It is used in windows, bottles, and many other applications.', - }, - { - q: 'Which famous tower leans and is in Italy?', - a: ['Eiffel Tower', 'Leaning Tower of Pisa', 'Big Ben', 'CN Tower'], - c: 1, - e: 'The Leaning Tower of Pisa is in Italy.', - context: - 'The Leaning Tower of Pisa is a freestanding bell tower located in Pisa, Italy. It is famous for its unintended tilt, which began during its construction in the 12th century.', - }, - { - q: 'Which organ controls the nervous system?', - a: ['Heart', 'Brain', 'Liver', 'Kidney'], - c: 1, - e: 'The brain controls the nervous system.', - context: - 'The brain is the central organ of the human nervous system, and with the spinal cord, it makes up the central nervous system (CNS). It is responsible for processing sensory information and coordinating bodily functions.', - }, - { - q: 'What is the capital of Turkey?', - a: ['Istanbul', 'Ankara', 'Izmir', 'Bursa'], - c: 1, - e: 'Ankara is the capital of Turkey.', - context: - 'Ankara is the capital of Turkey, located in the central part of the country. It became the capital in 1923, replacing Istanbul as the capital of the Republic of Turkey.', - }, - { - q: 'Which sport is played at Wimbledon?', - a: ['Cricket', 'Tennis', 'Football', 'Rugby'], - c: 1, - e: 'Wimbledon is a major tennis tournament.', - context: - 'The Wimbledon Championships is the oldest tennis tournament in the world, and is considered the most prestigious. It has been held at the All England Club in Wimbledon, London, since 1877.', - }, - { - q: 'What metal is primarily used to make aircraft bodies due to its light weight?', - a: ['Steel', 'Titanium', 'Aluminum', 'Copper'], - c: 2, - e: 'Aluminum is widely used for aircraft bodies.', - context: - 'Aluminum is a lightweight, durable metal that is resistant to corrosion, making it ideal for aircraft construction. It is used in the manufacture of aircraft bodies, wings, and other components.', - }, - { - q: 'Which ocean is between Africa and Australia?', - a: ['Atlantic', 'Pacific', 'Indian', 'Arctic'], - c: 2, - e: 'The Indian Ocean lies between Africa and Australia.', - context: - "The Indian Ocean is the third-largest ocean, covering about 20% of the Earth's water surface. It is bounded by Africa, Asia, Australia, and the Indian subcontinent.", - }, -]; diff --git a/apps/legacy/speech/assets/splash-icon.png b/apps/legacy/speech/assets/splash-icon.png deleted file mode 100644 index 03d6f6b6c6727954aec1d8206222769afd178d8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17547 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 - - - - - - - - - - - - diff --git a/apps/legacy/speech/colors.ts b/apps/legacy/speech/colors.ts deleted file mode 100644 index feb75ac336..0000000000 --- a/apps/legacy/speech/colors.ts +++ /dev/null @@ -1,6 +0,0 @@ -const ColorPalette = { - primary: '#001A72', - strongPrimary: '#020F3C', -}; - -export default ColorPalette; diff --git a/apps/legacy/speech/components/ErrorBanner.tsx b/apps/legacy/speech/components/ErrorBanner.tsx deleted file mode 100644 index a5bebc504f..0000000000 --- a/apps/legacy/speech/components/ErrorBanner.tsx +++ /dev/null @@ -1,53 +0,0 @@ -import React from 'react'; -import { View, Text, TouchableOpacity, StyleSheet } from 'react-native'; - -interface ErrorBannerProps { - message: string | null; - onDismiss: () => void; -} - -export default function ErrorBanner({ message, onDismiss }: ErrorBannerProps) { - if (!message) return null; - - return ( - - - {message} - - - ✕ - - - ); -} - -const styles = StyleSheet.create({ - container: { - backgroundColor: '#FEE2E2', - borderLeftWidth: 4, - borderLeftColor: '#EF4444', - borderRadius: 8, - marginHorizontal: 16, - marginVertical: 8, - paddingVertical: 10, - paddingLeft: 12, - paddingRight: 8, - flexDirection: 'row', - alignItems: 'center', - }, - message: { - flex: 1, - color: '#991B1B', - fontSize: 14, - lineHeight: 20, - }, - closeButton: { - padding: 4, - marginLeft: 8, - }, - closeText: { - color: '#991B1B', - fontSize: 16, - fontWeight: '600', - }, -}); diff --git a/apps/legacy/speech/components/ModelPicker.tsx b/apps/legacy/speech/components/ModelPicker.tsx deleted file mode 100644 index 951de6cce8..0000000000 --- a/apps/legacy/speech/components/ModelPicker.tsx +++ /dev/null @@ -1,178 +0,0 @@ -import React, { useEffect, useRef, useState } from 'react'; -import { - Dimensions, - Modal, - ScrollView, - StyleSheet, - Text, - TouchableOpacity, - TouchableWithoutFeedback, - View, -} from 'react-native'; - -export type ModelOption = { - label: string; - value: T; -}; - -type Props = { - models: ModelOption[]; - selectedModel: T; - onSelect: (model: T) => void; - label?: string; - disabled?: boolean; -}; - -const DROPDOWN_MAX_HEIGHT = 300; - -export function ModelPicker({ models, selectedModel, onSelect, label, disabled }: Props) { - const [open, setOpen] = useState(false); - const [dropdownLayout, setDropdownLayout] = useState({ - x: 0, - y: 0, - width: 0, - }); - const triggerRef = useRef>(null); - const selected = models.find((m) => m.value === selectedModel); - - useEffect(() => { - if (disabled) setOpen(false); - }, [disabled]); - - const handlePress = () => { - if (disabled) return; - if (open) { - setOpen(false); - return; - } - triggerRef.current?.measure( - (_x: number, _y: number, width: number, height: number, pageX: number, pageY: number) => { - const spaceBelow = Dimensions.get('window').height - (pageY + height); - const y = - spaceBelow >= DROPDOWN_MAX_HEIGHT - ? pageY + height + 2 - : pageY - Math.min(DROPDOWN_MAX_HEIGHT, models.length * 42) - 2; - setDropdownLayout({ x: pageX, y, width }); - setOpen(true); - } - ); - }; - - return ( - - - {label && {label}} - {selected?.label ?? '—'} - {open ? '▲' : '▼'} - - - setOpen(false)}> - setOpen(false)}> - - - {models.map((item) => { - const isSelected = item.value === selectedModel; - return ( - { - onSelect(item.value); - setOpen(false); - }} - > - - {item.label} - - - ); - })} - - - - - - ); -} - -const styles = StyleSheet.create({ - container: { - marginHorizontal: 12, - marginVertical: 4, - alignSelf: 'stretch', - }, - trigger: { - flexDirection: 'row', - alignItems: 'center', - borderWidth: 1, - borderColor: '#C1C6E5', - borderRadius: 8, - paddingHorizontal: 12, - paddingVertical: 10, - backgroundColor: '#f5f5f5', - }, - triggerDisabled: { - opacity: 0.4, - }, - label: { - fontSize: 12, - color: '#888', - marginRight: 6, - }, - triggerText: { - flex: 1, - fontSize: 14, - color: '#001A72', - fontWeight: '500', - }, - chevron: { - fontSize: 10, - color: '#888', - marginLeft: 6, - }, - dropdown: { - position: 'absolute', - borderWidth: 1, - borderColor: '#C1C6E5', - borderRadius: 8, - backgroundColor: '#fff', - maxHeight: DROPDOWN_MAX_HEIGHT, - elevation: 8, - shadowColor: '#000', - shadowOffset: { width: 0, height: 2 }, - shadowOpacity: 0.15, - shadowRadius: 4, - }, - option: { - paddingHorizontal: 12, - paddingVertical: 10, - borderBottomWidth: 1, - borderBottomColor: '#f0f0f0', - }, - optionSelected: { - backgroundColor: '#e8ecf8', - }, - optionText: { - fontSize: 14, - color: '#333', - }, - optionTextSelected: { - color: '#001A72', - fontWeight: '600', - }, -}); diff --git a/apps/legacy/speech/components/VerboseTranscription.tsx b/apps/legacy/speech/components/VerboseTranscription.tsx deleted file mode 100644 index 7b5c7a3bb2..0000000000 --- a/apps/legacy/speech/components/VerboseTranscription.tsx +++ /dev/null @@ -1,222 +0,0 @@ -import React from 'react'; -import { View, Text, StyleSheet } from 'react-native'; -import { TranscriptionResult } from 'react-native-executorch/legacy'; - -export const VerboseTranscription = ({ data }: { data: TranscriptionResult }) => { - if (!data) return null; - - const hasSegments = Array.isArray(data.segments) && data.segments.length > 0; - - const hasLanguage = !!data.language && data.language !== 'N/A' && data.language.trim() !== ''; - - const hasDuration = typeof data.duration === 'number' && data.duration > 0; - - const hasMetadata = hasLanguage || hasDuration; - - return ( - - - Full Text: - {data.text || ''} - - {hasMetadata && ( - - {hasLanguage && Language: {data.language}} - {hasDuration && ( - Duration: {data.duration?.toFixed(2)}s - )} - - )} - - - {hasSegments && ( - <> - Segments ({data.segments?.length}) - - {data.segments?.map((seg, index) => ( - - - - {seg.start.toFixed(2)}s - {seg.end.toFixed(2)}s - - ID: {index} - - - "{seg.text}" - - {seg.words && seg.words.length > 0 && ( - - Word Timestamps: - - {seg.words.map((w, wIdx) => ( - - {w.word.trim()} - {w.start.toFixed(2)}s - - ))} - - - )} - - - - Avg LogProb - - {data.task === 'transcribe' ? seg.avgLogprob?.toFixed(4) : 'N/A'} - - - - Temp - - {data.task === 'transcribe' ? seg.temperature?.toFixed(2) : 'N/A'} - - - - {/*eslint-disable-next-line @cspell/spellchecker*/} - Compr. - - {data.task === 'transcribe' ? seg.compressionRatio?.toFixed(2) : 'N/A'} - - - - - ))} - - )} - - ); -}; - -const styles = StyleSheet.create({ - container: { - padding: 4, - }, - metaContainer: { - marginBottom: 16, - padding: 12, - backgroundColor: '#f0f2f5', - borderRadius: 8, - }, - label: { - fontWeight: 'bold', - color: '#0f186e', - marginBottom: 4, - }, - text: { - fontSize: 16, - color: '#333', - marginBottom: 8, - }, - row: { - flexDirection: 'row', - gap: 10, - marginTop: 8, - }, - metaItem: { - fontSize: 12, - color: '#666', - backgroundColor: '#e1e4e8', - paddingHorizontal: 8, - paddingVertical: 2, - borderRadius: 4, - overflow: 'hidden', - }, - sectionHeader: { - fontSize: 18, - fontWeight: 'bold', - color: '#0f186e', - marginBottom: 8, - marginTop: 8, - }, - segmentCard: { - backgroundColor: '#fff', - borderRadius: 8, - borderWidth: 1, - borderColor: '#e1e4e8', - marginBottom: 12, - padding: 12, - shadowColor: '#000', - shadowOffset: { width: 0, height: 1 }, - shadowOpacity: 0.1, - shadowRadius: 2, - elevation: 2, - }, - segmentHeader: { - flexDirection: 'row', - justifyContent: 'space-between', - marginBottom: 8, - }, - timeBadge: { - fontSize: 12, - fontWeight: 'bold', - color: '#fff', - backgroundColor: '#0f186e', - paddingHorizontal: 8, - paddingVertical: 2, - borderRadius: 12, - overflow: 'hidden', - }, - segmentId: { - fontSize: 12, - color: '#888', - }, - segmentText: { - fontSize: 15, - fontStyle: 'italic', - color: '#333', - marginBottom: 12, - }, - statsGrid: { - flexDirection: 'row', - flexWrap: 'wrap', - gap: 8, - borderTopWidth: 1, - borderTopColor: '#f0f0f0', - paddingTop: 8, - }, - statItem: { - flex: 1, - minWidth: '45%', - flexDirection: 'row', - justifyContent: 'space-between', - }, - statLabel: { - fontSize: 11, - color: '#888', - }, - statValue: { - fontSize: 11, - fontWeight: '600', - color: '#444', - }, - wordsContainer: { - marginVertical: 8, - backgroundColor: '#f8f9fa', - padding: 8, - borderRadius: 6, - }, - wordsGrid: { - flexDirection: 'row', - flexWrap: 'wrap', - gap: 6, - marginTop: 4, - }, - wordChip: { - backgroundColor: '#ffffff', - borderWidth: 1, - borderColor: '#e1e4e8', - borderRadius: 4, - paddingHorizontal: 6, - paddingVertical: 2, - alignItems: 'center', - }, - wordText: { - fontSize: 12, - color: '#333', - }, - wordTime: { - fontSize: 9, - color: '#888', - marginTop: 1, - }, -}); diff --git a/apps/legacy/speech/declarations.d.ts b/apps/legacy/speech/declarations.d.ts deleted file mode 100644 index 85e178f497..0000000000 --- a/apps/legacy/speech/declarations.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module '*.svg' { - import { SvgProps } from 'react-native-svg'; - const content: React.FV; - export default content; -} diff --git a/apps/legacy/speech/index.ts b/apps/legacy/speech/index.ts deleted file mode 100644 index 1d6e981ef6..0000000000 --- a/apps/legacy/speech/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { registerRootComponent } from 'expo'; - -import App from './App'; - -// registerRootComponent calls AppRegistry.registerComponent('main', () => App); -// It also ensures that whether you load the app in Expo Go or in a native build, -// the environment is set up appropriately -registerRootComponent(App); diff --git a/apps/legacy/speech/metro.config.js b/apps/legacy/speech/metro.config.js deleted file mode 100644 index f58bbc2131..0000000000 --- a/apps/legacy/speech/metro.config.js +++ /dev/null @@ -1,19 +0,0 @@ -const { getDefaultConfig } = require('expo/metro-config'); - -const config = getDefaultConfig(__dirname); - -const { transformer, resolver } = config; - -config.transformer = { - ...transformer, - babelTransformerPath: require.resolve('react-native-svg-transformer/expo'), -}; -config.resolver = { - ...resolver, - assetExts: resolver.assetExts.filter((ext) => ext !== 'svg'), - sourceExts: [...resolver.sourceExts, 'svg'], -}; - -config.resolver.assetExts.push('pte'); - -module.exports = config; diff --git a/apps/legacy/speech/package.json b/apps/legacy/speech/package.json deleted file mode 100644 index 9985e6edbf..0000000000 --- a/apps/legacy/speech/package.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "name": "legacy-speech", - "version": "1.0.0", - "main": "index.ts", - "scripts": { - "start": "expo start", - "android": "expo run:android", - "ios": "expo run:ios", - "web": "expo start --web", - "typecheck": "tsc", - "lint": "eslint . --ext .ts,.tsx --fix" - }, - "dependencies": { - "@expo/vector-icons": "^15.0.2", - "@react-native/metro-config": "^0.86.0", - "buffer": "^6.0.3", - "expo": "~57.0.28", - "expo-build-properties": "~57.0.22", - "expo-font": "~57.0.4", - "expo-status-bar": "~57.0.1", - "metro-config": "^0.84.0", - "react": "19.2.3", - "react-native": "0.86.3", - "react-native-audio-api": "0.13.6", - "react-native-device-info": "^15.0.2", - "react-native-executorch": "workspace:*", - "react-native-executorch-expo-resource-fetcher": "workspace:*", - "react-native-reanimated": "4.7.1", - "react-native-safe-area-context": "~5.7.0", - "react-native-svg": "15.15.4", - "react-native-svg-transformer": "^1.5.3", - "react-native-worklets": "0.13.0" - }, - "devDependencies": { - "@babel/core": "^7.29.7", - "@types/react": "~19.2.14", - "@types/react-refresh": "^0", - "babel-preset-expo": "~57.0.15", - "react-refresh": "^0.18.0" - }, - "private": true -} diff --git a/apps/legacy/speech/screens/Quiz.tsx b/apps/legacy/speech/screens/Quiz.tsx deleted file mode 100644 index 3e69da52f3..0000000000 --- a/apps/legacy/speech/screens/Quiz.tsx +++ /dev/null @@ -1,479 +0,0 @@ -import React, { useEffect, useRef, useState, useCallback } from 'react'; -import { - Text, - View, - StyleSheet, - TouchableOpacity, - Platform, - ScrollView, - KeyboardAvoidingView, -} from 'react-native'; -import Animated, { - useSharedValue, - useAnimatedStyle, - withTiming, - withSequence, - withDelay, - runOnJS, -} from 'react-native-reanimated'; -import { SafeAreaProvider, SafeAreaView } from 'react-native-safe-area-context'; -import { models, useTextToSpeech } from 'react-native-executorch/legacy'; -import { AudioManager, AudioContext, AudioBuffer } from 'react-native-audio-api'; -import FontAwesome from '@expo/vector-icons/FontAwesome'; -import SWMIcon from '../assets/swm_icon.svg'; -import { QUESTIONS } from '../assets/quiz-data'; - -// Shuffle helper -function shuffleArray(array: T[]): T[] { - const arr = array.slice(); - for (let i = arr.length - 1; i > 0; i--) { - const j = Math.floor(Math.random() * (i + 1)); - [arr[i], arr[j]] = [arr[j], arr[i]]; - } - return arr; -} - -// --- Audio Helper --- -const createAudioBufferFromVector = ( - audioVector: Float32Array, - audioContext: AudioContext | null = null, - sampleRate: number = 24000 -): AudioBuffer => { - if (audioContext == null) audioContext = new AudioContext({ sampleRate }); - const audioBuffer = audioContext.createBuffer(1, audioVector.length, sampleRate); - const channelData = audioBuffer.getChannelData(0); - channelData.set(audioVector); - return audioBuffer; -}; - -export const Quiz = ({ onBack }: { onBack: () => void }) => { - // --- Hooks & State --- - const model = useTextToSpeech(models.text_to_speech.kokoro.en_us.santa()); - - const [shuffledQuestions] = useState(() => shuffleArray(QUESTIONS)); - const [currentIndex, setCurrentIndex] = useState(0); - const [selectedAnswer, setSelectedAnswer] = useState(null); - const [isAnswerCorrect, setIsAnswerCorrect] = useState(null); - const [showNext, setShowNext] = useState(false); - const [isSpeaking, setIsSpeaking] = useState(false); - const fadeAnim = useSharedValue(1); - const feedbackAnim = useSharedValue(0); - const nextButtonAnim = useSharedValue(0); - const buttonsInactiveAnim = useSharedValue(1); - - const audioContextRef = useRef(null); - const currentSourceRef = useRef(null); - const isTransitioningRef = useRef(false); - const autoSpeakRef = useRef(true); - - // Animated Styles - const containerStyle = useAnimatedStyle(() => ({ - opacity: fadeAnim.value, - })); - - const feedbackStyle = useAnimatedStyle(() => ({ - opacity: feedbackAnim.value, - })); - - const nextButtonStyle = useAnimatedStyle(() => ({ - opacity: nextButtonAnim.value * buttonsInactiveAnim.value, - transform: [ - { - translateY: (1 - nextButtonAnim.value) * 12, - }, - ], - })); - - // --- Audio Setup --- - useEffect(() => { - AudioManager.setAudioSessionOptions({ - iosCategory: 'playAndRecord', - iosMode: 'spokenAudio', - iosOptions: ['defaultToSpeaker'], - }); - - audioContextRef.current = new AudioContext({ sampleRate: 24000 }); - audioContextRef.current.suspend(); - - return () => { - audioContextRef.current?.close(); - audioContextRef.current = null; - }; - }, []); - - // --- TTS Function --- - const speak = useCallback( - async (text: string) => { - if (!text.trim() || !model.isReady) { - setIsSpeaking(false); - return; - } - - // Stop previous audio if any - if (currentSourceRef.current) { - try { - currentSourceRef.current.stop(); - } catch (e) {} - } - - setIsSpeaking(true); - try { - const audioContext = audioContextRef.current; - if (!audioContext) return; - if (audioContext.state === 'suspended') await audioContext.resume(); - - const onNext = async (audioVec: Float32Array) => { - return new Promise((resolve) => { - const audioBuffer = createAudioBufferFromVector(audioVec, audioContext, 24000); - const source = audioContext.createBufferSource(); - source.buffer = audioBuffer; - source.connect(audioContext.destination); - currentSourceRef.current = source; - source.onEnded = () => resolve(); - source.start(); - }); - }; - - await model.stream({ text, speed: 0.9, onNext, onEnd: async () => {} }); - } catch (e) { - console.error(e); - } finally { - setIsSpeaking(false); - } - }, - [model] - ); - - // --- Game Logic --- - const currentQ = shuffledQuestions[currentIndex]; - - // Speak question on load - useEffect(() => { - if (!model.isReady) return; - if (!autoSpeakRef.current) { - autoSpeakRef.current = true; - return; - } - setIsSpeaking(true); - const t = setTimeout(() => speak(currentQ.q), 500); - return () => clearTimeout(t); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [currentIndex, model.isReady]); - - const handleAnswer = async (index: number) => { - if (selectedAnswer !== null || isSpeaking) return; // Prevent double taps or clicks while reading - - setSelectedAnswer(index); - const correct = index === currentQ.c; - setIsAnswerCorrect(correct); - - // 1. Visual Feedback Animation (1s) - feedbackAnim.value = withSequence( - withTiming(1, { duration: 200 }), - withDelay(1000, withTiming(0, { duration: 200 })) - ); - - // 2. Audio Feedback - if (correct) { - await speak('Correct!'); - } else { - // Play "Incorrect" and explanation as one string - await speak(`Incorrect. ${currentQ.e}`); - } - - // 3. Show Next Button - setShowNext(true); - }; - - const updateQuestionState = (nextIdx: number) => { - setSelectedAnswer(null); - setIsAnswerCorrect(null); - setCurrentIndex(nextIdx); - - setTimeout(() => { - isTransitioningRef.current = false; - fadeAnim.value = withTiming(1, { duration: 500 }); - }, 500); - }; - - const handleNext = () => { - const nextIdx = (currentIndex + 1) % shuffledQuestions.length; - buttonsInactiveAnim.value = 1; // Ensure buttons are active for next round - autoSpeakRef.current = false; - speak(shuffledQuestions[nextIdx].q); - - isTransitioningRef.current = true; - setShowNext(false); - - fadeAnim.value = withTiming(0, { duration: 500 }, (finished) => { - if (finished) { - runOnJS(updateQuestionState)(nextIdx); - } - }); - }; - - const handleLearnMore = async () => { - if (isSpeaking) return; - - buttonsInactiveAnim.value = withTiming(0.5, { duration: 800 }); - - // Play the context for the current question - await speak(currentQ.context); - - buttonsInactiveAnim.value = withTiming(1, { duration: 800 }); - }; - - const getButtonColor = (index: number) => { - if (selectedAnswer === null) return styles.optionButton; - - if (index === currentQ.c) return styles.correctButton; // Highlight correct answer always if answered - if (index === selectedAnswer && !isAnswerCorrect) return styles.wrongButton; // Highlight mistake - - return styles.disabledOption; - }; - - // Animate next button appearance - useEffect(() => { - nextButtonAnim.value = withTiming(showNext ? 1 : 0, { - duration: 450, - }); - }, [showNext, nextButtonAnim]); - - return ( - - - - - - - - Text to Speech - Quiz - - - {!model.isReady ? ( - - - Loading Model: {Math.round(model.downloadProgress * 100)}% - - - ) : ( - - - - - Question {currentIndex + 1} - {currentQ.q} - - - - {currentQ.a.map((opt, idx) => ( - handleAnswer(idx)} - disabled={selectedAnswer !== null || isSpeaking} - > - {opt} - - ))} - - - {/* Feedback Animation Overlay Text */} - {selectedAnswer !== null && ( - - - {isAnswerCorrect ? 'Correct!' : 'Incorrect'} - - - )} - - - - {showNext && ( - - - Next Question - - - - - - Learn More - - - - - )} - - )} - - - ); -}; - -// Reuse stylistic approach from TextToSpeechScreen -const styles = StyleSheet.create({ - container: { - flex: 1, - backgroundColor: 'white', - }, - centerContainer: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - }, - loadingText: { - fontSize: 18, - color: '#0f186e', - }, - header: { - flexDirection: 'row', - alignItems: 'center', - padding: 16, - borderBottomWidth: 1, - borderBottomColor: '#eee', - position: 'relative', - }, - backButton: { - paddingRight: 15, - }, - headerText: { - fontSize: 20, - fontWeight: 'bold', - color: '#0f186e', - marginLeft: 10, - }, - scrollContent: { - padding: 20, - paddingBottom: 160, // Space for bottom container - flexGrow: 1, // Ensures content scales to screen height - justifyContent: 'center', - }, - quizContainer: { - width: '100%', - }, - questionCard: { - backgroundColor: '#0f186e', - borderRadius: 16, - padding: 24, - marginBottom: 24, - minHeight: 150, - justifyContent: 'center', - }, - questionIndex: { - color: 'rgba(255,255,255,0.7)', - fontSize: 14, - marginBottom: 8, - textTransform: 'uppercase', - fontWeight: 'bold', - }, - questionText: { - color: 'white', - fontSize: 22, - fontWeight: '600', - lineHeight: 30, - }, - optionsContainer: { - gap: 12, - }, - baseOption: { - padding: 16, - borderRadius: 12, - borderWidth: 2, - flexDirection: 'row', - alignItems: 'center', - }, - // States of options - optionButton: { - backgroundColor: 'white', - borderColor: '#e0e0e0', - }, - correctButton: { - backgroundColor: '#E8F5E9', - borderColor: '#4CAF50', - }, - wrongButton: { - backgroundColor: '#FFEBEE', - borderColor: '#F44336', - }, - disabledOption: { - backgroundColor: '#f5f5f5', - borderColor: '#eee', - opacity: 0.6, - }, - - optionText: { - fontSize: 18, - color: '#333', - fontWeight: '500', - }, - feedbackContainer: { - alignItems: 'center', - marginVertical: 10, - }, - feedbackText: { - fontSize: 24, - fontWeight: 'bold', - marginVertical: 10, - }, - feedbackTextCorrect: { - color: '#4CAF50', - }, - feedbackTextIncorrect: { - color: '#F44336', - }, - nextButton: { - // Removed marginTop to rely on container padding - backgroundColor: '#0f186e', - paddingVertical: 16, - paddingHorizontal: 32, - borderRadius: 30, - flexDirection: 'row', - justifyContent: 'center', - alignItems: 'center', - gap: 10, - alignSelf: 'center', - width: '100%', - }, - learnMoreButton: { - marginTop: 0, - backgroundColor: 'white', - borderWidth: 2, - borderColor: '#0f186e', - }, - nextButtonText: { - color: 'white', - fontSize: 18, - fontWeight: 'bold', - }, - learnMoreButtonText: { - color: '#0f186e', - }, - bottomContainer: { - position: 'absolute', - bottom: 0, - left: 0, - right: 0, - padding: 20, - gap: 12, - alignItems: 'center', - backgroundColor: 'rgba(255,255,255,0.95)', - }, - flex1: { - flex: 1, - }, -}); diff --git a/apps/legacy/speech/screens/SpeechToTextScreen.tsx b/apps/legacy/speech/screens/SpeechToTextScreen.tsx deleted file mode 100644 index b206b8f886..0000000000 --- a/apps/legacy/speech/screens/SpeechToTextScreen.tsx +++ /dev/null @@ -1,585 +0,0 @@ -import React, { useEffect, useRef, useState } from 'react'; -import { - Text, - View, - StyleSheet, - TouchableOpacity, - ScrollView, - TextInput, - KeyboardAvoidingView, - Platform, - Switch, - Keyboard, -} from 'react-native'; -import { SafeAreaProvider, SafeAreaView } from 'react-native-safe-area-context'; -import { - models, - useSpeechToText, - TranscriptionResult, - SpeechToTextProps, -} from 'react-native-executorch/legacy'; -import { ModelPicker, ModelOption } from '../components/ModelPicker'; -const speechToText = models.speech_to_text; -const vad = models.vad; - -const isSimulator = DeviceInfo.isEmulatorSync(); -const backend = Platform.OS === 'ios' && !isSimulator ? 'coreml' : 'xnnpack'; - -type STTModelSources = SpeechToTextProps['model']; - -const MODELS: ModelOption[] = [ - { - label: 'Whisper Tiny EN', - value: speechToText.whisper_tiny_en({ backend }), - }, - { - label: 'Whisper Base EN', - value: speechToText.whisper_base_en({ backend }), - }, - { - label: 'Whisper Small EN', - value: speechToText.whisper_small_en({ backend }), - }, -]; -import FontAwesome from '@expo/vector-icons/FontAwesome'; -import { AudioManager, AudioRecorder, AudioContext } from 'react-native-audio-api'; -import * as FileSystem from 'expo-file-system/legacy'; -import SWMIcon from '../assets/swm_icon.svg'; -import DeviceInfo from 'react-native-device-info'; - -import { VerboseTranscription } from '../components/VerboseTranscription'; -import ErrorBanner from '../components/ErrorBanner'; - -export const SpeechToTextScreen = ({ onBack }: { onBack: () => void }) => { - const [selectedModel, setSelectedModel] = useState( - Platform.OS === 'ios' && !isSimulator - ? speechToText.whisper_base_en({ backend }) - : speechToText.whisper_tiny_en() - ); - - const model = useSpeechToText({ - model: selectedModel, - vad: vad.fsmn_vad(), - }); - - const [transcription, setTranscription] = useState(null); - const [transcriptionTime, setTranscriptionTime] = useState(null); - - const [liveResult, setLiveResult] = useState<{ - fullText: string; - segments: any[]; - } | null>(null); - - const [enableTimestamps, setEnableTimestamps] = useState(false); - const [useVAD, setUseVAD] = useState(true); - const [error, setError] = useState(null); - const [audioURL, setAudioURL] = useState(''); - const [hasMicPermission, setHasMicPermission] = useState(false); - - const isRecordingRef = useRef(false); - const [liveTranscribing, setLiveTranscribing] = useState(false); - const scrollViewRef = useRef(null); - - const recorder = useRef(new AudioRecorder()); - - useEffect(() => { - AudioManager.setAudioSessionOptions({ - iosCategory: 'playAndRecord', - iosMode: 'spokenAudio', - iosOptions: ['allowBluetoothHFP', 'defaultToSpeaker'], - }); - const checkPerms = async () => { - const status = await AudioManager.requestRecordingPermissions(); - setHasMicPermission(status === 'Granted'); - }; - checkPerms(); - }, []); - - async function getAudioFile(sourceUri: string) { - const destination = FileSystem.cacheDirectory + 'audio_file.wav'; - - if (sourceUri.startsWith('http')) { - const { uri } = await FileSystem.downloadAsync(sourceUri, destination); - return uri; - } else { - await FileSystem.copyAsync({ - from: sourceUri, - to: destination, - }); - return destination; - } - } - - const handleTranscribeFromURL = async () => { - if (!audioURL.trim() || model.isGenerating) { - if (!audioURL.trim()) { - console.warn('Please provide a valid audio file URL'); - } - return; - } - - Keyboard.dismiss(); - - // Reset previous states - setTranscription(null); - setLiveResult(null); - - try { - const uri = await getAudioFile(audioURL); - const audioContext = new AudioContext({ sampleRate: 16000 }); - const decodedAudioData = await audioContext.decodeAudioData(uri); - const audioBuffer = decodedAudioData.getChannelData(0); - const start = Date.now(); - const result = await model.transcribe(audioBuffer, { - verbose: enableTimestamps, - }); - setTranscriptionTime(Date.now() - start); - setTranscription(result); - } catch (e) { - setError(e instanceof Error ? e.message : String(e)); - return; - } - }; - - const handleStartTranscribeFromMicrophone = async () => { - if (!hasMicPermission || model.isGenerating || liveTranscribing) { - if (!hasMicPermission) { - setError('Microphone permission denied. Please enable it in Settings.'); - } - return; - } - - isRecordingRef.current = true; - setLiveTranscribing(true); - - setTranscription(null); - setLiveResult({ fullText: '', segments: [] }); - - const sampleRate = 16000; - - recorder.current.onAudioReady( - { - sampleRate, - bufferLength: 0.1 * sampleRate, // 100 ms - channelCount: 1, - }, - ({ buffer }) => { - model.streamInsert(buffer.getChannelData(0)); - } - ); - - try { - await AudioManager.setAudioSessionActivity(true); - const result = await recorder.current.start(); - if (result.status === 'error') { - setError(`Recording problems: ${result.message}`); - } - } catch (e) { - setError(e instanceof Error ? e.message : String(e)); - isRecordingRef.current = false; - setLiveTranscribing(false); - return; - } - - let accumulatedText = ''; - let accumulatedSegments: any[] = []; - - try { - const streamIter = model.stream({ - verbose: enableTimestamps, - timeout: 200, - useVAD: useVAD, - vadDetectionMargin: 1200, - }); - - for await (const { committed, nonCommitted } of streamIter) { - if (!isRecordingRef.current) break; - - if (committed.text) { - accumulatedText += committed.text; - } - if (committed.segments) { - accumulatedSegments = [...accumulatedSegments, ...committed.segments]; - } - - const currentDisplay = { - fullText: accumulatedText + nonCommitted.text, - segments: [...accumulatedSegments, ...(nonCommitted.segments || [])], - }; - - setLiveResult(currentDisplay); - } - } catch (e) { - setError(e instanceof Error ? e.message : String(e)); - } finally { - setLiveTranscribing(false); - } - }; - - const handleStopTranscribeFromMicrophone = () => { - isRecordingRef.current = false; - - recorder.current.stop(); - model.streamStop(); - console.log('Live transcription stopped'); - setLiveTranscribing(false); - - if (liveResult) { - setTranscription({ - text: liveResult.fullText, - segments: liveResult.segments, - language: 'en', - duration: 0, - }); - setLiveResult(null); - } - }; - - const getModelStatus = () => { - if (model.isGenerating) return 'Transcribing...'; - if (model.isReady) return 'Ready to transcribe'; - return `Loading model: ${(100 * model.downloadProgress).toFixed(2)}%`; - }; - - useEffect(() => { - if (model.error) setError(String(model.error)); - }, [model.error]); - - const readyToTranscribe = !model.isGenerating && model.isReady; - const recordingButtonDisabled = isSimulator || !readyToTranscribe; - - const getDisplayData = (): TranscriptionResult | null => { - if (liveTranscribing && liveResult) { - return { - text: liveResult.fullText, - segments: liveResult.segments, - language: 'en', - duration: 0, - }; - } - return transcription; - }; - - const displayData = getDisplayData(); - - return ( - - - - - - - - - React Native ExecuTorch - Speech to Text - - - - Status: {getModelStatus()} - {transcriptionTime !== null && ( - Transcription: {transcriptionTime} ms - )} - - setError(null)} /> - - { - setSelectedModel(m); - setTranscription(null); - setLiveResult(null); - }} - /> - - - Enable Timestamps (Verbose) - { - setEnableTimestamps(val); - setTranscription(null); - setLiveResult(null); - }} - trackColor={{ false: '#767577', true: '#0f186e' }} - thumbColor={enableTimestamps ? '#fff' : '#f4f3f4'} - disabled={model.isGenerating} - /> - - - - Transcription - scrollViewRef.current?.scrollToEnd({ animated: true })} - > - {displayData ? ( - - ) : ( - - {liveTranscribing ? 'Listening...' : 'No transcription yet...'} - - )} - - - - - - - - Start - - - - {liveTranscribing ? ( - - - Stop Live Transcription - - ) : ( - - - - {isSimulator ? 'No Mic' : 'Start Live'} - - - setUseVAD(!useVAD)} - activeOpacity={0.7} - accessibilityRole="switch" - accessibilityState={{ checked: useVAD }} - accessibilityLabel={`Voice Activity Detection ${useVAD ? 'on' : 'off'}`} - style={[ - styles.vadButton, - useVAD ? styles.vadActive : styles.vadInactive, - recordingButtonDisabled && styles.disabled, - ]} - > - - - - VAD - - - {useVAD ? 'ON' : 'OFF'} - - - - - )} - - - - - ); -}; - -const styles = StyleSheet.create({ - container: { - flex: 1, - alignItems: 'center', - backgroundColor: 'white', - paddingHorizontal: 16, - }, - keyboardAvoidingView: { - flex: 1, - width: '100%', - }, - header: { - alignItems: 'center', - position: 'relative', - width: '100%', - }, - backButton: { - position: 'absolute', - left: 0, - top: 10, - padding: 10, - zIndex: 1, - }, - headerText: { - fontSize: 22, - fontWeight: 'bold', - color: '#0f186e', - }, - statusContainer: { - marginTop: 12, - alignItems: 'center', - }, - statsText: { - fontSize: 13, - color: '#334155', - fontWeight: '500', - marginTop: 4, - }, - toggleContainer: { - flexDirection: 'row', - alignItems: 'center', - marginTop: 10, - marginBottom: 5, - }, - toggleLabel: { - fontSize: 16, - marginRight: 10, - color: '#0f186e', - }, - transcriptionContainer: { - flex: 1, - width: '100%', - marginVertical: 12, - }, - transcriptionLabel: { - marginLeft: 12, - marginBottom: 4, - color: '#0f186e', - }, - transcriptionScrollContainer: { - borderRadius: 12, - borderWidth: 1, - borderColor: '#0f186e', - padding: 12, - maxHeight: 400, - }, - placeholderText: { - color: '#aaa', - fontStyle: 'italic', - }, - inputContainer: { - marginBottom: 12, - }, - urlTranscriptionContainer: { - width: '100%', - flexDirection: 'row', - }, - urlTranscriptionInput: { - flex: 1, - padding: 12, - borderTopLeftRadius: 12, - borderBottomLeftRadius: 12, - borderWidth: 1, - borderColor: '#0f186e', - borderRightWidth: 0, - color: '#0f186e', - }, - urlTranscriptionButton: { - backgroundColor: '#0f186e', - justifyContent: 'center', - alignItems: 'center', - padding: 12, - borderTopRightRadius: 12, - borderBottomRightRadius: 12, - }, - buttonText: { - color: 'white', - fontWeight: '600', - letterSpacing: -0.5, - fontSize: 16, - }, - liveTranscriptionButton: { - flexDirection: 'row', - justifyContent: 'center', - alignItems: 'center', - padding: 12, - borderRadius: 12, - marginTop: 12, - gap: 8, - }, - backgroundRed: { - backgroundColor: 'red', - }, - backgroundBlue: { - backgroundColor: '#0f186e', - }, - buttonRow: { - flexDirection: 'row', - gap: 8, - marginTop: 12, - }, - flex1: { - flex: 1, - marginTop: 0, - }, - vadButton: { - flexDirection: 'row', - alignItems: 'center', - justifyContent: 'center', - paddingHorizontal: 14, - borderRadius: 12, - gap: 10, - }, - vadActive: { - backgroundColor: '#0f186e', - }, - vadInactive: { - backgroundColor: '#f1f5f9', - }, - vadTextContainer: { - alignItems: 'flex-start', - }, - vadButtonLabel: { - fontWeight: '800', - fontSize: 13, - letterSpacing: 0.5, - }, - vadButtonLabelActive: { - color: 'white', - }, - vadButtonLabelInactive: { - color: '#64748b', - }, - vadButtonState: { - fontWeight: '700', - fontSize: 10, - letterSpacing: 1, - }, - vadButtonStateActive: { - color: '#bbf7d0', - }, - vadButtonStateInactive: { - color: '#94a3b8', - }, - disabled: { - opacity: 0.5, - }, -}); diff --git a/apps/legacy/speech/screens/TextToSpeechLLMScreen.tsx b/apps/legacy/speech/screens/TextToSpeechLLMScreen.tsx deleted file mode 100644 index 0066c7552f..0000000000 --- a/apps/legacy/speech/screens/TextToSpeechLLMScreen.tsx +++ /dev/null @@ -1,295 +0,0 @@ -import React, { useEffect, useState, useRef } from 'react'; -import { View, Text, StyleSheet, TouchableOpacity, ScrollView } from 'react-native'; -import { SafeAreaProvider, SafeAreaView } from 'react-native-safe-area-context'; -import FontAwesome from '@expo/vector-icons/FontAwesome'; -import SWMIcon from '../assets/swm_icon.svg'; -import { models, useLLM, useTextToSpeech } from 'react-native-executorch/legacy'; -import { - AudioManager, - AudioContext, - AudioBuffer, - AudioBufferSourceNode, -} from 'react-native-audio-api'; - -interface TextToSpeechLLMProps { - onBack: () => void; -} - -/** - * Converts an audio vector (Float32Array) to an AudioBuffer for playback - * @param audioVector - The generated audio samples from the model - * @param audioContext - The audio context used to create the buffer. - * @param sampleRate - The sample rate (default: 24000 Hz for Kokoro) - * @returns AudioBuffer ready for playback - */ -const createAudioBufferFromVector = ( - audioVector: Float32Array, - audioContext: AudioContext, - sampleRate: number = 24000 -): AudioBuffer => { - const audioBuffer = audioContext.createBuffer(1, audioVector.length, sampleRate); - const channelData = audioBuffer.getChannelData(0); - channelData.set(audioVector); - - return audioBuffer; -}; - -export const TextToSpeechLLMScreen = ({ onBack }: TextToSpeechLLMProps) => { - const [displayText, setDisplayText] = useState(''); - const [isTtsStreaming, setIsTtsStreaming] = useState(false); - const llm = useLLM({ model: models.llm.llama3_2_1b() }); - const tts = useTextToSpeech(models.text_to_speech.kokoro.en_us.heart()); - - const processedLengthRef = useRef(0); - const audioContextRef = useRef(null); - const sourceRef = useRef(null); - - useEffect(() => { - AudioManager.setAudioSessionOptions({ - iosCategory: 'playAndRecord', - iosMode: 'spokenAudio', - iosOptions: ['defaultToSpeaker'], - }); - - audioContextRef.current = new AudioContext({ sampleRate: 24000 }); - audioContextRef.current.suspend(); - - return () => { - audioContextRef.current?.close(); - audioContextRef.current = null; - }; - }, []); - - // Update displayText gradually as response gets generated and insert new text chunks into TTS stream - useEffect(() => { - if (llm.response && tts.isReady) { - setDisplayText(llm.response); - - const previousLength = processedLengthRef.current; - if (llm.response.length > previousLength && isTtsStreaming) { - const newChunk = llm.response.slice(previousLength); - tts.streamInsert(newChunk); - processedLengthRef.current = llm.response.length; - } - } else { - processedLengthRef.current = 0; - } - }, [llm.response, tts, isTtsStreaming]); - - const handleGenerate = async () => { - setDisplayText(''); - processedLengthRef.current = 0; - setIsTtsStreaming(true); - - const startTTS = async () => { - try { - const audioContext = audioContextRef.current; - if (!audioContext) return; - - if (audioContext.state === 'suspended') { - await audioContext.resume(); - } - - const onNext = async (audioVec: Float32Array) => { - return new Promise((resolve) => { - const audioBuffer = createAudioBufferFromVector(audioVec, audioContext, 24000); - - const source = (sourceRef.current = audioContext.createBufferSource()); - source.buffer = audioBuffer; - source.connect(audioContext.destination); - - source.onEnded = () => resolve(); - - source.start(); - }); - }; - - await tts.stream({ - speed: 0.9, - stopAutomatically: false, - onNext, - }); - } catch (e) { - console.error('TTS streaming error:', e); - } finally { - setIsTtsStreaming(false); - } - }; - - const ttsPromise = startTTS(); - - try { - await llm.sendMessage( - 'Generate a short story about a robot learning to paint. The story should be around 200 words long.' - ); - } catch (e) { - console.error('Generation failed:', e); - } finally { - // LLM finished — partition any trailing un-terminated tail so it gets - // synthesized before the stream closes. - tts.streamFlush(); - tts.streamStop(false); - await ttsPromise; - - if (audioContextRef.current && audioContextRef.current.state === 'running') { - await audioContextRef.current.suspend(); - } - } - }; - - const handleStop = () => { - llm.interrupt(); - tts.streamStop(true); - if (sourceRef.current) { - try { - sourceRef.current.stop(); - } catch (e) { - // Source might have already stopped or disconnected - } - } - }; - - const isProcessing = llm.isGenerating || isTtsStreaming; - const isModelsReady = llm.isReady && tts.isReady; - - const getModelStatus = () => { - if (llm.error) return `LLM Error: ${llm.error.message}`; - if (tts.error) return `TTS Error: ${tts.error.message}`; - if (!llm.isReady) return `Loading LLM: ${(100 * llm.downloadProgress).toFixed(2)}%`; - if (!tts.isReady) return `Loading TTS: ${(100 * tts.downloadProgress).toFixed(2)}%`; - if (isProcessing) return 'Generating/Streaming...'; - return 'Ready'; - }; - - return ( - - - - - - - - React Native ExecuTorch - LLM to Speech Demo - - - - Status: {getModelStatus()} - - - - Generated Story - - - - {displayText || - (isModelsReady - ? 'Press the button to generate a story and hear it spoken aloud.' - : 'Please wait for models to load...')} - - - - - - - {isProcessing ? ( - - - Stop Generation - - ) : ( - - - Generate & Stream Speech - - )} - - - - ); -}; - -const styles = StyleSheet.create({ - container: { - flex: 1, - alignItems: 'center', - backgroundColor: 'white', - paddingHorizontal: 16, - }, - header: { - alignItems: 'center', - position: 'relative', - width: '100%', - }, - backButton: { - position: 'absolute', - left: 0, - top: 10, - padding: 10, - zIndex: 1, - }, - headerText: { - fontSize: 22, - fontWeight: 'bold', - color: '#0f186e', - }, - statusContainer: { - marginTop: 12, - alignItems: 'center', - }, - contentContainer: { - width: '100%', - marginTop: 24, - flex: 1, - marginBottom: 24, - }, - label: { - marginLeft: 12, - marginBottom: 4, - color: '#0f186e', - fontWeight: '600', - }, - responseContainer: { - borderRadius: 12, - borderWidth: 1, - borderColor: '#0f186e', - flex: 1, - }, - responseContent: { - padding: 12, - }, - responseText: { - fontSize: 16, - color: '#333', - lineHeight: 24, - }, - buttonContainer: { - marginBottom: 24, - width: '100%', - }, - actionButton: { - backgroundColor: '#0f186e', - flexDirection: 'row', - justifyContent: 'center', - alignItems: 'center', - padding: 12, - borderRadius: 12, - gap: 8, - }, - stopButton: { - backgroundColor: '#ff4444', - }, - buttonText: { - color: 'white', - fontWeight: '600', - letterSpacing: -0.5, - fontSize: 16, - }, - disabled: { - opacity: 0.5, - }, -}); diff --git a/apps/legacy/speech/screens/TextToSpeechScreen.tsx b/apps/legacy/speech/screens/TextToSpeechScreen.tsx deleted file mode 100644 index 8da2be6e6f..0000000000 --- a/apps/legacy/speech/screens/TextToSpeechScreen.tsx +++ /dev/null @@ -1,310 +0,0 @@ -import React, { useEffect, useRef, useState } from 'react'; -import { - Text, - View, - StyleSheet, - TouchableOpacity, - TextInput, - KeyboardAvoidingView, - Platform, - Keyboard, -} from 'react-native'; -import { SafeAreaProvider, SafeAreaView } from 'react-native-safe-area-context'; -import { models, useTextToSpeech, TextToSpeechModelConfig } from 'react-native-executorch/legacy'; -import { ModelPicker, ModelOption } from '../components/ModelPicker'; - -const tts = models.text_to_speech.kokoro; - -const VOICES: ModelOption[] = [ - { label: '🇺🇸 AF Heart', value: tts.en_us.heart() }, - { label: '🇺🇸 AF River', value: tts.en_us.river() }, - { label: '🇺🇸 AF Sarah', value: tts.en_us.sarah() }, - { label: '🇺🇸 AM Adam', value: tts.en_us.adam() }, - { label: '🇺🇸 AM Michael', value: tts.en_us.michael() }, - { label: '🇺🇸 AM Santa', value: tts.en_us.santa() }, - { label: '🇬🇧 BF Emma', value: tts.en_gb.emma() }, - { label: '🇬🇧 BM Daniel', value: tts.en_gb.daniel() }, - { label: '🇫🇷 FF Siwis', value: tts.fr.siwis() }, - { label: '🇪🇸 EF Dora', value: tts.es.dora() }, - { label: '🇪🇸 EM Alex', value: tts.es.alex() }, - { label: '🇮🇹 IF Sara', value: tts.it.sara() }, - { label: '🇮🇹 IM Nicola', value: tts.it.nicola() }, - { label: '🇵🇹 PF Dora', value: tts.pt.dora() }, - { label: '🇵🇹 PM Santa', value: tts.pt.santa() }, - { label: '🇩🇪 DF Anna', value: tts.de.anna() }, - { label: '🇵🇱 PM Mateusz', value: tts.pl.mateusz() }, - { label: '🇮🇳 HF Alpha', value: tts.hi.alpha() }, - { label: '🇮🇳 HM Omega', value: tts.hi.omega() }, - { label: '🇮🇳 HM Psi', value: tts.hi.psi() }, -]; - -import FontAwesome from '@expo/vector-icons/FontAwesome'; -import { - AudioManager, - AudioContext, - AudioBuffer, - AudioBufferSourceNode, -} from 'react-native-audio-api'; -import SWMIcon from '../assets/swm_icon.svg'; -import ErrorBanner from '../components/ErrorBanner'; - -/** - * Converts an audio vector (Float32Array) to an AudioBuffer for playback - * @param audioVector - The generated audio samples from the model - * @param audioContext - An optional AudioContext to create the buffer in. If not provided, a new one will be created. - * @param sampleRate - The sample rate (default: 24000 Hz for Kokoro) - * @returns AudioBuffer ready for playback - */ -const createAudioBufferFromVector = ( - audioVector: Float32Array, - audioContext: AudioContext | null = null, - sampleRate: number = 24000 -): AudioBuffer => { - if (audioContext == null) audioContext = new AudioContext({ sampleRate }); - - const audioBuffer = audioContext.createBuffer(1, audioVector.length, sampleRate); - const channelData = audioBuffer.getChannelData(0); - channelData.set(audioVector); - - return audioBuffer; -}; - -export const TextToSpeechScreen = ({ onBack }: { onBack: () => void }) => { - const [selectedSpeaker, setSelectedSpeaker] = useState( - tts.en_us.heart() - ); - - const model = useTextToSpeech(selectedSpeaker); - - const [inputText, setInputText] = useState(''); - const [isPlaying, setIsPlaying] = useState(false); - const [readyToGenerate, setReadyToGenerate] = useState(false); - const [error, setError] = useState(null); - - const audioContextRef = useRef(null); - const gainNodeRef = useRef(null); - const sourceRef = useRef(null); - - useEffect(() => { - AudioManager.setAudioSessionOptions({ - iosCategory: 'playAndRecord', - iosMode: 'spokenAudio', - iosOptions: ['defaultToSpeaker'], - }); - - const context = new AudioContext({ sampleRate: 24000 }); - audioContextRef.current = context; - context.suspend(); - - // Increase the audio volume - const gainNode = context.createGain(); - gainNode.gain.value = 2.0; // Increase volume by 2x - gainNode.connect(context.destination); - gainNodeRef.current = gainNode; - - return () => { - audioContextRef.current?.close(); - audioContextRef.current = null; - gainNodeRef.current = null; - }; - }, []); - - useEffect(() => { - setReadyToGenerate(!model.isGenerating && model.isReady && !isPlaying); - }, [model.isGenerating, model.isReady, isPlaying]); - - const handlePlayAudio = async () => { - if (!inputText.trim()) { - return; - } - - Keyboard.dismiss(); - setIsPlaying(true); - - try { - const audioContext = audioContextRef.current; - if (!audioContext) return; - - if (audioContext.state === 'suspended') { - await audioContext.resume(); - } - - const onNext = async (audioVec: Float32Array) => { - return new Promise((resolve) => { - const audioBuffer = createAudioBufferFromVector(audioVec, audioContext, 24000); - - const source = (sourceRef.current = audioContext.createBufferSource()); - source.buffer = audioBuffer; - - if (gainNodeRef.current) { - source.connect(gainNodeRef.current); - } else { - source.connect(audioContext.destination); - } - - source.onEnded = () => resolve(); - - source.start(); - }); - }; - - const onEnd = async () => { - setIsPlaying(false); - await audioContext.suspend(); - }; - - await model.stream({ - text: inputText, - speed: 0.9, - phonemize: true, - onNext, - onEnd, - }); - } catch (e) { - setError(e instanceof Error ? e.message : String(e)); - setIsPlaying(false); - } - }; - - const getModelStatus = () => { - if (model.isGenerating) return 'Generating audio...'; - if (model.isReady) return 'Ready to synthesize'; - return `Loading model: ${(100 * model.downloadProgress).toFixed(2)}%`; - }; - - useEffect(() => { - if (model.error) setError(String(model.error)); - }, [model.error]); - - return ( - - - - - - - - - React Native ExecuTorch - Text to Speech - - - - Status: {getModelStatus()} - - setError(null)} /> - - setSelectedSpeaker(m)} - /> - - - Enter text to synthesize - - - - - - - {isPlaying ? 'Playing...' : 'Generate & Play'} - - - - - - ); -}; - -const styles = StyleSheet.create({ - container: { - flex: 1, - alignItems: 'center', - backgroundColor: 'white', - paddingHorizontal: 16, - }, - keyboardAvoidingView: { - flex: 1, - width: '100%', - }, - header: { - alignItems: 'center', - position: 'relative', - width: '100%', - }, - backButton: { - position: 'absolute', - left: 0, - top: 10, - padding: 10, - zIndex: 1, - }, - headerText: { - fontSize: 22, - fontWeight: 'bold', - color: '#0f186e', - }, - statusContainer: { - marginTop: 12, - alignItems: 'center', - }, - inputContainer: { - width: '100%', - marginTop: 24, - }, - inputLabel: { - marginLeft: 12, - marginBottom: 4, - color: '#0f186e', - fontWeight: '600', - }, - textInput: { - borderRadius: 12, - borderWidth: 1, - borderColor: '#0f186e', - padding: 12, - minHeight: 120, - fontSize: 16, - color: '#0f186e', - }, - buttonContainer: { - marginTop: 24, - }, - playButton: { - backgroundColor: '#0f186e', - flexDirection: 'row', - justifyContent: 'center', - alignItems: 'center', - padding: 12, - borderRadius: 12, - gap: 8, - }, - buttonText: { - color: 'white', - fontWeight: '600', - letterSpacing: -0.5, - fontSize: 16, - }, - disabled: { - opacity: 0.5, - }, -}); diff --git a/apps/legacy/speech/screens/VoiceActivityDetectionScreen.tsx b/apps/legacy/speech/screens/VoiceActivityDetectionScreen.tsx deleted file mode 100644 index aacad9bc0e..0000000000 --- a/apps/legacy/speech/screens/VoiceActivityDetectionScreen.tsx +++ /dev/null @@ -1,300 +0,0 @@ -import React, { useEffect, useRef, useState } from 'react'; -import { Text, View, StyleSheet, TouchableOpacity, ScrollView, Platform } from 'react-native'; -import { SafeAreaProvider, SafeAreaView } from 'react-native-safe-area-context'; -import { models, useVAD } from 'react-native-executorch/legacy'; -import FontAwesome from '@expo/vector-icons/FontAwesome'; -import { AudioManager, AudioRecorder } from 'react-native-audio-api'; -import SWMIcon from '../assets/swm_icon.svg'; -import DeviceInfo from 'react-native-device-info'; -import ErrorBanner from '../components/ErrorBanner'; - -const isSimulator = DeviceInfo.isEmulatorSync(); - -export const VoiceActivityDetectionScreen = ({ onBack }: { onBack: () => void }) => { - const model = useVAD({ - model: models.vad.fsmn_vad(), - }); - - const [isSpeaking, setIsSpeaking] = useState(false); - const [error, setError] = useState(null); - const [hasMicPermission, setHasMicPermission] = useState(false); - const [isStreaming, setIsStreaming] = useState(false); - - const recorder = useRef(new AudioRecorder()); - const logScrollRef = useRef(null); - const [logs, setLogs] = useState([]); - - const addLog = (msg: string) => { - setLogs((prev) => [...prev, `${new Date().toLocaleTimeString()}: ${msg}`]); - }; - - useEffect(() => { - AudioManager.setAudioSessionOptions({ - iosCategory: 'playAndRecord', - iosMode: 'spokenAudio', - iosOptions: ['allowBluetoothHFP', 'defaultToSpeaker'], - }); - const checkPerms = async () => { - const status = await AudioManager.requestRecordingPermissions(); - setHasMicPermission(status === 'Granted'); - }; - checkPerms(); - }, []); - - const handleStartStreaming = async () => { - if (isStreaming || model.isGenerating || !model.isReady) { - return; - } - - setIsStreaming(true); - if (!hasMicPermission) { - setError('Microphone permission denied. Please enable it in Settings.'); - setIsStreaming(false); - return; - } - - setLogs([]); - addLog('Starting VAD stream...'); - - const sampleRate = 16000; - - recorder.current.onAudioReady( - { - sampleRate, - bufferLength: 0.1 * sampleRate, - channelCount: 1, - }, - ({ buffer }) => { - model.streamInsert(buffer.getChannelData(0)); - } - ); - - try { - await AudioManager.setAudioSessionActivity(true); - const result = await recorder.current.start(); - if (result.status === 'error') { - setError(`Recording problems: ${result.status}`); - } - - await model.stream({ - onSpeechBegin: () => { - setIsSpeaking(true); - addLog('Speech detected (Begin)'); - }, - onSpeechEnd: () => { - setIsSpeaking(false); - addLog('Silence detected (End)'); - }, - options: { - timeout: 100, - detectionMargin: 300, - }, - }); - } catch (e) { - setError(e instanceof Error ? e.message : String(e)); - setIsStreaming(false); - } - }; - - const handleStopStreaming = () => { - recorder.current.stop(); - model.streamStop(); - setIsStreaming(false); - setIsSpeaking(false); - addLog('VAD stream stopped'); - }; - - const getModelStatus = () => { - if (isStreaming || model.isGenerating) return 'Processing...'; - if (model.isReady) return 'Ready'; - return `Loading model: ${(100 * model.downloadProgress).toFixed(2)}%`; - }; - - useEffect(() => { - if (model.error) setError(String(model.error)); - }, [model.error]); - - const readyToStream = model.isReady; - const recordingButtonDisabled = isSimulator || !readyToStream || model.isGenerating; - - return ( - - - - - - - - React Native ExecuTorch - Voice Activity Detection - - - - Status: {getModelStatus()} - - - setError(null)} /> - - - - - {isSpeaking ? 'SPEAKING' : 'SILENT'} - - - - - VAD Events - logScrollRef.current?.scrollToEnd({ animated: true })} - > - {logs.length > 0 ? ( - logs.map((log, i) => ( - - {log} - - )) - ) : ( - No events logged yet... - )} - - - - - {isStreaming ? ( - - - Stop VAD Stream - - ) : ( - - - - {isSimulator ? 'Recording not available on Simulator' : 'Start VAD Stream'} - - - )} - - - - ); -}; - -const styles = StyleSheet.create({ - container: { - flex: 1, - alignItems: 'center', - backgroundColor: 'white', - paddingHorizontal: 16, - }, - header: { - alignItems: 'center', - position: 'relative', - width: '100%', - }, - backButton: { - position: 'absolute', - left: 0, - top: 10, - padding: 10, - zIndex: 1, - }, - headerText: { - fontSize: 22, - fontWeight: 'bold', - color: '#0f186e', - }, - statusContainer: { - marginTop: 12, - alignItems: 'center', - }, - visualizerContainer: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - }, - visualizerText: { - marginTop: 20, - fontSize: 24, - fontWeight: '800', - letterSpacing: 2, - }, - speakingText: { - color: '#22c55e', - }, - silentText: { - color: '#ef4444', - }, - logContainer: { - height: 150, - width: '100%', - marginVertical: 12, - }, - logLabel: { - marginLeft: 12, - marginBottom: 4, - color: '#0f186e', - fontWeight: '600', - }, - logScrollContainer: { - borderRadius: 12, - borderWidth: 1, - borderColor: '#0f186e', - padding: 12, - backgroundColor: '#f8fafc', - }, - logText: { - fontSize: 12, - fontFamily: Platform.OS === 'ios' ? 'Menlo' : 'monospace', - color: '#334155', - marginBottom: 2, - }, - placeholderText: { - color: '#aaa', - fontStyle: 'italic', - }, - inputContainer: { - marginBottom: 30, - width: '100%', - }, - liveButton: { - flexDirection: 'row', - justifyContent: 'center', - alignItems: 'center', - padding: 16, - borderRadius: 12, - gap: 8, - }, - backgroundRed: { - backgroundColor: '#ef4444', - }, - backgroundBlue: { - backgroundColor: '#0f186e', - }, - buttonText: { - color: 'white', - fontWeight: '600', - fontSize: 16, - }, - disabled: { - opacity: 0.5, - }, -}); diff --git a/apps/legacy/speech/tsconfig.json b/apps/legacy/speech/tsconfig.json deleted file mode 100644 index 20b5fc01ed..0000000000 --- a/apps/legacy/speech/tsconfig.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "compilerOptions": { - "allowJs": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "jsx": "react-native", - "lib": ["es2022"], - "moduleResolution": "bundler", - "noEmit": true, - "resolveJsonModule": true, - "skipLibCheck": true, - "strict": true, - "target": "esnext", - "paths": { - "react-native-executorch/legacy": ["../../packages/react-native-executorch/legacy/src"], - "react-native-executorch-expo-resource-fetcher": ["../../packages/expo-resource-fetcher"] - } - }, - "include": ["**/*.ts", "**/*.tsx"], - "exclude": ["**/node_modules", "**/Pods", "**/__tests__"], - "extends": "expo/tsconfig.base" -} diff --git a/apps/legacy/text-embeddings/.gitignore b/apps/legacy/text-embeddings/.gitignore deleted file mode 100644 index d7eba44af8..0000000000 --- a/apps/legacy/text-embeddings/.gitignore +++ /dev/null @@ -1,39 +0,0 @@ -# Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files - -# dependencies -node_modules/ - -# Expo -.expo/ -dist/ -web-build/ -expo-env.d.ts - -# Native -*.orig.* -*.jks -*.p8 -*.p12 -*.key -*.mobileprovision - -# Metro -.metro-health-check* - -# debug -npm-debug.* -yarn-debug.* -yarn-error.* - -# macOS -.DS_Store -*.pem - -# local env files -.env*.local - -# typescript -*.tsbuildinfo - -# yarn -.yarn \ No newline at end of file diff --git a/apps/legacy/text-embeddings/app.json b/apps/legacy/text-embeddings/app.json deleted file mode 100644 index 38f9a95046..0000000000 --- a/apps/legacy/text-embeddings/app.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "expo": { - "name": "legacy-text-embeddings", - "slug": "legacy-text-embeddings", - "version": "1.0.0", - "orientation": "portrait", - "icon": "./assets/icon.png", - "userInterfaceStyle": "light", - "newArchEnabled": true, - "scheme": "rne-embeddings", - "splash": { - "image": "./assets/splash-icon.png", - "resizeMode": "contain", - "backgroundColor": "#ffffff" - }, - "ios": { - "supportsTablet": true, - "bundleIdentifier": "com.anonymous.text-embeddings" - }, - "android": { - "adaptiveIcon": { - "foregroundImage": "./assets/adaptive-icon.png", - "backgroundColor": "#ffffff" - }, - "package": "com.anonymous.textembeddings" - }, - "web": { - "favicon": "./assets/favicon.png" - }, - "plugins": [ - "expo-router", - [ - "expo-build-properties", - { - "ios": { - "deploymentTarget": "17.0" - } - } - ] - ] - } -} diff --git a/apps/legacy/text-embeddings/app/_layout.tsx b/apps/legacy/text-embeddings/app/_layout.tsx deleted file mode 100644 index 8ef0ed37f1..0000000000 --- a/apps/legacy/text-embeddings/app/_layout.tsx +++ /dev/null @@ -1,131 +0,0 @@ -import { Drawer } from 'expo-router/drawer'; -import { initExecutorch } from 'react-native-executorch/legacy'; -import { ExpoResourceFetcher } from 'react-native-executorch-expo-resource-fetcher'; -import ColorPalette from '../colors'; -import React, { useState } from 'react'; -import { Text, StyleSheet, View, TouchableOpacity, type ColorValue } from 'react-native'; - -import { - type DrawerContentComponentProps, - DrawerContentScrollView, - DrawerItemList, -} from 'expo-router/build/react-navigation/drawer'; -import { DrawerActions } from 'expo-router/build/react-navigation/routers'; -import { useNavigation } from 'expo-router'; -import Svg, { Rect } from 'react-native-svg'; -import { GeneratingContext } from '../context'; - -function HamburgerIcon({ tintColor }: { tintColor?: ColorValue }) { - const navigation = useNavigation(); - const fill = typeof tintColor === 'string' ? tintColor : '#000'; - return ( - navigation.dispatch(DrawerActions.toggleDrawer())} - style={styles.hamburger} - > - - - - - - - ); -} - -initExecutorch({ - resourceFetcher: ExpoResourceFetcher, -}); - -interface CustomDrawerProps extends DrawerContentComponentProps { - isGenerating: boolean; -} - -function CustomDrawerContent(props: CustomDrawerProps) { - const { isGenerating, ...otherProps } = props; - return ( - - {!isGenerating ? ( - - ) : ( - - Model is generating... - Interrupt before switching model - - )} - - ); -} - -export default function _layout() { - const [isGenerating, setIsGenerating] = useState(false); - - return ( - { - setIsGenerating(newState); - }, - }} - > - ( - - )} - screenOptions={{ - drawerActiveTintColor: ColorPalette.primary, - drawerInactiveTintColor: '#888', - headerTintColor: ColorPalette.primary, - headerTitleStyle: { color: ColorPalette.primary }, - headerLeft: (props) => , - }} - > - null, - title: 'Main Menu', - drawerItemStyle: { display: 'none' }, - }} - /> - - - - - ); -} - -const styles = StyleSheet.create({ - hamburger: { - marginLeft: 12, - }, - centerContent: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - padding: 20, - }, - mainText: { - fontSize: 18, - fontWeight: 'bold', - marginBottom: 10, - color: ColorPalette.primary, - }, - subText: { - fontSize: 14, - color: ColorPalette.strongPrimary, - }, -}); diff --git a/apps/legacy/text-embeddings/app/clip-embeddings/index.tsx b/apps/legacy/text-embeddings/app/clip-embeddings/index.tsx deleted file mode 100644 index f59176c612..0000000000 --- a/apps/legacy/text-embeddings/app/clip-embeddings/index.tsx +++ /dev/null @@ -1,354 +0,0 @@ -import { useState } from 'react'; -import { - StyleSheet, - Text, - TextInput, - TouchableOpacity, - View, - SafeAreaView, - ScrollView, - Image, - KeyboardAvoidingView, - Platform, -} from 'react-native'; -import { Ionicons } from '@expo/vector-icons'; -import { - models, - useTextEmbeddings, - useImageEmbeddings, - ImageEmbeddingsProps, -} from 'react-native-executorch/legacy'; - -type ImageEmbeddingModel = ImageEmbeddingsProps['model']; - -const IMAGE_MODELS: { label: string; value: ImageEmbeddingModel }[] = [ - { - label: 'ViT-B/32 Quantized', - value: models.image_embedding.clip_vit_base_patch32_image(), - }, - { - label: 'ViT-B/32 FP32', - value: models.image_embedding.clip_vit_base_patch32_image({ - quant: false, - }), - }, -]; -import { launchImageLibrary } from 'react-native-image-picker'; -import { useIsFocused } from 'expo-router'; -import { dotProduct } from '../../utils/math'; -import { ModelPicker } from '../../components/ModelPicker'; - -const DEFAULT_LABELS = [ - 'a photo of a dog', - 'a photo of a cat', - 'a landscape photo', - 'a photo of food', - 'a photo of people', -]; - -export default function ClipEmbeddingsScreenWrapper() { - const isFocused = useIsFocused(); - - return isFocused ? : null; -} - -function ClipEmbeddingsScreen() { - const [selectedImageModel, setSelectedImageModel] = useState( - models.image_embedding.clip_vit_base_patch32_image() - ); - - const textModel = useTextEmbeddings({ - model: models.text_embedding.clip_vit_base_patch32_text(), - }); - const imageModel = useImageEmbeddings({ model: selectedImageModel }); - - const [imageUri, setImageUri] = useState(null); - const [newLabel, setNewLabel] = useState(''); - const [labels, setLabels] = useState(DEFAULT_LABELS); - const [results, setResults] = useState<{ label: string; similarity: number }[]>([]); - const [imageEmbeddingTime, setImageEmbeddingTime] = useState(null); - const [textEmbeddingTime, setTextEmbeddingTime] = useState(null); - - const getModelStatusText = (model: typeof textModel | typeof imageModel) => { - if (model.error) return `Oops! ${model.error}`; - if (!model.isReady) return `Loading ${(model.downloadProgress * 100).toFixed(0)}%`; - return model.isGenerating ? 'Generating…' : 'Ready'; - }; - - const pickImage = async () => { - const output = await launchImageLibrary({ mediaType: 'photo' }); - if (!output.assets?.[0]?.uri) return; - setImageUri(output.assets[0].uri); - setResults([]); - }; - - const classify = async () => { - if (!imageUri || !imageModel.isReady || !textModel.isReady) return; - - try { - const imgStart = Date.now(); - const imageEmbedding = await imageModel.forward(imageUri); - setImageEmbeddingTime(Date.now() - imgStart); - - const txtStart = Date.now(); - const scored: { label: string; similarity: number }[] = []; - for (const label of labels) { - const textEmbedding = await textModel.forward(label); - scored.push({ - label, - similarity: dotProduct(imageEmbedding, textEmbedding), - }); - } - setTextEmbeddingTime(Math.round((Date.now() - txtStart) / labels.length)); - - scored.sort((a, b) => b.similarity - a.similarity); - setResults(scored); - } catch (e) { - console.error('Error during classification:', e); - } - }; - - const addLabel = () => { - const trimmed = newLabel.trim(); - if (!trimmed || labels.includes(trimmed)) return; - setLabels((prev) => [...prev, trimmed]); - setNewLabel(''); - setResults([]); - }; - - const removeLabel = (label: string) => { - setLabels((prev) => prev.filter((l) => l !== label)); - setResults((prev) => prev.filter((r) => r.label !== label)); - }; - - const modelsReady = textModel.isReady && imageModel.isReady; - - return ( - - - - CLIP Image Embeddings - - - Text model: {getModelStatusText(textModel)} - Image model: {getModelStatusText(imageModel)} - - - { - setSelectedImageModel(m); - setResults([]); - }} - /> - - {/* Image picker */} - - {imageUri ? ( - - ) : ( - - - Tap to pick an image - - )} - - - {/* Classify button */} - - - - {!imageUri ? 'Pick an image first' : 'Find best matching label'} - - - - {/* Results */} - {results.length > 0 && ( - - Results - {results.map((item, index) => ( - - - {index === 0 ? '🥇 ' : ''} - {item.label} - - {item.similarity.toFixed(3)} - - ))} - {(imageEmbeddingTime !== null || textEmbeddingTime !== null) && ( - - {imageEmbeddingTime !== null && ( - Image embedding: {imageEmbeddingTime} ms - )} - {textEmbeddingTime !== null && ( - Text embeddings: {textEmbeddingTime} ms - )} - - )} - - )} - - {/* Labels */} - - Text Labels - {labels.map((label) => ( - - {label} - removeLabel(label)}> - - - - ))} - - - - - - - - - - - ); -} - -const styles = StyleSheet.create({ - container: { flex: 1, backgroundColor: '#F8FAFC' }, - flex: { flex: 1 }, - scrollContainer: { padding: 20, alignItems: 'center', flexGrow: 1 }, - heading: { - fontSize: 24, - fontWeight: '500', - marginBottom: 12, - color: '#0F172A', - }, - statusRow: { - width: '100%', - marginBottom: 16, - gap: 2, - }, - statusText: { fontSize: 13, color: '#64748B' }, - imagePicker: { - width: '100%', - height: 220, - borderRadius: 16, - overflow: 'hidden', - marginBottom: 20, - borderWidth: 2, - borderColor: '#E2E8F0', - backgroundColor: '#fff', - }, - image: { width: '100%', height: '100%' }, - imagePlaceholder: { - flex: 1, - alignItems: 'center', - justifyContent: 'center', - gap: 8, - }, - imagePlaceholderText: { fontSize: 14, color: '#94A3B8' }, - card: { - backgroundColor: '#FFFFFF', - width: '100%', - padding: 16, - borderRadius: 16, - borderColor: '#E2E8F0', - borderWidth: 2, - marginBottom: 20, - }, - sectionTitle: { - fontSize: 16, - fontWeight: '600', - marginBottom: 12, - color: '#1E293B', - }, - labelRow: { - flexDirection: 'row', - alignItems: 'center', - justifyContent: 'space-between', - paddingVertical: 6, - borderBottomWidth: 1, - borderBottomColor: '#F1F5F9', - }, - labelText: { fontSize: 14, color: '#334155', flex: 1 }, - addLabelRow: { - flexDirection: 'row', - alignItems: 'center', - gap: 8, - marginTop: 12, - }, - input: { - flex: 1, - backgroundColor: '#F1F5F9', - borderRadius: 10, - padding: 10, - fontSize: 14, - color: '#0F172A', - }, - addButton: { - backgroundColor: 'navy', - borderRadius: 10, - width: 40, - height: 40, - alignItems: 'center', - justifyContent: 'center', - }, - classifyButton: { - width: '100%', - backgroundColor: 'navy', - padding: 14, - borderRadius: 12, - flexDirection: 'row', - alignItems: 'center', - justifyContent: 'center', - gap: 8, - marginBottom: 20, - }, - classifyButtonText: { color: 'white', fontWeight: '600', fontSize: 15 }, - buttonDisabled: { backgroundColor: '#f0f0f0', borderColor: '#d3d3d3' }, - buttonTextDisabled: { color: 'gray' }, - resultRow: { - flexDirection: 'row', - justifyContent: 'space-between', - alignItems: 'center', - paddingVertical: 6, - borderBottomWidth: 1, - borderBottomColor: '#F1F5F9', - }, - resultLabel: { fontSize: 14, color: '#334155', flex: 1 }, - topResultLabel: { fontWeight: '700', color: '#0F172A' }, - resultScore: { fontSize: 13, color: '#64748B', marginLeft: 8 }, - statsContainer: { marginTop: 12, gap: 2 }, - statsText: { fontSize: 12, color: '#94A3B8' }, -}); diff --git a/apps/legacy/text-embeddings/app/index.tsx b/apps/legacy/text-embeddings/app/index.tsx deleted file mode 100644 index 320fcfebf9..0000000000 --- a/apps/legacy/text-embeddings/app/index.tsx +++ /dev/null @@ -1,63 +0,0 @@ -import { useRouter } from 'expo-router'; -import { View, Text, StyleSheet, TouchableOpacity } from 'react-native'; -import ColorPalette from '../colors'; -import ExecutorchLogo from '../assets/executorch.svg'; - -export default function Home() { - const router = useRouter(); - - return ( - - - Select a demo model - - router.navigate('text-embeddings/')}> - Text embeddings - - router.navigate('clip-embeddings/')}> - Clip embeddings - - - - ); -} - -export const fontSizes = { - xxl: 34, - xl: 22, - lg: 18, - md: 16, - sm: 14, - xs: 12, - xxs: 10, -}; - -const styles = StyleSheet.create({ - container: { - flex: 1, - justifyContent: 'center', - alignItems: 'center', - backgroundColor: '#fff', - }, - headerText: { - fontSize: fontSizes.lg, - color: ColorPalette.strongPrimary, - margin: 20, - }, - buttonContainer: { - width: '80%', - justifyContent: 'space-evenly', - marginBottom: 20, - }, - button: { - backgroundColor: ColorPalette.strongPrimary, - borderRadius: 8, - padding: 10, - alignItems: 'center', - marginBottom: 10, - }, - buttonText: { - color: 'white', - fontSize: fontSizes.md, - }, -}); diff --git a/apps/legacy/text-embeddings/app/text-embeddings/index.tsx b/apps/legacy/text-embeddings/app/text-embeddings/index.tsx deleted file mode 100644 index 958b828455..0000000000 --- a/apps/legacy/text-embeddings/app/text-embeddings/index.tsx +++ /dev/null @@ -1,364 +0,0 @@ -import { useEffect, useState } from 'react'; -import { - StyleSheet, - Text, - TextInput, - TouchableOpacity, - View, - SafeAreaView, - ScrollView, - KeyboardAvoidingView, - Platform, -} from 'react-native'; -import { Ionicons } from '@expo/vector-icons'; -import { ModelPicker } from '../../components/ModelPicker'; -import { models, useTextEmbeddings, TextEmbeddingsProps } from 'react-native-executorch/legacy'; -const textEmbedding = models.text_embedding; - -type TextEmbeddingModel = TextEmbeddingsProps['model']; - -const MODELS: { label: string; value: TextEmbeddingModel }[] = [ - { label: 'MiniLM L6', value: textEmbedding.all_minilm_l6_v2() }, - { - label: 'MPNet Base', - value: textEmbedding.all_mpnet_base_v2(), - }, - { - label: 'MultiQA MiniLM', - value: textEmbedding.multi_qa_minilm_l6_cos_v1(), - }, - { - label: 'MultiQA MPNet', - value: textEmbedding.multi_qa_mpnet_base_dot_v1(), - }, - { - label: 'Multilingual DistilUSE', - value: textEmbedding.distiluse_base_multilingual_cased_v2(), - }, - { - label: 'Multilingual Paraphrase', - value: textEmbedding.paraphrase_multilingual_minilm_l12_v2(), - }, -]; -import { useIsFocused } from 'expo-router'; -import { dotProduct } from '../../utils/math'; -import ErrorBanner from '../../components/ErrorBanner'; - -export default function TextEmbeddingsScreenWrapper() { - const isFocused = useIsFocused(); - - return isFocused ? : null; -} - -function TextEmbeddingsScreen() { - const [selectedModel, setSelectedModel] = useState( - textEmbedding.all_minilm_l6_v2() - ); - const model = useTextEmbeddings({ model: selectedModel }); - const [error, setError] = useState(null); - - const [inputSentence, setInputSentence] = useState(''); - const [sentencesWithEmbeddings, setSentencesWithEmbeddings] = useState< - { sentence: string; embedding: Float32Array }[] - >([]); - const [topMatches, setTopMatches] = useState<{ sentence: string; similarity: number }[]>([]); - const [embeddingTime, setEmbeddingTime] = useState(null); - - useEffect( - () => { - const computeEmbeddings = async () => { - if (!model.isReady) return; - - const sentences = [ - 'The weather is lovely today.', - "It's so sunny outside!", - 'He drove to the stadium.', - ]; - - try { - const embeddings = []; - for (const sentence of sentences) { - const embedding = await model.forward(sentence); - embeddings.push({ sentence, embedding }); - } - - setSentencesWithEmbeddings(embeddings); - } catch (e) { - setError(e instanceof Error ? e.message : String(e)); - } - }; - - computeEmbeddings(); - }, - // eslint-disable-next-line react-hooks/exhaustive-deps - [model.isReady] - ); - - const checkSimilarities = async () => { - if (!model.isReady || !inputSentence.trim()) return; - - try { - const start = Date.now(); - const inputEmbedding = await model.forward(inputSentence); - setEmbeddingTime(Date.now() - start); - const matches = sentencesWithEmbeddings.map(({ sentence, embedding }) => ({ - sentence, - similarity: dotProduct(inputEmbedding, embedding), - })); - matches.sort((a, b) => b.similarity - a.similarity); - setTopMatches(matches.slice(0, 3)); - } catch (e) { - setError(e instanceof Error ? e.message : String(e)); - } - }; - - const addToSentences = async () => { - if (!model.isReady || !inputSentence.trim()) return; - - try { - const start = Date.now(); - const embedding = await model.forward(inputSentence); - setEmbeddingTime(Date.now() - start); - setSentencesWithEmbeddings((prev) => [...prev, { sentence: inputSentence, embedding }]); - } catch (e) { - setError(e instanceof Error ? e.message : String(e)); - } - - setInputSentence(''); - setTopMatches([]); - }; - - const clearList = async () => { - if (!model.isReady) return; - try { - setSentencesWithEmbeddings([]); - } catch (e) { - setError(e instanceof Error ? e.message : String(e)); - } - }; - - const getModelStatusText = () => { - if (model.error) { - return `Oops! Error: ${model.error}`; - } - if (!model.isReady) { - return `Loading model ${(model.downloadProgress * 100).toFixed(2)}%`; - } - return model.isGenerating ? 'Generating...' : 'Model is ready'; - }; - - return ( - - - - Text Embeddings Playground - {getModelStatusText()} - { - setSelectedModel(m); - setSentencesWithEmbeddings([]); - setTopMatches([]); - }} - /> - setError(null)} /> - - - List of Existing Sentences - {sentencesWithEmbeddings.map((item, index) => ( - - - {item.sentence} - - ))} - - - Try Your Sentence - - - - - - Find Similar - - - - - - - Add to List - - - - - - Clear List - - - - - {embeddingTime !== null && ( - Embedding time: {embeddingTime} ms - )} - {topMatches.length > 0 && ( - - Top Matches - {topMatches.map((item, index) => ( - - {item.sentence} ({item.similarity.toFixed(2)}) - - ))} - - )} - - - - - ); -} - -const styles = StyleSheet.create({ - container: { - flex: 1, - backgroundColor: '#F8FAFC', - }, - scrollContainer: { - padding: 20, - alignItems: 'center', - flexGrow: 1, - }, - heading: { - fontSize: 24, - fontWeight: '500', - marginBottom: 20, - color: '#0F172A', - }, - card: { - backgroundColor: '#FFFFFF', - width: '100%', - padding: 16, - borderRadius: 16, - borderColor: '#E2E8F0', - borderWidth: 2, - marginBottom: 20, - }, - sectionTitle: { - fontSize: 18, - fontWeight: '500', - marginBottom: 12, - color: '#1E293B', - }, - sentenceText: { - fontSize: 14, - marginBottom: 6, - color: '#334155', - }, - input: { - backgroundColor: '#F1F5F9', - borderRadius: 10, - padding: 10, - marginBottom: 10, - fontSize: 16, - color: '#0F172A', - minHeight: 40, - textAlignVertical: 'top', - }, - buttonContainer: { - width: '100%', - gap: 10, - }, - buttonGroup: { - flexDirection: 'row', - justifyContent: 'space-between', - gap: 10, - }, - buttonPrimary: { - flex: 1, - backgroundColor: 'navy', - padding: 12, - borderRadius: 10, - flexDirection: 'row', - alignItems: 'center', - justifyContent: 'center', - }, - buttonSecondary: { - flex: 1, - backgroundColor: 'transparent', - borderWidth: 2, - borderColor: 'navy', - padding: 12, - borderRadius: 10, - flexDirection: 'row', - alignItems: 'center', - justifyContent: 'center', - }, - buttonDisabled: { - backgroundColor: '#f0f0f0', - borderColor: '#d3d3d3', - }, - buttonText: { - color: 'white', - textAlign: 'center', - fontWeight: '500', - }, - buttonTextOutline: { - color: 'navy', - textAlign: 'center', - fontWeight: '500', - }, - buttonTextDisabled: { - color: 'gray', - }, - topMatchesContainer: { - marginTop: 20, - }, - statsText: { - fontSize: 13, - color: '#64748B', - marginTop: 8, - textAlign: 'center', - }, - flexContainer: { - flex: 1, - }, -}); diff --git a/apps/legacy/text-embeddings/assets/adaptive-icon.png b/apps/legacy/text-embeddings/assets/adaptive-icon.png deleted file mode 100644 index 03d6f6b6c6727954aec1d8206222769afd178d8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17547 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 - - - - - - - - diff --git a/apps/legacy/text-embeddings/assets/favicon.png b/apps/legacy/text-embeddings/assets/favicon.png deleted file mode 100644 index e75f697b1801871ad8cd9309b05e8ffe8c6b6d01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1466 zcmV;r1x5OaP)F>1w{Y zBeHf{*q3<2*AtQf4s&-m0MsH$EBv51Nj=s=Appw|nd1Yi(-DKZBN$9bAlWN83A_)0 z$4U=S!XyBuAm(`t#aW=l*tHPgHRE~MrmzGWN*Eidc=$BV2uYe|Rpi@t-me&ht6I?| ze$M(9=%DxSVTwNL7B*O`z`fRE$T)18O{B^J5OHo#W%kD-}gAcJO3n1x6Q{X*TFh-d!yx?Z$G16f%*K?exQ+p ztyb%4*R_Y=)qQBLG-9hc_A|ub$th|8Sk1bi@fFe$DwUpU57nc*-z8<&dM#e3a2hB! z16wLhz7o)!MC8}$7Jv9c-X$w^Xr(M9+`Py)~O3rGmgbvjOzXjGl>h9lp*QEn%coj{`wU^_3U|=B`xxU;X3K1L?JT?0?+@K!|MWVr zmC=;rjX@CoW3kMZA^8ZAy52^R{+-YG!J5q^YP&$t9F`&J8*KzV4t3ZZZJ>~XP7}Bs z<}$a~2r_E?4rlN=(}RBkF~6rBo}Sz7#r{X49&!gODP+TcB*@uq57EII-_>qWEt44B z`5o+tysMLY*Dq^n@4_vzKRu3We5|DI+i%NV=Z|)QAl{di_@%07*qoM6N<$f(5Fv<^TWy diff --git a/apps/legacy/text-embeddings/assets/icon.png b/apps/legacy/text-embeddings/assets/icon.png deleted file mode 100644 index a0b1526fc7b78680fd8d733dbc6113e1af695487..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22380 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 diff --git a/apps/legacy/text-embeddings/assets/splash-icon.png b/apps/legacy/text-embeddings/assets/splash-icon.png deleted file mode 100644 index 03d6f6b6c6727954aec1d8206222769afd178d8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17547 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 void; -} - -export default function ErrorBanner({ message, onDismiss }: ErrorBannerProps) { - if (!message) return null; - - return ( - - - {message} - - - ✕ - - - ); -} - -const styles = StyleSheet.create({ - container: { - backgroundColor: '#FEE2E2', - borderLeftWidth: 4, - borderLeftColor: '#EF4444', - borderRadius: 8, - marginHorizontal: 16, - marginVertical: 8, - paddingVertical: 10, - paddingLeft: 12, - paddingRight: 8, - flexDirection: 'row', - alignItems: 'center', - }, - message: { - flex: 1, - color: '#991B1B', - fontSize: 14, - lineHeight: 20, - }, - closeButton: { - padding: 4, - marginLeft: 8, - }, - closeText: { - color: '#991B1B', - fontSize: 16, - fontWeight: '600', - }, -}); diff --git a/apps/legacy/text-embeddings/components/ModelPicker.tsx b/apps/legacy/text-embeddings/components/ModelPicker.tsx deleted file mode 100644 index 9a81bec371..0000000000 --- a/apps/legacy/text-embeddings/components/ModelPicker.tsx +++ /dev/null @@ -1,198 +0,0 @@ -import React, { useEffect, useRef, useState } from 'react'; -import { - Dimensions, - Modal, - ScrollView, - StyleSheet, - Text, - TouchableOpacity, - View, -} from 'react-native'; - -export type ModelOption = { - label: string; - value: T; -}; - -type Props = { - models: ModelOption[]; - selectedModel: T; - onSelect: (model: T) => void; - label?: string; - disabled?: boolean; -}; - -const DROPDOWN_MAX_HEIGHT = 200; - -export function ModelPicker({ models, selectedModel, onSelect, label, disabled }: Props) { - const [open, setOpen] = useState(false); - const [triggerHeight, setTriggerHeight] = useState(0); - const [expandUp, setExpandUp] = useState(false); - const [dropdownTop, setDropdownTop] = useState(0); - const triggerRef = useRef>(null); - const selected = models.find((m) => m.value === selectedModel); - - useEffect(() => { - if (disabled) setOpen(false); - }, [disabled]); - - const handlePress = () => { - if (disabled) return; - if (open) { - setOpen(false); - return; - } - triggerRef.current?.measure( - (_x: number, _y: number, _width: number, height: number, _pageX: number, pageY: number) => { - setTriggerHeight(height); - const spaceBelow = Dimensions.get('window').height - (pageY + height); - setExpandUp(spaceBelow < DROPDOWN_MAX_HEIGHT); - setDropdownTop(pageY); - setOpen(true); - } - ); - }; - - const dropdownStylePosition = expandUp - ? { - bottom: Dimensions.get('window').height - dropdownTop, - left: 12, - right: 12, - } - : { - top: dropdownTop + triggerHeight + 2, - left: 12, - right: 12, - }; - - return ( - <> - - - {label && {label}} - {selected?.label ?? '—'} - {open ? '▲' : '▼'} - - - - {open && ( - setOpen(false)} - animationType="none" - > - setOpen(false)} - /> - - - {models.map((item) => { - const isSelected = item.value === selectedModel; - return ( - { - onSelect(item.value); - setOpen(false); - }} - activeOpacity={0.7} - > - - {item.label} - - - ); - })} - - - - )} - - ); -} - -const styles = StyleSheet.create({ - container: { - marginHorizontal: 12, - marginVertical: 4, - alignSelf: 'stretch', - zIndex: 100, - }, - trigger: { - flexDirection: 'row', - alignItems: 'center', - borderWidth: 1, - borderColor: '#C1C6E5', - borderRadius: 8, - paddingHorizontal: 12, - paddingVertical: 10, - backgroundColor: '#f5f5f5', - }, - triggerDisabled: { - opacity: 0.4, - }, - label: { - fontSize: 12, - color: '#888', - marginRight: 6, - }, - triggerText: { - flex: 1, - fontSize: 14, - color: '#001A72', - fontWeight: '500', - }, - chevron: { - fontSize: 10, - color: '#888', - marginLeft: 6, - }, - modalBackdrop: { - flex: 1, - backgroundColor: 'rgba(0, 0, 0, 0.3)', - }, - dropdown: { - position: 'absolute', - borderWidth: 1, - borderColor: '#C1C6E5', - borderRadius: 8, - backgroundColor: '#fff', - maxHeight: DROPDOWN_MAX_HEIGHT, - zIndex: 1000, - elevation: 5, - shadowColor: '#000', - shadowOffset: { width: 0, height: 4 }, - shadowOpacity: 0.15, - shadowRadius: 6, - }, - option: { - paddingHorizontal: 12, - paddingVertical: 10, - borderBottomWidth: 1, - borderBottomColor: '#f0f0f0', - }, - optionSelected: { - backgroundColor: '#e8ecf8', - }, - optionText: { - fontSize: 14, - color: '#333', - }, - optionTextSelected: { - color: '#001A72', - fontWeight: '600', - }, -}); diff --git a/apps/legacy/text-embeddings/context.ts b/apps/legacy/text-embeddings/context.ts deleted file mode 100644 index 0eb0560768..0000000000 --- a/apps/legacy/text-embeddings/context.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { createContext } from 'react'; - -export const GeneratingContext = createContext({ - setGlobalGenerating: (_newState: boolean) => {}, -}); diff --git a/apps/legacy/text-embeddings/declarations.d.ts b/apps/legacy/text-embeddings/declarations.d.ts deleted file mode 100644 index 85e178f497..0000000000 --- a/apps/legacy/text-embeddings/declarations.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -declare module '*.svg' { - import { SvgProps } from 'react-native-svg'; - const content: React.FV; - export default content; -} diff --git a/apps/legacy/text-embeddings/index.ts b/apps/legacy/text-embeddings/index.ts deleted file mode 100644 index 3f443dcf95..0000000000 --- a/apps/legacy/text-embeddings/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { registerRootComponent } from 'expo'; - -import App from './app'; - -// registerRootComponent calls AppRegistry.registerComponent('main', () => App); -// It also ensures that whether you load the app in Expo Go or in a native build, -// the environment is set up appropriately -registerRootComponent(App); diff --git a/apps/legacy/text-embeddings/metro.config.js b/apps/legacy/text-embeddings/metro.config.js deleted file mode 100644 index f8ab2ab96d..0000000000 --- a/apps/legacy/text-embeddings/metro.config.js +++ /dev/null @@ -1,21 +0,0 @@ -// Learn more https://docs.expo.io/guides/customizing-metro -const { getDefaultConfig } = require('expo/metro-config'); - -/** @type {import('expo/metro-config').MetroConfig} */ -const config = getDefaultConfig(__dirname); - -const { transformer, resolver } = config; - -config.transformer = { - ...transformer, - babelTransformerPath: require.resolve('react-native-svg-transformer/expo'), -}; -config.resolver = { - ...resolver, - assetExts: resolver.assetExts.filter((ext) => ext !== 'svg'), - sourceExts: [...resolver.sourceExts, 'svg'], -}; - -config.resolver.assetExts.push('pte'); - -module.exports = config; diff --git a/apps/legacy/text-embeddings/package.json b/apps/legacy/text-embeddings/package.json deleted file mode 100644 index d26de3d022..0000000000 --- a/apps/legacy/text-embeddings/package.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "name": "legacy-text-embeddings", - "version": "1.0.0", - "main": "expo-router/entry", - "scripts": { - "start": "expo start", - "android": "expo run:android", - "ios": "expo run:ios", - "web": "expo start --web", - "typecheck": "tsc", - "lint": "eslint . --ext .ts,.tsx --fix" - }, - "dependencies": { - "@expo/log-box": "~56.0.12", - "@expo/vector-icons": "^15.0.2", - "@react-native/metro-config": "^0.86.0", - "@react-navigation/drawer": "^7.9.4", - "@react-navigation/native": "^7.2.2", - "expo": "~57.0.28", - "expo-build-properties": "~57.0.22", - "expo-constants": "~57.0.21", - "expo-font": "~57.0.4", - "expo-linking": "~57.0.12", - "expo-router": "~57.0.26", - "expo-status-bar": "~57.0.1", - "react": "19.2.3", - "react-native": "0.86.3", - "react-native-executorch": "workspace:*", - "react-native-executorch-expo-resource-fetcher": "workspace:*", - "react-native-gesture-handler": "~2.32.0", - "react-native-image-picker": "^8.2.1", - "react-native-reanimated": "4.7.1", - "react-native-safe-area-context": "~5.7.0", - "react-native-screens": "~4.26.0", - "react-native-svg": "15.15.4", - "react-native-worklets": "0.13.0" - }, - "devDependencies": { - "@babel/core": "^7.29.7", - "@types/react": "~19.2.14", - "@types/react-refresh": "^0", - "babel-preset-expo": "~57.0.15", - "react-refresh": "^0.18.0" - }, - "private": true -} diff --git a/apps/legacy/text-embeddings/tsconfig.json b/apps/legacy/text-embeddings/tsconfig.json deleted file mode 100644 index 1063e3da3b..0000000000 --- a/apps/legacy/text-embeddings/tsconfig.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "compilerOptions": { - "allowJs": true, - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "jsx": "react-native", - "lib": ["es2022"], - "moduleResolution": "bundler", - "noEmit": true, - "resolveJsonModule": true, - "skipLibCheck": true, - "strict": true, - "target": "esnext", - "paths": { - "react-native-executorch/legacy": ["../../packages/react-native-executorch/legacy/src"], - "react-native-executorch-expo-resource-fetcher": ["../../packages/expo-resource-fetcher"] - } - }, - "include": ["**/*.ts", "**/*.tsx"], - "exclude": ["**/node_modules", "**/Pods", "**/__tests__"] -} diff --git a/apps/legacy/text-embeddings/utils/math.ts b/apps/legacy/text-embeddings/utils/math.ts deleted file mode 100644 index 35816e6681..0000000000 --- a/apps/legacy/text-embeddings/utils/math.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { RnExecutorchError, RnExecutorchErrorCode } from 'react-native-executorch/legacy'; - -export const dotProduct = (a: Float32Array, b: Float32Array) => { - if (a.length !== b.length) { - throw new RnExecutorchError( - RnExecutorchErrorCode.WrongDimensions, - `dotProduct needs both vector to have the same length: got a: ${a.length}, b: ${b.length}` - ); - } - - let sum = 0; - for (let i = 0; i < a.length; i++) { - sum += a[i] * b[i]; - } - return sum; -}; diff --git a/docs/docs/01-fundamentals/03-migrating-from-v0-9.md b/docs/docs/01-fundamentals/03-migrating-from-v0-9.md index 9986ed86df..ee067abdbb 100644 --- a/docs/docs/01-fundamentals/03-migrating-from-v0-9.md +++ b/docs/docs/01-fundamentals/03-migrating-from-v0-9.md @@ -2,16 +2,7 @@ title: Migrating from v0.9.x slug: /fundamentals/migrating-from-v0-9 description: 'Step-by-step migration guide from legacy v0.9.x to the new v0.10.0 architecture in React Native ExecuTorch.' -keywords: - [ - react native, - react native ai, - executorch, - migration guide, - v0.10, - legacy api, - react-native-executorch/legacy, - ] +keywords: [react native, react native ai, executorch, migration guide, v0.10, legacy api] --- import Tabs from '@theme/Tabs'; @@ -28,43 +19,10 @@ While the new API is not backwards-compatible with v0.9.x, the library provides **100% functional parity**: every single task, model, and capability supported in v0.9.x is supported in v0.10.0, alongside numerous new models and features. -To ensure your existing applications continue to function without requiring an -immediate code overhaul, v0.10.0 ships the complete pre-0.10 implementation under -a dedicated legacy entry point: `'react-native-executorch/legacy'`. +The legacy compatibility entry point has been removed. Applications upgrading +from v0.9.x must migrate to the new API. -## Upgrading Paths - -When updating to `0.10.x`, you have two ways forward: - -### Option A: The Legacy Compatibility Module (`/legacy`) - -We did not want to break existing applications overnight with an abrupt, all-or-nothing -upgrade. To support a **gradual refactoring process**, we preserved the entire v0.9.x API -under a dedicated legacy subpath. You can update your package version right away and -transition individual screens or pipelines to the new v0.10 architecture at your own pace. - -To keep existing code working, simply update your imports to point to `'react-native-executorch/legacy'`: - -```typescript -// Before (v0.9.x) -import { initExecutorch, useClassification, models } from 'react-native-executorch'; - -// After (v0.10.0 legacy compatibility) -import { initExecutorch, useClassification, models } from 'react-native-executorch/legacy'; -``` - -All previous hooks, modules (`ClassificationModule`, `LLMModule`, etc.), options, -and types will continue to function exactly as they did in v0.9.x. Both the legacy and -new APIs can even coexist in the same project while you migrate component by component. - -:::caution Legacy Deprecation -The legacy API is deprecated and will be removed in a future release. We -recommend using this entry point as a temporary stepping stone to migrate to the -new v0.10 API incrementally. Refer to the [v0.10.0-legacy archived documentation](/react-native-executorch/docs/0.10.0-legacy/fundamentals/getting-started) -for legacy reference. -::: - -### Option B: Migrating to the New v0.10 Architecture +## Migrating to the New Architecture Migrating to the new v0.10 API gives you access to transparent pipelines, deterministic memory management, worklet-safe thread dispatch, and lower-level @@ -72,10 +30,6 @@ runtime primitives. ## Dependencies -The peer dependencies required by your application depend on which API you use: - -### For the New v0.10 API - In v0.10, resource fetching and threading have been built directly into the core runtime: @@ -126,17 +80,6 @@ pnpm add react-native-executorch react-native-worklets react-native-blob-util -### For the Legacy API (`react-native-executorch/legacy`) - -If you remain on `'react-native-executorch/legacy'`, you must keep your existing -fetcher adapter package: - -- Bare React Native: `@software-mansion/react-native-executorch-bare-resource-fetcher` -- Expo: `@software-mansion/react-native-executorch-expo-resource-fetcher` - -You must also continue calling `initExecutorch({ resourceFetcher: ... })` at the -root of your application before using any legacy modules. - ## Old vs. New: What Changed and Why React Native ExecuTorch v0.10 achieves **100% functional parity** with v0.9: every computer @@ -213,8 +156,7 @@ However, the internal mechanics and Developer Experience have been fundamentally the app binary, inflating application size regardless of which tasks were used. - **In v0.10**: Native libraries and hardware backends are now downloaded on demand at install time and can be selectively filtered through the `react-native-executorch` block in your - `package.json`. This optimization benefits all applications upgrading to v0.10, even those - temporarily using the legacy compatibility entry point (`react-native-executorch/legacy`). + `package.json`. This optimization benefits all applications using the new API. See [Native Libraries](../03-core-and-advanced/08-native-libraries.md). ## Next Steps diff --git a/docs/docs/03-core-and-advanced/08-native-libraries.md b/docs/docs/03-core-and-advanced/08-native-libraries.md index 74fc42bb54..d2419a28c7 100644 --- a/docs/docs/03-core-and-advanced/08-native-libraries.md +++ b/docs/docs/03-core-and-advanced/08-native-libraries.md @@ -95,7 +95,7 @@ Specifying a task under `features` is shorthand: it automatically expands to the | `classification` | xnnpack, coreml | opencv | | `depthEstimation` | xnnpack, coreml, vulkan | opencv | | `objectDetection` | xnnpack, coreml, vulkan | opencv | -| `keypointDetection` | xnnpack, coreml, mlx, vulkan | opencv | +| `keypointDetection` | xnnpack, coreml, vulkan | opencv | | `semanticSegmentation` | xnnpack, coreml | opencv | | `instanceSegmentation` | xnnpack, coreml, vulkan | opencv | | `ocr` | xnnpack, coreml, vulkan | opencv | diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index aac31cab85..cf8621ec5b 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -35,13 +35,6 @@ const config = { sidebarCollapsible: false, editUrl: 'https://github.com/software-mansion/react-native-executorch/edit/main/docs', lastVersion: '0.11.x', - versions: { - // === LEGACY SUPPORT ===: versioned docs for the legacy API (remove when legacy API is dropped) - '0.10.0-legacy': { - label: '0.10.0-legacy', - banner: 'unmaintained', - }, - }, }, theme: { customCss: require.resolve('./src/css/index.css'), diff --git a/docs/versioned_docs/version-0.10.0-legacy/01-fundamentals/01-getting-started.md b/docs/versioned_docs/version-0.10.0-legacy/01-fundamentals/01-getting-started.md deleted file mode 100644 index f893aea074..0000000000 --- a/docs/versioned_docs/version-0.10.0-legacy/01-fundamentals/01-getting-started.md +++ /dev/null @@ -1,224 +0,0 @@ ---- -title: Getting Started -slug: /fundamentals/getting-started -keywords: - [ - react native, - react native ai, - react native llm, - react native qwen, - react native llama, - react native executorch, - executorch, - on-device ai, - pytorch, - mobile ai, - ] -description: 'Get started with React Native ExecuTorch - a framework for running AI models on-device in your React Native applications.' ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -:::caution Legacy API Deprecation -The API documented here is the **legacy API** (`react-native-executorch/legacy`). Starting with version `0.10.0`, React Native ExecuTorch has been completely rewritten with a new modular architecture, simplified hooks, unified resource fetching, and significantly better performance. - -- To use this legacy API, you must import from `'react-native-executorch/legacy'` (e.g. `import { initExecutorch, models } from 'react-native-executorch/legacy'`). -- This legacy API is deprecated and will be removed in a future release. -- We strongly recommend migrating to the **[latest 0.10.0 documentation](../../fundamentals/getting-started)**. - ::: - -## What is ExecuTorch? - -[ExecuTorch](https://executorch.ai) is a novel AI framework developed by Meta, designed to streamline deploying PyTorch models on a variety of devices, including mobile phones and microcontrollers. This framework enables exporting models into standalone binaries, allowing them to run locally without requiring API calls. ExecuTorch achieves state-of-the-art performance through optimizations and delegates such as Core ML and XNNPACK. It provides a seamless export process with robust debugging options, making it easier to resolve issues if they arise. - -## React Native ExecuTorch - -React Native ExecuTorch is our way of bringing ExecuTorch into the React Native world. Our API is built to be simple, declarative, and efficient. Additionally, we provide a set of pre-exported models for common use cases, so you don't have to worry about handling exports yourself. With just a few lines of JavaScript, you can run AI models (even LLMs 👀) right on your device—keeping user data private and saving on cloud costs. - -## Compatibility - -React Native Executorch supports only the [New React Native architecture](https://reactnative.dev/architecture/landing-page). - -If your app still runs on the old architecture, please consider upgrading to the New Architecture. - -For supported React Native and Expo versions, see the [Compatibility table](../07-other/01-compatibility.mdx). - -## Installation - -Installation takes two steps: install the core package, then install a resource fetcher adapter that matches your project type. If you want to implement your own model fetching logic instead, see [this document](../08-resource-fetcher/02-custom-adapter.md). - -### 1. Install the core package - - - - - ```bash - npm install react-native-executorch - ``` - - - - - ```bash - pnpm add react-native-executorch - ``` - - - - - ```bash - yarn add react-native-executorch - ``` - - - - -### 2. Install a resource fetcher - -Pick the adapter that matches your project. We recommend the Expo adapter when your app uses Expo; use the bare adapter for projects without Expo. - -#### Expo projects - - - - - ```bash - npm install react-native-executorch-expo-resource-fetcher expo-file-system expo-asset - ``` - - - - - ```bash - pnpm add react-native-executorch-expo-resource-fetcher expo-file-system expo-asset - ``` - - - - - ```bash - yarn add react-native-executorch-expo-resource-fetcher expo-file-system expo-asset - ``` - - - - -#### Bare React Native projects - - - - - ```bash - npm install react-native-executorch-bare-resource-fetcher @dr.pogodin/react-native-fs @kesha-antonov/react-native-background-downloader - ``` - - - - - ```bash - pnpm add react-native-executorch-bare-resource-fetcher @dr.pogodin/react-native-fs @kesha-antonov/react-native-background-downloader - ``` - - - - - ```bash - yarn add react-native-executorch-bare-resource-fetcher @dr.pogodin/react-native-fs @kesha-antonov/react-native-background-downloader - ``` - - - - -:::warning -Before using any other API, you must call `initExecutorch` with a resource fetcher adapter at the entry point of your app: - -```js -import { initExecutorch } from 'react-native-executorch/legacy'; -import { ExpoResourceFetcher } from 'react-native-executorch-expo-resource-fetcher'; // Use /legacy import if you're using Expo SDK < 54 -// or BareResourceFetcher for bare react-native projects - -initExecutorch({ resourceFetcher: ExpoResourceFetcher }); -``` - -Calling any library API without initializing first will throw a `ResourceFetcherAdapterNotInitialized` error. -::: - -Our library offers support for both bare React Native and Expo projects. Please follow the instructions from [Loading models section](./02-loading-models.md) to make sure you setup your project correctly. We encourage you to use Expo project if possible. If you are planning to migrate from bare React Native to Expo project, the link (https://docs.expo.dev/bare/installing-expo-modules/) offers a guidance on setting up Expo Modules in a bare React Native environment. - -If you plan on using your models via require() instead of fetching them from a url, you also need to add following lines to your `metro.config.js`: - -```json -// metro.config.js -... - defaultConfig.resolver.assetExts.push('pte') - defaultConfig.resolver.assetExts.push('bin') -... -``` - -This allows us to use binaries, such as exported models or tokenizers for LLMs. - -:::warning -When using Expo, please note that you need to use a custom development build of your app, not the standard Expo Go app. This is because we rely on native modules, which Expo Go doesn’t support. -::: - -:::info -Because we are using ExecuTorch under the hood, you won't be able to build iOS app for release with simulator selected as the target device. Make sure to test release builds on real devices. -::: - -Running the app with the library: - - - - - ```bash - npm run -- -d - ``` - - - - - ```bash - pnpm -d - ``` - - - - - ```bash - yarn -d - ``` - - - - -## Building from source - -To build the library from source instead, clone the repository and initialize submodules: - -```bash -git clone -b release/0.9 https://github.com/software-mansion/react-native-executorch.git -cd react-native-executorch - -git submodule update --init --recursive packages/react-native-executorch/third-party/common - -yarn -``` - -## Supporting new models in React Native ExecuTorch - -Adding new functionality to the library follows a consistent three-step integration pipeline: - -1. **Model Serialization:** Export PyTorch model for a specific task (e.g. object detection) into the `*.pte` format, which is optimized for the ExecuTorch runtime. - -2. **Native Implementation:** Develop a C++ execution layer that interfaces with the ExecuTorch runtime to handle inference. This layer also manages model-dependent logic, such as data pre-processing and post-processing. - -3. **TS Bindings:** Finally, implement a TypeScript API that bridges the JavaScript environment to the native C++ logic, providing a clean, typed interface for the end user. - -## Good reads - -If you want to dive deeper into ExecuTorch or our previous work with the framework, we highly encourage you to check out the following resources: - -- [ExecuTorch docs](https://pytorch.org/executorch/stable/index.html) -- [React Native RAG](https://blog.swmansion.com/introducing-react-native-rag-fbb62efa4991) -- [Offline Text Recognition on Mobile: How We Brought EasyOCR to React Native ExecuTorch](https://blog.swmansion.com/bringing-easyocr-to-react-native-executorch-2401c09c2d0c) diff --git a/docs/versioned_docs/version-0.10.0-legacy/01-fundamentals/02-loading-models.md b/docs/versioned_docs/version-0.10.0-legacy/01-fundamentals/02-loading-models.md deleted file mode 100644 index 469c1ba81b..0000000000 --- a/docs/versioned_docs/version-0.10.0-legacy/01-fundamentals/02-loading-models.md +++ /dev/null @@ -1,133 +0,0 @@ ---- -title: Loading Models ---- - -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; - -There are three different methods available for loading model files, depending on their size and location. - -## Prerequisites - -In our library, you can use two different resource fetching mechanisms. One is implemented using Expo FileSystem, the other one uses external library. We encourage you to use implementation utilizing Expo if possible. - -To use the Expo adapter, please add these libraries: - - - - - ```bash - npm install react-native-executorch-expo-resource-fetcher expo-file-system expo-asset - ``` - - - - - ```bash - pnpm add react-native-executorch-expo-resource-fetcher expo-file-system expo-asset - ``` - - - - - ```bash - yarn add react-native-executorch-expo-resource-fetcher expo-file-system expo-asset - ``` - - - - -and then add the following code in your React Native app: - -```typescript -import { initExecutorch } from 'react-native-executorch/legacy'; -import { ExpoResourceFetcher } from 'react-native-executorch-expo-resource-fetcher'; // Use /legacy import if you're using Expo SDK < 54 - -initExecutorch({ - resourceFetcher: ExpoResourceFetcher, -}); -``` - -If you cannot use Expo in your project, proceed with the following steps: - - - - - ```bash - npm install react-native-executorch-bare-resource-fetcher @dr.pogodin/react-native-fs @kesha-antonov/react-native-background-downloader - ``` - - - - - ```bash - pnpm add react-native-executorch-bare-resource-fetcher @dr.pogodin/react-native-fs @kesha-antonov/react-native-background-downloader - ``` - - - - - ```bash - yarn add react-native-executorch-bare-resource-fetcher @dr.pogodin/react-native-fs @kesha-antonov/react-native-background-downloader - ``` - - - - -and - -```typescript -import { initExecutorch } from 'react-native-executorch/legacy'; -import { BareResourceFetcher } from 'react-native-executorch-bare-resource-fetcher'; - -initExecutorch({ - resourceFetcher: BareResourceFetcher, -}); -``` - -## Loading - -### Load from React Native assets folder (for files < 512MB) - -```typescript -useExecutorchModule({ - modelSource: require('../assets/lfm2_5.pte'), -}); -``` - -### Load from remote URL - -For files larger than 512MB or when you want to keep size of the app smaller, you can load the model from a remote URL (e.g. HuggingFace). - -```typescript -useExecutorchModule({ - modelSource: 'https://.../lfm2_5.pte', -}); -``` - -### Load from local file system - -If you prefer to delegate the process of obtaining and loading model and tokenizer files to the user, you can use the following method: - -```typescript -useExecutorchModule({ - modelSource: 'file:///var/mobile/.../lfm2_5.pte', -}); -``` - -:::note -The downloaded files are stored in documents directory of your application. -::: - -## Predefined Models - -Our library offers out-of-the-box support for multiple models. To make things easier, we created aliases for our model exported to `pte` format. For full list of aliases, check out: [API Reference](../06-api-reference/index.md#models---classification) - -## Example - -The following code snippet demonstrates how to load model and tokenizer files using `useLLM` hook: - -```typescript -import { models, useLLM } from 'react-native-executorch/legacy'; -const llm = useLLM({ model: models.llm.lfm2_5_1_2b_instruct() }); -``` diff --git a/docs/versioned_docs/version-0.10.0-legacy/01-fundamentals/03-frequently-asked-questions.md b/docs/versioned_docs/version-0.10.0-legacy/01-fundamentals/03-frequently-asked-questions.md deleted file mode 100644 index 69e3792d41..0000000000 --- a/docs/versioned_docs/version-0.10.0-legacy/01-fundamentals/03-frequently-asked-questions.md +++ /dev/null @@ -1,50 +0,0 @@ ---- -title: Frequently Asked Questions ---- - -This section is meant to answer some common community inquiries, especially regarding the ExecuTorch runtime or adding your own models. If you can't see an answer to your question, feel free to open up a [discussion](https://github.com/software-mansion/react-native-executorch/discussions/new/choose). - -### What models are supported? - -Each hook documentation subpage (useClassification, useLLM, etc.) contains a supported models section, which lists the models that are runnable within the library with close to no setup. For running your custom models, refer to `ExecuTorchModule` or `useExecuTorchModule`. - -### How can I run my own AI model? - -To run your own model, you need to directly access the underlying [ExecuTorch Module API](https://pytorch.org/executorch/stable/extension-module.html). We provide [React hook](../03-hooks/03-executorch-bindings/useExecutorchModule.md) along with a [TypeScript alternative](../04-typescript-api/03-executorch-bindings/ExecutorchModule.md), which serve as a way to use the aforementioned API without the need of diving into native code. In order to get a model in a format runnable by the runtime, you'll need to get your hands dirty with some ExecuTorch knowledge. For more guides on exporting models, please refer to the [ExecuTorch tutorials](https://pytorch.org/executorch/stable/tutorials/export-to-executorch-tutorial.html). Once you obtain your model in a `.pte` format, you can run it with `useExecuTorchModule` and `ExecuTorchModule`. - -### How React Native ExecuTorch works under the hood? - -The general workflow for each functionality in our library goes like this: - -- You call a functionality from TypeScript -- TypeScript calls C++ function like model inference or data processing via JSI -- C++ returns result to TypeScript back via JSI -- You get results in TypeScript - -Using JSI enables us using **zero-copy data transfer** and **fast, low-level C++**. - -### Can you do function calling with useLLM? - -If your model supports tool calling (i.e. its chat template can process tools) you can use the method explained on the [useLLM page](../03-hooks/01-natural-language-processing/useLLM.md). - -If your model doesn't support it, you can still work around it using context. For details, refer to [this comment](https://github.com/software-mansion/react-native-executorch/issues/173#issuecomment-2775082278). - -### Can I use React Native ExecuTorch in bare React Native apps? - -Yes, staring from version `0.8.x` you can use React Native ExecuTorch in bare React Native apps. You just need to use bare React Native resource fetcher instead of Expo one, see: [Loading models section](./02-loading-models.md) for more details. - -### Do you support the old architecture? - -The old architecture is not supported and we're currently not planning to add support. - -### Can I run GGUF models using the library? - -No, as of now ExecuTorch runtime doesn't provide a reliable way to use GGUF models, hence it is not possible. - -### Are the models leveraging GPU acceleration? - -While it is possible to run some models using Core ML on iOS, which is a backend that utilizes CPU, GPU and ANE, we currently don't have many models exported to Core ML. For Android, the current state of GPU acceleration is pretty limited. As of now, there are attempts of running the models using a Vulkan backend. However the operator support is very limited meaning that the resulting performance is often inferior to XNNPACK. Hence, most of the models use XNNPACK, which is a highly optimized and mature CPU backend that runs on both Android and iOS. - -### Does this library support XNNPACK and Core ML? - -Yes, all of the backends are linked, therefore the only thing that needs to be done on your end is to export the model with the backend that you're interested in using. diff --git a/docs/versioned_docs/version-0.10.0-legacy/01-fundamentals/04-glossary-of-terms.md b/docs/versioned_docs/version-0.10.0-legacy/01-fundamentals/04-glossary-of-terms.md deleted file mode 100644 index 40d7e049e7..0000000000 --- a/docs/versioned_docs/version-0.10.0-legacy/01-fundamentals/04-glossary-of-terms.md +++ /dev/null @@ -1,59 +0,0 @@ -# Glossary of Terms - -This glossary defines key concepts used throughout the React Native ExecuTorch ecosystem, covering high-level machine learning terms and library-specific components. - -## Backend - -The execution engine responsible for running the actual computations of a model on specific hardware. - -- **XNNPACK:** A highly optimized library for floating-point neural network inference on ARM, x86, and WebAssembly. It is the default CPU backend for ExecuTorch. - -- **Core ML:** Apple's framework for optimizing and running machine learning models on iOS, macOS, and iPadOS devices. Using the Core ML backend allows ExecuTorch to delegate operations to the Apple Neural Engine (ANE) for significantly faster and more energy-efficient inference. - -## Forward Function - -The primary method of a PyTorch module (usually `forward()`) that defines the computation performed at every call. In the context of ExecuTorch, this is the logic that gets exported and compiled. When you run inference in React Native, you are essentially invoking this compiled forward function with new inputs. - -## Inference - -The process of using a trained machine learning model to make predictions or generate outputs for given input data. - -## Out-of-the-Box Support - -Refers to features, models, or architectures that work immediately with React Native ExecuTorch without requiring custom compilation, manual kernel registration, or complex configuration. For example, standard Llama architectures have out-of-the-box support, meaning you can download the `.pte` file and run it instantly. - -## Prefill - -The initial phase of generating text with an LLM (Large Language Model) where the model processes the entire input prompt (context) at once. - -- **Why it matters:** This step is computationally intensive because the model must "understand" all provided tokens simultaneously. - -- **Performance Metric:** "Time to First Token" (TTFT) usually measures the speed of the prefill phase. - -## Quantization - -A technique to reduce the size of a model and speed up inference by representing weights and activations with lower-precision data types (e.g., converting 32-bit floating-point numbers to 8-bit integers). - -- **Benefits:** Drastically lowers memory usage (RAM) and saves battery life on mobile devices. - -- **Trade-off:** Slight reduction in model accuracy, though often negligible for deployment. - -## Tensor - -The fundamental data structure in PyTorch and ExecuTorch. A tensor is a multi-dimensional array (like a matrix) that holds the inputs, weights, and outputs of a model. - -- **Example:** An image might be represented as a tensor of shape `[3, 224, 224]` (3 color channels, 224 pixels high, 224 pixels wide). - -## Token - -The basic unit of text that an LLM reads and generates. A token can be a word, part of a word, or even a single character. - -- **Rule of thumb:** 1,000 tokens is roughly equivalent to 750 words in English. - -- **Context:** Models have a "Context Window" limit (e.g., 2048 tokens), which is the maximum number of tokens they can remember from the conversation history. - -## Tokenization - -The process of converting raw text (strings) into a sequence of numerical IDs (tokens) that the model can understand. - -- **TokenizerModule (Component):** In React Native ExecuTorch, the `Tokenizer` is a utility class that handles encoding text into tensors and decoding output tensors back into readable text strings. diff --git a/docs/versioned_docs/version-0.10.0-legacy/01-fundamentals/_category_.json b/docs/versioned_docs/version-0.10.0-legacy/01-fundamentals/_category_.json deleted file mode 100644 index e3fddcbebd..0000000000 --- a/docs/versioned_docs/version-0.10.0-legacy/01-fundamentals/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Fundamentals", - "link": { - "type": "generated-index" - } -} diff --git a/docs/versioned_docs/version-0.10.0-legacy/02-benchmarks/_category_.json b/docs/versioned_docs/version-0.10.0-legacy/02-benchmarks/_category_.json deleted file mode 100644 index 6ea5e9670a..0000000000 --- a/docs/versioned_docs/version-0.10.0-legacy/02-benchmarks/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Benchmarks", - "link": { - "type": "generated-index" - } -} diff --git a/docs/versioned_docs/version-0.10.0-legacy/02-benchmarks/inference-time.md b/docs/versioned_docs/version-0.10.0-legacy/02-benchmarks/inference-time.md deleted file mode 100644 index 24923bffde..0000000000 --- a/docs/versioned_docs/version-0.10.0-legacy/02-benchmarks/inference-time.md +++ /dev/null @@ -1,255 +0,0 @@ ---- -title: Inference Time ---- - -:::info -Times presented in the tables are measured as consecutive runs of the model. -Initial run times may be up to 2x longer due to model loading and -initialization. - -Inference times are measured directly from native C++ code, wrapping only the -model's forward pass, excluding input-dependent pre- and post-processing (e.g. -image resizing, normalization) and any overhead from React Native runtime. -::: - -## Classification - -:::note -For this model all input images, whether larger or smaller, are resized before -processing. Resizing is typically fast for small images but may be noticeably -slower for very large images, which can increase total time. -::: - -| Model / Device | iPhone 17 Pro [ms] | Google Pixel 10 [ms] | -| :------------------------------- | :----------------: | :------------------: | -| EFFICIENTNET_V2_S (XNNPACK FP32) | 70 | 100 | -| EFFICIENTNET_V2_S (XNNPACK INT8) | 22 | 38 | -| EFFICIENTNET_V2_S (Core ML FP32) | 12 | - | -| EFFICIENTNET_V2_S (Core ML FP16) | 5 | - | - -## Object Detection - -:::note -For this model all input images, whether larger or smaller, are resized before -processing. Resizing is typically fast for small images but may be noticeably -slower for very large images, which can increase total time. - -Times presented in the tables are measured for YOLO models with input size equal to 512. Other input sizes may yield slower or faster inference times. RF-DETR Nano uses a fixed resolution of 312×312. -::: - -| Model / Device | iPhone 17 Pro [ms] | Google Pixel 10 [ms] | -| :-------------------------------------------- | :----------------: | :------------------: | -| SSDLITE_320_MOBILENET_V3_LARGE (XNNPACK FP32) | 20 | 18 | -| SSDLITE_320_MOBILENET_V3_LARGE (Core ML FP32) | 18 | - | -| SSDLITE_320_MOBILENET_V3_LARGE (Core ML FP16) | 8 | - | -| RF_DETR_NANO (XNNPACK FP32) | 101 | 277 | -| YOLO26N (XNNPACK FP32) | 29 | 38 | -| YOLO26S (XNNPACK FP32) | 60 | 72 | -| YOLO26M (XNNPACK FP32) | 134 | 177 | -| YOLO26L (XNNPACK FP32) | 169 | 216 | -| YOLO26X (XNNPACK FP32) | 371 | 434 | - -## Style Transfer - -:::note -For this model all input images, whether larger or smaller, are resized before -processing. Resizing is typically fast for small images but may be noticeably -slower for very large images, which can increase total time. -::: - -| Model / Device | iPhone 17 Pro [ms] | Google Pixel 10 [ms] | -| :------------------------------------------ | :----------------: | :------------------: | -| STYLE_TRANSFER_CANDY (XNNPACK FP32) | 1192 | 1025 | -| STYLE_TRANSFER_CANDY (XNNPACK INT8) | 272 | 430 | -| STYLE_TRANSFER_CANDY (Core ML FP32) | 100 | - | -| STYLE_TRANSFER_CANDY (Core ML FP16) | 150 | - | -| STYLE_TRANSFER_MOSAIC (XNNPACK FP32) | 1192 | 1025 | -| STYLE_TRANSFER_MOSAIC (XNNPACK INT8) | 272 | 430 | -| STYLE_TRANSFER_MOSAIC (Core ML FP32) | 100 | - | -| STYLE_TRANSFER_MOSAIC (Core ML FP16) | 150 | - | -| STYLE_TRANSFER_UDNIE (XNNPACK FP32) | 1192 | 1025 | -| STYLE_TRANSFER_UDNIE (XNNPACK INT8) | 272 | 430 | -| STYLE_TRANSFER_UDNIE (Core ML FP32) | 100 | - | -| STYLE_TRANSFER_UDNIE (Core ML FP16) | 150 | - | -| STYLE_TRANSFER_RAIN_PRINCESS (XNNPACK FP32) | 1192 | 1025 | -| STYLE_TRANSFER_RAIN_PRINCESS (XNNPACK INT8) | 272 | 430 | -| STYLE_TRANSFER_RAIN_PRINCESS (Core ML FP32) | 100 | - | -| STYLE_TRANSFER_RAIN_PRINCESS (Core ML FP16) | 150 | - | - -## OCR - -Notice that the recognizer models were executed between 3 and 7 times during a single recognition. -The values below represent the averages across all runs for the benchmark image. - -| Model | iPhone 17 Pro [ms] | iPhone 16 Pro [ms] | iPhone SE 3 | Samsung Galaxy S24 [ms] | OnePlus 12 [ms] | -| ------------------------------- | ------------------ | ------------------ | ----------- | ----------------------- | --------------- | -| **Total Inference Time** | 652 | 600 | 2855 | 1092 | 1034 | -| Detector (CRAFT) `forward_800` | 220 | 221 | 1740 | 521 | 492 | -| Recognizer (CRNN) `forward_512` | 45 | 38 | 110 | 40 | 38 | -| Recognizer (CRNN) `forward_256` | 21 | 18 | 54 | 20 | 19 | -| Recognizer (CRNN) `forward_128` | 11 | 9 | 27 | 10 | 10 | - -## Vertical OCR - -:::note -Recognizer models, as well as detector's `forward_320` method, were executed between 4 and 21 times during a single recognition. -::: -The values below represent the averages across all runs for the benchmark image. - -| Model | iPhone 17 Pro
[ms] | iPhone 16 Pro
[ms] | iPhone SE 3 | Samsung Galaxy S24
[ms] | OnePlus 12
[ms] | -| ------------------------------- | ------------------------- | ------------------------- | ----------- | ------------------------------ | ---------------------- | -| **Total Inference Time** | 1104 | 1113 | 8840 | 2845 | 2640 | -| Detector (CRAFT) `forward_1280` | 501 | 507 | 4317 | 1405 | 1275 | -| Detector (CRAFT) `forward_320` | 125 | 121 | 1060 | 338 | 299 | -| Recognizer (CRNN) `forward_512` | 46 | 42 | 109 | 47 | 37 | -| Recognizer (CRNN) `forward_64` | 5 | 6 | 14 | 7 | 6 | - -## LLMs - -| Model | Google Pixel 10 (XNNPACK) [tokens/s] | iPhone 17 Pro (XNNPACK) [tokens/s] | OnePlus 12 (XNNPACK) [tokens/s] | iPhone SE 3 (XNNPACK) [tokens/s] | -| ------------------------------ | :----------------------------------: | :--------------------------------: | :-----------------------------: | :------------------------------: | -| LLAMA3_2_1B | 8 | 8 | 15 | N/A | -| LLAMA3_2_1B_QLORA | 22 | 22 | 45 | 19 | -| LLAMA3_2_1B_SPINQUANT | 24 | 36 | 48 | 17 | -| LLAMA3_2_3B | 2 | 3 | 6 | N/A | -| LLAMA3_2_3B_QLORA | 8 | 7 | 17 | N/A | -| LLAMA3_2_3B_SPINQUANT | 11 | 12 | 18 | N/A | -| QWEN3_0_6B | 7 | 9 | 15 | 9 | -| QWEN3_0_6B_QUANTIZED | 20 | 27 | 37 | 35 | -| QWEN3_1_7B | 3 | 5 | 8 | N/A | -| QWEN3_1_7B_QUANTIZED | 10 | 14 | 20 | 13 | -| QWEN3_4B | 2 | N/A | 4 | N/A | -| QWEN3_4B_QUANTIZED | 5 | 7 | 10 | N/A | -| HAMMER2_1_0_5B | 13 | 13 | 25 | 16 | -| HAMMER2_1_0_5B_QUANTIZED | 34 | 97 | 72 | 56 | -| HAMMER2_1_1_5B | 5 | 5 | 10 | N/A | -| HAMMER2_1_1_5B_QUANTIZED | 14 | 16 | 36 | 22 | -| HAMMER2_1_3B | 2 | 3 | 5 | N/A | -| HAMMER2_1_3B_QUANTIZED | 9 | 10 | 20 | N/A | -| SMOLLM2_1_135M | 25 | 24 | 33 | 42 | -| SMOLLM2_1_135M_QUANTIZED | 20 | 32 | 64 | 47 | -| SMOLLM2_1_360M | 12 | 13 | 20 | 15 | -| SMOLLM2_1_360M_QUANTIZED | 12 | 15 | 29 | 18 | -| SMOLLM2_1_1_7B | 3 | 5 | 7 | N/A | -| SMOLLM2_1_1_7B_QUANTIZED | 12 | 14 | 27 | 23 | -| QWEN2_5_0_5B | 12 | 12 | 21 | 15 | -| QWEN2_5_0_5B_QUANTIZED | 33 | 31 | 55 | 48 | -| QWEN2_5_1_5B | 5 | 5 | 9 | N/A | -| QWEN2_5_1_5B_QUANTIZED | 15 | 15 | 28 | 16 | -| QWEN2_5_3B | 2 | 3 | 5 | N/A | -| QWEN2_5_3B_QUANTIZED | 9 | 10 | 18 | N/A | -| PHI_4_MINI_4B | 2 | 3 | 4 | N/A | -| PHI_4_MINI_4B_QUANTIZED | 4 | 7 | 10 | N/A | -| LFM2_5_350M | 16 | 26 | 34 | 21 | -| LFM2_5_350M_QUANTIZED | 58 | 67 | 103 | 51 | -| LFM2_5_1_2B_INSTRUCT | 6 | 10 | 13 | N/A | -| LFM2_5_1_2B_INSTRUCT_QUANTIZED | 8 | 26 | 47 | 24 | - -❌ - Insufficient RAM. - -## Speech to Text - -### Encoding - -Average time for encoding audio of given length over 10 runs. For `Whisper` model we only list 30 sec audio chunks since `Whisper` does not accept other lengths (for shorter audio the audio needs to be padded to 30sec with silence). - -| Model | iPhone 17 Pro (XNNPACK) [ms] | iPhone 16 Pro (XNNPACK) [ms] | iPhone SE 3 (XNNPACK) [ms] | Samsung Galaxy S24 (XNNPACK) [ms] | OnePlus 12 (XNNPACK) [ms] | -| ------------------ | :--------------------------: | :--------------------------: | :------------------------: | :-------------------------------: | :-----------------------: | -| Whisper-tiny (30s) | 89 | 93 | 403 | 277 | 260 | - -### Decoding - -Average time for decoding one token in sequence of approximately 100 tokens, with encoding context is obtained from audio of noted length. - -| Model | iPhone 17 Pro (XNNPACK) [ms] | iPhone 16 Pro (XNNPACK) [ms] | iPhone SE 3 (XNNPACK) [ms] | Samsung Galaxy S24 (XNNPACK) [ms] | OnePlus 12 (XNNPACK) [ms] | -| ------------------ | :--------------------------: | :--------------------------: | :------------------------: | :-------------------------------: | :-----------------------: | -| Whisper-tiny (30s) | 6 | 6 | 40 | 28 | 25 | - -## Text to Speech - -Average time to synthesize speech from an input text of approximately 60 tokens, resulting in 2 to 5 seconds of audio depending on the input and selected voice. - -| Model | iPhone 17 Pro (XNNPACK) [ms] | OnePlus 12 (XNNPACK) [ms] | -| ------------- | :--------------------------: | :-----------------------: | -| Kokoro-small | 2051 | 1548 | -| Kokoro-medium | 2124 | 1625 | - -## Text Embeddings - -:::note -Benchmark times for text embeddings are highly dependent on the sentence length. The numbers below are based on a sentence of around 80 tokens. For shorter or longer sentences, inference time may vary accordingly. -::: - -| Model / Device | iPhone 17 Pro [ms] | OnePlus 12 [ms] | -| ----------------------------------------------------- | :----------------: | :-------------: | -| ALL_MINILM_L6_V2 (XNNPACK) | 7 | 21 | -| ALL_MPNET_BASE_V2 (XNNPACK) | 24 | 90 | -| MULTI_QA_MINILM_L6_COS_V1 (XNNPACK) | 7 | 19 | -| MULTI_QA_MPNET_BASE_DOT_V1 (XNNPACK) | 24 | 88 | -| CLIP_VIT_BASE_PATCH32_TEXT (XNNPACK) | 14 | 39 | -| DISTILUSE_BASE_MULTILINGUAL_CASED_V2 (XNNPACK 8da4w) | 16 | 15 | -| DISTILUSE_BASE_MULTILINGUAL_CASED_V2 (Core ML FP32) | 15 | - | -| PARAPHRASE_MULTILINGUAL_MINILM_L12_V2 (XNNPACK 8da4w) | 14 | 15 | - -## Image Embeddings - -:::note -For this model all input images, whether larger or smaller, are resized before -processing. Resizing is typically fast for small images but may be noticeably -slower for very large images, which can increase total time. -::: - -| Model / Device | iPhone 17 Pro [ms] | Google Pixel 10 [ms] | -| :----------------------------------------- | :----------------: | :------------------: | -| CLIP_VIT_BASE_PATCH32_IMAGE (XNNPACK FP32) | 14 | 68 | -| CLIP_VIT_BASE_PATCH32_IMAGE (XNNPACK INT8) | 11 | 31 | - -## Semantic Segmentation - -:::note -For this model all input images, whether larger or smaller, are resized before -processing. Resizing is typically fast for small images but may be noticeably -slower for very large images, which can increase total time. -::: - -| Model / Device | iPhone 17 Pro [ms] | Google Pixel 10 [ms] | -| :------------------------------------------- | :----------------: | :------------------: | -| DEEPLAB_V3_RESNET50 (XNNPACK FP32) | 2000 | 2200 | -| DEEPLAB_V3_RESNET50 (XNNPACK INT8) | 118 | 380 | -| DEEPLAB_V3_RESNET101 (XNNPACK FP32) | 2900 | 3300 | -| DEEPLAB_V3_RESNET101 (XNNPACK INT8) | 174 | 660 | -| DEEPLAB_V3_MOBILENET_V3_LARGE (XNNPACK FP32) | 131 | 153 | -| DEEPLAB_V3_MOBILENET_V3_LARGE (XNNPACK INT8) | 17 | 40 | -| LRASPP_MOBILENET_V3_LARGE (XNNPACK FP32) | 13 | 36 | -| LRASPP_MOBILENET_V3_LARGE (XNNPACK INT8) | 12 | 20 | -| FCN_RESNET50 (XNNPACK FP32) | 1800 | 2160 | -| FCN_RESNET50 (XNNPACK INT8) | 100 | 320 | -| FCN_RESNET101 (XNNPACK FP32) | 2600 | 3160 | -| FCN_RESNET101 (XNNPACK INT8) | 160 | 620 | - -## Instance Segmentation - -:::note -Times presented in the tables are measured for YOLO models with input size equal -to 512. Other input sizes may yield slower or faster inference times. RF-DETR -Nano Seg uses a fixed resolution of 312×312. -::: - -| Model | Samsung Galaxy S24 [ms] | Iphone 17 pro [ms] | Pixel 10 [ms] | -| :------------------------- | :---------------------: | :----------------: | :-----------: | -| YOLO26N_SEG (XNNPACK) | 92 | 90 | 93 | -| YOLO26S_SEG (XNNPACK) | 220 | 188 | 193 | -| YOLO26M_SEG (XNNPACK) | 570 | 550 | 481 | -| YOLO26L_SEG (XNNPACK) | 680 | 608 | 582 | -| YOLO26X_SEG (XNNPACK) | 1410 | 1338 | 1191 | -| RF_DETR_NANO_SEG (XNNPACK) | 549 | 330 | 428 | -| FASTSAM_S (XNNPACK) | 184 | 30 | 286 | -| FASTSAM_X (XNNPACK) | 1886 | 2520 | 1993 | -| FASTSAM_S (Core ML) | - | 51 | - | -| FASTSAM_X (Core ML) | - | 72 | - | - -## Text to image - -| Model | iPhone 17 Pro (XNNPACK) [ms] | iPhone 16 Pro (XNNPACK) [ms] | iPhone SE 3 (XNNPACK) [ms] | Samsung Galaxy S24 (XNNPACK) [ms] | OnePlus 12 (XNNPACK) [ms] | -| --------------------- | :--------------------------: | :--------------------------: | :------------------------: | :-------------------------------: | :-----------------------: | -| BK_SDM_TINY_VPRED_256 | 21184 | 21021 | ❌ | 18834 | 16617 | diff --git a/docs/versioned_docs/version-0.10.0-legacy/02-benchmarks/memory-usage.md b/docs/versioned_docs/version-0.10.0-legacy/02-benchmarks/memory-usage.md deleted file mode 100644 index c685955061..0000000000 --- a/docs/versioned_docs/version-0.10.0-legacy/02-benchmarks/memory-usage.md +++ /dev/null @@ -1,154 +0,0 @@ ---- -title: Memory Usage ---- - -:::info -Memory usage values represent the peak memory increase observed while the model was -loaded and actively running inference, relative to the baseline app memory -before model initialization. -::: - -## Classification - -| Model / Device | iPhone 17 Pro [MB] | Google Pixel 10 [MB] | -| -------------------------------- | :----------------: | :------------------: | -| EFFICIENTNET_V2_S (XNNPACK FP32) | 101 | 122 | -| EFFICIENTNET_V2_S (XNNPACK INT8) | 62 | 78 | -| EFFICIENTNET_V2_S (Core ML FP32) | 101 | - | -| EFFICIENTNET_V2_S (Core ML FP16) | 87 | - | - -## Object Detection - -:::note -Data presented for YOLO models is based on inference with `forward_640` method. -::: - -| Model / Device | iPhone 17 Pro [MB] | Google Pixel 10 [MB] | -| --------------------------------------------- | :----------------: | :------------------: | -| SSDLITE_320_MOBILENET_V3_LARGE (XNNPACK FP32) | 94 | 104 | -| SSDLITE_320_MOBILENET_V3_LARGE (Core ML FP32) | 83 | - | -| SSDLITE_320_MOBILENET_V3_LARGE (Core ML FP16) | 62 | - | -| RF_DETR_NANO (XNNPACK FP32) | 145 | 162 | -| YOLO26N (XNNPACK FP32) | 36 | 44 | -| YOLO26S (XNNPACK FP32) | 81 | 82 | -| YOLO26M (XNNPACK FP32) | 123 | 158 | -| YOLO26L (XNNPACK FP32) | 170 | 172 | -| YOLO26X (XNNPACK FP32) | 320 | 309 | - -## Style Transfer - -| Model / Device | iPhone 17 Pro [MB] | Google Pixel 10 [MB] | -| ------------------------------------------- | :----------------: | :------------------: | -| STYLE_TRANSFER_CANDY (XNNPACK FP32) | 1200 | 1200 | -| STYLE_TRANSFER_CANDY (XNNPACK INT8) | 800 | 800 | -| STYLE_TRANSFER_CANDY (Core ML FP32) | 400 | - | -| STYLE_TRANSFER_CANDY (Core ML FP16) | 380 | - | -| STYLE_TRANSFER_MOSAIC (XNNPACK FP32) | 1200 | 1200 | -| STYLE_TRANSFER_MOSAIC (XNNPACK INT8) | 800 | 800 | -| STYLE_TRANSFER_MOSAIC (Core ML FP32) | 400 | - | -| STYLE_TRANSFER_MOSAIC (Core ML FP16) | 380 | - | -| STYLE_TRANSFER_UDNIE (XNNPACK FP32) | 1200 | 1200 | -| STYLE_TRANSFER_UDNIE (XNNPACK INT8) | 800 | 800 | -| STYLE_TRANSFER_UDNIE (Core ML FP32) | 400 | - | -| STYLE_TRANSFER_UDNIE (Core ML FP16) | 380 | - | -| STYLE_TRANSFER_RAIN_PRINCESS (XNNPACK FP32) | 1200 | 1200 | -| STYLE_TRANSFER_RAIN_PRINCESS (XNNPACK INT8) | 800 | 800 | -| STYLE_TRANSFER_RAIN_PRINCESS (Core ML FP32) | 400 | - | -| STYLE_TRANSFER_RAIN_PRINCESS (Core ML FP16) | 380 | - | - -## OCR - -| Model / Device | iPhone 17 Pro [MB] | OnePlus 12 [MB] | -| --------------------------------------------------- | :----------------: | :-------------: | -| Detector (CRAFT) + Recognizer (CRNN) (XNNPACK FP32) | 1320 | 1400 | - -## Vertical OCR - -| Model / Device | iPhone 17 Pro [MB] | OnePlus 12 [MB] | -| --------------------------------------------------- | :----------------: | :-------------: | -| Detector (CRAFT) + Recognizer (CRNN) (XNNPACK FP32) | 1000-1500 | 1000-1600 | - -## LLMs - -| Model / Device | iPhone 17 Pro [GB] | OnePlus 12 [GB] | -| ------------------------------- | :----------------: | :-------------: | -| LLAMA3_2_1B (XNNPACK) | 3.1 | 3.3 | -| LLAMA3_2_1B_SPINQUANT (XNNPACK) | 2.4 | 1.9 | -| LLAMA3_2_1B_QLORA (XNNPACK) | 2.8 | 2.7 | -| LLAMA3_2_3B (XNNPACK) | 7.3 | 7.1 | -| LLAMA3_2_3B_SPINQUANT (XNNPACK) | 3.8 | 3.7 | -| LLAMA3_2_3B_QLORA (XNNPACK) | 4.0 | 3.9 | - -## Speech to Text - -| Model / Device | iPhone 17 Pro [MB] | OnePlus 12 [MB] | -| ---------------------- | :----------------: | :-------------: | -| WHISPER_TINY (XNNPACK) | 375 | 410 | - -## Text to Speech - -:::note -The reported memory usage values include the memory footprint of the Phonemis package, which is used for phonemizing input text. Currently, this can range from 100 to 150 MB depending on the device. -::: - -| Model / Device | iPhone 17 Pro [MB] | OnePlus 12 [MB] | -| ----------------------- | :----------------: | :-------------: | -| KOKORO_SMALL (XNNPACK) | 820 | 820 | -| KOKORO_MEDIUM (XNNPACK) | 1100 | 1140 | - -## Text Embeddings - -| Model / Device | iPhone 17 Pro [MB] | OnePlus 12 [MB] | -| ----------------------------------------------------- | :----------------: | :-------------: | -| ALL_MINILM_L6_V2 (XNNPACK) | 110 | 95 | -| ALL_MPNET_BASE_V2 (XNNPACK) | 455 | 405 | -| MULTI_QA_MINILM_L6_COS_V1 (XNNPACK) | 140 | 120 | -| MULTI_QA_MPNET_BASE_DOT_V1 (XNNPACK) | 455 | 435 | -| CLIP_VIT_BASE_PATCH32_TEXT (XNNPACK) | 280 | 200 | -| DISTILUSE_BASE_MULTILINGUAL_CASED_V2 (XNNPACK 8da4w) | 36 | 44 | -| DISTILUSE_BASE_MULTILINGUAL_CASED_V2 (Core ML FP32) | 55 | - | -| PARAPHRASE_MULTILINGUAL_MINILM_L12_V2 (XNNPACK 8da4w) | 131 | 141 | - -## Image Embeddings - -| Model / Device | iPhone 17 Pro [MB] | Google Pixel 10 [MB] | -| ------------------------------------------ | :----------------: | :------------------: | -| CLIP_VIT_BASE_PATCH32_IMAGE (XNNPACK FP32) | 340 | 345 | - -## Semantic Segmentation - -:::note -Data presented in the following sections is based on inference with non-resized -output. When resize is enabled, expect higher memory usage and inference time -with higher resolutions. -::: - -| Model / Device | iPhone 17 Pro [MB] | OnePlus 12 [MB] | -| ---------------------------- | :----------------: | :-------------: | -| DEEPLABV3_RESNET50 (XNNPACK) | 660 | 930 | - -## Instance Segmentation - -:::note -Data presented in the following sections is based on inference with 640x640 input. -::: - -| Model / Device | iPhone 17 Pro [MB] | OnePlus 12 [MB] | -| -------------------------- | :----------------: | :-------------: | -| YOLO26N_SEG (XNNPACK) | 668 | 92 | -| YOLO26S_SEG (XNNPACK) | 712 | 220 | -| YOLO26M_SEG (XNNPACK) | 815 | 570 | -| YOLO26L_SEG (XNNPACK) | 1024 | 680 | -| YOLO26X_SEG (XNNPACK) | 1450 | 1410 | -| RF_DETR_NANO_SEG (XNNPACK) | 603 | 620 | -| FASTSAM_S (XNNPACK FP32) | 535 | 567 | -| FASTSAM_X (XNNPACK FP32) | 760 | 792 | -| FASTSAM_S (Core ML FP16) | 523 | - | -| FASTSAM_X (Core ML FP16) | 684 | - | - -## Text to Image - -| Model / Device | iPhone 17 Pro [MB] | OnePlus 12 [MB] | -| ------------------------------- | :----------------: | :-------------: | -| BK_SDM_TINY_VPRED_256 (XNNPACK) | 2400 | 2400 | -| BK_SDM_TINY_VPRED (XNNPACK) | 6050 | 6210 | diff --git a/docs/versioned_docs/version-0.10.0-legacy/02-benchmarks/model-size.md b/docs/versioned_docs/version-0.10.0-legacy/02-benchmarks/model-size.md deleted file mode 100644 index cfa58823e1..0000000000 --- a/docs/versioned_docs/version-0.10.0-legacy/02-benchmarks/model-size.md +++ /dev/null @@ -1,161 +0,0 @@ ---- -title: Model Size ---- - -## Classification - -| Model | XNNPACK FP32 [MB] | XNNPACK INT8 [MB] | Core ML FP32 [MB] | Core ML FP16 [MB] | -| :---------------- | :---------------: | :---------------: | :---------------: | :---------------: | -| EFFICIENTNET_V2_S | 85.7 | 22.9 | 86.5 | 43.9 | - -## Object Detection - -| Model | XNNPACK FP32 [MB] | Core ML FP32 [MB] | Core ML FP16 [MB] | -| ------------------------------ | :---------------: | :---------------: | :---------------: | -| SSDLITE_320_MOBILENET_V3_LARGE | 13.9 | 15.6 | 8.46 | -| RF_DETR_NANO | 112 | - | - | -| YOLO26N | 10.3 | - | - | -| YOLO26S | 38.6 | - | - | -| YOLO26M | 82.3 | - | - | -| YOLO26L | 100 | - | - | -| YOLO26X | 224 | - | - | - -## Instance Segmentation - -| Model | XNNPACK [MB] | Core ML FP32 [MB] | Core ML FP16 [MB] | -| ---------------- | :----------: | :---------------: | :---------------: | -| YOLO26N_SEG | 11.6 | - | - | -| YOLO26S_SEG | 42.3 | - | - | -| YOLO26M_SEG | 95.4 | - | - | -| YOLO26L_SEG | 113 | - | - | -| YOLO26X_SEG | 252 | - | - | -| RF_DETR_NANO_SEG | 124 | - | - | -| FASTSAM_S | 47.3 | 47.8 | 24.2 | -| FASTSAM_X | 289 | 290 | 145 | - -## Style Transfer - -| Model | XNNPACK FP32 [MB] | XNNPACK INT8 [MB] | Core ML FP32 [MB] | Core ML FP16 [MB] | -| ---------------------------- | :---------------: | :---------------: | :---------------: | :---------------: | -| STYLE_TRANSFER_CANDY | 6.82 | 1.84 | 7.12 | 3.79 | -| STYLE_TRANSFER_MOSAIC | 6.82 | 1.84 | 7.12 | 3.79 | -| STYLE_TRANSFER_UDNIE | 6.82 | 1.84 | 7.12 | 3.79 | -| STYLE_TRANSFER_RAIN_PRINCESS | 6.82 | 1.84 | 7.12 | 3.79 | - -## OCR - -| Model | XNNPACK [MB] | -| -------------------------- | :-----------: | -| Detector (CRAFT_QUANTIZED) | 20.9 | -| Recognizer (CRNN) | 18.5 - 25.2\* | - -\* - The model weights vary depending on the language. - -## Vertical OCR - -| Model | XNNPACK [MB] | -| -------------------------- | :-----------: | -| Detector (CRAFT_QUANTIZED) | 20.9 | -| Recognizer (CRNN) | 18.5 - 25.2\* | - -\* - The model weights vary depending on the language. - -## LLMs - -| Model | XNNPACK [GB] | -| ------------------------------ | :----------: | -| LLAMA3_2_1B | 2.47 | -| LLAMA3_2_1B_SPINQUANT | 1.14 | -| LLAMA3_2_1B_QLORA | 1.18 | -| LLAMA3_2_3B | 6.43 | -| LLAMA3_2_3B_SPINQUANT | 2.55 | -| LLAMA3_2_3B_QLORA | 2.65 | -| QWEN3_0.6B | 1.11 | -| QWEN3_0.6B_QUANTIZED | 0.47 | -| QWEN3_1.7B | 3.21 | -| QWEN3_1.7B_QUANTIZED | 1.21 | -| QWEN3_4B | 7.49 | -| QWEN3_4B_QUANTIZED | 2.50 | -| QWEN2_5_0.5B | 0.92 | -| QWEN2_5_0.5B_QUANTIZED | 0.39 | -| QWEN2_5_1.5B | 2.88 | -| QWEN2_5_1.5B_QUANTIZED | 1.06 | -| QWEN2_5_3B | 5.75 | -| QWEN2_5_3B_QUANTIZED | 1.95 | -| HAMMER2_1_0.5B | 0.92 | -| HAMMER2_1_0.5B_QUANTIZED | 0.39 | -| HAMMER2_1_1.5B | 2.88 | -| HAMMER2_1_1.5B_QUANTIZED | 1.06 | -| HAMMER2_1_3B | 5.75 | -| HAMMER2_1_3B_QUANTIZED | 1.91 | -| PHI4_MINI | 7.15 | -| PHI4_MINI_QUANTIZED | 2.62 | -| SMOLLM2_135M | 0.25 | -| SMOLLM2_135M_QUANTIZED | 0.52 | -| SMOLLM2_360M | 0.67 | -| SMOLLM2_360M_QUANTIZED | 1.27 | -| SMOLLM2_1.7B | 3.19 | -| SMOLLM2_1.7B_QUANTIZED | 0.95 | -| LFM2_5_1.2B_INSTRUCT | 2.43 | -| LFM2_5_1.2B_INSTRUCT_QUANTIZED | 0.74 | -| LFM2_5_350M_FP16 | 0.79 | -| LFM2_5_350M_QUANTIZED | 0.26 | - -## Speech to text - -| Model | XNNPACK [MB] | -| ---------------- | :----------: | -| WHISPER_TINY_EN | 151 | -| WHISPER_TINY | 151 | -| WHISPER_BASE_EN | 290.6 | -| WHISPER_BASE | 290.6 | -| WHISPER_SMALL_EN | 968 | -| WHISPER_SMALL | 968 | - -## Text to speech - -| Model | XNNPACK [MB] | -| ------------- | :----------: | -| KOKORO_SMALL | 329.6 | -| KOKORO_MEDIUM | 334.4 | - -## Text Embeddings - -| Model | Size [MB] | -| ----------------------------------------------- | :-------: | -| ALL_MINILM_L6_V2 | 91 | -| ALL_MPNET_BASE_V2 | 438 | -| MULTI_QA_MINILM_L6_COS_V1 | 91 | -| MULTI_QA_MPNET_BASE_DOT_V1 | 438 | -| CLIP_VIT_BASE_PATCH32_TEXT | 254 | -| DISTILUSE_BASE_MULTILINGUAL_CASED_V2_8DA4W | 393 | -| PARAPHRASE_MULTILINGUAL_MINILM_L12_V2_QUANTIZED | 397 | - -## Image Embeddings - -| Model | XNNPACK FP32 [MB] | XNNPACK INT8 [MB] | -| --------------------------- | :---------------: | :---------------: | -| CLIP_VIT_BASE_PATCH32_IMAGE | 352 | 96.4 | - -## Semantic Segmentation - -| Model | XNNPACK FP32 [MB] | XNNPACK INT8 [MB] | -| ----------------------------- | :---------------: | :---------------: | -| DEEPLAB_V3_RESNET50 | 168 | 42.4 | -| DEEPLAB_V3_RESNET101 | 244 | 61.7 | -| DEEPLAB_V3_MOBILENET_V3_LARGE | 44.1 | 11.4 | -| LRASPP_MOBILENET_V3_LARGE | 12.9 | 3.53 | -| FCN_RESNET50 | 141 | 35.7 | -| FCN_RESNET101 | 217 | 55 | - -## Text to image - -| Model | Text encoder (XNNPACK) [MB] | UNet (XNNPACK) [MB] | VAE decoder (XNNPACK) [MB] | -| ----------------- | --------------------------- | ------------------- | -------------------------- | -| BK_SDM_TINY_VPRED | 492 | 1290 | 198 | - -## Voice Activity Detection (VAD) - -| Model | XNNPACK [MB] | -| -------- | :----------: | -| FSMN_VAD | 1.83 | diff --git a/docs/versioned_docs/version-0.10.0-legacy/03-hooks/01-natural-language-processing/_category_.json b/docs/versioned_docs/version-0.10.0-legacy/03-hooks/01-natural-language-processing/_category_.json deleted file mode 100644 index 0314f315d2..0000000000 --- a/docs/versioned_docs/version-0.10.0-legacy/03-hooks/01-natural-language-processing/_category_.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "label": "Natural Language Processing", - "link": { - "type": "generated-index" - } -} diff --git a/docs/versioned_docs/version-0.10.0-legacy/03-hooks/01-natural-language-processing/useLLM.md b/docs/versioned_docs/version-0.10.0-legacy/03-hooks/01-natural-language-processing/useLLM.md deleted file mode 100644 index b4e94ccb61..0000000000 --- a/docs/versioned_docs/version-0.10.0-legacy/03-hooks/01-natural-language-processing/useLLM.md +++ /dev/null @@ -1,572 +0,0 @@ ---- -title: useLLM -keywords: - [ - react native, - react native ai, - react native llm, - react native qwen, - react native llama, - react native executorch, - executorch, - pytorch, - on-device ai, - mobile ai, - llama 3, - qwen, - text generation, - tool calling, - function calling, - ] -description: "Learn how to use LLMs in your React Native applications with React Native ExecuTorch's useLLM hook." ---- - -React Native ExecuTorch supports a variety of LLMs (checkout our [HuggingFace repository](https://huggingface.co/software-mansion) for model already converted to ExecuTorch format) including Llama 3.2. Before getting started, you’ll need to obtain the .pte binary—a serialized model, the tokenizer and tokenizer config JSON files. There are various ways to accomplish this: - -:::info -It is recommended to use models provided by us, which are available at our [HuggingFace repository](https://huggingface.co/collections/software-mansion/llm). You can also use [constants](../../06-api-reference/index.md#models---llm) shipped with our library. - -Alternatively, follow the official [tutorial](https://docs.pytorch.org/executorch/stable/llm/export-llm.html) made by ExecuTorch team to export an arbitrary LLM model. -::: - -:::warning -Lower-end devices might not be able to fit LLMs into memory. We recommend using quantized models to reduce the memory footprint. -::: - -## API Reference - -- For detailed API Reference for `useLLM` see: [`useLLM` API Reference](../../06-api-reference/functions/useLLM.md). -- For all LLM models available out-of-the-box in React Native ExecuTorch see: [LLM Models](../../06-api-reference/index.md#models---llm). -- For useful LLM utility functionalities please refer to the following link: [LLM Utility Functionalities](../../06-api-reference/index.md#utilities---llm). - -## Initializing - -In order to load a model into the app, you need to run the following code: - -```typescript -import { models, useLLM } from 'react-native-executorch/legacy'; -const llm = useLLM({ model: models.llm.lfm2_5_1_2b_instruct() }); -``` - -
- -The code snippet above fetches the model from the specified URL, loads it into memory, and returns an object with various functions and properties for controlling the model. You can monitor the loading progress by checking the [`llm.downloadProgress`](../../06-api-reference/interfaces/LLMType.md#downloadprogress) and [`llm.isReady`](../../06-api-reference/interfaces/LLMType.md#isready) property, and if anything goes wrong, the [`llm.error`](../../06-api-reference/interfaces/LLMType.md#error) property will contain the error message. - -### Arguments - -`useLLM` takes [`LLMProps`](../../06-api-reference/interfaces/LLMProps.md) that consists of: - -- [`model`](../../06-api-reference/interfaces/LLMProps.md#model). -- An optional flag [`preventLoad`](../../06-api-reference/interfaces/SpeechToTextProps.md#preventload) which prevents auto-loading of the model. - -You need more details? Check the following resources: - -- For detailed information about `useLLM` arguments check this section: [`useLLM` arguments](../../06-api-reference/functions/useLLM.md#parameters). -- For more information on loading resources, take a look at [loading models](../../01-fundamentals/02-loading-models.md) page. -- For available LLM models please check out the following list: [LLM Models](../../06-api-reference/index.md#models---llm). - -### Returns - -`useLLM` returns [`LLMType`](../../06-api-reference/interfaces/LLMType.md) which provides: - -- State properties: [`response`](../../06-api-reference/interfaces/LLMType.md#response), [`token`](../../06-api-reference/interfaces/LLMType.md#token), [`isReady`](../../06-api-reference/interfaces/LLMType.md#isready), [`isGenerating`](../../06-api-reference/interfaces/LLMType.md#isgenerating), [`downloadProgress`](../../06-api-reference/interfaces/LLMType.md#downloadprogress), [`error`](../../06-api-reference/interfaces/LLMType.md#error), [`messageHistory`](../../06-api-reference/interfaces/LLMType.md#messagehistory) -- Generation methods: [`generate`](../../06-api-reference/interfaces/LLMType.md#generate), [`sendMessage`](../../06-api-reference/interfaces/LLMType.md#sendmessage), [`interrupt`](../../06-api-reference/interfaces/LLMType.md#interrupt) -- Configuration: [`configure`](../../06-api-reference/interfaces/LLMType.md#configure), [`deleteMessage`](../../06-api-reference/interfaces/LLMType.md#deletemessage) -- Token counting: [`getGeneratedTokenCount`](../../06-api-reference/interfaces/LLMType.md#getgeneratedtokencount), [`getPromptTokenCount`](../../06-api-reference/interfaces/LLMType.md#getprompttokencount), [`getTotalTokenCount`](../../06-api-reference/interfaces/LLMType.md#gettotaltokencount) - -For complete details, see the [LLMType API Reference](../../06-api-reference/interfaces/LLMType.md). - -## Functional vs managed - -You can use functions returned from this hooks in two manners: - -1. Functional/pure - we will not keep any state for you. You'll need to keep conversation history and handle function calling yourself. Use [`generate`](../../06-api-reference/interfaces/LLMType.md#generate) and [`response`](../../06-api-reference/interfaces/LLMType.md#response). Note that you don't need to run [`configure`](../../06-api-reference/interfaces/LLMType.md#configure) to use those. Furthermore, [`chatConfig`](../../06-api-reference/interfaces/LLMConfig.md#chatconfig) and [`toolsConfig`](../../06-api-reference/interfaces/LLMConfig.md#toolsconfig) will not have any effect on those functions. - -2. Managed/stateful - we will manage conversation state. Tool calls will be parsed and called automatically after passing appropriate callbacks. See more at [managed LLM chat](#managed-llm-chat). - -## Functional way - -### Simple generation - -To perform chat completion you can use the [`generate`](../../06-api-reference/interfaces/LLMType.md#generate) function. The [`response`](../../06-api-reference/interfaces/LLMType.md#response) value is updated with each token as it's generated, and the function returns a promise that resolves to the complete response when generation finishes. - -```tsx -const llm = useLLM({ model: models.llm.lfm2_5_1_2b_instruct() }); - -const handleGenerate = async () => { - const chat: Message[] = [ - { role: 'system', content: 'You are a helpful assistant' }, - { role: 'user', content: 'Hi!' }, - { role: 'assistant', content: 'Hi!, how can I help you?' }, - { role: 'user', content: 'What is the meaning of life?' }, - ]; - - // Chat completion - returns the generated response - const response = await llm.generate(chat); - console.log('Complete response:', response); -}; - -return ( - -

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 - - - - - - - - diff --git a/apps/legacy/computer-vision/assets/icons/executorch_logo.png b/apps/legacy/computer-vision/assets/icons/executorch_logo.png deleted file mode 100644 index 73bdec1b7c65c9ed89b7be0039f8db2dd93ecb1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 694569 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%0ADN( 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