From 5b184a95f6ad0e1232a02653684f7f5e3cbc2646 Mon Sep 17 00:00:00 2001 From: Sourav Das Date: Sun, 30 Aug 2026 08:57:17 +0530 Subject: [PATCH 1/4] Release: 29.08.2026 (#10) * feat: Implemented NAM Rack plugin with NAM and Tone3000 library support * chore: built the approved pedals, fixing the UI * feat: Implemented and improved NAM Rack with Hotkey profiles for all different DAWs including ProTools, Cubase, Audacity, Reaper etc * chore: Fixed hotkey issues and other code cleanups * fix: make verification platform portable * test: harden cross-platform verification * test: allow NAM geometry matrix to complete * fix: make NAM dependency patches idempotent on Windows --- .agent/workflows/project-settings.md | 27 +- .claude/settings.local.json | 53 - .gitattributes | 10 + .github/CODEOWNERS | 2 + .../window-or-startup-failure.yml | 115 + .github/workflows/ai-runtime-release.yml | 34 +- .github/workflows/release.yml | 475 +- .github/workflows/verify.yml | 181 +- .gitignore | 25 +- AGENTS.md | 29 +- CLAUDE.md | 27 +- CMakeLists.txt | 501 +- README.md | 213 +- Source/ARAHostController.cpp | 4 +- Source/AppUpdater.cpp | 4 +- Source/AudioAnalyzer.cpp | 16 +- Source/AudioConverter.cpp | 16 +- Source/AudioEngine.cpp | 65740 +++++++++++++++- Source/AudioEngine.h | 487 +- Source/AudioRecorder.cpp | 363 +- Source/AudioRecorder.h | 42 +- Source/AutomationList.cpp | 102 +- Source/AutomationList.h | 10 +- Source/BuiltInEffects.cpp | 2051 +- Source/BuiltInEffects.h | 141 +- Source/BuiltInEffects2.cpp | 29518 ++++++- Source/BuiltInEffects2.h | 2416 +- Source/BuiltInParameterSupport.h | 320 + Source/CLAPPluginFormat.cpp | 470 +- Source/FFmpegLocator.h | 72 + Source/MIDIManager.cpp | 4 +- Source/MIDIRecorder.cpp | 64 +- Source/MIDIRecorder.h | 12 +- Source/Main.cpp | 1101 +- Source/MainComponent.cpp | 9576 ++- Source/MainComponent.h | 88 +- Source/Metronome.cpp | 713 +- Source/Metronome.h | 103 +- Source/MixerWindowManager.cpp | 569 +- Source/MixerWindowManager.h | 63 +- Source/NAMCabPresentation.cpp | 1945 + Source/NAMCabPresentation.h | 331 + Source/NAMDelayRegression.cpp | 1793 + Source/NAMDelayRegression.h | 43 + Source/NAMDelayRegressionLifecycle.cpp | 1427 + Source/NAMDelayRegressionRackTail.cpp | 1188 + Source/NAMModelSafety.h | 13 + Source/NAMPolyOctaver.cpp | 1584 + Source/NAMPolyOctaver.h | 320 + Source/OwnPitchEngine.cpp | 11 +- Source/PeakCache.h | 6 +- Source/PitchResynthesizer.cpp | 11 +- Source/PitchResynthesizer.h | 2 +- Source/PlaybackEngine.cpp | 1946 +- Source/PlaybackEngine.h | 197 +- Source/PluginManager.cpp | 1335 +- Source/PluginManager.h | 34 +- Source/PluginWindowManager.cpp | 85 +- Source/PolyResynthesizer.h | 4 +- Source/S13FXGfxEditor.cpp | 2 +- Source/S13PluginEditors.cpp | 1 - Source/S13ScriptWindow.cpp | 4 +- Source/ScriptEngine.cpp | 2 +- Source/TimecodeSync.cpp | 390 +- Source/TimecodeSync.h | 40 +- Source/TrackProcessor.cpp | 3289 +- Source/TrackProcessor.h | 372 +- Source/TunerPitchTracker.cpp | 1567 + Source/TunerPitchTracker.h | 159 + Source/VideoReader.cpp | 76 +- Source/VideoReader.h | 2 +- THIRD_PARTY_LICENSES.md | 162 +- WORKFLOWS.md | 26 +- build.py | 67 +- built_in_plugin_upgrade_status.md | 154 - cmake/ApplyJUCERealtimePatches.cmake | 310 + cmake/ApplyNAMCorePatches.cmake | 108 + .../NAMCoreA2FastCurrentBlockMirror.patch | 42 + cmake/patches/NAMCoreConvNetRealtime.patch | 227 + .../NAMCoreSlimmablePendingFastPath.patch | 115 + docs/IMPLEMENTATION_PLAN.md | 429 - docs/README.md | 38 + docs/USER_MANUAL.md | 327 +- docs/audio_midi_engine_roadmap.md | 88 - docs/audio_signal_chain_qa.md | 32 - docs/cubase-grid-quantize-parity-plan.md | 34 - docs/design-screenshot-gap-review.md | 642 - docs/engine_v3_fullclip_prototype_20260417.md | 97 - docs/features.md | 347 - docs/features.pdf | Bin 279549 -> 0 bytes docs/implemented_features.md | 73 +- docs/input-profiles.md | 140 + docs/macos-audio-fixes.md | 209 - docs/midi-editor.md | 60 + docs/nam-rack.md | 607 + docs/new_features.md | 408 - docs/openstudio-website-launch-plan.md | 704 - docs/pitch_corrector_feat_plan.md | 139 - ...ch_editor_engine_v2_implementation_plan.md | 473 - docs/pitch_editor_research_summary.md | 4523 -- docs/pitch_recovery_master_map.md | 324 - docs/pitch_renderer_research_notes.md | 35 +- docs/pitch_root_cause_research_20260417.md | 109 - docs/pr_footprint_cleanup_20260501.md | 24 - docs/qwen-daw-assistant-turboquant-plan.md | 584 - docs/release-runbook.md | 73 +- docs/release-smoke-checklist.md | 70 +- docs/roadmap.md | 57 + docs/runtime-dependency-contract.md | 77 +- docs/stable_audio_3_integration_plan.md | 148 - docs/testing.md | 243 + effects/README.txt | 6 +- frontend/.nvmrc | 1 + frontend/THIRD_PARTY_NOTICES.txt | 2613 + frontend/e2e/automation-input-runtime.spec.ts | 191 + frontend/e2e/hotkey-focus-regression.spec.ts | 145 + frontend/e2e/input-profile-exhaustive.spec.ts | 265 + frontend/e2e/input-profile-wheel.spec.ts | 210 + frontend/e2e/midi-input-meter.spec.ts | 48 + .../e2e/nam-multi-capture-lifecycle.spec.ts | 217 + .../e2e/nam-rack-approved-surfaces.spec.ts | 806 + frontend/e2e/profile-onboarding.spec.ts | 314 + frontend/e2e/shortcut-foundations.spec.ts | 305 + frontend/package-lock.json | 5454 +- frontend/package.json | 22 +- frontend/playwright.config.ts | 28 + .../scripts/generate-third-party-notices.mjs | 278 + frontend/shortcut-e2e.html | 183 + frontend/src/App.tsx | 394 +- frontend/src/MidiEditorWindowApp.tsx | 18 +- frontend/src/MixerWindowApp.tsx | 29 +- frontend/src/PluginEditorWindowApp.tsx | 127 + .../__tests__/actionCatalogIntegrity.test.ts | 569 + .../src/__tests__/aiGenerationStore.test.ts | 2 +- .../__tests__/aiToolsFeatureInstaller.test.ts | 6 +- .../__tests__/atomicShortcutMutations.test.ts | 1321 + .../src/__tests__/audioBufferOptions.test.ts | 46 + .../src/__tests__/audioDeadlineStatus.test.ts | 88 + .../automationActionRegistryRouting.test.ts | 466 + .../automationAudioMidiNamTrackFX.test.ts | 270 + .../automationCubaseReadWrite.test.ts | 28 +- .../automationInteractionCommands.test.ts | 673 + .../automationLaneHeightIntegration.test.tsx | 47 + .../__tests__/automationMoveWithItems.test.ts | 522 + .../src/__tests__/automationPointDrag.test.ts | 414 + .../automationProfileBindings.test.ts | 138 + ...tomationShortcutContextIntegration.test.ts | 170 + .../src/__tests__/browserWheelGuard.test.ts | 67 + .../builtInAutomationIdentity.test.ts | 15 + .../src/__tests__/builtInParamValue.test.ts | 56 + .../src/__tests__/builtInPluginPanel.test.tsx | 312 +- .../channelStripEQIntegration.test.ts | 31 + .../clipAndRoutingControlTransactions.test.ts | 410 + .../src/__tests__/clipNormalization.test.ts | 344 + .../clipNormalizationNativeContract.test.ts | 28 + .../commandSurfaceReachability.test.ts | 460 + .../componentScopedActionExecutors.test.ts | 283 + .../__tests__/contextWheelBehaviors.test.ts | 367 + .../contextWheelStoreMutations.test.ts | 587 + .../crossPlatformControlGestures.test.ts | 36 + .../customKeyboardProfileStore.test.ts | 389 + .../__tests__/customShortcutProfiles.test.ts | 195 + .../__tests__/detachedWindowAuthority.test.ts | 827 + .../src/__tests__/editorParityActions.test.ts | 437 + .../__tests__/editorShortcutRegistry.test.ts | 234 + .../exhaustiveInputProfileDispatch.test.ts | 748 + .../src/__tests__/externalURLSafety.test.ts | 104 + .../frontendStyleArchitecture.test.ts | 29 + .../globalLockStructuralActions.test.ts | 295 + .../__tests__/hotkeyFocusRegression.test.ts | 294 + .../src/__tests__/inputProfileHelp.test.ts | 142 + .../src/__tests__/inputProfileStore.test.ts | 178 + .../__tests__/inputProfileWindowSync.test.ts | 189 + .../__tests__/interactionSafetyGuards.test.ts | 155 +- ...keyboardShortcutsModalAvailability.test.ts | 208 + .../keyboardShortcutsPrintSafety.test.ts | 14 + .../markerRegionActionSemantics.test.ts | 155 + .../masterAutomationPointUndo.test.ts | 243 + .../__tests__/masterFXRemovalContract.test.ts | 53 + .../src/__tests__/midiEditLockSafety.test.ts | 167 + .../__tests__/midiEditorTimelineRange.test.ts | 8 +- frontend/src/__tests__/midiInputMeter.test.ts | 90 + .../mixerWindowSyncSubscription.test.ts | 76 + .../__tests__/mouseBehaviorProfiles.test.ts | 609 + .../mouseModifierIntegration.test.ts | 352 + .../__tests__/mouseModifierResolver.test.ts | 503 + .../mouseModifierTimelineBehaviors.test.ts | 129 + .../namAdvancedControlExposure.test.ts | 28 + .../__tests__/namAmpAssetIntegrity.test.ts | 83 + .../namAmpWrapperAndDriveVoiceLayout.test.ts | 222 + ...rovedSurfaceImplementationContract.test.ts | 245 + .../src/__tests__/namAssetIdentity.test.ts | 41 + .../src/__tests__/namAssetRecovery.test.ts | 69 + .../namCabPresentationFeedback.test.ts | 27 + .../__tests__/namCabRoomConsoleLayout.test.ts | 95 + .../src/__tests__/namCabinetSpace.test.ts | 195 + .../__tests__/namCaptureActivation.test.ts | 217 + .../src/__tests__/namCaptureUseFlow.test.ts | 133 + .../__tests__/namCompressorV7Controls.test.ts | 235 + .../__tests__/namCurrentDspMigration.test.ts | 701 + .../__tests__/namDelayVNextControls.test.ts | 202 + .../__tests__/namDistortionV5Controls.test.ts | 249 + .../src/__tests__/namEqTitleAlignment.test.ts | 320 + .../src/__tests__/namExplorerSession.test.ts | 170 + .../__tests__/namGraphicEqControls.test.ts | 450 + .../src/__tests__/namHardwareStandard.test.ts | 105 + .../src/__tests__/namHeaderUtility.test.tsx | 277 + frontend/src/__tests__/namInputMode.test.ts | 148 + .../__tests__/namInstrumentProfile.test.ts | 315 + frontend/src/__tests__/namMeterLevel.test.ts | 31 + .../namMultiCaptureLifecycle.test.ts | 147 + .../namNativeCapabilityFallback.test.ts | 33 + .../namParameterWheelIntegration.test.ts | 87 + .../__tests__/namPedalCaptureControls.test.ts | 51 + .../src/__tests__/namPortableState.test.ts | 179 + .../namPostFxFaceplateLayout.test.ts | 255 + frontend/src/__tests__/namPreEqV16.test.ts | 249 + .../namPrecisionDriveGateControls.test.ts | 88 + .../namPrecisionDriveVoiceV15.test.ts | 119 + .../src/__tests__/namPresetLibrary.test.ts | 135 + .../__tests__/namPresetManagerTheme.test.ts | 76 + .../__tests__/namPreviewMonitoring.test.ts | 95 + .../src/__tests__/namPreviewRecovery.test.ts | 167 + .../namProjectStateIntegrity.test.ts | 93 + .../namRackAmpCaptureLibrary.test.ts | 48 + .../__tests__/namRackControlTooltip.test.ts | 47 + .../namRackFaceplateGeometry.test.ts | 224 + ...amRackFeedbackPresentationContract.test.ts | 59 + .../__tests__/namRackMutationReadback.test.ts | 77 + .../__tests__/namRackOrderPersistence.test.ts | 48 + .../namRackPresentationFeedback.test.ts | 98 + .../namRackPresetTransactions.test.ts | 1097 + .../__tests__/namRackStyleOwnership.test.ts | 96 + .../__tests__/namRackTelemetryCadence.test.ts | 19 + .../__tests__/namReverbPadControls.test.ts | 135 + .../src/__tests__/namReverbV5Controls.test.ts | 146 + .../namToneCapturePickerAccessibility.test.ts | 33 + .../__tests__/namToneCaptureSelection.test.ts | 129 + .../src/__tests__/namToneSaveMetadata.test.ts | 472 + .../src/__tests__/namTunerTelemetry.test.ts | 140 + frontend/src/__tests__/nativePath.test.ts | 22 + .../nativeShortcutForwarding.test.ts | 26 + frontend/src/__tests__/parameterWheel.test.ts | 118 + .../__tests__/pitchEditorLockSafety.test.ts | 347 + .../pitchEditorSingleNoteOwnership.test.ts | 28 + .../profileShortcutCollisionDispatch.test.ts | 323 + .../src/__tests__/profiledRangeInput.test.tsx | 155 + .../profiledTimelineClipDrag.test.ts | 266 + ...ecordingWaveformAndRenderReporting.test.ts | 55 + .../__tests__/remainingVendorActions.test.ts | 409 + .../__tests__/renderInPlaceAlignment.test.ts | 2 +- .../reverseClipActionSemantics.test.ts | 204 + .../shortcutAssignmentConflicts.test.ts | 94 + .../__tests__/shortcutContextRouting.test.ts | 516 + .../shortcutDispatcherPlatform.test.ts | 85 + .../shortcutPlatformNormalization.test.ts | 261 + .../__tests__/shortcutProfileDispatch.test.ts | 176 + .../src/__tests__/shortcutProfiles.test.ts | 369 + .../src/__tests__/shortcutRegistry.test.ts | 43 +- .../sliderProfileWheelIntegration.test.ts | 106 + .../takeExplodeImplodeSemantics.test.ts | 316 + .../tempoMarkerActionSemantics.test.ts | 92 + ...timelineClipContextMenuIntegration.test.ts | 97 + .../timelineClipContextSelection.test.ts | 32 + .../__tests__/timelineClipEdgeSnap.test.ts | 287 + .../__tests__/timelineClipGestureLock.test.ts | 102 + .../src/__tests__/timelineClipStretch.test.ts | 252 + .../timelineClipboardPasteSemantics.test.ts | 201 + .../__tests__/timelineDragAxisLock.test.ts | 23 + .../src/__tests__/timelineGestureUndo.test.ts | 132 + .../timelineQuantizeSemantics.test.ts | 166 + .../src/__tests__/timelineSlipEditing.test.ts | 109 + .../timelineSplitTransaction.test.ts | 856 + .../timelineTimeSelectionEditing.test.ts | 356 + .../timelineTimeSelectionSplit.test.ts | 167 + .../src/__tests__/timelineTrackDrop.test.ts | 8 + .../__tests__/timelineZoomSemantics.test.ts | 168 + .../__tests__/tone3000InfiniteAppend.test.ts | 105 + .../src/__tests__/tone3000LiveSearch.test.ts | 110 + .../src/__tests__/tone3000MockSearch.test.ts | 334 + .../src/__tests__/tone3000Session.test.ts | 128 + .../src/__tests__/trackBatchRename.test.ts | 199 + .../src/__tests__/transportRecording.test.ts | 128 +- .../__tests__/undoableDAWMutations.test.ts | 989 + .../__tests__/wheelDeltaAccumulator.test.ts | 72 + .../__tests__/wheelGestureResolver.test.ts | 625 + .../__tests__/workspaceStickyHeader.test.ts | 10 + frontend/src/assets/nam/amp-cab-card-v2.webp | Bin 0 -> 20180 bytes .../src/assets/nam/amp-cab-premium-front.webp | Bin 0 -> 351676 bytes .../src/assets/nam/amp-cab-premium-v2.webp | Bin 0 -> 137978 bytes frontend/src/assets/nam/cab-card.webp | Bin 0 -> 25962 bytes .../assets/nam/controls/knob-black-atlas.webp | Bin 0 -> 1076530 bytes .../assets/nam/controls/knob-cream-atlas.webp | Bin 0 -> 1251412 bytes .../assets/nam/controls/knob-metal-atlas.webp | Bin 0 -> 1119192 bytes .../nam/design/bodies/amp-head-body-v4.webp | Bin 0 -> 389974 bytes .../nam/design/bodies/amp-head-body-v5.webp | Bin 0 -> 1327822 bytes .../nam/design/bodies/amp-head-body-wide.webp | Bin 0 -> 133312 bytes .../nam/design/bodies/amp-head-body.webp | Bin 0 -> 198330 bytes .../bodies/cab-room-integrated-body.webp | Bin 0 -> 772366 bytes .../nam/design/bodies/cabinet-body.webp | Bin 0 -> 389480 bytes .../nam/design/bodies/graphic-eq-body-v3.webp | Bin 0 -> 38030 bytes .../nam/design/bodies/graphic-eq-body-v6.webp | Bin 0 -> 94054 bytes .../design/bodies/ir-shaper-panel-body.webp | Bin 0 -> 98944 bytes .../nam/design/bodies/mic-panel-body.webp | Bin 0 -> 36338 bytes .../bodies/stompbox-body-blue-wide.webp | Bin 0 -> 430572 bytes .../nam/design/bodies/stompbox-body-blue.webp | Bin 0 -> 207858 bytes .../bodies/stompbox-body-dark-wide.webp | Bin 0 -> 121448 bytes .../nam/design/bodies/stompbox-body-dark.webp | Bin 0 -> 91496 bytes .../design/bodies/stompbox-body-olive.webp | Bin 0 -> 150244 bytes .../design/bodies/stompbox-body-red-wide.webp | Bin 0 -> 198240 bytes .../nam/design/bodies/stompbox-body-red.webp | Bin 0 -> 167176 bytes .../design/bodies/stompbox-body-stone.webp | Bin 0 -> 160116 bytes .../bodies/stompbox-body-white-wide.webp | Bin 0 -> 136994 bytes .../bodies/wide-pedal-body-copper-deep.webp | Bin 0 -> 562966 bytes .../bodies/wide-pedal-body-copper-tall.webp | Bin 0 -> 393690 bytes .../design/bodies/wide-pedal-body-copper.webp | Bin 0 -> 396122 bytes .../bodies/wide-pedal-body-dark-deep.webp | Bin 0 -> 187366 bytes .../bodies/wide-pedal-body-dark-tall.webp | Bin 0 -> 94244 bytes .../design/bodies/wide-pedal-body-dark.webp | Bin 0 -> 141052 bytes .../bodies/wide-pedal-body-navy-deep.webp | Bin 0 -> 320484 bytes .../bodies/wide-pedal-body-navy-tall.webp | Bin 0 -> 134944 bytes .../design/bodies/wide-pedal-body-navy.webp | Bin 0 -> 254622 bytes .../nam/design/controls/button-black-top.webp | Bin 0 -> 48284 bytes .../controls/footswitch-chrome-off-top.webp | Bin 0 -> 53602 bytes .../controls/footswitch-chrome-on-top.webp | Bin 0 -> 53602 bytes .../footswitch-chrome-pressed-top.webp | Bin 0 -> 58304 bytes .../design/controls/knob-black-panel-v4.webp | Bin 0 -> 36350 bytes .../nam/design/controls/knob-black-top.webp | Bin 0 -> 38750 bytes .../controls/knob-blue-steel-panel-v4.webp | Bin 0 -> 42868 bytes .../design/controls/knob-blue-steel-top.webp | Bin 0 -> 134122 bytes .../nam/design/controls/knob-cream-top.webp | Bin 0 -> 25522 bytes .../nam/design/controls/knob-metal-top.webp | Bin 0 -> 44664 bytes .../controls/led-amber-off-panel-v4.webp | Bin 0 -> 29188 bytes .../design/controls/led-amber-off-top.webp | Bin 0 -> 30850 bytes .../controls/led-amber-on-panel-v4.webp | Bin 0 -> 34742 bytes .../nam/design/controls/led-amber-on-top.webp | Bin 0 -> 39362 bytes .../nam/design/controls/mic-dynamic-57.webp | Bin 0 -> 3086 bytes .../nam/design/controls/mic-ribbon-121.webp | Bin 0 -> 1942 bytes .../design/controls/screw-phillips-top.webp | Bin 0 -> 40826 bytes .../design/controls/slider-metal-cap-v4.webp | Bin 0 -> 41970 bytes .../nam/design/controls/slider-metal-top.webp | Bin 0 -> 32592 bytes .../controls/toggle-chrome-panel-v4.webp | Bin 0 -> 37406 bytes .../design/controls/toggle-chrome-top.webp | Bin 0 -> 38074 bytes .../design/controls/washer-chrome-top.webp | Bin 0 -> 37452 bytes .../src/assets/nam/fx-chorus-library-v1.webp | Bin 0 -> 80068 bytes .../assets/nam/pedal-boost-library-v1.webp | Bin 0 -> 46918 bytes frontend/src/assets/nam/pedal-card-v2.webp | Bin 0 -> 18414 bytes .../nam/pedal-distortion-library-v1.webp | Bin 0 -> 59164 bytes .../src/assets/nam/pedal-fuzz-library-v1.webp | Bin 0 -> 97698 bytes .../nam/pedal-overdrive-library-v1.webp | Bin 0 -> 40868 bytes frontend/src/assets/nam/pedal-premium-v2.webp | Bin 0 -> 110580 bytes .../assets/nam/rack-studio-backdrop-v2.webp | Bin 0 -> 212886 bytes .../src/assets/nam/room-ir-library-v1.webp | Bin 0 -> 60188 bytes frontend/src/components/AITrackHeader.tsx | 52 +- frontend/src/components/AIWorkflowModal.tsx | 6 + .../src/components/AIWorkflowParamField.tsx | 6 + frontend/src/components/AiToolsSetupModal.tsx | 29 +- .../src/components/BuiltInPluginPanel.tsx | 868 +- frontend/src/components/ChannelStrip.tsx | 182 +- .../src/components/ChannelStripEQModal.tsx | 65 +- .../src/components/ClipPropertiesPanel.tsx | 147 +- frontend/src/components/ColorPicker.tsx | 17 +- frontend/src/components/CommandPalette.tsx | 45 +- frontend/src/components/ContextMenu.tsx | 35 +- frontend/src/components/CorrectPitchModal.tsx | 11 +- .../CustomKeyboardProfileManager.tsx | 191 + .../src/components/EnvelopeManagerModal.tsx | 64 +- .../src/components/EssentialControlsCard.tsx | 91 +- frontend/src/components/FXChainPanel.css | 4995 +- frontend/src/components/FXChainPanel.tsx | 613 +- .../src/components/GettingStartedGuide.tsx | 212 +- frontend/src/components/HelpOverlay.tsx | 141 +- .../components/InputProfileOnboardingCard.tsx | 69 + .../src/components/InputProfileSelectors.tsx | 127 + .../src/components/KeyboardShortcutsModal.tsx | 659 +- .../src/components/KeyboardShortcutsPrint.css | 104 + frontend/src/components/MainToolbar.tsx | 96 +- frontend/src/components/MasterTrackHeader.tsx | 49 +- frontend/src/components/MediaExplorer.tsx | 64 +- frontend/src/components/MenuBar.tsx | 22 +- .../src/components/MissingMediaResolver.tsx | 331 +- frontend/src/components/MixerPanel.tsx | 91 +- frontend/src/components/NAMCabPresentation.ts | 102 + frontend/src/components/NAMCompactChain.css | 431 + frontend/src/components/NAMCompactChain.tsx | 233 + frontend/src/components/NAMDesignAssets.ts | 191 + frontend/src/components/NAMExplorer.tsx | 9074 +++ .../src/components/NAMPresetManagerModal.css | 646 + .../src/components/NAMPresetManagerModal.tsx | 489 + frontend/src/components/NAMRackBrowser.css | 1458 + .../src/components/NAMRackCalibration.css | 353 + .../src/components/NAMRackChainModule.css | 657 + .../src/components/NAMRackChainModule.tsx | 191 + .../src/components/NAMRackControlAssets.ts | 82 + .../src/components/NAMRackControlTooltip.css | 73 + .../src/components/NAMRackControlTooltip.tsx | 193 + frontend/src/components/NAMRackDesignPort.css | 447 + frontend/src/components/NAMRackDesignPort.tsx | 7645 ++ .../NAMRackDesignPortSourceFlow.css | 1344 + .../src/components/NAMRackDiagnostics.css | 89 + .../src/components/NAMRackDiagnostics.tsx | 57 + frontend/src/components/NAMRackFooter.css | 153 + frontend/src/components/NAMRackHardware.css | 1092 + frontend/src/components/NAMRackHeader.css | 1567 + frontend/src/components/NAMRackKnob.css | 428 + frontend/src/components/NAMRackKnob.tsx | 297 + frontend/src/components/NAMRackMixer.css | 1352 + frontend/src/components/NAMRackMixer.tsx | 380 + frontend/src/components/NAMRackNeural.css | 2972 + frontend/src/components/NAMRackPanel.css | 3688 + frontend/src/components/NAMRackPanel.tsx | 7725 ++ frontend/src/components/NAMRackPedalboard.css | 798 + frontend/src/components/NAMRackPresets.css | 1289 + frontend/src/components/NAMRackSourceFlow.css | 764 + frontend/src/components/NAMRackStage.css | 2076 + .../src/components/NAMSignalChainTypes.ts | 67 + .../src/components/NAMToneCapturePicker.css | 196 + .../src/components/NAMToneCapturePicker.tsx | 138 + frontend/src/components/NAMToneSave.tsx | 797 + .../ParametricGraph/ParametricGraph.tsx | 12 +- frontend/src/components/PeakMeter.tsx | 82 +- frontend/src/components/PianoRoll.css | 2 +- frontend/src/components/PianoRoll.tsx | 1367 +- .../PianoRollControllerLaneSection.tsx | 6 +- frontend/src/components/PianoRollToolbar.tsx | 13 +- .../src/components/PitchCorrectorPanel.tsx | 11 +- .../src/components/PitchEditorLowerZone.tsx | 244 +- frontend/src/components/PluginBrowser.tsx | 908 +- frontend/src/components/PreferencesModal.tsx | 240 +- .../src/components/RegionRenderMatrix.tsx | 7 +- frontend/src/components/RenderModal.tsx | 42 +- frontend/src/components/RoutingMatrix.tsx | 45 +- frontend/src/components/ScriptEditor.tsx | 86 +- frontend/src/components/SettingsModal.tsx | 260 +- .../src/components/SortableTrackHeader.tsx | 56 +- frontend/src/components/Timeline.tsx | 3466 +- frontend/src/components/TimelineRuler.tsx | 99 +- frontend/src/components/TrackHeader.tsx | 140 +- frontend/src/components/TrackNameEditor.tsx | 123 + frontend/src/components/TrackRoutingModal.tsx | 353 +- frontend/src/components/TransportBar.tsx | 13 +- frontend/src/components/icons.tsx | 52 +- frontend/src/components/menus/EditMenu.tsx | 74 +- .../src/components/menus/MenuDropdown.tsx | 29 +- frontend/src/components/meterConfig.ts | 2 + .../components/namRackFaceplateGeometry.ts | 635 + frontend/src/components/ui/Knob/Knob.tsx | 131 +- frontend/src/components/ui/Modal/Modal.tsx | 30 +- .../ui/NativeSelect/NativeSelect.tsx | 6 +- .../ProfiledRangeInput/ProfiledRangeInput.tsx | 247 + .../ProfiledRangeInput.types.ts | 16 + .../components/ui/ProfiledRangeInput/index.ts | 2 + frontend/src/components/ui/Slider/Slider.tsx | 228 +- .../src/components/ui/Slider/Slider.types.ts | 6 + .../components/ui/editTransactionLifecycle.ts | 33 + frontend/src/components/ui/index.ts | 4 + frontend/src/e2e/shortcutHarness.ts | 504 + frontend/src/index.css | 67 + frontend/src/main.tsx | 88 +- frontend/src/services/NativeBridge.ts | 3371 +- frontend/src/services/namExplorerSession.ts | 253 + frontend/src/services/tone3000Session.ts | 254 + frontend/src/store/actionRegistry.ts | 2183 +- frontend/src/store/actions/automation.ts | 1979 +- frontend/src/store/actions/clipEditing.ts | 3648 +- frontend/src/store/actions/clipLauncher.ts | 62 + frontend/src/store/actions/clips.ts | 284 +- frontend/src/store/actions/markers.ts | 266 +- frontend/src/store/actions/metering.ts | 15 +- frontend/src/store/actions/midi.ts | 200 +- frontend/src/store/actions/mixer.ts | 801 +- frontend/src/store/actions/project.ts | 540 +- frontend/src/store/actions/quantize.ts | 135 +- frontend/src/store/actions/rendering.ts | 1279 +- frontend/src/store/actions/routing.ts | 130 +- .../src/store/actions/timeSelectionEditing.ts | 891 + frontend/src/store/actions/tracks.ts | 2412 +- frontend/src/store/actions/transport.ts | 66 +- frontend/src/store/automationParams.ts | 4 + frontend/src/store/commands/CommandManager.ts | 70 + frontend/src/store/commands/index.ts | 2 +- frontend/src/store/pitchEditorStore.ts | 502 +- frontend/src/store/useDAWStore.ts | 1432 +- frontend/src/utils/audioBufferOptions.ts | 51 + frontend/src/utils/audioDeadlineStatus.ts | 75 + .../src/utils/audioPerformanceAdvisory.ts | 53 + frontend/src/utils/automationPointDrag.ts | 127 + .../src/utils/automationShortcutContext.ts | 26 + frontend/src/utils/browserWheelGuard.ts | 48 + frontend/src/utils/builtInParamValue.ts | 438 + frontend/src/utils/clipEditLock.ts | 65 + frontend/src/utils/contextWheelBehaviors.ts | 428 + frontend/src/utils/customShortcutProfiles.ts | 376 + .../src/utils/detachedMainActionRouting.ts | 613 + frontend/src/utils/fxChain.ts | 4 +- .../src/utils/globalShortcutDispatcher.ts | 469 +- frontend/src/utils/helpTexts.ts | 29 +- frontend/src/utils/inputProfileHelp.ts | 172 + frontend/src/utils/inputProfileWindowSync.ts | 161 + frontend/src/utils/midiEditorWindowSync.ts | 721 +- frontend/src/utils/midiNotes.ts | 56 + frontend/src/utils/mixerWindowSync.ts | 602 +- frontend/src/utils/modalEventGuards.ts | 37 + frontend/src/utils/modalShortcutScope.ts | 201 + frontend/src/utils/mouseBehaviorProfiles.ts | 885 + .../src/utils/mouseModifierPersistence.ts | 114 + frontend/src/utils/mouseModifierResolver.ts | 465 + .../utils/mouseModifierTimelineBehaviors.ts | 125 + frontend/src/utils/namAssetIdentity.ts | 67 + frontend/src/utils/namAssetRecovery.ts | 55 + frontend/src/utils/namCalibrationSummary.ts | 38 + frontend/src/utils/namCaptureActivation.ts | 224 + frontend/src/utils/namCaptureType.ts | 123 + frontend/src/utils/namDetachedRuntime.ts | 140 + frontend/src/utils/namDisplayName.ts | 259 + frontend/src/utils/namInstrumentProfile.ts | 269 + frontend/src/utils/namMeterLevel.ts | 68 + frontend/src/utils/namPortableState.ts | 184 + frontend/src/utils/namPresetLibrary.ts | 87 + frontend/src/utils/namProjectState.ts | 107 + .../src/utils/namRackAmpCaptureLibrary.ts | 115 + frontend/src/utils/namRackMutationReadback.ts | 72 + frontend/src/utils/namRackOrderPersistence.ts | 38 + .../src/utils/namRackPresentationFeedback.ts | 219 + .../src/utils/namRackPresetTransactions.ts | 1162 + frontend/src/utils/namRackTelemetryCadence.ts | 7 + frontend/src/utils/namToneCaptureSelection.ts | 144 + frontend/src/utils/namTunerTelemetry.ts | 124 + frontend/src/utils/nativePath.ts | 14 + frontend/src/utils/parameterWheel.ts | 119 + frontend/src/utils/platform.ts | 617 +- .../src/utils/profiledTimelineClipDrag.ts | 99 + frontend/src/utils/sharedTransportSync.ts | 20 +- .../src/utils/shortcutAssignmentConflicts.ts | 119 + frontend/src/utils/shortcutContext.ts | 315 + frontend/src/utils/shortcutProfiles.ts | 1172 + .../src/utils/timelineClipContextSelection.ts | 20 + frontend/src/utils/timelineClipEdgeSnap.ts | 251 + frontend/src/utils/timelineClipStretch.ts | 114 + frontend/src/utils/timelineClipboard.ts | 57 + frontend/src/utils/timelineDragAxisLock.ts | 19 + frontend/src/utils/timelineGestureUndo.ts | 97 + frontend/src/utils/tone3000InfiniteAppend.ts | 89 + frontend/src/utils/tone3000LiveSearch.ts | 131 + frontend/src/utils/trackCreation.ts | 10 +- frontend/src/utils/trackFolderGrouping.ts | 100 + frontend/src/utils/trackMeterPresentation.ts | 36 + frontend/src/utils/trackMonitorOwnership.ts | 106 + frontend/src/utils/trackRename.ts | 76 + frontend/src/utils/vendorNavigation.ts | 134 + frontend/src/utils/wheelDeltaAccumulator.ts | 150 + frontend/src/utils/wheelGestureResolver.ts | 711 + frontend/vite.config.ts | 5 +- midi_editor_reference_matrix.md | 102 - midi_instrument_editor_feat_plan.md | 379 - resources/models/basic_pitch_nmp.onnx | Bin 0 -> 230444 bytes .../models/basic_pitch_nmp.provenance.json | 12 + thirdparty/basic-pitch/LICENSE | 203 + thirdparty/basic-pitch/NOTICE | 31 + thirdparty/ffmpeg/COPYING.GPLv3 | 674 + thirdparty/ffmpeg/PROVENANCE.json | 18 + thirdparty/signalsmith/LICENSE.txt | 21 + .../signalsmith-linear/LICENSE.txt | 21 + tools/ai-generation-ui-harness.mjs | 4 +- tools/generate_music.py | 16 +- tools/generate_nam_control_assets.mjs | 189 + tools/inspect-installed-windows-app.ps1 | 7 +- tools/midi-editor-acceptance-harness.mjs | 4 +- tools/nam-rack-visual-harness.mjs | 3096 + tools/package-linux-release.sh | 14 +- tools/package-macos-release.sh | 31 +- tools/prepare-nam-amp-gain-asset.mjs | 74 + tools/render-native-ui-harness.mjs | 231 + .../run-clean-guitar-headless-regression.ps1 | 88 + tools/run-nam-rack-di-headless-regression.ps1 | 288 + tools/run-nam-rack-headless-regression.ps1 | 91 + tools/run-plugin-scan-headless-regression.ps1 | 36 + tools/run-window-lifecycle-smoke.ps1 | 83 + tools/setup-asio-sdk.ps1 | 8 + tools/setup-ffmpeg.ps1 | 26 +- tools/setup-linux-prereqs.sh | 1 + tools/setup-onnxruntime.ps1 | 116 +- tools/setup-windows-prereqs.ps1 | 33 +- tools/stable_audio3_generate.py | 196 +- tools/stem_separator.py | 4 +- tools/test_stable_audio3_generate.py | 111 + tools/validate-runtime-bundle.ps1 | 133 +- 587 files changed, 274730 insertions(+), 26822 deletions(-) delete mode 100644 .claude/settings.local.json create mode 100644 .gitattributes create mode 100644 .github/CODEOWNERS create mode 100644 .github/ISSUE_TEMPLATE/window-or-startup-failure.yml create mode 100644 Source/BuiltInParameterSupport.h create mode 100644 Source/FFmpegLocator.h create mode 100644 Source/NAMCabPresentation.cpp create mode 100644 Source/NAMCabPresentation.h create mode 100644 Source/NAMDelayRegression.cpp create mode 100644 Source/NAMDelayRegression.h create mode 100644 Source/NAMDelayRegressionLifecycle.cpp create mode 100644 Source/NAMDelayRegressionRackTail.cpp create mode 100644 Source/NAMModelSafety.h create mode 100644 Source/NAMPolyOctaver.cpp create mode 100644 Source/NAMPolyOctaver.h create mode 100644 Source/TunerPitchTracker.cpp create mode 100644 Source/TunerPitchTracker.h delete mode 100644 built_in_plugin_upgrade_status.md create mode 100644 cmake/ApplyJUCERealtimePatches.cmake create mode 100644 cmake/ApplyNAMCorePatches.cmake create mode 100644 cmake/patches/NAMCoreA2FastCurrentBlockMirror.patch create mode 100644 cmake/patches/NAMCoreConvNetRealtime.patch create mode 100644 cmake/patches/NAMCoreSlimmablePendingFastPath.patch delete mode 100644 docs/IMPLEMENTATION_PLAN.md create mode 100644 docs/README.md delete mode 100644 docs/audio_midi_engine_roadmap.md delete mode 100644 docs/audio_signal_chain_qa.md delete mode 100644 docs/cubase-grid-quantize-parity-plan.md delete mode 100644 docs/design-screenshot-gap-review.md delete mode 100644 docs/engine_v3_fullclip_prototype_20260417.md delete mode 100644 docs/features.md delete mode 100644 docs/features.pdf create mode 100644 docs/input-profiles.md delete mode 100644 docs/macos-audio-fixes.md create mode 100644 docs/midi-editor.md create mode 100644 docs/nam-rack.md delete mode 100644 docs/new_features.md delete mode 100644 docs/openstudio-website-launch-plan.md delete mode 100644 docs/pitch_corrector_feat_plan.md delete mode 100644 docs/pitch_editor_engine_v2_implementation_plan.md delete mode 100644 docs/pitch_editor_research_summary.md delete mode 100644 docs/pitch_recovery_master_map.md delete mode 100644 docs/pitch_root_cause_research_20260417.md delete mode 100644 docs/pr_footprint_cleanup_20260501.md delete mode 100644 docs/qwen-daw-assistant-turboquant-plan.md create mode 100644 docs/roadmap.md delete mode 100644 docs/stable_audio_3_integration_plan.md create mode 100644 docs/testing.md create mode 100644 frontend/.nvmrc create mode 100644 frontend/THIRD_PARTY_NOTICES.txt create mode 100644 frontend/e2e/automation-input-runtime.spec.ts create mode 100644 frontend/e2e/hotkey-focus-regression.spec.ts create mode 100644 frontend/e2e/input-profile-exhaustive.spec.ts create mode 100644 frontend/e2e/input-profile-wheel.spec.ts create mode 100644 frontend/e2e/midi-input-meter.spec.ts create mode 100644 frontend/e2e/nam-multi-capture-lifecycle.spec.ts create mode 100644 frontend/e2e/nam-rack-approved-surfaces.spec.ts create mode 100644 frontend/e2e/profile-onboarding.spec.ts create mode 100644 frontend/e2e/shortcut-foundations.spec.ts create mode 100644 frontend/playwright.config.ts create mode 100644 frontend/scripts/generate-third-party-notices.mjs create mode 100644 frontend/shortcut-e2e.html create mode 100644 frontend/src/PluginEditorWindowApp.tsx create mode 100644 frontend/src/__tests__/actionCatalogIntegrity.test.ts create mode 100644 frontend/src/__tests__/atomicShortcutMutations.test.ts create mode 100644 frontend/src/__tests__/audioBufferOptions.test.ts create mode 100644 frontend/src/__tests__/audioDeadlineStatus.test.ts create mode 100644 frontend/src/__tests__/automationActionRegistryRouting.test.ts create mode 100644 frontend/src/__tests__/automationAudioMidiNamTrackFX.test.ts create mode 100644 frontend/src/__tests__/automationInteractionCommands.test.ts create mode 100644 frontend/src/__tests__/automationLaneHeightIntegration.test.tsx create mode 100644 frontend/src/__tests__/automationMoveWithItems.test.ts create mode 100644 frontend/src/__tests__/automationPointDrag.test.ts create mode 100644 frontend/src/__tests__/automationProfileBindings.test.ts create mode 100644 frontend/src/__tests__/automationShortcutContextIntegration.test.ts create mode 100644 frontend/src/__tests__/browserWheelGuard.test.ts create mode 100644 frontend/src/__tests__/builtInAutomationIdentity.test.ts create mode 100644 frontend/src/__tests__/builtInParamValue.test.ts create mode 100644 frontend/src/__tests__/channelStripEQIntegration.test.ts create mode 100644 frontend/src/__tests__/clipAndRoutingControlTransactions.test.ts create mode 100644 frontend/src/__tests__/clipNormalization.test.ts create mode 100644 frontend/src/__tests__/clipNormalizationNativeContract.test.ts create mode 100644 frontend/src/__tests__/commandSurfaceReachability.test.ts create mode 100644 frontend/src/__tests__/componentScopedActionExecutors.test.ts create mode 100644 frontend/src/__tests__/contextWheelBehaviors.test.ts create mode 100644 frontend/src/__tests__/contextWheelStoreMutations.test.ts create mode 100644 frontend/src/__tests__/crossPlatformControlGestures.test.ts create mode 100644 frontend/src/__tests__/customKeyboardProfileStore.test.ts create mode 100644 frontend/src/__tests__/customShortcutProfiles.test.ts create mode 100644 frontend/src/__tests__/detachedWindowAuthority.test.ts create mode 100644 frontend/src/__tests__/editorParityActions.test.ts create mode 100644 frontend/src/__tests__/editorShortcutRegistry.test.ts create mode 100644 frontend/src/__tests__/exhaustiveInputProfileDispatch.test.ts create mode 100644 frontend/src/__tests__/externalURLSafety.test.ts create mode 100644 frontend/src/__tests__/frontendStyleArchitecture.test.ts create mode 100644 frontend/src/__tests__/globalLockStructuralActions.test.ts create mode 100644 frontend/src/__tests__/hotkeyFocusRegression.test.ts create mode 100644 frontend/src/__tests__/inputProfileHelp.test.ts create mode 100644 frontend/src/__tests__/inputProfileStore.test.ts create mode 100644 frontend/src/__tests__/inputProfileWindowSync.test.ts create mode 100644 frontend/src/__tests__/keyboardShortcutsModalAvailability.test.ts create mode 100644 frontend/src/__tests__/keyboardShortcutsPrintSafety.test.ts create mode 100644 frontend/src/__tests__/markerRegionActionSemantics.test.ts create mode 100644 frontend/src/__tests__/masterAutomationPointUndo.test.ts create mode 100644 frontend/src/__tests__/masterFXRemovalContract.test.ts create mode 100644 frontend/src/__tests__/midiEditLockSafety.test.ts create mode 100644 frontend/src/__tests__/midiInputMeter.test.ts create mode 100644 frontend/src/__tests__/mixerWindowSyncSubscription.test.ts create mode 100644 frontend/src/__tests__/mouseBehaviorProfiles.test.ts create mode 100644 frontend/src/__tests__/mouseModifierIntegration.test.ts create mode 100644 frontend/src/__tests__/mouseModifierResolver.test.ts create mode 100644 frontend/src/__tests__/mouseModifierTimelineBehaviors.test.ts create mode 100644 frontend/src/__tests__/namAdvancedControlExposure.test.ts create mode 100644 frontend/src/__tests__/namAmpAssetIntegrity.test.ts create mode 100644 frontend/src/__tests__/namAmpWrapperAndDriveVoiceLayout.test.ts create mode 100644 frontend/src/__tests__/namApprovedSurfaceImplementationContract.test.ts create mode 100644 frontend/src/__tests__/namAssetIdentity.test.ts create mode 100644 frontend/src/__tests__/namAssetRecovery.test.ts create mode 100644 frontend/src/__tests__/namCabPresentationFeedback.test.ts create mode 100644 frontend/src/__tests__/namCabRoomConsoleLayout.test.ts create mode 100644 frontend/src/__tests__/namCabinetSpace.test.ts create mode 100644 frontend/src/__tests__/namCaptureActivation.test.ts create mode 100644 frontend/src/__tests__/namCaptureUseFlow.test.ts create mode 100644 frontend/src/__tests__/namCompressorV7Controls.test.ts create mode 100644 frontend/src/__tests__/namCurrentDspMigration.test.ts create mode 100644 frontend/src/__tests__/namDelayVNextControls.test.ts create mode 100644 frontend/src/__tests__/namDistortionV5Controls.test.ts create mode 100644 frontend/src/__tests__/namEqTitleAlignment.test.ts create mode 100644 frontend/src/__tests__/namExplorerSession.test.ts create mode 100644 frontend/src/__tests__/namGraphicEqControls.test.ts create mode 100644 frontend/src/__tests__/namHardwareStandard.test.ts create mode 100644 frontend/src/__tests__/namHeaderUtility.test.tsx create mode 100644 frontend/src/__tests__/namInputMode.test.ts create mode 100644 frontend/src/__tests__/namInstrumentProfile.test.ts create mode 100644 frontend/src/__tests__/namMeterLevel.test.ts create mode 100644 frontend/src/__tests__/namMultiCaptureLifecycle.test.ts create mode 100644 frontend/src/__tests__/namNativeCapabilityFallback.test.ts create mode 100644 frontend/src/__tests__/namParameterWheelIntegration.test.ts create mode 100644 frontend/src/__tests__/namPedalCaptureControls.test.ts create mode 100644 frontend/src/__tests__/namPortableState.test.ts create mode 100644 frontend/src/__tests__/namPostFxFaceplateLayout.test.ts create mode 100644 frontend/src/__tests__/namPreEqV16.test.ts create mode 100644 frontend/src/__tests__/namPrecisionDriveGateControls.test.ts create mode 100644 frontend/src/__tests__/namPrecisionDriveVoiceV15.test.ts create mode 100644 frontend/src/__tests__/namPresetLibrary.test.ts create mode 100644 frontend/src/__tests__/namPresetManagerTheme.test.ts create mode 100644 frontend/src/__tests__/namPreviewMonitoring.test.ts create mode 100644 frontend/src/__tests__/namPreviewRecovery.test.ts create mode 100644 frontend/src/__tests__/namProjectStateIntegrity.test.ts create mode 100644 frontend/src/__tests__/namRackAmpCaptureLibrary.test.ts create mode 100644 frontend/src/__tests__/namRackControlTooltip.test.ts create mode 100644 frontend/src/__tests__/namRackFaceplateGeometry.test.ts create mode 100644 frontend/src/__tests__/namRackFeedbackPresentationContract.test.ts create mode 100644 frontend/src/__tests__/namRackMutationReadback.test.ts create mode 100644 frontend/src/__tests__/namRackOrderPersistence.test.ts create mode 100644 frontend/src/__tests__/namRackPresentationFeedback.test.ts create mode 100644 frontend/src/__tests__/namRackPresetTransactions.test.ts create mode 100644 frontend/src/__tests__/namRackStyleOwnership.test.ts create mode 100644 frontend/src/__tests__/namRackTelemetryCadence.test.ts create mode 100644 frontend/src/__tests__/namReverbPadControls.test.ts create mode 100644 frontend/src/__tests__/namReverbV5Controls.test.ts create mode 100644 frontend/src/__tests__/namToneCapturePickerAccessibility.test.ts create mode 100644 frontend/src/__tests__/namToneCaptureSelection.test.ts create mode 100644 frontend/src/__tests__/namToneSaveMetadata.test.ts create mode 100644 frontend/src/__tests__/namTunerTelemetry.test.ts create mode 100644 frontend/src/__tests__/nativePath.test.ts create mode 100644 frontend/src/__tests__/nativeShortcutForwarding.test.ts create mode 100644 frontend/src/__tests__/parameterWheel.test.ts create mode 100644 frontend/src/__tests__/pitchEditorLockSafety.test.ts create mode 100644 frontend/src/__tests__/profileShortcutCollisionDispatch.test.ts create mode 100644 frontend/src/__tests__/profiledRangeInput.test.tsx create mode 100644 frontend/src/__tests__/profiledTimelineClipDrag.test.ts create mode 100644 frontend/src/__tests__/recordingWaveformAndRenderReporting.test.ts create mode 100644 frontend/src/__tests__/remainingVendorActions.test.ts create mode 100644 frontend/src/__tests__/reverseClipActionSemantics.test.ts create mode 100644 frontend/src/__tests__/shortcutAssignmentConflicts.test.ts create mode 100644 frontend/src/__tests__/shortcutContextRouting.test.ts create mode 100644 frontend/src/__tests__/shortcutDispatcherPlatform.test.ts create mode 100644 frontend/src/__tests__/shortcutPlatformNormalization.test.ts create mode 100644 frontend/src/__tests__/shortcutProfileDispatch.test.ts create mode 100644 frontend/src/__tests__/shortcutProfiles.test.ts create mode 100644 frontend/src/__tests__/sliderProfileWheelIntegration.test.ts create mode 100644 frontend/src/__tests__/takeExplodeImplodeSemantics.test.ts create mode 100644 frontend/src/__tests__/tempoMarkerActionSemantics.test.ts create mode 100644 frontend/src/__tests__/timelineClipContextMenuIntegration.test.ts create mode 100644 frontend/src/__tests__/timelineClipContextSelection.test.ts create mode 100644 frontend/src/__tests__/timelineClipEdgeSnap.test.ts create mode 100644 frontend/src/__tests__/timelineClipGestureLock.test.ts create mode 100644 frontend/src/__tests__/timelineClipStretch.test.ts create mode 100644 frontend/src/__tests__/timelineClipboardPasteSemantics.test.ts create mode 100644 frontend/src/__tests__/timelineGestureUndo.test.ts create mode 100644 frontend/src/__tests__/timelineQuantizeSemantics.test.ts create mode 100644 frontend/src/__tests__/timelineSlipEditing.test.ts create mode 100644 frontend/src/__tests__/timelineSplitTransaction.test.ts create mode 100644 frontend/src/__tests__/timelineTimeSelectionEditing.test.ts create mode 100644 frontend/src/__tests__/timelineTimeSelectionSplit.test.ts create mode 100644 frontend/src/__tests__/timelineZoomSemantics.test.ts create mode 100644 frontend/src/__tests__/tone3000InfiniteAppend.test.ts create mode 100644 frontend/src/__tests__/tone3000LiveSearch.test.ts create mode 100644 frontend/src/__tests__/tone3000MockSearch.test.ts create mode 100644 frontend/src/__tests__/tone3000Session.test.ts create mode 100644 frontend/src/__tests__/trackBatchRename.test.ts create mode 100644 frontend/src/__tests__/undoableDAWMutations.test.ts create mode 100644 frontend/src/__tests__/wheelDeltaAccumulator.test.ts create mode 100644 frontend/src/__tests__/wheelGestureResolver.test.ts create mode 100644 frontend/src/assets/nam/amp-cab-card-v2.webp create mode 100644 frontend/src/assets/nam/amp-cab-premium-front.webp create mode 100644 frontend/src/assets/nam/amp-cab-premium-v2.webp create mode 100644 frontend/src/assets/nam/cab-card.webp create mode 100644 frontend/src/assets/nam/controls/knob-black-atlas.webp create mode 100644 frontend/src/assets/nam/controls/knob-cream-atlas.webp create mode 100644 frontend/src/assets/nam/controls/knob-metal-atlas.webp create mode 100644 frontend/src/assets/nam/design/bodies/amp-head-body-v4.webp create mode 100644 frontend/src/assets/nam/design/bodies/amp-head-body-v5.webp create mode 100644 frontend/src/assets/nam/design/bodies/amp-head-body-wide.webp create mode 100644 frontend/src/assets/nam/design/bodies/amp-head-body.webp create mode 100644 frontend/src/assets/nam/design/bodies/cab-room-integrated-body.webp create mode 100644 frontend/src/assets/nam/design/bodies/cabinet-body.webp create mode 100644 frontend/src/assets/nam/design/bodies/graphic-eq-body-v3.webp create mode 100644 frontend/src/assets/nam/design/bodies/graphic-eq-body-v6.webp create mode 100644 frontend/src/assets/nam/design/bodies/ir-shaper-panel-body.webp create mode 100644 frontend/src/assets/nam/design/bodies/mic-panel-body.webp create mode 100644 frontend/src/assets/nam/design/bodies/stompbox-body-blue-wide.webp create mode 100644 frontend/src/assets/nam/design/bodies/stompbox-body-blue.webp create mode 100644 frontend/src/assets/nam/design/bodies/stompbox-body-dark-wide.webp create mode 100644 frontend/src/assets/nam/design/bodies/stompbox-body-dark.webp create mode 100644 frontend/src/assets/nam/design/bodies/stompbox-body-olive.webp create mode 100644 frontend/src/assets/nam/design/bodies/stompbox-body-red-wide.webp create mode 100644 frontend/src/assets/nam/design/bodies/stompbox-body-red.webp create mode 100644 frontend/src/assets/nam/design/bodies/stompbox-body-stone.webp create mode 100644 frontend/src/assets/nam/design/bodies/stompbox-body-white-wide.webp create mode 100644 frontend/src/assets/nam/design/bodies/wide-pedal-body-copper-deep.webp create mode 100644 frontend/src/assets/nam/design/bodies/wide-pedal-body-copper-tall.webp create mode 100644 frontend/src/assets/nam/design/bodies/wide-pedal-body-copper.webp create mode 100644 frontend/src/assets/nam/design/bodies/wide-pedal-body-dark-deep.webp create mode 100644 frontend/src/assets/nam/design/bodies/wide-pedal-body-dark-tall.webp create mode 100644 frontend/src/assets/nam/design/bodies/wide-pedal-body-dark.webp create mode 100644 frontend/src/assets/nam/design/bodies/wide-pedal-body-navy-deep.webp create mode 100644 frontend/src/assets/nam/design/bodies/wide-pedal-body-navy-tall.webp create mode 100644 frontend/src/assets/nam/design/bodies/wide-pedal-body-navy.webp create mode 100644 frontend/src/assets/nam/design/controls/button-black-top.webp create mode 100644 frontend/src/assets/nam/design/controls/footswitch-chrome-off-top.webp create mode 100644 frontend/src/assets/nam/design/controls/footswitch-chrome-on-top.webp create mode 100644 frontend/src/assets/nam/design/controls/footswitch-chrome-pressed-top.webp create mode 100644 frontend/src/assets/nam/design/controls/knob-black-panel-v4.webp create mode 100644 frontend/src/assets/nam/design/controls/knob-black-top.webp create mode 100644 frontend/src/assets/nam/design/controls/knob-blue-steel-panel-v4.webp create mode 100644 frontend/src/assets/nam/design/controls/knob-blue-steel-top.webp create mode 100644 frontend/src/assets/nam/design/controls/knob-cream-top.webp create mode 100644 frontend/src/assets/nam/design/controls/knob-metal-top.webp create mode 100644 frontend/src/assets/nam/design/controls/led-amber-off-panel-v4.webp create mode 100644 frontend/src/assets/nam/design/controls/led-amber-off-top.webp create mode 100644 frontend/src/assets/nam/design/controls/led-amber-on-panel-v4.webp create mode 100644 frontend/src/assets/nam/design/controls/led-amber-on-top.webp create mode 100644 frontend/src/assets/nam/design/controls/mic-dynamic-57.webp create mode 100644 frontend/src/assets/nam/design/controls/mic-ribbon-121.webp create mode 100644 frontend/src/assets/nam/design/controls/screw-phillips-top.webp create mode 100644 frontend/src/assets/nam/design/controls/slider-metal-cap-v4.webp create mode 100644 frontend/src/assets/nam/design/controls/slider-metal-top.webp create mode 100644 frontend/src/assets/nam/design/controls/toggle-chrome-panel-v4.webp create mode 100644 frontend/src/assets/nam/design/controls/toggle-chrome-top.webp create mode 100644 frontend/src/assets/nam/design/controls/washer-chrome-top.webp create mode 100644 frontend/src/assets/nam/fx-chorus-library-v1.webp create mode 100644 frontend/src/assets/nam/pedal-boost-library-v1.webp create mode 100644 frontend/src/assets/nam/pedal-card-v2.webp create mode 100644 frontend/src/assets/nam/pedal-distortion-library-v1.webp create mode 100644 frontend/src/assets/nam/pedal-fuzz-library-v1.webp create mode 100644 frontend/src/assets/nam/pedal-overdrive-library-v1.webp create mode 100644 frontend/src/assets/nam/pedal-premium-v2.webp create mode 100644 frontend/src/assets/nam/rack-studio-backdrop-v2.webp create mode 100644 frontend/src/assets/nam/room-ir-library-v1.webp create mode 100644 frontend/src/components/CustomKeyboardProfileManager.tsx create mode 100644 frontend/src/components/InputProfileOnboardingCard.tsx create mode 100644 frontend/src/components/InputProfileSelectors.tsx create mode 100644 frontend/src/components/KeyboardShortcutsPrint.css create mode 100644 frontend/src/components/NAMCabPresentation.ts create mode 100644 frontend/src/components/NAMCompactChain.css create mode 100644 frontend/src/components/NAMCompactChain.tsx create mode 100644 frontend/src/components/NAMDesignAssets.ts create mode 100644 frontend/src/components/NAMExplorer.tsx create mode 100644 frontend/src/components/NAMPresetManagerModal.css create mode 100644 frontend/src/components/NAMPresetManagerModal.tsx create mode 100644 frontend/src/components/NAMRackBrowser.css create mode 100644 frontend/src/components/NAMRackCalibration.css create mode 100644 frontend/src/components/NAMRackChainModule.css create mode 100644 frontend/src/components/NAMRackChainModule.tsx create mode 100644 frontend/src/components/NAMRackControlAssets.ts create mode 100644 frontend/src/components/NAMRackControlTooltip.css create mode 100644 frontend/src/components/NAMRackControlTooltip.tsx create mode 100644 frontend/src/components/NAMRackDesignPort.css create mode 100644 frontend/src/components/NAMRackDesignPort.tsx create mode 100644 frontend/src/components/NAMRackDesignPortSourceFlow.css create mode 100644 frontend/src/components/NAMRackDiagnostics.css create mode 100644 frontend/src/components/NAMRackDiagnostics.tsx create mode 100644 frontend/src/components/NAMRackFooter.css create mode 100644 frontend/src/components/NAMRackHardware.css create mode 100644 frontend/src/components/NAMRackHeader.css create mode 100644 frontend/src/components/NAMRackKnob.css create mode 100644 frontend/src/components/NAMRackKnob.tsx create mode 100644 frontend/src/components/NAMRackMixer.css create mode 100644 frontend/src/components/NAMRackMixer.tsx create mode 100644 frontend/src/components/NAMRackNeural.css create mode 100644 frontend/src/components/NAMRackPanel.css create mode 100644 frontend/src/components/NAMRackPanel.tsx create mode 100644 frontend/src/components/NAMRackPedalboard.css create mode 100644 frontend/src/components/NAMRackPresets.css create mode 100644 frontend/src/components/NAMRackSourceFlow.css create mode 100644 frontend/src/components/NAMRackStage.css create mode 100644 frontend/src/components/NAMSignalChainTypes.ts create mode 100644 frontend/src/components/NAMToneCapturePicker.css create mode 100644 frontend/src/components/NAMToneCapturePicker.tsx create mode 100644 frontend/src/components/NAMToneSave.tsx create mode 100644 frontend/src/components/TrackNameEditor.tsx create mode 100644 frontend/src/components/namRackFaceplateGeometry.ts create mode 100644 frontend/src/components/ui/ProfiledRangeInput/ProfiledRangeInput.tsx create mode 100644 frontend/src/components/ui/ProfiledRangeInput/ProfiledRangeInput.types.ts create mode 100644 frontend/src/components/ui/ProfiledRangeInput/index.ts create mode 100644 frontend/src/components/ui/editTransactionLifecycle.ts create mode 100644 frontend/src/e2e/shortcutHarness.ts create mode 100644 frontend/src/services/namExplorerSession.ts create mode 100644 frontend/src/services/tone3000Session.ts create mode 100644 frontend/src/store/actions/timeSelectionEditing.ts create mode 100644 frontend/src/utils/audioBufferOptions.ts create mode 100644 frontend/src/utils/audioDeadlineStatus.ts create mode 100644 frontend/src/utils/audioPerformanceAdvisory.ts create mode 100644 frontend/src/utils/automationPointDrag.ts create mode 100644 frontend/src/utils/automationShortcutContext.ts create mode 100644 frontend/src/utils/browserWheelGuard.ts create mode 100644 frontend/src/utils/builtInParamValue.ts create mode 100644 frontend/src/utils/clipEditLock.ts create mode 100644 frontend/src/utils/contextWheelBehaviors.ts create mode 100644 frontend/src/utils/customShortcutProfiles.ts create mode 100644 frontend/src/utils/detachedMainActionRouting.ts create mode 100644 frontend/src/utils/inputProfileHelp.ts create mode 100644 frontend/src/utils/inputProfileWindowSync.ts create mode 100644 frontend/src/utils/modalShortcutScope.ts create mode 100644 frontend/src/utils/mouseBehaviorProfiles.ts create mode 100644 frontend/src/utils/mouseModifierPersistence.ts create mode 100644 frontend/src/utils/mouseModifierResolver.ts create mode 100644 frontend/src/utils/mouseModifierTimelineBehaviors.ts create mode 100644 frontend/src/utils/namAssetIdentity.ts create mode 100644 frontend/src/utils/namAssetRecovery.ts create mode 100644 frontend/src/utils/namCalibrationSummary.ts create mode 100644 frontend/src/utils/namCaptureActivation.ts create mode 100644 frontend/src/utils/namCaptureType.ts create mode 100644 frontend/src/utils/namDetachedRuntime.ts create mode 100644 frontend/src/utils/namDisplayName.ts create mode 100644 frontend/src/utils/namInstrumentProfile.ts create mode 100644 frontend/src/utils/namMeterLevel.ts create mode 100644 frontend/src/utils/namPortableState.ts create mode 100644 frontend/src/utils/namPresetLibrary.ts create mode 100644 frontend/src/utils/namProjectState.ts create mode 100644 frontend/src/utils/namRackAmpCaptureLibrary.ts create mode 100644 frontend/src/utils/namRackMutationReadback.ts create mode 100644 frontend/src/utils/namRackOrderPersistence.ts create mode 100644 frontend/src/utils/namRackPresentationFeedback.ts create mode 100644 frontend/src/utils/namRackPresetTransactions.ts create mode 100644 frontend/src/utils/namRackTelemetryCadence.ts create mode 100644 frontend/src/utils/namToneCaptureSelection.ts create mode 100644 frontend/src/utils/namTunerTelemetry.ts create mode 100644 frontend/src/utils/nativePath.ts create mode 100644 frontend/src/utils/parameterWheel.ts create mode 100644 frontend/src/utils/profiledTimelineClipDrag.ts create mode 100644 frontend/src/utils/shortcutAssignmentConflicts.ts create mode 100644 frontend/src/utils/shortcutContext.ts create mode 100644 frontend/src/utils/shortcutProfiles.ts create mode 100644 frontend/src/utils/timelineClipContextSelection.ts create mode 100644 frontend/src/utils/timelineClipEdgeSnap.ts create mode 100644 frontend/src/utils/timelineClipStretch.ts create mode 100644 frontend/src/utils/timelineClipboard.ts create mode 100644 frontend/src/utils/timelineGestureUndo.ts create mode 100644 frontend/src/utils/tone3000InfiniteAppend.ts create mode 100644 frontend/src/utils/tone3000LiveSearch.ts create mode 100644 frontend/src/utils/trackFolderGrouping.ts create mode 100644 frontend/src/utils/trackMeterPresentation.ts create mode 100644 frontend/src/utils/trackMonitorOwnership.ts create mode 100644 frontend/src/utils/trackRename.ts create mode 100644 frontend/src/utils/vendorNavigation.ts create mode 100644 frontend/src/utils/wheelDeltaAccumulator.ts create mode 100644 frontend/src/utils/wheelGestureResolver.ts delete mode 100644 midi_editor_reference_matrix.md delete mode 100644 midi_instrument_editor_feat_plan.md create mode 100644 resources/models/basic_pitch_nmp.onnx create mode 100644 resources/models/basic_pitch_nmp.provenance.json create mode 100644 thirdparty/basic-pitch/LICENSE create mode 100644 thirdparty/basic-pitch/NOTICE create mode 100644 thirdparty/ffmpeg/COPYING.GPLv3 create mode 100644 thirdparty/ffmpeg/PROVENANCE.json create mode 100644 thirdparty/signalsmith/LICENSE.txt create mode 100644 thirdparty/signalsmith/signalsmith-linear/LICENSE.txt create mode 100644 tools/generate_nam_control_assets.mjs create mode 100644 tools/nam-rack-visual-harness.mjs create mode 100644 tools/prepare-nam-amp-gain-asset.mjs create mode 100644 tools/render-native-ui-harness.mjs create mode 100644 tools/run-clean-guitar-headless-regression.ps1 create mode 100644 tools/run-nam-rack-di-headless-regression.ps1 create mode 100644 tools/run-nam-rack-headless-regression.ps1 create mode 100644 tools/run-plugin-scan-headless-regression.ps1 create mode 100644 tools/run-window-lifecycle-smoke.ps1 diff --git a/.agent/workflows/project-settings.md b/.agent/workflows/project-settings.md index 80dd6d9..73fc9ad 100644 --- a/.agent/workflows/project-settings.md +++ b/.agent/workflows/project-settings.md @@ -1,14 +1,16 @@ --- -description: Project-specific settings and preferences for Studio13-v3 +description: Project-specific settings and preferences for OpenStudio --- # Project Settings ## Build Verification -- **Do NOT auto-run build verification commands** after making code changes -- **Do NOT proactively check if builds work** - the user will inform you if something is broken -- Only run build commands when explicitly requested by the user +- Verify every code change in proportion to its risk before handing it off. +- Frontend changes require targeted tests plus `npm run build`; native changes + require the relevant CMake Debug build and deterministic regression harnesses. +- Never treat a successful incremental build as proof that a clean dependency + install or clean CI build works. ## Error Handling @@ -88,16 +90,17 @@ All UI components are located in `frontend/src/components/ui/` and should be use ### Component Reference Files -- [Button.tsx](frontend/src/components/ui/Button/Button.tsx) - Full JSDoc with examples -- [Input.tsx](frontend/src/components/ui/Input/Input.tsx) -- [Select.tsx](frontend/src/components/ui/Select/Select.tsx) -- [Checkbox.tsx](frontend/src/components/ui/Checkbox/Checkbox.tsx) -- [Textarea.tsx](frontend/src/components/ui/Textarea/Textarea.tsx) -- [Slider.tsx](frontend/src/components/ui/Slider/Slider.tsx) -- [Modal.tsx](frontend/src/components/ui/Modal/Modal.tsx) +- [Button.tsx](../../frontend/src/components/ui/Button/Button.tsx) - Full JSDoc with examples +- [Input.tsx](../../frontend/src/components/ui/Input/Input.tsx) +- [Select.tsx](../../frontend/src/components/ui/Select/Select.tsx) +- [Checkbox.tsx](../../frontend/src/components/ui/Checkbox/Checkbox.tsx) +- [Textarea.tsx](../../frontend/src/components/ui/Textarea/Textarea.tsx) +- [Slider.tsx](../../frontend/src/components/ui/Slider/Slider.tsx) +- [Modal.tsx](../../frontend/src/components/ui/Modal/Modal.tsx) ## General Workflow - Make the requested changes directly -- Trust the user to test and report any issues +- Run the automated checks that cover the changed behavior before asking the + user to perform subjective or hardware-dependent testing - Keep explanations concise unless the user asks for details diff --git a/.claude/settings.local.json b/.claude/settings.local.json deleted file mode 100644 index 18c09b8..0000000 --- a/.claude/settings.local.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "permissions": { - "allow": [ - "Bash(npx tsc:*)", - "Bash(npm run build:*)", - "Bash(cmake --build:*)", - "Bash(ls:*)", - "Bash(npm run dev:*)", - "Bash(npm list:*)", - "Bash(where:*)", - "Bash(npx:*)", - "Bash(node -e:*)", - "Bash(npm install:*)", - "Bash(node:*)", - "Bash(dir:*)", - "Bash(python -c:*)", - "Bash(python:*)", - "Bash(# Check if there are leftover Studio13 processes or WebView2 processes tasklist)", - "Bash(echo:*)", - "Read(//c/Users/srvds/AppData/Local/Temp/**)", - "Read(//c/Users/srvds/Documents/Studio13/**)", - "Read(//c/Users/srvds/Documents/**)", - "Read(//c/Users/srvds/OneDrive/Documents/Studio13/**)", - "Read(//c/Users/srvds/**)", - "Bash(find . -name \"*.tsx\" -type f -exec grep -l \"useSortable\\\\|@dnd-kit\" {} ;)", - "WebFetch(domain:forums.steinberg.net)", - "Bash(export PATH=\"$PATH:/c/Program Files/NASM\")", - "Bash(cmake -B build -DCMAKE_BUILD_TYPE=Debug)", - "WebSearch", - "Bash(gh release:*)", - "Bash(find /c/Users/srvds/Documents/Codes/Studio13-v3/resources -type f -name *model* -o -name *.onnx -o -name *.ckpt)", - "Bash(find Source -type f \\\\\\( -name \"*.cpp\" -o -name \"*.h\" \\\\\\) -exec wc -l {} +)", - "Bash(find \"c:/Users/srvds/Documents/Codes/Studio13-v3/frontend/src\" -type f \\\\\\( -name \"*.tsx\" -o -name \"*.ts\" -o -name \"*.css\" \\\\\\) -exec wc -l {} +)", - "Bash(find /c/Users/srvds/Documents/Codes/Studio13-v3/Source -type f \\\\\\( -name \"*.cpp\" -o -name \"*.h\" \\\\\\) -exec wc -l {} +)", - "Bash(find /c/Users/srvds/Documents/Codes/Studio13-v3/frontend/src -type f \\\\\\( -name \"*.ts\" -o -name \"*.tsx\" \\\\\\) -exec wc -l {} +)", - "Bash(find /c/Users/srvds/Documents/Codes/Studio13-v3 -type f \\\\\\(-name *test* -o -name *spec* -o -name .github -o -name .gitlab-ci* -o -name azure-pipelines* \\\\\\))", - "Bash(du -sh /c/Users/srvds/Documents/Codes/Studio13-v3/*)", - "Bash(xargs grep:*)", - "Bash(for file:*)", - "Bash(do echo:*)", - "Read(//c/Users/srvds/Documents/Codes/Studio13-v3/**)", - "Bash(done)", - "Bash(wc -l Source/*.cpp Source/*.h)", - "Bash(grep -o \"include.*signalsmith\\\\|include.*ysfx\\\\|include.*lua\\\\|include.*onnx\\\\|include.*clap\" Source/*.h)", - "Bash(grep -r \"^[[:space:]]*\\\\/\\\\/\" Source/*.cpp)", - "Bash(grep -h \"^[[:space:]]*\\\\/\\\\*\" Source/*.cpp)", - "Bash(find /c/Users/srvds/Documents/Codes/Studio13-v3 -type d -iname *test* -o -type d -iname *spec*)" - ], - "additionalDirectories": [ - "C:\\Users\\srvds\\OneDrive\\Documents\\Studio13" - ] - } -} diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..f247850 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,10 @@ +# Unified-diff context lines contain one required leading space. Treat those +# syntax markers as valid instead of reporting them as trailing whitespace. +*.patch text eol=lf whitespace=-blank-at-eol +*.onnx binary +thirdparty/basic-pitch/LICENSE text eol=lf +thirdparty/basic-pitch/NOTICE text eol=lf +thirdparty/ffmpeg/COPYING.GPLv3 text eol=lf +thirdparty/ffmpeg/PROVENANCE.json text eol=lf +thirdparty/signalsmith/LICENSE.txt text eol=lf +thirdparty/signalsmith/signalsmith-linear/LICENSE.txt text eol=lf diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..077387b --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1,2 @@ +# Default ownership for every path in OpenStudio. +* @sdevil7th diff --git a/.github/ISSUE_TEMPLATE/window-or-startup-failure.yml b/.github/ISSUE_TEMPLATE/window-or-startup-failure.yml new file mode 100644 index 0000000..57ed42b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/window-or-startup-failure.yml @@ -0,0 +1,115 @@ +name: Window or embedded UI failure +description: Report startup, Mixer, MIDI editor, or built-in plug-in window failures. +title: "[Window/UI]: " +labels: [] +body: + - type: markdown + attributes: + value: | + Thanks for helping test OpenStudio on real hardware. The OS/build details and startup log below let us distinguish a missing runtime from a WebView/WKWebView lifecycle failure. + + - type: input + id: version + attributes: + label: OpenStudio version + description: Use the release/tag shown in the app or the exact commit hash for a development build. + placeholder: v0.0.40 or commit abc1234 + validations: + required: true + + - type: dropdown + id: platform + attributes: + label: Operating system + options: + - Windows 10 + - Windows 11 + - macOS (Apple Silicon) + - macOS (Intel) + - Linux + - Other + validations: + required: true + + - type: input + id: os_version + attributes: + label: Exact OS version and build + description: On Windows, run `winver`. On macOS, use About This Mac. + placeholder: Windows 10 22H2 build 19045.6466; macOS 14.7.6 + validations: + required: true + + - type: dropdown + id: window + attributes: + label: Affected window + options: + - Main application startup + - Detached Mixer + - Detached MIDI editor + - Built-in plug-in editor + - Native VST3/CLAP/AU plug-in editor + - Other + validations: + required: true + + - type: textarea + id: reproduction + attributes: + label: Reproduction steps + description: Include open/close/dock/reopen order, whether this was the first launch, and whether another OpenStudio window was still loading. + placeholder: | + 1. Launch OpenStudio + 2. Open ... + 3. Close ... immediately + 4. Reopen ... + validations: + required: true + + - type: textarea + id: observed + attributes: + label: What happened? + description: Say whether the window was blank, never appeared, froze, crashed, or showed a recovery message. + validations: + required: true + + - type: textarea + id: startup_log + attributes: + label: Startup log + description: Paste or attach `OpenStudio_Startup.log`. On Windows it is under `%APPDATA%\OpenStudio\logs`; on macOS it is under `~/Library/Application Support/OpenStudio/logs`. Remove any private project paths if needed. + render: text + validations: + required: true + + - type: textarea + id: environment + attributes: + label: Additional environment details + description: On Windows include the WebView2 version, SmartScreen/Smart App Control result, and any Controlled Folder Access, antivirus, EDR, AppLocker, or WDAC policy. On macOS include Intel/Apple Silicon, whether the DMG/app was signed and notarized, the exact Gatekeeper message, how launch was approved, whether quarantine was removed, and whether Rosetta is installed. + + - type: dropdown + id: trust_state + attributes: + label: Download and first-launch state + options: + - Signed/notarized or verified-publisher build; no warning + - Warning shown; approved with the operating system UI + - macOS quarantine removed with xattr + - Windows security or organization policy blocked launch + - Local development build; no download quarantine + - Unknown + validations: + required: true + + - type: checkboxes + id: checks + attributes: + label: Confirmation + options: + - label: I tested a current release or included the exact development commit. + required: true + - label: I included the complete startup section of the log, including browser backend and frontend startup state. + required: true diff --git a/.github/workflows/ai-runtime-release.yml b/.github/workflows/ai-runtime-release.yml index c3409b4..c4876c3 100644 --- a/.github/workflows/ai-runtime-release.yml +++ b/.github/workflows/ai-runtime-release.yml @@ -10,6 +10,9 @@ on: description: "AI runtime version, for example 0.0.30" required: true +permissions: + contents: read + jobs: build-windows-runtime-base: runs-on: windows-latest @@ -19,7 +22,7 @@ jobs: AI_RUNTIME_STANDALONE_PYTHON_VERSION: ${{ vars.OPENSTUDIO_AI_RUNTIME_STANDALONE_PYTHON_VERSION != '' && vars.OPENSTUDIO_AI_RUNTIME_STANDALONE_PYTHON_VERSION || '3.10.20' }} AI_RUNTIME_STANDALONE_FLAVOR: ${{ vars.OPENSTUDIO_AI_RUNTIME_STANDALONE_FLAVOR != '' && vars.OPENSTUDIO_AI_RUNTIME_STANDALONE_FLAVOR || 'install_only' }} steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 - name: Normalize runtime version shell: pwsh @@ -28,7 +31,7 @@ jobs: "VERSION=$version" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8 - name: Cache standalone Python and wheels - uses: actions/cache@v4 + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 with: path: | .cache/ai-runtime @@ -59,7 +62,7 @@ jobs: -ExpectedRuntimeVersion $env:VERSION ` -MaxArtifactSizeBytes 2100000000 - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: windows-base-ai-runtime path: | @@ -75,14 +78,14 @@ jobs: AI_RUNTIME_STANDALONE_PYTHON_VERSION: ${{ vars.OPENSTUDIO_AI_RUNTIME_STANDALONE_PYTHON_VERSION != '' && vars.OPENSTUDIO_AI_RUNTIME_STANDALONE_PYTHON_VERSION || '3.10.20' }} AI_RUNTIME_STANDALONE_FLAVOR: ${{ vars.OPENSTUDIO_AI_RUNTIME_STANDALONE_FLAVOR != '' && vars.OPENSTUDIO_AI_RUNTIME_STANDALONE_FLAVOR || 'install_only' }} steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 - name: Normalize runtime version shell: bash run: echo "VERSION=${VERSION#ai-runtime-v}" | sed 's/^VERSION=v/VERSION=/' >> "$GITHUB_ENV" - name: Cache standalone Python and wheels - uses: actions/cache@v4 + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 with: path: | .cache/ai-runtime @@ -91,7 +94,7 @@ jobs: - name: Cache packaged macOS runtime id: cache-macos-runtime-package - uses: actions/cache@v4 + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 with: path: | dist/ai-runtime/OpenStudio-AI-Runtime-macos-arm64.zip @@ -123,7 +126,7 @@ jobs: -ExpectedRuntimeVersion $env:VERSION ` -MaxArtifactSizeBytes 2100000000 - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: macos-arm64-ai-runtime path: | @@ -139,14 +142,14 @@ jobs: AI_RUNTIME_STANDALONE_PYTHON_VERSION: ${{ vars.OPENSTUDIO_AI_RUNTIME_STANDALONE_PYTHON_VERSION != '' && vars.OPENSTUDIO_AI_RUNTIME_STANDALONE_PYTHON_VERSION || '3.10.20' }} AI_RUNTIME_STANDALONE_FLAVOR: ${{ vars.OPENSTUDIO_AI_RUNTIME_STANDALONE_FLAVOR != '' && vars.OPENSTUDIO_AI_RUNTIME_STANDALONE_FLAVOR || 'install_only' }} steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 - name: Normalize runtime version shell: bash run: echo "VERSION=${VERSION#ai-runtime-v}" | sed 's/^VERSION=v/VERSION=/' >> "$GITHUB_ENV" - name: Cache standalone Python and wheels - uses: actions/cache@v4 + uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4 with: path: | .cache/ai-runtime @@ -177,7 +180,7 @@ jobs: -ExpectedRuntimeVersion $env:VERSION ` -MaxArtifactSizeBytes 2100000000 - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: linux-cpu-x64-ai-runtime path: | @@ -196,23 +199,23 @@ jobs: env: VERSION: ${{ github.event.inputs.runtime_version || github.ref_name }} steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 - name: Normalize runtime version shell: bash run: echo "VERSION=${VERSION#ai-runtime-v}" | sed 's/^VERSION=v/VERSION=/' >> "$GITHUB_ENV" - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 with: name: windows-base-ai-runtime path: dist/ai-runtime - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 with: name: macos-arm64-ai-runtime path: dist/ai-runtime - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 with: name: linux-cpu-x64-ai-runtime path: dist/ai-runtime @@ -228,14 +231,13 @@ jobs: test -f "dist/ai-runtime/reports/linux-cpu-x64-size-report.json" - name: Publish AI runtime release - uses: softprops/action-gh-release@v2 + uses: softprops/action-gh-release@3bb12739c298aeb8a4eeaf626c5b8d85266b0e65 # v2 with: tag_name: ${{ startsWith(github.ref, 'refs/tags/') && github.ref_name || format('ai-runtime-v{0}', github.event.inputs.runtime_version) }} name: OpenStudio AI Runtime ${{ env.VERSION }} body: | OpenStudio AI base runtimes. Windows accelerator backends are installed on-device from the pinned install plans in the published runtime manifest. fail_on_unmatched_files: true - overwrite_files: true files: | dist/ai-runtime/OpenStudio-AI-Runtime-windows-base-x64.zip dist/ai-runtime/OpenStudio-AI-Runtime-macos-arm64.zip diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0c470e8..11f13fe 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -14,6 +14,9 @@ on: required: false default: "packaging/release-notes-template.md" +permissions: + contents: read + jobs: build-windows: runs-on: windows-latest @@ -22,35 +25,16 @@ jobs: BUILD_DIR: build-release-windows ASIO_SDK_DIR: thirdparty/asio ONNXRUNTIME_VERSION: 1.24.4 + ONNXRUNTIME_WIN_X64_SHA256: d2319fddfb6ea4db99ccc4b60c85c517bcd855721f5daa6a06d40d7cb2ee2357 + FFMPEG_CORRESPONDING_SOURCE_URL: ${{ vars.OPENSTUDIO_FFMPEG_CORRESPONDING_SOURCE_URL }} + FFMPEG_CORRESPONDING_SOURCE_SHA256: ${{ vars.OPENSTUDIO_FFMPEG_CORRESPONDING_SOURCE_SHA256 }} AI_RUNTIME_VERSION: ${{ vars.OPENSTUDIO_AI_RUNTIME_VERSION != '' && vars.OPENSTUDIO_AI_RUNTIME_VERSION || github.event.inputs.version || github.ref_name }} AI_RUNTIME_STANDALONE_RELEASE_TAG: ${{ vars.OPENSTUDIO_AI_RUNTIME_STANDALONE_RELEASE_TAG != '' && vars.OPENSTUDIO_AI_RUNTIME_STANDALONE_RELEASE_TAG || '20260325' }} AI_RUNTIME_STANDALONE_PYTHON_VERSION: ${{ vars.OPENSTUDIO_AI_RUNTIME_STANDALONE_PYTHON_VERSION != '' && vars.OPENSTUDIO_AI_RUNTIME_STANDALONE_PYTHON_VERSION || '3.10.20' }} AI_RUNTIME_STANDALONE_FLAVOR: ${{ vars.OPENSTUDIO_AI_RUNTIME_STANDALONE_FLAVOR != '' && vars.OPENSTUDIO_AI_RUNTIME_STANDALONE_FLAVOR || 'install_only' }} RELEASE_SITE_URL: https://openstudio.org.in - DOPPLER_TOKEN: ${{ secrets.DOPPLER_TOKEN }} - WINDOWS_CODESIGN_CERT_BASE64: ${{ secrets.WINDOWS_CODESIGN_CERT_BASE64 }} - WINDOWS_CODESIGN_CERT_PASSWORD: ${{ secrets.WINDOWS_CODESIGN_CERT_PASSWORD }} - WINDOWS_CODESIGN_CERT_THUMBPRINT: ${{ secrets.WINDOWS_CODESIGN_CERT_THUMBPRINT }} - WINDOWS_TIMESTAMP_URL: ${{ secrets.WINDOWS_TIMESTAMP_URL }} steps: - - uses: actions/checkout@v5 - - - name: Install Doppler CLI - if: env.DOPPLER_TOKEN != '' - uses: dopplerhq/cli-action@v3 - - - name: Load release secrets from Doppler - if: env.DOPPLER_TOKEN != '' - shell: pwsh - run: | - $secrets = doppler secrets download --no-file --format json | ConvertFrom-Json -AsHashtable - foreach ($entry in $secrets.GetEnumerator()) { - if (-not [string]::IsNullOrWhiteSpace([Environment]::GetEnvironmentVariable($entry.Key))) { - continue - } - - "$($entry.Key)=$($entry.Value)" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8 - } + - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 - name: Normalize version shell: pwsh @@ -60,9 +44,9 @@ jobs: $aiRuntimeVersion = "${env:AI_RUNTIME_VERSION}" -replace '^v', '' "AI_RUNTIME_VERSION=$aiRuntimeVersion" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8 - - uses: actions/setup-node@v5 + - uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5 with: - node-version: 20 + node-version-file: frontend/.nvmrc cache: npm cache-dependency-path: frontend/package-lock.json @@ -71,7 +55,9 @@ jobs: run: | cd frontend npm ci + if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } npm run build + if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } - name: Install Inno Setup shell: pwsh @@ -85,20 +71,67 @@ jobs: shell: pwsh run: ./tools/setup-asio-sdk.ps1 -Destination $env:ASIO_SDK_DIR - - name: Install optional ONNX Runtime - if: vars.OPENSTUDIO_SETUP_ONNXRUNTIME == 'true' + - name: Install ONNX Runtime + shell: pwsh + run: ./tools/setup-onnxruntime.ps1 -Version $env:ONNXRUNTIME_VERSION -ExpectedSha256 $env:ONNXRUNTIME_WIN_X64_SHA256 + + - name: Detect Doppler fallback shell: pwsh - run: ./tools/setup-onnxruntime.ps1 -Version $env:ONNXRUNTIME_VERSION + env: + DOPPLER_TOKEN: ${{ secrets.DOPPLER_TOKEN }} + run: | + $configured = if ([string]::IsNullOrWhiteSpace($env:DOPPLER_TOKEN)) { "false" } else { "true" } + "DOPPLER_CONFIGURED=$configured" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8 + + - name: Install Doppler CLI + if: env.DOPPLER_CONFIGURED == 'true' + uses: dopplerhq/cli-action@014df23b1329b615816a38eb5f473bb9000700b1 # v3 - name: Configure CMake shell: pwsh + env: + DOPPLER_TOKEN: ${{ secrets.DOPPLER_TOKEN }} + TONE3000_PUBLISHABLE_KEY: ${{ vars.TONE3000_PUBLISHABLE_KEY != '' && vars.TONE3000_PUBLISHABLE_KEY || secrets.TONE3000_PUBLISHABLE_KEY }} + OPENSTUDIO_TONE3000_CLIENT_ID_VALUE: ${{ secrets.OPENSTUDIO_TONE3000_CLIENT_ID_VALUE }} + OPENSTUDIO_TONE3000_CLIENT_ID: ${{ secrets.OPENSTUDIO_TONE3000_CLIENT_ID }} run: | + function Get-AllowlistedDopplerValue { + param([Parameter(Mandatory = $true)][string]$Name) + if ([string]::IsNullOrWhiteSpace($env:DOPPLER_TOKEN)) { return "" } + $value = (& doppler secrets get $Name --plain 2>$null | Out-String).Trim() + if ($LASTEXITCODE -ne 0) { return "" } + if (-not [string]::IsNullOrWhiteSpace($value)) { Write-Host "::add-mask::$value" } + return $value + } + + $tone3000ClientId = $env:TONE3000_PUBLISHABLE_KEY + if ([string]::IsNullOrWhiteSpace($tone3000ClientId)) { + $tone3000ClientId = $env:OPENSTUDIO_TONE3000_CLIENT_ID_VALUE + } + if ([string]::IsNullOrWhiteSpace($tone3000ClientId)) { + $tone3000ClientId = $env:OPENSTUDIO_TONE3000_CLIENT_ID + } + if ([string]::IsNullOrWhiteSpace($tone3000ClientId)) { + foreach ($name in @("TONE3000_PUBLISHABLE_KEY", "OPENSTUDIO_TONE3000_CLIENT_ID_VALUE", "OPENSTUDIO_TONE3000_CLIENT_ID")) { + $tone3000ClientId = Get-AllowlistedDopplerValue -Name $name + if (-not [string]::IsNullOrWhiteSpace($tone3000ClientId)) { break } + } + } + if ([string]::IsNullOrWhiteSpace($tone3000ClientId)) { + throw "A TONE3000 publishable OAuth client ID is required for release builds." + } + $env:DOPPLER_TOKEN = "" + $env:TONE3000_PUBLISHABLE_KEY = "" + $env:OPENSTUDIO_TONE3000_CLIENT_ID_VALUE = "" + $env:OPENSTUDIO_TONE3000_CLIENT_ID = "" + cmake -S . -B $env:BUILD_DIR -A x64 ` "-DOPENSTUDIO_APP_VERSION=$env:VERSION" ` "-DOPENSTUDIO_UPDATE_MANIFEST_URL_VALUE=$env:RELEASE_SITE_URL/releases/stable/latest.json" ` "-DOPENSTUDIO_UPDATE_APPCAST_URL_VALUE=$env:RELEASE_SITE_URL/appcast/windows-stable.xml" ` "-DOPENSTUDIO_RELEASES_PAGE_URL_VALUE=$env:RELEASE_SITE_URL/download" ` "-DOPENSTUDIO_UPDATE_CHANNEL_VALUE=stable" ` + "-DOPENSTUDIO_TONE3000_CLIENT_ID_VALUE=$tone3000ClientId" ` "-DJUCE_ASIOSDK_PATH=$env:GITHUB_WORKSPACE/$env:ASIO_SDK_DIR" ` "-DOPENSTUDIO_REQUIRE_ASIO=ON" ` "-DOPENSTUDIO_ENABLE_EXTERNAL_PYTHON_AI_FALLBACK=OFF" ` @@ -112,21 +145,61 @@ jobs: shell: pwsh run: ./tools/validate-runtime-bundle.ps1 -Platform windows -BundlePath "$env:BUILD_DIR/OpenStudio_artefacts/Release" -ExpectedVersion $env:VERSION -EnforceLeanBundle + - name: Run Windows native-window lifecycle release gate + shell: pwsh + run: | + $exePath = Join-Path $env:GITHUB_WORKSPACE "$env:BUILD_DIR/OpenStudio_artefacts/Release/OpenStudio.exe" + $report = Join-Path $env:RUNNER_TEMP "OpenStudio_WindowLifecycleHarness.json" + ./tools/run-window-lifecycle-smoke.ps1 -AppPath $exePath -ReportPath $report -TimeoutSeconds 180 + - name: Prepare Windows signing certificate shell: pwsh + env: + DOPPLER_TOKEN: ${{ secrets.DOPPLER_TOKEN }} + WINDOWS_CODESIGN_CERT_BASE64: ${{ secrets.WINDOWS_CODESIGN_CERT_BASE64 }} run: | - if ([string]::IsNullOrWhiteSpace($env:WINDOWS_CODESIGN_CERT_BASE64)) { + $certificateBase64 = $env:WINDOWS_CODESIGN_CERT_BASE64 + if ([string]::IsNullOrWhiteSpace($certificateBase64) -and -not [string]::IsNullOrWhiteSpace($env:DOPPLER_TOKEN)) { + $certificateBase64 = (& doppler secrets get WINDOWS_CODESIGN_CERT_BASE64 --plain 2>$null | Out-String).Trim() + if ($LASTEXITCODE -ne 0) { $certificateBase64 = "" } + } + $env:DOPPLER_TOKEN = "" + $env:WINDOWS_CODESIGN_CERT_BASE64 = "" + if ([string]::IsNullOrWhiteSpace($certificateBase64)) { Write-Host "No Windows code-signing certificate secret was provided." exit 0 } + Write-Host "::add-mask::$certificateBase64" $certPath = Join-Path $env:RUNNER_TEMP "openstudio-codesign.pfx" - [IO.File]::WriteAllBytes($certPath, [Convert]::FromBase64String($env:WINDOWS_CODESIGN_CERT_BASE64)) + [IO.File]::WriteAllBytes($certPath, [Convert]::FromBase64String($certificateBase64)) "WINDOWS_CODESIGN_CERT_PATH=$certPath" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8 - name: Package Windows installer shell: pwsh + env: + DOPPLER_TOKEN: ${{ secrets.DOPPLER_TOKEN }} + WINDOWS_CODESIGN_CERT_PASSWORD: ${{ secrets.WINDOWS_CODESIGN_CERT_PASSWORD }} + WINDOWS_CODESIGN_CERT_THUMBPRINT: ${{ secrets.WINDOWS_CODESIGN_CERT_THUMBPRINT }} + WINDOWS_TIMESTAMP_URL: ${{ secrets.WINDOWS_TIMESTAMP_URL }} run: | + function Get-ReleaseValue { + param([Parameter(Mandatory = $true)][string]$Name, [string]$DirectValue) + if (-not [string]::IsNullOrWhiteSpace($DirectValue)) { return $DirectValue } + if ([string]::IsNullOrWhiteSpace($env:DOPPLER_TOKEN)) { return "" } + $value = (& doppler secrets get $Name --plain 2>$null | Out-String).Trim() + if ($LASTEXITCODE -ne 0) { return "" } + if (-not [string]::IsNullOrWhiteSpace($value)) { Write-Host "::add-mask::$value" } + return $value + } + + $certificatePassword = Get-ReleaseValue -Name "WINDOWS_CODESIGN_CERT_PASSWORD" -DirectValue $env:WINDOWS_CODESIGN_CERT_PASSWORD + $certificateThumbprint = Get-ReleaseValue -Name "WINDOWS_CODESIGN_CERT_THUMBPRINT" -DirectValue $env:WINDOWS_CODESIGN_CERT_THUMBPRINT + $timestampUrl = Get-ReleaseValue -Name "WINDOWS_TIMESTAMP_URL" -DirectValue $env:WINDOWS_TIMESTAMP_URL + $env:DOPPLER_TOKEN = "" + $env:WINDOWS_CODESIGN_CERT_PASSWORD = "" + $env:WINDOWS_CODESIGN_CERT_THUMBPRINT = "" + $env:WINDOWS_TIMESTAMP_URL = "" $arguments = @{ Version = $env:VERSION SourceDir = "$env:BUILD_DIR/OpenStudio_artefacts/Release" @@ -136,16 +209,16 @@ jobs: $arguments.CertificateFile = $env:WINDOWS_CODESIGN_CERT_PATH } - if (-not [string]::IsNullOrWhiteSpace($env:WINDOWS_CODESIGN_CERT_PASSWORD)) { - $arguments.CertificatePassword = $env:WINDOWS_CODESIGN_CERT_PASSWORD + if (-not [string]::IsNullOrWhiteSpace($certificatePassword)) { + $arguments.CertificatePassword = $certificatePassword } - if (-not [string]::IsNullOrWhiteSpace($env:WINDOWS_CODESIGN_CERT_THUMBPRINT)) { - $arguments.CertificateThumbprint = $env:WINDOWS_CODESIGN_CERT_THUMBPRINT + if (-not [string]::IsNullOrWhiteSpace($certificateThumbprint)) { + $arguments.CertificateThumbprint = $certificateThumbprint } - if (-not [string]::IsNullOrWhiteSpace($env:WINDOWS_TIMESTAMP_URL)) { - $arguments.TimestampUrl = $env:WINDOWS_TIMESTAMP_URL + if (-not [string]::IsNullOrWhiteSpace($timestampUrl)) { + $arguments.TimestampUrl = $timestampUrl } ./tools/package-windows-release.ps1 @arguments @@ -164,10 +237,34 @@ jobs: } } - - uses: actions/upload-artifact@v4 + - name: Stage checksum-pinned FFmpeg corresponding source + shell: pwsh + run: | + $sourceUrl = ([string]$env:FFMPEG_CORRESPONDING_SOURCE_URL).Trim() + $expectedSha256 = ([string]$env:FFMPEG_CORRESPONDING_SOURCE_SHA256).Trim().ToLowerInvariant() + if ([string]::IsNullOrWhiteSpace($sourceUrl) -or + $expectedSha256 -notmatch '^[0-9a-f]{64}$') { + throw "Set OPENSTUDIO_FFMPEG_CORRESPONDING_SOURCE_URL and OPENSTUDIO_FFMPEG_CORRESPONDING_SOURCE_SHA256 to the complete corresponding-source archive for the exact bundled FFmpeg 8.0.1 static build." + } + $sourceUri = [Uri]$sourceUrl + if (-not $sourceUri.IsAbsoluteUri -or $sourceUri.Scheme -ne "https") { + throw "OPENSTUDIO_FFMPEG_CORRESPONDING_SOURCE_URL must be an absolute HTTPS URL." + } + + $sourcePath = "dist/windows/OpenStudio-FFmpeg-8.0.1-complete-corresponding-source.zip" + Invoke-WebRequest -Uri $sourceUri -OutFile $sourcePath -UseBasicParsing + $actualSha256 = (Get-FileHash -LiteralPath $sourcePath -Algorithm SHA256).Hash.ToLowerInvariant() + if ($actualSha256 -ne $expectedSha256) { + Remove-Item -LiteralPath $sourcePath -Force + throw "FFmpeg corresponding-source checksum mismatch. Expected '$expectedSha256' but found '$actualSha256'." + } + + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: windows-release - path: dist/windows/OpenStudio-Setup-x64.exe + path: | + dist/windows/OpenStudio-Setup-x64.exe + dist/windows/OpenStudio-FFmpeg-8.0.1-complete-corresponding-source.zip if-no-files-found: error build-macos: @@ -180,33 +277,8 @@ jobs: AI_RUNTIME_STANDALONE_PYTHON_VERSION: ${{ vars.OPENSTUDIO_AI_RUNTIME_STANDALONE_PYTHON_VERSION != '' && vars.OPENSTUDIO_AI_RUNTIME_STANDALONE_PYTHON_VERSION || '3.10.20' }} AI_RUNTIME_STANDALONE_FLAVOR: ${{ vars.OPENSTUDIO_AI_RUNTIME_STANDALONE_FLAVOR != '' && vars.OPENSTUDIO_AI_RUNTIME_STANDALONE_FLAVOR || 'install_only' }} RELEASE_SITE_URL: https://openstudio.org.in - DOPPLER_TOKEN: ${{ secrets.DOPPLER_TOKEN }} - MACOS_CERTIFICATE_BASE64: ${{ secrets.MACOS_CERTIFICATE_BASE64 }} - MACOS_CERTIFICATE_PASSWORD: ${{ secrets.MACOS_CERTIFICATE_PASSWORD }} - MACOS_KEYCHAIN_PASSWORD: ${{ secrets.MACOS_KEYCHAIN_PASSWORD }} - MACOS_CODESIGN_IDENTITY: ${{ secrets.MACOS_CODESIGN_IDENTITY }} - APPLE_ID: ${{ secrets.APPLE_ID }} - APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} - APPLE_APP_PASSWORD: ${{ secrets.APPLE_APP_PASSWORD }} steps: - - uses: actions/checkout@v5 - - - name: Install Doppler CLI - if: env.DOPPLER_TOKEN != '' - uses: dopplerhq/cli-action@v3 - - - name: Load release secrets from Doppler - if: env.DOPPLER_TOKEN != '' - shell: pwsh - run: | - $secrets = doppler secrets download --no-file --format json | ConvertFrom-Json -AsHashtable - foreach ($entry in $secrets.GetEnumerator()) { - if (-not [string]::IsNullOrWhiteSpace([Environment]::GetEnvironmentVariable($entry.Key))) { - continue - } - - "$($entry.Key)=$($entry.Value)" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8 - } + - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 - name: Normalize version shell: bash @@ -214,9 +286,9 @@ jobs: echo "VERSION=${VERSION#v}" >> "$GITHUB_ENV" echo "AI_RUNTIME_VERSION=${AI_RUNTIME_VERSION#v}" >> "$GITHUB_ENV" - - uses: actions/setup-node@v5 + - uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5 with: - node-version: 20 + node-version-file: frontend/.nvmrc cache: npm cache-dependency-path: frontend/package-lock.json @@ -227,32 +299,103 @@ jobs: npm ci npm run build + - name: Detect Doppler fallback + shell: bash + env: + DOPPLER_TOKEN: ${{ secrets.DOPPLER_TOKEN }} + run: | + if [[ -n "${DOPPLER_TOKEN:-}" ]]; then + echo "DOPPLER_CONFIGURED=true" >> "$GITHUB_ENV" + else + echo "DOPPLER_CONFIGURED=false" >> "$GITHUB_ENV" + fi + + - name: Install Doppler CLI + if: env.DOPPLER_CONFIGURED == 'true' + uses: dopplerhq/cli-action@014df23b1329b615816a38eb5f473bb9000700b1 # v3 + - name: Prepare macOS signing certificate - if: env.MACOS_CERTIFICATE_BASE64 != '' shell: bash + env: + DOPPLER_TOKEN: ${{ secrets.DOPPLER_TOKEN }} + MACOS_CERTIFICATE_BASE64: ${{ secrets.MACOS_CERTIFICATE_BASE64 }} + MACOS_CERTIFICATE_PASSWORD: ${{ secrets.MACOS_CERTIFICATE_PASSWORD }} + MACOS_KEYCHAIN_PASSWORD: ${{ secrets.MACOS_KEYCHAIN_PASSWORD }} run: | + resolve_release_value() { + local name="$1" + local direct_value="${2:-}" + if [[ -n "$direct_value" ]]; then printf '%s' "$direct_value"; return 0; fi + if [[ -z "${DOPPLER_TOKEN:-}" ]]; then return 0; fi + doppler secrets get "$name" --plain 2>/dev/null || true + } + + CERTIFICATE_BASE64="$(resolve_release_value MACOS_CERTIFICATE_BASE64 "${MACOS_CERTIFICATE_BASE64:-}")" + CERTIFICATE_PASSWORD="$(resolve_release_value MACOS_CERTIFICATE_PASSWORD "${MACOS_CERTIFICATE_PASSWORD:-}")" + KEYCHAIN_PASSWORD="$(resolve_release_value MACOS_KEYCHAIN_PASSWORD "${MACOS_KEYCHAIN_PASSWORD:-}")" + unset DOPPLER_TOKEN MACOS_CERTIFICATE_BASE64 MACOS_CERTIFICATE_PASSWORD MACOS_KEYCHAIN_PASSWORD + if [[ -z "$CERTIFICATE_BASE64" ]]; then + echo "No macOS code-signing certificate was provided." + exit 0 + fi + if [[ -z "$CERTIFICATE_PASSWORD" || -z "$KEYCHAIN_PASSWORD" ]]; then + echo "A macOS certificate requires both certificate and keychain passwords." >&2 + exit 1 + fi + echo "::add-mask::$CERTIFICATE_BASE64" + echo "::add-mask::$CERTIFICATE_PASSWORD" + echo "::add-mask::$KEYCHAIN_PASSWORD" + CERT_PATH="$RUNNER_TEMP/openstudio-macos-signing.p12" KEYCHAIN_PATH="$RUNNER_TEMP/openstudio-signing.keychain-db" EXISTING_KEYCHAINS="$(security list-keychains -d user | sed 's/^[[:space:]]*//; s/^\"//; s/\"$//')" - echo "$MACOS_CERTIFICATE_BASE64" | base64 --decode > "$CERT_PATH" - security create-keychain -p "$MACOS_KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH" + echo "$CERTIFICATE_BASE64" | base64 --decode > "$CERT_PATH" + security create-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH" security set-keychain-settings -lut 21600 "$KEYCHAIN_PATH" - security unlock-keychain -p "$MACOS_KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH" - security import "$CERT_PATH" -k "$KEYCHAIN_PATH" -P "$MACOS_CERTIFICATE_PASSWORD" -T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/xcrun - security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "$MACOS_KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH" + security unlock-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH" + security import "$CERT_PATH" -k "$KEYCHAIN_PATH" -P "$CERTIFICATE_PASSWORD" -T /usr/bin/codesign -T /usr/bin/security -T /usr/bin/xcrun + security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "$KEYCHAIN_PASSWORD" "$KEYCHAIN_PATH" security list-keychains -d user -s "$KEYCHAIN_PATH" $EXISTING_KEYCHAINS echo "KEYCHAIN_PATH=$KEYCHAIN_PATH" >> "$GITHUB_ENV" - name: Configure CMake shell: bash + env: + DOPPLER_TOKEN: ${{ secrets.DOPPLER_TOKEN }} + TONE3000_PUBLISHABLE_KEY: ${{ vars.TONE3000_PUBLISHABLE_KEY != '' && vars.TONE3000_PUBLISHABLE_KEY || secrets.TONE3000_PUBLISHABLE_KEY }} + OPENSTUDIO_TONE3000_CLIENT_ID_VALUE: ${{ secrets.OPENSTUDIO_TONE3000_CLIENT_ID_VALUE }} + OPENSTUDIO_TONE3000_CLIENT_ID: ${{ secrets.OPENSTUDIO_TONE3000_CLIENT_ID }} run: | + resolve_doppler_value() { + local name="$1" + if [[ -z "${DOPPLER_TOKEN:-}" ]]; then return 0; fi + doppler secrets get "$name" --plain 2>/dev/null || true + } + + TONE3000_CLIENT_ID="${TONE3000_PUBLISHABLE_KEY:-${OPENSTUDIO_TONE3000_CLIENT_ID_VALUE:-${OPENSTUDIO_TONE3000_CLIENT_ID:-}}}" + if [[ -z "$TONE3000_CLIENT_ID" ]]; then + for name in TONE3000_PUBLISHABLE_KEY OPENSTUDIO_TONE3000_CLIENT_ID_VALUE OPENSTUDIO_TONE3000_CLIENT_ID; do + TONE3000_CLIENT_ID="$(resolve_doppler_value "$name")" + if [[ -n "$TONE3000_CLIENT_ID" ]]; then + echo "::add-mask::$TONE3000_CLIENT_ID" + break + fi + done + fi + if [ -z "$TONE3000_CLIENT_ID" ]; then + echo "A TONE3000 publishable OAuth client ID is required for release builds." >&2 + exit 1 + fi + unset DOPPLER_TOKEN TONE3000_PUBLISHABLE_KEY OPENSTUDIO_TONE3000_CLIENT_ID_VALUE OPENSTUDIO_TONE3000_CLIENT_ID + cmake -S . -B "$BUILD_DIR" \ -DOPENSTUDIO_APP_VERSION="$VERSION" \ -DOPENSTUDIO_UPDATE_MANIFEST_URL_VALUE="$RELEASE_SITE_URL/releases/stable/latest.json" \ -DOPENSTUDIO_UPDATE_APPCAST_URL_VALUE="$RELEASE_SITE_URL/appcast/macos-stable.xml" \ -DOPENSTUDIO_RELEASES_PAGE_URL_VALUE="$RELEASE_SITE_URL/download" \ -DOPENSTUDIO_UPDATE_CHANNEL_VALUE="stable" \ + -DOPENSTUDIO_TONE3000_CLIENT_ID_VALUE="$TONE3000_CLIENT_ID" \ -DOPENSTUDIO_ENABLE_EXTERNAL_PYTHON_AI_FALLBACK=OFF \ -DFETCHCONTENT_UPDATES_DISCONNECTED=ON @@ -270,9 +413,41 @@ jobs: ./tools/validate-runtime-bundle.ps1 -Platform macos -BundlePath $appPath.FullName -ExpectedVersion $env:VERSION -EnforceLeanBundle + - name: Validate universal macOS executable + shell: bash + run: | + APP_PATH="$(find "$BUILD_DIR" -type d -name 'OpenStudio.app' | head -n 1)" + ARCHS="$(lipo -archs "$APP_PATH/Contents/MacOS/OpenStudio")" + echo "OpenStudio architectures: $ARCHS" + [[ " $ARCHS " == *" arm64 "* ]] + [[ " $ARCHS " == *" x86_64 "* ]] + - name: Package macOS DMG shell: bash + env: + DOPPLER_TOKEN: ${{ secrets.DOPPLER_TOKEN }} + MACOS_CODESIGN_IDENTITY: ${{ secrets.MACOS_CODESIGN_IDENTITY }} + APPLE_ID: ${{ secrets.APPLE_ID }} + APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} + APPLE_APP_PASSWORD: ${{ secrets.APPLE_APP_PASSWORD }} run: | + resolve_release_value() { + local name="$1" + local direct_value="${2:-}" + if [[ -n "$direct_value" ]]; then printf '%s' "$direct_value"; return 0; fi + if [[ -z "${DOPPLER_TOKEN:-}" ]]; then return 0; fi + doppler secrets get "$name" --plain 2>/dev/null || true + } + + export MACOS_CODESIGN_IDENTITY="$(resolve_release_value MACOS_CODESIGN_IDENTITY "${MACOS_CODESIGN_IDENTITY:-}")" + export APPLE_ID="$(resolve_release_value APPLE_ID "${APPLE_ID:-}")" + export APPLE_TEAM_ID="$(resolve_release_value APPLE_TEAM_ID "${APPLE_TEAM_ID:-}")" + export APPLE_APP_PASSWORD="$(resolve_release_value APPLE_APP_PASSWORD "${APPLE_APP_PASSWORD:-}")" + for value in "$MACOS_CODESIGN_IDENTITY" "$APPLE_ID" "$APPLE_TEAM_ID" "$APPLE_APP_PASSWORD"; do + if [[ -n "$value" ]]; then echo "::add-mask::$value"; fi + done + unset DOPPLER_TOKEN + chmod +x ./tools/package-macos-release.sh APP_PATH="$(find "$BUILD_DIR" -type d -name 'OpenStudio.app' | head -n 1)" if [[ -z "$APP_PATH" ]]; then @@ -280,6 +455,40 @@ jobs: exit 1 fi ./tools/package-macos-release.sh "$APP_PATH" "$VERSION" + if [[ -n "$MACOS_CODESIGN_IDENTITY" ]]; then + echo "OPENSTUDIO_MACOS_PACKAGE_SIGNED=true" >> "$GITHUB_ENV" + fi + if [[ -n "$APPLE_ID" && -n "$APPLE_TEAM_ID" && -n "$APPLE_APP_PASSWORD" ]]; then + echo "OPENSTUDIO_MACOS_PACKAGE_NOTARIZED=true" >> "$GITHUB_ENV" + fi + + - name: Run packaged macOS native-window lifecycle release gate + shell: bash + run: | + MOUNT_DIR="$(mktemp -d)" + REPORT_PATH="$RUNNER_TEMP/OpenStudio_PackagedWindowLifecycleHarness.json" + cleanup() { + hdiutil detach "$MOUNT_DIR" -quiet || true + rmdir "$MOUNT_DIR" 2>/dev/null || true + } + trap cleanup EXIT + + hdiutil attach "dist/macos/OpenStudio-macOS.dmg" -nobrowse -readonly -mountpoint "$MOUNT_DIR" + APP_PATH="$MOUNT_DIR/OpenStudio.app" + test -x "$APP_PATH/Contents/MacOS/OpenStudio" + + if [[ "${OPENSTUDIO_MACOS_PACKAGE_SIGNED:-false}" == "true" ]]; then + codesign --verify --deep --strict --verbose=2 "$APP_PATH" + fi + + if [[ "${OPENSTUDIO_MACOS_PACKAGE_NOTARIZED:-false}" == "true" ]]; then + spctl --assess --type execute --verbose=2 "$APP_PATH" + fi + + pwsh -NoProfile -File ./tools/run-window-lifecycle-smoke.ps1 \ + -AppPath "$APP_PATH/Contents/MacOS/OpenStudio" \ + -ReportPath "$REPORT_PATH" \ + -TimeoutSeconds 180 - name: Verify macOS release outputs shell: bash @@ -291,7 +500,7 @@ jobs: shell: bash run: security delete-keychain "$KEYCHAIN_PATH" || true - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: macos-release path: dist/macos/OpenStudio-macOS.dmg @@ -303,9 +512,10 @@ jobs: VERSION: ${{ github.event.inputs.version || github.ref_name }} BUILD_DIR: build-release-linux ONNXRUNTIME_VERSION: 1.24.4 + ONNXRUNTIME_LINUX_X64_SHA256: 3a211fbea252c1e66290658f1b735b772056149f28321e71c308942cdb54b747 RELEASE_SITE_URL: https://openstudio.org.in steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 - name: Normalize version shell: bash @@ -319,13 +529,13 @@ jobs: libasound2-dev libjack-jackd2-dev \ libwebkit2gtk-4.1-dev libgtk-3-dev \ libgl1-mesa-dev libfreetype6-dev libfontconfig1-dev \ - libcurl4-openssl-dev \ + libcurl4-openssl-dev libsecret-tools \ libx11-dev libxext-dev libxrandr-dev libxi-dev \ libxinerama-dev libxcursor-dev libxcomposite-dev - - uses: actions/setup-node@v5 + - uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5 with: - node-version: 20 + node-version-file: frontend/.nvmrc cache: npm cache-dependency-path: frontend/package-lock.json @@ -336,11 +546,54 @@ jobs: run: | URL="https://github.com/microsoft/onnxruntime/releases/download/v${ONNXRUNTIME_VERSION}/onnxruntime-linux-x64-${ONNXRUNTIME_VERSION}.tgz" wget -q "$URL" -O onnxruntime.tgz + echo "${ONNXRUNTIME_LINUX_X64_SHA256} onnxruntime.tgz" | sha256sum --check --strict mkdir -p thirdparty/onnxruntime tar -xzf onnxruntime.tgz --strip-components=1 -C thirdparty/onnxruntime + - name: Detect Doppler fallback + shell: bash + env: + DOPPLER_TOKEN: ${{ secrets.DOPPLER_TOKEN }} + run: | + if [[ -n "${DOPPLER_TOKEN:-}" ]]; then + echo "DOPPLER_CONFIGURED=true" >> "$GITHUB_ENV" + else + echo "DOPPLER_CONFIGURED=false" >> "$GITHUB_ENV" + fi + + - name: Install Doppler CLI + if: env.DOPPLER_CONFIGURED == 'true' + uses: dopplerhq/cli-action@014df23b1329b615816a38eb5f473bb9000700b1 # v3 + - name: Configure CMake + env: + DOPPLER_TOKEN: ${{ secrets.DOPPLER_TOKEN }} + TONE3000_PUBLISHABLE_KEY: ${{ vars.TONE3000_PUBLISHABLE_KEY != '' && vars.TONE3000_PUBLISHABLE_KEY || secrets.TONE3000_PUBLISHABLE_KEY }} + OPENSTUDIO_TONE3000_CLIENT_ID_VALUE: ${{ secrets.OPENSTUDIO_TONE3000_CLIENT_ID_VALUE }} + OPENSTUDIO_TONE3000_CLIENT_ID: ${{ secrets.OPENSTUDIO_TONE3000_CLIENT_ID }} run: | + resolve_doppler_value() { + local name="$1" + if [[ -z "${DOPPLER_TOKEN:-}" ]]; then return 0; fi + doppler secrets get "$name" --plain 2>/dev/null || true + } + + TONE3000_CLIENT_ID="${TONE3000_PUBLISHABLE_KEY:-${OPENSTUDIO_TONE3000_CLIENT_ID_VALUE:-${OPENSTUDIO_TONE3000_CLIENT_ID:-}}}" + if [[ -z "$TONE3000_CLIENT_ID" ]]; then + for name in TONE3000_PUBLISHABLE_KEY OPENSTUDIO_TONE3000_CLIENT_ID_VALUE OPENSTUDIO_TONE3000_CLIENT_ID; do + TONE3000_CLIENT_ID="$(resolve_doppler_value "$name")" + if [[ -n "$TONE3000_CLIENT_ID" ]]; then + echo "::add-mask::$TONE3000_CLIENT_ID" + break + fi + done + fi + if [ -z "$TONE3000_CLIENT_ID" ]; then + echo "A TONE3000 publishable OAuth client ID is required for release builds." >&2 + exit 1 + fi + unset DOPPLER_TOKEN TONE3000_PUBLISHABLE_KEY OPENSTUDIO_TONE3000_CLIENT_ID_VALUE OPENSTUDIO_TONE3000_CLIENT_ID + cmake -S . -B "$BUILD_DIR" -G Ninja \ -DCMAKE_BUILD_TYPE=Release \ -DOPENSTUDIO_APP_VERSION="$VERSION" \ @@ -348,12 +601,17 @@ jobs: -DOPENSTUDIO_UPDATE_APPCAST_URL_VALUE="$RELEASE_SITE_URL/appcast/linux-stable.xml" \ -DOPENSTUDIO_RELEASES_PAGE_URL_VALUE="$RELEASE_SITE_URL/download" \ -DOPENSTUDIO_UPDATE_CHANNEL_VALUE="stable" \ + -DOPENSTUDIO_TONE3000_CLIENT_ID_VALUE="$TONE3000_CLIENT_ID" \ -DOPENSTUDIO_ENABLE_EXTERNAL_PYTHON_AI_FALLBACK=OFF \ -DFETCHCONTENT_UPDATES_DISCONNECTED=ON - name: Build OpenStudio run: cmake --build "$BUILD_DIR" --config Release --target OpenStudio + - name: Validate Linux runtime bundle + shell: pwsh + run: ./tools/validate-runtime-bundle.ps1 -Platform linux -BundlePath "$env:BUILD_DIR/OpenStudio_artefacts/Release" -ExpectedVersion $env:VERSION -EnforceLeanBundle + - name: Package AppImage run: | chmod +x ./tools/package-linux-release.sh @@ -362,7 +620,25 @@ jobs: - name: Verify Linux release outputs run: test -f "dist/linux/OpenStudio-${VERSION}-linux-x86_64.AppImage" - - uses: actions/upload-artifact@v4 + - name: Validate packaged Linux AppImage contents + shell: bash + run: | + APPIMAGE="$GITHUB_WORKSPACE/dist/linux/OpenStudio-${VERSION}-linux-x86_64.AppImage" + EXTRACT_ROOT="$(mktemp -d)" + cleanup() { rm -rf -- "$EXTRACT_ROOT"; } + trap cleanup EXIT + chmod +x "$APPIMAGE" + ( + cd "$EXTRACT_ROOT" + "$APPIMAGE" --appimage-extract >/dev/null + ) + pwsh -NoProfile -File "$GITHUB_WORKSPACE/tools/validate-runtime-bundle.ps1" \ + -Platform linux \ + -BundlePath "$EXTRACT_ROOT/squashfs-root/usr/bin" \ + -ExpectedVersion "$VERSION" \ + -EnforceLeanBundle + + - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 with: name: linux-release path: dist/linux/OpenStudio-*-linux-x86_64.AppImage @@ -381,28 +657,10 @@ jobs: RELEASE_NOTES_FILE: ${{ github.event.inputs.release_notes_file || 'packaging/release-notes-template.md' }} AI_RUNTIME_VERSION: ${{ vars.OPENSTUDIO_AI_RUNTIME_VERSION != '' && vars.OPENSTUDIO_AI_RUNTIME_VERSION || github.event.inputs.version || github.ref_name }} AI_RUNTIME_RELEASE_TAG: ${{ vars.OPENSTUDIO_AI_RUNTIME_RELEASE_TAG }} - DOPPLER_TOKEN: ${{ secrets.DOPPLER_TOKEN }} WEBSITE_REPO: ${{ vars.OPENSTUDIO_WEBSITE_REPO != '' && vars.OPENSTUDIO_WEBSITE_REPO || 'sdevil7th/OpenStudioWebsite' }} WEBSITE_DISPATCH_EVENT_TYPE: ${{ vars.OPENSTUDIO_WEBSITE_DISPATCH_EVENT_TYPE != '' && vars.OPENSTUDIO_WEBSITE_DISPATCH_EVENT_TYPE || 'openstudio_release_published' }} steps: - - uses: actions/checkout@v5 - - - name: Install Doppler CLI - if: env.DOPPLER_TOKEN != '' - uses: dopplerhq/cli-action@v3 - - - name: Load release secrets from Doppler - if: env.DOPPLER_TOKEN != '' - shell: pwsh - run: | - $secrets = doppler secrets download --no-file --format json | ConvertFrom-Json -AsHashtable - foreach ($entry in $secrets.GetEnumerator()) { - if (-not [string]::IsNullOrWhiteSpace([Environment]::GetEnvironmentVariable($entry.Key))) { - continue - } - - "$($entry.Key)=$($entry.Value)" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8 - } + - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 - name: Normalize version shell: bash @@ -430,17 +688,17 @@ jobs: echo "Either run .github/workflows/ai-runtime-release.yml first, or point OPENSTUDIO_AI_RUNTIME_RELEASE_TAG / OPENSTUDIO_AI_RUNTIME_VERSION at an existing runtime release." >&2 exit 1 - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 with: name: windows-release path: dist/windows - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 with: name: macos-release path: dist/macos - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4 with: name: linux-release path: dist/linux @@ -469,6 +727,7 @@ jobs: run: | $requiredFiles = @( "dist/windows/OpenStudio-Setup-x64.exe", + "dist/windows/OpenStudio-FFmpeg-8.0.1-complete-corresponding-source.zip", "dist/macos/OpenStudio-macOS.dmg", "dist/ai-runtime/OpenStudio-AI-Runtime-windows-base-x64.zip", "dist/ai-runtime/OpenStudio-AI-Runtime-macos-arm64.zip", @@ -508,6 +767,7 @@ jobs: -WindowsInstallerArguments "/SP- /NOICONS" ` -MacAssetPath "dist/macos/OpenStudio-macOS.dmg" ` -MacAssetUrl $macosUrl ` + -MacMinimumSystemVersion "12.0" ` -LinuxAssetPath "dist/linux/OpenStudio-$env:VERSION-linux-x86_64.AppImage" ` -LinuxAssetUrl $linuxUrl ` -WindowsBaseAiRuntimeAssetPath "dist/ai-runtime/OpenStudio-AI-Runtime-windows-base-x64.zip" ` @@ -546,16 +806,25 @@ jobs: -MetadataDir "dist/release-metadata" ` -OutputDir "dist/release-publish-assets" + - name: Add FFmpeg source archive to release checksums + shell: pwsh + run: | + $sourcePath = "dist/windows/OpenStudio-FFmpeg-8.0.1-complete-corresponding-source.zip" + $checksumsPath = "dist/release-publish-assets/OpenStudio-checksums.txt" + $sourceHash = (Get-FileHash -LiteralPath $sourcePath -Algorithm SHA256).Hash.ToLowerInvariant() + "$sourceHash OpenStudio-FFmpeg-8.0.1-complete-corresponding-source.zip" | + Add-Content -LiteralPath $checksumsPath -Encoding utf8 + - name: Publish GitHub release - uses: softprops/action-gh-release@v2 + uses: softprops/action-gh-release@3bb12739c298aeb8a4eeaf626c5b8d85266b0e65 # v2 with: tag_name: ${{ startsWith(github.ref, 'refs/tags/') && github.ref_name || format('v{0}', github.event.inputs.version) }} name: OpenStudio ${{ env.VERSION }} body_path: ${{ env.RELEASE_NOTES_FILE }} fail_on_unmatched_files: true - overwrite_files: true files: | dist/windows/OpenStudio-Setup-x64.exe + dist/windows/OpenStudio-FFmpeg-8.0.1-complete-corresponding-source.zip dist/macos/OpenStudio-macOS.dmg dist/linux/OpenStudio-*-linux-x86_64.AppImage dist/release-publish-assets/OpenStudio-checksums.txt @@ -578,7 +847,7 @@ jobs: fi - name: Trigger website release publish - uses: peter-evans/repository-dispatch@v3 + uses: peter-evans/repository-dispatch@ff45666b9427631e3450c54a1bcbee4d9ff4d7c0 # v3 with: token: ${{ secrets.OPENSTUDIO_WEBSITE_DISPATCH_TOKEN }} repository: ${{ env.WEBSITE_REPO }} diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml index 5d27263..337d200 100644 --- a/.github/workflows/verify.yml +++ b/.github/workflows/verify.yml @@ -7,19 +7,55 @@ on: pull_request: workflow_dispatch: +permissions: + contents: read + jobs: + verify-input-profiles: + name: Input profiles (${{ matrix.os }}) + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [windows-latest, macos-14] + defaults: + run: + working-directory: frontend + steps: + - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 + + - uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5 + with: + node-version-file: frontend/.nvmrc + cache: npm + cache-dependency-path: frontend/package-lock.json + + - name: Install frontend dependencies + run: npm ci + + - name: Run frontend unit tests + run: npm test + + - name: Install Playwright Chromium + run: npx playwright install chromium + + - name: Run shortcut and input-profile browser tests + run: npm run test:e2e + verify-windows: runs-on: windows-latest env: VERSION: 0.0.0 BUILD_DIR: build-verify-windows ASIO_SDK_DIR: thirdparty/asio + ONNXRUNTIME_VERSION: 1.24.4 + ONNXRUNTIME_WIN_X64_SHA256: d2319fddfb6ea4db99ccc4b60c85c517bcd855721f5daa6a06d40d7cb2ee2357 steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 - - uses: actions/setup-node@v5 + - uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5 with: - node-version: 20 + node-version-file: frontend/.nvmrc cache: npm cache-dependency-path: frontend/package-lock.json @@ -28,12 +64,18 @@ jobs: run: | cd frontend npm ci + if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } npm run build + if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } - name: Install ASIO SDK shell: pwsh run: ./tools/setup-asio-sdk.ps1 -Destination $env:ASIO_SDK_DIR + - name: Install ONNX Runtime + shell: pwsh + run: ./tools/setup-onnxruntime.ps1 -Version $env:ONNXRUNTIME_VERSION -ExpectedSha256 $env:ONNXRUNTIME_WIN_X64_SHA256 + - name: Install Windows prerequisite installers shell: pwsh run: | @@ -112,17 +154,101 @@ jobs: throw "Windows startup self-test failed." } + - name: Regress WebView2 preflight from a non-writable install directory + shell: pwsh + run: | + $sourceBundle = Join-Path $env:GITHUB_WORKSPACE "$env:BUILD_DIR/OpenStudio_artefacts/Release" + $protectedBundle = Join-Path $env:RUNNER_TEMP "OpenStudio-Protected-Install" + Copy-Item -LiteralPath $sourceBundle -Destination $protectedBundle -Recurse + + # Model Program Files precisely: the test identity may read and + # execute the bundle but may not write beside OpenStudio.exe. + $acl = New-Object System.Security.AccessControl.DirectorySecurity + $acl.SetAccessRuleProtection($true, $false) + $inheritance = [System.Security.AccessControl.InheritanceFlags]'ContainerInherit, ObjectInherit' + $none = [System.Security.AccessControl.PropagationFlags]::None + $allow = [System.Security.AccessControl.AccessControlType]::Allow + $deny = [System.Security.AccessControl.AccessControlType]::Deny + $currentUser = [Security.Principal.WindowsIdentity]::GetCurrent().Name + # GitHub-hosted Windows runners execute as an administrator. An explicit + # user deny keeps the probe non-writable while the Administrators group + # retains the delete and ACL rights needed for runner cleanup. + $acl.AddAccessRule((New-Object System.Security.AccessControl.FileSystemAccessRule( + $currentUser, 'Write', $inheritance, $none, $deny))) + $acl.AddAccessRule((New-Object System.Security.AccessControl.FileSystemAccessRule( + $currentUser, 'ReadAndExecute, Synchronize', $inheritance, $none, $allow))) + $acl.AddAccessRule((New-Object System.Security.AccessControl.FileSystemAccessRule( + 'NT AUTHORITY\SYSTEM', 'FullControl', $inheritance, $none, $allow))) + $acl.AddAccessRule((New-Object System.Security.AccessControl.FileSystemAccessRule( + 'BUILTIN\Administrators', 'FullControl', $inheritance, $none, $allow))) + Set-Acl -LiteralPath $protectedBundle -AclObject $acl + + $writeProbe = Join-Path $protectedBundle 'must-not-write.tmp' + $writeDenied = $false + try { + [System.IO.File]::WriteAllText($writeProbe, 'probe') + } catch [System.UnauthorizedAccessException] { + $writeDenied = $true + } + if ((Test-Path -LiteralPath $writeProbe) -or -not $writeDenied) { + throw "Staged install directory remained writable." + } + + $report = Join-Path $env:RUNNER_TEMP "OpenStudio_ProtectedInstallStartupSelfTest.txt" + $exePath = Join-Path $protectedBundle "OpenStudio.exe" + $process = Start-Process -FilePath $exePath -ArgumentList @("--startup-self-test", "--report", "`"$report`"") -Wait -PassThru + if ($process.ExitCode -ne 0) { + if (Test-Path -LiteralPath $report) { + Get-Content -LiteralPath $report + } + throw "WebView2 preflight failed from a non-writable install directory." + } + + $reportText = [System.IO.File]::ReadAllText($report) + $userDataMatch = [regex]::Match($reportText, '(?m)^webView2UserDataPath=(.+)$') + if (-not $userDataMatch.Success) { + throw "Protected-install self-test did not report its WebView2 user-data folder." + } + $userDataPath = [System.IO.Path]::GetFullPath($userDataMatch.Groups[1].Value.Trim()) + $protectedRoot = [System.IO.Path]::GetFullPath($protectedBundle).TrimEnd('\') + '\' + if ($userDataPath.StartsWith($protectedRoot, [System.StringComparison]::OrdinalIgnoreCase)) { + throw "WebView2 user data incorrectly resolves inside the protected install tree: $userDataPath" + } + + - name: Run Windows native-window lifecycle smoke test + shell: pwsh + run: | + $exePath = Join-Path $env:GITHUB_WORKSPACE "$env:BUILD_DIR/OpenStudio_artefacts/Release/OpenStudio.exe" + $report = Join-Path $env:RUNNER_TEMP "OpenStudio_WindowLifecycleHarness.json" + ./tools/run-window-lifecycle-smoke.ps1 -AppPath $exePath -ReportPath $report -TimeoutSeconds 180 + + - name: Run NAM Rack deterministic regression + shell: pwsh + run: | + $exePath = Join-Path $env:GITHUB_WORKSPACE "$env:BUILD_DIR/OpenStudio_artefacts/Release/OpenStudio.exe" + ./tools/run-nam-rack-headless-regression.ps1 ` + -AppPath $exePath ` + -OutputRoot $env:RUNNER_TEMP ` + -Label "ci-release" ` + -TimeoutSeconds 360 ` + -SkipBuild + verify-macos: - runs-on: macos-14 + name: macOS native windows (${{ matrix.os }}) + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [macos-14, macos-15-intel] env: VERSION: 0.0.0 BUILD_DIR: build-verify-macos steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 - - uses: actions/setup-node@v5 + - uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5 with: - node-version: 20 + node-version-file: frontend/.nvmrc cache: npm cache-dependency-path: frontend/package-lock.json @@ -159,6 +285,14 @@ jobs: shell: pwsh run: ./tools/validate-runtime-bundle.ps1 -Platform macos -BundlePath "$env:APP_BUNDLE" -ExpectedVersion "$env:VERSION" -EnforceLeanBundle + - name: Validate universal macOS executable + shell: bash + run: | + ARCHS="$(lipo -archs "$APP_BUNDLE/Contents/MacOS/OpenStudio")" + echo "OpenStudio architectures: $ARCHS" + [[ " $ARCHS " == *" arm64 "* ]] + [[ " $ARCHS " == *" x86_64 "* ]] + - name: Run macOS startup self-test shell: bash run: | @@ -171,14 +305,22 @@ jobs: exit 1 fi + - name: Run macOS native-window lifecycle smoke test + shell: pwsh + run: | + $executable = Join-Path $env:APP_BUNDLE "Contents/MacOS/OpenStudio" + $report = Join-Path $env:RUNNER_TEMP "OpenStudio_WindowLifecycleHarness.json" + ./tools/run-window-lifecycle-smoke.ps1 -AppPath $executable -ReportPath $report -TimeoutSeconds 180 + verify-linux: runs-on: ubuntu-24.04 env: VERSION: 0.0.0 BUILD_DIR: build-verify-linux ONNXRUNTIME_VERSION: 1.24.4 + ONNXRUNTIME_LINUX_X64_SHA256: 3a211fbea252c1e66290658f1b735b772056149f28321e71c308942cdb54b747 steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5 - name: Install system dependencies shell: bash @@ -186,9 +328,9 @@ jobs: bash ./tools/setup-linux-prereqs.sh sudo apt-get install -y xvfb - - uses: actions/setup-node@v5 + - uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5 with: - node-version: 20 + node-version-file: frontend/.nvmrc cache: npm cache-dependency-path: frontend/package-lock.json @@ -204,6 +346,7 @@ jobs: run: | URL="https://github.com/microsoft/onnxruntime/releases/download/v${ONNXRUNTIME_VERSION}/onnxruntime-linux-x64-${ONNXRUNTIME_VERSION}.tgz" wget -q "$URL" -O onnxruntime.tgz + echo "${ONNXRUNTIME_LINUX_X64_SHA256} onnxruntime.tgz" | sha256sum --check --strict mkdir -p thirdparty/onnxruntime tar -xzf onnxruntime.tgz --strip-components=1 -C thirdparty/onnxruntime @@ -249,3 +392,21 @@ jobs: - name: Verify Linux AppImage output shell: bash run: test -f "dist/linux/OpenStudio-${VERSION}-linux-x86_64.AppImage" + + - name: Validate packaged Linux AppImage contents + shell: bash + run: | + APPIMAGE="$GITHUB_WORKSPACE/dist/linux/OpenStudio-${VERSION}-linux-x86_64.AppImage" + EXTRACT_ROOT="$(mktemp -d)" + cleanup() { rm -rf -- "$EXTRACT_ROOT"; } + trap cleanup EXIT + chmod +x "$APPIMAGE" + ( + cd "$EXTRACT_ROOT" + "$APPIMAGE" --appimage-extract >/dev/null + ) + pwsh -NoProfile -File "$GITHUB_WORKSPACE/tools/validate-runtime-bundle.ps1" \ + -Platform linux \ + -BundlePath "$EXTRACT_ROOT/squashfs-root/usr/bin" \ + -ExpectedVersion "$VERSION" \ + -EnforceLeanBundle diff --git a/.gitignore b/.gitignore index 6a1618c..f7c2a39 100644 --- a/.gitignore +++ b/.gitignore @@ -11,6 +11,7 @@ cmake_install.cmake # IDE .vs .vscode +.claude/settings.local.json *.sln *.vcxproj *.vcxproj.filters @@ -52,9 +53,28 @@ get-pip.py /tools/linuxdeploy-*.AppImage # Local pitch/render regression outputs +/qa/ +/.playwright-cli/ +/frontend/.playwright-cli/ +/.codex-key-diff.txt +/.codex_tmp/ +/output/ +/tmp_nam_rack_runs/ +/tmp_clean_guitar_runs/ +/docs/nam-rack-design-html/ +/docs/nam-rack-neural-clean-handoff/ +/docs/nam_visual_design/ +/docs/nam_visual_qa/ /tmp_pitch_runs/ /pitch_debug_captures/ /*_signal_chain_debug/ + +# Local maintainer planning (not for the public repository) +/docs/roadmap.internal.md + +# NAM design masters are archived outside the repo; runtime WebP assets stay tracked. +/frontend/src/assets/nam/design/**/*.png +/frontend/src/assets/nam/rack-studio-backdrop-v2.png /signal_chain_debug/ /tests/fixtures/pitch-regression/runs/ /tests/fixtures/pitch-regression/**/*.wav @@ -135,15 +155,14 @@ get-pip.py # ML models (large binary files, downloaded at setup/runtime) /resources/models/*.onnx +!/resources/models/basic_pitch_nmp.onnx /resources/models/*.ckpt /resources/models/*.bin /resources/models/*.ort # Audio test samples /audio_test_samples/ - -# Local QA screenshots/reports generated by browser and native harnesses -/qa/ +/resources/test_fixtures/ # Logs *.log diff --git a/AGENTS.md b/AGENTS.md index a93a64d..2b9495b 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,4 +1,4 @@ -# Studio13-v3 +# OpenStudio A hybrid DAW (Digital Audio Workstation) with a **JUCE C++ backend** for audio processing and a **React/TypeScript frontend** rendered in WebView2. @@ -26,7 +26,7 @@ C++ (JUCE) Backend React/TypeScript Frontend ## Directory Structure ``` -Studio13-v3/ +OpenStudio/ ├── Source/ # C++ backend │ ├── Main.cpp # JUCE app entry point │ ├── MainComponent.h/cpp # Hosts WebBrowserComponent + AudioEngine, exposes native functions to JS @@ -138,9 +138,9 @@ Studio13-v3/ ├── tools/ # ffmpeg.exe, stem_separator.py, setup scripts ├── resources/ # ONNX models, presets, resources ├── build/ # CMake build output -├── CMakeLists.txt # C++ build: JUCE 8.0.0, ASIO SDK, WebView2, VST3, ONNX Runtime +├── CMakeLists.txt # C++ build: JUCE 9.0.1, ASIO SDK, WebView2, VST3, ONNX Runtime ├── build.py # Python orchestrator: cmake + npm + vite dev server -├── pitch_corrector_feat_plan.md # Detailed pitch editor implementation plan (Melodyne/RePitch/VariAudio parity) +├── docs/roadmap.md # Open release/product work; completed implementation history stays in Git └── WORKFLOWS.md # Dev workflow docs ``` @@ -177,7 +177,7 @@ Before asking for manual testing: - Make sure the latest frontend code is built into `frontend/dist` when packaged fallback could be used. - Run `cmake --build build --config Debug` after frontend or C++ changes so the Debug app and copied `webui` assets are current. - Do not require the user to pre-run Vite, npm, or any other server. `python build.py dev --run` must start what it needs. -- Stop any Codex-started dev servers, harness browsers, or background Vite/npm processes before handing off. Verify port `5173` is not left occupied by a Codex-started process. +- Stop any Codex-started dev servers, harness browsers, or background Vite/npm processes before handing off. Verify port `5183` is not left occupied by a Codex-started process. - In the handoff, state that the CMake Debug build was completed and that no pre-running server is required. ## Key Technical Details @@ -232,7 +232,7 @@ For **continuous edits** (faders, knobs), use the begin/commit pattern: `beginXE ### Pitch Editor Subsystem -The pitch editor enables vocal pitch correction with both real-time (auto-tune style) and graphical (Melodyne-style) modes. The implementation plan for reaching Melodyne/RePitch/VariAudio quality is in `pitch_corrector_feat_plan.md`. +The pitch editor enables vocal pitch correction with both real-time (auto-tune style) and graphical (Melodyne-style) modes. Current open work and release decisions live in `docs/roadmap.md`; renderer evidence is retained only in the dedicated pitch research notes. **Architecture**: ``` @@ -310,6 +310,23 @@ Real-time corrector: - Semantic colors: `daw-record` (red), `daw-mute` (green), `daw-solo` (yellow), `daw-fx` (lime) - UI components in `components/ui/` use variant pattern (default, primary, success, danger, etc.) +### Frontend Styling and Visual QA + +- Do not generate stylesheet strings at runtime, mount JSX `
" + << "

" << safeTitle << "

" << safeDetail << "

"; + + juce::String response; + response << "HTTP/1.1 " << status << "\r\n" + << "Content-Type: text/html; charset=utf-8\r\n" + << "Content-Length: " << static_cast (html.getNumBytesAsUTF8()) << "\r\n" + << "Connection: close\r\n\r\n" + << html; + writeTone3000SocketText(socket, response, 3000); +} + +juce::String readTone3000HttpRequest(juce::StreamingSocket& socket, int timeoutMs) +{ + juce::MemoryOutputStream stream; + char buffer[1024] {}; + const auto deadline = juce::Time::currentTimeMillis() + timeoutMs; + + while (stream.getDataSize() < 16384 && juce::Time::currentTimeMillis() < deadline) + { + if (socket.waitUntilReady(true, 250) <= 0) + continue; + + const auto bytesRead = socket.read(buffer, static_cast (sizeof(buffer)), false); + if (bytesRead <= 0) + break; + + stream.write(buffer, static_cast (bytesRead)); + const auto text = juce::String::fromUTF8(static_cast (stream.getData()), static_cast (stream.getDataSize())); + if (text.contains("\r\n\r\n")) + return text; + } + + return juce::String::fromUTF8(static_cast (stream.getData()), static_cast (stream.getDataSize())); +} + +juce::String base64UrlEncode(const void* data, size_t size) +{ + auto text = juce::Base64::toBase64(data, size); + text = text.replace("+", "-").replace("/", "_"); + return text.trimCharactersAtEnd("="); +} + +juce::String makeTone3000FormBody(const juce::StringPairArray& values) +{ + juce::String body; + const auto keys = values.getAllKeys(); + const auto allValues = values.getAllValues(); + for (int i = 0; i < values.size(); ++i) + { + if (i > 0) + body << "&"; + body << juce::URL::addEscapeChars(keys[i], true) + << "=" + << juce::URL::addEscapeChars(allValues[i], true); + } + return body; +} + +juce::String makeTone3000CodeVerifier() +{ + auto verifier = (juce::Uuid().toString() + juce::Uuid().toString() + juce::Uuid().toString()) + .replace("-", "") + .replace("{", "") + .replace("}", ""); + return verifier.substring(0, 96); +} + +juce::String makeTone3000CodeChallenge(const juce::String& verifier) +{ + juce::MemoryBlock verifierData(verifier.toRawUTF8(), verifier.getNumBytesAsUTF8()); + const auto hash = juce::SHA256(verifierData).getRawData(); + return base64UrlEncode(hash.getData(), hash.getSize()); +} + +#if ! JUCE_WINDOWS +juce::String tone3000SecureItemName(const juce::File& legacyFile) +{ + return legacyFile.getFileName().containsIgnoreCase("pending") + ? juce::String("pending-auth") + : juce::String("oauth-token"); +} +#endif + +#if JUCE_MAC +struct Tone3000MacKeychainApi +{ + using Find = OSStatus (*) (CFTypeRef, UInt32, const char*, UInt32, + const char*, UInt32*, void**, + SecKeychainItemRef*); + using Add = OSStatus (*) (SecKeychainRef, UInt32, const char*, UInt32, + const char*, UInt32, const void*, + SecKeychainItemRef*); + using Modify = OSStatus (*) (SecKeychainItemRef, + const SecKeychainAttributeList*, + UInt32, const void*); + using Delete = OSStatus (*) (SecKeychainItemRef); + using FreeContent = OSStatus (*) (SecKeychainAttributeList*, void*); + + void* library = nullptr; + Find find = nullptr; + Add add = nullptr; + Modify modify = nullptr; + Delete remove = nullptr; + FreeContent freeContent = nullptr; + + Tone3000MacKeychainApi() + { + library = ::dlopen( + "/System/Library/Frameworks/Security.framework/Security", + RTLD_NOW | RTLD_LOCAL); + if (library == nullptr) + return; + find = reinterpret_cast(::dlsym( + library, "SecKeychainFindGenericPassword")); + add = reinterpret_cast(::dlsym( + library, "SecKeychainAddGenericPassword")); + modify = reinterpret_cast(::dlsym( + library, "SecKeychainItemModifyAttributesAndData")); + remove = reinterpret_cast(::dlsym( + library, "SecKeychainItemDelete")); + freeContent = reinterpret_cast(::dlsym( + library, "SecKeychainItemFreeContent")); + } + + ~Tone3000MacKeychainApi() + { + if (library != nullptr) + ::dlclose(library); + } + + bool available() const noexcept + { + return find != nullptr && add != nullptr && modify != nullptr + && remove != nullptr && freeContent != nullptr; + } +}; + +Tone3000MacKeychainApi& getTone3000MacKeychainApi() +{ + static Tone3000MacKeychainApi api; + return api; +} + +constexpr const char* kTone3000KeychainService = + "com.openstudio.OpenStudio.TONE3000"; + +bool loadTone3000MacKeychainText(const juce::String& item, + juce::String& text, + bool& found, + juce::String& error) +{ + text.clear(); + found = false; + error.clear(); + auto& api = getTone3000MacKeychainApi(); + if (! api.available()) + { + error = "macOS Keychain services are unavailable"; + return false; + } + + UInt32 dataLength = 0; + void* data = nullptr; + SecKeychainItemRef keychainItem = nullptr; + const auto account = item.toRawUTF8(); + const auto status = api.find( + nullptr, + static_cast(std::strlen(kTone3000KeychainService)), + kTone3000KeychainService, + static_cast(item.getNumBytesAsUTF8()), + account, + &dataLength, + &data, + &keychainItem); + if (status == errSecItemNotFound) + return true; + if (status != errSecSuccess) + { + error = "Could not read the TONE3000 session from macOS Keychain (" + + juce::String(static_cast(status)) + ")"; + return false; + } + + found = true; + text = juce::String::fromUTF8( + static_cast(data), static_cast(dataLength)); + if (data != nullptr) + api.freeContent(nullptr, data); + if (keychainItem != nullptr) + CFRelease(keychainItem); + return true; +} + +bool saveTone3000MacKeychainText(const juce::String& item, + const juce::String& text, + juce::String& error) +{ + error.clear(); + auto& api = getTone3000MacKeychainApi(); + if (! api.available()) + { + error = "macOS Keychain services are unavailable"; + return false; + } + + UInt32 existingLength = 0; + void* existingData = nullptr; + SecKeychainItemRef keychainItem = nullptr; + const auto account = item.toRawUTF8(); + const auto findStatus = api.find( + nullptr, + static_cast(std::strlen(kTone3000KeychainService)), + kTone3000KeychainService, + static_cast(item.getNumBytesAsUTF8()), + account, + &existingLength, + &existingData, + &keychainItem); + if (findStatus == errSecSuccess && existingData != nullptr) + api.freeContent(nullptr, existingData); + + const auto* bytes = text.toRawUTF8(); + const auto byteCount = static_cast(text.getNumBytesAsUTF8()); + OSStatus status = errSecSuccess; + if (findStatus == errSecSuccess && keychainItem != nullptr) + { + status = api.modify(keychainItem, nullptr, byteCount, bytes); + CFRelease(keychainItem); + } + else if (findStatus == errSecItemNotFound) + { + status = api.add( + nullptr, + static_cast(std::strlen(kTone3000KeychainService)), + kTone3000KeychainService, + static_cast(item.getNumBytesAsUTF8()), + account, + byteCount, + bytes, + nullptr); + } + else + { + status = findStatus == errSecSuccess + ? errSecInvalidItemRef + : findStatus; + if (keychainItem != nullptr) + CFRelease(keychainItem); + } + + if (status != errSecSuccess) + { + error = "Could not store the TONE3000 session in macOS Keychain (" + + juce::String(static_cast(status)) + ")"; + return false; + } + return true; +} + +bool deleteTone3000MacKeychainText(const juce::String& item) +{ + auto& api = getTone3000MacKeychainApi(); + if (! api.available()) + return false; + + UInt32 dataLength = 0; + void* data = nullptr; + SecKeychainItemRef keychainItem = nullptr; + const auto account = item.toRawUTF8(); + const auto findStatus = api.find( + nullptr, + static_cast(std::strlen(kTone3000KeychainService)), + kTone3000KeychainService, + static_cast(item.getNumBytesAsUTF8()), + account, + &dataLength, + &data, + &keychainItem); + if (findStatus == errSecItemNotFound) + return true; + if (findStatus != errSecSuccess) + return false; + if (data != nullptr) + api.freeContent(nullptr, data); + if (keychainItem == nullptr) + return false; + const auto deleteStatus = api.remove(keychainItem); + CFRelease(keychainItem); + return deleteStatus == errSecSuccess; +} +#elif JUCE_LINUX +juce::File findTone3000SecretTool() +{ + for (const auto& candidate : { + juce::File("/usr/bin/secret-tool"), + juce::File("/bin/secret-tool") }) + { + if (candidate.existsAsFile()) + return candidate; + } + return {}; +} + +bool runTone3000SecretTool(const juce::StringArray& arguments, + juce::String& output, + int& exitCode) +{ + const auto tool = findTone3000SecretTool(); + if (! tool.existsAsFile()) + return false; + juce::StringArray command; + command.add(tool.getFullPathName()); + for (const auto& argument : arguments) + command.add(argument); + juce::ChildProcess process; + if (! process.start(command)) + return false; + const auto deadline = + juce::Time::getMillisecondCounterHiRes() + 30000.0; + while (process.isRunning() + && juce::Time::getMillisecondCounterHiRes() < deadline + && ! isTone3000TaskCancelled()) + { + juce::Thread::sleep(25); + } + if (process.isRunning()) + { + process.kill(); + exitCode = -1; + return true; + } + exitCode = process.getExitCode(); + output = process.readAllProcessOutput(); + return true; +} + +bool runTone3000SecretToolWithInput(const juce::StringArray& arguments, + const juce::String& input, + int& exitCode) +{ + exitCode = -1; + const auto tool = findTone3000SecretTool(); + if (! tool.existsAsFile()) + return false; + + int inputPipe[2] { -1, -1 }; + if (::pipe(inputPipe) != 0) + return false; + + posix_spawn_file_actions_t actions; + if (::posix_spawn_file_actions_init(&actions) != 0) + { + ::close(inputPipe[0]); + ::close(inputPipe[1]); + return false; + } + const bool actionsReady = + ::posix_spawn_file_actions_adddup2( + &actions, inputPipe[0], STDIN_FILENO) == 0 + && ::posix_spawn_file_actions_addclose( + &actions, inputPipe[1]) == 0 + && ::posix_spawn_file_actions_addopen( + &actions, STDOUT_FILENO, "/dev/null", O_WRONLY, 0) == 0 + && ::posix_spawn_file_actions_addopen( + &actions, STDERR_FILENO, "/dev/null", O_WRONLY, 0) == 0; + if (! actionsReady) + { + ::posix_spawn_file_actions_destroy(&actions); + ::close(inputPipe[0]); + ::close(inputPipe[1]); + return false; + } + + std::vector ownedArguments; + ownedArguments.reserve(static_cast(arguments.size()) + 1); + ownedArguments.push_back(tool.getFullPathName().toStdString()); + for (const auto& argument : arguments) + ownedArguments.push_back(argument.toStdString()); + std::vector argv; + argv.reserve(ownedArguments.size() + 1); + for (auto& argument : ownedArguments) + argv.push_back(argument.data()); + argv.push_back(nullptr); + + pid_t child = 0; + const int spawnStatus = ::posix_spawn( + &child, + ownedArguments.front().c_str(), + &actions, + nullptr, + argv.data(), + environ); + ::posix_spawn_file_actions_destroy(&actions); + ::close(inputPipe[0]); + if (spawnStatus != 0) + { + ::close(inputPipe[1]); + return false; + } + + sigset_t blockedSignals; + sigset_t previousSignals; + ::sigemptyset(&blockedSignals); + ::sigaddset(&blockedSignals, SIGPIPE); + if (::pthread_sigmask( + SIG_BLOCK, &blockedSignals, &previousSignals) != 0) + { + ::close(inputPipe[1]); + ::kill(child, SIGKILL); + (void) ::waitpid(child, nullptr, 0); + return false; + } + sigset_t pendingBefore; + ::sigpending(&pendingBefore); + const bool sigpipeWasPending = ::sigismember(&pendingBefore, SIGPIPE) == 1; + + const auto utf8 = input.toUTF8(); + size_t written = 0; + while (written < utf8.sizeInBytes() - 1) + { + if (isTone3000TaskCancelled()) + break; + const auto count = ::write( + inputPipe[1], + utf8.getAddress() + written, + utf8.sizeInBytes() - 1 - written); + if (count < 0 && errno == EINTR) + continue; + if (count <= 0) + break; + written += static_cast(count); + } + ::close(inputPipe[1]); + if (! sigpipeWasPending) + { + timespec noWait { 0, 0 }; + (void) ::sigtimedwait(&blockedSignals, nullptr, &noWait); + } + (void) ::pthread_sigmask(SIG_SETMASK, &previousSignals, nullptr); + + if (isTone3000TaskCancelled()) + { + ::kill(child, SIGKILL); + (void) ::waitpid(child, nullptr, 0); + exitCode = -1; + return true; + } + + int childStatus = 0; + bool childReaped = false; + const auto deadline = juce::Time::getMillisecondCounterHiRes() + 30000.0; + for (;;) + { + const auto waitResult = ::waitpid(child, &childStatus, WNOHANG); + if (waitResult == child) + { + childReaped = true; + break; + } + if (waitResult < 0 && errno != EINTR) + break; + if (isTone3000TaskCancelled() + || juce::Time::getMillisecondCounterHiRes() >= deadline) + { + ::kill(child, SIGKILL); + (void) ::waitpid(child, &childStatus, 0); + exitCode = -1; + return true; + } + juce::Thread::sleep(10); + } + if (! childReaped) + { + ::kill(child, SIGKILL); + (void) ::waitpid(child, &childStatus, 0); + } + exitCode = childReaped && WIFEXITED(childStatus) + ? WEXITSTATUS(childStatus) + : -1; + return written == utf8.sizeInBytes() - 1; +} + +bool saveTone3000LinuxSecret(const juce::String& item, + const juce::String& text, + juce::String& error) +{ + error.clear(); + const auto tool = findTone3000SecretTool(); + if (! tool.existsAsFile()) + { + error = "Secret Service is unavailable (secret-tool was not found)"; + return false; + } + + juce::StringArray arguments; + arguments.add("store"); + arguments.add("--label=OpenStudio TONE3000"); + arguments.add("service"); + arguments.add("com.openstudio.OpenStudio.TONE3000"); + arguments.add("item"); + arguments.add(item); + int status = -1; + if (! runTone3000SecretToolWithInput(arguments, text, status) + || status != 0) + { + error = "Could not store the TONE3000 session in Secret Service"; + return false; + } + return true; +} + +bool loadTone3000LinuxSecret(const juce::String& item, + juce::String& text, + bool& found, + juce::String& error) +{ + text.clear(); + found = false; + error.clear(); + juce::StringArray arguments; + arguments.add("lookup"); + arguments.add("service"); + arguments.add("com.openstudio.OpenStudio.TONE3000"); + arguments.add("item"); + arguments.add(item); + int status = -1; + juce::String output; + if (! runTone3000SecretTool(arguments, output, status)) + { + error = "Secret Service is unavailable (secret-tool was not found)"; + return false; + } + found = status == 0 && output.isNotEmpty(); + if (status != 0 && status != 1) + { + error = "Could not read the TONE3000 session from Secret Service"; + return false; + } + if (found) + text = output.trimCharactersAtEnd("\r\n"); + return true; +} + +bool deleteTone3000LinuxSecret(const juce::String& item) +{ + juce::StringArray arguments; + arguments.add("clear"); + arguments.add("service"); + arguments.add("com.openstudio.OpenStudio.TONE3000"); + arguments.add("item"); + arguments.add(item); + int status = -1; + juce::String output; + return runTone3000SecretTool(arguments, output, status) + && (status == 0 || status == 1); +} +#endif + +bool saveProtectedText(const juce::File& file, const juce::String& text, juce::String& error) +{ + const auto directoryResult = file.getParentDirectory().createDirectory(); + if (directoryResult.failed()) + { + error = "Could not create the private TONE3000 session directory"; + return false; + } + +#if JUCE_WINDOWS + juce::MemoryBlock plain(text.toRawUTF8(), text.getNumBytesAsUTF8()); + DATA_BLOB input {}; + input.pbData = static_cast(plain.getData()); + input.cbData = static_cast(plain.getSize()); + + DATA_BLOB output {}; + if (!::CryptProtectData(&input, L"OpenStudio TONE3000", nullptr, nullptr, nullptr, + CRYPTPROTECT_UI_FORBIDDEN, &output)) + { + error = "DPAPI encryption failed"; + return false; + } + + juce::TemporaryFile temporaryFile(file, juce::TemporaryFile::useHiddenFile); + const bool wroteTemporary = temporaryFile.getFile().replaceWithData(output.pbData, output.cbData); + ::LocalFree(output.pbData); + if (! wroteTemporary || ! temporaryFile.overwriteTargetFileWithTemporary()) + { + error = "Could not write encrypted token file"; + return false; + } + return true; +#elif JUCE_MAC + if (! saveTone3000MacKeychainText( + tone3000SecureItemName(file), text, error)) + return false; + // Successful secure publication completes migration from pre-release + // plaintext storage. + if (file.existsAsFile() && ! file.deleteFile()) + { + (void) deleteTone3000MacKeychainText( + tone3000SecureItemName(file)); + error = "Could not remove the legacy plaintext TONE3000 session file"; + return false; + } + return true; +#elif JUCE_LINUX + if (! saveTone3000LinuxSecret( + tone3000SecureItemName(file), text, error)) + return false; + if (file.existsAsFile() && ! file.deleteFile()) + { + (void) deleteTone3000LinuxSecret( + tone3000SecureItemName(file)); + error = "Could not remove the legacy plaintext TONE3000 session file"; + return false; + } + return true; +#else + juce::ignoreUnused(text); + error = "Secure TONE3000 token storage is unavailable on this platform"; + return false; +#endif +} + +juce::String loadProtectedText(const juce::File& file, juce::String& error) +{ +#if JUCE_WINDOWS + if (!file.existsAsFile()) + return {}; + juce::MemoryBlock encrypted; + if (!file.loadFileAsData(encrypted) || encrypted.getSize() == 0) + { + error = "Encrypted token file is empty"; + return {}; + } + + DATA_BLOB input {}; + input.pbData = static_cast(encrypted.getData()); + input.cbData = static_cast(encrypted.getSize()); + + DATA_BLOB output {}; + if (!::CryptUnprotectData(&input, nullptr, nullptr, nullptr, nullptr, + CRYPTPROTECT_UI_FORBIDDEN, &output)) + { + error = "DPAPI decryption failed"; + return {}; + } + + const juce::String text = juce::String::fromUTF8(reinterpret_cast(output.pbData), + static_cast(output.cbData)); + ::LocalFree(output.pbData); + return text; +#elif JUCE_MAC || JUCE_LINUX + juce::String secureText; + bool found = false; + #if JUCE_MAC + const bool secureRead = loadTone3000MacKeychainText( + tone3000SecureItemName(file), secureText, found, error); + #else + const bool secureRead = loadTone3000LinuxSecret( + tone3000SecureItemName(file), secureText, found, error); + #endif + if (! secureRead) + return {}; + if (found) + { + if (file.existsAsFile() && ! file.deleteFile()) + { + error = "Could not remove the legacy plaintext TONE3000 session file"; + return {}; + } + return secureText; + } + + // One-time migration for builds which stored mode-0600 JSON. Do not use + // the legacy value unless it was successfully committed to OS storage; + // this prevents silently retaining refresh tokens on disk. + if (! file.existsAsFile()) + return {}; + const auto legacyText = file.loadFileAsString(); + if (legacyText.isEmpty()) + { + error = "Legacy TONE3000 session file is empty"; + return {}; + } + juce::String migrationError; + if (! saveProtectedText(file, legacyText, migrationError)) + { + error = "Could not migrate the TONE3000 session to secure storage: " + + migrationError; + return {}; + } + return legacyText; +#else + error = "Secure TONE3000 token storage is unavailable on this platform"; + return {}; +#endif +} + +bool deleteProtectedText(const juce::File& file) +{ +#if JUCE_WINDOWS + return ! file.existsAsFile() || file.deleteFile(); +#elif JUCE_MAC + const bool deleted = deleteTone3000MacKeychainText( + tone3000SecureItemName(file)); + const bool legacyDeleted = ! file.existsAsFile() || file.deleteFile(); + return deleted && legacyDeleted; +#elif JUCE_LINUX + const bool deleted = deleteTone3000LinuxSecret( + tone3000SecureItemName(file)); + const bool legacyDeleted = ! file.existsAsFile() || file.deleteFile(); + return deleted && legacyDeleted; +#else + return ! file.existsAsFile() || file.deleteFile(); +#endif +} + +bool isTone3000SecureStorageAvailable() +{ +#if JUCE_WINDOWS + return true; +#elif JUCE_MAC + return getTone3000MacKeychainApi().available(); +#elif JUCE_LINUX + return findTone3000SecretTool().existsAsFile(); +#else + return false; +#endif +} + +juce::var loadProtectedJson(const juce::File& file, juce::String& error) +{ + const auto text = loadProtectedText(file, error); + if (text.isEmpty()) + return {}; + + auto parsed = juce::JSON::parse(text); + if (parsed.isVoid()) + error = "Stored TONE3000 token JSON is invalid"; + return parsed; +} + +bool saveProtectedJson(const juce::File& file, const juce::var& payload, juce::String& error) +{ + return saveProtectedText(file, juce::JSON::toString(payload, false), error); +} + +juce::var makeTone3000Error(const juce::String& message, int statusCode = 0) +{ + juce::DynamicObject::Ptr result = new juce::DynamicObject(); + result->setProperty("success", false); + result->setProperty("error", message); + if (statusCode > 0) + result->setProperty("statusCode", statusCode); + return juce::var(result.get()); +} + +bool readTone3000ResponseText( + juce::InputStream& input, + juce::String& text, + juce::String& error, + size_t maximumBytes) +{ + juce::MemoryOutputStream output; + std::array buffer {}; + while (! input.isExhausted()) + { + if (isTone3000TaskCancelled()) + { + error = "The NAM/TONE3000 request was canceled."; + return false; + } + const int bytesRead = input.read( + buffer.data(), static_cast(buffer.size())); + if (bytesRead <= 0) + break; + if (output.getDataSize() + + static_cast(bytesRead) + > maximumBytes) + { + error = "The TONE3000 response exceeded its safety limit."; + return false; + } + if (! output.write( + buffer.data(), static_cast(bytesRead))) + { + error = "Could not buffer the TONE3000 response."; + return false; + } + } + + text = juce::String::fromUTF8( + static_cast(output.getData()), + static_cast(output.getDataSize())); + error.clear(); + return true; +} + +juce::var postTone3000OAuthToken(const juce::StringPairArray& fields) +{ + if (isTone3000TaskCancelled()) + return makeTone3000Error("The TONE3000 token request was canceled."); + int statusCode = 0; + auto tokenUrl = juce::URL("https://www.tone3000.com/api/v1/oauth/token") + .withPOSTData(makeTone3000FormBody(fields)); + auto input = tokenUrl.createInputStream( + juce::URL::InputStreamOptions(juce::URL::ParameterHandling::inAddress) + .withHttpRequestCmd("POST") + .withExtraHeaders("Content-Type: application/x-www-form-urlencoded\r\n") + .withConnectionTimeoutMs(30000) + .withNumRedirectsToFollow(2) + .withStatusCode(&statusCode)); + + if (input == nullptr) + return makeTone3000Error("TONE3000 token request failed", statusCode); + + juce::String responseText; + juce::String responseError; + if (! readTone3000ResponseText( + *input, + responseText, + responseError, + 1024 * 1024)) + { + return makeTone3000Error(responseError, statusCode); + } + auto parsed = juce::JSON::parse(responseText); + if (parsed.isVoid()) + return makeTone3000Error("TONE3000 token response was not valid JSON", statusCode); + + if (statusCode >= 400) + { + auto* errorObject = parsed.getDynamicObject(); + juce::String message = "Token request failed"; + juce::String oauthError; + juce::String oauthDescription; + if (errorObject != nullptr) + { + oauthDescription = errorObject->getProperty("error_description").toString(); + oauthError = errorObject->getProperty("error").toString(); + message = oauthDescription; + if (message.isEmpty()) + message = oauthError; + if (message.isEmpty()) + message = "Token request failed"; + } + auto result = makeTone3000Error(message, statusCode); + if (auto* resultObject = result.getDynamicObject()) + { + if (oauthError.isNotEmpty()) + resultObject->setProperty("oauthError", oauthError); + if (oauthDescription.isNotEmpty()) + resultObject->setProperty("oauthErrorDescription", oauthDescription); + } + return result; + } + + return parsed; +} + +juce::var storeTone3000TokenPayloadUnlocked( + juce::var tokenPayload, + const juce::String& clientId, + juce::uint64 credentialEpoch) +{ + auto* tokenObject = tokenPayload.getDynamicObject(); + if (tokenObject == nullptr) + return makeTone3000Error("Invalid TONE3000 token payload"); + + const auto accessToken = tokenObject->getProperty("access_token").toString(); + const auto refreshToken = tokenObject->getProperty("refresh_token").toString(); + if (accessToken.isEmpty()) + return makeTone3000Error("TONE3000 did not return an access token"); + + const auto expiresIn = static_cast(static_cast(tokenObject->getProperty("expires_in"))); + const auto expiresAtMs = juce::Time::getCurrentTime().toMilliseconds() + + std::max(0, expiresIn) * 1000; + + juce::DynamicObject::Ptr stored = new juce::DynamicObject(); + stored->setProperty("schemaVersion", 1); + stored->setProperty("provider", "tone3000"); + stored->setProperty( + "credentialEpoch", + static_cast(credentialEpoch)); + stored->setProperty( + "credentialSession", tone3000CredentialSessionId); + stored->setProperty( + "credentialRevision", juce::Uuid().toString()); + stored->setProperty("clientId", clientId); + stored->setProperty("accessToken", accessToken); + stored->setProperty("refreshToken", refreshToken); + stored->setProperty("tokenType", tokenObject->hasProperty("token_type") + ? tokenObject->getProperty("token_type") + : juce::var("bearer")); + stored->setProperty("scope", tokenObject->hasProperty("scope") + ? tokenObject->getProperty("scope") + : juce::var()); + stored->setProperty("expiresAtMs", static_cast(expiresAtMs)); + stored->setProperty("storedAt", juce::Time::getCurrentTime().toISO8601(true)); + + juce::String error; + if (!saveProtectedJson(getTone3000TokenFile(), juce::var(stored.get()), error)) + return makeTone3000Error(error); + + juce::DynamicObject::Ptr result = new juce::DynamicObject(); + result->setProperty("success", true); + result->setProperty("authenticated", true); + result->setProperty("expired", false); + result->setProperty("clientId", clientId); + result->setProperty("expiresAtMs", static_cast(expiresAtMs)); + result->setProperty("hasRefreshToken", refreshToken.isNotEmpty()); + return juce::var(result.get()); +} + +juce::var makeTone3000AuthStatus() +{ + juce::String error; + juce::var stored; + { + const std::lock_guard storageGuard( + tone3000TokenStorageMutex); + const ScopedTone3000CredentialProcessLock processGuard; + if (processGuard.locked) + stored = loadProtectedJson(getTone3000TokenFile(), error); + else + error = "Timed out waiting for another OpenStudio instance to finish updating TONE3000 credentials."; + } + juce::DynamicObject::Ptr status = new juce::DynamicObject(); + status->setProperty("success", true); + status->setProperty("authenticated", false); + status->setProperty("configuredClientId", getConfiguredTone3000ClientId().isNotEmpty()); + status->setProperty("defaultRedirectUri", kTone3000DefaultRedirectUri); + status->setProperty("authFlowActive", tone3000AuthFlowActive.load()); + + if (auto* object = stored.getDynamicObject()) + { + const auto expiresAtMs = static_cast(static_cast(object->getProperty("expiresAtMs"))); + const auto nowMs = juce::Time::getCurrentTime().toMilliseconds(); + status->setProperty("authenticated", object->getProperty("accessToken").toString().isNotEmpty()); + status->setProperty("expired", expiresAtMs > 0 && nowMs >= expiresAtMs); + status->setProperty("expiresAtMs", static_cast(expiresAtMs)); + status->setProperty("clientId", object->getProperty("clientId")); + status->setProperty("hasRefreshToken", object->getProperty("refreshToken").toString().isNotEmpty()); + } + else if (error.isNotEmpty()) + { + status->setProperty("error", error); + } + + const bool authenticated = static_cast(status->getProperty("authenticated")); + const bool expired = static_cast(status->getProperty("expired")); + const bool configured = static_cast(status->getProperty("configuredClientId")) + || status->getProperty("clientId").toString().isNotEmpty(); + status->setProperty("integrationState", + authenticated && ! expired ? "authenticated" + : authenticated && expired ? "expired" + : configured ? "configured_unauthenticated" + : "client_id_required"); + status->setProperty("authenticatedQAReady", authenticated && ! expired); + status->setProperty("authenticatedQANote", authenticated && ! expired + ? "Authenticated TONE3000 integration checks may run without exposing the stored token." + : "Authenticated TONE3000 QA requires a user-connected, non-expired session."); + status->setProperty("oauthRedirectUri", kTone3000DefaultRedirectUri); + status->setProperty("oauthProvider", "tone3000.com"); +#if JUCE_WINDOWS + status->setProperty("secureTokenStorage", "windows-dpapi"); +#elif JUCE_MAC + status->setProperty("secureTokenStorage", + isTone3000SecureStorageAvailable() + ? "macos-keychain" + : "unavailable"); +#elif JUCE_LINUX + status->setProperty("secureTokenStorage", + isTone3000SecureStorageAvailable() + ? "freedesktop-secret-service" + : "unavailable"); +#else + status->setProperty("secureTokenStorage", "unavailable"); +#endif + status->setProperty("secureTokenStorageAvailable", + isTone3000SecureStorageAvailable()); + + return juce::var(status.get()); +} + +juce::String getStoredTone3000AccessToken() +{ + juce::String error; + juce::var stored; + { + const std::lock_guard storageGuard( + tone3000TokenStorageMutex); + const ScopedTone3000CredentialProcessLock processGuard; + if (processGuard.locked) + stored = loadProtectedJson(getTone3000TokenFile(), error); + else + error = "Timed out waiting for another OpenStudio instance to finish updating TONE3000 credentials."; + } + if (auto* object = stored.getDynamicObject()) + { + const auto expiresAtMs = static_cast(static_cast(object->getProperty("expiresAtMs"))); + if (expiresAtMs <= 0 || juce::Time::getCurrentTime().toMilliseconds() < expiresAtMs) + return object->getProperty("accessToken").toString(); + } + return {}; +} + +juce::String getModelObjectString(juce::DynamicObject* model, + const juce::String& primary, + const juce::String& fallback = {}); + +int getModelObjectInt(juce::DynamicObject* model, + const juce::String& primary, + const juce::String& fallback = {}); + +bool isTone3000ErrorPayload(const juce::var& payload) +{ + if (auto* object = payload.getDynamicObject()) + return object->hasProperty("error") && static_cast(object->getProperty("success")) == false; + + return false; +} + +juce::var makeTone3000Success() +{ + juce::DynamicObject::Ptr result = new juce::DynamicObject(); + result->setProperty("success", true); + return juce::var(result.get()); +} + +double parseTone3000RetryAfterSeconds(const juce::String& headerValue) +{ + double seconds = headerValue.trim().isNotEmpty() + ? headerValue.getDoubleValue() + : 15.0; + if (! std::isfinite(seconds) || seconds <= 0.0) + seconds = 15.0; + return juce::jlimit(1.0, 60.0, seconds); +} + +juce::var getTone3000Json(juce::URL url, const juce::String& accessToken, const juce::String& label) +{ + if (isTone3000TaskCancelled()) + return makeTone3000Error(label + " was canceled"); + if (accessToken.isEmpty()) + return makeTone3000Error("Missing TONE3000 access token"); + if (accessToken.containsAnyOf("\r\n")) + return makeTone3000Error("The TONE3000 access token contains invalid header characters"); + + int statusCode = 0; + juce::StringPairArray responseHeaders; + juce::String headers; + headers << "Authorization: Bearer " << accessToken << "\r\n" + << "Content-Type: application/json\r\n"; + + auto input = url.createInputStream( + juce::URL::InputStreamOptions(juce::URL::ParameterHandling::inAddress) + .withExtraHeaders(headers) + .withConnectionTimeoutMs(30000) + .withNumRedirectsToFollow(2) + .withStatusCode(&statusCode) + .withResponseHeaders(&responseHeaders)); + + const auto attachRateLimitMetadata = [&responseHeaders, &statusCode] + (juce::var result) + { + if (statusCode != 429) + return result; + juce::String retryAfter; + for (int index = 0; index < responseHeaders.size(); ++index) + { + if (responseHeaders.getAllKeys()[index] + .equalsIgnoreCase("Retry-After")) + { + retryAfter = responseHeaders.getAllValues()[index].trim(); + break; + } + } + const double retryAfterSeconds = + parseTone3000RetryAfterSeconds(retryAfter); + if (auto* object = result.getDynamicObject()) + { + object->setProperty("retryAfterSeconds", retryAfterSeconds); + if (retryAfter.isNotEmpty()) + object->setProperty("retryAfter", retryAfter); + } + return result; + }; + + if (input == nullptr) + return attachRateLimitMetadata( + makeTone3000Error(label + " failed", statusCode)); + + juce::String responseText; + juce::String responseError; + if (! readTone3000ResponseText( + *input, + responseText, + responseError, + 32 * 1024 * 1024)) + { + return attachRateLimitMetadata( + makeTone3000Error(responseError, statusCode)); + } + auto parsed = juce::JSON::parse(responseText); + if (parsed.isVoid()) + return attachRateLimitMetadata(makeTone3000Error( + label + " response was not valid JSON", statusCode)); + + if (statusCode >= 400) + { + auto* errorObject = parsed.getDynamicObject(); + juce::String message = label + " failed"; + if (statusCode == 401) + message = "TONE3000 authentication expired. Refresh or reconnect."; + else if (statusCode == 429) + message = "TONE3000 rate limit reached. Wait a minute before searching again."; + + if (errorObject != nullptr) + { + const auto description = errorObject->getProperty("error_description").toString(); + const auto error = errorObject->getProperty("error").toString(); + if (description.isNotEmpty()) + message = description; + else if (error.isNotEmpty() && statusCode != 429) + message = error; + } + + auto result = makeTone3000Error(message, statusCode); + if (auto* resultObject = result.getDynamicObject()) + resultObject->setProperty("response", parsed); + return attachRateLimitMetadata(result); + } + + return parsed; +} + +juce::String normaliseTone3000Architecture(juce::String architecture) +{ + architecture = architecture.trim().toLowerCase(); + if (architecture == "a1") + return "1"; + if (architecture == "a2") + return "2"; + if (architecture == "1" || architecture == "2" || architecture == "custom") + return architecture; + return {}; +} + +juce::StringArray makeTone3000ArchitectureRequests(const juce::String& architecture) +{ + const auto normalised = normaliseTone3000Architecture(architecture); + juce::StringArray architectures; + if (normalised.isNotEmpty()) + { + architectures.add(normalised); + return architectures; + } + + architectures.add("2"); + architectures.add("1"); + return architectures; +} + +juce::String normaliseTone3000Sort(juce::String sort) +{ + sort = sort.trim().toLowerCase(); + if (sort == "newest" || sort == "oldest" || sort == "trending" || sort == "downloads-all-time" || sort == "best-match") + return sort; + if (sort == "latest") + return "newest"; + if (sort == "downloaded") + return "downloads-all-time"; + return "trending"; +} + +juce::String normaliseTone3000Gears(juce::String gears) +{ + gears = gears.trim().toLowerCase(); + return gears.replace(",", "_"); +} + +constexpr int kTone3000CatalogModelPageSize = 100; +constexpr int kTone3000MaximumModelPages = 20; + +struct Tone3000ModelPaginationResult +{ + juce::Array models; + juce::var error; + int pagesFetched = 0; +}; + +struct Tone3000PaginationInteger +{ + bool present = false; + bool valid = true; + int value = 0; +}; + +Tone3000PaginationInteger readTone3000PaginationInteger( + juce::DynamicObject* object, + const juce::String& primary, + const juce::String& fallback = {}) +{ + Tone3000PaginationInteger result; + if (object == nullptr) + return result; + + juce::var value; + if (object->hasProperty(primary)) + { + result.present = true; + value = object->getProperty(primary); + } + else if (fallback.isNotEmpty() && object->hasProperty(fallback)) + { + result.present = true; + value = object->getProperty(fallback); + } + else + { + return result; + } + + if (value.isVoid()) + return result; + + double numericValue = 0.0; + if (value.isInt() || value.isInt64() || value.isDouble()) + { + numericValue = static_cast(value); + } + else if (value.isString()) + { + const auto text = value.toString().trim(); + if (text.isEmpty() || ! text.containsOnly("0123456789")) + { + result.valid = false; + return result; + } + numericValue = text.getDoubleValue(); + } + else + { + result.valid = false; + return result; + } + + if (! std::isfinite(numericValue) + || numericValue < 0.0 + || numericValue > static_cast( + std::numeric_limits::max()) + || std::floor(numericValue) != numericValue) + { + result.valid = false; + return result; + } + + result.value = static_cast(numericValue); + return result; +} + +struct Tone3000PaginationBoolean +{ + bool present = false; + bool valid = true; + bool value = false; +}; + +Tone3000PaginationBoolean readTone3000PaginationBoolean( + juce::DynamicObject* object, + const juce::String& primary, + const juce::String& fallback = {}) +{ + Tone3000PaginationBoolean result; + if (object == nullptr) + return result; + + juce::var value; + if (object->hasProperty(primary)) + { + result.present = true; + value = object->getProperty(primary); + } + else if (fallback.isNotEmpty() && object->hasProperty(fallback)) + { + result.present = true; + value = object->getProperty(fallback); + } + else + { + return result; + } + + if (value.isBool()) + { + result.value = static_cast(value); + return result; + } + if (value.isInt()) + { + const int numericValue = static_cast(value); + result.valid = numericValue == 0 || numericValue == 1; + result.value = numericValue == 1; + return result; + } + if (value.isString()) + { + const auto text = value.toString().trim().toLowerCase(); + result.valid = text == "true" || text == "false"; + result.value = text == "true"; + return result; + } + + result.valid = false; + return result; +} + +Tone3000ModelPaginationResult fetchTone3000ModelPages( + int toneId, + const juce::String& architecture, + int requestedPageSize, + const std::function& requestPage) +{ + Tone3000ModelPaginationResult result; + juce::Array seenModelIds; + const int pageSize = juce::jlimit( + 1, kTone3000CatalogModelPageSize, requestedPageSize); + const auto expectedArchitecture = + normaliseTone3000Architecture(architecture); + + for (int page = 1; page <= kTone3000MaximumModelPages; ++page) + { + if (isTone3000TaskCancelled()) + { + result.error = makeTone3000Error( + "TONE3000 model pagination was canceled"); + return result; + } + + auto payload = requestPage(page, pageSize); + if (isTone3000ErrorPayload(payload)) + { + result.error = payload; + return result; + } + + auto* payloadObject = payload.getDynamicObject(); + if (payloadObject == nullptr) + { + result.error = makeTone3000Error( + "TONE3000 model list returned an invalid response"); + return result; + } + + auto data = payloadObject->getProperty("data"); + if (! data.isArray()) + data = payloadObject->getProperty("models"); + auto* models = data.getArray(); + if (models == nullptr) + { + result.error = makeTone3000Error( + "TONE3000 model list did not include a model array"); + return result; + } + + ++result.pagesFetched; + for (auto modelValue : *models) + { + auto* model = modelValue.getDynamicObject(); + if (model == nullptr) + continue; + + const int modelId = getModelObjectInt( + model, "id", "model_id"); + const int modelToneId = getModelObjectInt( + model, "tone_id", "toneId"); + const auto modelArchitecture = + normaliseTone3000Architecture(getModelObjectString( + model, + "architecture_version", + "architecture")); + if (modelId <= 0 + || (modelToneId > 0 && modelToneId != toneId) + || (expectedArchitecture.isNotEmpty() + && modelArchitecture.isNotEmpty() + && modelArchitecture != expectedArchitecture) + || seenModelIds.contains(modelId)) + { + continue; + } + + seenModelIds.add(modelId); + auto architectureValue = + model->getProperty("architecture_version"); + if (architectureValue.isVoid()) + architectureValue = model->getProperty("architecture"); + model->setProperty("architecture", architectureValue); + result.models.add(modelValue); + } + + const auto reportedPage = readTone3000PaginationInteger( + payloadObject, "page", "current_page"); + const auto reportedTotalPages = + readTone3000PaginationInteger( + payloadObject, "total_pages", "totalPages"); + const auto reportedTotalModels = + readTone3000PaginationInteger( + payloadObject, "total", "total_count"); + const auto reportedNextPage = + readTone3000PaginationInteger( + payloadObject, "next_page", "nextPage"); + const auto reportedHasMore = + readTone3000PaginationBoolean( + payloadObject, "has_more", "hasMore"); + if (! reportedPage.valid + || ! reportedTotalPages.valid + || ! reportedTotalModels.valid + || ! reportedNextPage.valid + || ! reportedHasMore.valid) + { + result.error = makeTone3000Error( + "TONE3000 model pagination returned invalid metadata"); + return result; + } + if (reportedPage.value > 0 && reportedPage.value != page) + { + result.error = makeTone3000Error( + "TONE3000 model pagination returned page " + + juce::String(reportedPage.value) + + " while page " + juce::String(page) + + " was requested"); + return result; + } + + int totalPages = reportedTotalPages.value; + if (totalPages <= 0) + { + if (reportedTotalModels.value > 0) + { + totalPages = static_cast(( + static_cast(reportedTotalModels.value) + + pageSize - 1) / pageSize); + } + } + if (totalPages > kTone3000MaximumModelPages) + { + result.error = makeTone3000Error( + "TONE3000 returned " + juce::String(totalPages) + + " model pages for one tone; OpenStudio's safety limit is " + + juce::String(kTone3000MaximumModelPages) + + ". No partial capture list was published."); + return result; + } + if (totalPages > 0 && page > totalPages) + { + result.error = makeTone3000Error( + "TONE3000 model pagination metadata moved backwards"); + return result; + } + + const bool hasExplicitMore = reportedHasMore.present; + const bool explicitMore = reportedHasMore.value; + const int nextPage = reportedNextPage.value; + + bool shouldContinue = false; + if (totalPages > 0) + shouldContinue = page < totalPages; + else if (hasExplicitMore) + shouldContinue = explicitMore; + else if (nextPage > 0) + shouldContinue = nextPage > page; + else + shouldContinue = models->size() >= pageSize; + + if (hasExplicitMore + && totalPages > 0 + && explicitMore != (page < totalPages)) + { + result.error = makeTone3000Error( + "TONE3000 model pagination returned contradictory metadata"); + return result; + } + if (nextPage > 0 + && shouldContinue + && nextPage != page + 1) + { + result.error = makeTone3000Error( + "TONE3000 model pagination returned an invalid next page"); + return result; + } + if (! shouldContinue) + return result; + if (page == kTone3000MaximumModelPages) + { + result.error = makeTone3000Error( + "TONE3000 model pagination exceeded OpenStudio's bounded safety limit. No partial capture list was published."); + return result; + } + } + + result.error = makeTone3000Error( + "TONE3000 model pagination did not terminate"); + return result; +} + +juce::var fetchTone3000ModelsForTone(int toneId, + const juce::StringArray& architectures, + const juce::String& accessToken, + int modelPageSize, + juce::Array& errors) +{ + juce::Array models; + juce::Array seenModelIds; + + for (const auto& architecture : architectures) + { + const auto pageResult = fetchTone3000ModelPages( + toneId, + architecture, + modelPageSize, + [&] (int page, int pageSize) + { + auto url = juce::URL( + "https://www.tone3000.com/api/v1/models") + .withParameter("tone_id", juce::String(toneId)) + .withParameter("page", juce::String(page)) + .withParameter("page_size", juce::String(pageSize)); + if (architecture.isNotEmpty()) + url = url.withParameter( + "architecture", architecture); + return getTone3000Json( + url, accessToken, "TONE3000 model list"); + }); + if (! pageResult.error.isVoid()) + { + errors.add(pageResult.error); + continue; + } + + for (const auto& modelValue : pageResult.models) + { + const int modelId = static_cast( + modelValue.getProperty("id", 0)); + if (modelId > 0 && seenModelIds.contains(modelId)) + continue; + if (modelId > 0) + seenModelIds.add(modelId); + models.add(modelValue); + } + } + + return juce::var(models); +} + +juce::var searchTone3000NAM(juce::var optionsPayload) +{ + if (optionsPayload.isString()) + optionsPayload = juce::JSON::parse(optionsPayload.toString()); + + auto* options = optionsPayload.getDynamicObject(); + const auto accessToken = getStoredTone3000AccessToken(); + if (accessToken.isEmpty()) + return makeTone3000Error("Connect TONE3000 or refresh the stored token before live search"); + + const auto query = options != nullptr ? getModelObjectString(options, "query") : juce::String(); + const auto sort = normaliseTone3000Sort(options != nullptr ? getModelObjectString(options, "sort") : juce::String()); + const auto gears = normaliseTone3000Gears(options != nullptr ? getModelObjectString(options, "gears") : juce::String("amp_amp-cab")); + auto format = options != nullptr ? getModelObjectString(options, "format") : juce::String(); + if (format.isEmpty() && options != nullptr) + format = getModelObjectString(options, "platform"); + format = format.trim().toLowerCase(); + if (format.isEmpty()) + format = "nam"; + const auto architecture = options != nullptr ? getModelObjectString(options, "architecture") : juce::String(); + const int page = juce::jmax(1, options != nullptr ? getModelObjectInt(options, "page") : 1); + const int pageSize = juce::jlimit(1, 25, options != nullptr ? getModelObjectInt(options, "page_size", "pageSize") : 25); + const int modelPageSize = juce::jlimit(1, 100, options != nullptr ? getModelObjectInt(options, "model_page_size", "modelPageSize") : 20); + const bool includeModels = options == nullptr || !options->hasProperty("includeModels") || static_cast(options->getProperty("includeModels")); + auto architectures = makeTone3000ArchitectureRequests(architecture); + if (format == "ir") + { + architectures.clear(); + architectures.add(juce::String()); + } + + juce::Array tones; + juce::Array errors; + juce::Array seenToneIds; + int total = 0; + int totalPages = 1; + + for (const auto& architectureRequest : architectures) + { + auto url = juce::URL("https://www.tone3000.com/api/v1/tones/search") + .withParameter("query", query) + .withParameter("page", juce::String(page)) + .withParameter("page_size", juce::String(pageSize)) + .withParameter("sort", sort) + .withParameter("format", format); + if (gears.isNotEmpty()) + url = url.withParameter("gears", gears); + if (architectureRequest.isNotEmpty()) + url = url.withParameter("architecture", architectureRequest); + + auto payload = getTone3000Json(url, accessToken, "TONE3000 tone search"); + if (isTone3000ErrorPayload(payload)) + return payload; + + if (auto* payloadObject = payload.getDynamicObject()) + { + total += static_cast(payloadObject->getProperty("total")); + totalPages = juce::jmax(totalPages, static_cast(payloadObject->getProperty("total_pages"))); + const auto data = payloadObject->getProperty("data"); + if (auto* array = data.getArray()) + { + for (auto toneVar : *array) + { + if (auto* tone = toneVar.getDynamicObject()) + { + const int toneId = getModelObjectInt(tone, "id"); + if (toneId > 0 && seenToneIds.contains(toneId)) + continue; + + if (toneId > 0) + seenToneIds.add(toneId); + + tone->setProperty("source", "tone3000-live"); + tone->setProperty("sortBucket", sort); + tone->setProperty("searchArchitecture", architectureRequest); + tones.add(toneVar); + } + } + } + } + } + + if (includeModels) + { + for (auto& toneVar : tones) + { + if (auto* tone = toneVar.getDynamicObject()) + { + const int toneId = getModelObjectInt(tone, "id"); + if (toneId > 0) + tone->setProperty("models", fetchTone3000ModelsForTone(toneId, architectures, accessToken, modelPageSize, errors)); + } + } + } + + auto result = makeTone3000Success(); + if (auto* object = result.getDynamicObject()) + { + object->setProperty("data", tones); + object->setProperty("tones", tones); + object->setProperty("errors", errors); + object->setProperty("page", page); + object->setProperty("page_size", pageSize); + object->setProperty("pageSize", pageSize); + object->setProperty("total", total); + object->setProperty("total_pages", totalPages); + object->setProperty("totalPages", totalPages); + object->setProperty("has_more", page < totalPages); + object->setProperty("hasMore", page < totalPages); + object->setProperty("next_page", page < totalPages ? juce::var(page + 1) : juce::var()); + object->setProperty("nextPage", page < totalPages ? juce::var(page + 1) : juce::var()); + object->setProperty("query", query); + object->setProperty("sort", sort); + object->setProperty("gears", gears); + object->setProperty("format", format); + object->setProperty("architecture", architecture.isNotEmpty() ? architecture : juce::String("all")); + object->setProperty("source", "tone3000-live"); + object->setProperty("generatedAt", juce::Time::getCurrentTime().toISO8601(true)); + object->setProperty("rateLimit", "100 requests per minute default; search manually and avoid bulk refreshes"); + } + return result; +} + +juce::var runTone3000AuthenticatedQA() +{ + juce::DynamicObject::Ptr result = new juce::DynamicObject(); + result->setProperty("success", false); + result->setProperty("provider", "tone3000.com"); + result->setProperty("checkedAt", juce::Time::getCurrentTime().toISO8601(true)); + + const auto authStatus = makeTone3000AuthStatus(); + auto* authObject = authStatus.getDynamicObject(); + const bool qaReady = authObject != nullptr + && static_cast(authObject->getProperty("authenticatedQAReady")); + result->setProperty("authenticatedQAReady", qaReady); + result->setProperty("integrationState", authObject != nullptr + ? authObject->getProperty("integrationState") + : juce::var("status_unavailable")); + if (! qaReady) + { + result->setProperty("status", "not_run"); + result->setProperty("error", "Connect a non-expired TONE3000 account before running authenticated integration QA."); + return juce::var(result.get()); + } + + juce::DynamicObject::Ptr options = new juce::DynamicObject(); + options->setProperty("query", "amp"); + options->setProperty("page", 1); + options->setProperty("page_size", 1); + options->setProperty("architecture", "1"); + options->setProperty("gears", ""); + options->setProperty("includeModels", false); + const auto probe = searchTone3000NAM(juce::var(options.get())); + auto* probeObject = probe.getDynamicObject(); + const bool success = probeObject != nullptr + && static_cast(probeObject->getProperty("success")); + result->setProperty("success", success); + result->setProperty("status", success ? "pass" : "fail"); + if (probeObject != nullptr) + { + result->setProperty("statusCode", probeObject->getProperty("statusCode")); + result->setProperty("error", probeObject->getProperty("error")); + const auto tonesVar = probeObject->getProperty("tones"); + result->setProperty("returnedToneCount", tonesVar.isArray() ? tonesVar.getArray()->size() : 0); + } + return juce::var(result.get()); +} + +juce::var getTone3000ToneDetail(int toneId, const juce::String& architecture) +{ + const auto accessToken = getStoredTone3000AccessToken(); + if (accessToken.isEmpty()) + return makeTone3000Error("Connect TONE3000 or refresh the stored token before loading tone detail"); + if (toneId <= 0) + return makeTone3000Error("Missing TONE3000 tone ID"); + + auto architectures = makeTone3000ArchitectureRequests(architecture); + if (architecture.trim().isEmpty()) + { + architectures.clear(); + architectures.add(juce::String()); + } + auto url = juce::URL("https://www.tone3000.com/api/v1/tones/" + juce::String(toneId)); + if (architectures.size() == 1 && architectures[0].isNotEmpty()) + url = url.withParameter("architecture", architectures[0]); + + auto tone = getTone3000Json(url, accessToken, "TONE3000 tone detail"); + if (isTone3000ErrorPayload(tone)) + return tone; + + juce::Array errors; + const auto models = fetchTone3000ModelsForTone( + toneId, architectures, accessToken, 100, errors); + if (! errors.isEmpty()) + { + auto failure = errors.getFirst(); + if (auto* failureObject = failure.getDynamicObject()) + { + failureObject->setProperty("tone", tone); + failureObject->setProperty("errors", errors); + } + return failure; + } + + auto result = makeTone3000Success(); + if (auto* object = result.getDynamicObject()) + { + object->setProperty("tone", tone); + object->setProperty("models", models); + object->setProperty("errors", errors); + } + return result; +} + +juce::var createTone3000AuthRequest(const juce::String& clientId, + const juce::String& redirectUri, + const juce::String& prompt, + const juce::String& toneId, + const juce::String& loginHint) +{ + if (clientId.trim().isEmpty()) + return makeTone3000Error("Missing TONE3000 client_id"); + if (redirectUri.trim().isEmpty()) + return makeTone3000Error("Missing OAuth redirect_uri"); + + const auto credentialEpoch = beginTone3000CredentialEpoch(); + const auto verifier = makeTone3000CodeVerifier(); + const auto challenge = makeTone3000CodeChallenge(verifier); + const auto state = juce::Uuid().toString(); + + juce::URL authUrl("https://www.tone3000.com/api/v1/oauth/authorize"); + authUrl = authUrl.withParameter("client_id", clientId.trim()) + .withParameter("redirect_uri", redirectUri.trim()) + .withParameter("response_type", "code") + .withParameter("code_challenge", challenge) + .withParameter("code_challenge_method", "S256") + .withParameter("state", state) + .withParameter("platform", "nam") + .withParameter("gears", "amp_amp-cab") + .withParameter("architecture", "2") + .withParameter("menubar", "true"); + if (prompt.isNotEmpty()) + authUrl = authUrl.withParameter("prompt", prompt); + if (toneId.isNotEmpty()) + authUrl = authUrl.withParameter("tone_id", toneId); + if (loginHint.isNotEmpty()) + authUrl = authUrl.withParameter("login_hint", loginHint); + + juce::DynamicObject::Ptr pending = new juce::DynamicObject(); + pending->setProperty("schemaVersion", 1); + pending->setProperty( + "credentialEpoch", + static_cast(credentialEpoch)); + pending->setProperty( + "credentialSession", tone3000CredentialSessionId); + pending->setProperty( + "credentialRevision", juce::Uuid().toString()); + pending->setProperty("clientId", clientId.trim()); + pending->setProperty("redirectUri", redirectUri.trim()); + pending->setProperty("codeVerifier", verifier); + pending->setProperty("state", state); + pending->setProperty("createdAtMs", static_cast(juce::Time::getCurrentTime().toMilliseconds())); + pending->setProperty("createdAt", juce::Time::getCurrentTime().toISO8601(true)); + + juce::String error; + { + const std::lock_guard storageGuard( + tone3000PendingAuthStorageMutex); + if (isTone3000TaskCancelled()) + { + return makeTone3000Error( + "The TONE3000 sign-in request was canceled."); + } + if (tone3000CredentialEpoch.load( + std::memory_order_acquire) != credentialEpoch) + { + return makeTone3000Error( + "This TONE3000 sign-in request was superseded by a newer credential action."); + } + const ScopedTone3000CredentialProcessLock processGuard; + if (! processGuard.locked) + { + return makeTone3000Error( + "Timed out waiting for another OpenStudio instance to finish updating TONE3000 credentials."); + } + juce::String existingError; + const auto existingPending = loadProtectedJson( + getTone3000PendingAuthFile(), existingError); + if (tone3000PendingRecordOwnedByLiveOtherSession( + existingPending.getDynamicObject(), + juce::Time::getCurrentTime().toMilliseconds())) + { + return makeTone3000Error( + "Another OpenStudio instance already has a TONE3000 sign-in in progress."); + } + if (existingPending.isVoid() && existingError.isNotEmpty()) + return makeTone3000Error(existingError); + if (! saveProtectedJson( + getTone3000PendingAuthFile(), + juce::var(pending.get()), + error)) + { + return makeTone3000Error(error); + } + } + + juce::DynamicObject::Ptr result = new juce::DynamicObject(); + result->setProperty("success", true); + result->setProperty("authUrl", authUrl.toString(true)); + result->setProperty("state", state); + result->setProperty("redirectUri", redirectUri.trim()); + result->setProperty("clientId", clientId.trim()); + result->setProperty( + "credentialEpoch", + static_cast(credentialEpoch)); + return juce::var(result.get()); +} + +bool deleteTone3000PendingAuthIfCurrent( + const juce::String& expectedState, + juce::uint64 expectedEpoch) +{ + const std::lock_guard storageGuard( + tone3000PendingAuthStorageMutex); + const ScopedTone3000CredentialProcessLock processGuard; + if (! processGuard.locked) + return false; + juce::String error; + const auto currentPending = loadProtectedJson( + getTone3000PendingAuthFile(), error); + const auto* currentObject = currentPending.getDynamicObject(); + if (currentObject == nullptr) + return error.isEmpty(); + + const auto currentRecordEpoch = + getTone3000RecordEpoch(currentObject); + const auto currentRecordSession = + getTone3000RecordSession(currentObject); + const auto currentState = + currentObject->getProperty("state").toString(); + if (! tone3000CredentialSnapshotStillCurrent( + expectedEpoch, + expectedState, + tone3000CredentialEpoch.load( + std::memory_order_acquire), + currentState) + || (currentRecordSession == tone3000CredentialSessionId + && currentRecordEpoch > 0 + && currentRecordEpoch != expectedEpoch)) + { + // A newer request owns the pending record. Preserving it is a + // successful cleanup outcome for this older flow. + return true; + } + return deleteProtectedText(getTone3000PendingAuthFile()); +} + +bool tone3000PendingAuthStillCurrent( + const juce::String& expectedState, + juce::uint64 expectedEpoch) +{ + const std::lock_guard storageGuard( + tone3000PendingAuthStorageMutex); + const ScopedTone3000CredentialProcessLock processGuard; + if (! processGuard.locked) + return false; + + juce::String error; + const auto pending = loadProtectedJson( + getTone3000PendingAuthFile(), error); + const auto* pendingObject = pending.getDynamicObject(); + if (pendingObject == nullptr || error.isNotEmpty()) + return false; + + return getTone3000RecordSession(pendingObject) + == tone3000CredentialSessionId + && getTone3000RecordEpoch(pendingObject) == expectedEpoch + && pendingObject->getProperty("state").toString() + == expectedState + && tone3000CredentialEpoch.load(std::memory_order_acquire) + == expectedEpoch; +} + +juce::var exchangeTone3000OAuthCode(const juce::String& code, + const juce::String& stateFromCallback, + const juce::String& clientIdOverride, + const juce::String& redirectUriOverride) +{ + if (code.trim().isEmpty()) + return makeTone3000Error("Missing OAuth code"); + + juce::String error; + juce::var pending; + { + const std::lock_guard storageGuard( + tone3000PendingAuthStorageMutex); + const ScopedTone3000CredentialProcessLock processGuard; + if (processGuard.locked) + { + pending = loadProtectedJson( + getTone3000PendingAuthFile(), error); + } + else + { + error = "Timed out waiting for another OpenStudio instance to finish updating TONE3000 credentials."; + } + } + auto* pendingObject = pending.getDynamicObject(); + if (pendingObject == nullptr) + return makeTone3000Error(error.isNotEmpty() ? error : "No pending TONE3000 OAuth request"); + + const auto currentEpoch = tone3000CredentialEpoch.load( + std::memory_order_acquire); + const auto storedEpoch = getTone3000RecordEpoch(pendingObject); + const auto storedSession = + getTone3000RecordSession(pendingObject); + const auto expectedEpoch = + storedSession == tone3000CredentialSessionId + && storedEpoch > 0 + ? storedEpoch + : currentEpoch; + const auto expectedState = + pendingObject->getProperty("state").toString(); + if (expectedEpoch != currentEpoch) + { + return makeTone3000Error( + "This TONE3000 sign-in request was superseded by a newer credential action."); + } + + const auto createdAtMs = static_cast( + static_cast(pendingObject->getProperty("createdAtMs"))); + const auto requestAgeMs = juce::Time::getCurrentTime().toMilliseconds() - createdAtMs; + if (createdAtMs <= 0 || requestAgeMs < 0 || requestAgeMs > kTone3000LoopbackTimeoutMs) + { + const std::lock_guard storageGuard( + tone3000PendingAuthStorageMutex); + const ScopedTone3000CredentialProcessLock processGuard; + if (! processGuard.locked) + { + return makeTone3000Error( + "Timed out waiting for another OpenStudio instance to finish updating TONE3000 credentials."); + } + juce::String currentError; + const auto currentPending = loadProtectedJson( + getTone3000PendingAuthFile(), currentError); + const auto* currentPendingObject = + currentPending.getDynamicObject(); + const auto currentPendingEpoch = + getTone3000RecordEpoch(currentPendingObject); + const auto currentPendingSession = + getTone3000RecordSession(currentPendingObject); + if (tone3000CredentialSnapshotStillCurrent( + expectedEpoch, + expectedState, + tone3000CredentialEpoch.load( + std::memory_order_acquire), + currentPendingObject != nullptr + ? currentPendingObject->getProperty( + "state").toString() + : juce::String()) + && (currentPendingSession != tone3000CredentialSessionId + || currentPendingEpoch == 0 + || currentPendingEpoch == expectedEpoch)) + { + (void) deleteProtectedText( + getTone3000PendingAuthFile()); + } + return makeTone3000Error("The pending TONE3000 sign-in expired. Start the connection again."); + } + + if (stateFromCallback.isEmpty()) + return makeTone3000Error("OAuth callback did not include the required state"); + if (expectedState != stateFromCallback) + return makeTone3000Error("OAuth state mismatch"); + + const auto clientId = clientIdOverride.trim().isNotEmpty() + ? clientIdOverride.trim() + : pendingObject->getProperty("clientId").toString(); + const auto redirectUri = redirectUriOverride.trim().isNotEmpty() + ? redirectUriOverride.trim() + : pendingObject->getProperty("redirectUri").toString(); + const auto verifier = pendingObject->getProperty("codeVerifier").toString(); + + juce::StringPairArray fields; + fields.set("grant_type", "authorization_code"); + fields.set("code", code.trim()); + fields.set("code_verifier", verifier); + fields.set("redirect_uri", redirectUri); + fields.set("client_id", clientId); + + auto tokenPayload = postTone3000OAuthToken(fields); + if (isTone3000TaskCancelled()) + { + return makeTone3000Error( + "The TONE3000 token exchange was canceled before credentials were stored."); + } + if (auto* tokenObject = tokenPayload.getDynamicObject()) + { + if (static_cast(tokenObject->getProperty("success")) == false && tokenObject->hasProperty("error")) + return tokenPayload; + } + + std::scoped_lock storageGuards( + tone3000TokenStorageMutex, + tone3000PendingAuthStorageMutex); + const ScopedTone3000CredentialProcessLock processGuard; + if (! processGuard.locked) + { + return makeTone3000Error( + "Timed out waiting for another OpenStudio instance to finish updating TONE3000 credentials."); + } + juce::String currentPendingError; + const auto currentPending = loadProtectedJson( + getTone3000PendingAuthFile(), currentPendingError); + const auto* currentPendingObject = + currentPending.getDynamicObject(); + const auto currentPendingEpoch = + getTone3000RecordEpoch(currentPendingObject); + const auto currentPendingSession = + getTone3000RecordSession(currentPendingObject); + if (! tone3000CredentialSnapshotStillCurrent( + expectedEpoch, + expectedState, + tone3000CredentialEpoch.load( + std::memory_order_acquire), + currentPendingObject != nullptr + ? currentPendingObject->getProperty("state").toString() + : juce::String()) + || (currentPendingSession == tone3000CredentialSessionId + && currentPendingEpoch > 0 + && currentPendingEpoch != expectedEpoch)) + { + return makeTone3000Error( + "This TONE3000 token exchange was superseded before credentials could be stored."); + } + + auto result = storeTone3000TokenPayloadUnlocked( + tokenPayload, clientId, expectedEpoch); + if (auto* resultObject = result.getDynamicObject(); + resultObject != nullptr + && static_cast(resultObject->getProperty("success"))) + { + const bool pendingDeleted = + deleteProtectedText(getTone3000PendingAuthFile()); + resultObject->setProperty( + "pendingAuthDeleted", pendingDeleted); + if (! pendingDeleted) + { + resultObject->setProperty( + "warning", + "TONE3000 connected, but OpenStudio could not clear the completed pending secure session."); + } + } + return result; +} + +juce::var waitForTone3000LoopbackCallback(juce::StreamingSocket& listener, + int generation, + int timeoutMs, + const juce::String& expectedState, + juce::uint64 expectedCredentialEpoch) +{ + const auto deadline = juce::Time::currentTimeMillis() + timeoutMs; + + while (juce::Time::currentTimeMillis() < deadline) + { + if (isTone3000TaskCancelled()) + { + return makeTone3000AuthFlowResult( + "canceled", + false, + "The OpenStudio window that started TONE3000 sign-in was closed."); + } + if (generation != tone3000AuthFlowGeneration.load()) + { + return makeTone3000AuthFlowResult("canceled", false, "TONE3000 sign-in was canceled."); + } + + const auto ready = listener.waitUntilReady(true, 250); + if (ready < 0) + return makeTone3000AuthFlowResult("failed", false, "TONE3000 callback listener stopped unexpectedly.", {}, {}, true); + if (ready == 0) + continue; + + std::unique_ptr client(listener.waitForNextConnection()); + if (client == nullptr) + continue; + + const auto request = readTone3000HttpRequest(*client, 3000); + if (! tone3000PendingAuthStillCurrent( + expectedState, expectedCredentialEpoch)) + { + writeTone3000CallbackPage( + *client, + "TONE3000 sign-in canceled", + "The secure TONE3000 sign-in session was cleared in OpenStudio.", + false); + return makeTone3000AuthFlowResult( + "canceled", + false, + "TONE3000 sign-in was canceled because its secure session was cleared."); + } + const auto firstLine = request.upToFirstOccurrenceOf("\n", false, false).trim(); + if (! firstLine.startsWith("GET ")) + { + writeTone3000CallbackPage(*client, "OpenStudio TONE3000", "This callback only accepts a browser GET request.", false); + continue; + } + + const auto target = firstLine.fromFirstOccurrenceOf(" ", false, false) + .upToFirstOccurrenceOf(" ", false, false) + .trim(); + const auto path = target.upToFirstOccurrenceOf("?", false, false); + if (path != kTone3000LoopbackPath) + { + writeTone3000CallbackPage(*client, "OpenStudio TONE3000", "This callback path is not used by OpenStudio.", false); + continue; + } + + const auto query = target.fromFirstOccurrenceOf("?", false, false); + const auto params = parseTone3000QueryString(query); + const auto error = params["error"]; + const auto canceled = params["canceled"]; + const auto toneId = params["tone_id"]; + const auto code = params["code"]; + const auto state = params["state"]; + + if (error.equalsIgnoreCase("access_denied") + || (canceled.equalsIgnoreCase("true") && code.isEmpty())) + { + (void) deleteTone3000PendingAuthIfCurrent( + expectedState, expectedCredentialEpoch); + writeTone3000CallbackPage(*client, "TONE3000 sign-in canceled", "You can return to OpenStudio and connect again when you are ready.", false); + return makeTone3000AuthFlowResult("canceled", false, error.isNotEmpty() ? error : juce::String("TONE3000 sign-in was canceled."), {}, toneId); + } + + if (error.isNotEmpty()) + { + (void) deleteTone3000PendingAuthIfCurrent( + expectedState, expectedCredentialEpoch); + writeTone3000CallbackPage(*client, "TONE3000 sign-in failed", "OpenStudio received an authorization error. Return to the app and try again.", false); + return makeTone3000AuthFlowResult("failed", false, error, {}, toneId); + } + + if (code.isEmpty()) + { + (void) deleteTone3000PendingAuthIfCurrent( + expectedState, expectedCredentialEpoch); + writeTone3000CallbackPage(*client, "TONE3000 sign-in failed", "OpenStudio did not receive an OAuth code from TONE3000.", false); + return makeTone3000AuthFlowResult("failed", false, "OAuth callback did not include a code.", {}, toneId); + } + if (state.isEmpty()) + { + (void) deleteTone3000PendingAuthIfCurrent( + expectedState, expectedCredentialEpoch); + writeTone3000CallbackPage(*client, "TONE3000 sign-in failed", "OpenStudio did not receive the OAuth security state from TONE3000.", false); + return makeTone3000AuthFlowResult("failed", false, "OAuth callback did not include the required state.", {}, toneId); + } + + auto exchangeResult = exchangeTone3000OAuthCode(code, state, {}, {}); + if (auto* exchangeObject = exchangeResult.getDynamicObject()) + { + if (static_cast (exchangeObject->getProperty("success"))) + { + exchangeObject->setProperty("status", "connected"); + if (toneId.isNotEmpty()) + exchangeObject->setProperty("toneId", toneId); + writeTone3000CallbackPage(*client, "Connected to OpenStudio", "You can return to OpenStudio. TONE3000 is connected for this user account.", true); + return exchangeResult; + } + + writeTone3000CallbackPage(*client, "TONE3000 sign-in failed", "OpenStudio could not complete the token exchange. Return to the app and try again.", false); + exchangeObject->setProperty("status", "failed"); + return exchangeResult; + } + + writeTone3000CallbackPage(*client, "TONE3000 sign-in failed", "OpenStudio could not read the token exchange result.", false); + return makeTone3000AuthFlowResult("failed", false, "Token exchange returned an invalid result.", {}, toneId); + } + + (void) deleteTone3000PendingAuthIfCurrent( + expectedState, expectedCredentialEpoch); + return makeTone3000AuthFlowResult("failed", false, "Timed out waiting for TONE3000 to return to OpenStudio.", {}, {}, true); +} + +juce::var startTone3000AuthFlow(juce::var optionsPayload) +{ + if (optionsPayload.isString()) + optionsPayload = juce::JSON::parse(optionsPayload.toString()); + + auto* options = optionsPayload.getDynamicObject(); + auto clientId = getTone3000OptionString(options, "clientId", getConfiguredTone3000ClientId()); + const auto redirectUri = getTone3000OptionString(options, "redirectUri", kTone3000DefaultRedirectUri); + const auto prompt = getTone3000OptionString(options, "prompt"); + const auto toneId = getTone3000OptionString(options, "toneId"); + const auto loginHint = getTone3000OptionString(options, "loginHint"); + const auto timeoutMs = juce::jlimit(30000, kTone3000LoopbackTimeoutMs, getTone3000OptionInt(options, "timeoutMs", kTone3000LoopbackTimeoutMs)); + + if (clientId.isEmpty()) + { + return makeTone3000AuthFlowResult("failed", + false, + "OpenStudio was not built with a TONE3000 publishable client_id. Use Advanced / Developer with a registered test client_id.", + {}, + {}, + true); + } + + const ScopedTone3000AuthFlowProcessLock processFlowGuard; + if (! processFlowGuard.locked) + { + return makeTone3000AuthFlowResult( + "failed", + false, + "Another OpenStudio instance already has a TONE3000 sign-in in progress."); + } + + if (tone3000AuthFlowActive.exchange(true)) + return makeTone3000AuthFlowResult("failed", false, "A TONE3000 sign-in is already in progress."); + + struct ActiveFlag + { + ~ActiveFlag() { tone3000AuthFlowActive.store(false); } + } activeFlag; + + const auto generation = tone3000AuthFlowGeneration.fetch_add(1) + 1; + + juce::StreamingSocket listener; + if (! listener.createListener(kTone3000LoopbackPort, kTone3000LoopbackHost)) + { + auto fallbackRequest = createTone3000AuthRequest(clientId, redirectUri, prompt, toneId, loginHint); + juce::String authUrl; + if (auto* fallbackObject = fallbackRequest.getDynamicObject()) + authUrl = fallbackObject->getProperty("authUrl").toString(); + + return makeTone3000AuthFlowResult("failed", + false, + "Could not open the local TONE3000 callback listener on 127.0.0.1:18762. Use Advanced / Developer fallback.", + authUrl, + {}, + true); + } + + auto authRequest = createTone3000AuthRequest(clientId, redirectUri, prompt, toneId, loginHint); + auto* requestObject = authRequest.getDynamicObject(); + if (requestObject == nullptr || ! static_cast (requestObject->getProperty("success"))) + { + const auto error = requestObject != nullptr ? requestObject->getProperty("error").toString() : juce::String("Could not create TONE3000 auth request."); + return makeTone3000AuthFlowResult("failed", false, error, {}, {}, true); + } + + const auto authUrl = requestObject->getProperty("authUrl").toString(); + const auto expectedState = + requestObject->getProperty("state").toString(); + const auto expectedCredentialEpoch = + static_cast(static_cast( + requestObject->getProperty("credentialEpoch"))); + if (authUrl.isEmpty()) + return makeTone3000AuthFlowResult("failed", false, "TONE3000 did not produce an authorization URL.", {}, {}, true); + + if (! juce::URL(authUrl).launchInDefaultBrowser()) + return makeTone3000AuthFlowResult("failed", false, "Could not open the TONE3000 sign-in page in the default browser.", authUrl, {}, true); + + auto result = waitForTone3000LoopbackCallback( + listener, + generation, + timeoutMs, + expectedState, + expectedCredentialEpoch); + if (auto* resultObject = result.getDynamicObject()) + { + if (! resultObject->hasProperty("authUrl")) + resultObject->setProperty("authUrl", authUrl); + if (! resultObject->hasProperty("clientId")) + resultObject->setProperty("clientId", clientId); + } + return result; +} + +juce::var cancelTone3000AuthFlow() +{ + tone3000AuthFlowGeneration.fetch_add(1); + const auto cancelEpoch = beginTone3000CredentialEpoch(); + + // Wake the loopback listener before secure-storage cleanup, which may ask + // Secret Service to unlock and therefore take time on Linux. + juce::StreamingSocket wakeSocket; + wakeSocket.connect(kTone3000LoopbackHost, kTone3000LoopbackPort, 500); + + bool newerPendingAuthPreserved = false; + bool pendingAuthDeleted = false; + bool pendingAuthCleanupComplete = false; + { + const std::lock_guard storageGuard( + tone3000PendingAuthStorageMutex); + const ScopedTone3000CredentialProcessLock processGuard; + if (processGuard.locked) + { + juce::String loadError; + const auto pending = loadProtectedJson( + getTone3000PendingAuthFile(), loadError); + const auto* pendingObject = pending.getDynamicObject(); + newerPendingAuthPreserved = pendingObject != nullptr + && ! tone3000PendingRecordCanBeInvalidated( + getTone3000RecordSession(pendingObject), + getTone3000RecordEpoch(pendingObject), + cancelEpoch); + pendingAuthDeleted = ! newerPendingAuthPreserved + && deleteProtectedText( + getTone3000PendingAuthFile()); + pendingAuthCleanupComplete = + newerPendingAuthPreserved || pendingAuthDeleted; + } + } + auto result = makeTone3000AuthFlowResult( + "canceled", + pendingAuthCleanupComplete, + pendingAuthCleanupComplete + ? juce::String() + : juce::String( + "TONE3000 sign-in was canceled, but OpenStudio could not clear its pending secure session.")); + if (auto* object = result.getDynamicObject()) + { + object->setProperty("canceled", true); + object->setProperty("pendingAuthDeleted", pendingAuthDeleted); + object->setProperty( + "pendingAuthCleanupComplete", + pendingAuthCleanupComplete); + object->setProperty( + "newerPendingAuthPreserved", + newerPendingAuthPreserved); + } + return result; +} + +juce::var clearTone3000Auth() +{ + tone3000AuthFlowGeneration.fetch_add(1); + const auto clearEpoch = beginTone3000CredentialEpoch(); + bool newerTokenPreserved = false; + bool newerPendingAuthPreserved = false; + bool tokenDeleted = false; + bool pendingAuthDeleted = false; + bool tokenClearComplete = false; + bool pendingAuthClearComplete = false; + bool tokenWasPresent = false; + { + std::scoped_lock storageGuards( + tone3000TokenStorageMutex, + tone3000PendingAuthStorageMutex); + const ScopedTone3000CredentialProcessLock processGuard; + if (processGuard.locked) + { + juce::String tokenLoadError; + const auto token = loadProtectedJson( + getTone3000TokenFile(), tokenLoadError); + const auto* tokenObject = token.getDynamicObject(); + tokenWasPresent = tokenObject != nullptr + && makeTone3000TokenIdentity( + tokenObject).isNotEmpty(); + newerTokenPreserved = tokenObject != nullptr + && ! tone3000RecordCanBeInvalidated( + getTone3000RecordSession(tokenObject), + getTone3000RecordEpoch(tokenObject), + clearEpoch); + tokenDeleted = ! newerTokenPreserved + && deleteProtectedText(getTone3000TokenFile()); + tokenClearComplete = + newerTokenPreserved || tokenDeleted; + + juce::String pendingLoadError; + const auto pending = loadProtectedJson( + getTone3000PendingAuthFile(), pendingLoadError); + const auto* pendingObject = pending.getDynamicObject(); + newerPendingAuthPreserved = pendingObject != nullptr + && ! tone3000RecordCanBeInvalidated( + getTone3000RecordSession(pendingObject), + getTone3000RecordEpoch(pendingObject), + clearEpoch); + pendingAuthDeleted = ! newerPendingAuthPreserved + && deleteProtectedText( + getTone3000PendingAuthFile()); + pendingAuthClearComplete = + newerPendingAuthPreserved || pendingAuthDeleted; + } + } + if (pendingAuthDeleted) + { + // A sign-in listener may belong to another OpenStudio instance. Wake + // it after the global clear transaction so it can observe the missing + // secure pending record instead of waiting for the ten-minute timeout. + juce::StreamingSocket wakeSocket; + if (wakeSocket.connect( + kTone3000LoopbackHost, + kTone3000LoopbackPort, + 500)) + { + constexpr auto request = + "GET /tone3000/credential-cleared HTTP/1.1\r\n" + "Host: 127.0.0.1\r\n" + "Connection: close\r\n\r\n"; + (void) wakeSocket.write( + request, static_cast(std::strlen(request))); + } + } + if (! tokenClearComplete || ! pendingAuthClearComplete) + { + auto failure = makeTone3000Error( + "OpenStudio could not completely clear the secure TONE3000 session."); + if (auto* object = failure.getDynamicObject()) + { + object->setProperty( + "authenticated", + tokenWasPresent && ! tokenDeleted); + object->setProperty("tokenDeleted", tokenDeleted); + object->setProperty("pendingAuthDeleted", pendingAuthDeleted); + object->setProperty( + "newerTokenPreserved", newerTokenPreserved); + object->setProperty( + "newerPendingAuthPreserved", + newerPendingAuthPreserved); + } + return failure; + } + + juce::DynamicObject::Ptr result = new juce::DynamicObject(); + result->setProperty("success", true); + result->setProperty( + "authenticated", newerTokenPreserved); + result->setProperty("tokenDeleted", tokenDeleted); + result->setProperty( + "pendingAuthDeleted", pendingAuthDeleted); + result->setProperty( + "tokenClearComplete", tokenClearComplete); + result->setProperty( + "pendingAuthClearComplete", pendingAuthClearComplete); + result->setProperty( + "newerTokenPreserved", newerTokenPreserved); + result->setProperty( + "newerPendingAuthPreserved", + newerPendingAuthPreserved); + return juce::var(result.get()); +} + +juce::var refreshTone3000Auth(const juce::String& clientIdOverride) +{ + // OAuth providers may rotate refresh tokens. Only one refresh request may + // consume/publish a token at a time across every OpenStudio instance. + // The dedicated lock spans the network request but is separate from the + // short storage transaction lock, so Clear and status remain responsive. + const ScopedTone3000TokenRefreshLock refreshGuard; + if (! refreshGuard.locked) + { + return makeTone3000Error( + "TONE3000 refresh was canceled or timed out while waiting for another refresh to finish."); + } + + juce::String error; + juce::var stored; + juce::uint64 snapshotEpoch = 0; + { + const std::lock_guard storageGuard( + tone3000TokenStorageMutex); + const ScopedTone3000CredentialProcessLock processGuard; + if (processGuard.locked) + { + stored = loadProtectedJson( + getTone3000TokenFile(), error); + snapshotEpoch = tone3000CredentialEpoch.load( + std::memory_order_acquire); + } + else + { + error = "Timed out waiting for another OpenStudio instance to finish updating TONE3000 credentials."; + } + } + auto* object = stored.getDynamicObject(); + if (object == nullptr) + return makeTone3000Error(error.isNotEmpty() ? error : "No stored TONE3000 token"); + + const auto refreshToken = object->getProperty("refreshToken").toString(); + const auto clientId = clientIdOverride.trim().isNotEmpty() + ? clientIdOverride.trim() + : object->getProperty("clientId").toString(); + if (refreshToken.isEmpty()) + return makeTone3000Error("No stored TONE3000 refresh token"); + if (clientId.isEmpty()) + return makeTone3000Error("Missing TONE3000 client_id"); + const auto expectedTokenIdentity = + makeTone3000TokenIdentity(object); + + juce::StringPairArray fields; + fields.set("grant_type", "refresh_token"); + fields.set("refresh_token", refreshToken); + fields.set("client_id", clientId); + + auto tokenPayload = postTone3000OAuthToken(fields); + if (isTone3000TaskCancelled()) + { + return makeTone3000Error( + "The TONE3000 refresh was canceled before credentials were updated."); + } + if (auto* tokenObject = tokenPayload.getDynamicObject()) + { + if (static_cast(tokenObject->getProperty("success")) == false && tokenObject->hasProperty("error")) + { + if (tokenObject->getProperty("oauthError").toString() == "invalid_grant") + { + bool invalidatedCurrentToken = false; + bool currentTokenPresent = false; + bool snapshotStillCurrent = false; + { + const std::lock_guard storageGuard( + tone3000TokenStorageMutex); + const ScopedTone3000CredentialProcessLock processGuard; + if (processGuard.locked) + { + juce::String currentError; + const auto currentStored = loadProtectedJson( + getTone3000TokenFile(), currentError); + const auto* currentObject = + currentStored.getDynamicObject(); + currentTokenPresent = + makeTone3000TokenIdentity( + currentObject).isNotEmpty(); + snapshotStillCurrent = + tone3000CredentialSnapshotStillCurrent( + snapshotEpoch, + expectedTokenIdentity, + tone3000CredentialEpoch.load( + std::memory_order_acquire), + makeTone3000TokenIdentity( + currentObject)); + if (snapshotStillCurrent) + { + invalidatedCurrentToken = + deleteProtectedText( + getTone3000TokenFile()); + } + } + } + auto expired = makeTone3000Error("TONE3000 session expired. Connect again.", static_cast (tokenObject->getProperty("statusCode"))); + if (auto* expiredObject = expired.getDynamicObject()) + { + expiredObject->setProperty("oauthError", "invalid_grant"); + expiredObject->setProperty( + "authenticated", + currentTokenPresent + && ! invalidatedCurrentToken); + expiredObject->setProperty( + "tokenInvalidated", invalidatedCurrentToken); + if (! snapshotStillCurrent) + { + expiredObject->setProperty( + "superseded", true); + } + } + return expired; + } + return tokenPayload; + } + if (!tokenObject->hasProperty("refresh_token") || tokenObject->getProperty("refresh_token").toString().isEmpty()) + tokenObject->setProperty("refresh_token", refreshToken); + } + + const std::lock_guard storageGuard( + tone3000TokenStorageMutex); + const ScopedTone3000CredentialProcessLock processGuard; + if (! processGuard.locked) + { + return makeTone3000Error( + "Timed out waiting for another OpenStudio instance to finish updating TONE3000 credentials."); + } + juce::String currentError; + const auto currentStored = loadProtectedJson( + getTone3000TokenFile(), currentError); + const auto* currentObject = currentStored.getDynamicObject(); + if (! tone3000CredentialSnapshotStillCurrent( + snapshotEpoch, + expectedTokenIdentity, + tone3000CredentialEpoch.load( + std::memory_order_acquire), + makeTone3000TokenIdentity(currentObject))) + { + return makeTone3000Error( + "This TONE3000 refresh was superseded before credentials could be stored."); + } + return storeTone3000TokenPayloadUnlocked( + tokenPayload, clientId, snapshotEpoch); +} + +juce::String sanitizeNAMFileName(juce::String name) +{ + name = name.trim(); + if (name.isEmpty()) + name = "nam-model"; + + juce::String safe; + for (int i = 0; i < name.length(); ++i) + { + const auto c = name[i]; + const bool ok = juce::CharacterFunctions::isLetterOrDigit(c) || c == '-' || c == '_' || c == '.'; + safe << (ok ? juce::String::charToString(c) : "-"); + } + while (safe.contains("--")) + safe = safe.replace("--", "-"); + return safe.trimCharactersAtStart("-").trimCharactersAtEnd("-").substring(0, 96); +} + +bool isTone3000AudioIRExtension(const juce::String& extension) +{ + const auto ext = extension.toLowerCase(); + return ext == ".wav" || ext == ".wave" || ext == ".aif" || ext == ".aiff" || ext == ".flac"; +} + +juce::String getTone3000DownloadExtension(const juce::String& modelUrl) +{ + const auto withoutQuery = modelUrl.upToFirstOccurrenceOf("?", false, false); + const auto withoutFragment = withoutQuery.upToFirstOccurrenceOf("#", false, false); + return juce::File(juce::URL::removeEscapeChars(withoutFragment)).getFileExtension().toLowerCase(); +} + +juce::var parseJsonFileOrDefault(const juce::File& file, const juce::String& arrayProperty) +{ + if (file.existsAsFile()) + { + auto parsed = juce::JSON::parse(file); + if (!parsed.isVoid()) + return parsed; + } + + juce::DynamicObject::Ptr root = new juce::DynamicObject(); + root->setProperty("schemaVersion", 1); + root->setProperty(arrayProperty, juce::Array()); + return juce::var(root.get()); +} + +juce::String normaliseNAMCatalogUpdaterArchitecture(juce::String architecture) +{ + architecture = architecture.trim().toLowerCase(); + if (architecture == "a1") + return "1"; + if (architecture == "a2") + return "2"; + if (architecture == "1" || architecture == "2" || architecture == "custom") + return architecture; + return {}; +} + +std::string makeNAMCatalogModelCacheKey(int toneId, + const juce::String& architecture) +{ + return (juce::String(toneId) + ":" + + normaliseNAMCatalogUpdaterArchitecture(architecture)) + .toStdString(); +} + +juce::var sanitizeNAMCatalogModels(const juce::var& modelsValue, + int expectedToneId, + const juce::String& expectedArchitecture) +{ + juce::Array accepted; + const auto expected = + normaliseNAMCatalogUpdaterArchitecture(expectedArchitecture); + if (auto* models = modelsValue.getArray()) + { + for (const auto& modelValue : *models) + { + auto* model = modelValue.getDynamicObject(); + if (model == nullptr + || getModelObjectInt(model, "id", "model_id") <= 0) + { + continue; + } + const int modelToneId = + getModelObjectInt(model, "tone_id", "toneId"); + if (modelToneId > 0 && modelToneId != expectedToneId) + continue; + const auto modelArchitecture = + normaliseNAMCatalogUpdaterArchitecture( + getModelObjectString( + model, "architecture_version", "architecture")); + if (modelArchitecture.isNotEmpty() + && expected.isNotEmpty() + && modelArchitecture != expected) + { + continue; + } + accepted.add(modelValue); + } + } + return juce::var(accepted); +} + +void seedNAMCatalogModelCache( + const juce::var& catalog, + std::map& cache) +{ + auto* root = catalog.getDynamicObject(); + auto* tones = root != nullptr + ? root->getProperty("tones").getArray() + : nullptr; + if (tones == nullptr) + return; + + for (const auto& toneValue : *tones) + { + auto* tone = toneValue.getDynamicObject(); + if (tone == nullptr) + continue; + const int toneId = getModelObjectInt(tone, "id", "toneId"); + const auto architecture = normaliseNAMCatalogUpdaterArchitecture( + tone->getProperty("architecture").toString()); + if (toneId <= 0 || architecture.isEmpty()) + continue; + const auto sanitized = sanitizeNAMCatalogModels( + tone->getProperty("models"), toneId, architecture); + auto* models = sanitized.getArray(); + if (models == nullptr || models->isEmpty()) + continue; + const auto key = makeNAMCatalogModelCacheKey(toneId, architecture); + auto existing = cache.find(key); + if (existing == cache.end() + || existing->second.getArray() == nullptr + || existing->second.getArray()->size() < models->size()) + { + cache[key] = sanitized; + } + } +} + +struct NAMLibraryMultiProcessRegressionResult +{ + bool passed = false; + juce::String detail; +}; + +struct NAMLibraryChildWaitResult +{ + bool finishedNaturally = false; + bool killRequested = false; + bool stopped = false; + int exitCode = -1; +}; + +NAMLibraryChildWaitResult waitForNAMLibraryRegressionChild( + juce::ChildProcess& child, + bool started, + int naturalWaitMs, + int postKillWaitMs) +{ + NAMLibraryChildWaitResult result; + if (! started) + return result; + + result.finishedNaturally = child.waitForProcessToFinish( + juce::jmax(0, naturalWaitMs)); + if (! result.finishedNaturally) + { + result.killRequested = child.kill(); + const bool reapedAfterKill = child.waitForProcessToFinish( + juce::jmax(0, postKillWaitMs)); + result.stopped = reapedAfterKill || ! child.isRunning(); + } + else + { + result.stopped = true; + } + if (result.stopped) + result.exitCode = child.getExitCode(); + return result; +} + +bool cleanupNAMLibraryRegressionDirectory( + const juce::File& directory) +{ + if (! directory.exists()) + return true; + return directory.deleteRecursively() && ! directory.exists(); +} + +NAMLibraryMultiProcessRegressionResult +runNAMLibraryMultiProcessRegression() +{ + NAMLibraryMultiProcessRegressionResult result; + const auto executable = juce::File::getSpecialLocation( + juce::File::currentExecutableFile); + const auto regressionDirectory = juce::File::getSpecialLocation( + juce::File::tempDirectory).getChildFile( + "OpenStudio_NAM_Library_Multiprocess_" + + juce::Uuid().toString()); + const auto manifestFile = regressionDirectory.getChildFile( + "library_manifest.json"); + const auto startFile = regressionDirectory.getChildFile("start.flag"); + const auto readyA = regressionDirectory.getChildFile("ready-writer-a.flag"); + const auto readyB = regressionDirectory.getChildFile("ready-writer-b.flag"); + + juce::DynamicObject::Ptr manifest = new juce::DynamicObject(); + manifest->setProperty("schemaVersion", 1); + manifest->setProperty("installed", juce::Array()); + const bool fixtureReady = executable.existsAsFile() + && regressionDirectory.createDirectory().wasOk() + && manifestFile.replaceWithText( + juce::JSON::toString(juce::var(manifest.get()), true)); + if (! fixtureReady) + { + result.detail = "Could not prepare the isolated multi-process manifest fixture."; + (void) regressionDirectory.deleteRecursively(); + return result; + } + + const auto makeCommand = [&] (const juce::String& writerId, + const juce::File& readyFile) + { + juce::StringArray command; + command.add(executable.getFullPathName()); + command.add("--nam-library-manifest-writer-child"); + command.add("--manifest"); + command.add(manifestFile.getFullPathName()); + command.add("--writer-id"); + command.add(writerId); + command.add("--ready"); + command.add(readyFile.getFullPathName()); + command.add("--start"); + command.add(startFile.getFullPathName()); + return command; + }; + + juce::ChildProcess writerA; + juce::ChildProcess writerB; + const bool writerAStarted = writerA.start( + makeCommand("writer-a", readyA)); + const bool writerBStarted = writerB.start( + makeCommand("writer-b", readyB)); + const auto readyDeadline = juce::Time::getMillisecondCounterHiRes() + + 10000.0; + while (writerAStarted && writerBStarted + && (! readyA.existsAsFile() || ! readyB.existsAsFile()) + && writerA.isRunning() && writerB.isRunning() + && juce::Time::getMillisecondCounterHiRes() < readyDeadline) + { + juce::Thread::sleep(5); + } + const bool bothReady = readyA.existsAsFile() + && readyB.existsAsFile(); + const bool startReleased = bothReady + && startFile.replaceWithText("start"); + + const auto writerAWait = waitForNAMLibraryRegressionChild( + writerA, writerAStarted, 15000, 2000); + const auto writerBWait = waitForNAMLibraryRegressionChild( + writerB, writerBStarted, 15000, 2000); + + const auto finalManifest = juce::JSON::parse(manifestFile); + const auto* finalObject = finalManifest.getDynamicObject(); + const auto installedValue = finalObject != nullptr + ? finalObject->getProperty("installed") + : juce::var(); + const auto* installed = installedValue.getArray(); + int writerACount = 0; + int writerBCount = 0; + if (installed != nullptr) + { + for (const auto& record : *installed) + { + const auto writer = record.getProperty( + "writerId", {}).toString(); + writerACount += writer == "writer-a" ? 1 : 0; + writerBCount += writer == "writer-b" ? 1 : 0; + } + } + + const bool childrenStopped = + (! writerAStarted || writerAWait.stopped) + && (! writerBStarted || writerBWait.stopped); + const bool cleanupSucceeded = childrenStopped + && cleanupNAMLibraryRegressionDirectory( + regressionDirectory); + result.passed = writerAStarted + && writerBStarted + && bothReady + && startReleased + && writerAWait.finishedNaturally + && writerBWait.finishedNaturally + && writerAWait.exitCode == 0 + && writerBWait.exitCode == 0 + && installed != nullptr + && installed->size() == 2 + && writerACount == 1 + && writerBCount == 1 + && cleanupSucceeded; + result.detail = "writerAStarted=" + + juce::String(writerAStarted ? "true" : "false") + + ", writerBStarted=" + + juce::String(writerBStarted ? "true" : "false") + + ", bothReady=" + + juce::String(bothReady ? "true" : "false") + + ", startReleased=" + + juce::String(startReleased ? "true" : "false") + + ", writerAExitCode=" + juce::String(writerAWait.exitCode) + + ", writerBExitCode=" + juce::String(writerBWait.exitCode) + + ", installedCount=" + + juce::String(installed != nullptr ? installed->size() : -1) + + ", writerACount=" + juce::String(writerACount) + + ", writerBCount=" + juce::String(writerBCount) + + ", cleanupSucceeded=" + + juce::String(cleanupSucceeded ? "true" : "false"); + return result; +} + +NAMLibraryMultiProcessRegressionResult +runNAMLibraryProcessCleanupRegression() +{ + NAMLibraryMultiProcessRegressionResult result; + const auto executable = juce::File::getSpecialLocation( + juce::File::currentExecutableFile); + const auto regressionDirectory = juce::File::getSpecialLocation( + juce::File::tempDirectory).getChildFile( + "OpenStudio_NAM_Library_Multiprocess_" + + juce::Uuid().toString()); + const auto manifestFile = regressionDirectory.getChildFile( + "library_manifest.json"); + const auto readyFile = regressionDirectory.getChildFile( + "ready-cleanup-writer.flag"); + const auto startFile = regressionDirectory.getChildFile( + "start.flag"); + const auto manifest = makeEmptyNAMLibraryManifest(); + const bool fixtureReady = executable.existsAsFile() + && regressionDirectory.createDirectory().wasOk() + && manifestFile.replaceWithText( + juce::JSON::toString(manifest, true)); + if (! fixtureReady) + { + result.detail = + "Could not prepare the child-cleanup fixture."; + (void) cleanupNAMLibraryRegressionDirectory( + regressionDirectory); + return result; + } + + juce::StringArray command; + command.add(executable.getFullPathName()); + command.add("--nam-library-manifest-writer-child"); + command.add("--manifest"); + command.add(manifestFile.getFullPathName()); + command.add("--writer-id"); + command.add("cleanup-writer"); + command.add("--ready"); + command.add(readyFile.getFullPathName()); + command.add("--start"); + command.add(startFile.getFullPathName()); + juce::ChildProcess child; + const bool started = child.start(command); + const auto readyDeadline = + juce::Time::getMillisecondCounterHiRes() + 5000.0; + while (started && ! readyFile.existsAsFile() + && child.isRunning() + && juce::Time::getMillisecondCounterHiRes() + < readyDeadline) + { + juce::Thread::sleep(5); + } + const bool becameReady = readyFile.existsAsFile(); + const auto wait = waitForNAMLibraryRegressionChild( + child, started, 25, 2000); + const bool childStopped = ! started || wait.stopped; + const bool cleanupSucceeded = childStopped + && cleanupNAMLibraryRegressionDirectory( + regressionDirectory); + result.passed = started + && becameReady + && ! wait.finishedNaturally + && wait.killRequested + && wait.stopped + && cleanupSucceeded; + result.detail = "started=" + + juce::String(started ? "true" : "false") + + ", becameReady=" + + juce::String(becameReady ? "true" : "false") + + ", killRequested=" + + juce::String(wait.killRequested ? "true" : "false") + + ", stoppedAfterKill=" + + juce::String(wait.stopped ? "true" : "false") + + ", cleanupSucceeded=" + + juce::String(cleanupSucceeded ? "true" : "false"); + return result; +} + +juce::var runNAMCatalogNativeRegressionImpl() +{ + juce::Array checks; + bool overallPass = true; + const auto addCheck = [&checks, &overallPass] + (const juce::String& id, + bool pass, + const juce::String& detail) + { + juce::DynamicObject::Ptr check = new juce::DynamicObject(); + check->setProperty("id", id); + check->setProperty("pass", pass); + check->setProperty("detail", detail); + checks.add(juce::var(check.get())); + overallPass = overallPass && pass; + }; + const auto makeModel = [] (int modelId, + int toneId, + const juce::String& architecture) + { + juce::DynamicObject::Ptr model = new juce::DynamicObject(); + model->setProperty("id", modelId); + model->setProperty("tone_id", toneId); + model->setProperty("architecture_version", architecture); + return juce::var(model.get()); + }; + const auto makeTone = [&makeModel] + (int toneId, + const juce::String& architecture, + int modelId) + { + juce::DynamicObject::Ptr tone = new juce::DynamicObject(); + tone->setProperty("id", toneId); + tone->setProperty("architecture", architecture); + juce::Array models; + models.add(makeModel(modelId, toneId, architecture)); + tone->setProperty("models", juce::var(models)); + return juce::var(tone.get()); + }; + + juce::Array oldRows; + oldRows.add(makeTone(7, "1", 701)); + oldRows.add(makeTone(7, "2", 702)); + juce::DynamicObject::Ptr oldRoot = new juce::DynamicObject(); + oldRoot->setProperty("tones", juce::var(oldRows)); + std::map cache; + seedNAMCatalogModelCache(juce::var(oldRoot.get()), cache); + const auto a1Key = makeNAMCatalogModelCacheKey(7, "1"); + const auto a2Key = makeNAMCatalogModelCacheKey(7, "2"); + const bool priorArchitecturesHydrated = + cache.find(a1Key) != cache.end() + && cache.find(a2Key) != cache.end(); + addCheck( + "existing_catalog_models_seed_both_architectures", + priorArchitecturesHydrated, + "Verified cached A1 and A2 model arrays must remain available when the native fetch budget is exhausted."); + + juce::Array fetchedModels; + fetchedModels.add(makeModel(703, 7, "1")); + fetchedModels.add(makeModel(999, 99, "1")); + cache[a1Key] = sanitizeNAMCatalogModels( + juce::var(fetchedModels), 7, "1"); + bool everyDuplicateHydrated = true; + for (int duplicate = 0; duplicate < 3; ++duplicate) + { + auto found = cache.find(a1Key); + auto* models = found != cache.end() + ? found->second.getArray() + : nullptr; + everyDuplicateHydrated = everyDuplicateHydrated + && models != nullptr + && models->size() == 1 + && static_cast( + models->getReference(0).getProperty("id", 0)) + == 703; + } + addCheck( + "duplicate_sort_rows_share_sanitized_models", + everyDuplicateHydrated, + "Every sort-bucket duplicate must receive the same freshly fetched tone/architecture models, with mismatched tone IDs rejected."); + + auto a2 = cache.find(a2Key); + auto* a2Models = a2 != cache.end() + ? a2->second.getArray() + : nullptr; + const bool unfetchedA2Preserved = a2Models != nullptr + && a2Models->size() == 1 + && static_cast( + a2Models->getReference(0).getProperty("id", 0)) + == 702; + addCheck( + "unfetched_architecture_uses_verified_cache", + unfetchedA2Preserved, + "Rows beyond maxModelFetches must retain verified prior model arrays instead of losing multi-capture choices."); + + int largeCapturePageRequests = 0; + const auto largeCapturePack = fetchTone3000ModelPages( + 8, + "2", + kTone3000CatalogModelPageSize, + [&] (int page, int pageSize) + { + ++largeCapturePageRequests; + juce::Array pageModels; + const int firstIndex = (page - 1) * pageSize; + const int endIndex = juce::jmin( + firstIndex + pageSize, 137); + for (int index = firstIndex; index < endIndex; ++index) + pageModels.add(makeModel(800 + index, 8, "2")); + + juce::DynamicObject::Ptr payload = new juce::DynamicObject(); + payload->setProperty("data", juce::var(pageModels)); + payload->setProperty("page", page); + payload->setProperty("page_size", pageSize); + payload->setProperty("total", 137); + payload->setProperty("total_pages", 2); + payload->setProperty("has_more", page < 2); + payload->setProperty( + "next_page", + page < 2 ? juce::var(page + 1) : juce::var()); + return juce::var(payload.get()); + }); + const bool largeCapturePackPass = + largeCapturePack.error.isVoid() + && largeCapturePageRequests == 2 + && largeCapturePack.pagesFetched == 2 + && largeCapturePack.models.size() == 137 + && static_cast( + largeCapturePack.models.getFirst().getProperty("id", 0)) + == 800 + && static_cast( + largeCapturePack.models.getLast().getProperty("id", 0)) + == 936; + addCheck( + "catalog_paginates_capture_packs_above_one_hundred_models", + largeCapturePackPass, + "The native catalog and live tone detail path must request every bounded model page and preserve all 137 captures without duplicates or truncation."); + + const auto overLimitCapturePack = fetchTone3000ModelPages( + 9, + "2", + kTone3000CatalogModelPageSize, + [&makeModel] (int page, int pageSize) + { + juce::Array pageModels; + pageModels.add(makeModel(900, 9, "2")); + juce::DynamicObject::Ptr payload = new juce::DynamicObject(); + payload->setProperty("data", juce::var(pageModels)); + payload->setProperty("page", page); + payload->setProperty("page_size", pageSize); + payload->setProperty( + "total_pages", kTone3000MaximumModelPages + 1); + return juce::var(payload.get()); + }); + addCheck( + "catalog_rejects_unbounded_capture_pagination", + ! overLimitCapturePack.error.isVoid(), + "A provider response beyond the bounded per-tone page limit must fail explicitly instead of publishing a silently truncated capture list."); + + std::atomic firstRefreshEntered { false }; + std::atomic releaseFirstRefresh { false }; + std::atomic secondRefreshEntered { false }; + std::thread firstRefresh([&] + { + const ScopedTone3000CatalogRefreshLock lock(2000); + firstRefreshEntered.store(lock.locked, std::memory_order_release); + while (lock.locked + && ! releaseFirstRefresh.load( + std::memory_order_acquire)) + { + juce::Thread::sleep(1); + } + }); + for (int attempt = 0; + attempt < 400 + && ! firstRefreshEntered.load(std::memory_order_acquire); + ++attempt) + { + juce::Thread::sleep(5); + } + std::thread secondRefresh([&] + { + const ScopedTone3000CatalogRefreshLock lock(2000); + secondRefreshEntered.store(lock.locked, std::memory_order_release); + }); + juce::Thread::sleep(50); + const bool secondRefreshWasBlocked = + ! secondRefreshEntered.load(std::memory_order_acquire); + releaseFirstRefresh.store(true, std::memory_order_release); + firstRefresh.join(); + secondRefresh.join(); + const bool catalogRefreshSerializationPass = + firstRefreshEntered.load(std::memory_order_acquire) + && secondRefreshWasBlocked + && secondRefreshEntered.load(std::memory_order_acquire); + addCheck( + "catalog_refresh_threads_are_process_local_single_flight", + catalogRefreshSerializationPass, + "Concurrent refresh workers in one process must serialize before attempting the separately configured inter-process publication lock."); + + const auto manifestMultiProcessRegression = + runNAMLibraryMultiProcessRegression(); + addCheck( + "nam_library_manifest_multi_process_writers_preserved", + manifestMultiProcessRegression.passed, + "Two real OpenStudio child processes must preserve both concurrent manifest records under the shared OS lock. " + + manifestMultiProcessRegression.detail); + + const auto processCleanupRegression = + runNAMLibraryProcessCleanupRegression(); + addCheck( + "nam_library_child_timeout_is_reaped_before_cleanup", + processCleanupRegression.passed, + "A timed-out real child process must be killed, observed stopped with a bounded wait, and have its isolated fixture removed. " + + processCleanupRegression.detail); + + std::atomic firstTokenRefreshEntered { false }; + std::atomic releaseFirstTokenRefresh { false }; + std::atomic secondTokenRefreshEntered { false }; + std::thread firstTokenRefresh([&] + { + const ScopedTone3000TokenRefreshLock lock(2000); + firstTokenRefreshEntered.store( + lock.locked, std::memory_order_release); + while (lock.locked + && ! releaseFirstTokenRefresh.load( + std::memory_order_acquire)) + { + juce::Thread::sleep(1); + } + }); + for (int attempt = 0; + attempt < 400 + && ! firstTokenRefreshEntered.load( + std::memory_order_acquire); + ++attempt) + { + juce::Thread::sleep(5); + } + std::thread secondTokenRefresh([&] + { + const ScopedTone3000TokenRefreshLock lock(2000); + secondTokenRefreshEntered.store( + lock.locked, std::memory_order_release); + }); + juce::Thread::sleep(50); + const bool secondTokenRefreshWasBlocked = + ! secondTokenRefreshEntered.load( + std::memory_order_acquire); + releaseFirstTokenRefresh.store(true, std::memory_order_release); + firstTokenRefresh.join(); + secondTokenRefresh.join(); + const bool tokenRefreshSerializationPass = + firstTokenRefreshEntered.load( + std::memory_order_acquire) + && secondTokenRefreshWasBlocked + && secondTokenRefreshEntered.load( + std::memory_order_acquire); + addCheck( + "token_refresh_threads_are_process_local_single_flight", + tokenRefreshSerializationPass, + "Concurrent refresh workers in one process must serialize before attempting the separately configured inter-process token-rotation lock."); + + const bool retryAfterPass = + std::abs(parseTone3000RetryAfterSeconds({}) - 15.0) < 0.001 + && std::abs(parseTone3000RetryAfterSeconds("0") - 15.0) < 0.001 + && std::abs(parseTone3000RetryAfterSeconds("2.5") - 2.5) < 0.001 + && std::abs(parseTone3000RetryAfterSeconds("120") - 60.0) < 0.001; + addCheck( + "retry_after_default_and_clamp", + retryAfterPass, + "HTTP 429 Retry-After must preserve numeric seconds, default conservatively to 15 seconds, and clamp to 1-60 seconds."); + + const bool credentialGenerationPass = + tone3000CredentialSnapshotStillCurrent( + 10, "token-a", 10, "token-a") + && ! tone3000CredentialSnapshotStillCurrent( + 10, "token-a", 11, "token-a") + && ! tone3000CredentialSnapshotStillCurrent( + 10, "token-a", 10, "token-b") + && tone3000RecordCanBeInvalidated( + tone3000CredentialSessionId, 0, 20) + && tone3000RecordCanBeInvalidated( + tone3000CredentialSessionId, 19, 20) + && tone3000RecordCanBeInvalidated( + tone3000CredentialSessionId, 20, 20) + && ! tone3000RecordCanBeInvalidated( + tone3000CredentialSessionId, 21, 20) + && tone3000RecordCanBeInvalidated( + "prior-or-other-process", 999, 20) + && tone3000PendingRecordCanBeInvalidated( + tone3000CredentialSessionId, 19, 20) + && ! tone3000PendingRecordCanBeInvalidated( + "other-live-process", 1, 20); + addCheck( + "credential_epoch_and_identity_reject_stale_publication", + credentialGenerationPass, + "A refresh/exchange snapshot must be rejected after clear, cancel, a newer sign-in, or token rotation; cleanup must preserve newer records and pending PKCE state owned by another live instance."); + + const auto libraryReliability = + runNAMLibraryReliabilityRegressionImpl(); + overallPass = overallPass + && static_cast(libraryReliability.getProperty( + "success", false)); + const auto reliabilityChecksValue = + libraryReliability.getProperty("checks", {}); + if (auto* reliabilityChecks = reliabilityChecksValue.getArray()) + { + for (const auto& check : *reliabilityChecks) + checks.add(check); + } + + juce::DynamicObject::Ptr result = new juce::DynamicObject(); + result->setProperty("success", overallPass); + result->setProperty("objectiveGateStatus", + overallPass ? "pass" : "fail"); + result->setProperty("checks", juce::var(checks)); + return juce::var(result.get()); +} + +juce::var refreshNAMCatalogFromUpdater(juce::var optionsVar) +{ + juce::DynamicObject::Ptr result = new juce::DynamicObject(); + result->setProperty("success", false); + const ScopedTone3000CatalogRefreshLock refreshLock; + if (! refreshLock.locked) + { + result->setProperty("exitCode", 2); + result->setProperty( + "error", "NAM catalog refresh was canceled or timed out while waiting for another refresh to finish."); + return juce::var(result.get()); + } + const auto namRoot = getOpenStudioNAMRoot(); + const auto jsonFile = getOpenStudioNAMCatalogJson(); + + auto* options = optionsVar.getDynamicObject(); + auto optionProperty = [] (juce::DynamicObject* object, + const juce::String& primary, + const juce::String& fallback, + juce::var defaultValue) + { + if (object == nullptr) + return defaultValue; + + auto value = object->getProperty(primary); + if (value.isVoid() && fallback.isNotEmpty()) + value = object->getProperty(fallback); + + return value.isVoid() ? defaultValue : value; + }; + + const int pageSize = juce::jlimit(1, 25, static_cast(optionProperty(options, "page_size", "pageSize", 25))); + const int pages = juce::jlimit(1, 3, static_cast(optionProperty(options, "pages", {}, 1))); + const int maxModelFetches = juce::jlimit(0, 200, static_cast(optionProperty(options, "max_model_fetches", "maxModelFetches", 60))); + const double minInterval = juce::jlimit(0.25, 5.0, static_cast(optionProperty(options, "min_interval", "minInterval", 0.75))); + const auto gears = optionProperty(options, "gears", {}, "amp_amp-cab").toString().trim(); + const auto query = optionProperty(options, "query", {}, "").toString(); + const auto architecture = normaliseNAMCatalogUpdaterArchitecture(optionProperty(options, "architecture", {}, "").toString()); + const auto startMs = juce::Time::getMillisecondCounterHiRes(); + result->setProperty("exitCode", 0); + result->setProperty("timedOut", false); + result->setProperty("updater", "native-cpp"); + result->setProperty("rootPath", namRoot.getFullPathName()); + result->setProperty("catalogJsonPath", jsonFile.getFullPathName()); + result->setProperty("pageSize", pageSize); + result->setProperty("pages", pages); + result->setProperty("maxModelFetches", maxModelFetches); + + auto accessToken = getStoredTone3000AccessToken(); + if (accessToken.isEmpty()) + { + const auto refreshResult = refreshTone3000Auth({}); + if (isTone3000ErrorPayload(refreshResult)) + { + const auto* refreshObject = refreshResult.getDynamicObject(); + result->setProperty("error", refreshObject != nullptr + ? refreshObject->getProperty("error") + : juce::var("Connect TONE3000 before refreshing the NAM catalog.")); + result->setProperty("exitCode", 2); + return juce::var(result.get()); + } + accessToken = getStoredTone3000AccessToken(); + } + if (accessToken.isEmpty()) + { + result->setProperty("error", "Connect TONE3000 before refreshing the NAM catalog."); + result->setProperty("exitCode", 2); + return juce::var(result.get()); + } + + juce::StringArray architectures; + if (architecture.isNotEmpty()) + architectures.add(architecture); + else + { + architectures.add("1"); + architectures.add("2"); + } + juce::StringArray sorts; + sorts.add("newest"); + sorts.add("trending"); + sorts.add("downloads-all-time"); + + const auto existingCatalog = + parseJsonFileOrDefault(jsonFile, "tones"); + std::map modelCache; + seedNAMCatalogModelCache(existingCatalog, modelCache); + juce::Array rows; + std::set fetchedModelKeys; + int modelFetchCount = 0; + double lastRequestMs = 0.0; + const auto waitForRequestSlot = [&] + { + const double now = juce::Time::getMillisecondCounterHiRes(); + const double waitMs = minInterval * 1000.0 - (now - lastRequestMs); + if (waitMs > 0.0) + { + if (! sleepForTone3000Task( + juce::jlimit( + 1, 5000, juce::roundToInt(waitMs)))) + { + return false; + } + } + lastRequestMs = juce::Time::getMillisecondCounterHiRes(); + return ! isTone3000TaskCancelled(); + }; + const auto requestCatalogJson = [&] (const juce::URL& url, + const juce::String& label) + { + juce::var payload; + constexpr int maximumRateLimitRetries = 3; + for (int attempt = 0; attempt <= maximumRateLimitRetries; ++attempt) + { + if (juce::Time::getMillisecondCounterHiRes() - startMs + >= 180000.0) + { + result->setProperty("timedOut", true); + return makeTone3000Error( + "NAM catalog refresh timed out."); + } + if (! waitForRequestSlot()) + { + return makeTone3000Error( + "NAM catalog refresh was canceled."); + } + payload = getTone3000Json(url, accessToken, label); + auto* object = payload.getDynamicObject(); + const int statusCode = object != nullptr + ? static_cast(object->getProperty("statusCode")) + : 0; + if (! isTone3000ErrorPayload(payload) + || statusCode != 429 + || attempt == maximumRateLimitRetries) + { + return payload; + } + double retryAfterSeconds = static_cast( + object->getProperty("retryAfterSeconds")); + if (! std::isfinite(retryAfterSeconds) + || retryAfterSeconds <= 0.0) + { + retryAfterSeconds = 15.0; + } + if (! sleepForTone3000Task(juce::roundToInt( + juce::jlimit(1.0, 60.0, retryAfterSeconds) + * 1000.0))) + { + return makeTone3000Error( + "NAM catalog refresh was canceled."); + } + } + return payload; + }; + const auto fail = [&] (const juce::var& payload, + const juce::String& fallback) -> juce::var + { + auto* object = payload.getDynamicObject(); + result->setProperty("error", object != nullptr + ? object->getProperty("error").toString() + : fallback); + result->setProperty("exitCode", 2); + result->setProperty("durationMs", + juce::Time::getMillisecondCounterHiRes() - startMs); + result->setProperty("catalog", existingCatalog); + return juce::var(result.get()); + }; + + int rank = 0; + for (const auto& architectureValue : architectures) + { + for (const auto& sort : sorts) + { + for (int page = 1; page <= pages; ++page) + { + if (isTone3000TaskCancelled()) + return fail({}, "NAM catalog refresh was canceled."); + auto searchUrl = juce::URL("https://www.tone3000.com/api/v1/tones/search") + .withParameter("query", query) + .withParameter("page", juce::String(page)) + .withParameter("page_size", juce::String(pageSize)) + .withParameter("sort", sort) + .withParameter("gears", gears.isNotEmpty() ? gears : juce::String("amp_amp-cab")) + .withParameter("platform", "nam") + .withParameter("architecture", architectureValue); + auto searchPayload = requestCatalogJson( + searchUrl, "TONE3000 catalog search"); + if (isTone3000ErrorPayload(searchPayload)) + return fail(searchPayload, "TONE3000 catalog search failed."); + + auto* searchObject = searchPayload.getDynamicObject(); + if (searchObject == nullptr) + return fail({}, "TONE3000 catalog search returned invalid JSON."); + auto tonesValue = searchObject->getProperty("data"); + if (! tonesValue.isArray()) + tonesValue = searchObject->getProperty("tones"); + auto* tones = tonesValue.getArray(); + if (tones == nullptr) + continue; + + for (auto toneValue : *tones) + { + auto* tone = toneValue.getDynamicObject(); + if (tone == nullptr) + continue; + const int toneId = getModelObjectInt(tone, "id", "toneId"); + if (toneId <= 0) + continue; + ++rank; + tone->setProperty("sortBucket", sort); + tone->setProperty("architecture", architectureValue); + tone->setProperty("catalogRank", rank); + + const auto modelKey = makeNAMCatalogModelCacheKey( + toneId, architectureValue); + if (fetchedModelKeys.find(modelKey) + == fetchedModelKeys.end() + && modelFetchCount < maxModelFetches) + { + fetchedModelKeys.insert(modelKey); + ++modelFetchCount; + const auto pageResult = fetchTone3000ModelPages( + toneId, + architectureValue, + kTone3000CatalogModelPageSize, + [&] (int modelPage, int modelPageSize) + { + const auto modelsUrl = juce::URL( + "https://www.tone3000.com/api/v1/models") + .withParameter( + "tone_id", juce::String(toneId)) + .withParameter( + "page", juce::String(modelPage)) + .withParameter( + "page_size", + juce::String(modelPageSize)) + .withParameter( + "architecture", + architectureValue); + return requestCatalogJson( + modelsUrl, + "TONE3000 catalog model list"); + }); + if (! pageResult.error.isVoid()) + { + return fail( + pageResult.error, + "TONE3000 catalog model pagination failed."); + } + modelCache[modelKey] = sanitizeNAMCatalogModels( + juce::var(pageResult.models), + toneId, + architectureValue); + } + const auto cachedModels = modelCache.find(modelKey); + tone->setProperty( + "models", + cachedModels != modelCache.end() + ? cachedModels->second + : juce::var(juce::Array())); + rows.add(toneValue); + } + } + } + } + + juce::DynamicObject::Ptr catalogObject = new juce::DynamicObject(); + catalogObject->setProperty("schemaVersion", 1); + const auto generatedAt = juce::Time::getCurrentTime().toISO8601(true); + catalogObject->setProperty("generatedAt", generatedAt); + catalogObject->setProperty("source", "tone3000"); + juce::DynamicObject::Ptr queryObject = new juce::DynamicObject(); + queryObject->setProperty("platform", "nam"); + queryObject->setProperty("gears", gears.isNotEmpty() ? gears : juce::String("amp_amp-cab")); + juce::Array architectureValues; + for (const auto& value : architectures) + architectureValues.add(value); + juce::Array sortValues; + for (const auto& value : sorts) + sortValues.add(value); + queryObject->setProperty("architecture", juce::var(architectureValues)); + queryObject->setProperty("sort", juce::var(sortValues)); + queryObject->setProperty("pageSize", pageSize); + queryObject->setProperty("pages", pages); + catalogObject->setProperty("query", juce::var(queryObject.get())); + catalogObject->setProperty("tones", juce::var(rows)); + const juce::var catalog(catalogObject.get()); + + if (isTone3000TaskCancelled()) + return fail({}, "NAM catalog refresh was canceled before publication."); + if (namRoot.createDirectory().failed()) + return fail({}, "Could not create the NAM catalog directory."); + juce::TemporaryFile temporaryCatalog( + jsonFile, juce::TemporaryFile::useHiddenFile); + if (! temporaryCatalog.getFile().replaceWithText( + juce::JSON::toString(catalog, true)) + || ! temporaryCatalog.overwriteTargetFileWithTemporary()) + { + return fail({}, "Could not publish catalog.json."); + } + + bool legacyCatalogCleanupComplete = true; + for (const auto& legacyName : { + juce::String("catalog.sqlite"), + juce::String("catalog.sqlite-wal"), + juce::String("catalog.sqlite-shm") }) + { + const auto legacyFile = namRoot.getChildFile(legacyName); + if (legacyFile.existsAsFile() && ! legacyFile.deleteFile()) + legacyCatalogCleanupComplete = false; + } + + result->setProperty("success", true); + result->setProperty("durationMs", + juce::Time::getMillisecondCounterHiRes() - startMs); + result->setProperty("output", "Native catalog refresh cached " + + juce::String(rows.size()) + " tone rows"); + result->setProperty("toneRows", rows.size()); + result->setProperty("generatedAt", generatedAt); + result->setProperty("legacyCatalogCleanupComplete", + legacyCatalogCleanupComplete); + result->setProperty("catalog", catalog); + return juce::var(result.get()); +} + +juce::String getModelObjectString(juce::DynamicObject* model, const juce::String& primary, const juce::String& fallback) +{ + if (model == nullptr) + return {}; + auto value = model->getProperty(primary).toString(); + if (value.isEmpty() && fallback.isNotEmpty()) + value = model->getProperty(fallback).toString(); + return value; +} + +juce::String normaliseNAMSha256(juce::String checksum) +{ + checksum = checksum.trim().toLowerCase(); + if (checksum.startsWith("sha256:") || checksum.startsWith("sha256=")) + checksum = checksum.substring(7).trim(); + return checksum; +} + +bool calculateNAMAssetSha256(const juce::File& file, + juce::String& actualSha256, + juce::String& error) +{ + if (! file.existsAsFile()) + { + error = "The NAM or IR asset could not be found."; + return false; + } + + juce::FileInputStream input(file); + if (! input.openedOk()) + { + error = "OpenStudio could not read the NAM or IR asset."; + return false; + } + + class CancellableHashInput final : public juce::InputStream + { + public: + explicit CancellableHashInput(juce::InputStream& sourceIn) + : source(sourceIn) + { + } + + juce::int64 getTotalLength() override + { + return source.getTotalLength(); + } + + bool isExhausted() override + { + return canceled || source.isExhausted(); + } + + juce::int64 getPosition() override + { + return source.getPosition(); + } + + bool setPosition(juce::int64 position) override + { + return source.setPosition(position); + } + + int read(void* destination, int maximumBytes) override + { + if (isTone3000TaskCancelled()) + { + canceled = true; + return 0; + } + constexpr int maximumChunkBytes = 64 * 1024; + return source.read( + destination, + juce::jmin(maximumBytes, maximumChunkBytes)); + } + + bool wasCanceled() const noexcept { return canceled; } + + private: + juce::InputStream& source; + bool canceled = false; + } cancellableInput(input); + + const auto hash = juce::SHA256(cancellableInput); + if (cancellableInput.wasCanceled()) + { + error = "The NAM asset search was canceled while checking a file."; + return false; + } + actualSha256 = hash.toHexString().toLowerCase(); + return true; +} + +juce::var inspectNAMAssetFile(const juce::String& filePath) +{ + struct CachedInspection + { + juce::String path; + juce::int64 fileSize = 0; + juce::int64 modificationTimeMs = 0; + juce::String checksum; + }; + static juce::CriticalSection cacheLock; + static std::vector cache; + + juce::DynamicObject::Ptr result = new juce::DynamicObject(); + const juce::File file(filePath); + result->setProperty("success", false); + result->setProperty("exists", file.existsAsFile()); + result->setProperty("path", file.getFullPathName()); + result->setProperty("fileName", file.getFileName()); + result->setProperty("extension", file.getFileExtension().toLowerCase()); + + const auto canonicalPath = file.getFullPathName(); + const auto fileSize = file.getSize(); + const auto modificationTimeMs = + file.getLastModificationTime().toMilliseconds(); + juce::String checksum; + { + const juce::ScopedLock lock(cacheLock); + for (const auto& entry : cache) + { + if (entry.path == canonicalPath + && entry.fileSize == fileSize + && entry.modificationTimeMs + == modificationTimeMs) + { + checksum = entry.checksum; + break; + } + } + } + + juce::String error; + if (checksum.isEmpty() + && ! calculateNAMAssetSha256(file, checksum, error)) + { + result->setProperty("error", error); + return juce::var(result.get()); + } + if (checksum.isNotEmpty()) + { + const juce::ScopedLock lock(cacheLock); + auto existing = std::find_if( + cache.begin(), + cache.end(), + [&canonicalPath] (const CachedInspection& entry) + { + return entry.path == canonicalPath; + }); + const CachedInspection newEntry { + canonicalPath, + fileSize, + modificationTimeMs, + checksum + }; + if (existing != cache.end()) + *existing = newEntry; + else + cache.push_back(newEntry); + constexpr size_t maximumCachedAssets = 512; + if (cache.size() > maximumCachedAssets) + cache.erase(cache.begin()); + } + + result->setProperty("success", true); + result->setProperty("checksum", checksum); + result->setProperty("assetId", "sha256:" + checksum); + result->setProperty("fileSizeBytes", static_cast(fileSize)); + return juce::var(result.get()); +} + +bool isAllowedNAMRelinkCandidate(const juce::File& file, const juce::String& slot) +{ + const auto extension = file.getFileExtension().toLowerCase(); + if (slot == "cab") + return extension == ".wav" || extension == ".aif" || extension == ".aiff" + || extension == ".flac" || extension == ".ogg"; + + return extension == ".nam"; +} + +juce::var findNAMAssetInDirectory(const juce::String& directoryPath, + const juce::String& expectedFileName, + const juce::String& expectedChecksum, + juce::int64 expectedSize, + const juce::String& slot) +{ + juce::DynamicObject::Ptr result = new juce::DynamicObject(); + result->setProperty("success", false); + const juce::File directory(directoryPath); + if (! directory.isDirectory()) + { + result->setProperty("error", "The selected search folder is not available."); + return juce::var(result.get()); + } + + const auto checksum = normaliseNAMSha256(expectedChecksum); + const bool checksumSupplied = checksum.isNotEmpty(); + if (checksumSupplied && (checksum.length() != 64 || ! checksum.containsOnly("0123456789abcdef"))) + { + result->setProperty("error", "The project contains an invalid NAM asset checksum."); + return juce::var(result.get()); + } + + constexpr int maxCandidateFiles = 10000; + juce::Array candidates; + bool truncated = false; + for (const auto& entry : juce::RangedDirectoryIterator( + directory, true, "*", juce::File::findFiles)) + { + if (isTone3000TaskCancelled()) + { + result->setProperty("error", "The NAM asset search was canceled."); + result->setProperty("canceled", true); + return juce::var(result.get()); + } + const auto file = entry.getFile(); + if (! isAllowedNAMRelinkCandidate(file, slot)) + continue; + if (slot != "cab" + && file.getSize() + > OpenStudioNAMModelSafety::maximumFileBytes) + { + continue; + } + if (candidates.size() >= maxCandidateFiles) + { + truncated = true; + break; + } + candidates.add(file); + } + + result->setProperty("checkedFiles", candidates.size()); + result->setProperty("truncated", truncated); + + if (checksumSupplied) + { + // Same-sized and same-named files are checked first, but the checksum is + // authoritative and still permits users to rename or move the asset. + for (int pass = 0; pass < 2; ++pass) + { + for (const auto& candidate : candidates) + { + if (isTone3000TaskCancelled()) + { + result->setProperty( + "error", "The NAM asset search was canceled."); + result->setProperty("canceled", true); + return juce::var(result.get()); + } + const bool sameName = candidate.getFileName().equalsIgnoreCase(expectedFileName); + const bool sameSize = expectedSize <= 0 || candidate.getSize() == expectedSize; + if (! sameSize + || (pass == 0 && ! sameName) + || (pass == 1 && sameName)) + { + continue; + } + + juce::String actualChecksum; + juce::String hashError; + if (calculateNAMAssetSha256(candidate, actualChecksum, hashError) + && actualChecksum == checksum) + { + result->setProperty("success", true); + result->setProperty("foundPath", candidate.getFullPathName()); + result->setProperty("matchReason", "checksum"); + return juce::var(result.get()); + } + } + } + + result->setProperty("error", truncated + ? "No checksum match was found before the search limit was reached. Choose a narrower folder." + : "No file with the project asset checksum was found in this folder."); + return juce::var(result.get()); + } + + juce::Array filenameMatches; + for (const auto& candidate : candidates) + { + if (candidate.getFileName().equalsIgnoreCase(expectedFileName) + && (expectedSize <= 0 || candidate.getSize() == expectedSize)) + { + filenameMatches.add(candidate); + } + } + + if (filenameMatches.size() == 1) + { + result->setProperty("success", true); + result->setProperty("foundPath", filenameMatches.getFirst().getFullPathName()); + result->setProperty("matchReason", expectedSize > 0 ? "filename-and-size" : "filename"); + return juce::var(result.get()); + } + + result->setProperty("ambiguous", filenameMatches.size() > 1); + result->setProperty("error", filenameMatches.size() > 1 + ? "More than one unverified filename match was found. Locate the exact file manually." + : "No matching asset filename was found in this folder."); + return juce::var(result.get()); +} + +bool verifyNAMFileSha256(const juce::File& file, + const juce::String& expectedSha256, + juce::String& actualSha256, + juce::String& error) +{ + const auto normalizedExpected = normaliseNAMSha256(expectedSha256); + if (expectedSha256.trim().isNotEmpty() + && (normalizedExpected.length() != 64 + || ! normalizedExpected.containsOnly("0123456789abcdef"))) + { + error = "The NAM catalog supplied an invalid SHA-256 checksum."; + return false; + } + + if (! calculateNAMAssetSha256(file, actualSha256, error)) + return false; + if (normalizedExpected.isEmpty() || actualSha256 == normalizedExpected) + return true; + + error = "The downloaded NAM file failed SHA-256 verification."; + return false; +} + +bool isTrustedTone3000DownloadHost(juce::String domain) +{ + domain = domain.trim().toLowerCase(); + return domain == "tone3000.com" + || domain == "www.tone3000.com" + || domain.endsWith(".tone3000.com"); +} + +bool isSecureNAMDownloadURL(const juce::URL& url) +{ + return url.getScheme().equalsIgnoreCase("https") && url.getDomain().isNotEmpty(); +} + +bool isAllowedExternalBrowserURL(juce::String rawURL) +{ + rawURL = rawURL.trim(); + if (rawURL.isEmpty() + || rawURL.containsAnyOf("\r\n\t") + || (! rawURL.startsWithIgnoreCase("https://") + && ! rawURL.startsWithIgnoreCase("http://"))) + { + return false; + } + + const juce::URL url(rawURL); + const auto scheme = url.getScheme(); + return (scheme.equalsIgnoreCase("https") || scheme.equalsIgnoreCase("http")) + && url.getDomain().isNotEmpty(); +} + +juce::URL resolveNAMDownloadRedirect(const juce::URL& currentURL, juce::String location) +{ + location = location.trim(); + if (location.startsWithIgnoreCase("https://") || location.startsWithIgnoreCase("http://")) + return juce::URL(location); + + if (location.startsWith("//")) + return juce::URL("https:" + location); + + if (location.startsWithChar('/')) + return juce::URL(currentURL.getOrigin() + location); + + return currentURL.getParentURL().getChildURL(location); +} + +struct NAMDownloadStream +{ + std::unique_ptr input; + int statusCode = 0; + juce::String error; +}; + +NAMDownloadStream openAuthenticatedNAMDownload(const juce::String& modelURL, + const juce::String& accessToken) +{ + NAMDownloadStream result; + if (accessToken.containsAnyOf("\r\n")) + { + result.error = "The TONE3000 access token contains invalid header characters"; + return result; + } + + auto currentURL = juce::URL(modelURL); + if (! isSecureNAMDownloadURL(currentURL) + || ! isTrustedTone3000DownloadHost(currentURL.getDomain())) + { + result.error = "TONE3000 model_url must use HTTPS on an official tone3000.com host"; + return result; + } + + constexpr int maxRedirects = 5; + for (int redirectCount = 0; redirectCount <= maxRedirects; ++redirectCount) + { + if (isTone3000TaskCancelled()) + { + result.error = "The TONE3000 model download was canceled"; + return result; + } + const bool trustedDestination = isTrustedTone3000DownloadHost(currentURL.getDomain()); + juce::String headers; + if (trustedDestination && accessToken.isNotEmpty()) + headers << "Authorization: Bearer " << accessToken << "\r\n"; + + juce::StringPairArray responseHeaders; + result.statusCode = 0; + auto input = currentURL.createInputStream( + juce::URL::InputStreamOptions(juce::URL::ParameterHandling::inAddress) + .withExtraHeaders(headers) + .withConnectionTimeoutMs(30000) + .withResponseHeaders(&responseHeaders) + .withNumRedirectsToFollow(0) + .withStatusCode(&result.statusCode)); + + if (result.statusCode < 300 || result.statusCode >= 400) + { + result.input = std::move(input); + return result; + } + + if (redirectCount == maxRedirects) + { + result.error = "TONE3000 model download exceeded the redirect limit"; + return result; + } + + const auto location = responseHeaders.getValue("Location", {}).trim(); + if (location.isEmpty()) + { + result.error = "TONE3000 model download returned a redirect without a Location header"; + return result; + } + + auto redirectURL = resolveNAMDownloadRedirect(currentURL, location); + if (! isSecureNAMDownloadURL(redirectURL)) + { + result.error = "TONE3000 model download refused an insecure redirect"; + return result; + } + + // A CDN redirect is allowed, but this loop creates a fresh request and + // only sends the Bearer token when the destination is still TONE3000. + input.reset(); + currentURL = std::move(redirectURL); + } + + result.error = "TONE3000 model download could not be opened"; + return result; +} + +int getModelObjectInt(juce::DynamicObject* model, const juce::String& primary, const juce::String& fallback) +{ + if (model == nullptr) + return 0; + auto value = model->getProperty(primary); + if (value.isVoid() && fallback.isNotEmpty()) + value = model->getProperty(fallback); + return static_cast(value); +} + +juce::var makeNAMLibraryInfo() +{ + juce::DynamicObject::Ptr root = new juce::DynamicObject(); + const auto namRoot = getOpenStudioNAMRoot(); + root->setProperty("rootPath", namRoot.getFullPathName()); + root->setProperty("libraryPath", namRoot.getChildFile("library").getFullPathName()); + root->setProperty("catalogJsonPath", getOpenStudioNAMCatalogJson().getFullPathName()); + root->setProperty("manifestPath", getOpenStudioNAMManifestJson().getFullPathName()); + return juce::var(root.get()); +} + +bool namLibraryRecordMatches(juce::DynamicObject* record, int modelId, const juce::String& localPath) +{ + if (record == nullptr) + return false; + + if (modelId > 0 && static_cast(record->getProperty("modelId")) == modelId) + return true; + + return localPath.isNotEmpty() && record->getProperty("localPath").toString() == localPath; +} + +juce::String normaliseNAMArchitectureForCompare(juce::String architecture) +{ + architecture = architecture.trim().toLowerCase(); + if (architecture == "a1") + return "1"; + if (architecture == "a2") + return "2"; + if (architecture == "1" || architecture == "2" || architecture == "custom") + return architecture; + return architecture; +} + +bool nonEmptyNAMMetadataChanged(const juce::String& latestValue, const juce::String& currentValue) +{ + return latestValue.trim().isNotEmpty() && latestValue.trim() != currentValue.trim(); +} + +struct NAMCatalogMatch +{ + juce::var model; + juce::var tone; + bool exactModelId = false; +}; + +NAMCatalogMatch findCatalogModelForInstalledNAMRecord(const juce::var& catalog, juce::DynamicObject* record) +{ + NAMCatalogMatch match; + if (record == nullptr) + return match; + + auto* catalogObject = catalog.getDynamicObject(); + if (catalogObject == nullptr) + return match; + + const int installedModelId = static_cast(record->getProperty("modelId")); + const int installedToneId = static_cast(record->getProperty("toneId")); + const auto installedArchitecture = normaliseNAMArchitectureForCompare(record->getProperty("architecture").toString()); + const auto tonesVar = catalogObject->getProperty("tones"); + auto* tones = tonesVar.getArray(); + if (tones == nullptr) + return match; + + for (auto& toneVar : *tones) + { + auto* tone = toneVar.getDynamicObject(); + if (tone == nullptr) + continue; + + const int toneId = getModelObjectInt(tone, "id", "toneId"); + const auto modelsVar = tone->getProperty("models"); + auto* models = modelsVar.getArray(); + if (models == nullptr) + continue; + + for (auto& modelVar : *models) + { + auto* model = modelVar.getDynamicObject(); + if (model == nullptr) + continue; + + const int modelId = getModelObjectInt(model, "id", "model_id"); + if (installedModelId > 0 && modelId == installedModelId) + { + match.model = modelVar; + match.tone = toneVar; + match.exactModelId = true; + return match; + } + + if (match.model.isVoid() + && installedToneId > 0 + && toneId == installedToneId) + { + const auto modelArchitecture = normaliseNAMArchitectureForCompare(getModelObjectString(model, "architecture_version", "architecture")); + if (installedArchitecture.isEmpty() || modelArchitecture.isEmpty() || installedArchitecture == modelArchitecture) + { + match.model = modelVar; + match.tone = toneVar; + match.exactModelId = false; + } + } + } + } + + return match; +} + +juce::String getNAMCatalogUpdateReason(juce::DynamicObject* record, juce::DynamicObject* latestModel, bool exactModelId) +{ + if (record == nullptr || latestModel == nullptr) + return {}; + + if (! exactModelId) + { + const int latestModelId = getModelObjectInt(latestModel, "id", "model_id"); + const int currentModelId = static_cast(record->getProperty("modelId")); + if (latestModelId > 0 && latestModelId != currentModelId) + return "New catalog model for this tone"; + } + + const auto latestModelUrl = getModelObjectString(latestModel, "model_url", "modelUrl"); + const auto currentModelUrl = record->getProperty("modelUrl").toString(); + if (nonEmptyNAMMetadataChanged(latestModelUrl, currentModelUrl)) + return "Download URL changed"; + + const auto latestChecksum = normaliseNAMSha256(getModelObjectString(latestModel, "sha256", "checksum")); + const auto currentChecksum = normaliseNAMSha256(record->getProperty("checksum").toString()); + if (nonEmptyNAMMetadataChanged(latestChecksum, currentChecksum)) + return "Checksum changed"; + + const auto latestName = getModelObjectString(latestModel, "name", "title"); + const auto currentName = record->getProperty("name").toString(); + if (nonEmptyNAMMetadataChanged(latestName, currentName)) + return "Name changed"; + + const auto latestArchitecture = normaliseNAMArchitectureForCompare(getModelObjectString(latestModel, "architecture_version", "architecture")); + const auto currentArchitecture = normaliseNAMArchitectureForCompare(record->getProperty("architecture").toString()); + if (latestArchitecture.isNotEmpty() && latestArchitecture != currentArchitecture) + return "Architecture changed"; + + return {}; +} + +bool setNAMRecordPropertyIfChanged(juce::DynamicObject& object, const juce::Identifier& property, const juce::var& value) +{ + if (object.getProperty(property) == value) + return false; + + object.setProperty(property, value); + return true; +} + +bool setNAMRecordObjectPropertyIfChanged(juce::DynamicObject& object, const juce::Identifier& property, const juce::var& value) +{ + if (juce::JSON::toString(object.getProperty(property), false) == juce::JSON::toString(value, false)) + return false; + + object.setProperty(property, value); + return true; +} + +bool isFileInsideNAMPreviews(const juce::File& file) +{ + auto previewPath = getOpenStudioNAMRoot().getChildFile("previews").getFullPathName(); + if (!previewPath.endsWithChar(juce::File::getSeparatorChar())) + previewPath << juce::File::getSeparatorString(); + + return file.getFullPathName().startsWithIgnoreCase(previewPath); +} + +bool areNAMPathsEquivalent(const juce::String& leftPath, const juce::String& rightPath) +{ + if (leftPath.isEmpty() || rightPath.isEmpty()) + return false; + + auto normalise = [] (const juce::String& path) + { + auto normalised = juce::File(path).getFullPathName().replaceCharacter('\\', '/'); + while (normalised.length() > 1 && normalised.endsWithChar('/')) + normalised = normalised.dropLastCharacters(1); +#if JUCE_WINDOWS + return normalised.toLowerCase(); +#else + return normalised; +#endif + }; + + return normalise(leftPath) == normalise(rightPath); +} + +struct NAMLibraryManifestReadResult +{ + bool success = false; + juce::var manifest; + juce::String error; +}; + +juce::var makeEmptyNAMLibraryManifest() +{ + juce::DynamicObject::Ptr object = new juce::DynamicObject(); + object->setProperty("schemaVersion", 1); + object->setProperty("installed", juce::Array()); + return juce::var(object.get()); +} + +NAMLibraryManifestReadResult readNAMLibraryManifestStrictLocked( + const juce::File& manifestFile) +{ + NAMLibraryManifestReadResult result; + if (! manifestFile.existsAsFile()) + { + result.success = true; + result.manifest = makeEmptyNAMLibraryManifest(); + return result; + } + + result.manifest = juce::JSON::parse(manifestFile); + auto* object = result.manifest.getDynamicObject(); + if (object == nullptr + || object->getProperty("installed").getArray() == nullptr) + { + result.error = + "The existing NAM library manifest is invalid. OpenStudio left it unchanged instead of replacing installed-model records."; + return result; + } + + result.success = true; + return result; +} + +constexpr const char* kNAMLibraryTransactionMarkerName = + ".library_asset_transaction.json"; +constexpr const char* kNAMLibraryRollbackTag = + ".openstudio-nam-rollback-"; + +struct NAMLibraryTransactionRecoveryResult +{ + bool success = true; + bool markerFound = false; + bool committed = false; + bool rolledBack = false; + juce::String error; +}; + +enum class NAMLibraryPublicationFailurePoint +{ + none, + manifestPublish, + afterAssetPublish, + afterManifestPublish +}; + +struct NAMLibraryPublicationTestHooks +{ + NAMLibraryPublicationFailurePoint failurePoint = + NAMLibraryPublicationFailurePoint::none; +}; + +struct NAMLibraryPublicationResult +{ + bool success = false; + bool recoveryAttempted = false; + bool recoverySucceeded = false; + bool recoveryPending = false; + bool committedDuringRecovery = false; + juce::String error; +}; + +bool calculateUncancelledFileSha256(const juce::File& file, + juce::String& sha256) +{ + sha256.clear(); + juce::FileInputStream input(file); + if (! input.openedOk()) + return false; + sha256 = juce::SHA256(input).toHexString().toLowerCase(); + return sha256.length() == 64; +} + +bool removeFileAndVerify(const juce::File& file) +{ + return ! file.existsAsFile() + || (file.deleteFile() && ! file.existsAsFile()); +} + +bool NAMFileMatchesSnapshot(const juce::File& file, + juce::int64 expectedSize, + juce::int64 expectedModificationTimeMs, + bool requireModificationTime) +{ + if (! file.existsAsFile() || file.getSize() != expectedSize) + return false; + return ! requireModificationTime + || file.getLastModificationTime().toMilliseconds() + == expectedModificationTimeMs; +} + +bool isSafeNAMTransactionRelativePath(const juce::String& path) +{ + const auto portable = path.trim().replaceCharacter('\\', '/'); + return portable.isNotEmpty() + && ! juce::File::isAbsolutePath(portable) + && portable != ".." + && ! portable.startsWith("../") + && ! portable.contains("/../") + && ! portable.endsWith("/.."); +} + +NAMLibraryTransactionRecoveryResult +recoverPendingNAMLibraryTransactionLocked( + const juce::File& namRoot, + const juce::File& manifestFile) +{ + NAMLibraryTransactionRecoveryResult result; + const auto markerFile = namRoot.getChildFile( + kNAMLibraryTransactionMarkerName); + if (! markerFile.existsAsFile()) + return result; + + result.markerFound = true; + const auto markerValue = juce::JSON::parse(markerFile); + auto* marker = markerValue.getDynamicObject(); + if (marker == nullptr + || static_cast(marker->getProperty("schemaVersion")) != 1) + { + result.success = false; + result.error = + "The pending NAM library transaction marker is invalid; it was retained for manual recovery."; + return result; + } + + const auto transactionId = + marker->getProperty("transactionId").toString().trim(); + const auto targetRelativePath = + marker->getProperty("targetRelativePath").toString(); + const auto rollbackRelativePath = + marker->getProperty("rollbackRelativePath").toString(); + const auto expectedManifestSha256 = normaliseNAMSha256( + marker->getProperty("expectedManifestSha256").toString()); + const bool hadOriginal = + static_cast(marker->getProperty("hadOriginal")); + const auto oldSize = static_cast( + static_cast(marker->getProperty("oldSizeBytes"))); + const auto oldModificationTimeMs = static_cast( + static_cast(marker->getProperty( + "oldModificationTimeMs"))); + const auto newSize = static_cast( + static_cast(marker->getProperty("newSizeBytes"))); + const auto newModificationTimeMs = static_cast( + static_cast(marker->getProperty( + "newModificationTimeMs"))); + const auto expectedAssetSha256 = normaliseNAMSha256( + marker->getProperty("expectedAssetSha256").toString()); + const auto libraryRoot = namRoot.getChildFile("library"); + const auto targetFile = libraryRoot.getChildFile(targetRelativePath); + const auto rollbackFile = libraryRoot.getChildFile( + rollbackRelativePath); + const auto expectedRollbackName = "." + targetFile.getFileName() + + kNAMLibraryRollbackTag + transactionId; + const bool safeMarker = markerFile.getParentDirectory() == namRoot + && markerFile.getFileName() + == kNAMLibraryTransactionMarkerName + && transactionId.isNotEmpty() + && transactionId.length() <= 64 + && transactionId.containsOnly( + "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-") + && isSafeNAMTransactionRelativePath(targetRelativePath) + && isSafeNAMTransactionRelativePath(rollbackRelativePath) + && targetFile.isAChildOf(libraryRoot) + && rollbackFile.isAChildOf(libraryRoot) + && rollbackFile.getParentDirectory() + == targetFile.getParentDirectory() + && rollbackFile.getFileName() == expectedRollbackName + && expectedManifestSha256.length() == 64 + && expectedManifestSha256.containsOnly( + "0123456789abcdef") + && expectedAssetSha256.length() == 64 + && expectedAssetSha256.containsOnly( + "0123456789abcdef") + && newSize > 0 + && (! hadOriginal || oldSize >= 0); + if (! safeMarker) + { + result.success = false; + result.error = + "The pending NAM library transaction marker contains unsafe paths or invalid metadata; it was retained without touching any asset."; + return result; + } + + juce::String currentManifestSha256; + const bool manifestDigestAvailable = + manifestFile.existsAsFile() + && calculateUncancelledFileSha256( + manifestFile, currentManifestSha256); + result.committed = manifestDigestAvailable + && currentManifestSha256 == expectedManifestSha256; + + if (result.committed) + { + if (! NAMFileMatchesSnapshot( + targetFile, newSize, newModificationTimeMs, false)) + { + result.success = false; + result.error = + "The NAM manifest was committed, but the published asset no longer matches the transaction marker. The rollback and marker were retained."; + return result; + } + if (! removeFileAndVerify(rollbackFile) + || ! removeFileAndVerify(markerFile)) + { + result.success = false; + result.error = + "The NAM asset and manifest were committed, but transaction cleanup is still pending."; + return result; + } + return result; + } + + if (hadOriginal) + { + if (rollbackFile.existsAsFile()) + { + if (rollbackFile.getSize() != oldSize) + { + result.success = false; + result.error = + "The NAM rollback file does not match the original asset size; recovery stopped without deleting it."; + return result; + } + + juce::TemporaryFile restoredTarget( + targetFile, juce::TemporaryFile::useHiddenFile); + if (! rollbackFile.copyFileTo(restoredTarget.getFile()) + || restoredTarget.getFile().getSize() != oldSize + || ! restoredTarget.overwriteTargetFileWithTemporary() + || ! NAMFileMatchesSnapshot( + targetFile, oldSize, oldModificationTimeMs, false)) + { + result.success = false; + result.error = + "OpenStudio could not restore the prior NAM asset. The rollback file and transaction marker were retained."; + return result; + } + } + else if (! NAMFileMatchesSnapshot( + targetFile, + oldSize, + oldModificationTimeMs, + true)) + { + result.success = false; + result.error = + "The prior NAM asset and its rollback file are both unavailable. The transaction marker was retained."; + return result; + } + + result.rolledBack = true; + } + else + { + if (targetFile.existsAsFile() + && ! NAMFileMatchesSnapshot( + targetFile, + newSize, + newModificationTimeMs, + true)) + { + result.success = false; + result.error = + "The uncommitted NAM target has changed since publication. It was retained with the transaction marker instead of being deleted."; + return result; + } + if (! removeFileAndVerify(targetFile)) + { + result.success = false; + result.error = + "OpenStudio could not remove the uncommitted NAM asset. The transaction marker was retained."; + return result; + } + result.rolledBack = true; + } + + if (! removeFileAndVerify(rollbackFile) + || ! removeFileAndVerify(markerFile)) + { + result.success = false; + result.error = + "The NAM file state was recovered, but transaction cleanup is still pending."; + } + return result; +} + +NAMLibraryPublicationResult publishNAMLibraryAssetAndManifestLocked( + const juce::File& stagedAsset, + const juce::File& targetFile, + const juce::File& namRoot, + const juce::File& manifestFile, + const juce::var& manifest, + const juce::String& expectedAssetSha256, + const NAMLibraryPublicationTestHooks* testHooks = nullptr) +{ + NAMLibraryPublicationResult result; + const auto libraryRoot = namRoot.getChildFile("library"); + const auto markerFile = namRoot.getChildFile( + kNAMLibraryTransactionMarkerName); + if (! stagedAsset.existsAsFile() + || stagedAsset.getSize() <= 0 + || ! targetFile.isAChildOf(libraryRoot) + || targetFile.getParentDirectory() + != stagedAsset.getParentDirectory()) + { + result.error = + "The prepared NAM publication paths are invalid."; + return result; + } + + const auto priorRecovery = + recoverPendingNAMLibraryTransactionLocked( + namRoot, manifestFile); + if (! priorRecovery.success) + { + result.recoveryAttempted = priorRecovery.markerFound; + result.recoveryPending = priorRecovery.markerFound; + result.error = priorRecovery.error; + return result; + } + + juce::TemporaryFile stagedManifest( + manifestFile, juce::TemporaryFile::useHiddenFile); + if (! stagedManifest.getFile().replaceWithText( + juce::JSON::toString(manifest, true))) + { + result.error = + "Could not prepare the updated NAM library manifest."; + return result; + } + juce::String expectedManifestSha256; + if (! calculateUncancelledFileSha256( + stagedManifest.getFile(), expectedManifestSha256)) + { + result.error = + "Could not verify the prepared NAM library manifest."; + return result; + } + + const auto transactionId = juce::Uuid().toString(); + const auto rollbackFile = targetFile.getSiblingFile( + "." + targetFile.getFileName() + kNAMLibraryRollbackTag + + transactionId); + const bool hadOriginal = targetFile.existsAsFile(); + const auto oldSize = hadOriginal ? targetFile.getSize() : 0; + const auto oldModificationTimeMs = hadOriginal + ? targetFile.getLastModificationTime().toMilliseconds() + : 0; + const auto newSize = stagedAsset.getSize(); + const auto newModificationTimeMs = + stagedAsset.getLastModificationTime().toMilliseconds(); + + juce::DynamicObject::Ptr marker = new juce::DynamicObject(); + marker->setProperty("schemaVersion", 1); + marker->setProperty("transactionId", transactionId); + marker->setProperty( + "targetRelativePath", + targetFile.getRelativePathFrom(libraryRoot)); + marker->setProperty( + "rollbackRelativePath", + rollbackFile.getRelativePathFrom(libraryRoot)); + marker->setProperty("hadOriginal", hadOriginal); + marker->setProperty("oldSizeBytes", static_cast(oldSize)); + marker->setProperty( + "oldModificationTimeMs", + static_cast(oldModificationTimeMs)); + marker->setProperty("newSizeBytes", static_cast(newSize)); + marker->setProperty( + "newModificationTimeMs", + static_cast(newModificationTimeMs)); + marker->setProperty( + "expectedAssetSha256", + normaliseNAMSha256(expectedAssetSha256)); + marker->setProperty( + "expectedManifestSha256", expectedManifestSha256); + marker->setProperty( + "createdAt", juce::Time::getCurrentTime().toISO8601(true)); + if (! persistJsonFileAtomically( + markerFile, juce::var(marker.get()))) + { + result.error = + "Could not persist the NAM library transaction marker."; + return result; + } + + const auto recoverAfterFailure = [&] + (const juce::String& failureMessage) + { + result.recoveryAttempted = true; + const auto recovery = + recoverPendingNAMLibraryTransactionLocked( + namRoot, manifestFile); + result.recoverySucceeded = recovery.success; + result.recoveryPending = ! recovery.success; + result.committedDuringRecovery = recovery.committed; + if (recovery.committed && recovery.success) + { + result.success = true; + return; + } + result.error = failureMessage; + if (recovery.success && recovery.rolledBack) + result.error += " The previous NAM file state was restored."; + else if (! recovery.error.isEmpty()) + result.error += " " + recovery.error; + }; + + if (hadOriginal + && (! targetFile.moveFileTo(rollbackFile) + || targetFile.existsAsFile() + || ! rollbackFile.existsAsFile() + || rollbackFile.getSize() != oldSize)) + { + recoverAfterFailure( + "Could not create a verified rollback copy of the existing NAM asset."); + return result; + } + + if (! stagedAsset.moveFileTo(targetFile) + || ! NAMFileMatchesSnapshot( + targetFile, newSize, newModificationTimeMs, false)) + { + recoverAfterFailure( + "Could not publish the verified NAM asset into the library."); + return result; + } + + if (testHooks != nullptr + && testHooks->failurePoint + == NAMLibraryPublicationFailurePoint::afterAssetPublish) + { + result.recoveryPending = true; + result.error = + "Injected interruption after NAM asset publication."; + return result; + } + + const bool injectManifestFailure = testHooks != nullptr + && testHooks->failurePoint + == NAMLibraryPublicationFailurePoint::manifestPublish; + if (injectManifestFailure + || ! stagedManifest.overwriteTargetFileWithTemporary()) + { + recoverAfterFailure( + "Could not persist the NAM library manifest after publishing the asset."); + return result; + } + + if (testHooks != nullptr + && testHooks->failurePoint + == NAMLibraryPublicationFailurePoint::afterManifestPublish) + { + result.recoveryPending = true; + result.error = + "Injected interruption after NAM manifest publication."; + return result; + } + + const auto cleanup = recoverPendingNAMLibraryTransactionLocked( + namRoot, manifestFile); + result.success = cleanup.committed; + result.recoveryAttempted = true; + result.recoverySucceeded = cleanup.success; + result.recoveryPending = ! cleanup.success; + result.committedDuringRecovery = cleanup.committed; + if (! result.success) + result.error = cleanup.error.isNotEmpty() + ? cleanup.error + : juce::String( + "The NAM asset publication could not be verified."); + else if (! cleanup.success) + result.error = cleanup.error; + return result; +} + +void applyNAMLibraryRecoveryStatus( + juce::DynamicObject& object, + const NAMLibraryTransactionRecoveryResult& recovery) +{ + if (! recovery.markerFound) + return; + object.setProperty( + "transactionRecoveryStatus", + recovery.success + ? (recovery.committed ? "finalized" : "rolledBack") + : "pending"); + object.setProperty("transactionRecoveryPending", ! recovery.success); + if (! recovery.error.isEmpty()) + object.setProperty("transactionRecoveryError", recovery.error); +} + +void applyNAMLibraryPublicationStatus( + juce::DynamicObject& object, + const NAMLibraryPublicationResult& publication) +{ + object.setProperty( + "transactionRecoveryAttempted", + publication.recoveryAttempted); + object.setProperty( + "transactionRecoverySucceeded", + publication.recoverySucceeded); + object.setProperty( + "transactionRecoveryPending", + publication.recoveryPending); + object.setProperty( + "transactionCommittedDuringRecovery", + publication.committedDuringRecovery); + if (! publication.error.isEmpty()) + object.setProperty("transactionRecoveryDetail", publication.error); +} + +juce::var makeNAMPreviewRetentionResult(const juce::String& warning, + const juce::String& loadedSlot = {}) +{ + juce::DynamicObject::Ptr result = new juce::DynamicObject(); + result->setProperty("success", true); + result->setProperty("deleteSkipped", true); + result->setProperty("retained", true); + result->setProperty("recoverable", true); + result->setProperty("warning", warning); + if (loadedSlot.isNotEmpty()) + { + result->setProperty("inUse", true); + result->setProperty("loadedSlot", loadedSlot); + } + return juce::var(result.get()); +} + +struct NAMLibraryHashCandidate +{ + juce::String localPath; + juce::int64 fileSize = 0; + juce::int64 modificationTimeMs = 0; +}; + +struct NAMLibraryHashObservation : NAMLibraryHashCandidate +{ + bool success = false; + juce::String sha256; +}; + +using NAMLibraryHashFunction = std::function; + +juce::var makeNAMLibraryManifestFailure(const juce::String& error) +{ + auto manifest = makeEmptyNAMLibraryManifest(); + if (auto* object = manifest.getDynamicObject()) + { + object->setProperty("success", false); + object->setProperty("error", error); + } + return manifest; +} + +std::vector +collectNAMLibraryHashCandidates(const juce::var& manifest) +{ + std::vector candidates; + auto* object = manifest.getDynamicObject(); + auto* installed = object != nullptr + ? object->getProperty("installed").getArray() + : nullptr; + if (installed == nullptr) + return candidates; + + for (const auto& recordValue : *installed) + { + auto* record = recordValue.getDynamicObject(); + if (record == nullptr) + continue; + const auto existingSha256 = normaliseNAMSha256( + record->getProperty("fileSha256").toString()); + if (existingSha256.length() == 64 + && existingSha256.containsOnly("0123456789abcdef")) + { + continue; + } + + const auto path = record->getProperty("localPath").toString(); + const juce::File file(path); + if (path.isEmpty() || ! file.existsAsFile()) + continue; + const NAMLibraryHashCandidate candidate { + file.getFullPathName(), + file.getSize(), + file.getLastModificationTime().toMilliseconds() + }; + const auto duplicate = std::find_if( + candidates.begin(), candidates.end(), + [&candidate] (const NAMLibraryHashCandidate& existing) + { + return areNAMPathsEquivalent( + existing.localPath, candidate.localPath) + && existing.fileSize == candidate.fileSize + && existing.modificationTimeMs + == candidate.modificationTimeMs; + }); + if (duplicate == candidates.end()) + candidates.push_back(candidate); + } + return candidates; +} + +juce::var refreshNAMLibraryManifestLockedAtPaths( + const juce::File& namRoot, + const juce::File& manifestFile, + const juce::File& catalogFile, + bool persistIfChanged, + const std::vector& hashObservations, + NAMLibraryTransactionRecoveryResult* recoveryOutput = nullptr) +{ + const auto recovery = recoverPendingNAMLibraryTransactionLocked( + namRoot, manifestFile); + if (recoveryOutput != nullptr) + *recoveryOutput = recovery; + if (! recovery.success) + return makeNAMLibraryManifestFailure(recovery.error); + + const auto readResult = readNAMLibraryManifestStrictLocked( + manifestFile); + if (! readResult.success) + return makeNAMLibraryManifestFailure(readResult.error); + + auto manifest = readResult.manifest; + auto* manifestObject = manifest.getDynamicObject(); + if (manifestObject == nullptr) + return manifest; + + const auto nowIso = juce::Time::getCurrentTime().toISO8601(true); + const auto catalog = parseJsonFileOrDefault(catalogFile, "tones"); + const auto catalogGeneratedAt = catalog.getDynamicObject() != nullptr + ? catalog.getDynamicObject()->getProperty("generatedAt").toString() + : juce::String(); + bool changed = false; + const auto installedVar = manifestObject->getProperty("installed"); + if (auto* installed = installedVar.getArray()) + { + for (auto& recordVar : *installed) + { + if (auto* record = recordVar.getDynamicObject()) + { + bool recordChanged = false; + const auto localPath = record->getProperty("localPath").toString(); + const juce::File localFile(localPath); + const bool missing = localPath.isEmpty() || !localFile.existsAsFile(); + recordChanged = setNAMRecordPropertyIfChanged(*record, "missing", missing) || recordChanged; + recordChanged = setNAMRecordPropertyIfChanged(*record, "fileSizeBytes", missing ? juce::var() : juce::var(static_cast(localFile.getSize()))) || recordChanged; + recordChanged = setNAMRecordPropertyIfChanged(*record, "missingSince", missing + ? (record->getProperty("missingSince").toString().isNotEmpty() ? record->getProperty("missingSince") : juce::var(nowIso)) + : juce::var()) || recordChanged; + + auto fileSha256 = normaliseNAMSha256(record->getProperty("fileSha256").toString()); + const bool validFileSha256 = fileSha256.length() == 64 + && fileSha256.containsOnly("0123456789abcdef"); + if (! missing && ! validFileSha256) + { + const auto currentSize = localFile.getSize(); + const auto currentModificationTimeMs = + localFile.getLastModificationTime().toMilliseconds(); + const auto observation = std::find_if( + hashObservations.begin(), + hashObservations.end(), + [&] (const NAMLibraryHashObservation& candidate) + { + return candidate.success + && areNAMPathsEquivalent( + candidate.localPath, localPath) + && candidate.fileSize == currentSize + && candidate.modificationTimeMs + == currentModificationTimeMs; + }); + if (observation != hashObservations.end()) + { + fileSha256 = observation->sha256; + recordChanged = setNAMRecordPropertyIfChanged( + *record, + "fileSha256", + fileSha256) || recordChanged; + } + } + + juce::String assetId; + if (fileSha256.length() == 64 && fileSha256.containsOnly("0123456789abcdef")) + { + assetId = "sha256:" + fileSha256; + } + else + { + const int modelId = static_cast(record->getProperty("modelId")); + if (modelId > 0) + { + auto provider = record->getProperty("sourceProvider").toString().trim().toLowerCase(); + if (provider.isEmpty()) + provider = "tone3000"; + assetId = provider + ":model:" + juce::String(modelId); + } + } + recordChanged = setNAMRecordPropertyIfChanged(*record, "assetId", assetId) || recordChanged; + + if (!record->hasProperty("favorite")) + { + record->setProperty("favorite", false); + recordChanged = true; + } + + if (!record->hasProperty("sourceProvider")) + { + record->setProperty("sourceProvider", record->getProperty("source").toString().isNotEmpty() + ? record->getProperty("source") + : juce::var("tone3000")); + recordChanged = true; + } + + const auto catalogMatch = findCatalogModelForInstalledNAMRecord(catalog, record); + auto* latestModel = catalogMatch.model.getDynamicObject(); + auto* latestTone = catalogMatch.tone.getDynamicObject(); + const auto updateReason = getNAMCatalogUpdateReason(record, latestModel, catalogMatch.exactModelId); + const bool updateAvailable = updateReason.isNotEmpty(); + recordChanged = setNAMRecordPropertyIfChanged(*record, "updateAvailable", updateAvailable) || recordChanged; + recordChanged = setNAMRecordPropertyIfChanged(*record, "updateReason", updateReason) || recordChanged; + recordChanged = setNAMRecordPropertyIfChanged(*record, "catalogSeenAt", catalogGeneratedAt) || recordChanged; + + if (latestModel != nullptr) + { + const int latestModelId = getModelObjectInt(latestModel, "id", "model_id"); + const int latestToneId = latestTone != nullptr ? getModelObjectInt(latestTone, "id", "toneId") : static_cast(record->getProperty("toneId")); + const auto latestModelUrl = getModelObjectString(latestModel, "model_url", "modelUrl"); + recordChanged = setNAMRecordPropertyIfChanged(*record, "latestModelId", latestModelId) || recordChanged; + recordChanged = setNAMRecordPropertyIfChanged(*record, "latestToneId", latestToneId) || recordChanged; + recordChanged = setNAMRecordPropertyIfChanged(*record, "latestModelUrl", latestModelUrl) || recordChanged; + recordChanged = setNAMRecordObjectPropertyIfChanged(*record, "latestMetadata", catalogMatch.model) || recordChanged; + recordChanged = setNAMRecordPropertyIfChanged(*record, "latestMatchExact", catalogMatch.exactModelId) || recordChanged; + recordChanged = setNAMRecordPropertyIfChanged(*record, "lastSeenAt", catalogGeneratedAt.isNotEmpty() ? juce::var(catalogGeneratedAt) : juce::var(nowIso)) || recordChanged; + } + else + { + recordChanged = setNAMRecordPropertyIfChanged(*record, "latestModelId", 0) || recordChanged; + recordChanged = setNAMRecordPropertyIfChanged(*record, "latestToneId", 0) || recordChanged; + recordChanged = setNAMRecordPropertyIfChanged(*record, "latestModelUrl", juce::var()) || recordChanged; + recordChanged = setNAMRecordObjectPropertyIfChanged(*record, "latestMetadata", juce::var()) || recordChanged; + recordChanged = setNAMRecordPropertyIfChanged(*record, "latestMatchExact", false) || recordChanged; + } + + if (recordChanged) + record->setProperty("manifestUpdatedAt", nowIso); + + changed = recordChanged || changed; + } + } + } + + if (changed && persistIfChanged + && ! persistNAMLibraryManifestLocked(manifestFile, manifest)) + { + juce::Logger::writeToLog( + "NAM library: could not atomically persist the refreshed manifest"); + manifestObject->setProperty("success", false); + manifestObject->setProperty( + "error", + "Could not persist the refreshed NAM library manifest."); + } + + return manifest; +} + +juce::var refreshNAMLibraryManifestLocked(bool persistIfChanged) +{ + static const std::vector noHashes; + return refreshNAMLibraryManifestLockedAtPaths( + getOpenStudioNAMRoot(), + getOpenStudioNAMManifestJson(), + getOpenStudioNAMCatalogJson(), + persistIfChanged, + noHashes); +} + +juce::var refreshNAMLibraryManifestAtPaths( + const juce::File& namRoot, + const juce::File& manifestFile, + const juce::File& catalogFile, + bool persistIfChanged, + const NAMLibraryHashFunction& hashFunction) +{ + std::vector candidates; + NAMLibraryTransactionRecoveryResult initialRecovery; + { + const ScopedNAMLibraryMutationLock manifestLock; + if (! manifestLock.locked()) + return makeNAMLibraryLockFailure(manifestFile); + + initialRecovery = recoverPendingNAMLibraryTransactionLocked( + namRoot, manifestFile); + if (! initialRecovery.success) + return makeNAMLibraryManifestFailure( + initialRecovery.error); + const auto readResult = readNAMLibraryManifestStrictLocked( + manifestFile); + if (! readResult.success) + return makeNAMLibraryManifestFailure(readResult.error); + candidates = collectNAMLibraryHashCandidates( + readResult.manifest); + } + + std::vector observations; + observations.reserve(candidates.size()); + for (const auto& candidate : candidates) + { + if (isTone3000TaskCancelled()) + return makeNAMLibraryManifestFailure( + "The NAM library refresh was canceled while checking installed assets."); + NAMLibraryHashObservation observation; + observation.localPath = candidate.localPath; + observation.fileSize = candidate.fileSize; + observation.modificationTimeMs = + candidate.modificationTimeMs; + juce::String error; + observation.success = hashFunction( + juce::File(candidate.localPath), + observation.sha256, + error); + observation.sha256 = normaliseNAMSha256( + observation.sha256); + observation.success = observation.success + && observation.sha256.length() == 64 + && observation.sha256.containsOnly( + "0123456789abcdef"); + observations.push_back(observation); + } + + const ScopedNAMLibraryMutationLock manifestLock; + if (! manifestLock.locked()) + return makeNAMLibraryLockFailure(manifestFile); + NAMLibraryTransactionRecoveryResult finalRecovery; + auto manifest = refreshNAMLibraryManifestLockedAtPaths( + namRoot, + manifestFile, + catalogFile, + persistIfChanged, + observations, + &finalRecovery); + if (auto* object = manifest.getDynamicObject()) + { + applyNAMLibraryRecoveryStatus( + *object, + finalRecovery.markerFound + ? finalRecovery + : initialRecovery); + } + return manifest; +} + +juce::var refreshNAMLibraryManifest(bool persistIfChanged) +{ + return refreshNAMLibraryManifestAtPaths( + getOpenStudioNAMRoot(), + getOpenStudioNAMManifestJson(), + getOpenStudioNAMCatalogJson(), + persistIfChanged, + [] (const juce::File& file, + juce::String& sha256, + juce::String& error) + { + return calculateNAMAssetSha256(file, sha256, error); + }); +} + +juce::var setNAMLibraryFavorite(int modelId, const juce::String& localPath, bool favorite) +{ + const ScopedNAMLibraryMutationLock manifestLock; + if (! manifestLock.locked()) + return makeNAMLibraryLockFailure(getOpenStudioNAMManifestJson()); + juce::DynamicObject::Ptr result = new juce::DynamicObject(); + result->setProperty("success", false); + + auto manifest = refreshNAMLibraryManifestLocked(false); + const auto manifestError = manifest.getProperty( + "error", {}).toString(); + if (manifestError.isNotEmpty()) + { + result->setProperty("error", manifestError); + return juce::var(result.get()); + } + auto* manifestObject = manifest.getDynamicObject(); + const auto installedVar = manifestObject != nullptr ? manifestObject->getProperty("installed") : juce::var(); + auto* installed = installedVar.getArray(); + if (installed == nullptr) + { + result->setProperty("error", "NAM library manifest is invalid"); + return juce::var(result.get()); + } + + for (auto& recordVar : *installed) + { + if (auto* record = recordVar.getDynamicObject()) + { + if (namLibraryRecordMatches(record, modelId, localPath)) + { + const auto nowIso = juce::Time::getCurrentTime().toISO8601(true); + record->setProperty("favorite", favorite); + record->setProperty("updatedAt", nowIso); + record->setProperty("manifestUpdatedAt", nowIso); + if (! persistNAMLibraryManifestLocked( + getOpenStudioNAMManifestJson(), manifest)) + { + result->setProperty("error", "Could not persist the NAM library manifest"); + return juce::var(result.get()); + } + result->setProperty("success", true); + result->setProperty("record", recordVar); + return juce::var(result.get()); + } + } + } + + result->setProperty("error", "NAM model is not installed"); + return juce::var(result.get()); +} + +juce::var removeNAMModelFromLibrary(int modelId, const juce::String& localPath, bool deleteLocalFile) +{ + // Use the same ordering as preview discard: rack state first, then library. + // Physical deletion remains disabled until the engine can prove that no rack, + // preset, or project references the path. + const juce::ScopedLock stateLock(namModelMutationStateLock); + const ScopedNAMLibraryMutationLock manifestLock; + if (! manifestLock.locked()) + return makeNAMLibraryLockFailure(getOpenStudioNAMManifestJson()); + juce::DynamicObject::Ptr result = new juce::DynamicObject(); + result->setProperty("success", false); + + auto manifest = refreshNAMLibraryManifestLocked(false); + const auto manifestError = manifest.getProperty( + "error", {}).toString(); + if (manifestError.isNotEmpty()) + { + result->setProperty("error", manifestError); + return juce::var(result.get()); + } + auto* manifestObject = manifest.getDynamicObject(); + const auto installedVar = manifestObject != nullptr ? manifestObject->getProperty("installed") : juce::var(); + auto* installedArray = installedVar.getArray(); + if (installedArray == nullptr) + { + result->setProperty("error", "NAM library manifest is invalid"); + return juce::var(result.get()); + } + + juce::Array kept; + int removed = 0; + const bool deletedFile = false; + bool deleteSkipped = false; + const bool deleteFailed = false; + + for (const auto& recordVar : *installedArray) + { + auto* record = recordVar.getDynamicObject(); + if (!namLibraryRecordMatches(record, modelId, localPath)) + { + kept.add(recordVar); + continue; + } + + ++removed; + if (deleteLocalFile && record != nullptr) + { + const auto path = record->getProperty("localPath").toString(); + const juce::File file(path); + // Removing the manifest entry is safe, but physical deletion is not: + // another rack, preset, or project may still reference this path. + if (file.existsAsFile()) + deleteSkipped = true; + } + } + + if (removed <= 0) + { + result->setProperty("error", "NAM model is not installed"); + return juce::var(result.get()); + } + + manifestObject->setProperty("installed", kept); + if (! persistNAMLibraryManifestLocked( + getOpenStudioNAMManifestJson(), manifest)) + { + result->setProperty("error", "Could not persist the NAM library manifest"); + return juce::var(result.get()); + } + result->setProperty("success", true); + result->setProperty("removed", removed); + result->setProperty("deletedFile", deletedFile); + result->setProperty("deleteSkipped", deleteSkipped); + result->setProperty("deleteFailed", deleteFailed); + if (deleteSkipped) + { + result->setProperty("retained", true); + result->setProperty("recoverable", true); + result->setProperty("warning", + "The NAM file was retained because host-wide rack references cannot yet be proven clear"); + } + return juce::var(result.get()); +} + +juce::var installNAMModelFromMetadata(juce::var modelPayload, bool previewMode = false) +{ + if (modelPayload.isString()) + modelPayload = juce::JSON::parse(modelPayload.toString()); + + auto* model = modelPayload.getDynamicObject(); + juce::DynamicObject::Ptr result = new juce::DynamicObject(); + result->setProperty("success", false); + if (model == nullptr) + { + result->setProperty("error", "Invalid NAM model metadata"); + return juce::var(result.get()); + } + + const auto modelUrl = getModelObjectString(model, "model_url", "modelUrl"); + if (modelUrl.isEmpty()) + { + result->setProperty("error", "Model metadata does not include model_url"); + return juce::var(result.get()); + } + + const int modelId = getModelObjectInt(model, "id", "model_id"); + const int toneId = getModelObjectInt(model, "tone_id", "toneId"); + const auto displayName = getModelObjectString(model, "name", "title"); + const auto architecture = getModelObjectString(model, "architecture_version", "architecture"); + const auto sourceUrl = getModelObjectString(model, "source_url", "sourceUrl"); + const auto license = getModelObjectString(model, "license_name", "license"); + const auto creator = getModelObjectString(model, "creator_name", "creator"); + const auto gearType = getModelObjectString(model, "gear_type", "gearType"); + const auto toneTitle = getModelObjectString(model, "tone_title", "toneTitle"); + const auto checksum = getModelObjectString(model, "sha256", "checksum"); + const auto downloadExtension = getTone3000DownloadExtension(modelUrl); + const auto gearTypeLower = gearType.toLowerCase(); + const bool looksLikeCabIR = gearTypeLower.contains("ir") + || gearTypeLower.contains("cab") + || isTone3000AudioIRExtension(downloadExtension); + const auto fileStem = sanitizeNAMFileName( + "tone-" + juce::String(toneId > 0 ? toneId : 0) + + "-model-" + juce::String(modelId > 0 ? modelId : 0) + + "-" + (displayName.isNotEmpty() ? displayName : "nam")); + const auto toneFolderName = "tone-" + juce::String(toneId > 0 ? toneId : 0); + const auto targetDir = previewMode + ? getOpenStudioNAMRoot().getChildFile("previews").getChildFile(toneFolderName) + : getOpenStudioNAMRoot().getChildFile("library").getChildFile(toneFolderName); + const auto directoryResult = targetDir.createDirectory(); + if (directoryResult.failed()) + { + result->setProperty("error", "Could not create the NAM download directory: " + directoryResult.getErrorMessage()); + return juce::var(result.get()); + } + + auto targetFile = targetDir.getChildFile(fileStem); + if (targetFile.getFileExtension().isEmpty()) + targetFile = targetFile.withFileExtension(looksLikeCabIR && isTone3000AudioIRExtension(downloadExtension) ? downloadExtension : ".nam"); + const auto libraryFileName = targetFile.getFileName(); + if (previewMode) + { + const auto previewSuffix = "-preview-" + juce::Uuid().toString().substring(0, 12); + targetFile = targetFile.getSiblingFile( + targetFile.getFileNameWithoutExtension() + previewSuffix + targetFile.getFileExtension()); + } + + const auto token = getStoredTone3000AccessToken(); + if (token.isEmpty()) + { + result->setProperty("error", "Missing TONE3000 access token. Connect TONE3000 first."); + return juce::var(result.get()); + } + + auto download = openAuthenticatedNAMDownload(modelUrl, token); + + if (download.input == nullptr || download.statusCode >= 400) + { + auto error = download.error; + if (error.isEmpty()) + error = "Download failed" + (download.statusCode > 0 + ? " (HTTP " + juce::String(download.statusCode) + ")" + : juce::String()); + result->setProperty("error", error); + return juce::var(result.get()); + } + + juce::TemporaryFile temporaryDownload(targetFile, juce::TemporaryFile::useHiddenFile); + const auto& downloadedFile = temporaryDownload.getFile(); + { + juce::FileOutputStream output(downloadedFile); + if (! output.openedOk()) + { + result->setProperty("error", "Could not create a temporary NAM download file"); + return juce::var(result.get()); + } + + const juce::int64 maxDownloadBytes = looksLikeCabIR + ? 1024LL * 1024LL * 1024LL + : OpenStudioNAMModelSafety::maximumFileBytes; + const auto maximumDownloadDescription = looksLikeCabIR + ? juce::String("1 GiB") + : juce::String(OpenStudioNAMModelSafety::maximumFileDescription); + const auto declaredLength = download.input->getTotalLength(); + if (declaredLength > maxDownloadBytes) + { + result->setProperty( + "error", + "The download exceeds the " + maximumDownloadDescription + + " safety limit"); + return juce::var(result.get()); + } + + std::array buffer {}; + juce::int64 bytesWritten = 0; + while (! download.input->isExhausted()) + { + if (isTone3000TaskCancelled()) + { + result->setProperty( + "error", "The NAM model download was canceled"); + return juce::var(result.get()); + } + const auto bytesRead = download.input->read(buffer.data(), static_cast(buffer.size())); + if (bytesRead <= 0) + break; + if (bytesWritten + bytesRead > maxDownloadBytes) + { + result->setProperty( + "error", + "The download exceeds the " + maximumDownloadDescription + + " safety limit"); + return juce::var(result.get()); + } + if (! output.write(buffer.data(), static_cast(bytesRead))) + { + result->setProperty("error", "Could not write the temporary NAM download file"); + return juce::var(result.get()); + } + bytesWritten += bytesRead; + } + output.flush(); + if (bytesWritten <= 0 + || (declaredLength >= 0 && bytesWritten != declaredLength) + || output.getStatus().failed()) + { + result->setProperty("error", "The NAM model download was incomplete"); + return juce::var(result.get()); + } + } + + if (! downloadedFile.existsAsFile() || downloadedFile.getSize() <= 0) + { + result->setProperty("error", "Downloaded file was empty"); + return juce::var(result.get()); + } + + juce::String actualSha256; + juce::String checksumError; + if (isTone3000TaskCancelled()) + { + result->setProperty( + "error", "The NAM model download was canceled"); + return juce::var(result.get()); + } + if (! verifyNAMFileSha256(downloadedFile, checksum, actualSha256, checksumError)) + { + result->setProperty("error", checksumError + " The temporary download was discarded and was not installed."); + return juce::var(result.get()); + } + if (isTone3000TaskCancelled()) + { + result->setProperty( + "error", "The NAM model installation was canceled before publication"); + return juce::var(result.get()); + } + + // The download and checksum verification use a unique temporary file and + // need no shared lock. Serialize only the final target publication and the + // manifest read/modify/write transaction across windows and processes. + const auto verifiedFileSize = downloadedFile.getSize(); + std::unique_ptr manifestLock; + NAMLibraryTransactionRecoveryResult prePublicationRecovery; + const auto namRoot = getOpenStudioNAMRoot(); + const auto manifestFile = getOpenStudioNAMManifestJson(); + juce::var manifest; + if (! previewMode) + { + manifestLock = std::make_unique(); + if (! manifestLock->locked()) + return makeNAMLibraryLockFailure(getOpenStudioNAMManifestJson()); + + prePublicationRecovery = + recoverPendingNAMLibraryTransactionLocked( + namRoot, manifestFile); + if (! prePublicationRecovery.success) + { + result->setProperty("error", prePublicationRecovery.error); + applyNAMLibraryRecoveryStatus( + *result, prePublicationRecovery); + return juce::var(result.get()); + } + + const auto readResult = readNAMLibraryManifestStrictLocked( + manifestFile); + if (! readResult.success) + { + result->setProperty("error", readResult.error); + return juce::var(result.get()); + } + manifest = readResult.manifest; + applyNAMLibraryRecoveryStatus( + *result, prePublicationRecovery); + } + else if (! temporaryDownload.overwriteTargetFileWithTemporary()) + { + result->setProperty("error", "Could not publish the verified NAM download into the library"); + return juce::var(result.get()); + } + + auto* manifestObject = previewMode ? nullptr : manifest.getDynamicObject(); + juce::Array installed; + bool preservedFavorite = false; + bool replacedExistingRecord = false; + juce::String preservedInstalledAt; + if (manifestObject != nullptr) + { + const auto installedVar = manifestObject->getProperty("installed"); + if (auto* existingArray = installedVar.getArray()) + installed = *existingArray; + } + + const auto nowIso = juce::Time::getCurrentTime().toISO8601(true); + juce::DynamicObject::Ptr record = new juce::DynamicObject(); + record->setProperty("modelId", modelId); + record->setProperty("toneId", toneId); + record->setProperty("name", displayName); + record->setProperty("architecture", architecture); + record->setProperty("modelUrl", modelUrl); + record->setProperty("sourceUrl", sourceUrl); + record->setProperty("license", license); + record->setProperty("creator", creator); + record->setProperty("gearType", gearType); + record->setProperty("toneTitle", toneTitle); + record->setProperty("checksum", normaliseNAMSha256(checksum)); + record->setProperty("fileSha256", actualSha256); + record->setProperty("assetId", "sha256:" + actualSha256); + record->setProperty("checksumVerified", checksum.trim().isNotEmpty()); + record->setProperty("localPath", targetFile.getFullPathName()); + record->setProperty("libraryFileName", libraryFileName); + record->setProperty("source", "tone3000"); + record->setProperty("sourceProvider", "tone3000"); + record->setProperty("preview", previewMode); + record->setProperty("missing", false); + record->setProperty("missingSince", juce::var()); + record->setProperty("fileSizeBytes", static_cast(verifiedFileSize)); + record->setProperty("lastSeenMetadata", modelPayload); + record->setProperty("lastSeenAt", nowIso); + record->setProperty("catalogSeenAt", nowIso); + record->setProperty("manifestUpdatedAt", nowIso); + record->setProperty("installedAt", nowIso); + record->setProperty("updatedAt", nowIso); + record->setProperty("reinstalled", false); + record->setProperty("favorite", false); + + if (! previewMode && manifestObject != nullptr) + { + for (int i = installed.size() - 1; i >= 0; --i) + { + if (auto* existing = installed.getReference(i).getDynamicObject()) + { + const bool sameModel = static_cast(existing->getProperty("modelId")) == modelId && modelId > 0; + const bool samePath = areNAMPathsEquivalent( + existing->getProperty("localPath").toString(), + targetFile.getFullPathName()); + if (sameModel || samePath) + { + replacedExistingRecord = true; + preservedFavorite = preservedFavorite || static_cast(existing->getProperty("favorite")); + if (preservedInstalledAt.isEmpty()) + preservedInstalledAt = existing->getProperty("installedAt").toString(); + installed.remove(i); + } + } + } + record->setProperty("reinstalled", replacedExistingRecord); + record->setProperty("favorite", preservedFavorite); + if (preservedInstalledAt.isNotEmpty()) + record->setProperty("installedAt", preservedInstalledAt); + installed.add(juce::var(record.get())); + manifestObject->setProperty("installed", installed); + } + + if (! previewMode) + { + const auto publication = + publishNAMLibraryAssetAndManifestLocked( + downloadedFile, + targetFile, + namRoot, + manifestFile, + manifest, + actualSha256); + applyNAMLibraryPublicationStatus(*result, publication); + if (! publication.success) + { + result->setProperty("error", publication.error); + return juce::var(result.get()); + } + if (publication.recoveryPending) + { + result->setProperty( + "warning", + "The NAM model was installed, but transaction cleanup will be retried during the next library refresh. " + + publication.error); + } + } + result->setProperty("success", true); + result->setProperty("record", juce::var(record.get())); + return juce::var(result.get()); +} + +juce::var commitNAMPreviewToneToLibrary(juce::var recordPayload, juce::var metadataPayload, juce::var rackStatePayload) +{ + if (recordPayload.isString()) + recordPayload = juce::JSON::parse(recordPayload.toString()); + if (metadataPayload.isString()) + metadataPayload = juce::JSON::parse(metadataPayload.toString()); + if (rackStatePayload.isString()) + rackStatePayload = juce::JSON::parse(rackStatePayload.toString()); + + juce::DynamicObject::Ptr result = new juce::DynamicObject(); + result->setProperty("success", false); + + auto* record = recordPayload.getDynamicObject(); + if (record == nullptr) + { + result->setProperty("error", "Invalid NAM preview record"); + return juce::var(result.get()); + } + + const auto localPath = record->getProperty("localPath").toString(); + if (localPath.isEmpty()) + { + result->setProperty("error", "Preview record has no local file"); + return juce::var(result.get()); + } + + juce::File sourceFile(localPath); + if (! sourceFile.existsAsFile()) + { + result->setProperty("error", "Preview file is missing"); + return juce::var(result.get()); + } + + auto expectedPreviewSha256 = record->getProperty("fileSha256").toString(); + if (expectedPreviewSha256.isEmpty()) + expectedPreviewSha256 = record->getProperty("checksum").toString(); + + juce::String actualPreviewSha256; + juce::String checksumError; + if (! verifyNAMFileSha256(sourceFile, expectedPreviewSha256, actualPreviewSha256, checksumError)) + { + result->setProperty("error", checksumError + + " The preview was not promoted; its source file was retained so the rack can still recover or revert safely."); + return juce::var(result.get()); + } + + const int modelId = static_cast(record->getProperty("modelId")); + const int toneId = static_cast(record->getProperty("toneId")); + auto finalFile = sourceFile; + std::unique_ptr promotedFile; + if (isFileInsideNAMPreviews(sourceFile)) + { + const auto targetDir = getOpenStudioNAMRoot() + .getChildFile("library") + .getChildFile("tone-" + juce::String(toneId > 0 ? toneId : 0)); + const auto directoryResult = targetDir.createDirectory(); + if (directoryResult.failed()) + { + result->setProperty("error", "Could not create the NAM library directory: " + directoryResult.getErrorMessage()); + return juce::var(result.get()); + } + + auto libraryFileName = record->getProperty("libraryFileName").toString().trim(); + if (libraryFileName.isEmpty()) + libraryFileName = sourceFile.getFileName(); + libraryFileName = juce::File::createLegalFileName(libraryFileName); + if (libraryFileName.isEmpty()) + { + result->setProperty("error", "Could not derive a safe NAM library file name"); + return juce::var(result.get()); + } + + finalFile = targetDir.getChildFile(libraryFileName); + promotedFile = std::make_unique( + finalFile, juce::TemporaryFile::useHiddenFile); + if (! sourceFile.copyFileTo(promotedFile->getFile())) + { + result->setProperty( + "error", + "Could not prepare the verified preview for the NAM library"); + return juce::var(result.get()); + } + + juce::String copiedSha256; + juce::String copiedChecksumError; + if (! verifyNAMFileSha256( + promotedFile->getFile(), + actualPreviewSha256, + copiedSha256, + copiedChecksumError)) + { + result->setProperty( + "error", + copiedChecksumError + + " The preview was not promoted; its source file was retained."); + return juce::var(result.get()); + } + } + + const ScopedNAMLibraryMutationLock manifestLock; + if (! manifestLock.locked()) + return makeNAMLibraryLockFailure(getOpenStudioNAMManifestJson()); + + const auto namRoot = getOpenStudioNAMRoot(); + const auto manifestFile = getOpenStudioNAMManifestJson(); + const auto prePublicationRecovery = + recoverPendingNAMLibraryTransactionLocked( + namRoot, manifestFile); + if (! prePublicationRecovery.success) + { + result->setProperty("error", prePublicationRecovery.error); + applyNAMLibraryRecoveryStatus( + *result, prePublicationRecovery); + return juce::var(result.get()); + } + + const auto readResult = readNAMLibraryManifestStrictLocked( + manifestFile); + if (! readResult.success) + { + result->setProperty("error", readResult.error); + return juce::var(result.get()); + } + auto manifest = readResult.manifest; + applyNAMLibraryRecoveryStatus( + *result, prePublicationRecovery); + auto* manifestObject = manifest.getDynamicObject(); + const auto installedVar = manifestObject != nullptr ? manifestObject->getProperty("installed") : juce::var(); + auto* installedArray = installedVar.getArray(); + if (manifestObject == nullptr || installedArray == nullptr) + { + result->setProperty("error", "NAM library manifest is invalid"); + return juce::var(result.get()); + } + + juce::Array installed = *installedArray; + bool preservedFavorite = static_cast(record->getProperty("favorite")); + juce::String preservedInstalledAt = record->getProperty("installedAt").toString(); + const auto nowIso = juce::Time::getCurrentTime().toISO8601(true); + + for (int i = installed.size() - 1; i >= 0; --i) + { + if (auto* existing = installed.getReference(i).getDynamicObject()) + { + const bool sameModel = modelId > 0 && static_cast(existing->getProperty("modelId")) == modelId; + const bool samePath = areNAMPathsEquivalent( + existing->getProperty("localPath").toString(), + finalFile.getFullPathName()); + if (sameModel || samePath) + { + preservedFavorite = preservedFavorite || static_cast(existing->getProperty("favorite")); + if (preservedInstalledAt.isEmpty()) + preservedInstalledAt = existing->getProperty("installedAt").toString(); + installed.remove(i); + } + } + } + + if (auto* metadata = metadataPayload.getDynamicObject()) + preservedFavorite = preservedFavorite || static_cast(metadata->getProperty("favorite")); + + record->setProperty("localPath", finalFile.getFullPathName()); + record->setProperty("preview", false); + record->setProperty("missing", false); + record->setProperty("missingSince", juce::var()); + const auto publishedFileSize = promotedFile != nullptr + ? promotedFile->getFile().getSize() + : finalFile.getSize(); + record->setProperty( + "fileSizeBytes", static_cast(publishedFileSize)); + record->setProperty("fileSha256", actualPreviewSha256); + record->setProperty("assetId", "sha256:" + actualPreviewSha256); + record->setProperty("installedAt", preservedInstalledAt.isNotEmpty() ? preservedInstalledAt : nowIso); + record->setProperty("updatedAt", nowIso); + record->setProperty("manifestUpdatedAt", nowIso); + record->setProperty("favorite", preservedFavorite); + record->setProperty("saveMetadata", metadataPayload); + record->setProperty("rackState", rackStatePayload); + + installed.add(recordPayload); + manifestObject->setProperty("installed", installed); + if (promotedFile != nullptr) + { + const auto publication = + publishNAMLibraryAssetAndManifestLocked( + promotedFile->getFile(), + finalFile, + namRoot, + manifestFile, + manifest, + actualPreviewSha256); + applyNAMLibraryPublicationStatus(*result, publication); + if (! publication.success) + { + result->setProperty("error", publication.error); + return juce::var(result.get()); + } + if (publication.recoveryPending) + { + result->setProperty( + "warning", + "The preview was saved, but transaction cleanup will be retried during the next library refresh. " + + publication.error); + } + } + else if (! persistNAMLibraryManifestLocked( + manifestFile, manifest)) + { + result->setProperty( + "error", + "Could not persist the NAM library manifest after preview promotion"); + return juce::var(result.get()); + } + + result->setProperty("success", true); + result->setProperty("record", recordPayload); + return juce::var(result.get()); +} + +juce::var discardNAMPreviewFile(juce::var recordPayload) +{ + if (recordPayload.isString()) + recordPayload = juce::JSON::parse(recordPayload.toString()); + + juce::DynamicObject::Ptr result = new juce::DynamicObject(); + result->setProperty("success", false); + + auto* record = recordPayload.getDynamicObject(); + const auto localPath = record != nullptr ? record->getProperty("localPath").toString() : juce::String(); + if (localPath.isEmpty()) + { + result->setProperty("error", "Invalid NAM preview record"); + return juce::var(result.get()); + } + + juce::File file(localPath); + if (! isFileInsideNAMPreviews(file)) + { + result->setProperty("success", true); + result->setProperty("deleteSkipped", true); + result->setProperty("retained", file.existsAsFile()); + result->setProperty("recoverable", file.existsAsFile()); + return juce::var(result.get()); + } + + if (! file.existsAsFile()) + { + result->setProperty("success", true); + result->setProperty("deletedFile", false); + result->setProperty("alreadyMissing", true); + return juce::var(result.get()); + } + + return makeNAMPreviewRetentionResult( + "The NAM preview was retained because host-wide rack references cannot yet be proven clear"); +} + +juce::var cleanupNAMPreviewFiles(double maxAgeHours) +{ + juce::ignoreUnused(maxAgeHours); + juce::DynamicObject::Ptr result = new juce::DynamicObject(); + result->setProperty("success", false); + result->setProperty("cleaned", 0); + result->setProperty("deleteSkipped", true); + result->setProperty("error", + "Bulk NAM preview cleanup is disabled because the host cannot yet prove that every rack has released each file"); + return juce::var(result.get()); +} + +juce::var runNAMLibraryReliabilityRegressionImpl() +{ + juce::Array checks; + bool overallPass = true; + const auto addCheck = [&] (const juce::String& id, + bool pass, + const juce::String& detail) + { + juce::DynamicObject::Ptr check = new juce::DynamicObject(); + check->setProperty("id", id); + check->setProperty("pass", pass); + check->setProperty("detail", detail); + checks.add(juce::var(check.get())); + overallPass = overallPass && pass; + }; + const auto makeRecord = [] (const juce::File& file, + const juce::String& sha256, + int modelId, + bool favorite) + { + juce::DynamicObject::Ptr record = new juce::DynamicObject(); + record->setProperty("modelId", modelId); + record->setProperty("toneId", 1); + record->setProperty("localPath", file.getFullPathName()); + record->setProperty("fileSha256", sha256); + record->setProperty("fileSizeBytes", + static_cast(file.getSize())); + record->setProperty("favorite", favorite); + return juce::var(record.get()); + }; + const auto makeManifest = [] (const juce::Array& installed) + { + juce::DynamicObject::Ptr manifest = new juce::DynamicObject(); + manifest->setProperty("schemaVersion", 1); + manifest->setProperty("installed", juce::var(installed)); + return juce::var(manifest.get()); + }; + const auto makeFixtureRoot = [] (const juce::String& label) + { + const auto root = juce::File::getSpecialLocation( + juce::File::tempDirectory).getChildFile( + "OpenStudio_NAM_Library_Reliability_" + label + "_" + + juce::Uuid().toString()); + (void) root.getChildFile("library") + .getChildFile("tone-1").createDirectory(); + return root; + }; + const auto countRollbackFiles = [] (const juce::File& root) + { + juce::Array files; + root.getChildFile("library").findChildFiles( + files, + juce::File::findFiles, + true, + "*" + juce::String(kNAMLibraryRollbackTag) + "*"); + return files.size(); + }; + + { + const auto root = makeFixtureRoot("new-install-failure"); + const auto manifestFile = root.getChildFile( + "library_manifest.json"); + const auto target = root.getChildFile("library") + .getChildFile("tone-1").getChildFile("new-model.nam"); + const auto initialManifest = makeEmptyNAMLibraryManifest(); + const bool fixtureReady = persistJsonFileAtomically( + manifestFile, initialManifest); + juce::TemporaryFile staged( + target, juce::TemporaryFile::useHiddenFile); + const bool stagedReady = staged.getFile().replaceWithText( + "new-install-bytes"); + juce::String newSha256; + const bool hashReady = stagedReady + && calculateUncancelledFileSha256( + staged.getFile(), newSha256); + juce::Array installed; + installed.add(makeRecord(target, newSha256, 101, false)); + const auto desiredManifest = makeManifest(installed); + NAMLibraryPublicationResult publication; + if (fixtureReady && hashReady) + { + const ScopedNAMLibraryMutationLock lock; + const NAMLibraryPublicationTestHooks hooks { + NAMLibraryPublicationFailurePoint::manifestPublish + }; + if (lock.locked()) + { + publication = publishNAMLibraryAssetAndManifestLocked( + staged.getFile(), + target, + root, + manifestFile, + desiredManifest, + newSha256, + &hooks); + } + } + const auto diskManifest = readNAMLibraryManifestStrictLocked( + manifestFile); + const auto diskInstalledValue = diskManifest.success + ? diskManifest.manifest.getProperty("installed", {}) + : juce::var(); + const auto* diskInstalled = diskInstalledValue.getArray(); + const bool targetRemoved = ! target.existsAsFile(); + const bool noMarker = ! root.getChildFile( + kNAMLibraryTransactionMarkerName).existsAsFile(); + const bool noRollback = countRollbackFiles(root) == 0; + const bool cleaned = cleanupNAMLibraryRegressionDirectory(root); + const bool pass = fixtureReady + && hashReady + && ! publication.success + && publication.recoveryAttempted + && publication.recoverySucceeded + && ! publication.recoveryPending + && targetRemoved + && diskInstalled != nullptr + && diskInstalled->isEmpty() + && noMarker + && noRollback + && cleaned; + addCheck( + "nam_library_new_install_manifest_failure_removes_uncommitted_asset", + pass, + "An injected manifest publication failure must remove a newly published target, preserve the prior empty manifest, verify recovery, and leave no rollback artifact."); + } + + { + const auto root = makeFixtureRoot("overwrite-rollback"); + const auto manifestFile = root.getChildFile( + "library_manifest.json"); + const auto target = root.getChildFile("library") + .getChildFile("tone-1").getChildFile("model.nam"); + const bool oldReady = target.replaceWithText("old-model-bytes"); + juce::String oldSha256; + const bool oldHashReady = oldReady + && calculateUncancelledFileSha256(target, oldSha256); + juce::Array oldInstalled; + oldInstalled.add(makeRecord(target, oldSha256, 102, true)); + const bool manifestReady = persistJsonFileAtomically( + manifestFile, makeManifest(oldInstalled)); + juce::TemporaryFile staged( + target, juce::TemporaryFile::useHiddenFile); + const bool stagedReady = staged.getFile().replaceWithText( + "replacement-model-bytes"); + juce::String newSha256; + const bool newHashReady = stagedReady + && calculateUncancelledFileSha256( + staged.getFile(), newSha256); + juce::Array newInstalled; + newInstalled.add(makeRecord(target, newSha256, 102, true)); + NAMLibraryPublicationResult publication; + if (oldHashReady && manifestReady && newHashReady) + { + const ScopedNAMLibraryMutationLock lock; + const NAMLibraryPublicationTestHooks hooks { + NAMLibraryPublicationFailurePoint::manifestPublish + }; + if (lock.locked()) + { + publication = publishNAMLibraryAssetAndManifestLocked( + staged.getFile(), + target, + root, + manifestFile, + makeManifest(newInstalled), + newSha256, + &hooks); + } + } + juce::String restoredSha256; + const bool restoredHashReady = calculateUncancelledFileSha256( + target, restoredSha256); + const auto diskManifest = readNAMLibraryManifestStrictLocked( + manifestFile); + const auto diskInstalledValue = diskManifest.success + ? diskManifest.manifest.getProperty("installed", {}) + : juce::var(); + const auto* diskInstalled = diskInstalledValue.getArray(); + const bool manifestPreserved = diskInstalled != nullptr + && diskInstalled->size() == 1 + && normaliseNAMSha256( + diskInstalled->getReference(0).getProperty( + "fileSha256", {}).toString()) == oldSha256; + const bool noMarker = ! root.getChildFile( + kNAMLibraryTransactionMarkerName).existsAsFile(); + const bool noRollback = countRollbackFiles(root) == 0; + const bool cleaned = cleanupNAMLibraryRegressionDirectory(root); + addCheck( + "nam_library_overwrite_manifest_failure_restores_prior_bytes", + oldHashReady && manifestReady && newHashReady + && ! publication.success + && publication.recoverySucceeded + && restoredHashReady + && restoredSha256 == oldSha256 + && manifestPreserved + && noMarker + && noRollback + && cleaned, + "An injected overwrite failure must restore the exact prior target bytes and manifest record before reporting failure."); + } + + { + const auto root = makeFixtureRoot("crash-recovery"); + const auto manifestFile = root.getChildFile( + "library_manifest.json"); + const auto target = root.getChildFile("library") + .getChildFile("tone-1").getChildFile("model.nam"); + const bool oldReady = target.replaceWithText("crash-old-bytes"); + juce::String oldSha256; + const bool oldHashReady = oldReady + && calculateUncancelledFileSha256(target, oldSha256); + juce::Array oldInstalled; + oldInstalled.add(makeRecord(target, oldSha256, 103, false)); + const bool manifestReady = persistJsonFileAtomically( + manifestFile, makeManifest(oldInstalled)); + juce::TemporaryFile staged( + target, juce::TemporaryFile::useHiddenFile); + const bool stagedReady = staged.getFile().replaceWithText( + "crash-new-bytes"); + juce::String newSha256; + const bool newHashReady = stagedReady + && calculateUncancelledFileSha256( + staged.getFile(), newSha256); + juce::Array newInstalled; + newInstalled.add(makeRecord(target, newSha256, 103, false)); + NAMLibraryPublicationResult interrupted; + NAMLibraryTransactionRecoveryResult recovery; + if (oldHashReady && manifestReady && newHashReady) + { + const ScopedNAMLibraryMutationLock lock; + const NAMLibraryPublicationTestHooks hooks { + NAMLibraryPublicationFailurePoint::afterAssetPublish + }; + if (lock.locked()) + { + interrupted = publishNAMLibraryAssetAndManifestLocked( + staged.getFile(), + target, + root, + manifestFile, + makeManifest(newInstalled), + newSha256, + &hooks); + recovery = recoverPendingNAMLibraryTransactionLocked( + root, manifestFile); + } + } + juce::String recoveredSha256; + const bool recoveredHashReady = + calculateUncancelledFileSha256(target, recoveredSha256); + const bool artifactsCleared = ! root.getChildFile( + kNAMLibraryTransactionMarkerName).existsAsFile() + && countRollbackFiles(root) == 0; + const bool cleaned = cleanupNAMLibraryRegressionDirectory(root); + addCheck( + "nam_library_crash_marker_rolls_back_pre_manifest_publication", + oldHashReady && manifestReady && newHashReady + && ! interrupted.success + && interrupted.recoveryPending + && recovery.success + && recovery.markerFound + && recovery.rolledBack + && recoveredHashReady + && recoveredSha256 == oldSha256 + && artifactsCleared + && cleaned, + "A retained intent marker after asset publication must restore the prior bytes when the expected manifest digest was never committed."); + } + + { + const auto root = makeFixtureRoot("committed-crash-recovery"); + const auto manifestFile = root.getChildFile( + "library_manifest.json"); + const auto target = root.getChildFile("library") + .getChildFile("tone-1").getChildFile("model.nam"); + const bool oldReady = target.replaceWithText("committed-old"); + juce::String oldSha256; + const bool oldHashReady = oldReady + && calculateUncancelledFileSha256(target, oldSha256); + juce::Array oldInstalled; + oldInstalled.add(makeRecord(target, oldSha256, 104, false)); + const bool manifestReady = persistJsonFileAtomically( + manifestFile, makeManifest(oldInstalled)); + juce::TemporaryFile staged( + target, juce::TemporaryFile::useHiddenFile); + const bool stagedReady = staged.getFile().replaceWithText( + "committed-new"); + juce::String newSha256; + const bool newHashReady = stagedReady + && calculateUncancelledFileSha256( + staged.getFile(), newSha256); + juce::Array newInstalled; + newInstalled.add(makeRecord(target, newSha256, 104, false)); + NAMLibraryPublicationResult interrupted; + NAMLibraryTransactionRecoveryResult recovery; + if (oldHashReady && manifestReady && newHashReady) + { + const ScopedNAMLibraryMutationLock lock; + const NAMLibraryPublicationTestHooks hooks { + NAMLibraryPublicationFailurePoint::afterManifestPublish + }; + if (lock.locked()) + { + interrupted = publishNAMLibraryAssetAndManifestLocked( + staged.getFile(), + target, + root, + manifestFile, + makeManifest(newInstalled), + newSha256, + &hooks); + recovery = recoverPendingNAMLibraryTransactionLocked( + root, manifestFile); + } + } + juce::String recoveredSha256; + const bool recoveredHashReady = + calculateUncancelledFileSha256(target, recoveredSha256); + const bool artifactsCleared = ! root.getChildFile( + kNAMLibraryTransactionMarkerName).existsAsFile() + && countRollbackFiles(root) == 0; + const bool cleaned = cleanupNAMLibraryRegressionDirectory(root); + addCheck( + "nam_library_crash_marker_finalizes_committed_manifest", + oldHashReady && manifestReady && newHashReady + && ! interrupted.success + && interrupted.recoveryPending + && recovery.success + && recovery.markerFound + && recovery.committed + && recoveredHashReady + && recoveredSha256 == newSha256 + && artifactsCleared + && cleaned, + "A retained marker after manifest publication must keep the committed new bytes and discard only the rollback artifact."); + } + + { + const auto root = makeFixtureRoot("concurrent-hash"); + const auto manifestFile = root.getChildFile( + "library_manifest.json"); + const auto catalogFile = root.getChildFile("catalog.json"); + const auto toneDirectory = root.getChildFile("library") + .getChildFile("tone-1"); + const auto stableFile = toneDirectory.getChildFile("stable.nam"); + const auto staleFile = toneDirectory.getChildFile("stale.nam"); + const auto replacementFile = toneDirectory.getChildFile( + "replacement.nam"); + const bool assetsReady = stableFile.replaceWithText( + "stable-hash-source") + && staleFile.replaceWithText("stale-hash-source") + && replacementFile.replaceWithText( + "replacement-with-different-size"); + juce::Array installed; + installed.add(makeRecord(stableFile, {}, 201, false)); + installed.add(makeRecord(staleFile, {}, 202, false)); + const bool manifestReady = persistJsonFileAtomically( + manifestFile, makeManifest(installed)); + std::atomic hashEntered { false }; + std::atomic releaseHash { false }; + juce::var refreshResult; + std::thread refreshThread([&] + { + refreshResult = refreshNAMLibraryManifestAtPaths( + root, + manifestFile, + catalogFile, + true, + [&] (const juce::File& file, + juce::String& sha256, + juce::String& error) + { + if (areNAMPathsEquivalent( + file.getFullPathName(), + stableFile.getFullPathName())) + { + hashEntered.store(true, std::memory_order_release); + while (! releaseHash.load( + std::memory_order_acquire)) + { + juce::Thread::sleep(1); + } + } + if (! calculateUncancelledFileSha256(file, sha256)) + { + error = "fixture hash failed"; + return false; + } + return true; + }); + }); + for (int attempt = 0; + attempt < 2000 + && ! hashEntered.load(std::memory_order_acquire); + ++attempt) + { + juce::Thread::sleep(1); + } + bool concurrentUpdatePersisted = false; + if (hashEntered.load(std::memory_order_acquire)) + { + const ScopedNAMLibraryMutationLock lock; + if (lock.locked()) + { + const auto latest = readNAMLibraryManifestStrictLocked( + manifestFile); + auto latestManifest = latest.manifest; + auto latestInstalledValue = latest.success + ? latestManifest.getProperty("installed", {}) + : juce::var(); + auto* latestInstalled = latestInstalledValue.getArray(); + if (latestInstalled != nullptr + && latestInstalled->size() == 2) + { + if (auto* stable = latestInstalled->getReference(0) + .getDynamicObject()) + { + stable->setProperty("favorite", true); + } + if (auto* stale = latestInstalled->getReference(1) + .getDynamicObject()) + { + stale->setProperty( + "localPath", + replacementFile.getFullPathName()); + stale->setProperty( + "fileSizeBytes", + static_cast( + replacementFile.getSize())); + } + latestInstalled->add(makeRecord( + replacementFile, {}, 203, true)); + concurrentUpdatePersisted = + persistNAMLibraryManifestLocked( + manifestFile, latestManifest); + } + } + } + releaseHash.store(true, std::memory_order_release); + refreshThread.join(); + + const auto finalRead = readNAMLibraryManifestStrictLocked( + manifestFile); + const auto finalInstalledValue = finalRead.success + ? finalRead.manifest.getProperty("installed", {}) + : juce::var(); + auto* finalInstalled = finalInstalledValue.getArray(); + bool stableFavoritePreserved = false; + bool stableHashMerged = false; + bool staleReplacementPreserved = false; + bool staleHashRejected = false; + bool addedRecordPreserved = false; + if (finalInstalled != nullptr) + { + for (const auto& value : *finalInstalled) + { + auto* record = value.getDynamicObject(); + if (record == nullptr) + continue; + const int modelId = static_cast( + record->getProperty("modelId")); + if (modelId == 201) + { + stableFavoritePreserved = static_cast( + record->getProperty("favorite")); + const auto sha = normaliseNAMSha256( + record->getProperty("fileSha256").toString()); + stableHashMerged = sha.length() == 64; + } + else if (modelId == 202) + { + staleReplacementPreserved = areNAMPathsEquivalent( + record->getProperty("localPath").toString(), + replacementFile.getFullPathName()); + staleHashRejected = normaliseNAMSha256( + record->getProperty("fileSha256").toString()) + .isEmpty(); + } + else if (modelId == 203) + { + addedRecordPreserved = true; + } + } + } + const auto refreshSuccessValue = refreshResult.getProperty( + "success", true); + const bool refreshSucceeded = refreshResult.isObject() + && (! refreshSuccessValue.isBool() + || static_cast(refreshSuccessValue)); + const bool cleaned = cleanupNAMLibraryRegressionDirectory(root); + addCheck( + "nam_library_refresh_hash_merge_preserves_concurrent_manifest_update", + assetsReady && manifestReady + && hashEntered.load(std::memory_order_acquire) + && concurrentUpdatePersisted + && refreshSucceeded + && finalInstalled != nullptr + && finalInstalled->size() == 3 + && stableFavoritePreserved + && stableHashMerged + && staleReplacementPreserved + && staleHashRejected + && addedRecordPreserved + && cleaned, + "Hashing must run outside the OS lock; the final merge must preserve a concurrent favorite, added record, and replacement path while rejecting the stale hash observation."); + } + + juce::DynamicObject::Ptr result = new juce::DynamicObject(); + result->setProperty("success", overallPass); + result->setProperty("checks", juce::var(checks)); + return juce::var(result.get()); +} + +bool isLocalFrontendDevServerReachable() +{ + if (juce::SystemStats::getEnvironmentVariable ("OPENSTUDIO_FORCE_PACKAGED_FRONTEND", {}).trim() == "1") + { + juce::Logger::writeToLog("OPENSTUDIO_FORCE_PACKAGED_FRONTEND=1; loading the packaged frontend."); + return false; + } + + int statusCode = 0; + auto input = juce::URL("http://127.0.0.1:5183/").createInputStream( + juce::URL::InputStreamOptions(juce::URL::ParameterHandling::inAddress) + .withConnectionTimeoutMs(750) + .withNumRedirectsToFollow(1) + .withStatusCode(&statusCode)); + + if (input == nullptr) + return false; + + if (statusCode >= 400) + { + juce::Logger::writeToLog("localhost:5183 responded with HTTP " + juce::String(statusCode) + + "; falling back to the packaged frontend."); + return false; + } + + const auto indexHtml = input->readEntireStreamAsString(); + const bool looksLikeOpenStudioVite = + indexHtml.contains("OpenStudio") + && indexHtml.contains("id=\"root\"") + && (indexHtml.contains("/src/main.tsx") || indexHtml.contains("./src/main.tsx")); + + if (! looksLikeOpenStudioVite) + { + juce::Logger::writeToLog("localhost:5183 is reachable, but it did not return the OpenStudio Vite index; " + "falling back to the packaged frontend."); + return false; + } + + return true; +} + +juce::String appendFrontendStartupQuery(const juce::String& baseUrl, + MainComponent::WindowRole role, + MainComponent::StartupMode startupMode, + const juce::String& windowInstanceId = {}) +{ + juce::String url = baseUrl; + const auto appendParameter = [&url](const juce::String& key, const juce::String& value) + { + const auto separator = url.containsChar('?') ? "&" : "?"; + url << separator << key << "=" << juce::URL::addEscapeChars(value, true); + }; + + appendParameter("window", getWindowRoleQueryValue(role)); + appendParameter("startup", getStartupModeQueryValue(startupMode)); + appendParameter("platform", getHostPlatformQueryValue()); + appendParameter("windowChrome", getWindowChromeQueryValue(role)); + if (windowInstanceId.isNotEmpty()) + appendParameter("sessionId", windowInstanceId); + appendParameter("cacheBust", juce::String(juce::Time::getCurrentTime().toMilliseconds())); + return url; +} + +juce::String describeFrontendStartupState(MainComponent::FrontendStartupState state) +{ + switch (state) + { + case MainComponent::FrontendStartupState::idle: return "idle"; + case MainComponent::FrontendStartupState::navigationStarted: return "navigation-started"; + case MainComponent::FrontendStartupState::bootStarted: return "boot-started"; + case MainComponent::FrontendStartupState::ready: return "ready"; + case MainComponent::FrontendStartupState::failed: return "failed"; + case MainComponent::FrontendStartupState::timedOut: return "timed-out"; + } + + return "unknown"; +} + +juce::String determineStartupFailureCategory(const StartupDependencyStatus& dependencyStatus) +{ + if (! dependencyStatus.shellRuntimeAssetsPresent) + return dependencyStatus.packagedFrontendPresent ? "shell-assets-missing" : "packaged-frontend-missing"; + +#if JUCE_WINDOWS + if (! dependencyStatus.browserBackendSupported) + { + if (! dependencyStatus.vcRedistInstalled) + return "vc-redist-missing"; + + if (dependencyStatus.webView2RuntimeVersion.isEmpty()) + return "webview2-runtime-missing"; + + return "webview2-backend-unusable"; + } +#else + if (! dependencyStatus.browserBackendSupported) + return "macos-backend-unavailable"; +#endif + + return "ready"; +} + +juce::String buildStartupFailureSummary(const StartupDependencyStatus& dependencyStatus) +{ + const auto failureCategory = determineStartupFailureCategory(dependencyStatus); + + if (failureCategory == "packaged-frontend-missing") + return "Packaged frontend is missing."; + + if (failureCategory == "shell-assets-missing") + return "Required shell assets are missing."; + +#if JUCE_WINDOWS + if (failureCategory == "vc-redist-missing") + return "Microsoft Visual C++ Redistributable is missing."; + + if (failureCategory == "webview2-runtime-missing") + return "Microsoft Edge WebView2 Runtime is missing."; + + if (failureCategory == "webview2-backend-unusable") + return "WebView2 Runtime was detected, but JUCE still reports the backend as unavailable."; +#else + if (failureCategory == "macos-backend-unavailable") + return "The system browser backend is unavailable on this macOS installation."; +#endif + + return "OpenStudio shell startup self-test passed."; +} + +juce::String buildStartupSelfTestText(const StartupDependencyStatus& dependencyStatus) +{ + juce::StringArray lines; + lines.add("OpenStudio Startup Self-Test"); + lines.add("shellReady=" + juce::String(determineStartupFailureCategory(dependencyStatus) == "ready" ? "true" : "false")); + lines.add("failureCategory=" + determineStartupFailureCategory(dependencyStatus)); + lines.add("summary=" + buildStartupFailureSummary(dependencyStatus)); + lines.add("browserBackend=" + dependencyStatus.browserBackend); + lines.add("browserBackendSupported=" + juce::String(dependencyStatus.browserBackendSupported ? "true" : "false")); + lines.add("packagedFrontendPresent=" + juce::String(dependencyStatus.packagedFrontendPresent ? "true" : "false")); + lines.add("packagedFrontendPath=" + dependencyStatus.packagedFrontendPath); + lines.add("shellRuntimeAssetsPresent=" + juce::String(dependencyStatus.shellRuntimeAssetsPresent ? "true" : "false")); + lines.add("missingShellRuntimeAssets=" + dependencyStatus.missingShellRuntimeAssets.joinIntoString(" | ")); + lines.add("featureRuntimeAssetsPresent=" + juce::String(dependencyStatus.featureRuntimeAssetsPresent ? "true" : "false")); + lines.add("missingFeatureRuntimeAssets=" + dependencyStatus.missingFeatureRuntimeAssets.joinIntoString(" | ")); + lines.add("startupLogPath=" + getStartupLogFile().getFullPathName()); +#if JUCE_WINDOWS + lines.add("webView2UserDataPath=" + getWebView2UserDataFolder().getFullPathName()); + lines.add("webView2RuntimeVersion=" + dependencyStatus.webView2RuntimeVersion); + lines.add("vcRedistInstalled=" + juce::String(dependencyStatus.vcRedistInstalled ? "true" : "false")); + lines.add("vcRedistVersion=" + dependencyStatus.vcRedistVersion); + lines.add("prerequisiteRepairAvailable=" + juce::String(dependencyStatus.repairAvailable ? "true" : "false")); +#endif + return lines.joinIntoString("\n"); +} + +juce::StringArray getNAMModelMutationSlots(const juce::String& stateJson) +{ + juce::StringArray slots; + const auto parsed = juce::JSON::parse(stateJson); + auto* stateObject = parsed.getDynamicObject(); + if (stateObject == nullptr) + return slots; + + auto* modelObject = stateObject->getProperty("modelState").getDynamicObject(); + if (modelObject == nullptr) + modelObject = stateObject; + + const auto addIfTouched = [modelObject, &slots](const juce::Identifier& pathProperty, + const juce::Identifier& clearProperty, + const juce::String& slot) + { + const bool hasPathMutation = modelObject->hasProperty(pathProperty); + const bool hasClearMutation = modelObject->hasProperty(clearProperty) + && static_cast<bool>(modelObject->getProperty(clearProperty)); + if (hasPathMutation || hasClearMutation) + slots.addIfNotAlreadyThere(slot); + }; + + addIfTouched("pedalModelPath", "clearPedalModel", "pedal"); + addIfTouched("ampModelPath", "clearAmpModel", "amp"); + addIfTouched("cabIRPath", "clearCabIR", "cab"); + if (modelObject->hasProperty("pedalModelSize")) + slots.addIfNotAlreadyThere("pedal"); + if (modelObject->hasProperty("ampModelSize")) + slots.addIfNotAlreadyThere("amp"); + bool legacyModelSizeTouched = false; + if (auto* values = + stateObject->getProperty( + "values").getDynamicObject()) + { + legacyModelSizeTouched = + values->hasProperty("namModelSize"); + } + if (auto* parameters = + stateObject->getProperty( + "parameters").getArray()) + { + for (const auto& parameterValue : + *parameters) + { + if (auto* parameter = + parameterValue.getDynamicObject(); + parameter != nullptr + && parameter->getProperty( + "id").toString() + == "namModelSize") + { + legacyModelSizeTouched = true; + break; + } + } + } + if (legacyModelSizeTouched) + { + slots.addIfNotAlreadyThere("pedal"); + slots.addIfNotAlreadyThere("amp"); + } + return slots; +} +} + +juce::CriticalSection MainComponent::instanceListLock; +juce::Array<MainComponent*> MainComponent::activeInstances; + +int MainComponent::runNAMLibraryManifestWriterRegressionChild( + const juce::File& manifestFile, + const juce::String& writerId, + const juce::File& readyFile, + const juce::File& startFile) +{ + const auto temporaryRoot = juce::File::getSpecialLocation( + juce::File::tempDirectory); + const auto regressionDirectory = manifestFile.getParentDirectory(); + const auto safeWriterId = writerId.trim(); + const bool safePaths = juce::File::isAbsolutePath( + manifestFile.getFullPathName()) + && juce::File::isAbsolutePath(readyFile.getFullPathName()) + && juce::File::isAbsolutePath(startFile.getFullPathName()) + && regressionDirectory.isDirectory() + && regressionDirectory.isAChildOf(temporaryRoot) + && regressionDirectory.getFileName().startsWith( + "OpenStudio_NAM_Library_Multiprocess_") + && readyFile.getParentDirectory() == regressionDirectory + && startFile.getParentDirectory() == regressionDirectory + && manifestFile.getFileName() == "library_manifest.json" + && startFile.getFileName() == "start.flag" + && readyFile.getFileName() + == "ready-" + safeWriterId + ".flag" + && safeWriterId.isNotEmpty() + && safeWriterId.length() <= 32 + && safeWriterId.containsOnly( + "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_"); + if (! safePaths) + return 2; + + if (! readyFile.replaceWithText(safeWriterId)) + return 3; + + const auto startDeadline = juce::Time::getMillisecondCounterHiRes() + + 10000.0; + while (! startFile.existsAsFile() + && juce::Time::getMillisecondCounterHiRes() < startDeadline) + { + juce::Thread::sleep(5); + } + if (! startFile.existsAsFile()) + return 4; + + const ScopedNAMLibraryMutationLock manifestLock(10000); + if (! manifestLock.locked()) + return 5; + + auto manifest = parseJsonFileOrDefault(manifestFile, "installed"); + auto* manifestObject = manifest.getDynamicObject(); + auto installedValue = manifestObject != nullptr + ? manifestObject->getProperty("installed") + : juce::var(); + auto* installedArray = installedValue.getArray(); + if (manifestObject == nullptr || installedArray == nullptr) + return 6; + + // Both child processes cross the start barrier together. Keeping the read + // snapshot open briefly makes a missing OS-wide lock deterministically lose + // one writer, while the production lock serializes the complete RMW. + juce::Thread::sleep(250); + bool alreadyPresent = false; + for (const auto& recordValue : *installedArray) + { + if (recordValue.getProperty("writerId", {}).toString() + == safeWriterId) + { + alreadyPresent = true; + break; + } + } + if (! alreadyPresent) + { + juce::DynamicObject::Ptr record = new juce::DynamicObject(); + record->setProperty("writerId", safeWriterId); + record->setProperty( + "modelId", safeWriterId.hashCode()); + installedArray->add(juce::var(record.get())); + manifestObject->setProperty("installed", installedValue); + } + + return persistNAMLibraryManifestLocked(manifestFile, manifest) ? 0 : 7; +} + +juce::var MainComponent::runNAMCatalogNativeRegression() +{ + return runNAMCatalogNativeRegressionImpl(); +} + +void MainComponent::runTone3000NativeTask( + std::function<juce::var()> task, + juce::WebBrowserComponent::NativeFunctionCompletion completion) +{ + if (! tone3000NativeCompletionsEnabled.load( + std::memory_order_acquire)) + { + return; + } + juce::Component::SafePointer<MainComponent> safeThis(this); + auto cancellation = tone3000TaskCancellation; + auto completionState = std::make_shared< + juce::WebBrowserComponent::NativeFunctionCompletion>( + std::move(completion)); + const auto reportSchedulingFailure = [this, &completionState] + (const juce::String& message) + { + if (tone3000NativeCompletionsEnabled.load( + std::memory_order_acquire) + && completionState != nullptr + && static_cast<bool>(*completionState)) + { + (*completionState)(makeTone3000Error(message)); + } + }; + + try + { + tone3000BridgePool.addJob(std::function<void()>([ + safeThis, + cancellation = std::move(cancellation), + task = std::move(task), + completionState]() mutable + { + if (cancellation == nullptr + || cancellation->load(std::memory_order_acquire)) + { + return; + } + + struct ScopedTaskCancellation + { + explicit ScopedTaskCancellation( + const std::atomic<bool>* cancellationIn) + : previous(activeTone3000TaskCancellation) + { + activeTone3000TaskCancellation = cancellationIn; + } + ~ScopedTaskCancellation() + { + activeTone3000TaskCancellation = previous; + } + const std::atomic<bool>* previous = nullptr; + } scopedCancellation(cancellation.get()); + + juce::var result; + try + { + result = task(); + } + catch (const std::exception& exception) + { + result = makeTone3000Error( + "Native NAM/TONE3000 task failed: " + + juce::String(exception.what())); + } + catch (...) + { + result = makeTone3000Error( + "Native NAM/TONE3000 task failed unexpectedly."); + } + + juce::MessageManager::callAsync([ + safeThis, + result = std::move(result), + completionState]() mutable + { + if (safeThis != nullptr + && safeThis->tone3000NativeCompletionsEnabled.load( + std::memory_order_acquire) + && completionState != nullptr + && static_cast<bool>(*completionState)) + { + (*completionState)(result); + } + }); + })); + } + catch (const std::exception& exception) + { + reportSchedulingFailure( + "Could not schedule the native NAM/TONE3000 task: " + + juce::String(exception.what())); + } + catch (...) + { + reportSchedulingFailure( + "Could not schedule the native NAM/TONE3000 task."); + } +} + +std::string MainComponent::makeNAMModelMutationKey(const juce::String& trackId, + const juce::String& chainType, + int fxIndex, + const juce::String& slot) +{ + return (trackId + "\x1f" + chainType + "\x1f" + juce::String(fxIndex) + + "\x1f" + slot.trim().toLowerCase()).toStdString(); +} + +juce::uint64 MainComponent::beginNAMModelMutationRequest(const juce::String& trackId, + const juce::String& chainType, + int fxIndex, + const juce::String& slot) +{ + const juce::ScopedLock sl(namModelMutationGenerationLock); + const auto generation = ++nextNAMModelMutationGeneration; + namModelMutationGenerations[makeNAMModelMutationKey(trackId, chainType, fxIndex, slot)] = generation; + return generation; +} + +juce::uint64 MainComponent::beginNAMModelMutationRequests( + const juce::String& trackId, + const juce::String& chainType, + int fxIndex, + const juce::StringArray& slots, + std::vector<std::pair<juce::String, juce::uint64>>& requests) +{ + const juce::ScopedLock generationLock(namModelMutationGenerationLock); + requests.clear(); + requests.reserve(static_cast<size_t>(slots.size())); + for (const auto& slot : slots) + { + const auto generation = ++nextNAMModelMutationGeneration; + namModelMutationGenerations[makeNAMModelMutationKey(trackId, chainType, fxIndex, slot)] = generation; + requests.emplace_back(slot, generation); + } + return namRackTopologyGeneration; +} + +void MainComponent::invalidateNAMModelMutationRequests(const juce::String& trackId, + const juce::String& chainType, + int fxIndex, + const juce::StringArray& slots) +{ + for (const auto& slot : slots) + beginNAMModelMutationRequest(trackId, chainType, fxIndex, slot); +} + +bool MainComponent::isNAMModelMutationRequestCurrent(const juce::String& trackId, + const juce::String& chainType, + int fxIndex, + const juce::String& slot, + juce::uint64 generation) +{ + const juce::ScopedLock sl(namModelMutationGenerationLock); + const auto iterator = namModelMutationGenerations.find(makeNAMModelMutationKey(trackId, chainType, fxIndex, slot)); + return iterator != namModelMutationGenerations.end() && iterator->second == generation; +} + +std::shared_ptr<void> MainComponent::acquireNAMModelMutationPublicationLease( + const juce::String& trackId, + const juce::String& chainType, + int fxIndex, + const std::vector<std::pair<juce::String, juce::uint64>>& requests, + juce::uint64 topologyGeneration) +{ + // Expensive model/IR preparation happens before this lease is requested. + // Acquire locks in the same state -> generation order as topology handlers, + // then hold both only through the short validated audible publication. This + // keeps render/freeze and topology mutations atomic without blocking the + // WebView message thread for the duration of NAM graph construction. + namModelMutationStateLock.enter(); + namModelMutationGenerationLock.enter(); + bool current = topologyGeneration == namRackTopologyGeneration; + for (const auto& request : requests) + { + const auto iterator = namModelMutationGenerations.find( + makeNAMModelMutationKey(trackId, chainType, fxIndex, request.first)); + current = current && iterator != namModelMutationGenerations.end() + && iterator->second == request.second; + } + + if (! current) + { + namModelMutationGenerationLock.exit(); + namModelMutationStateLock.exit(); + return {}; + } + + return std::shared_ptr<void>( + &namModelMutationStateLock, + [] (void*) + { + namModelMutationGenerationLock.exit(); + namModelMutationStateLock.exit(); + }); +} + +juce::var MainComponent::discardNAMPreviewIfUnused(juce::var recordPayload, + juce::var rackAddressPayload) +{ + // Lock ordering is always rack state first, file/library lifecycle second. + // Neither lock is observed by the audio callback. + const juce::ScopedLock stateLock(namModelMutationStateLock); + const juce::ScopedLock libraryLock(namLibraryMutationLock); + + if (recordPayload.isString()) + recordPayload = juce::JSON::parse(recordPayload.toString()); + + auto* record = recordPayload.getDynamicObject(); + const auto localPath = record != nullptr ? record->getProperty("localPath").toString() : juce::String(); + if (localPath.isEmpty()) + return discardNAMPreviewFile(recordPayload); + + const juce::File previewFile(localPath); + if (! isFileInsideNAMPreviews(previewFile) || ! previewFile.existsAsFile()) + return discardNAMPreviewFile(recordPayload); + + // UUID previews created by current builds carry their deterministic library + // destination separately. Legacy records did not, and their preview path may + // be shared by more than one rack/window, so ownership cannot be proven. + if (record->getProperty("libraryFileName").toString().trim().isEmpty()) + { + return makeNAMPreviewRetentionResult( + "Legacy NAM preview ownership cannot be proven; the file was retained safely"); + } + + if (rackAddressPayload.isString()) + rackAddressPayload = juce::JSON::parse(rackAddressPayload.toString()); + + auto* address = rackAddressPayload.getDynamicObject(); + if (address != nullptr) + { + if (auto* nestedAddress = address->getProperty("address").getDynamicObject()) + address = nestedAddress; + } + + if (address == nullptr) + { + return makeNAMPreviewRetentionResult( + "NAM preview discard needs the target rack address so the model can be proven unloaded"); + } + + const auto trackId = address->getProperty("trackId").toString(); + auto chainType = address->getProperty("chain").toString().trim().toLowerCase(); + if (chainType.isEmpty()) + chainType = address->getProperty("chainType").toString().trim().toLowerCase(); + const int fxIndex = address->hasProperty("fxIndex") + ? static_cast<int>(address->getProperty("fxIndex")) + : -1; + const bool supportedChain = chainType == "input" || chainType == "track" || chainType == "master"; + if (! supportedChain || fxIndex < 0 || (chainType != "master" && trackId.isEmpty())) + { + return makeNAMPreviewRetentionResult( + "NAM preview discard received an invalid or incomplete target rack address"); + } + + // This addressed-rack check is diagnostic only. Physical deletion remains + // disabled until every live NAM rack can be enumerated or reference-counted. + const auto rackState = audioEngine.getBuiltInPluginState(trackId, chainType, fxIndex); + auto* stateObject = rackState.getDynamicObject(); + auto* modelState = stateObject != nullptr + ? stateObject->getProperty("modelState").getDynamicObject() + : nullptr; + if (modelState == nullptr) + { + return makeNAMPreviewRetentionResult( + "Could not verify the current NAM Rack state; the preview was kept"); + } + + const struct + { + const char* property; + const char* slot; + } modelPaths[] { + { "pedalModelPath", "pedal" }, + { "ampModelPath", "amp" }, + { "cabIRPath", "cab" }, + }; - return "OpenStudio shell startup self-test passed."; -} + for (const auto& candidate : modelPaths) + { + if (areNAMPathsEquivalent(localPath, modelState->getProperty(candidate.property).toString())) + { + return makeNAMPreviewRetentionResult( + "NAM preview is still loaded in the " + juce::String(candidate.slot) + " slot", + candidate.slot); + } + } -juce::String buildStartupSelfTestText(const StartupDependencyStatus& dependencyStatus) -{ - juce::StringArray lines; - lines.add("OpenStudio Startup Self-Test"); - lines.add("shellReady=" + juce::String(determineStartupFailureCategory(dependencyStatus) == "ready" ? "true" : "false")); - lines.add("failureCategory=" + determineStartupFailureCategory(dependencyStatus)); - lines.add("summary=" + buildStartupFailureSummary(dependencyStatus)); - lines.add("browserBackend=" + dependencyStatus.browserBackend); - lines.add("browserBackendSupported=" + juce::String(dependencyStatus.browserBackendSupported ? "true" : "false")); - lines.add("packagedFrontendPresent=" + juce::String(dependencyStatus.packagedFrontendPresent ? "true" : "false")); - lines.add("packagedFrontendPath=" + dependencyStatus.packagedFrontendPath); - lines.add("shellRuntimeAssetsPresent=" + juce::String(dependencyStatus.shellRuntimeAssetsPresent ? "true" : "false")); - lines.add("missingShellRuntimeAssets=" + dependencyStatus.missingShellRuntimeAssets.joinIntoString(" | ")); - lines.add("featureRuntimeAssetsPresent=" + juce::String(dependencyStatus.featureRuntimeAssetsPresent ? "true" : "false")); - lines.add("missingFeatureRuntimeAssets=" + dependencyStatus.missingFeatureRuntimeAssets.joinIntoString(" | ")); - lines.add("startupLogPath=" + getStartupLogFile().getFullPathName()); -#if JUCE_WINDOWS - lines.add("webView2RuntimeVersion=" + dependencyStatus.webView2RuntimeVersion); - lines.add("vcRedistInstalled=" + juce::String(dependencyStatus.vcRedistInstalled ? "true" : "false")); - lines.add("vcRedistVersion=" + dependencyStatus.vcRedistVersion); - lines.add("prerequisiteRepairAvailable=" + juce::String(dependencyStatus.repairAvailable ? "true" : "false")); -#endif - return lines.joinIntoString("\n"); -} + return makeNAMPreviewRetentionResult( + "The NAM preview was unloaded from the addressed rack but retained because other rack references cannot be proven clear"); } -juce::CriticalSection MainComponent::instanceListLock; -juce::Array<MainComponent*> MainComponent::activeInstances; - juce::var MainComponent::buildStartupSelfTestReport() { - const auto preferredBackend = getPreferredBrowserBackend(); - const auto supported = juce::WebBrowserComponent::areOptionsSupported( - juce::WebBrowserComponent::Options().withBackend(preferredBackend)); + const auto checkOptions = getEmbeddedBrowserBaseOptions(); + const auto supported = juce::WebBrowserComponent::areOptionsSupported(checkOptions); const auto dependencyStatus = evaluateStartupDependencies(supported); auto* report = new juce::DynamicObject(); @@ -1134,6 +8684,7 @@ juce::var MainComponent::buildStartupSelfTestReport() report->setProperty("missingFeatureRuntimeAssets", dependencyStatus.missingFeatureRuntimeAssets.joinIntoString("\n")); report->setProperty("startupLogPath", getStartupLogFile().getFullPathName()); #if JUCE_WINDOWS + report->setProperty("webView2UserDataPath", getWebView2UserDataFolder().getFullPathName()); report->setProperty("webView2RuntimeVersion", dependencyStatus.webView2RuntimeVersion); report->setProperty("vcRedistInstalled", dependencyStatus.vcRedistInstalled); report->setProperty("vcRedistVersion", dependencyStatus.vcRedistVersion); @@ -1173,16 +8724,7 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, windowRole(roleIn), windowInstanceId(windowInstanceIdIn), windowCallbacks(std::move(callbacksIn)), - webView (juce::WebBrowserComponent::Options() - .withBackend (getPreferredBrowserBackend()) -#if JUCE_WINDOWS - .withWinWebView2Options ( - juce::WebBrowserComponent::Options::WinWebView2() - .withUserDataFolder (juce::File::getSpecialLocation (juce::File::userApplicationDataDirectory) - .getChildFile ("OpenStudio") - .getChildFile ("WebView2UserData")) - .withStatusBarDisabled()) -#endif + webView (getEmbeddedBrowserBaseOptions() .withNativeIntegrationEnabled() .withResourceProvider ([this] (const juce::String& path) -> std::optional<juce::WebBrowserComponent::Resource> { const auto requestedPath = path.upToFirstOccurrenceOf("?", false, false) @@ -1234,7 +8776,7 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, juce::MessageManager::callAsync([safeThis, state, detail]() { - if (safeThis == nullptr) + if (safeThis == nullptr || safeThis->secondaryWindowClosing) return; if (state == "boot-started") @@ -1315,18 +8857,26 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, // Dialog functions are interactive — user may spend several minutes navigating. // Worker-backed startup calls may also legitimately take longer than the default bridge timeout. + // Plug-in scans enforce a per-candidate timeout natively, so do not add a second + // aggregate browser timeout that can expire while a healthy scan is still running. + // Offline renders are duration-dependent and continue on a native worker thread; + // a browser deadline would report failure while the valid output is still being written. // Use a 5-minute timeout for file choosers and AI generation startup, 15 seconds for everything else. - const DIALOG_FUNCTIONS = ['showRenderSaveDialog', 'showSaveDialog', 'showOpenDialog', 'showOpenFileDialog', 'showDirectoryDialog']; - const LONG_RUNNING_FUNCTIONS = ['startAIGeneration']; + const DIALOG_FUNCTIONS = ['showRenderSaveDialog', 'showSaveDialog', 'showOpenDialog', 'showOpenFileDialog', 'showDirectoryDialog', 'openAudioDeviceControlPanel']; + const LONG_RUNNING_FUNCTIONS = ['startAIGeneration', 'refreshNAMCatalog']; + const NO_TIMEOUT_FUNCTIONS = ['scanForPlugins', 'renderProject', 'renderProjectWithDither']; const timeoutMs = (DIALOG_FUNCTIONS.indexOf(name) >= 0 || LONG_RUNNING_FUNCTIONS.indexOf(name) >= 0) ? 300000 : 15000; - const timeout = setTimeout(() => { - window.__JUCE__.backend.removeEventListener(listener); - reject(new Error("Native function call timeout: " + name)); - }, timeoutMs); + const timeout = NO_TIMEOUT_FUNCTIONS.indexOf(name) >= 0 + ? null + : setTimeout(() => { + window.__JUCE__.backend.removeEventListener(listener); + reject(new Error("Native function call timeout: " + name)); + }, timeoutMs); const listener = window.__JUCE__.backend.addEventListener('__juce__complete', (data) => { if (data.promiseId === resultId) { - clearTimeout(timeout); + if (timeout !== null) + clearTimeout(timeout); window.__JUCE__.backend.removeEventListener(listener); resolve(data.result); } @@ -1350,12 +8900,35 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, console.log("JUCE User Script: Initialization complete. Available functions:", Object.keys(window.__JUCE__.backend)); )") - .withNativeFunction ("getAudioDeviceSetup", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { - juce::ignoreUnused(args); - // Return the current audio setup as a JSON object - completion (audioEngine.getAudioDeviceSetup()); - }) - .withNativeFunction ("setAudioDeviceSetup", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + .withNativeFunction ("getAudioDeviceSetup", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + juce::ignoreUnused(args); + // Return the current audio setup as a JSON object + completion (audioEngine.getAudioDeviceSetup()); + }) + .withNativeFunction ("getNAMRackOversamplingFactor", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + juce::ignoreUnused(args); + completion(audioEngine.getNAMRackOversamplingFactor()); + }) + .withNativeFunction ("setNAMRackOversamplingFactor", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + if (args.size() != 1) + { + completion(false); + return; + } + const int factor = static_cast<int>(args[0]); + juce::MessageManager::callAsync( + [this, factor, completion = std::move(completion)]() mutable { + completion(audioEngine.setNAMRackOversamplingFactor(factor)); + }); + }) + .withNativeFunction ("openAudioDeviceControlPanel", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + juce::ignoreUnused(args); + juce::MessageManager::callAsync( + [this, completion = std::move(completion)]() mutable { + completion(audioEngine.openAudioDeviceControlPanel()); + }); + }) + .withNativeFunction ("setAudioDeviceSetup", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { // Expecting: [type, input, output, sampleRate, bufferSize] if (args.size() == 1 && args[0].isObject()) { auto* obj = args[0].getDynamicObject(); @@ -1365,13 +8938,26 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, double sampleRate = obj->getProperty("sampleRate"); int bufferSize = obj->getProperty("bufferSize"); - // Call completion immediately to avoid timeout - // Audio device setup will happen in background - completion(true); - - // Run device setup asynchronously on message thread - juce::MessageManager::callAsync([this, type, input, output, sampleRate, bufferSize]() { - audioEngine.setAudioDeviceSetup(type, input, output, sampleRate, bufferSize); + // Device changes belong on the message thread. Resolve + // the JS promise only after JUCE has accepted (and + // verified) the actual setup so the UI cannot report a + // false success. + juce::MessageManager::callAsync([this, type, input, output, sampleRate, bufferSize, + completion = std::move(completion)]() mutable { + audioEngine.setAudioDeviceSetup( + type, + input, + output, + sampleRate, + bufferSize, + [completion = std::move(completion)]( + bool applied, + const juce::String& errorMessage) mutable { + if (! applied && errorMessage.isNotEmpty()) + juce::Logger::writeToLog( + "setAudioDeviceSetup failed: " + errorMessage); + completion(applied); + }); }); } else { completion(false); @@ -1380,6 +8966,14 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, .withNativeFunction ("reportFrontendStartupState", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { const auto state = args.size() > 0 ? args[0].toString().trim().toLowerCase() : juce::String(); const auto detail = args.size() > 1 ? args[1].toString() : juce::String(); + if (secondaryWindowClosing) + { + juce::Logger::writeToLog("Frontend startup report ignored after secondary close: state=" + state + + (detail.isNotEmpty() ? " detail=" + detail : "")); + completion(true); + return; + } + juce::Logger::writeToLog("Frontend startup report received via native function: state=" + state + (detail.isNotEmpty() ? " detail=" + detail : "")); @@ -1417,12 +9011,16 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, if (args.size() > 1 && args[1].isString()) { initialType = args[1].toString(); } + const juce::ScopedLock processMutationLock(namModelMutationStateLock); + invalidateNAMRackTopology(); juce::String trackId = audioEngine.addTrack(explicitId, initialType); completion(trackId); }) .withNativeFunction ("removeTrack", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { if (args.size() > 0 && args[0].isString()) { + const juce::ScopedLock processMutationLock(namModelMutationStateLock); + invalidateNAMRackTopology(); bool success = audioEngine.removeTrack(args[0].toString()); completion(success); } @@ -1468,6 +9066,18 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, completion(false); } }) + .withNativeFunction ("setNAMTunerActive", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + if (args.size() >= 2) { + const juce::String trackId = args[0].toString(); + const bool active = args[1]; + const juce::String subscriberId = + args.size() >= 3 ? args[2].toString() : juce::String(); + completion(audioEngine.setNAMTunerActive( + trackId, active, subscriberId)); + } else { + completion(false); + } + }) .withNativeFunction ("setTrackVolume", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { if (args.size() == 2) { juce::String trackId = args[0].toString(); @@ -1511,7 +9121,7 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, .withNativeFunction ("setTransportPlaying", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { if (args.size() == 1) { bool playing = args[0]; - logAudioBridge("setTransportPlaying playing=" + juce::String(playing ? "true" : "false")); + OPENSTUDIO_LOG_AUDIO_BRIDGE("setTransportPlaying playing=" + juce::String(playing ? "true" : "false")); audioEngine.setTransportPlaying(playing); completion(true); } else { @@ -1521,7 +9131,7 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, .withNativeFunction ("setTransportRecording", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { if (args.size() == 1) { bool recording = args[0]; - logAudioBridge("setTransportRecording recording=" + juce::String(recording ? "true" : "false")); + OPENSTUDIO_LOG_AUDIO_BRIDGE("setTransportRecording recording=" + juce::String(recording ? "true" : "false")); audioEngine.setTransportRecording(recording); completion(true); } else { @@ -1619,6 +9229,8 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, .withNativeFunction ("addMasterFX", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { if (args.size() == 1) { juce::String pluginPath = args[0].toString(); + const juce::ScopedLock processMutationLock(namModelMutationStateLock); + invalidateNAMRackTopology(); bool success = audioEngine.addMasterFX(pluginPath); completion(success); } else { @@ -1631,8 +9243,20 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, }) .withNativeFunction ("removeMasterFX", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { if (args.size() == 1 && (args[0].isInt() || args[0].isDouble())) { - audioEngine.removeMasterFX((int)args[0]); - completion(true); + const juce::ScopedLock processMutationLock(namModelMutationStateLock); + invalidateNAMRackTopology(); + completion(audioEngine.removeMasterFX((int)args[0])); + } else { + completion(false); + } + }) + .withNativeFunction ("reorderMasterFX", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + if (args.size() == 2 + && (args[0].isInt() || args[0].isDouble()) + && (args[1].isInt() || args[1].isDouble())) { + const juce::ScopedLock processMutationLock(namModelMutationStateLock); + invalidateNAMRackTopology(); + completion(audioEngine.reorderMasterFX((int)args[0], (int)args[1])); } else { completion(false); } @@ -1695,14 +9319,65 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, }) // Plugin Management .withNativeFunction ("scanForPlugins", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + const bool forceRescan = args.size() > 0 && static_cast<bool>(args[0]); + juce::Logger::writeToLog("MainComponent: scanForPlugins called from frontend" + + juce::String(forceRescan ? " (deep scan)" : "")); + if (pluginScanRunning.exchange(true, std::memory_order_acq_rel)) + { + auto* report = new juce::DynamicObject(); + report->setProperty("success", false); + report->setProperty("forceRescan", forceRescan); + report->setProperty("pluginCount", audioEngine.getAvailablePlugins().size()); + report->setProperty("candidateCount", 0); + report->setProperty("failedCount", 0); + report->setProperty("skippedCount", 0); + report->setProperty("paths", juce::Array<juce::var>()); + report->setProperty("failures", juce::Array<juce::var>()); + report->setProperty("skipped", juce::Array<juce::var>()); + report->setProperty("formats", juce::Array<juce::var>()); + report->setProperty("debugLogPath", juce::String()); + report->setProperty("error", "A plug-in scan is already running."); + completion(juce::var(report)); + return; + } + + juce::Component::SafePointer<MainComponent> safeThis(this); + pluginScanPool.addJob([safeThis, completion, forceRescan]() mutable { + if (safeThis == nullptr) + return; + + auto report = safeThis->audioEngine.scanForPlugins(forceRescan); + if (auto* reportObject = report.getDynamicObject()) + reportObject->setProperty("completionId", juce::Uuid().toString()); + + juce::MessageManager::callAsync([safeThis, completion, report]() mutable { + if (safeThis == nullptr) + return; + + safeThis->pluginScanRunning.store(false, std::memory_order_release); + completion(report); + MainComponent::broadcastEventToAll("pluginCatalogChanged", report); + }); + }); + }) + .withNativeFunction ("getPluginScanConfiguration", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { juce::ignoreUnused(args); - juce::Logger::writeToLog("MainComponent: scanForPlugins called from frontend"); - audioEngine.scanForPlugins(); - int numPlugins = audioEngine.getAvailablePlugins().size(); - juce::String message = "Scan complete!\nFound " + juce::String(numPlugins) + " plugins."; - juce::AlertWindow::showMessageBoxAsync(juce::AlertWindow::InfoIcon, "Plugin Scan", message); - juce::Logger::writeToLog("MainComponent: Scan complete. Found " + juce::String(numPlugins) + " plugins"); - completion(true); + completion(audioEngine.getPluginScanConfiguration()); + }) + .withNativeFunction ("addPluginScanPath", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + completion(args.size() == 1 && args[0].isString() + ? audioEngine.addPluginScanPath(args[0].toString()) + : false); + }) + .withNativeFunction ("removePluginScanPath", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + completion(args.size() == 1 && args[0].isString() + ? audioEngine.removePluginScanPath(args[0].toString()) + : false); + }) + .withNativeFunction ("retryBlacklistedPlugin", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + completion(args.size() == 1 && args[0].isString() + ? audioEngine.retryBlacklistedPlugin(args[0].toString()) + : false); }) .withNativeFunction ("getAvailablePlugins", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { juce::ignoreUnused(args); @@ -1713,6 +9388,8 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, juce::String trackId = args[0].toString(); juce::String pluginPath = args[1].toString(); bool openEditor = args.size() >= 3 ? (bool)args[2] : true; + const juce::ScopedLock processMutationLock(namModelMutationStateLock); + invalidateNAMRackTopology(); bool success = audioEngine.addTrackInputFX(trackId, pluginPath, openEditor); completion(success); } else { @@ -1724,6 +9401,8 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, juce::String trackId = args[0].toString(); juce::String pluginPath = args[1].toString(); bool openEditor = args.size() >= 3 ? (bool)args[2] : true; + const juce::ScopedLock processMutationLock(namModelMutationStateLock); + invalidateNAMRackTopology(); bool success = audioEngine.addTrackFX(trackId, pluginPath, openEditor); completion(success); } else { @@ -1767,14 +9446,117 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, auto fxIndex = static_cast<int>(args[1]); auto isInputFX = static_cast<bool>(args[2]); auto presetName = args[3].toString(); - completion(audioEngine.saveBuiltInFXPreset(trackId, fxIndex, isInputFX, presetName)); + const auto chainType = args.size() >= 5 + ? args[4].toString() + : (isInputFX ? juce::String("input") : juce::String("track")); + completion(audioEngine.saveBuiltInFXPreset(trackId, chainType, fxIndex, presetName)); }) .withNativeFunction ("loadBuiltInFXPreset", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { auto trackId = args[0].toString(); auto fxIndex = static_cast<int>(args[1]); auto isInputFX = static_cast<bool>(args[2]); auto presetName = args[3].toString(); - completion(audioEngine.loadBuiltInFXPreset(trackId, fxIndex, isInputFX, presetName)); + const auto chainType = args.size() >= 5 + ? args[4].toString() + : (isInputFX ? juce::String("input") : juce::String("track")); + std::vector<std::pair<juce::String, juce::uint64>> namMutationRequests; + const auto topologyGeneration = beginNAMModelMutationRequests( + trackId, + chainType, + fxIndex, + { "pedal", "amp", "cab" }, + namMutationRequests); + + juce::Component::SafePointer<MainComponent> safeThis(this); + builtInStateMutationPool.addJob([ + safeThis, + trackId, + chainType, + fxIndex, + presetName, + namMutationRequests, + topologyGeneration, + completion]() mutable { + if (safeThis == nullptr) + return; + + bool stillCurrent = isNAMRackTopologyCurrent(topologyGeneration); + for (const auto& request : namMutationRequests) + { + stillCurrent = stillCurrent + && safeThis->isNAMModelMutationRequestCurrent( + trackId, chainType, fxIndex, request.first, request.second); + } + if (! stillCurrent) + { + juce::MessageManager::callAsync([safeThis, completion]() mutable { + if (safeThis != nullptr) + completion(false); + }); + return; + } + + const auto publicationLeaseFactory = [ + safeThis, + trackId, + chainType, + fxIndex, + namMutationRequests, + topologyGeneration]() + { + return safeThis != nullptr + ? safeThis->acquireNAMModelMutationPublicationLease( + trackId, + chainType, + fxIndex, + namMutationRequests, + topologyGeneration) + : std::shared_ptr<void>(); + }; + const bool applied = safeThis->audioEngine.loadBuiltInFXPreset( + trackId, + chainType, + fxIndex, + presetName, + publicationLeaseFactory); + // A successful publication lease proves this request + // was current at the audible swap. A request begun + // afterward must not retroactively turn success false. + const bool result = applied; + juce::MessageManager::callAsync([safeThis, completion, result]() mutable { + if (safeThis != nullptr) + completion(result); + }); + }); + }) + .withNativeFunction ("getBuiltInFXPresetData", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + if (args.size() != 2) + { + completion(juce::String()); + return; + } + completion(audioEngine.getBuiltInFXPresetData( + args[0].toString(), args[1].toString())); + }) + .withNativeFunction ("saveBuiltInFXPresetData", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + if (args.size() != 3) + { + completion(false); + return; + } + completion(audioEngine.saveBuiltInFXPresetData( + args[0].toString(), args[1].toString(), args[2].toString())); + }) + .withNativeFunction ("copyBuiltInFXPreset", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + if (args.size() != 3) + { + completion(false); + return; + } + const auto pluginName = args[0].toString(); + const auto sourcePresetName = args[1].toString(); + const auto targetPresetName = args[2].toString(); + completion(audioEngine.copyBuiltInFXPreset(pluginName, sourcePresetName, targetPresetName)); }) .withNativeFunction ("deleteBuiltInFXPreset", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { auto pluginName = args[0].toString(); @@ -1815,6 +9597,13 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, completion(juce::var()); } }) + .withNativeFunction ("getNAMRackDiagnostics", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + if (args.size() >= 3 && args[0].isString()) { + completion(audioEngine.getNAMRackDiagnostics(args[0].toString(), args[1].toString(), static_cast<int>(args[2]))); + } else { + completion(juce::var()); + } + }) .withNativeFunction ("getBuiltInPluginState", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { if (args.size() >= 3 && args[0].isString()) { completion(audioEngine.getBuiltInPluginState(args[0].toString(), args[1].toString(), static_cast<int>(args[2]))); @@ -1832,7 +9621,70 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, }) .withNativeFunction ("setBuiltInPluginState", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { if (args.size() >= 4 && args[0].isString()) { - completion(audioEngine.setBuiltInPluginState(args[0].toString(), args[1].toString(), static_cast<int>(args[2]), args[3].toString())); + const auto trackId = args[0].toString(); + const auto chainType = args[1].toString(); + const int fxIndex = static_cast<int>(args[2]); + const auto stateJson = args[3].toString(); + const auto namMutationSlots = getNAMModelMutationSlots(stateJson); + std::vector<std::pair<juce::String, juce::uint64>> namMutationRequests; + const auto topologyGeneration = beginNAMModelMutationRequests( + trackId, chainType, fxIndex, namMutationSlots, namMutationRequests); + + juce::Component::SafePointer<MainComponent> safeThis(this); + builtInStateMutationPool.addJob([safeThis, trackId, chainType, fxIndex, stateJson, namMutationRequests, topologyGeneration, completion]() mutable { + if (safeThis == nullptr) + return; + + if (! isNAMRackTopologyCurrent(topologyGeneration)) + { + juce::Logger::writeToLog( + "Built-in bridge: skipped state mutation after FX topology changed"); + juce::MessageManager::callAsync([safeThis, completion]() mutable { + if (safeThis != nullptr) + completion(false); + }); + return; + } + + for (const auto& request : namMutationRequests) + { + if (! safeThis->isNAMModelMutationRequestCurrent( + trackId, chainType, fxIndex, request.first, request.second)) + { + juce::Logger::writeToLog( + "Built-in bridge: skipped superseded NAM-bearing state mutation slot=" + + request.first); + juce::MessageManager::callAsync([safeThis, completion]() mutable { + if (safeThis != nullptr) + completion(false); + }); + return; + } + } + + juce::Logger::writeToLog("Built-in bridge: sequenced state mutation started chain=" + chainType + " fx=" + juce::String(fxIndex)); + const auto publicationLeaseFactory = [safeThis, + trackId, + chainType, + fxIndex, + namMutationRequests, + topologyGeneration]() + { + return safeThis != nullptr + ? safeThis->acquireNAMModelMutationPublicationLease( + trackId, chainType, fxIndex, + namMutationRequests, topologyGeneration) + : std::shared_ptr<void>(); + }; + const bool applied = safeThis->audioEngine.setBuiltInPluginState( + trackId, chainType, fxIndex, stateJson, publicationLeaseFactory); + const bool result = applied; + juce::Logger::writeToLog("Built-in bridge: sequenced state mutation finished chain=" + chainType + " fx=" + juce::String(fxIndex) + " result=" + juce::String(result ? "true" : "false")); + juce::MessageManager::callAsync([safeThis, completion, result]() mutable { + if (safeThis != nullptr) + completion(result); + }); + }); } else { completion(false); } @@ -1851,18 +9703,20 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, }) .withNativeFunction ("removeTrackInputFX", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { if (args.size() == 2 && args[1].isInt()) { - juce::String trackId = args[0].toString(); - audioEngine.removeTrackInputFX(trackId, args[1]); - completion(true); + juce::String trackId = args[0].toString(); + const juce::ScopedLock processMutationLock(namModelMutationStateLock); + invalidateNAMRackTopology(); + completion(audioEngine.removeTrackInputFX(trackId, args[1])); } else { completion(false); } }) .withNativeFunction ("removeTrackFX", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { if (args.size() == 2 && args[1].isInt()) { - juce::String trackId = args[0].toString(); - audioEngine.removeTrackFX(trackId, args[1]); - completion(true); + juce::String trackId = args[0].toString(); + const juce::ScopedLock processMutationLock(namModelMutationStateLock); + invalidateNAMRackTopology(); + completion(audioEngine.removeTrackFX(trackId, args[1])); } else { completion(false); } @@ -1890,6 +9744,8 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, juce::String trackId = args[0].toString(); int fromIndex = args[1]; int toIndex = args[2]; + const juce::ScopedLock processMutationLock(namModelMutationStateLock); + invalidateNAMRackTopology(); bool success = audioEngine.reorderTrackInputFX(trackId, fromIndex, toIndex); completion(success); } else { @@ -1901,6 +9757,8 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, juce::String trackId = args[0].toString(); int fromIndex = args[1]; int toIndex = args[2]; + const juce::ScopedLock processMutationLock(namModelMutationStateLock); + invalidateNAMRackTopology(); bool success = audioEngine.reorderTrackFX(trackId, fromIndex, toIndex); completion(success); } else { @@ -1913,6 +9771,8 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, juce::String trackId = args[0].toString(); juce::String scriptPath = args[1].toString(); bool isInputFX = args.size() >= 3 ? (bool)args[2] : false; + const juce::ScopedLock processMutationLock(namModelMutationStateLock); + invalidateNAMRackTopology(); bool success = audioEngine.addTrackS13FX(trackId, scriptPath, isInputFX); completion(success); } else { @@ -1922,6 +9782,8 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, .withNativeFunction ("addMasterS13FX", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { if (args.size() >= 1) { juce::String scriptPath = args[0].toString(); + const juce::ScopedLock processMutationLock(namModelMutationStateLock); + invalidateNAMRackTopology(); bool success = audioEngine.addMasterS13FX(scriptPath); completion(success); } else { @@ -2014,7 +9876,7 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, .withNativeFunction ("setTransportPosition", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { if (args.size() == 1) { double seconds = args[0]; - logAudioBridge("setTransportPosition seconds=" + juce::String(seconds, 3)); + OPENSTUDIO_LOG_AUDIO_BRIDGE("setTransportPosition seconds=" + juce::String(seconds, 3)); audioEngine.setTransportPosition(seconds); completion(true); } else { @@ -2099,7 +9961,7 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, // Recording .withNativeFunction ("getLastCompletedClips", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { juce::ignoreUnused(args); - logAudioBridge("getLastCompletedClips"); + OPENSTUDIO_LOG_AUDIO_BRIDGE("getLastCompletedClips"); auto clips = audioEngine.getLastCompletedClips(); juce::Array<juce::var> clipArray; @@ -2191,6 +10053,38 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, completion(juce::Array<juce::var>()); } }) + .withNativeFunction ("getAudioPeakAmplitude", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + if (args.size() != 3 + || ! args[0].isString() + || (! args[1].isDouble() && ! args[1].isInt()) + || (! args[2].isDouble() && ! args[2].isInt())) + { + completion(-1.0); + return; + } + + const juce::String filePath = args[0].toString(); + const double offsetSeconds = static_cast<double>(args[1]); + const double durationSeconds = static_cast<double>(args[2]); + juce::Component::SafePointer<MainComponent> safeThis(this); + clipPeakAnalysisPool.addJob([ + safeThis, + filePath, + offsetSeconds, + durationSeconds, + completion]() mutable { + if (safeThis == nullptr) + return; + const double peak = safeThis->audioEngine.getAudioPeakAmplitude( + filePath, + offsetSeconds, + durationSeconds); + juce::MessageManager::callAsync([safeThis, completion, peak]() mutable { + if (safeThis != nullptr) + completion(peak); + }); + }); + }) .withNativeFunction ("refreshWaveformPeaks", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { if (args.size() >= 1) { completion(audioEngine.refreshWaveformPeaks(args[0].toString())); @@ -2199,14 +10093,19 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, } }) .withNativeFunction ("getRecordingPeaks", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { - if (args.size() == 3) { + if (args.size() >= 3) { juce::String trackId = args[0].toString(); int samplesPerPixel = args[1]; int numPixels = args[2]; - logAudioBridge("getRecordingPeaks track=" + trackId + juce::int64 startSample = args.size() >= 4 + ? static_cast<juce::int64>(static_cast<double>(args[3])) + : 0; + OPENSTUDIO_LOG_AUDIO_BRIDGE("getRecordingPeaks track=" + trackId + " samplesPerPixel=" + juce::String(samplesPerPixel) - + " numPixels=" + juce::String(numPixels)); - completion(audioEngine.getRecordingPeaks(trackId, samplesPerPixel, numPixels)); + + " numPixels=" + juce::String(numPixels) + + " startSample=" + juce::String(startSample)); + completion(audioEngine.getRecordingPeaks( + trackId, samplesPerPixel, numPixels, startSample)); } else { completion(juce::Array<juce::var>()); } @@ -2227,7 +10126,7 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, juce::String clipId = args.size() > 8 ? args[8].toString() : juce::String(); juce::String pitchCorrectionSourceFilePath = args.size() > 9 ? args[9].toString() : juce::String(); double pitchCorrectionSourceOffset = args.size() > 10 ? (double)args[10] : -1.0; - logAudioBridge("addPlaybackClip track=" + trackId + OPENSTUDIO_LOG_AUDIO_BRIDGE("addPlaybackClip track=" + trackId + " clipId=" + clipId + " file=" + filePath + " start=" + juce::String(startTime, 3) @@ -2245,6 +10144,16 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, juce::String filePath = args[1].toString(); audioEngine.removePlaybackClip(trackId, filePath); completion(true); + } else { + completion(false); + } + }) + .withNativeFunction ("removePlaybackClipById", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + if (args.size() == 2 && args[1].isString()) { + juce::String trackId = args[0].toString(); + juce::String clipId = args[1].toString(); + audioEngine.removePlaybackClipById(trackId, clipId); + completion(true); } else { completion(false); } @@ -2252,7 +10161,7 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, .withNativeFunction ("addPlaybackClipsBatch", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { if (args.size() >= 1 && args[0].isString()) { - logAudioBridge("addPlaybackClipsBatch"); + OPENSTUDIO_LOG_AUDIO_BRIDGE("addPlaybackClipsBatch"); audioEngine.addPlaybackClipsBatch (args[0].toString()); completion (true); } @@ -2261,7 +10170,7 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, }) .withNativeFunction ("clearPlaybackClips", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { juce::ignoreUnused(args); - logAudioBridge("clearPlaybackClips"); + OPENSTUDIO_LOG_AUDIO_BRIDGE("clearPlaybackClips"); audioEngine.clearPlaybackClips(); completion(true); }) @@ -2416,9 +10325,12 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, }) .withNativeFunction ("getAudioDebugSnapshot", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { juce::ignoreUnused(args); - logAudioBridge("getAudioDebugSnapshot"); completion(audioEngine.getAudioDebugSnapshot()); }) + .withNativeFunction ("getRealtimeAudioTelemetry", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + juce::ignoreUnused(args); + completion(audioEngine.getRealtimeAudioTelemetry()); + }) .withNativeFunction ("getPluginCapabilities", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { if (args.size() == 1 && args[0].isString()) { completion(audioEngine.getPluginCapabilities(args[0].toString())); @@ -2519,7 +10431,420 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, return; } - completion(juce::URL(args[0].toString()).launchInDefaultBrowser()); + const auto url = args[0].toString().trim(); + if (! isAllowedExternalBrowserURL(url)) + { + completion(false); + return; + } + + completion(juce::URL(url).launchInDefaultBrowser()); + }) + .withNativeFunction ("revealLocalPath", [] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + if (args.size() == 0 || ! args[0].isString()) + { + completion(false); + return; + } + + const auto path = args[0].toString(); + if (path.trim().isEmpty() + || path.containsAnyOf("\r\n") + || ! juce::File::isAbsolutePath(path)) + { + completion(false); + return; + } + + const juce::File localPath(path); + if (! localPath.existsAsFile() && ! localPath.isDirectory()) + { + completion(false); + return; + } + + // revealToUser opens the containing file manager and never + // executes the selected file. + localPath.revealToUser(); + completion(true); + }) + .withNativeFunction ("createTONE3000AuthRequest", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + const auto clientId = args.size() > 0 ? args[0].toString() : juce::String(); + const auto redirectUri = args.size() > 1 ? args[1].toString() : juce::String(); + const auto prompt = args.size() > 2 ? args[2].toString() : juce::String(); + const auto toneId = args.size() > 3 ? args[3].toString() : juce::String(); + const auto loginHint = args.size() > 4 ? args[4].toString() : juce::String(); + runTone3000NativeTask( + [clientId, redirectUri, prompt, toneId, loginHint] + { + return createTone3000AuthRequest( + clientId, + redirectUri, + prompt, + toneId, + loginHint); + }, + std::move(completion)); + }) + .withNativeFunction ("startTONE3000AuthFlow", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + const auto options = args.size() > 0 ? args[0] : juce::var(); + runTone3000NativeTask( + [options] + { + return startTone3000AuthFlow(options); + }, + std::move(completion)); + }) + .withNativeFunction ("cancelTONE3000AuthFlow", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + juce::ignoreUnused(args); + runTone3000NativeTask( + [] { return cancelTone3000AuthFlow(); }, + std::move(completion)); + }) + .withNativeFunction ("exchangeTONE3000OAuthCode", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + const auto code = args.size() > 0 ? args[0].toString() : juce::String(); + const auto state = args.size() > 1 ? args[1].toString() : juce::String(); + const auto clientId = args.size() > 2 ? args[2].toString() : juce::String(); + const auto redirectUri = args.size() > 3 ? args[3].toString() : juce::String(); + runTone3000NativeTask( + [code, state, clientId, redirectUri] + { + juce::Logger::writeToLog("TONE3000 bridge: exchangeOAuthCode started"); + auto result = exchangeTone3000OAuthCode(code, state, clientId, redirectUri); + juce::Logger::writeToLog("TONE3000 bridge: exchangeOAuthCode finished"); + return result; + }, + std::move(completion)); + }) + .withNativeFunction ("refreshTONE3000Auth", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + const auto clientId = args.size() > 0 ? args[0].toString() : juce::String(); + runTone3000NativeTask( + [clientId] + { + juce::Logger::writeToLog("TONE3000 bridge: refreshAuth started"); + auto result = refreshTone3000Auth(clientId); + juce::Logger::writeToLog("TONE3000 bridge: refreshAuth finished"); + return result; + }, + std::move(completion)); + }) + .withNativeFunction ("getTONE3000AuthStatus", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + juce::ignoreUnused(args); + runTone3000NativeTask( + [] { return makeTone3000AuthStatus(); }, + std::move(completion)); + }) + .withNativeFunction ("clearTONE3000Auth", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + juce::ignoreUnused(args); + runTone3000NativeTask( + [] { return clearTone3000Auth(); }, + std::move(completion)); + }) + .withNativeFunction ("getNAMLibraryInfo", [] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + juce::ignoreUnused(args); + completion(makeNAMLibraryInfo()); + }) + .withNativeFunction ("inspectNAMAsset", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + const auto filePath = args.size() > 0 ? args[0].toString() : juce::String(); + runTone3000NativeTask( + [filePath] + { + #if JUCE_WINDOWS + ::SetThreadPriority( + ::GetCurrentThread(), + THREAD_PRIORITY_BELOW_NORMAL); + #endif + return inspectNAMAssetFile(filePath); + }, + std::move(completion)); + }) + .withNativeFunction ("findNAMAssetInDirectory", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + const auto directoryPath = args.size() > 0 ? args[0].toString() : juce::String(); + const auto expectedFileName = args.size() > 1 ? args[1].toString() : juce::String(); + const auto checksum = args.size() > 2 ? args[2].toString() : juce::String(); + const auto fileSizeBytes = args.size() > 3 ? static_cast<juce::int64>(static_cast<double>(args[3])) : 0; + const auto slot = args.size() > 4 ? args[4].toString().trim().toLowerCase() : juce::String("amp"); + runTone3000NativeTask( + [directoryPath, expectedFileName, checksum, fileSizeBytes, slot] + { + return findNAMAssetInDirectory( + directoryPath, + expectedFileName, + checksum, + fileSizeBytes, + slot); + }, + std::move(completion)); + }) + .withNativeFunction ("getNAMCatalog", [] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + juce::ignoreUnused(args); + completion(parseJsonFileOrDefault(getOpenStudioNAMCatalogJson(), "tones")); + }) + .withNativeFunction ("refreshNAMCatalog", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + const auto options = args.size() > 0 ? args[0] : juce::var(); + runTone3000NativeTask( + [options] + { + return refreshNAMCatalogFromUpdater(options); + }, + std::move(completion)); + }) + .withNativeFunction ("searchTONE3000NAM", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + const auto options = args.size() > 0 ? args[0] : juce::var(); + runTone3000NativeTask( + [options] + { + juce::Logger::writeToLog("TONE3000 bridge: searchNAM started"); + auto result = searchTone3000NAM(options); + juce::Logger::writeToLog("TONE3000 bridge: searchNAM finished"); + return result; + }, + std::move(completion)); + }) + .withNativeFunction ("runTONE3000AuthenticatedQA", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + juce::ignoreUnused(args); + runTone3000NativeTask( + [] { return runTone3000AuthenticatedQA(); }, + std::move(completion)); + }) + .withNativeFunction ("getTONE3000ToneDetail", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + const int toneId = args.size() > 0 ? static_cast<int>(args[0]) : 0; + const auto architecture = args.size() > 1 ? args[1].toString() : juce::String(); + runTone3000NativeTask( + [toneId, architecture] + { + juce::Logger::writeToLog("TONE3000 bridge: toneDetail started toneId=" + juce::String(toneId)); + auto result = getTone3000ToneDetail(toneId, architecture); + juce::Logger::writeToLog("TONE3000 bridge: toneDetail finished toneId=" + juce::String(toneId)); + return result; + }, + std::move(completion)); + }) + .withNativeFunction ("getNAMLibrary", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + juce::ignoreUnused(args); + runTone3000NativeTask( + [] + { + juce::Logger::writeToLog("TONE3000 bridge: getNAMLibrary started"); + auto result = refreshNAMLibraryManifest(true); + juce::Logger::writeToLog("TONE3000 bridge: getNAMLibrary finished"); + return result; + }, + std::move(completion)); + }) + .withNativeFunction ("installNAMModel", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + if (args.size() < 1) + { + juce::DynamicObject::Ptr result = new juce::DynamicObject(); + result->setProperty("success", false); + result->setProperty("error", "Missing NAM model metadata"); + completion(juce::var(result.get())); + return; + } + const auto modelPayload = args[0]; + const auto optionsPayload = args.size() > 1 ? args[1] : juce::var(); + runTone3000NativeTask( + [modelPayload, optionsPayload] + { + bool previewMode = false; + if (optionsPayload.isString()) + { + const auto options = juce::JSON::parse(optionsPayload.toString()); + if (auto* object = options.getDynamicObject()) + previewMode = object->getProperty("mode").toString() == "preview"; + } + else if (auto* object = optionsPayload.getDynamicObject()) + { + previewMode = object->getProperty("mode").toString() == "preview"; + } + + juce::Logger::writeToLog("TONE3000 bridge: installNAMModel started mode=" + juce::String(previewMode ? "preview" : "library")); + auto result = installNAMModelFromMetadata(modelPayload, previewMode); + juce::Logger::writeToLog("TONE3000 bridge: installNAMModel finished"); + return result; + }, + std::move(completion)); + }) + .withNativeFunction ("commitNAMPreviewTone", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + const auto recordPayload = args.size() > 0 ? args[0] : juce::var(); + const auto metadataPayload = args.size() > 1 ? args[1] : juce::var(); + const auto rackStatePayload = args.size() > 2 ? args[2] : juce::var(); + runTone3000NativeTask( + [recordPayload, metadataPayload, rackStatePayload] + { + juce::Logger::writeToLog("TONE3000 bridge: commitNAMPreviewTone started"); + auto result = commitNAMPreviewToneToLibrary(recordPayload, metadataPayload, rackStatePayload); + juce::Logger::writeToLog("TONE3000 bridge: commitNAMPreviewTone finished"); + return result; + }, + std::move(completion)); + }) + .withNativeFunction ("discardNAMPreview", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + const auto recordPayload = args.size() > 0 ? args[0] : juce::var(); + const auto rackAddressPayload = args.size() > 1 ? args[1] : juce::var(); + juce::Component::SafePointer<MainComponent> safeThis(this); + builtInStateMutationPool.addJob([safeThis, recordPayload, rackAddressPayload, completion]() mutable { + if (safeThis == nullptr) + return; + + auto result = safeThis->discardNAMPreviewIfUnused(recordPayload, rackAddressPayload); + juce::MessageManager::callAsync([safeThis, completion, result]() { + if (safeThis != nullptr) + completion(result); + }); + }); + }) + .withNativeFunction ("cleanupNAMPreviews", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + const double maxAgeHours = args.size() > 0 ? static_cast<double>(args[0]) : 24.0; + runTone3000NativeTask( + [maxAgeHours] + { + return cleanupNAMPreviewFiles(maxAgeHours); + }, + std::move(completion)); + }) + .withNativeFunction ("setNAMModelFavorite", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + const int modelId = args.size() > 0 ? static_cast<int>(args[0]) : 0; + const auto localPath = args.size() > 1 ? args[1].toString() : juce::String(); + const bool favorite = args.size() > 2 && static_cast<bool>(args[2]); + runTone3000NativeTask( + [modelId, localPath, favorite] + { + return setNAMLibraryFavorite( + modelId, localPath, favorite); + }, + std::move(completion)); + }) + .withNativeFunction ("removeNAMModel", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + const int modelId = args.size() > 0 ? static_cast<int>(args[0]) : 0; + const auto localPath = args.size() > 1 ? args[1].toString() : juce::String(); + const bool deleteLocalFile = args.size() > 2 && static_cast<bool>(args[2]); + runTone3000NativeTask( + [modelId, localPath, deleteLocalFile] + { + return removeNAMModelFromLibrary( + modelId, + localPath, + deleteLocalFile); + }, + std::move(completion)); + }) + .withNativeFunction ("loadNAMModelIntoRack", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + if (args.size() < 5) + { + completion(false); + return; + } + + const auto trackId = args[0].toString(); + const auto chainType = args[1].toString(); + const int fxIndex = static_cast<int>(args[2]); + const auto slot = args[3].toString().trim().toLowerCase(); + const auto localPath = args[4].toString(); + if (slot != "pedal" && slot != "amp" && slot != "cab") + { + completion(false); + return; + } + + juce::StringArray mutationSlots; + mutationSlots.add(slot); + std::vector<std::pair<juce::String, juce::uint64>> mutationRequests; + const auto topologyGeneration = beginNAMModelMutationRequests( + trackId, chainType, fxIndex, mutationSlots, mutationRequests); + const auto requestGeneration = mutationRequests.front().second; + juce::Component::SafePointer<MainComponent> safeThis(this); + builtInStateMutationPool.addJob([safeThis, trackId, chainType, fxIndex, slot, localPath, requestGeneration, topologyGeneration, completion]() mutable { + if (safeThis == nullptr) + return; + + const auto completeSafely = [safeThis, completion](bool result) { + juce::MessageManager::callAsync([safeThis, completion, result]() { + if (safeThis != nullptr) + completion(result); + }); + }; + + if (! isNAMRackTopologyCurrent(topologyGeneration)) + { + juce::Logger::writeToLog( + "TONE3000 bridge: skipped NAM model request after FX topology changed slot=" + slot); + completeSafely(false); + return; + } + + if (! safeThis->isNAMModelMutationRequestCurrent(trackId, chainType, fxIndex, slot, requestGeneration)) + { + juce::Logger::writeToLog("TONE3000 bridge: skipped superseded NAM model request slot=" + slot); + completeSafely(false); + return; + } + + juce::Logger::writeToLog("TONE3000 bridge: loadNAMModelIntoRack started slot=" + slot); + juce::DynamicObject::Ptr state = new juce::DynamicObject(); + if (slot == "pedal") + { + if (localPath.isNotEmpty()) + { + state->setProperty("pedalModelPath", localPath); + // A fresh user-selected NAM should publish its + // highest-fidelity graph. Explicit preset/project + // recalls still carry and preserve their saved size. + state->setProperty("pedalModelSize", 1.0); + } + else + state->setProperty("clearPedalModel", true); + } + else if (slot == "cab") + { + if (localPath.isNotEmpty()) + state->setProperty("cabIRPath", localPath); + else + state->setProperty("clearCabIR", true); + } + else + { + if (localPath.isNotEmpty()) + { + state->setProperty("ampModelPath", localPath); + state->setProperty("ampModelSize", 1.0); + } + else + state->setProperty("clearAmpModel", true); + } + + const auto publicationLeaseFactory = [safeThis, + trackId, + chainType, + fxIndex, + slot, + requestGeneration, + topologyGeneration]() + { + if (safeThis == nullptr) + return std::shared_ptr<void>(); + std::vector<std::pair<juce::String, juce::uint64>> requests { + { slot, requestGeneration } + }; + return safeThis->acquireNAMModelMutationPublicationLease( + trackId, chainType, fxIndex, requests, topologyGeneration); + }; + const bool applied = safeThis->audioEngine.setBuiltInPluginState( + trackId, + chainType, + fxIndex, + juce::JSON::toString(juce::var(state.get()), false), + publicationLeaseFactory); + const bool supersededAfterPublish = ! safeThis->isNAMModelMutationRequestCurrent( + trackId, chainType, fxIndex, slot, requestGeneration); + const bool result = applied; + juce::Logger::writeToLog("TONE3000 bridge: loadNAMModelIntoRack finished slot=" + slot + + " result=" + juce::String(result ? "true" : "false") + + (supersededAfterPublish + ? juce::String(" supersededAfterPublish=true") + : juce::String())); + completeSafely(result); + }); }) .withNativeFunction ("browseForFile", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { const auto title = args.size() > 0 && args[0].isString() @@ -2601,6 +10926,7 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, if (!lowerPath.endsWith(preferredExtension) && !lowerPath.endsWith(".s13") && !lowerPath.endsWith(".s13preset") + && !lowerPath.endsWith(".s13nampreset") && !lowerPath.endsWith(".s13theme")) { path += preferredExtension; @@ -2642,19 +10968,27 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, // Save project JSON to file // Args: [filePath, jsonContent] if (args.size() == 2 && args[0].isString() && args[1].isString()) { - juce::String filePath = args[0].toString(); - juce::String jsonContent = args[1].toString(); - - juce::File file(filePath); - bool success = file.replaceWithText(jsonContent); - - if (success) { - juce::Logger::writeToLog("Project saved to: " + filePath); - } else { - juce::Logger::writeToLog("Failed to save project to: " + filePath); - } - - completion(success); + const juce::String filePath = args[0].toString(); + const juce::String jsonContent = args[1].toString(); + std::thread( + [filePath, jsonContent, completion]() mutable + { + #if JUCE_WINDOWS + ::SetThreadPriority( + ::GetCurrentThread(), + THREAD_PRIORITY_BELOW_NORMAL); + #endif + const bool success = + juce::File(filePath) + .replaceWithText( + jsonContent); + juce::MessageManager::callAsync( + [completion, success]() + { + completion(success); + }); + }) + .detach(); } else { completion(false); } @@ -2731,12 +11065,68 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, // Set plugin state from base64 string // Args: [trackId, fxIndex, isInputFX, base64State] if (args.size() == 4) { - juce::String trackId = args[0].toString(); - int fxIndex = args[1]; - bool isInputFX = args[2]; - juce::String base64State = args[3].toString(); - bool success = audioEngine.setPluginState(trackId, fxIndex, isInputFX, base64State); - completion(success); + const auto trackId = args[0].toString(); + const auto fxIndex = static_cast<int>(args[1]); + const auto isInputFX = static_cast<bool>(args[2]); + const auto base64State = args[3].toString(); + if (! audioEngine.isNAMRackPlugin(trackId, fxIndex, isInputFX)) + { + completion(audioEngine.setPluginState( + trackId, fxIndex, isInputFX, base64State)); + return; + } + + const auto chainType = isInputFX + ? juce::String("input") : juce::String("track"); + std::vector<std::pair<juce::String, juce::uint64>> namMutationRequests; + const auto topologyGeneration = beginNAMModelMutationRequests( + trackId, chainType, fxIndex, + { "pedal", "amp", "cab" }, namMutationRequests); + juce::Component::SafePointer<MainComponent> safeThis(this); + builtInStateMutationPool.addJob([ + safeThis, trackId, chainType, fxIndex, isInputFX, + base64State, namMutationRequests, topologyGeneration, + completion]() mutable { + if (safeThis == nullptr) + return; + + bool stillCurrent = isNAMRackTopologyCurrent(topologyGeneration); + for (const auto& request : namMutationRequests) + { + stillCurrent = stillCurrent + && safeThis->isNAMModelMutationRequestCurrent( + trackId, chainType, fxIndex, + request.first, request.second); + } + if (! stillCurrent) + { + juce::MessageManager::callAsync([safeThis, completion]() mutable { + if (safeThis != nullptr) + completion(false); + }); + return; + } + + const auto publicationLeaseFactory = [ + safeThis, trackId, chainType, fxIndex, + namMutationRequests, topologyGeneration]() + { + return safeThis != nullptr + ? safeThis->acquireNAMModelMutationPublicationLease( + trackId, chainType, fxIndex, + namMutationRequests, topologyGeneration) + : std::shared_ptr<void>(); + }; + const bool applied = safeThis->audioEngine.setPluginState( + trackId, fxIndex, isInputFX, base64State, + publicationLeaseFactory); + const bool result = applied; + juce::MessageManager::callAsync([ + safeThis, completion, result]() mutable { + if (safeThis != nullptr) + completion(result); + }); + }); } else { completion(false); } @@ -2756,10 +11146,60 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, // Set master FX plugin state from base64 // Args: [fxIndex, base64State] if (args.size() == 2) { - int fxIndex = args[0]; - juce::String base64State = args[1].toString(); - bool success = audioEngine.setMasterPluginState(fxIndex, base64State); - completion(success); + const auto fxIndex = static_cast<int>(args[0]); + const auto base64State = args[1].toString(); + if (! audioEngine.isMasterNAMRackPlugin(fxIndex)) + { + completion(audioEngine.setMasterPluginState(fxIndex, base64State)); + return; + } + + std::vector<std::pair<juce::String, juce::uint64>> namMutationRequests; + const auto topologyGeneration = beginNAMModelMutationRequests( + {}, "master", fxIndex, + { "pedal", "amp", "cab" }, namMutationRequests); + juce::Component::SafePointer<MainComponent> safeThis(this); + builtInStateMutationPool.addJob([ + safeThis, fxIndex, base64State, namMutationRequests, + topologyGeneration, completion]() mutable { + if (safeThis == nullptr) + return; + + bool stillCurrent = isNAMRackTopologyCurrent(topologyGeneration); + for (const auto& request : namMutationRequests) + { + stillCurrent = stillCurrent + && safeThis->isNAMModelMutationRequestCurrent( + {}, "master", fxIndex, + request.first, request.second); + } + if (! stillCurrent) + { + juce::MessageManager::callAsync([safeThis, completion]() mutable { + if (safeThis != nullptr) + completion(false); + }); + return; + } + + const auto publicationLeaseFactory = [ + safeThis, fxIndex, namMutationRequests, + topologyGeneration]() + { + return safeThis != nullptr + ? safeThis->acquireNAMModelMutationPublicationLease( + {}, "master", fxIndex, + namMutationRequests, topologyGeneration) + : std::shared_ptr<void>(); + }; + const bool result = safeThis->audioEngine.setMasterPluginState( + fxIndex, base64State, publicationLeaseFactory); + juce::MessageManager::callAsync([ + safeThis, completion, result]() mutable { + if (safeThis != nullptr) + completion(result); + }); + }); } else { completion(false); } @@ -2864,21 +11304,38 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, tempDir.createDirectory(); extractedFile = tempDir.getChildFile(audioFile.getFileNameWithoutExtension() + "_audio.wav"); - // Find FFmpeg: check next to executable first, then fall back to PATH - juce::File appDir = juce::File::getSpecialLocation(juce::File::currentExecutableFile).getParentDirectory(); - juce::File bundledFFmpeg = appDir.getChildFile("ffmpeg.exe"); - juce::String ffmpegPath = bundledFFmpeg.existsAsFile() ? bundledFFmpeg.getFullPathName() : "ffmpeg"; - - // Run FFmpeg to extract audio as WAV - juce::String cmd = "\"" + ffmpegPath + "\" -y -i \"" + filePath + "\" -vn -acodec pcm_s16le -ar 44100 -ac 2 \"" + extractedFile.getFullPathName() + "\""; + const auto ffmpegExecutable = + OpenStudioFFmpeg::findExecutable(); + juce::StringArray processArgs; + processArgs.add( + ffmpegExecutable.getFullPathName()); + processArgs.add("-y"); + processArgs.add("-i"); + processArgs.add(filePath); + processArgs.add("-vn"); + processArgs.add("-acodec"); + processArgs.add("pcm_s16le"); + processArgs.add("-ar"); + processArgs.add("44100"); + processArgs.add("-ac"); + processArgs.add("2"); + processArgs.add( + extractedFile.getFullPathName()); juce::ChildProcess ffmpeg; - bool started = ffmpeg.start(cmd); + const bool started = + ffmpegExecutable.existsAsFile() + && ffmpeg.start(processArgs); if (started) { // Wait up to 60 seconds for extraction - bool finished = ffmpeg.waitForProcessToFinish(60000); - auto exitCode = ffmpeg.getExitCode(); + const bool finished = + ffmpeg.waitForProcessToFinish(60000); + if (! finished) + ffmpeg.kill(); + const auto exitCode = finished + ? ffmpeg.getExitCode() + : -1; if (finished && exitCode == 0 && extractedFile.existsAsFile()) { juce::Logger::writeToLog("importMediaFile: FFmpeg extracted audio to: " + extractedFile.getFullPathName()); @@ -3028,6 +11485,7 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, sampleRate, bitDepth, channels, normalizeArg, addTail, tailLength, includeMetronome, completion = std::make_shared<juce::WebBrowserComponent::NativeFunctionCompletion>(std::move(completion))]() { + const juce::ScopedLock processMutationLock(namModelMutationStateLock); bool success = audioEngine.renderProject( source, startTime, endTime, filePathArg, format, sampleRate, bitDepth, channels, normalizeArg, addTail, tailLength, @@ -3208,6 +11666,7 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, sampleRate, bitDepth, channels, normalizeArg, addTail, tailLength, ditherType, includeMetronome, completion = std::make_shared<juce::WebBrowserComponent::NativeFunctionCompletion>(std::move(completion))]() { + const juce::ScopedLock processMutationLock(namModelMutationStateLock); bool success = audioEngine.renderProjectWithDither( source, startTime, endTime, filePathArg, format, sampleRate, bitDepth, channels, normalizeArg, addTail, tailLength, ditherType, @@ -3649,7 +12108,7 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, juce::File outFile(outputPath); outFile.deleteFile(); - std::unique_ptr<juce::FileOutputStream> stream(outFile.createOutputStream()); + std::unique_ptr<juce::OutputStream> stream(outFile.createOutputStream()); if (!stream) { juce::MessageManager::callAsync([completion]() { (*completion)(false); }); @@ -3660,16 +12119,18 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, int outSampleRate = targetSampleRate > 0 ? targetSampleRate : (int)reader->sampleRate; int outBitDepth = targetBitDepth > 0 ? targetBitDepth : (int)reader->bitsPerSample; - std::unique_ptr<juce::AudioFormatWriter> writer(outputFormat->createWriterFor( - stream.get(), outSampleRate, (unsigned int)outChannels, outBitDepth, {}, 0)); + auto writer = outputFormat->createWriterFor( + stream, + juce::AudioFormatWriterOptions() + .withSampleRate(outSampleRate) + .withNumChannels(outChannels) + .withBitsPerSample(outBitDepth)); if (!writer) { juce::MessageManager::callAsync([completion]() { (*completion)(false); }); return; } - stream.release(); // Writer takes ownership - // Read and write in blocks const int blockSize = 8192; juce::AudioBuffer<float> buffer(outChannels, blockSize); @@ -3716,11 +12177,8 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, inputFile.getFileNameWithoutExtension() + "_ts_" + timestamp + inputFile.getFileExtension() ); - // Find FFmpeg - auto exeDir = juce::File::getSpecialLocation(juce::File::currentExecutableFile).getParentDirectory(); - juce::File ffmpeg = exeDir.getChildFile("ffmpeg.exe"); - if (!ffmpeg.existsAsFile()) ffmpeg = exeDir.getChildFile("tools").getChildFile("ffmpeg.exe"); - if (!ffmpeg.existsAsFile()) ffmpeg = exeDir.getParentDirectory().getChildFile("tools").getChildFile("ffmpeg.exe"); + const auto ffmpeg = + OpenStudioFFmpeg::findExecutable(); if (!ffmpeg.existsAsFile()) { completion(juce::String()); return; @@ -3820,11 +12278,8 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, // Convert semitones to frequency ratio: ratio = 2^(semitones/12) double ratio = std::pow(2.0, semitones / 12.0); - // Find FFmpeg - auto exeDir = juce::File::getSpecialLocation(juce::File::currentExecutableFile).getParentDirectory(); - juce::File ffmpeg = exeDir.getChildFile("ffmpeg.exe"); - if (!ffmpeg.existsAsFile()) ffmpeg = exeDir.getChildFile("tools").getChildFile("ffmpeg.exe"); - if (!ffmpeg.existsAsFile()) ffmpeg = exeDir.getParentDirectory().getChildFile("tools").getChildFile("ffmpeg.exe"); + const auto ffmpeg = + OpenStudioFFmpeg::findExecutable(); if (!ffmpeg.existsAsFile()) { completion(juce::String()); return; @@ -4105,6 +12560,7 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, juce::String trackId = args[0].toString(); std::thread([this, trackId, completion = std::make_shared<juce::WebBrowserComponent::NativeFunctionCompletion>(std::move(completion))]() { + const juce::ScopedLock processMutationLock(namModelMutationStateLock); auto result = audioEngine.freezeTrack(trackId); juce::MessageManager::callAsync([completion, result]() { (*completion)(result); @@ -4129,6 +12585,8 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, // Args: [trackId, effectName, isInputFX?] if (args.size() >= 2 && args[0].isString() && args[1].isString()) { bool isInputFX = args.size() >= 3 && (bool)args[2]; + const juce::ScopedLock processMutationLock(namModelMutationStateLock); + invalidateNAMRackTopology(); bool ok = audioEngine.addTrackBuiltInFX(args[0].toString(), args[1].toString(), isInputFX); completion(juce::var(ok)); } else { @@ -4138,6 +12596,8 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, .withNativeFunction ("addMasterBuiltInFX", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { // Args: [effectName] if (args.size() >= 1 && args[0].isString()) { + const juce::ScopedLock processMutationLock(namModelMutationStateLock); + invalidateNAMRackTopology(); bool ok = audioEngine.addMasterBuiltInFX(args[0].toString()); completion(juce::var(ok)); } else { @@ -4564,6 +13024,15 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, closeMidiEditorWindow(sessionId, "close"); }); } + else if (windowRole == WindowRole::pluginEditor && windowCallbacks.closePluginEditorWindow) + { + auto closePluginEditorWindow = windowCallbacks.closePluginEditorWindow; + const auto sessionId = windowInstanceId.isNotEmpty() ? windowInstanceId : juce::String("default-plugin-editor"); + juce::MessageManager::callAsync([closePluginEditorWindow, sessionId]() + { + closePluginEditorWindow(sessionId, "close"); + }); + } else if (windowCallbacks.closeMixerWindow) { auto closeMixerWindow = windowCallbacks.closeMixerWindow; @@ -4713,6 +13182,36 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, else completion(juce::var()); }) + .withNativeFunction ("openBuiltInPluginEditorWindow", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + juce::String sessionId = windowInstanceId; + juce::var bounds; + if (args.size() > 0 && args[0].isString()) + sessionId = args[0].toString(); + if (args.size() > 1) + bounds = args[1]; + if (sessionId.isEmpty()) + sessionId = "default-plugin-editor"; + + const bool opened = windowCallbacks.openPluginEditorWindow ? windowCallbacks.openPluginEditorWindow(sessionId, bounds) : false; + completion(juce::var(opened)); + }) + .withNativeFunction ("closeBuiltInPluginEditorWindow", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + juce::String sessionId = args.size() > 0 && args[0].isString() ? args[0].toString() : windowInstanceId; + juce::String reason = args.size() > 1 && args[1].isString() ? args[1].toString() : "close"; + if (sessionId.isEmpty()) + sessionId = "default-plugin-editor"; + + const bool canClose = static_cast<bool>(windowCallbacks.closePluginEditorWindow); + completion(juce::var(canClose)); + if (canClose) + { + auto callback = windowCallbacks.closePluginEditorWindow; + juce::MessageManager::callAsync([callback, sessionId, reason]() + { + callback(sessionId, reason); + }); + } + }) .withNativeFunction ("publishAppCommand", [] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { const juce::var payload = args.size() > 0 ? args[0] : juce::var(); MainComponent::broadcastEventToRole(MainComponent::WindowRole::main, "appCommand", payload); @@ -4813,6 +13312,11 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, completion(false); } }) + .withNativeFunction ("getTrackDCOffset", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + completion(args.size() >= 1 + ? audioEngine.getTrackDCOffset(args[0].toString()) + : false); + }) // Clip Gain Envelope (Phase 18.10) .withNativeFunction ("setClipGainEnvelope", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { if (args.size() >= 3) { @@ -4825,7 +13329,18 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, // MIDI Learn (Phase 19.7) .withNativeFunction ("startMIDILearnForPlugin", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { if (args.size() >= 3) { - audioEngine.startMIDILearnForPlugin(args[0].toString(), static_cast<int>(args[1]), static_cast<int>(args[2])); + const bool isInputFX = args.size() > 3 && static_cast<bool>(args[3]); + audioEngine.startMIDILearnForPlugin(args[0].toString(), static_cast<int>(args[1]), static_cast<int>(args[2]), isInputFX); + completion(true); + } else { + completion(false); + } + }) + .withNativeFunction ("startBuiltInMIDILearn", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + if (args.size() >= 4) { + audioEngine.startMIDILearnForBuiltIn( + args[0].toString(), args[1].toString(), + static_cast<int>(args[2]), args[3].toString()); completion(true); } else { completion(false); @@ -4848,6 +13363,9 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, juce::ignoreUnused(args); completion(audioEngine.getMIDILearnMappings()); }) + .withNativeFunction ("setMIDILearnMappings", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + completion(args.size() > 0 && audioEngine.setMIDILearnMappings(args[0])); + }) // MIDI Import/Export (Phase 19.9) .withNativeFunction ("importMIDIFile", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { if (args.size() >= 1) { @@ -4912,10 +13430,10 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, auto suggestedName = juce::File::createLegalFileName( juce::File(args[0].toString()).getFileNameWithoutExtension()); if (suggestedName.isEmpty()) - suggestedName = "Studio13 MIDI Clip"; + suggestedName = "OpenStudio MIDI Clip"; auto dragDir = juce::File::getSpecialLocation(juce::File::tempDirectory) - .getChildFile("Studio13") + .getChildFile("OpenStudio") .getChildFile("MIDI Drag Exports"); dragDir.createDirectory(); @@ -4953,8 +13471,68 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, }) .withNativeFunction ("loadPluginPreset", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { if (args.size() >= 4) { - bool ok = audioEngine.loadPluginPreset(args[0].toString(), static_cast<int>(args[1]), (bool)args[2], args[3].toString()); - completion(ok); + const auto trackId = args[0].toString(); + const auto fxIndex = static_cast<int>(args[1]); + const auto isInputFX = static_cast<bool>(args[2]); + const auto presetPath = args[3].toString(); + if (! audioEngine.isNAMRackPlugin(trackId, fxIndex, isInputFX)) + { + completion(audioEngine.loadPluginPreset( + trackId, fxIndex, isInputFX, presetPath)); + return; + } + + const auto chainType = isInputFX + ? juce::String("input") : juce::String("track"); + std::vector<std::pair<juce::String, juce::uint64>> namMutationRequests; + const auto topologyGeneration = beginNAMModelMutationRequests( + trackId, chainType, fxIndex, + { "pedal", "amp", "cab" }, namMutationRequests); + juce::Component::SafePointer<MainComponent> safeThis(this); + builtInStateMutationPool.addJob([ + safeThis, trackId, chainType, fxIndex, isInputFX, + presetPath, namMutationRequests, topologyGeneration, + completion]() mutable { + if (safeThis == nullptr) + return; + + bool stillCurrent = isNAMRackTopologyCurrent(topologyGeneration); + for (const auto& request : namMutationRequests) + { + stillCurrent = stillCurrent + && safeThis->isNAMModelMutationRequestCurrent( + trackId, chainType, fxIndex, + request.first, request.second); + } + if (! stillCurrent) + { + juce::MessageManager::callAsync([safeThis, completion]() mutable { + if (safeThis != nullptr) + completion(false); + }); + return; + } + + const auto publicationLeaseFactory = [ + safeThis, trackId, chainType, fxIndex, + namMutationRequests, topologyGeneration]() + { + return safeThis != nullptr + ? safeThis->acquireNAMModelMutationPublicationLease( + trackId, chainType, fxIndex, + namMutationRequests, topologyGeneration) + : std::shared_ptr<void>(); + }; + const bool applied = safeThis->audioEngine.loadPluginPreset( + trackId, fxIndex, isInputFX, presetPath, + publicationLeaseFactory); + const bool result = applied; + juce::MessageManager::callAsync([ + safeThis, completion, result]() mutable { + if (safeThis != nullptr) + completion(result); + }); + }); } else { completion(false); } @@ -4978,8 +13556,68 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, }) .withNativeFunction ("loadPluginABState", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { if (args.size() >= 4) { - bool ok = audioEngine.loadPluginABState(args[0].toString(), static_cast<int>(args[1]), (bool)args[2], args[3].toString()); - completion(ok); + const auto trackId = args[0].toString(); + const auto fxIndex = static_cast<int>(args[1]); + const auto isInputFX = static_cast<bool>(args[2]); + const auto slot = args[3].toString(); + if (! audioEngine.isNAMRackPlugin(trackId, fxIndex, isInputFX)) + { + completion(audioEngine.loadPluginABState( + trackId, fxIndex, isInputFX, slot)); + return; + } + + const auto chainType = isInputFX + ? juce::String("input") : juce::String("track"); + std::vector<std::pair<juce::String, juce::uint64>> namMutationRequests; + const auto topologyGeneration = beginNAMModelMutationRequests( + trackId, chainType, fxIndex, + { "pedal", "amp", "cab" }, namMutationRequests); + juce::Component::SafePointer<MainComponent> safeThis(this); + builtInStateMutationPool.addJob([ + safeThis, trackId, chainType, fxIndex, isInputFX, + slot, namMutationRequests, topologyGeneration, + completion]() mutable { + if (safeThis == nullptr) + return; + + bool stillCurrent = isNAMRackTopologyCurrent(topologyGeneration); + for (const auto& request : namMutationRequests) + { + stillCurrent = stillCurrent + && safeThis->isNAMModelMutationRequestCurrent( + trackId, chainType, fxIndex, + request.first, request.second); + } + if (! stillCurrent) + { + juce::MessageManager::callAsync([safeThis, completion]() mutable { + if (safeThis != nullptr) + completion(false); + }); + return; + } + + const auto publicationLeaseFactory = [ + safeThis, trackId, chainType, fxIndex, + namMutationRequests, topologyGeneration]() + { + return safeThis != nullptr + ? safeThis->acquireNAMModelMutationPublicationLease( + trackId, chainType, fxIndex, + namMutationRequests, topologyGeneration) + : std::shared_ptr<void>(); + }; + const bool applied = safeThis->audioEngine.loadPluginABState( + trackId, fxIndex, isInputFX, slot, + publicationLeaseFactory); + const bool result = applied; + juce::MessageManager::callAsync([ + safeThis, completion, result]() mutable { + if (safeThis != nullptr) + completion(result); + }); + }); } else { completion(false); } @@ -5041,6 +13679,11 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, completion(false); } }) + .withNativeFunction ("getChannelStripEQEnabled", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + completion(args.size() >= 1 + ? audioEngine.getChannelStripEQEnabled(args[0].toString()) + : false); + }) .withNativeFunction ("setChannelStripEQParam", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { if (args.size() >= 3) { audioEngine.setChannelStripEQParam( @@ -5114,7 +13757,8 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, obj->setProperty ("started", true); completion (juce::var (obj.release())); - pitchAnalysisPool.addJob ([this, trackId, clipId, analysisGeneration]() { + juce::Component::SafePointer<MainComponent> safeThis(this); + pitchAnalysisPool.addJob ([this, safeThis, trackId, clipId, analysisGeneration]() { juce::Logger::writeToLog ("PitchAnalysis: Starting for track=" + trackId + " clip=" + clipId); auto shouldCancelAnalysis = [this, analysisGeneration]() { @@ -5147,7 +13791,10 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, lastPitchAnalysisResult = result; } - juce::MessageManager::callAsync ([this, clipId, noteCount, hasResult, cancelled]() { + juce::MessageManager::callAsync ([safeThis, clipId, noteCount, hasResult, cancelled]() { + if (safeThis == nullptr || safeThis->secondaryWindowClosing) + return; + auto notification = std::make_unique<juce::DynamicObject>(); notification->setProperty ("clipId", clipId); notification->setProperty ("noteCount", noteCount); @@ -5155,7 +13802,7 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, notification->setProperty ("cancelled", cancelled); juce::Logger::writeToLog ("PitchAnalysis: Emitting lightweight event (noteCount=" + juce::String(noteCount) + ")"); - webView.emitEventIfBrowserIsVisible ("pitchAnalysisComplete", + safeThis->webView.emitEventIfBrowserIsVisible ("pitchAnalysisComplete", juce::var (notification.release())); }); }); @@ -5194,7 +13841,8 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, obj->setProperty ("started", true); completion (juce::var (obj.release())); - pitchAnalysisPool.addJob ([this, filePath, offset, duration, clipId, analysisGeneration]() { + juce::Component::SafePointer<MainComponent> safeThis(this); + pitchAnalysisPool.addJob ([this, safeThis, filePath, offset, duration, clipId, analysisGeneration]() { juce::Logger::writeToLog ("PitchAnalysis: Starting for " + filePath + " offset=" + juce::String(offset) + " dur=" + juce::String(duration)); auto shouldCancelAnalysis = [this, analysisGeneration]() @@ -5229,7 +13877,10 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, lastPitchAnalysisResult = result; } - juce::MessageManager::callAsync ([this, clipId, noteCount, hasResult, cancelled]() { + juce::MessageManager::callAsync ([safeThis, clipId, noteCount, hasResult, cancelled]() { + if (safeThis == nullptr || safeThis->secondaryWindowClosing) + return; + // Send lightweight notification with metadata only auto notification = std::make_unique<juce::DynamicObject>(); notification->setProperty ("clipId", clipId); @@ -5238,7 +13889,7 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, notification->setProperty ("cancelled", cancelled); juce::Logger::writeToLog ("PitchAnalysis: Emitting lightweight event (noteCount=" + juce::String(noteCount) + ")"); - webView.emitEventIfBrowserIsVisible ("pitchAnalysisComplete", + safeThis->webView.emitEventIfBrowserIsVisible ("pitchAnalysisComplete", juce::var (notification.release())); }); }); @@ -5355,7 +14006,8 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, pitchNoteHqPriorityGeneration.store (renderGeneration); const auto queuedAtMs = juce::Time::currentTimeMillis(); completion(true); - targetPool->addJob ([this, trackId, clipId, notes, frames, requestId, requestGroupId, globalFormantSemitones, windowStartSec, windowEndSec, renderMode, renderGeneration, isPreviewSegment, isNoteRender, queuedAtMs]() mutable { + juce::Component::SafePointer<MainComponent> safeThis(this); + targetPool->addJob ([this, safeThis, trackId, clipId, notes, frames, requestId, requestGroupId, globalFormantSemitones, windowStartSec, windowEndSec, renderMode, renderGeneration, isPreviewSegment, isNoteRender, queuedAtMs]() mutable { auto shouldCancel = [this, renderGeneration, requestGroupId, isPreviewSegment, isNoteRender]() { const juce::ScopedLock sl (pitchCorrectionJobLock); if (isPreviewSegment) @@ -5364,6 +14016,19 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, return noteRenderGeneration.load() != renderGeneration || activeNoteRenderRequestGroup != requestGroupId; return fullClipRenderGeneration.load() != renderGeneration || activeFullClipRequestGroup != requestGroupId; }; + auto guardedCommit = [this, renderGeneration, requestGroupId, isPreviewSegment, isNoteRender] + (const std::function<void()>& commit) { + const juce::ScopedLock sl (pitchCorrectionJobLock); + const bool isCurrent = isPreviewSegment + ? previewRenderGeneration.load() == renderGeneration && activePreviewRequestGroup == requestGroupId + : (isNoteRender + ? noteRenderGeneration.load() == renderGeneration && activeNoteRenderRequestGroup == requestGroupId + : fullClipRenderGeneration.load() == renderGeneration && activeFullClipRequestGroup == requestGroupId); + if (! isCurrent) + return false; + commit(); + return true; + }; logPitchEditorFormant ("job starting clip=" + clipId + " requestId=" + requestId + " requestGroupId=" + requestGroupId @@ -5373,7 +14038,7 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, const double jobStartDelayMs = static_cast<double> (juce::Time::currentTimeMillis() - queuedAtMs); auto result = shouldCancel() ? juce::var() - : audioEngine.applyPitchCorrection(trackId, clipId, notes, frames, globalFormantSemitones, windowStartSec, windowEndSec, renderMode, shouldCancel, jobStartDelayMs, isPreviewSegment ? renderGeneration : 0); + : audioEngine.applyPitchCorrection(trackId, clipId, notes, frames, globalFormantSemitones, windowStartSec, windowEndSec, renderMode, shouldCancel, jobStartDelayMs, isPreviewSegment ? renderGeneration : 0, guardedCommit); if (isNoteRender && pitchNoteHqPriorityGeneration.load() == renderGeneration) pitchNoteHqPriorityActive.store (false); bool success = result.isObject() @@ -5792,7 +14457,10 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, + " previewCoverageEnd=" + juce::String(previewCoverageEndSec, 3) + " restored=" + juce::String(restored ? "true" : "false") + " outputFile=" + outputFile); - juce::MessageManager::callAsync ([this, clipId, success, outputFile, requestId, restored, renderMode, cancelled, swapDeferred, previewCoverageStartSec, previewCoverageEndSec, candidateCoverageStartSec, candidateCoverageEndSec, requestedRendererBranch, actualRendererBranch, pitchOnlyRecoveryPath, pitchOnlyNeutralFormantUsed, processingMode, formantCurveUsed, explicitFormantRequested, pitchOnlyFormantSuppressed, usedFallback, fallbackReason, hardFailReason, pitchRenderStrategy, phraseHqRenderUsed, phraseHqExpandedToFullClip, phraseHqStartSec, phraseHqEndSec, pitchRenderProductPath, pitchRenderBackendId, pitchRenderBackendVersion, pitchRenderBackendFailureCode, pitchRenderBackendCapabilities, pitchRenderBackendDiagnostics, pitchRenderCommitPolicy, pitchRenderDryProtectedSamples, pitchRenderContextDurationSec, pitchRenderCommitDurationSec, pitchRenderJobStartDelayMs, pitchRenderDirection, downshiftFormantGuardUsed, downshiftFormantGuardAlpha, noteHqEffectiveStartSec, noteHqEffectiveEndSec, noteHqContextStartSec, noteHqContextEndSec, noteHqAudibleCommitStartSec, noteHqAudibleCommitEndSec, noteHqPreBodyDryProtectedSamples, noteHqEntryInsideBodyFadeMs, noteHqExitLeadInMs, noteHqEntryBridgeStartSec, noteHqEntryBridgeEndSec, noteHqEntryBridgeWetLagMs, noteHqEntryBridgeEnvelopeGainDb, noteHqEntryBridgeUsed, noteHqEntryTransientDryPreservedMs, pitchOnlyEntrySimpleHandoffUsed, pitchOnlyEntrySafeHandoffUsed, pitchOnlyEntryDryHoldMs, pitchOnlyEntrySafeBridgeMs, pitchOnlyEntryWetAlignmentMs, pitchOnlyEntryWetGainDb, pitchOnlyEntryWetVsDryRmsDb, pitchOnlyEntryEqualPowerBlendUsed, pitchOnlyEntryRmsContinuityUsed, pitchOnlyEntryRmsContinuityGainDb, pitchOnlyEntryRmsContinuityMs, pitchOnlyEntryPhaseSafeUsed, pitchOnlyEntryWetAlignmentAccepted, pitchOnlyEntryFirstCycleCorrelation, pitchOnlyEntryZeroCrossOffsetMs, pitchOnlyEntryBridgeGainRampDb, pitchOnlyDownshiftCoreEnvelopePassUsed, pitchOnlyDownshiftCoreRmsTrimDb, pitchOnlyDownshiftCoreEnvelopeMaxDb, pitchOnlyDownshiftCoreEnvelopeFrames, pitchOnlyEntryWetLagMs, pitchOnlyEntryBridgeDurationMs, pitchOnlyExitDryRestoreUsed, pitchOnlyExitDryRestoreStartSec, pitchOnlyExitDryRestoreEndSec, noteHqEditIslandCount, noteHqEditedNoteCount, noteHqEntryPitchHandoffUsed, noteHqEntryPitchHandoffStartSec, noteHqEntryPitchHandoffEndSec, noteHqEntryPitchHandoffPreMs, noteHqEntryPitchHandoffBodyMs, noteHqEntryPitchSlopeJumpStPerSec, noteHqEntryPitchAccelerationLimited, outputDurationSec, postApplyRouteStatus, appFinalCapture, appFinalBakedCapture, appFinalParityReport, appFinalRouteReportPath, appFinalBakedContextPath, appFinalPlaybackContextPath, appFinalParityReportPath, bridgeUsed, bridgeFallbackUsed, bridgeStartSec, bridgeLengthMs, bridgeAlignmentLagSamples, bridgeCorrelationScore, bridgeGainDeltaDb, bodyReplacementUsed, bodyReplacementFallbackUsed, entryLockStartSec, entryLockLengthMs, exitLockStartSec, renderedBodyStartSec, renderedBodyEndSec, islandNativeUsed, islandNativeFallbackUsed, islandRenderStartSec, islandRenderEndSec, transientMaskPeak, voicedCoreMaskPeak, hpssUsed, hpssFallbackUsed, harmonicMaskPeak, aperiodicMaskPeak, spectralEnvelopeCorrectionUsed, pitchOnlyCoreTimbreCorrectionUsed, pitchOnlyCoreEnvelopeMix, pitchOnlyCoreRmsTrimDb, pitchOnlyCoreEnvelopeLifter, pitchOnlyEntryTimbreCorrectionUsed, pitchOnlyEntryRmsTrimDb, pitchOnlyEntryTiltDb, pitchOnlyEntryHandoffUsed, pitchOnlyExitHandoffUsed, vocalSourceFilterUsed, vocalSourceFilterVoicedCoverage, vocalSourceFilterResidualMix, vocalSourceFilterFallbackUsed, vocalSourceFilterFallbackReason, vocalSourceFilterEntryDryMs, vocalSourceFilterExitDryMs, wsolaUsed, wsolaFallbackUsed, wsolaEntryLagSamples, wsolaExitLagSamples, wsolaCorrelationScore, phaseLockUsed, phaseLockFallbackUsed, phaseAlignedEntry, phaseAlignedExit, phasePeakCount, transitionHqUsed, transitionHqFallbackUsed, transitionStartSec, transitionEndSec, transitionTransientPeak, transitionVoicedCorePeak, transitionResidualPeak, transitionEnvelopeCorrectionUsed, engineV2Used, engineV2FallbackUsed, engineV2TransitionCount, engineV2TransitionStartSec, engineV2TransitionEndSec, engineV2HarmonicSupportPeak, engineV2ResidualSupportPeak, engineV2EnvelopeSupportPeak, transientBypassUsed, residualCarryUsed, cepstralCutoffUsed, engineV2FftSize, engineV2HopSize, immediateLeftNeighborUsed, immediateRightNeighborUsed, leftNeighborSamplesRendered, rightNeighborSamplesRendered, leftNeighborSmoothMs, rightNeighborSmoothMs, nonImmediateNeighborTouched, entryAlignmentOffsetMs, exitAlignmentOffsetMs, firstVoicedCyclesEntryUsed, firstVoicedCyclesExitUsed, v3TransitionPairUsed, v3ContinuousRenderUsed, v3EntryAnchorMs, v3ExitAnchorMs, v3FirstCyclesEntryCount, v3FirstCyclesExitCount, v3ShellDurationMs, v3BodyDurationMs, v3ResidualMix, v3FormantMode, v3NeighborLeftOverlapMs, v3NeighborRightOverlapMs]() { + juce::MessageManager::callAsync ([safeThis, clipId, success, outputFile, requestId, restored, renderMode, cancelled, swapDeferred, previewCoverageStartSec, previewCoverageEndSec, candidateCoverageStartSec, candidateCoverageEndSec, requestedRendererBranch, actualRendererBranch, pitchOnlyRecoveryPath, pitchOnlyNeutralFormantUsed, processingMode, formantCurveUsed, explicitFormantRequested, pitchOnlyFormantSuppressed, usedFallback, fallbackReason, hardFailReason, pitchRenderStrategy, phraseHqRenderUsed, phraseHqExpandedToFullClip, phraseHqStartSec, phraseHqEndSec, pitchRenderProductPath, pitchRenderBackendId, pitchRenderBackendVersion, pitchRenderBackendFailureCode, pitchRenderBackendCapabilities, pitchRenderBackendDiagnostics, pitchRenderCommitPolicy, pitchRenderDryProtectedSamples, pitchRenderContextDurationSec, pitchRenderCommitDurationSec, pitchRenderJobStartDelayMs, pitchRenderDirection, downshiftFormantGuardUsed, downshiftFormantGuardAlpha, noteHqEffectiveStartSec, noteHqEffectiveEndSec, noteHqContextStartSec, noteHqContextEndSec, noteHqAudibleCommitStartSec, noteHqAudibleCommitEndSec, noteHqPreBodyDryProtectedSamples, noteHqEntryInsideBodyFadeMs, noteHqExitLeadInMs, noteHqEntryBridgeStartSec, noteHqEntryBridgeEndSec, noteHqEntryBridgeWetLagMs, noteHqEntryBridgeEnvelopeGainDb, noteHqEntryBridgeUsed, noteHqEntryTransientDryPreservedMs, pitchOnlyEntrySimpleHandoffUsed, pitchOnlyEntrySafeHandoffUsed, pitchOnlyEntryDryHoldMs, pitchOnlyEntrySafeBridgeMs, pitchOnlyEntryWetAlignmentMs, pitchOnlyEntryWetGainDb, pitchOnlyEntryWetVsDryRmsDb, pitchOnlyEntryEqualPowerBlendUsed, pitchOnlyEntryRmsContinuityUsed, pitchOnlyEntryRmsContinuityGainDb, pitchOnlyEntryRmsContinuityMs, pitchOnlyEntryPhaseSafeUsed, pitchOnlyEntryWetAlignmentAccepted, pitchOnlyEntryFirstCycleCorrelation, pitchOnlyEntryZeroCrossOffsetMs, pitchOnlyEntryBridgeGainRampDb, pitchOnlyDownshiftCoreEnvelopePassUsed, pitchOnlyDownshiftCoreRmsTrimDb, pitchOnlyDownshiftCoreEnvelopeMaxDb, pitchOnlyDownshiftCoreEnvelopeFrames, pitchOnlyEntryWetLagMs, pitchOnlyEntryBridgeDurationMs, pitchOnlyExitDryRestoreUsed, pitchOnlyExitDryRestoreStartSec, pitchOnlyExitDryRestoreEndSec, noteHqEditIslandCount, noteHqEditedNoteCount, noteHqEntryPitchHandoffUsed, noteHqEntryPitchHandoffStartSec, noteHqEntryPitchHandoffEndSec, noteHqEntryPitchHandoffPreMs, noteHqEntryPitchHandoffBodyMs, noteHqEntryPitchSlopeJumpStPerSec, noteHqEntryPitchAccelerationLimited, outputDurationSec, postApplyRouteStatus, appFinalCapture, appFinalBakedCapture, appFinalParityReport, appFinalRouteReportPath, appFinalBakedContextPath, appFinalPlaybackContextPath, appFinalParityReportPath, bridgeUsed, bridgeFallbackUsed, bridgeStartSec, bridgeLengthMs, bridgeAlignmentLagSamples, bridgeCorrelationScore, bridgeGainDeltaDb, bodyReplacementUsed, bodyReplacementFallbackUsed, entryLockStartSec, entryLockLengthMs, exitLockStartSec, renderedBodyStartSec, renderedBodyEndSec, islandNativeUsed, islandNativeFallbackUsed, islandRenderStartSec, islandRenderEndSec, transientMaskPeak, voicedCoreMaskPeak, hpssUsed, hpssFallbackUsed, harmonicMaskPeak, aperiodicMaskPeak, spectralEnvelopeCorrectionUsed, pitchOnlyCoreTimbreCorrectionUsed, pitchOnlyCoreEnvelopeMix, pitchOnlyCoreRmsTrimDb, pitchOnlyCoreEnvelopeLifter, pitchOnlyEntryTimbreCorrectionUsed, pitchOnlyEntryRmsTrimDb, pitchOnlyEntryTiltDb, pitchOnlyEntryHandoffUsed, pitchOnlyExitHandoffUsed, vocalSourceFilterUsed, vocalSourceFilterVoicedCoverage, vocalSourceFilterResidualMix, vocalSourceFilterFallbackUsed, vocalSourceFilterFallbackReason, vocalSourceFilterEntryDryMs, vocalSourceFilterExitDryMs, wsolaUsed, wsolaFallbackUsed, wsolaEntryLagSamples, wsolaExitLagSamples, wsolaCorrelationScore, phaseLockUsed, phaseLockFallbackUsed, phaseAlignedEntry, phaseAlignedExit, phasePeakCount, transitionHqUsed, transitionHqFallbackUsed, transitionStartSec, transitionEndSec, transitionTransientPeak, transitionVoicedCorePeak, transitionResidualPeak, transitionEnvelopeCorrectionUsed, engineV2Used, engineV2FallbackUsed, engineV2TransitionCount, engineV2TransitionStartSec, engineV2TransitionEndSec, engineV2HarmonicSupportPeak, engineV2ResidualSupportPeak, engineV2EnvelopeSupportPeak, transientBypassUsed, residualCarryUsed, cepstralCutoffUsed, engineV2FftSize, engineV2HopSize, immediateLeftNeighborUsed, immediateRightNeighborUsed, leftNeighborSamplesRendered, rightNeighborSamplesRendered, leftNeighborSmoothMs, rightNeighborSmoothMs, nonImmediateNeighborTouched, entryAlignmentOffsetMs, exitAlignmentOffsetMs, firstVoicedCyclesEntryUsed, firstVoicedCyclesExitUsed, v3TransitionPairUsed, v3ContinuousRenderUsed, v3EntryAnchorMs, v3ExitAnchorMs, v3FirstCyclesEntryCount, v3FirstCyclesExitCount, v3ShellDurationMs, v3BodyDurationMs, v3ResidualMix, v3FormantMode, v3NeighborLeftOverlapMs, v3NeighborRightOverlapMs]() { + if (safeThis == nullptr || safeThis->secondaryWindowClosing) + return; + logPitchEditorFormant ("emitting pitchCorrectionComplete clip=" + clipId + " requestId=" + requestId + " renderMode=" + renderMode @@ -6008,7 +14676,7 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, obj->setProperty ("v3FormantMode", v3FormantMode); obj->setProperty ("v3NeighborLeftOverlapMs", v3NeighborLeftOverlapMs); obj->setProperty ("v3NeighborRightOverlapMs", v3NeighborRightOverlapMs); - webView.emitEventIfBrowserIsVisible ("pitchCorrectionComplete", + safeThis->webView.emitEventIfBrowserIsVisible ("pitchCorrectionComplete", juce::var (obj.release())); }); }); @@ -6173,6 +14841,42 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, audioEngine.getPlaybackEngine().clearAllPitchPreviewRoutes (args.size() >= 1 ? args[0].toString() : juce::String()); completion (true); }) + .withNativeFunction ("cancelPitchCorrectionRequests", [this] (const juce::Array<juce::var>& args, juce::WebBrowserComponent::NativeFunctionCompletion completion) { + if (args.isEmpty()) + { + completion (false); + return; + } + + const auto clipId = args[0].toString(); + const juce::File authoritativeFile (args.size() >= 2 ? args[1].toString() : juce::String()); + { + // The same lock is held by the render commit callback. Therefore + // cancellation either wins before a stale swap, or restores the + // authoritative frontend source after a swap that just completed. + const juce::ScopedLock sl (pitchCorrectionJobLock); + ++previewRenderGeneration; + ++noteRenderGeneration; + ++fullClipRenderGeneration; + activePreviewRequestGroup = {}; + activeNoteRenderRequestGroup = {}; + activeFullClipRequestGroup = {}; + + auto& playbackEngine = audioEngine.getPlaybackEngine(); + playbackEngine.clearAllPitchPreviewRoutes (clipId); + playbackEngine.cancelDeferredClipAudioFile (clipId); + if (authoritativeFile.existsAsFile()) + playbackEngine.replaceClipAudioFile (clipId, authoritativeFile); + } + + pitchNoteHqPriorityActive.store (false); + previewSegmentPool.removeAllJobs (false, 0); + noteRenderPool.removeAllJobs (false, 0); + fullClipHQPool.removeAllJobs (false, 0); + logPitchEditorFormant ("cancelled pitch correction requests clip=" + clipId + + " authoritativeFile=" + authoritativeFile.getFullPathName()); + completion (true); + }) .withNativeFunction ("clearPitchPreviewRoutesForCorrectedSources", [this] (const juce::Array<juce::var>&, juce::WebBrowserComponent::NativeFunctionCompletion completion) { completion (audioEngine.getPlaybackEngine().clearPitchPreviewRoutesForCorrectedSources()); }) @@ -6281,9 +14985,7 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, const auto packagedFrontend = getPackagedFrontendEntryPoint(); const auto webViewUserDataDir = getWebView2UserDataFolder(); - auto checkOptions = juce::WebBrowserComponent::Options() - .withBackend(preferredBackend); - + const auto checkOptions = getEmbeddedBrowserBaseOptions(); const bool supported = juce::WebBrowserComponent::areOptionsSupported(checkOptions); const auto dependencyStatus = evaluateStartupDependencies(supported); @@ -6398,15 +15100,15 @@ MainComponent::MainComponent(AudioEngine& audioEngineIn, #if JUCE_DEBUG if (isLocalFrontendDevServerReachable()) { - const auto frontendUrl = appendFrontendStartupQuery("http://127.0.0.1:5173", windowRole, startupMode, windowInstanceId); - juce::Logger::writeToLog("Loading frontend from 127.0.0.1:5173"); + const auto frontendUrl = appendFrontendStartupQuery("http://127.0.0.1:5183", windowRole, startupMode, windowInstanceId); + juce::Logger::writeToLog("Loading frontend from 127.0.0.1:5183"); beginFrontendStartupWatchdog(frontendUrl); webView.goToURL(frontendUrl); loadedFrontend = true; } else { - juce::Logger::writeToLog("127.0.0.1:5173 is unreachable; falling back to the packaged frontend."); + juce::Logger::writeToLog("127.0.0.1:5183 is unreachable; falling back to the packaged frontend."); } #endif @@ -6764,7 +15466,32 @@ bool MainComponent::completePitchRegressionJob(const juce::var& result) MainComponent::~MainComponent() { + tone3000NativeCompletionsEnabled.store( + false, std::memory_order_release); + if (tone3000TaskCancellation != nullptr) + tone3000TaskCancellation->store( + true, std::memory_order_release); + // These jobs own every long-running NAM/TONE3000 completion. Drain them + // while the WebView provider, lifetime flag, and macOS Keychain loader are + // still alive; queued message-thread completions are additionally gated by + // SafePointer and the flag above. + tone3000BridgePool.removeAllJobs(true, -1); + + if (! isMainWindow()) + prepareForSecondaryWindowClose(); + stopTimer(); + ++pitchAnalysisGeneration; + ++previewRenderGeneration; + ++noteRenderGeneration; + ++fullClipRenderGeneration; + pitchAnalysisRunning.store(false); + pitchNoteHqPriorityActive.store(false); + builtInStateMutationPool.removeAllJobs(true, -1); + pitchAnalysisPool.removeAllJobs(true, 5000); + previewSegmentPool.removeAllJobs(true, 5000); + noteRenderPool.removeAllJobs(true, 5000); + fullClipHQPool.removeAllJobs(true, 5000); polyAnalysisBridgePool.removeAllJobs(true, 5000); mediaPreviewPool.removeAllJobs(true, 2000); #if JUCE_WINDOWS @@ -6774,6 +15501,102 @@ MainComponent::~MainComponent() activeInstances.removeFirstMatchingValue(this); } +void MainComponent::prepareForSecondaryWindowClose() +{ + if (isMainWindow() || secondaryWindowClosing) + return; + + secondaryWindowClosing = true; + tone3000NativeCompletionsEnabled.store( + false, std::memory_order_release); + if (tone3000TaskCancellation != nullptr) + tone3000TaskCancellation->store( + true, std::memory_order_release); + startupWatchdogActive = false; + frontendStartupDetail = "Secondary window is closing."; + stopTimer(); + + ++pitchAnalysisGeneration; + ++previewRenderGeneration; + ++noteRenderGeneration; + ++fullClipRenderGeneration; + pitchAnalysisRunning.store(false); + pitchNoteHqPriorityActive.store(false); + + hideStartupOverlay(); + fallbackMessage.setVisible(false); + hideStartupFallbackActions(); + + webView.setVisible(false); + webView.stop(); + + juce::Logger::writeToLog("Secondary MainComponent shutdown prepared: role=" + + getWindowRoleQueryValue(windowRole) + + (windowInstanceId.isNotEmpty() ? " sessionId=" + windowInstanceId : juce::String())); +} + +void MainComponent::requestEmbeddedBrowserFocus() +{ + jassert(juce::MessageManager::getInstance()->isThisTheMessageThread()); + + if (secondaryWindowClosing + || frontendStartupState != FrontendStartupState::ready + || embeddedBrowserFocusRequestPending) + { + return; + } + + embeddedBrowserFocusRequestPending = true; + juce::Component::SafePointer<MainComponent> safeThis(this); + juce::MessageManager::callAsync([safeThis]() + { + if (safeThis == nullptr) + return; + + safeThis->embeddedBrowserFocusRequestPending = false; + + if (safeThis->secondaryWindowClosing + || safeThis->frontendStartupState != FrontendStartupState::ready + || ! safeThis->webView.isShowing() + || safeThis->isCurrentlyBlockedByAnotherModalComponent() + || safeThis->webView.isCurrentlyBlockedByAnotherModalComponent()) + { + return; + } + + if (auto* modalComponent = juce::Component::getCurrentlyModalComponent(); + modalComponent != nullptr && modalComponent->isVisible()) + { + return; + } + + auto* topLevelWindow = dynamic_cast<juce::TopLevelWindow*>( + safeThis->getTopLevelComponent()); + if (topLevelWindow == nullptr || ! topLevelWindow->isActiveWindow()) + return; + + safeThis->webView.setWantsKeyboardFocus(true); + safeThis->webView.grabKeyboardFocus(); + }); +} + +bool MainComponent::hasFrontendStartupReachedTerminalState() const +{ + return frontendStartupState == FrontendStartupState::ready + || frontendStartupState == FrontendStartupState::failed + || frontendStartupState == FrontendStartupState::timedOut; +} + +bool MainComponent::hasFrontendStartupSucceeded() const +{ + return frontendStartupState == FrontendStartupState::ready; +} + +juce::String MainComponent::getFrontendStartupStateDescription() const +{ + return describeFrontendStartupState(frontendStartupState); +} + #if JUCE_WINDOWS void MainComponent::emitExternalMediaDropTargetEvent(const juce::String& eventId, const juce::var& payload) { @@ -6839,7 +15662,25 @@ void MainComponent::requestFrontendAppClose() { if (! isMainWindow()) { - if (windowCallbacks.closeMixerWindow) + if (windowRole == WindowRole::midiEditor && windowCallbacks.closeMidiEditorWindow) + { + auto closeMidiEditorWindow = windowCallbacks.closeMidiEditorWindow; + const auto sessionId = windowInstanceId.isNotEmpty() ? windowInstanceId : juce::String("default-midi-editor"); + juce::MessageManager::callAsync([closeMidiEditorWindow, sessionId]() + { + closeMidiEditorWindow(sessionId, "close"); + }); + } + else if (windowRole == WindowRole::pluginEditor && windowCallbacks.closePluginEditorWindow) + { + auto closePluginEditorWindow = windowCallbacks.closePluginEditorWindow; + const auto sessionId = windowInstanceId.isNotEmpty() ? windowInstanceId : juce::String("default-plugin-editor"); + juce::MessageManager::callAsync([closePluginEditorWindow, sessionId]() + { + closePluginEditorWindow(sessionId, "close"); + }); + } + else if (windowCallbacks.closeMixerWindow) { auto closeMixerWindow = windowCallbacks.closeMixerWindow; juce::MessageManager::callAsync([closeMixerWindow]() @@ -6890,10 +15731,24 @@ void MainComponent::broadcastEventToRole(WindowRole role, const juce::String& ev void MainComponent::emitFrontendEvent(const juce::String& eventId, const juce::var& payload) { + if (secondaryWindowClosing) + return; + + if (auto* messageManager = + juce::MessageManager::getInstanceWithoutCreating(); + messageManager != nullptr + && messageManager->isThisTheMessageThread()) + { + webView.emitEventIfBrowserIsVisible( + eventId, + payload); + return; + } + juce::Component::SafePointer<MainComponent> safeThis(this); juce::MessageManager::callAsync([safeThis, eventId, payload]() { - if (safeThis != nullptr) + if (safeThis != nullptr && ! safeThis->secondaryWindowClosing) safeThis->webView.emitEventIfBrowserIsVisible(eventId, payload); }); } @@ -6905,6 +15760,9 @@ bool MainComponent::isMainWindow() const bool MainComponent::loadPackagedFrontend() { + if (secondaryWindowClosing) + return false; + const auto packagedFrontend = getPackagedFrontendEntryPoint(); if (! packagedFrontend.existsAsFile()) return false; @@ -6927,8 +15785,8 @@ bool MainComponent::tryFallbackToPackagedFrontendAfterLocalTimeout() if (attemptedPackagedFrontendFallbackAfterLocalTimeout) return false; - if (! frontendStartupTargetUrl.startsWithIgnoreCase("http://localhost:5173") - && ! frontendStartupTargetUrl.startsWithIgnoreCase("http://127.0.0.1:5173")) + if (! frontendStartupTargetUrl.startsWithIgnoreCase("http://localhost:5183") + && ! frontendStartupTargetUrl.startsWithIgnoreCase("http://127.0.0.1:5183")) return false; attemptedPackagedFrontendFallbackAfterLocalTimeout = true; @@ -6938,7 +15796,7 @@ bool MainComponent::tryFallbackToPackagedFrontendAfterLocalTimeout() "not retrying with packaged frontend in Debug mode."); return false; #else - juce::Logger::writeToLog("Frontend startup timed out while using localhost:5173; " + juce::Logger::writeToLog("Frontend startup timed out while using localhost:5183; " "retrying with the packaged frontend."); return loadPackagedFrontend(); #endif @@ -6946,6 +15804,13 @@ bool MainComponent::tryFallbackToPackagedFrontendAfterLocalTimeout() void MainComponent::beginFrontendStartupWatchdog(const juce::String& targetUrl) { + if (secondaryWindowClosing) + { + juce::Logger::writeToLog("Frontend startup watchdog ignored for closing secondary window: role=" + + getWindowRoleQueryValue(windowRole)); + return; + } + frontendStartupTargetUrl = targetUrl; frontendStartupDetail.clear(); frontendStartupState = FrontendStartupState::navigationStarted; @@ -6974,6 +15839,13 @@ void MainComponent::hideStartupOverlay() void MainComponent::markFrontendStartupReady(const juce::String& detail) { + if (secondaryWindowClosing) + { + juce::Logger::writeToLog("Frontend startup state ignored after secondary close: boot-ready" + + (detail.isNotEmpty() ? " - " + detail : "")); + return; + } + if (frontendStartupState == FrontendStartupState::ready) return; @@ -6987,10 +15859,43 @@ void MainComponent::markFrontendStartupReady(const juce::String& detail) hideStartupOverlay(); webView.setVisible(true); juce::Logger::writeToLog("Frontend startup state: boot-ready" + (detail.isNotEmpty() ? " - " + detail : "")); + requestEmbeddedBrowserFocus(); + + if (! isMainWindow()) + { + auto* payload = new juce::DynamicObject(); + payload->setProperty("role", getWindowRoleQueryValue(windowRole)); + payload->setProperty("sessionId", windowInstanceId); + payload->setProperty("detail", detail); + payload->setProperty("startupState", describeFrontendStartupState(frontendStartupState)); + + MainComponent::broadcastEventToRole(WindowRole::main, "secondaryWindowReady", juce::var(payload)); + + auto* rolePayload = new juce::DynamicObject(); + rolePayload->setProperty("role", getWindowRoleQueryValue(windowRole)); + rolePayload->setProperty("sessionId", windowInstanceId); + rolePayload->setProperty("detail", detail); + + if (windowRole == WindowRole::mixer) + MainComponent::broadcastEventToRole(WindowRole::main, "mixerWindowReady", juce::var(rolePayload)); + else if (windowRole == WindowRole::midiEditor) + MainComponent::broadcastEventToRole(WindowRole::main, "midiEditorWindowReady", juce::var(rolePayload)); + else if (windowRole == WindowRole::pluginEditor) + MainComponent::broadcastEventToRole(WindowRole::main, "builtInPluginEditorWindowReady", juce::var(rolePayload)); + else + delete rolePayload; + } } void MainComponent::markFrontendStartupFailed(const juce::String& detail) { + if (secondaryWindowClosing) + { + juce::Logger::writeToLog("Frontend startup state ignored after secondary close: boot-failed" + + (detail.isNotEmpty() ? " - " + detail : "")); + return; + } + frontendStartupState = FrontendStartupState::failed; frontendStartupDetail = detail; startupWatchdogActive = false; @@ -7134,8 +16039,7 @@ void MainComponent::repairWindowsPrerequisites() juce::var MainComponent::buildStartupDiagnostics() const { const auto dependencyStatus = evaluateStartupDependencies( - juce::WebBrowserComponent::areOptionsSupported( - juce::WebBrowserComponent::Options().withBackend(getPreferredBrowserBackend()))); + juce::WebBrowserComponent::areOptionsSupported(getEmbeddedBrowserBaseOptions())); auto* diagnostics = new juce::DynamicObject(); const auto selfTestReport = buildStartupSelfTestReport(); diagnostics->setProperty("windowRole", getWindowRoleQueryValue(windowRole)); @@ -7171,11 +16075,11 @@ juce::Rectangle<int> MainComponent::getDesktopWorkAreaForCurrentWindow() const { const auto bounds = topLevel->getBounds(); if (auto* display = juce::Desktop::getInstance().getDisplays().getDisplayForRect(bounds)) - return display->userArea; + return display->userBounds.getSmallestIntegerContainer(); } if (auto* display = juce::Desktop::getInstance().getDisplays().getPrimaryDisplay()) - return display->userArea; + return display->userBounds.getSmallestIntegerContainer(); return getScreenBounds(); } @@ -7311,6 +16215,9 @@ void MainComponent::startDesktopWindowDrag() //============================================================================== void MainComponent::timerCallback() { + if (secondaryWindowClosing) + return; + if (startupWatchdogActive && frontendStartupState != FrontendStartupState::ready) { ++frontendStartupNavigationTicks; @@ -7340,31 +16247,51 @@ void MainComponent::timerCallback() if (isMainWindow()) { - const auto aiToolsStatus = audioEngine.getAiToolsStatus(); const auto nowMs = juce::Time::getMillisecondCounterHiRes(); - bool installInProgress = false; - juce::String digest; - - if (auto* obj = aiToolsStatus.getDynamicObject()) + constexpr double idleAiToolsPollIntervalMs = 2000.0; + const bool shouldPollAiTools = + lastAiToolsStatusPollMs <= 0.0 + || lastAiToolsInstallInProgress + || nowMs - lastAiToolsStatusPollMs + >= idleAiToolsPollIntervalMs; + if (shouldPollAiTools) { - installInProgress = static_cast<bool>(obj->getProperty("installInProgress")); - digest = obj->getProperty("state").toString() - + "|" + juce::String(static_cast<double>(obj->getProperty("progress"))) - + "|" + obj->getProperty("message").toString() - + "|" + obj->getProperty("error").toString() - + "|" + obj->getProperty("errorCode").toString() - + "|" + obj->getProperty("statusWarning").toString() - + "|" + obj->getProperty("statusWarningCode").toString() - + "|" + obj->getProperty("installSessionId").toString() - + "|" + juce::String(static_cast<double>(obj->getProperty("elapsedMs"))); - } + const auto aiToolsStatus = + audioEngine.getAiToolsStatus(); + lastAiToolsStatusPollMs = nowMs; + bool installInProgress = false; + juce::String digest; - if (digest != lastAiToolsStatusDigest - || (installInProgress && nowMs - lastAiToolsStatusEmitMs >= 500.0)) - { - emitFrontendEvent("aiToolsStatusUpdate", aiToolsStatus); - lastAiToolsStatusDigest = digest; - lastAiToolsStatusEmitMs = nowMs; + if (auto* obj = aiToolsStatus.getDynamicObject()) + { + installInProgress = + static_cast<bool>( + obj->getProperty( + "installInProgress")); + digest = obj->getProperty("state").toString() + + "|" + juce::String(static_cast<double>(obj->getProperty("progress"))) + + "|" + obj->getProperty("message").toString() + + "|" + obj->getProperty("error").toString() + + "|" + obj->getProperty("errorCode").toString() + + "|" + obj->getProperty("statusWarning").toString() + + "|" + obj->getProperty("statusWarningCode").toString() + + "|" + obj->getProperty("installSessionId").toString() + + "|" + juce::String(static_cast<double>(obj->getProperty("elapsedMs"))); + } + lastAiToolsInstallInProgress = + installInProgress; + + if (digest != lastAiToolsStatusDigest + || (installInProgress + && nowMs - lastAiToolsStatusEmitMs + >= 500.0)) + { + emitFrontendEvent( + "aiToolsStatusUpdate", + aiToolsStatus); + lastAiToolsStatusDigest = digest; + lastAiToolsStatusEmitMs = nowMs; + } } } @@ -7395,26 +16322,37 @@ void MainComponent::timerCallback() } */ - // ========== Event-Based Metering ========== - // Emit meter levels as events to frontend (every ~33ms at 30Hz) - juce::var meterData(new juce::DynamicObject()); - auto* obj = meterData.getDynamicObject(); - - // Get track meter levels - auto trackLevels = audioEngine.getMeterLevels(); - obj->setProperty("trackLevels", trackLevels); - obj->setProperty("trackClipping", audioEngine.getMeterClipStates()); - - // Get master level - float masterLevel = audioEngine.getMasterLevel(); - obj->setProperty("masterLevel", masterLevel); - obj->setProperty("masterClipping", audioEngine.getMasterClipLatched()); - - // Add timestamp - obj->setProperty("timestamp", juce::Time::currentTimeMillis()); - - // Emit custom event to JavaScript - emitFrontendEvent("meterUpdate", meterData); + // Detached plugin editors obtain their own small rack/tuner telemetry and + // do not consume the DAW-wide meter event. Avoid rebuilding every track's + // meter payload for those windows. + if (windowRole != WindowRole::pluginEditor) + { + juce::var meterData( + new juce::DynamicObject()); + auto* obj = meterData.getDynamicObject(); + + obj->setProperty( + "trackLevels", + audioEngine.getMeterLevels()); + obj->setProperty( + "midiInputLevels", + audioEngine.getMIDIInputLevels()); + obj->setProperty( + "trackClipping", + audioEngine.getMeterClipStates()); + obj->setProperty( + "masterLevel", + audioEngine.getMasterLevel()); + obj->setProperty( + "masterClipping", + audioEngine.getMasterClipLatched()); + obj->setProperty( + "timestamp", + juce::Time::currentTimeMillis()); + emitFrontendEvent( + "meterUpdate", + meterData); + } } //============================================================================== diff --git a/Source/MainComponent.h b/Source/MainComponent.h index 9f2c574..4076ebc 100644 --- a/Source/MainComponent.h +++ b/Source/MainComponent.h @@ -3,7 +3,11 @@ #include <JuceHeader.h> #include "AudioEngine.h" #include "AppUpdater.h" +#include <functional> +#include <map> #include <set> +#include <utility> +#include <vector> //============================================================================== /* @@ -24,7 +28,8 @@ class MainComponent : public juce::Component, { main, mixer, - midiEditor + midiEditor, + pluginEditor }; enum class FrontendStartupState @@ -59,6 +64,8 @@ class MainComponent : public juce::Component, std::function<juce::var(const juce::String&)> getMidiEditorWindowState; std::function<void(const juce::String&, const juce::var&)> publishMidiEditorUISnapshot; std::function<juce::var(const juce::String&)> getMidiEditorUISnapshot; + std::function<bool(const juce::String&, const juce::var&)> openPluginEditorWindow; + std::function<bool(const juce::String&, const juce::String&)> closePluginEditorWindow; }; //============================================================================== @@ -77,11 +84,22 @@ class MainComponent : public juce::Component, void timerCallback() override; void requestFrontendAppClose(); + void requestEmbeddedBrowserFocus(); + void prepareForSecondaryWindowClose(); + bool hasFrontendStartupSucceeded() const; + bool hasFrontendStartupReachedTerminalState() const; + juce::String getFrontendStartupStateDescription() const; static void broadcastEventToAll(const juce::String& eventId, const juce::var& payload = {}); static void broadcastEventToRole(WindowRole role, const juce::String& eventId, const juce::var& payload = {}); static juce::var buildStartupSelfTestReport(); static bool writeStartupSelfTestReport(const juce::File& reportFile); + static juce::var runNAMCatalogNativeRegression(); + static int runNAMLibraryManifestWriterRegressionChild( + const juce::File& manifestFile, + const juce::String& writerId, + const juce::File& readyFile, + const juce::File& startFile); #if JUCE_WINDOWS void emitExternalMediaDropTargetEvent(const juce::String& eventId, const juce::var& payload); @@ -113,6 +131,40 @@ class MainComponent : public juce::Component, juce::var buildStartupDiagnostics() const; void initializePitchRegressionJob(const juce::String& pitchRegressionJobPathIn); bool completePitchRegressionJob(const juce::var& result); + static std::string makeNAMModelMutationKey(const juce::String& trackId, + const juce::String& chainType, + int fxIndex, + const juce::String& slot); + juce::uint64 beginNAMModelMutationRequest(const juce::String& trackId, + const juce::String& chainType, + int fxIndex, + const juce::String& slot); + juce::uint64 beginNAMModelMutationRequests( + const juce::String& trackId, + const juce::String& chainType, + int fxIndex, + const juce::StringArray& slots, + std::vector<std::pair<juce::String, juce::uint64>>& requests); + void invalidateNAMModelMutationRequests(const juce::String& trackId, + const juce::String& chainType, + int fxIndex, + const juce::StringArray& slots); + bool isNAMModelMutationRequestCurrent(const juce::String& trackId, + const juce::String& chainType, + int fxIndex, + const juce::String& slot, + juce::uint64 generation); + std::shared_ptr<void> acquireNAMModelMutationPublicationLease( + const juce::String& trackId, + const juce::String& chainType, + int fxIndex, + const std::vector<std::pair<juce::String, juce::uint64>>& requests, + juce::uint64 topologyGeneration); + juce::var discardNAMPreviewIfUnused(juce::var recordPayload, + juce::var rackAddressPayload); + void runTone3000NativeTask( + std::function<juce::var()> task, + juce::WebBrowserComponent::NativeFunctionCompletion completion); #if JUCE_WINDOWS void installExternalMediaDropTarget(); bool isWaveformPreviewRequestCancelled(const juce::String& requestId) const; @@ -128,6 +180,7 @@ class MainComponent : public juce::Component, WindowCallbacks windowCallbacks; juce::File webuiDir; juce::WebBrowserComponent webView; + bool embeddedBrowserFocusRequestPending = false; juce::Label startupStatusMessage; juce::Label fallbackMessage; juce::TextButton startupRetryButton { "Retry" }; @@ -153,6 +206,36 @@ class MainComponent : public juce::Component, juce::ThreadPool noteRenderPool { 1 }; juce::ThreadPool fullClipHQPool { 1 }; juce::ThreadPool mediaPreviewPool { 2 }; + juce::ThreadPool clipPeakAnalysisPool { + 1, + juce::Thread::osDefaultStackSize, + juce::Thread::Priority::low + }; + juce::ThreadPool pluginScanPool { + 1, + juce::Thread::osDefaultStackSize, + juce::Thread::Priority::low + }; + std::atomic<bool> tone3000NativeCompletionsEnabled { true }; + std::shared_ptr<std::atomic<bool>> tone3000TaskCancellation { + std::make_shared<std::atomic<bool>>(false) + }; + juce::ThreadPool tone3000BridgePool { + 4, + juce::Thread::osDefaultStackSize, + juce::Thread::Priority::low + }; + std::atomic<bool> pluginScanRunning { false }; + // Keeps this window's jobs alive and sequenced. A process-wide gate in + // MainComponent.cpp serialises NAM mutations across every editor window. + // Model/IR parsing and prewarming can be CPU- and memory-intensive. Keep + // this single mutation worker below the audio callback's scheduling class + // so a model load cannot steal a 16-sample deadline. + juce::ThreadPool builtInStateMutationPool { + 1, + juce::Thread::osDefaultStackSize, + juce::Thread::Priority::low + }; juce::CriticalSection pitchCorrectionJobLock; juce::String activePreviewRequestGroup; juce::String activeNoteRenderRequestGroup; @@ -167,9 +250,12 @@ class MainComponent : public juce::Component, bool startupFallbackVisible = false; bool startupWatchdogActive = false; bool attemptedPackagedFrontendFallbackAfterLocalTimeout = false; + bool secondaryWindowClosing = false; StartupRepairAction startupRepairAction = StartupRepairAction::none; juce::String lastAiToolsStatusDigest; double lastAiToolsStatusEmitMs = 0.0; + double lastAiToolsStatusPollMs = 0.0; + bool lastAiToolsInstallInProgress = false; juce::File pitchRegressionJobFile; juce::var pitchRegressionJob; bool pitchRegressionJobConsumed = false; diff --git a/Source/Metronome.cpp b/Source/Metronome.cpp index 7080f2a..bf96247 100644 --- a/Source/Metronome.cpp +++ b/Source/Metronome.cpp @@ -10,71 +10,341 @@ #include "Metronome.h" +#include <limits> + +namespace +{ +class ScopedClickDataReader final +{ +public: + explicit ScopedClickDataReader( + std::atomic<std::uint32_t>& readersToUse) noexcept + : readers(readersToUse) + { + readers.fetch_add(1, std::memory_order_seq_cst); + } + + ~ScopedClickDataReader() + { + readers.fetch_sub(1, std::memory_order_seq_cst); + } + + ScopedClickDataReader( + const ScopedClickDataReader&) = delete; + ScopedClickDataReader& operator=( + const ScopedClickDataReader&) = delete; + +private: + std::atomic<std::uint32_t>& readers; +}; +} + Metronome::Metronome() { formatManager.registerBasicFormats(); - generateClickSounds(); + auto initialClickData = + createDefaultClickData( + sampleRate.load(std::memory_order_relaxed)); + clickDataOwner = initialClickData; + clickDataForAudio.store( + initialClickData.get(), std::memory_order_seq_cst); } Metronome::~Metronome() { + clickDataForAudio.store( + nullptr, std::memory_order_seq_cst); + jassert( + clickDataAudioReaders.load( + std::memory_order_seq_cst) == 0); + + const juce::ScopedLock publicationGuard( + clickDataPublicationLock); + retiredClickDataOwners.clear(); + clickDataOwner.reset(); } void Metronome::prepareToPlay(double newSampleRate, int samplesPerBlock) { juce::ignoreUnused(samplesPerBlock); - if (sampleRate != newSampleRate) + if (!std::isfinite(newSampleRate) + || newSampleRate <= 0.0) + { + return; + } + + const juce::ScopedLock mutationGuard( + clickDataMutationLock); + const double previousSampleRate = + sampleRate.exchange( + newSampleRate, + std::memory_order_acq_rel); + if (std::abs(previousSampleRate - newSampleRate) <= 1.0e-9) + return; + + // Rebuild all buffers off the audio thread. Custom files are reloaded at + // the new device rate; if a file has disappeared, retain its previous + // immutable buffer rather than publishing a partial or empty click. + const auto previousData = + getClickDataSnapshot(); + auto nextData = + createDefaultClickData(newSampleRate); + if (previousData != nullptr) { - sampleRate = newSampleRate; - generateClickSounds(); // Regenerate for new sample rate + nextData->accentBeats = + previousData->accentBeats; + nextData->usingCustomClick = + previousData->usingCustomClick; + nextData->usingCustomAccent = + previousData->usingCustomAccent; + nextData->customClickPath = + previousData->customClickPath; + nextData->customAccentPath = + previousData->customAccentPath; + + if (previousData->usingCustomClick) + { + juce::AudioBuffer<float> customClick; + if (loadSoundFromFile( + previousData->customClickPath, + newSampleRate, + customClick)) + { + nextData->lowClickBuffer = + std::move(customClick); + } + else + { + nextData->lowClickBuffer = + previousData->lowClickBuffer; + } + } + + if (previousData->usingCustomAccent) + { + juce::AudioBuffer<float> customAccent; + if (loadSoundFromFile( + previousData->customAccentPath, + newSampleRate, + customAccent)) + { + nextData->highClickBuffer = + std::move(customAccent); + } + else + { + nextData->highClickBuffer = + previousData->highClickBuffer; + } + } } + publishClickData(nextData); } -void Metronome::generateClickSounds() +std::uint64_t Metronome::packTimeSignature( + int numeratorToPack, + int denominatorToPack) noexcept { - // Generate 20ms click - int samples = static_cast<int>(sampleRate * 0.05); // 50ms just in case - highClickBuffer.setSize(1, samples); - lowClickBuffer.setSize(1, samples); + return + (static_cast<std::uint64_t>( + static_cast<std::uint32_t>( + numeratorToPack)) + << 32) + | static_cast<std::uint64_t>( + static_cast<std::uint32_t>( + denominatorToPack)); +} + +int Metronome::unpackNumerator( + std::uint64_t timeSignature) noexcept +{ + return static_cast<int>( + static_cast<std::uint32_t>( + timeSignature >> 32)); +} + +int Metronome::unpackDenominator( + std::uint64_t timeSignature) noexcept +{ + return static_cast<int>( + static_cast<std::uint32_t>( + timeSignature & 0xffffffffULL)); +} + +void Metronome::generateDefaultClickSounds( + double targetSampleRate, + juce::AudioBuffer<float>& highClick, + juce::AudioBuffer<float>& lowClick) +{ + const double safeSampleRate = + std::isfinite(targetSampleRate) + && targetSampleRate > 0.0 + ? targetSampleRate + : 44100.0; + const int samples = juce::jmax( + 1, + static_cast<int>( + safeSampleRate * 0.05)); + highClick.setSize(1, samples); + lowClick.setSize(1, samples); - highClickBuffer.clear(); - lowClickBuffer.clear(); + highClick.clear(); + lowClick.clear(); - auto* highWrite = highClickBuffer.getWritePointer(0); - auto* lowWrite = lowClickBuffer.getWritePointer(0); + auto* highWrite = highClick.getWritePointer(0); + auto* lowWrite = lowClick.getWritePointer(0); // High click: 1500Hz sine wave with exponential decay // Low click: 800Hz sine wave with exponential decay - double highFreq = 1500.0; - double lowFreq = 800.0; - double decay = 0.002; // Decay rate + constexpr double highFreq = 1500.0; + constexpr double lowFreq = 800.0; for (int i = 0; i < samples; ++i) { - double t = i / sampleRate; - double envelope = std::exp(-i * decay); // Exponential decay (per sample approximation) - // Correct decay: exp(-t * k) - // Let's use simple linear decay for safety or standard ADSR? - // Simple exp decay: - envelope = std::exp(-50.0 * t); // Decays effectively in ~100ms + const double t = + static_cast<double>(i) + / safeSampleRate; + const double envelope = + std::exp(-50.0 * t); - highWrite[i] = (float)(std::sin(2.0 * juce::MathConstants<double>::pi * highFreq * t) * envelope); - lowWrite[i] = (float)(std::sin(2.0 * juce::MathConstants<double>::pi * lowFreq * t) * envelope); + highWrite[i] = static_cast<float>( + std::sin( + 2.0 + * juce::MathConstants<double>::pi + * highFreq + * t) + * envelope); + lowWrite[i] = static_cast<float>( + std::sin( + 2.0 + * juce::MathConstants<double>::pi + * lowFreq + * t) + * envelope); + } +} + +std::shared_ptr<Metronome::ClickData> +Metronome::createDefaultClickData( + double targetSampleRate) const +{ + auto clickData = + std::make_shared<ClickData>(); + generateDefaultClickSounds( + targetSampleRate, + clickData->highClickBuffer, + clickData->lowClickBuffer); + return clickData; +} + +std::shared_ptr<const Metronome::ClickData> +Metronome::getClickDataSnapshot() const +{ + const juce::ScopedLock publicationGuard( + clickDataPublicationLock); + return clickDataOwner; +} + +void Metronome::publishClickData( + std::shared_ptr<const ClickData> nextData) +{ + if (nextData == nullptr) + return; + + std::vector<std::shared_ptr<const ClickData>> + ownersToReclaim; + { + const juce::ScopedLock publicationGuard( + clickDataPublicationLock); + if (clickDataAudioReaders.load( + std::memory_order_seq_cst) == 0) + { + ownersToReclaim.swap( + retiredClickDataOwners); + } + + const auto previousData = + clickDataOwner; + clickDataOwner = nextData; + clickDataForAudio.store( + nextData.get(), + std::memory_order_seq_cst); + if (previousData != nullptr + && previousData.get() + != nextData.get()) + { + retiredClickDataOwners.push_back( + previousData); + } } + // ownersToReclaim destructs here, outside the publication lock and away + // from the audio callback. } void Metronome::getNextAudioBlock(juce::AudioBuffer<float>& buffer, double currentSamplePosition) { - if (!enabled) return; + if (! enabled.load(std::memory_order_acquire)) + return; - int numSamples = buffer.getNumSamples(); - const double denominatorScale = denominator > 0 ? (4.0 / static_cast<double>(denominator)) : 1.0; - double samplesPerBeat = (60.0 / bpm) * sampleRate * denominatorScale; + const int numSamples = + buffer.getNumSamples(); + if (numSamples <= 0 + || buffer.getNumChannels() <= 0) + { + return; + } - // Safety check - if (samplesPerBeat <= 0.0) return; + const double blockBpm = + bpm.load(std::memory_order_relaxed); + const double blockSampleRate = + sampleRate.load(std::memory_order_relaxed); + const float blockVolume = + volume.load(std::memory_order_relaxed); + const auto blockTimeSignature = + packedTimeSignature.load( + std::memory_order_acquire); + const int blockNumerator = + unpackNumerator(blockTimeSignature); + const int blockDenominator = + unpackDenominator(blockTimeSignature); + + if (!std::isfinite(blockBpm) + || !std::isfinite(blockSampleRate) + || !std::isfinite(blockVolume) + || blockBpm <= 0.0 + || blockSampleRate <= 0.0 + || blockNumerator <= 0 + || blockDenominator <= 0) + { + return; + } + + const double denominatorScale = + 4.0 + / static_cast<double>( + blockDenominator); + const double samplesPerBeat = + (60.0 / blockBpm) + * blockSampleRate + * denominatorScale; + if (!std::isfinite(samplesPerBeat) + || samplesPerBeat <= 0.0) + { + return; + } + + // The immutable click owner is reclaimed only after every callback reader + // has left. This path performs no shared_ptr atomic operation, lock, + // allocation, or logging. + const ScopedClickDataReader clickDataReadGuard( + clickDataAudioReaders); + const auto* const clickData = + clickDataForAudio.load( + std::memory_order_seq_cst); + if (clickData == nullptr) + return; auto* leftConfig = buffer.getWritePointer(0); auto* rightConfig = buffer.getNumChannels() > 1 ? buffer.getWritePointer(1) : nullptr; @@ -105,14 +375,25 @@ void Metronome::getNextAudioBlock(juce::AudioBuffer<float>& buffer, double curre if (isBeatStart && !isClicking) { // Beat detected - int beatInBar = currentBeatIdx % numerator; // 0-indexed: 0 is the first beat + const int beatInBar = + ((currentBeatIdx % blockNumerator) + + blockNumerator) + % blockNumerator; isClicking = true; clickSampleCounter = 0; // Use accent array to determine if this beat should be high-pitched - if (beatInBar < (int)accentBeats.size()) { - isHighClick = accentBeats[beatInBar]; - } else { + if (beatInBar + < static_cast<int>( + clickData->accentBeats.size())) + { + isHighClick = + clickData->accentBeats[ + static_cast<size_t>( + beatInBar)]; + } + else + { // Fallback: only accent beat 0 if array doesn't cover this beat isHighClick = (beatInBar == 0); } @@ -122,11 +403,19 @@ void Metronome::getNextAudioBlock(juce::AudioBuffer<float>& buffer, double curre if (isClicking) { float clickValue = 0.0f; - const auto& sourceBuffer = isHighClick ? highClickBuffer : lowClickBuffer; + const auto& sourceBuffer = + isHighClick + ? clickData->highClickBuffer + : clickData->lowClickBuffer; - if (clickSampleCounter < sourceBuffer.getNumSamples()) + if (sourceBuffer.getNumChannels() > 0 + && clickSampleCounter + < sourceBuffer.getNumSamples()) { - clickValue = sourceBuffer.getReadPointer(0)[clickSampleCounter] * volume; + clickValue = + sourceBuffer.getReadPointer(0)[ + clickSampleCounter] + * blockVolume; clickSampleCounter++; } else @@ -146,42 +435,134 @@ void Metronome::getNextAudioBlock(juce::AudioBuffer<float>& buffer, double curre void Metronome::setBpm(double newBpm) { - if (newBpm > 0) - bpm = newBpm; + if (std::isfinite(newBpm) + && newBpm > 0.0) + { + bpm.store( + newBpm, + std::memory_order_relaxed); + } } void Metronome::setTimeSignature(int newNumerator, int newDenominator) { - if (newNumerator > 0) numerator = newNumerator; - if (newDenominator > 0) denominator = newDenominator; + const auto previous = + packedTimeSignature.load( + std::memory_order_acquire); + const int safeNumerator = + newNumerator > 0 + ? newNumerator + : unpackNumerator(previous); + const int safeDenominator = + newDenominator > 0 + ? newDenominator + : unpackDenominator(previous); + packedTimeSignature.store( + packTimeSignature( + safeNumerator, + safeDenominator), + std::memory_order_release); } void Metronome::setVolume(float newVolume) { - volume = newVolume; + if (std::isfinite(newVolume)) + { + volume.store( + newVolume, + std::memory_order_relaxed); + } } void Metronome::setEnabled(bool shouldBeEnabled) { - enabled = shouldBeEnabled; + enabled.store( + shouldBeEnabled, + std::memory_order_release); } void Metronome::setAccentBeats(const std::vector<bool>& accents) { - accentBeats = accents; - // Ensure we always have at least one element and beat 0 is always accented - if (accentBeats.empty()) { - accentBeats.resize(numerator, false); - } - if (!accentBeats.empty()) { - accentBeats[0] = true; // Beat 1 is always accented + std::vector<bool> safeAccents = + accents; + if (safeAccents.empty()) + { + safeAccents.resize( + static_cast<size_t>( + juce::jmax( + 1, + getNumerator())), + false); } + safeAccents[0] = true; + + const juce::ScopedLock mutationGuard( + clickDataMutationLock); + const auto currentData = + getClickDataSnapshot(); + auto nextData = + currentData != nullptr + ? std::make_shared<ClickData>( + *currentData) + : createDefaultClickData( + sampleRate.load( + std::memory_order_relaxed)); + nextData->accentBeats = + std::move(safeAccents); + publishClickData(nextData); +} + +std::vector<bool> Metronome::getAccentBeats() const +{ + const auto clickData = + getClickDataSnapshot(); + if (clickData != nullptr) + return clickData->accentBeats; + + return { true }; +} + +int Metronome::getNumerator() const +{ + return unpackNumerator( + packedTimeSignature.load( + std::memory_order_acquire)); +} + +int Metronome::getDenominator() const +{ + return unpackDenominator( + packedTimeSignature.load( + std::memory_order_acquire)); } bool Metronome::renderToFile(const juce::File& outputFile, double startTimeSeconds, double endTimeSeconds) { + const double renderSampleRate = + sampleRate.load(std::memory_order_relaxed); + if (!std::isfinite(renderSampleRate) + || renderSampleRate <= 0.0 + || !std::isfinite(startTimeSeconds) + || !std::isfinite(endTimeSeconds)) + { + return false; + } + // Calculate total samples - int totalSamples = static_cast<int>((endTimeSeconds - startTimeSeconds) * sampleRate); + const double requestedSamples = + (endTimeSeconds - startTimeSeconds) + * renderSampleRate; + if (!std::isfinite(requestedSamples) + || requestedSamples <= 0.0 + || requestedSamples + > static_cast<double>( + std::numeric_limits<int>::max())) + { + return false; + } + + const int totalSamples = + static_cast<int>(requestedSamples); if (totalSamples <= 0) return false; @@ -190,43 +571,41 @@ bool Metronome::renderToFile(const juce::File& outputFile, double startTimeSecon outputFile.deleteFile(); juce::WavAudioFormat wavFormat; - auto outputStream = std::make_unique<juce::FileOutputStream>(outputFile); - if (outputStream->failedToOpen()) + std::unique_ptr<juce::OutputStream> outputStream = std::make_unique<juce::FileOutputStream>(outputFile); + if (static_cast<juce::FileOutputStream&>(*outputStream).failedToOpen()) return false; - std::unique_ptr<juce::AudioFormatWriter> writer( - wavFormat.createWriterFor( - outputStream.get(), - sampleRate, - 2, // stereo - 16, // bit depth - {}, // metadata - 0 // quality - ) - ); + auto writer = wavFormat.createWriterFor( + outputStream, + juce::AudioFormatWriterOptions() + .withSampleRate(renderSampleRate) + .withNumChannels(2) + .withBitsPerSample(16)); if (!writer) return false; - outputStream.release(); // Writer takes ownership of the stream - // Save and reset playback state for clean offline render int savedClickCounter = clickSampleCounter; bool savedIsClicking = isClicking; bool savedIsHighClick = isHighClick; double savedLastPos = lastSamplePosition; - bool savedEnabled = enabled; + const bool savedEnabled = + enabled.load(std::memory_order_acquire); clickSampleCounter = 0; isClicking = false; isHighClick = false; lastSamplePosition = -1.0; - enabled = true; // Force enabled for rendering + enabled.store( + true, + std::memory_order_release); // Force enabled for rendering // Process in blocks const int blockSize = 512; juce::AudioBuffer<float> buffer(2, blockSize); - double currentPos = startTimeSeconds * sampleRate; + double currentPos = + startTimeSeconds * renderSampleRate; int samplesRemaining = totalSamples; while (samplesRemaining > 0) @@ -256,7 +635,9 @@ bool Metronome::renderToFile(const juce::File& outputFile, double startTimeSecon isClicking = savedIsClicking; isHighClick = savedIsHighClick; lastSamplePosition = savedLastPos; - enabled = savedEnabled; + enabled.store( + savedEnabled, + std::memory_order_release); return true; } @@ -265,8 +646,17 @@ bool Metronome::renderToFile(const juce::File& outputFile, double startTimeSecon // Phase 9C: Custom Click Sounds // ============================================================================= -bool Metronome::loadSoundFromFile(const juce::String& filePath, juce::AudioBuffer<float>& targetBuffer) +bool Metronome::loadSoundFromFile( + const juce::String& filePath, + double targetSampleRate, + juce::AudioBuffer<float>& targetBuffer) { + if (!std::isfinite(targetSampleRate) + || targetSampleRate <= 0.0) + { + return false; + } + juce::File audioFile(filePath); if (!audioFile.existsAsFile()) return false; @@ -276,24 +666,69 @@ bool Metronome::loadSoundFromFile(const juce::String& filePath, juce::AudioBuffe if (!reader) return false; - // Limit click sample to 2 seconds max - auto maxSamples = (juce::int64)(reader->sampleRate * 2.0); - auto samplesToRead = std::min(reader->lengthInSamples, maxSamples); + if (!std::isfinite(reader->sampleRate) + || reader->sampleRate <= 0.0 + || reader->numChannels == 0) + { + return false; + } - if (samplesToRead <= 0) + // Limit click sample to 2 seconds max + const auto maxSamples = + static_cast<juce::int64>( + reader->sampleRate * 2.0); + const auto samplesToRead = + std::min( + reader->lengthInSamples, + maxSamples); + + if (samplesToRead <= 0 + || samplesToRead + > static_cast<juce::int64>( + std::numeric_limits<int>::max())) return false; // Read into a temp buffer at the file's native sample rate - juce::AudioBuffer<float> fileBuffer((int)reader->numChannels, (int)samplesToRead); - reader->read(&fileBuffer, 0, (int)samplesToRead, 0, true, true); + juce::AudioBuffer<float> fileBuffer( + static_cast<int>(reader->numChannels), + static_cast<int>(samplesToRead)); + if (!reader->read( + &fileBuffer, + 0, + static_cast<int>(samplesToRead), + 0, + true, + true)) + { + return false; + } // Mix to mono if multi-channel - int outSamples = (int)samplesToRead; + int outSamples = + static_cast<int>(samplesToRead); // If sample rate differs, resample to match metronome's sample rate - if (std::abs(reader->sampleRate - sampleRate) > 1.0) + if (std::abs( + reader->sampleRate + - targetSampleRate) > 1.0) { - double ratio = sampleRate / reader->sampleRate; - outSamples = (int)(samplesToRead * ratio); + const double ratio = + targetSampleRate + / reader->sampleRate; + const double outputLength = + static_cast<double>(samplesToRead) + * ratio; + if (!std::isfinite(outputLength) + || outputLength <= 0.0 + || outputLength + > static_cast<double>( + std::numeric_limits<int>::max())) + { + return false; + } + outSamples = + juce::jmax( + 1, + static_cast<int>(outputLength)); } targetBuffer.setSize(1, outSamples); @@ -301,10 +736,14 @@ bool Metronome::loadSoundFromFile(const juce::String& filePath, juce::AudioBuffe auto* outWrite = targetBuffer.getWritePointer(0); - if (std::abs(reader->sampleRate - sampleRate) > 1.0) + if (std::abs( + reader->sampleRate + - targetSampleRate) > 1.0) { // Simple linear interpolation resample - double ratio = reader->sampleRate / sampleRate; + double ratio = + reader->sampleRate + / targetSampleRate; for (int i = 0; i < outSamples; ++i) { double srcPos = i * ratio; @@ -340,52 +779,102 @@ bool Metronome::loadSoundFromFile(const juce::String& filePath, juce::AudioBuffe bool Metronome::setClickSound(const juce::String& filePath) { + const juce::ScopedLock mutationGuard( + clickDataMutationLock); + const double targetSampleRate = + sampleRate.load(std::memory_order_relaxed); + juce::AudioBuffer<float> replacementBuffer; + if (filePath.isEmpty()) { - // Reset to default - usingCustomClick = false; - customClickPath.clear(); - generateClickSounds(); // Regenerate defaults (only overwrites lowClickBuffer if not custom) - return true; + juce::AudioBuffer<float> unusedHighClick; + generateDefaultClickSounds( + targetSampleRate, + unusedHighClick, + replacementBuffer); } - - juce::AudioBuffer<float> tempBuffer; - if (loadSoundFromFile(filePath, tempBuffer)) + else if (!loadSoundFromFile( + filePath, + targetSampleRate, + replacementBuffer)) { - lowClickBuffer = std::move(tempBuffer); - usingCustomClick = true; - customClickPath = filePath; - return true; + return false; } - return false; + + const auto currentData = + getClickDataSnapshot(); + auto nextData = + currentData != nullptr + ? std::make_shared<ClickData>( + *currentData) + : createDefaultClickData( + targetSampleRate); + nextData->lowClickBuffer = + std::move(replacementBuffer); + nextData->usingCustomClick = + filePath.isNotEmpty(); + nextData->customClickPath = + filePath; + publishClickData(nextData); + return true; } bool Metronome::setAccentSound(const juce::String& filePath) { + const juce::ScopedLock mutationGuard( + clickDataMutationLock); + const double targetSampleRate = + sampleRate.load(std::memory_order_relaxed); + juce::AudioBuffer<float> replacementBuffer; + if (filePath.isEmpty()) { - usingCustomAccent = false; - customAccentPath.clear(); - generateClickSounds(); - return true; + juce::AudioBuffer<float> unusedLowClick; + generateDefaultClickSounds( + targetSampleRate, + replacementBuffer, + unusedLowClick); } - - juce::AudioBuffer<float> tempBuffer; - if (loadSoundFromFile(filePath, tempBuffer)) + else if (!loadSoundFromFile( + filePath, + targetSampleRate, + replacementBuffer)) { - highClickBuffer = std::move(tempBuffer); - usingCustomAccent = true; - customAccentPath = filePath; - return true; + return false; } - return false; + + const auto currentData = + getClickDataSnapshot(); + auto nextData = + currentData != nullptr + ? std::make_shared<ClickData>( + *currentData) + : createDefaultClickData( + targetSampleRate); + nextData->highClickBuffer = + std::move(replacementBuffer); + nextData->usingCustomAccent = + filePath.isNotEmpty(); + nextData->customAccentPath = + filePath; + publishClickData(nextData); + return true; } void Metronome::resetToDefaultSounds() { - usingCustomClick = false; - usingCustomAccent = false; - customClickPath.clear(); - customAccentPath.clear(); - generateClickSounds(); + const juce::ScopedLock mutationGuard( + clickDataMutationLock); + auto nextData = + createDefaultClickData( + sampleRate.load( + std::memory_order_relaxed)); + const auto currentData = + getClickDataSnapshot(); + if (currentData != nullptr) + { + nextData->accentBeats = + currentData->accentBeats; + } + publishClickData(nextData); } diff --git a/Source/Metronome.h b/Source/Metronome.h index 510953e..6ee0c6a 100644 --- a/Source/Metronome.h +++ b/Source/Metronome.h @@ -11,6 +11,10 @@ #pragma once #include <JuceHeader.h> +#include <atomic> +#include <cstdint> +#include <memory> +#include <vector> class Metronome { @@ -28,7 +32,10 @@ class Metronome void setVolume(float newVolume); void setEnabled(bool shouldBeEnabled); void setAccentBeats(const std::vector<bool>& accents); - bool isEnabled() const { return enabled; } + bool isEnabled() const + { + return enabled.load(std::memory_order_acquire); + } // Custom click sounds (Phase 9C) bool setClickSound(const juce::String& filePath); // Load custom WAV for regular beats @@ -36,28 +43,47 @@ class Metronome void resetToDefaultSounds(); // Restore synthesized clicks // Getters for offline rendering - const std::vector<bool>& getAccentBeats() const { return accentBeats; } - float getVolume() const { return volume; } - double getBpm() const { return bpm; } - int getNumerator() const { return numerator; } - int getDenominator() const { return denominator; } + std::vector<bool> getAccentBeats() const; + float getVolume() const + { + return volume.load(std::memory_order_relaxed); + } + double getBpm() const + { + return bpm.load(std::memory_order_relaxed); + } + int getNumerator() const; + int getDenominator() const; // Render metronome audio to a WAV file offline (for export/render track) bool renderToFile(const juce::File& outputFile, double startTimeSeconds, double endTimeSeconds); private: - double sampleRate = 44100.0; - double bpm = 120.0; - int numerator = 4; - int denominator = 4; - float volume = 0.5f; - bool enabled = false; - std::vector<bool> accentBeats = {true, false, false, false}; // Default 4/4 with only beat 1 accented - - // Buffers for cached click sounds - juce::AudioBuffer<float> highClickBuffer; - juce::AudioBuffer<float> lowClickBuffer; - + struct ClickData + { + std::vector<bool> accentBeats { + true, false, false, false + }; + juce::AudioBuffer<float> highClickBuffer; + juce::AudioBuffer<float> lowClickBuffer; + bool usingCustomClick = false; + bool usingCustomAccent = false; + juce::String customClickPath; + juce::String customAccentPath; + }; + + static constexpr std::uint64_t defaultTimeSignature = + (static_cast<std::uint64_t>(4) << 32) + | static_cast<std::uint64_t>(4); + + std::atomic<double> sampleRate { 44100.0 }; + std::atomic<double> bpm { 120.0 }; + std::atomic<std::uint64_t> packedTimeSignature { + defaultTimeSignature + }; + std::atomic<float> volume { 0.5f }; + std::atomic<bool> enabled { false }; + // Playback state int clickSampleCounter = 0; // Current position within the click sound bool isClicking = false; // Are we currently playing a click? @@ -65,14 +91,39 @@ class Metronome double lastSamplePosition = -1.0; // Track last position to detect playback restart // Internal helpers - void generateClickSounds(); - bool loadSoundFromFile(const juce::String& filePath, juce::AudioBuffer<float>& targetBuffer); - - // Custom click sound state - bool usingCustomClick = false; - bool usingCustomAccent = false; - juce::String customClickPath; - juce::String customAccentPath; + static std::uint64_t packTimeSignature( + int numerator, int denominator) noexcept; + static int unpackNumerator( + std::uint64_t timeSignature) noexcept; + static int unpackDenominator( + std::uint64_t timeSignature) noexcept; + static void generateDefaultClickSounds( + double targetSampleRate, + juce::AudioBuffer<float>& highClick, + juce::AudioBuffer<float>& lowClick); + std::shared_ptr<ClickData> createDefaultClickData( + double targetSampleRate) const; + std::shared_ptr<const ClickData> + getClickDataSnapshot() const; + void publishClickData( + std::shared_ptr<const ClickData> nextData); + bool loadSoundFromFile( + const juce::String& filePath, + double targetSampleRate, + juce::AudioBuffer<float>& targetBuffer); + + // Control-side writes are serialised independently from publication. + // The audio thread never acquires either lock. + mutable juce::CriticalSection clickDataPublicationLock; + juce::CriticalSection clickDataMutationLock; + std::shared_ptr<const ClickData> clickDataOwner; + std::atomic<const ClickData*> clickDataForAudio { + nullptr + }; + std::atomic<std::uint32_t> clickDataAudioReaders { 0 }; + std::vector<std::shared_ptr<const ClickData>> + retiredClickDataOwners; + juce::AudioFormatManager formatManager; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(Metronome) diff --git a/Source/MixerWindowManager.cpp b/Source/MixerWindowManager.cpp index 13daff8..ad33d01 100644 --- a/Source/MixerWindowManager.cpp +++ b/Source/MixerWindowManager.cpp @@ -17,17 +17,23 @@ juce::Rectangle<int> sanitiseWindowBounds(const juce::Rectangle<int>& requested, if (auto* display = juce::Desktop::getInstance().getDisplays().getPrimaryDisplay()) { - const auto area = display->userArea; + const auto area = display->userBounds.getSmallestIntegerContainer(); if (bounds.getWidth() > area.getWidth()) bounds.setWidth(area.getWidth()); if (bounds.getHeight() > area.getHeight()) bounds.setHeight(area.getHeight()); - if (!area.contains(bounds)) + if (! area.contains(bounds)) bounds = bounds.withPosition(area.getX() + 40, area.getY() + 40); } return bounds; } + +juce::String describeBounds(const juce::Rectangle<int>& bounds) +{ + return juce::String(bounds.getX()) + "," + juce::String(bounds.getY()) + + " " + juce::String(bounds.getWidth()) + "x" + juce::String(bounds.getHeight()); +} } class MixerWindowManager::MixerWindow : public juce::DocumentWindow @@ -50,10 +56,33 @@ class MixerWindowManager::MixerWindow : public juce::DocumentWindow owner.close(); } + MainComponent* getHostedComponent() const + { + return dynamic_cast<MainComponent*>(getContentComponent()); + } + + void requestHostedBrowserFocus() + { + if (auto* component = getHostedComponent()) + component->requestEmbeddedBrowserFocus(); + } + + void activeWindowStatusChanged() override + { + juce::DocumentWindow::activeWindowStatusChanged(); + + if (isActiveWindow()) + requestHostedBrowserFocus(); + } + private: MixerWindowManager& owner; }; +int MixerWindowManager::globalCloseDepth = 0; +int MixerWindowManager::globalCreateDepth = 0; +juce::Array<MixerWindowManager*> MixerWindowManager::managersWithPendingRequests; + MixerWindowManager::MixerWindowManager(ComponentFactory componentFactoryIn, ClosedCallback closedCallbackIn, juce::String windowTitleIn, @@ -71,97 +100,212 @@ MixerWindowManager::MixerWindowManager(ComponentFactory componentFactoryIn, MixerWindowManager::~MixerWindowManager() { - close(); + stopTimer(); + managersWithPendingRequests.removeFirstMatchingValue(this); + pendingRequest = {}; + + if (mixerWindow != nullptr) + { + juce::Logger::writeToLog("Secondary window destroyed during manager shutdown: " + + windowTitle + " state=" + getStateDescription()); + if (auto* hosted = mixerWindow->getHostedComponent()) + hosted->prepareForSecondaryWindowClose(); + mixerWindow->setVisible(false); + mixerWindow = nullptr; + } + + if (closingWindow != nullptr) + { + juce::Logger::writeToLog("Secondary closing window destroyed during manager shutdown: " + + windowTitle + " state=" + getStateDescription()); + if (auto* hosted = closingWindow->getHostedComponent()) + hosted->prepareForSecondaryWindowClose(); + closingWindow->setVisible(false); + closingWindow = nullptr; + } + + releaseGlobalCloseSlot(); + state = WindowState::idle; } bool MixerWindowManager::open(const juce::Rectangle<int>& bounds) { + if (! ensureMessageThread("open")) + return false; + const auto targetBounds = sanitiseWindowBounds(bounds, defaultBounds, minWidth, minHeight); + if (state == WindowState::closing + || state == WindowState::retired + || (mixerWindow == nullptr && isGlobalLifecycleBusy())) + { + queuePendingRequest(PendingRequest::Type::open, targetBounds); + return true; + } + if (mixerWindow != nullptr) { mixerWindow->setBounds(targetBounds); mixerWindow->setVisible(true); mixerWindow->toFront(true); + mixerWindow->requestHostedBrowserFocus(); + setState(WindowState::visible, "open existing bounds=" + describeBounds(targetBounds)); + scheduleStartupNudge(); return true; } - if (!componentFactory) - return false; - - auto content = componentFactory(); - if (content == nullptr) - return false; - - mixerWindow = std::make_unique<MixerWindow>(*this, std::move(content)); - mixerWindow->setBounds(targetBounds); - mixerWindow->setVisible(true); - mixerWindow->toFront(true); - - juce::Component::SafePointer<juce::DocumentWindow> safeWindow(mixerWindow.get()); - juce::Timer::callAfterDelay(600, [safeWindow]() - { - if (safeWindow != nullptr) - { - const auto boundsNow = safeWindow->getBounds(); - safeWindow->setBounds(boundsNow.withWidth(boundsNow.getWidth() + 1)); - safeWindow->setBounds(boundsNow); - } - }); - - return true; + setState(WindowState::creating, "open requested bounds=" + describeBounds(targetBounds)); + return createWindow(targetBounds, true); } bool MixerWindowManager::prewarm(const juce::Rectangle<int>& bounds) { + if (! ensureMessageThread("prewarm")) + return false; + const auto targetBounds = sanitiseWindowBounds(bounds, defaultBounds, minWidth, minHeight); + if (state == WindowState::closing + || state == WindowState::retired + || (mixerWindow == nullptr && isGlobalLifecycleBusy())) + { + queuePendingRequest(PendingRequest::Type::prewarm, targetBounds); + return true; + } + if (mixerWindow != nullptr) { mixerWindow->setBounds(targetBounds); mixerWindow->setVisible(false); + setState(WindowState::readyHidden, "prewarm existing bounds=" + describeBounds(targetBounds)); return true; } - if (!componentFactory) - return false; - - auto content = componentFactory(); - if (content == nullptr) - return false; - - mixerWindow = std::make_unique<MixerWindow>(*this, std::move(content)); - mixerWindow->setBounds(targetBounds); - mixerWindow->setVisible(false); - return true; + setState(WindowState::creating, "prewarm requested bounds=" + describeBounds(targetBounds)); + return createWindow(targetBounds, false); } bool MixerWindowManager::close() { - if (mixerWindow == nullptr) + if (! ensureMessageThread("close")) return false; - handleWindowClosed(); + if (state == WindowState::closing || state == WindowState::retired) + { + juce::Logger::writeToLog("Secondary window close ignored because close is already in progress: " + + windowTitle + " state=" + getStateDescription()); + return true; + } + + if (mixerWindow == nullptr) + { + if (pendingRequest.type != PendingRequest::Type::none) + { + juce::Logger::writeToLog("Secondary window close cancelled pending request before creation: " + + windowTitle + " state=" + getStateDescription()); + pendingRequest = {}; + managersWithPendingRequests.removeFirstMatchingValue(this); + return true; + } + + juce::Logger::writeToLog("Secondary window close ignored because no active window exists: " + + windowTitle + " state=" + getStateDescription()); + return state == WindowState::idle; + } + + juce::Logger::writeToLog("Secondary window close requested: " + windowTitle + + " state=" + getStateDescription()); + + if (auto* hosted = mixerWindow->getHostedComponent()) + { + if (! hosted->hasFrontendStartupReachedTerminalState()) + { + closePendingUntilStartupSettles = true; + closeStartedMs = juce::Time::currentTimeMillis(); + setState(WindowState::closing, + "close pending until frontend startup settles startupState=" + hosted->getFrontendStartupStateDescription()); + + if (! countedGlobalClose) + { + countedGlobalClose = true; + ++globalCloseDepth; + juce::Logger::writeToLog("Secondary window global close depth: " + + juce::String(globalCloseDepth) + + " after pending close " + windowTitle); + } + + startTimer(closeReadinessPollMs); + return true; + } + } + + beginClose(true); return true; } bool MixerWindowManager::focus() { + if (! ensureMessageThread("focus")) + return false; + + if (state == WindowState::closing || state == WindowState::retired) + { + queuePendingRequest(PendingRequest::Type::focus); + return true; + } + + if (mixerWindow == nullptr + && (isGlobalLifecycleBusy() || pendingRequest.type != PendingRequest::Type::none)) + { + queuePendingRequest(PendingRequest::Type::focus); + return true; + } + if (mixerWindow == nullptr) + { + juce::Logger::writeToLog("Secondary window focus ignored because no active window exists: " + + windowTitle + " state=" + getStateDescription()); return false; + } mixerWindow->setVisible(true); mixerWindow->toFront(true); + mixerWindow->requestHostedBrowserFocus(); + setState(WindowState::visible, "focus"); + scheduleStartupNudge(); return true; } bool MixerWindowManager::hide() { - if (mixerWindow == nullptr) + if (! ensureMessageThread("hide")) return false; + if (state == WindowState::closing || state == WindowState::retired) + return true; + + if (state == WindowState::readyHidden) + return true; + + if (mixerWindow == nullptr) + { + if (pendingRequest.type != PendingRequest::Type::none) + { + juce::Logger::writeToLog("Secondary window hide cancelled pending request before creation: " + + windowTitle + " state=" + getStateDescription()); + pendingRequest = {}; + managersWithPendingRequests.removeFirstMatchingValue(this); + return true; + } + + juce::Logger::writeToLog("Secondary window hide ignored because no active window exists: " + + windowTitle + " state=" + getStateDescription()); + return state == WindowState::idle; + } + const auto bounds = mixerWindow->getBounds(); mixerWindow->setVisible(false); + setState(WindowState::readyHidden, "hide bounds=" + describeBounds(bounds)); if (closedCallback) closedCallback(bounds); @@ -171,18 +315,353 @@ bool MixerWindowManager::hide() bool MixerWindowManager::isOpen() const { - return mixerWindow != nullptr && mixerWindow->isVisible(); + return mixerWindow != nullptr && mixerWindow->isVisible() && state == WindowState::visible; +} + +bool MixerWindowManager::isFrontendReady() const +{ + if (mixerWindow != nullptr) + if (auto* hosted = mixerWindow->getHostedComponent()) + return hosted->hasFrontendStartupSucceeded(); + + return false; +} + +juce::String MixerWindowManager::getFrontendStartupStateDescription() const +{ + if (mixerWindow != nullptr) + if (auto* hosted = mixerWindow->getHostedComponent()) + return hosted->getFrontendStartupStateDescription(); + + if (closingWindow != nullptr) + if (auto* hosted = closingWindow->getHostedComponent()) + return hosted->getFrontendStartupStateDescription(); + + return "not-created"; +} + +juce::String MixerWindowManager::getStateDescription() const +{ + return stateToString(state); +} + +const char* MixerWindowManager::stateToString(WindowState stateIn) noexcept +{ + switch (stateIn) + { + case WindowState::idle: return "idle"; + case WindowState::creating: return "creating"; + case WindowState::readyHidden: return "readyHidden"; + case WindowState::visible: return "visible"; + case WindowState::closing: return "closing"; + case WindowState::retired: return "retired"; + } + + return "unknown"; +} + +bool MixerWindowManager::isGlobalCloseInProgress() noexcept +{ + return globalCloseDepth > 0; +} + +bool MixerWindowManager::isGlobalCreateInProgress() noexcept +{ + return globalCreateDepth > 0; +} + +bool MixerWindowManager::isGlobalLifecycleBusy() noexcept +{ + return isGlobalCloseInProgress() || isGlobalCreateInProgress(); } -void MixerWindowManager::handleWindowClosed() +void MixerWindowManager::addPendingManager(MixerWindowManager& manager) +{ + if (! managersWithPendingRequests.contains(&manager)) + managersWithPendingRequests.add(&manager); +} + +void MixerWindowManager::drainGlobalPendingRequests() +{ + if (isGlobalLifecycleBusy() || managersWithPendingRequests.isEmpty()) + return; + + while (! isGlobalLifecycleBusy() && ! managersWithPendingRequests.isEmpty()) + { + auto* manager = managersWithPendingRequests.getFirst(); + managersWithPendingRequests.remove(0); + + if (manager != nullptr) + manager->runPendingRequest(); + } +} + +void MixerWindowManager::beginGlobalCreateSlot(const juce::String& title) +{ + ++globalCreateDepth; + juce::Logger::writeToLog("Secondary window global create depth: " + + juce::String(globalCreateDepth) + + " after creating " + title); + + juce::Timer::callAfterDelay(createSettleDelayMs, [title]() + { + releaseGlobalCreateSlot(title); + }); +} + +void MixerWindowManager::releaseGlobalCreateSlot(const juce::String& title) +{ + globalCreateDepth = juce::jmax(0, globalCreateDepth - 1); + juce::Logger::writeToLog("Secondary window global create depth: " + + juce::String(globalCreateDepth) + + " after settling " + title); + drainGlobalPendingRequests(); +} + +bool MixerWindowManager::ensureMessageThread(const char* action) const +{ + if (juce::MessageManager::getInstance()->isThisTheMessageThread()) + return true; + + juce::Logger::writeToLog("Secondary window " + juce::String(action) + + " rejected off message thread: " + windowTitle); + jassertfalse; + return false; +} + +bool MixerWindowManager::createWindow(const juce::Rectangle<int>& targetBounds, bool visible) +{ + if (! componentFactory) + { + setState(WindowState::idle, "component factory missing"); + return false; + } + + beginGlobalCreateSlot(windowTitle); + auto content = componentFactory(); + if (content == nullptr) + { + releaseGlobalCreateSlot(windowTitle); + setState(WindowState::idle, "component factory returned null"); + return false; + } + + mixerWindow = std::make_unique<MixerWindow>(*this, std::move(content)); + mixerWindow->setBounds(targetBounds); + mixerWindow->setVisible(visible); + + if (visible) + { + mixerWindow->toFront(true); + mixerWindow->requestHostedBrowserFocus(); + } + + setState(visible ? WindowState::visible : WindowState::readyHidden, + juce::String(visible ? "created visible bounds=" : "created hidden bounds=") + describeBounds(targetBounds)); + + if (visible) + scheduleStartupNudge(); + + return true; +} + +void MixerWindowManager::scheduleStartupNudge() +{ + if (mixerWindow == nullptr) + return; + + juce::Component::SafePointer<juce::DocumentWindow> safeWindow(mixerWindow.get()); + juce::Timer::callAfterDelay(startupNudgeDelayMs, [safeWindow]() + { + if (safeWindow != nullptr) + { + const auto boundsNow = safeWindow->getBounds(); + safeWindow->setBounds(boundsNow.withWidth(boundsNow.getWidth() + 1)); + safeWindow->setBounds(boundsNow); + } + }); +} + +void MixerWindowManager::beginClose(bool notifyClosed) { if (mixerWindow == nullptr) return; const auto bounds = mixerWindow->getBounds(); + setState(WindowState::closing, "close begin bounds=" + describeBounds(bounds)); + + if (! countedGlobalClose) + { + countedGlobalClose = true; + ++globalCloseDepth; + juce::Logger::writeToLog("Secondary window global close depth: " + + juce::String(globalCloseDepth) + + " after closing " + windowTitle); + } + + if (closeStartedMs == 0) + closeStartedMs = juce::Time::currentTimeMillis(); + + // JUCE 9.0.1 removes a destroyed WebView2 from its construction queue and + // disconnects WKWebView delegates during teardown. Retire the native window + // first, then destroy it after the cross-window settle period so user-driven + // close/reopen bursts remain ordered without retaining one browser forever for + // every MIDI clip or built-in plug-in session. mixerWindow->setVisible(false); - mixerWindow = nullptr; + closingWindow = std::move(mixerWindow); + setState(WindowState::retired, "close retired bounds=" + describeBounds(bounds)); - if (closedCallback) + if (notifyClosed && closedCallback) closedCallback(bounds); + + closePendingUntilStartupSettles = false; + startTimer(closeDestroyDelayMs); +} + +void MixerWindowManager::finishClose() +{ + if (closingWindow != nullptr) + { + if (auto* hosted = closingWindow->getHostedComponent()) + { + const auto elapsedMs = juce::Time::currentTimeMillis() - closeStartedMs; + if (! hosted->hasFrontendStartupReachedTerminalState() && elapsedMs < closeStartupMaxWaitMs) + { + juce::Logger::writeToLog("Secondary retired window destruction delayed until frontend startup settles: " + + windowTitle + + " startupState=" + hosted->getFrontendStartupStateDescription() + + " elapsedMs=" + juce::String(elapsedMs)); + startTimer(closeReadinessPollMs); + return; + } + + hosted->prepareForSecondaryWindowClose(); + } + + juce::Logger::writeToLog("Secondary retired window destroyed: " + windowTitle); + closingWindow->setVisible(false); + closingWindow = nullptr; + } + + closeStartedMs = 0; + stopTimer(); + setState(WindowState::idle, "close complete"); + releaseGlobalCloseSlot(); + drainGlobalPendingRequests(); +} + +void MixerWindowManager::releaseGlobalCloseSlot() +{ + if (! countedGlobalClose) + return; + + countedGlobalClose = false; + globalCloseDepth = juce::jmax(0, globalCloseDepth - 1); + juce::Logger::writeToLog("Secondary window global close depth: " + + juce::String(globalCloseDepth) + + " after destroying " + windowTitle); +} + +void MixerWindowManager::setState(WindowState nextState, const juce::String& reason) +{ + if (state == nextState && reason.isEmpty()) + return; + + juce::Logger::writeToLog("Secondary window state: " + windowTitle + + " " + juce::String(stateToString(state)) + + " -> " + juce::String(stateToString(nextState)) + + (reason.isNotEmpty() ? " (" + reason + ")" : juce::String())); + state = nextState; +} + +void MixerWindowManager::queuePendingRequest(PendingRequest::Type type, const juce::Rectangle<int>& bounds) +{ + if (type == PendingRequest::Type::focus) + { + if (pendingRequest.type == PendingRequest::Type::prewarm) + { + pendingRequest.type = PendingRequest::Type::open; + addPendingManager(*this); + juce::Logger::writeToLog("Secondary window pending prewarm upgraded to open: " + windowTitle + + (pendingRequest.bounds.isEmpty() ? juce::String() : " bounds=" + describeBounds(pendingRequest.bounds))); + return; + } + + if (pendingRequest.type == PendingRequest::Type::open) + { + addPendingManager(*this); + return; + } + } + + pendingRequest.type = type; + pendingRequest.bounds = bounds; + addPendingManager(*this); + + juce::String typeName = "none"; + if (type == PendingRequest::Type::open) + typeName = "open"; + else if (type == PendingRequest::Type::prewarm) + typeName = "prewarm"; + else if (type == PendingRequest::Type::focus) + typeName = "focus"; + + juce::Logger::writeToLog("Secondary window request queued: " + windowTitle + + " request=" + typeName + + " state=" + getStateDescription() + + (bounds.isEmpty() ? juce::String() : " bounds=" + describeBounds(bounds))); +} + +void MixerWindowManager::runPendingRequest() +{ + const auto pending = pendingRequest; + pendingRequest = {}; + + if (pending.type == PendingRequest::Type::none) + return; + + juce::Logger::writeToLog("Secondary window running queued request: " + windowTitle + + " state=" + getStateDescription()); + + if (pending.type == PendingRequest::Type::open) + open(pending.bounds); + else if (pending.type == PendingRequest::Type::prewarm) + prewarm(pending.bounds); + else if (pending.type == PendingRequest::Type::focus) + focus(); +} + +void MixerWindowManager::timerCallback() +{ + if (closePendingUntilStartupSettles) + { + if (mixerWindow == nullptr) + { + closePendingUntilStartupSettles = false; + finishClose(); + return; + } + + const auto elapsedMs = juce::Time::currentTimeMillis() - closeStartedMs; + if (auto* hosted = mixerWindow->getHostedComponent()) + { + if (! hosted->hasFrontendStartupReachedTerminalState() && elapsedMs < closeStartupMaxWaitMs) + { + juce::Logger::writeToLog("Secondary window close waiting for frontend startup to settle: " + + windowTitle + + " startupState=" + hosted->getFrontendStartupStateDescription() + + " elapsedMs=" + juce::String(elapsedMs)); + startTimer(closeReadinessPollMs); + return; + } + } + + juce::Logger::writeToLog("Secondary window pending close now entering teardown: " + windowTitle + + " elapsedMs=" + juce::String(elapsedMs)); + closePendingUntilStartupSettles = false; + beginClose(true); + return; + } + + finishClose(); } diff --git a/Source/MixerWindowManager.h b/Source/MixerWindowManager.h index 6455150..b946e74 100644 --- a/Source/MixerWindowManager.h +++ b/Source/MixerWindowManager.h @@ -6,7 +6,7 @@ class MainComponent; -class MixerWindowManager +class MixerWindowManager : private juce::Timer { public: using ComponentFactory = std::function<std::unique_ptr<MainComponent>()>; @@ -26,11 +26,55 @@ class MixerWindowManager bool hide(); bool close(); bool isOpen() const; + bool isFrontendReady() const; + juce::String getFrontendStartupStateDescription() const; + juce::String getStateDescription() const; private: class MixerWindow; - void handleWindowClosed(); + enum class WindowState + { + idle, + creating, + readyHidden, + visible, + closing, + retired + }; + + struct PendingRequest + { + enum class Type + { + none, + open, + prewarm, + focus + }; + + Type type = Type::none; + juce::Rectangle<int> bounds; + }; + + static const char* stateToString(WindowState state) noexcept; + static bool isGlobalCloseInProgress() noexcept; + static bool isGlobalCreateInProgress() noexcept; + static bool isGlobalLifecycleBusy() noexcept; + static void addPendingManager(MixerWindowManager& manager); + static void drainGlobalPendingRequests(); + static void beginGlobalCreateSlot(const juce::String& title); + static void releaseGlobalCreateSlot(const juce::String& title); + bool ensureMessageThread(const char* action) const; + bool createWindow(const juce::Rectangle<int>& targetBounds, bool visible); + void scheduleStartupNudge(); + void beginClose(bool notifyClosed); + void finishClose(); + void releaseGlobalCloseSlot(); + void setState(WindowState nextState, const juce::String& reason = {}); + void queuePendingRequest(PendingRequest::Type type, const juce::Rectangle<int>& bounds = {}); + void runPendingRequest(); + void timerCallback() override; ComponentFactory componentFactory; ClosedCallback closedCallback; @@ -38,7 +82,22 @@ class MixerWindowManager juce::Rectangle<int> defaultBounds; int minWidth = 900; int minHeight = 380; + WindowState state = WindowState::idle; + PendingRequest pendingRequest; std::unique_ptr<MixerWindow> mixerWindow; + std::unique_ptr<MixerWindow> closingWindow; + bool countedGlobalClose = false; + bool closePendingUntilStartupSettles = false; + juce::int64 closeStartedMs = 0; + + static constexpr int closeDestroyDelayMs = 1500; + static constexpr int closeReadinessPollMs = 250; + static constexpr int closeStartupMaxWaitMs = 8000; + static constexpr int createSettleDelayMs = 1200; + static constexpr int startupNudgeDelayMs = 600; + static int globalCloseDepth; + static int globalCreateDepth; + static juce::Array<MixerWindowManager*> managersWithPendingRequests; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(MixerWindowManager) }; diff --git a/Source/NAMCabPresentation.cpp b/Source/NAMCabPresentation.cpp new file mode 100644 index 0000000..6d7202e --- /dev/null +++ b/Source/NAMCabPresentation.cpp @@ -0,0 +1,1945 @@ +#include "NAMCabPresentation.h" + +#include <algorithm> +#include <cmath> +#include <limits> + +namespace +{ +constexpr std::array<float, 8> roomTapMilliseconds { + 3.1f, 5.7f, 8.9f, 12.7f, + 17.3f, 22.9f, 28.7f, 36.1f +}; + +constexpr std::array<float, 8> roomCrossDeltaMilliseconds { + 0.7f, 1.3f, 0.9f, 1.7f, + 1.1f, 2.1f, 1.5f, 2.7f +}; + +constexpr std::array<float, 8> roomDirectTapGainL { + 0.46f, -0.34f, 0.28f, -0.23f, + 0.19f, -0.15f, 0.12f, -0.09f +}; + +constexpr std::array<float, 8> roomCrossTapGainL { + 0.17f, 0.14f, -0.13f, 0.11f, + -0.10f, 0.085f, -0.071f, 0.058f +}; + +// A real room does not present mirrored image-source paths to the two ears. +// These fixed sub-millisecond offsets and modest gain/polarity differences +// create a stable stereo field from a mono close cabinet without an LFO or a +// random result on recall. The unchanged close signal remains the centre +// anchor; only the parallel wet field is asymmetric. +constexpr std::array<float, 8> roomRightDirectDeltaMilliseconds { + 0.43f, -0.29f, 0.61f, -0.37f, + 0.83f, -0.47f, 1.07f, -0.59f +}; + +constexpr std::array<float, 8> roomRightCrossExtraMilliseconds { + 0.31f, -0.21f, 0.47f, -0.33f, + 0.69f, -0.41f, 0.91f, -0.55f +}; + +constexpr std::array<float, 8> roomDirectTapGainR { + 0.43f, -0.31f, 0.255f, -0.205f, + -0.175f, -0.137f, 0.108f, 0.076f +}; + +constexpr std::array<float, 8> roomCrossTapGainR { + -0.155f, 0.128f, -0.118f, 0.102f, + -0.091f, -0.078f, -0.065f, 0.051f +}; + +// Mutually incommensurate short delays make a compact four-line Householder +// FDN dense quickly without modulation. The feedback range below gives an +// approximate 180..650 ms RT60 around the mean line length. +constexpr std::array<float, 4> lateRoomDelayMilliseconds { + 29.7f, 34.9f, 41.3f, 47.9f +}; + +constexpr float butterworthQ = 0.7071067811865475f; +// 2^(6 cents / 1200) - 1. Kept as a literal so the realtime drift segment +// setup never evaluates pow(). +constexpr float maximumDoublerDelaySlope = 0.0034717485f; +constexpr float selfTestTolerance = 2.0e-6f; +// Product references motivate a centred low-frequency presentation, but no +// ITU recommendation mandates a numerical crossover target. These explicit +// engineering thresholds are therefore reported rather than presented as a +// psychoacoustic standard. +constexpr float lowFrequencySideToMidLimitDb = -18.0f; +constexpr float highFrequencySideRmsMinimum = 1.0e-4f; +// This is a deterministic post-arrival automation residual, not an audible +// quality threshold. The audible linear wet laws intentionally produce more +// signal during a 20 ms move than the retired squared laws; -74 dBFS remains +// a conservative ceiling for a one-sample residual step. +constexpr float automationDezipperErrorLimit = 2.0e-4f; +constexpr float automationOutputPeakLimit = 4.0f; + +float maximumAbsoluteDifference(const juce::AudioBuffer<float>& first, + const juce::AudioBuffer<float>& second) noexcept +{ + const int channels = juce::jmin(first.getNumChannels(), second.getNumChannels()); + const int samples = juce::jmin(first.getNumSamples(), second.getNumSamples()); + float maximumDifference = 0.0f; + for (int channel = 0; channel < channels; ++channel) + { + const auto* const firstSamples = first.getReadPointer(channel); + const auto* const secondSamples = second.getReadPointer(channel); + for (int sample = 0; sample < samples; ++sample) + { + maximumDifference = juce::jmax( + maximumDifference, + std::abs(firstSamples[sample] - secondSamples[sample])); + } + } + return maximumDifference; +} + +void fillDeterministicTestSignal(juce::AudioBuffer<float>& buffer) noexcept +{ + std::uint32_t randomState = 0x4d595df4u; + const int channels = buffer.getNumChannels(); + const int samples = buffer.getNumSamples(); + for (int sample = 0; sample < samples; ++sample) + { + randomState ^= randomState << 13u; + randomState ^= randomState >> 17u; + randomState ^= randomState << 5u; + const float noise = static_cast<float>(randomState & 0x00ffffffu) + * (2.0f / 16777215.0f) - 1.0f; + const float phase = static_cast<float>(sample) + * (2.0f * juce::MathConstants<float>::pi * 113.0f / 48000.0f); + const float value = std::sin(phase) * 0.24f + noise * 0.035f; + for (int channel = 0; channel < channels; ++channel) + buffer.setSample(channel, sample, value); + } +} + +void processInPartitions(NAMCabPresentation& processor, + juce::AudioBuffer<float>& buffer, + int partitionSize) noexcept +{ + const int safePartitionSize = juce::jmax(1, partitionSize); + int offset = 0; + while (offset < buffer.getNumSamples()) + { + const int blockSamples = juce::jmin( + safePartitionSize, + buffer.getNumSamples() - offset); + std::array<float*, 2> channelPointers { + buffer.getWritePointer(0, offset), + buffer.getNumChannels() >= 2 + ? buffer.getWritePointer(1, offset) + : nullptr + }; + juce::AudioBuffer<float> block( + channelPointers.data(), + buffer.getNumChannels(), + blockSamples); + processor.process(block); + offset += blockSamples; + } +} +} + +void NAMCabPresentation::Biquad::configureLowPass(double sampleRate, + float frequencyHz, + float q) noexcept +{ + const float safeSampleRate = static_cast<float>(juce::jmax(1.0, sampleRate)); + const float safeFrequency = juce::jlimit(5.0f, safeSampleRate * 0.45f, frequencyHz); + const float safeQ = juce::jmax(0.05f, q); + const float omega = 2.0f * juce::MathConstants<float>::pi + * safeFrequency / safeSampleRate; + const float cosine = std::cos(omega); + const float sine = std::sin(omega); + const float alpha = sine / (2.0f * safeQ); + const float inverseA0 = 1.0f / (1.0f + alpha); + + b0 = (1.0f - cosine) * 0.5f * inverseA0; + b1 = (1.0f - cosine) * inverseA0; + b2 = b0; + a1 = -2.0f * cosine * inverseA0; + a2 = (1.0f - alpha) * inverseA0; +} + +void NAMCabPresentation::Biquad::configureHighPass(double sampleRate, + float frequencyHz, + float q) noexcept +{ + const float safeSampleRate = static_cast<float>(juce::jmax(1.0, sampleRate)); + const float safeFrequency = juce::jlimit(5.0f, safeSampleRate * 0.45f, frequencyHz); + const float safeQ = juce::jmax(0.05f, q); + const float omega = 2.0f * juce::MathConstants<float>::pi + * safeFrequency / safeSampleRate; + const float cosine = std::cos(omega); + const float sine = std::sin(omega); + const float alpha = sine / (2.0f * safeQ); + const float inverseA0 = 1.0f / (1.0f + alpha); + + b0 = (1.0f + cosine) * 0.5f * inverseA0; + b1 = -(1.0f + cosine) * inverseA0; + b2 = b0; + a1 = -2.0f * cosine * inverseA0; + a2 = (1.0f - alpha) * inverseA0; +} + +void NAMCabPresentation::Biquad::reset() noexcept +{ + z1 = 0.0f; + z2 = 0.0f; +} + +float NAMCabPresentation::Biquad::processSample(float sample) noexcept +{ + if (! std::isfinite(sample) + || ! std::isfinite(z1) + || ! std::isfinite(z2)) + { + reset(); + return 0.0f; + } + const float output = b0 * sample + z1; + const float nextZ1 = b1 * sample - a1 * output + z2; + const float nextZ2 = b2 * sample - a2 * output; + if (! std::isfinite(output) + || ! std::isfinite(nextZ1) + || ! std::isfinite(nextZ2)) + { + reset(); + return 0.0f; + } + z1 = nextZ1; + z2 = nextZ2; + return output; +} + +float NAMCabPresentation::clampUnit(float value) noexcept +{ + return std::isfinite(value) ? juce::jlimit(0.0f, 1.0f, value) : 0.0f; +} + +float NAMCabPresentation::nextRandomSigned(std::uint32_t& state) noexcept +{ + if (state == 0u) + state = 0x6d2b79f5u; + state ^= state << 13u; + state ^= state >> 17u; + state ^= state << 5u; + return static_cast<float>(state & 0x00ffffffu) + * (2.0f / 16777215.0f) - 1.0f; +} + +float NAMCabPresentation::smootherStep(float value) noexcept +{ + const float x = juce::jlimit(0.0f, 1.0f, value); + return x * x * x * (x * (x * 6.0f - 15.0f) + 10.0f); +} + +float NAMCabPresentation::raisedCosine(float value) noexcept +{ + const float x = juce::jlimit(0.0f, 1.0f, value); + return 0.5f - 0.5f * std::cos(juce::MathConstants<float>::pi * x); +} + +float NAMCabPresentation::mapRoomGain(float amount) noexcept +{ + // Linear amplitude mapping keeps the useful lower half of the control + // audible. The former squared law attenuated the factory 0.22 setting by + // more than 31 dB before the field's own normalisation. + return 0.85f * clampUnit(amount); +} + +float NAMCabPresentation::mapDoublerGain(float amount) noexcept +{ + // The doubler is a parallel voice against a unity direct signal. A linear + // law gives the default 0.12 setting an audible but still subordinate + // contribution while retaining headroom at the top of the control. + return 0.90f * clampUnit(amount); +} + +float NAMCabPresentation::clampDoublerDelayMs(float delayMs) noexcept +{ + return std::isfinite(delayMs) ? juce::jlimit(3.0f, 20.0f, delayMs) : 4.5f; +} + +void NAMCabPresentation::prepare(double sampleRate, int maximumBlockSize) +{ + prepared = false; + currentSampleRate = std::isfinite(sampleRate) + ? juce::jmax(8000.0, sampleRate) + : 48000.0; + preparedMaximumBlockSize = juce::jmax(1, maximumBlockSize); + + const int roomRingSamples = juce::jmax( + 16, + static_cast<int>(std::ceil(currentSampleRate * 0.064)) + 8); + roomRingL.assign(static_cast<std::size_t>(roomRingSamples), 0.0f); + roomRingR.assign(static_cast<std::size_t>(roomRingSamples), 0.0f); + + for (std::size_t line = 0; line < lateRoomLineCount; ++line) + { + const int lineSamples = juce::jmax( + 8, + juce::roundToInt( + lateRoomDelayMilliseconds[line] + * 0.001f + * static_cast<float>(currentSampleRate))); + lateRoomRings[line].assign( + static_cast<std::size_t>(lineSamples), + 0.0f); + } + + const int doublerRingSamples = juce::jmax( + 16, + static_cast<int>(std::ceil(currentSampleRate * 0.050)) + 8); + doublerRingL.assign(static_cast<std::size_t>(doublerRingSamples), 0.0f); + doublerRingR.assign(static_cast<std::size_t>(doublerRingSamples), 0.0f); + + for (std::size_t tap = 0; tap < roomTapCount; ++tap) + { + roomDirectTapSamplesL[tap] = juce::jlimit( + 1, + roomRingSamples - 4, + juce::roundToInt( + roomTapMilliseconds[tap] + * 0.001f + * static_cast<float>(currentSampleRate))); + roomDirectTapSamplesR[tap] = juce::jlimit( + 1, + roomRingSamples - 4, + juce::roundToInt( + (roomTapMilliseconds[tap] + + roomRightDirectDeltaMilliseconds[tap]) + * 0.001f + * static_cast<float>(currentSampleRate))); + roomCrossTapSamplesL[tap] = juce::jlimit( + 1, + roomRingSamples - 4, + juce::roundToInt( + (roomTapMilliseconds[tap] + roomCrossDeltaMilliseconds[tap]) + * 0.001f + * static_cast<float>(currentSampleRate))); + roomCrossTapSamplesR[tap] = juce::jlimit( + 1, + roomRingSamples - 4, + juce::roundToInt( + (roomTapMilliseconds[tap] + + roomCrossDeltaMilliseconds[tap] + + roomRightCrossExtraMilliseconds[tap]) + * 0.001f + * static_cast<float>(currentSampleRate))); + } + + smoothingCoefficient = 1.0f - std::exp( + -1.0f + / static_cast<float>( + currentSampleRate * static_cast<double>(parameterSmoothingSeconds))); + fastEnvelopeRelease = std::exp( + -1.0f / static_cast<float>(currentSampleRate * 0.008)); + slowEnvelopeCoefficient = 1.0f - std::exp( + -1.0f / static_cast<float>(currentSampleRate * 0.080)); + transientDuckReleaseCoefficient = 1.0f - std::exp( + -1.0f / static_cast<float>(currentSampleRate * 0.060)); + lateRoomDampingCoefficient = 1.0f - std::exp( + -2.0f * juce::MathConstants<float>::pi * 5600.0f + / static_cast<float>(currentSampleRate)); + delayMorphLength = juce::jmax( + 1, + juce::roundToInt( + static_cast<float>(currentSampleRate) + * delayMorphSeconds)); + + configureFilters(); + prepared = true; + reset(); + resetDiagnostics(); +} + +void NAMCabPresentation::configureFilters() noexcept +{ + roomWetHighPassL.configureHighPass(currentSampleRate, 120.0f, butterworthQ); + roomWetHighPassR.configureHighPass(currentSampleRate, 120.0f, butterworthQ); + roomWetLowPassL.configureLowPass(currentSampleRate, 8500.0f, butterworthQ); + roomWetLowPassR.configureLowPass(currentSampleRate, 8500.0f, butterworthQ); + for (auto& filter : roomSideHighPass) + filter.configureHighPass(currentSampleRate, 170.0f, butterworthQ); + + doublerWetHighPassL.configureHighPass(currentSampleRate, 140.0f, butterworthQ); + doublerWetHighPassR.configureHighPass(currentSampleRate, 140.0f, butterworthQ); + doublerWetLowPassL.configureLowPass(currentSampleRate, 9000.0f, butterworthQ); + doublerWetLowPassR.configureLowPass(currentSampleRate, 9000.0f, butterworthQ); + for (auto& filter : doublerSideHighPass) + filter.configureHighPass(currentSampleRate, 170.0f, butterworthQ); +} + +void NAMCabPresentation::resetRoomRuntimeState(bool clearStorage) noexcept +{ + if (clearStorage) + { + std::fill(roomRingL.begin(), roomRingL.end(), 0.0f); + std::fill(roomRingR.begin(), roomRingR.end(), 0.0f); + for (auto& ring : lateRoomRings) + std::fill(ring.begin(), ring.end(), 0.0f); + } + roomWriteIndex = 0; + validRoomHistorySamples = 0; + lateRoomWriteIndices.fill(0); + lateRoomValidSamples.fill(0); + lateRoomDampingStates.fill(0.0f); + roomWetHighPassL.reset(); + roomWetHighPassR.reset(); + roomWetLowPassL.reset(); + roomWetLowPassR.reset(); + for (auto& filter : roomSideHighPass) + filter.reset(); + roomDormant = true; +} + +void NAMCabPresentation::resetDoublerRuntimeState(bool clearStorage) noexcept +{ + if (clearStorage) + { + std::fill(doublerRingL.begin(), doublerRingL.end(), 0.0f); + std::fill(doublerRingR.begin(), doublerRingR.end(), 0.0f); + } + doublerWriteIndex = 0; + validDoublerHistorySamples = 0; + doublerWetHighPassL.reset(); + doublerWetHighPassR.reset(); + doublerWetLowPassL.reset(); + doublerWetLowPassR.reset(); + for (auto& filter : doublerSideHighPass) + filter.reset(); + doublerDriftL = {}; + doublerDriftR = {}; + doublerDriftL.randomState = 0x9e3779b9u; + doublerDriftR.randomState = 0x7f4a7c15u; + transientFastEnvelope = 0.0f; + transientSlowEnvelope = 0.0f; + roomTransientDuck = 1.0f; + doublerTransientDuck = 1.0f; + requestedDelaySpread = clampUnit( + targetDoublerSpread.load(std::memory_order_relaxed)); + activeDelaySpread = requestedDelaySpread; + morphTargetDelaySpread = requestedDelaySpread; + requestedDoublerDelayMs = clampDoublerDelayMs( + targetDoublerDelayMs.load(std::memory_order_relaxed)); + activeDoublerDelayMs = requestedDoublerDelayMs; + morphTargetDoublerDelayMs = requestedDoublerDelayMs; + delayMorphPosition = 0; + delayMorphActive = false; + doublerDormant = true; +} + +void NAMCabPresentation::invalidateRoomHistory() noexcept +{ + resetRoomRuntimeState(false); +} + +void NAMCabPresentation::invalidateDoublerHistory() noexcept +{ + resetDoublerRuntimeState(false); +} + +void NAMCabPresentation::reset() noexcept +{ + const float roomAmount = clampUnit( + targetRoomAmount.load(std::memory_order_relaxed)); + const float doublerAmount = clampUnit( + targetDoublerMix.load(std::memory_order_relaxed)); + currentRoomGain = mapRoomGain(roomAmount); + currentRoomWidth = clampUnit( + targetRoomWidth.load(std::memory_order_relaxed)); + currentLateRoomFeedback = 0.23f + 0.43f * roomAmount; + currentDoublerGain = mapDoublerGain(doublerAmount); + currentDoublerSpread = clampUnit( + targetDoublerSpread.load(std::memory_order_relaxed)); + resetRoomRuntimeState(true); + resetDoublerRuntimeState(true); +} + +void NAMCabPresentation::setParameters(const Parameters& newParameters) noexcept +{ + setRoomAmount(newParameters.roomAmount); + setRoomWidth(newParameters.roomWidth); + setRoomInputSendEnabled(newParameters.roomInputSendEnabled); + setDoublerMix(newParameters.doublerMix); + setDoublerSpread(newParameters.doublerSpread); + setDoublerDelayMs(newParameters.doublerDelayMs); +} + +NAMCabPresentation::Parameters NAMCabPresentation::getParameters() const noexcept +{ + Parameters result; + result.roomAmount = targetRoomAmount.load(std::memory_order_relaxed); + result.roomWidth = targetRoomWidth.load(std::memory_order_relaxed); + result.roomInputSendEnabled = + targetRoomInputSendEnabled.load(std::memory_order_relaxed); + result.doublerMix = targetDoublerMix.load(std::memory_order_relaxed); + result.doublerSpread = targetDoublerSpread.load(std::memory_order_relaxed); + result.doublerDelayMs = + targetDoublerDelayMs.load(std::memory_order_relaxed); + return result; +} + +void NAMCabPresentation::setRoomAmount(float amount) noexcept +{ + targetRoomAmount.store(clampUnit(amount), std::memory_order_relaxed); +} + +void NAMCabPresentation::setRoomWidth(float width) noexcept +{ + targetRoomWidth.store(clampUnit(width), std::memory_order_relaxed); +} + +void NAMCabPresentation::setRoomInputSendEnabled(bool enabled) noexcept +{ + targetRoomInputSendEnabled.store(enabled, std::memory_order_relaxed); +} + +void NAMCabPresentation::setDoublerMix(float mix) noexcept +{ + targetDoublerMix.store(clampUnit(mix), std::memory_order_relaxed); +} + +void NAMCabPresentation::setDoublerSpread(float spread) noexcept +{ + targetDoublerSpread.store(clampUnit(spread), std::memory_order_relaxed); +} + +void NAMCabPresentation::setDoublerDelayMs(float delayMs) noexcept +{ + targetDoublerDelayMs.store( + clampDoublerDelayMs(delayMs), + std::memory_order_relaxed); +} + +float NAMCabPresentation::readRoomSample(const std::vector<float>& ring, + int delaySamples) const noexcept +{ + if (ring.empty() + || delaySamples <= 0 + || delaySamples > validRoomHistorySamples) + { + return 0.0f; + } + + int readIndex = roomWriteIndex - delaySamples; + if (readIndex < 0) + readIndex += static_cast<int>(ring.size()); + return ring[static_cast<std::size_t>(readIndex)]; +} + +float NAMCabPresentation::readDoublerSample(const std::vector<float>& ring, + float delaySamples) const noexcept +{ + if (ring.empty() || ! std::isfinite(delaySamples)) + return 0.0f; + + const float safeDelay = juce::jlimit( + 3.0f, + static_cast<float>(ring.size() - 4u), + delaySamples); + if (static_cast<int>(std::ceil(safeDelay)) + 2 + > validDoublerHistorySamples) + { + return 0.0f; + } + + float readPosition = static_cast<float>(doublerWriteIndex) - safeDelay; + if (readPosition < 0.0f) + readPosition += static_cast<float>(ring.size()); + const int centreIndex = static_cast<int>(std::floor(readPosition)); + const float fraction = readPosition - static_cast<float>(centreIndex); + const int ringSize = static_cast<int>(ring.size()); + const auto sampleAt = [&ring, ringSize] (int index) noexcept + { + while (index < 0) + index += ringSize; + while (index >= ringSize) + index -= ringSize; + return ring[static_cast<std::size_t>(index)]; + }; + + const float y0 = sampleAt(centreIndex - 1); + const float y1 = sampleAt(centreIndex); + const float y2 = sampleAt(centreIndex + 1); + const float y3 = sampleAt(centreIndex + 2); + const float fractionSquared = fraction * fraction; + const float fractionCubed = fractionSquared * fraction; + return 0.5f + * (2.0f * y1 + + (-y0 + y2) * fraction + + (2.0f * y0 - 5.0f * y1 + 4.0f * y2 - y3) * fractionSquared + + (-y0 + 3.0f * y1 - 3.0f * y2 + y3) * fractionCubed); +} + +void NAMCabPresentation::advanceDoublerDrift(DoublerDriftState& state, + float spread) noexcept +{ + if (state.segmentLength <= 0 + || state.segmentPosition >= state.segmentLength) + { + state.offsetStartSamples = state.currentOffsetSamples; + state.levelStart = state.currentLevel; + const float depthMilliseconds = 0.08f + 0.30f * clampUnit(spread); + state.offsetTargetSamples = nextRandomSigned(state.randomState) + * depthMilliseconds + * 0.001f + * static_cast<float>(currentSampleRate); + const float targetLevelDb = nextRandomSigned(state.randomState) * 0.6f; + state.levelTarget = juce::Decibels::decibelsToGain(targetLevelDb); + + const float randomDuration = 0.18f + + (nextRandomSigned(state.randomState) * 0.5f + 0.5f) * 0.42f; + int durationSamples = juce::jmax( + 1, + juce::roundToInt( + randomDuration + * static_cast<float>(currentSampleRate))); + const float offsetChange = std::abs( + state.offsetTargetSamples - state.offsetStartSamples); + const int slopeLimitedSamples = juce::jmax( + 1, + static_cast<int>(std::ceil( + 1.875f * offsetChange + / maximumDoublerDelaySlope))); + durationSamples = juce::jmax(durationSamples, slopeLimitedSamples); + state.segmentLength = durationSamples; + state.segmentPosition = 0; + } + + const float progress = static_cast<float>(state.segmentPosition + 1) + / static_cast<float>(juce::jmax(1, state.segmentLength)); + const float shapedProgress = smootherStep(progress); + state.currentOffsetSamples = state.offsetStartSamples + + (state.offsetTargetSamples - state.offsetStartSamples) * shapedProgress; + state.currentLevel = state.levelStart + + (state.levelTarget - state.levelStart) * shapedProgress; + ++state.segmentPosition; +} + +void NAMCabPresentation::startDoublerDelayMorph(float requestedDelayMsValue, + float requestedSpreadValue) noexcept +{ + const float safeDelayMs = clampDoublerDelayMs(requestedDelayMsValue); + const float safeSpread = clampUnit(requestedSpreadValue); + if (std::abs(safeDelayMs - activeDoublerDelayMs) <= 1.0e-4f + && std::abs(safeSpread - activeDelaySpread) <= 1.0e-5f) + { + activeDoublerDelayMs = safeDelayMs; + morphTargetDoublerDelayMs = safeDelayMs; + activeDelaySpread = safeSpread; + morphTargetDelaySpread = safeSpread; + delayMorphActive = false; + delayMorphPosition = 0; + return; + } + + morphTargetDoublerDelayMs = safeDelayMs; + morphTargetDelaySpread = safeSpread; + delayMorphPosition = 0; + delayMorphActive = true; +} + +void NAMCabPresentation::processLateRoom(float inputL, + float inputR, + float& outputL, + float& outputR) noexcept +{ + std::array<float, lateRoomLineCount> delayed {}; + for (std::size_t line = 0; line < lateRoomLineCount; ++line) + { + auto& ring = lateRoomRings[line]; + if (ring.empty()) + continue; + + const int writeIndex = lateRoomWriteIndices[line]; + const float rawDelayed = lateRoomValidSamples[line] + >= static_cast<int>(ring.size()) + ? ring[static_cast<std::size_t>(writeIndex)] + : 0.0f; + float damped = lateRoomDampingStates[line] + + (rawDelayed - lateRoomDampingStates[line]) + * lateRoomDampingCoefficient; + if (! std::isfinite(damped)) + damped = 0.0f; + lateRoomDampingStates[line] = damped; + delayed[line] = damped; + } + + // 2/N Householder feedback is orthogonal before damping. It distributes + // every arrival to all four unequal lines without growing field energy. + const float householderSum = 0.5f + * (delayed[0] + delayed[1] + delayed[2] + delayed[3]); + const std::array<float, lateRoomLineCount> injection { + inputL, + inputR, + -inputL, + -inputR + }; + for (std::size_t line = 0; line < lateRoomLineCount; ++line) + { + auto& ring = lateRoomRings[line]; + if (ring.empty()) + continue; + + float writeValue = injection[line] * lateRoomInputGain + + (householderSum - delayed[line]) * currentLateRoomFeedback; + if (! std::isfinite(writeValue)) + writeValue = 0.0f; + ring[static_cast<std::size_t>(lateRoomWriteIndices[line])] = writeValue; + ++lateRoomWriteIndices[line]; + if (lateRoomWriteIndices[line] >= static_cast<int>(ring.size())) + lateRoomWriteIndices[line] = 0; + lateRoomValidSamples[line] = juce::jmin( + static_cast<int>(ring.size()), + lateRoomValidSamples[line] + 1); + } + + outputL = (delayed[0] + delayed[1] - delayed[2] - delayed[3]) + * 0.5f + * lateRoomOutputGain; + outputR = (delayed[0] - delayed[1] + delayed[2] - delayed[3]) + * 0.5f + * lateRoomOutputGain; + if (! std::isfinite(outputL)) + outputL = 0.0f; + if (! std::isfinite(outputR)) + outputR = 0.0f; +} + +void NAMCabPresentation::process(juce::AudioBuffer<float>& buffer) noexcept +{ + juce::ScopedNoDenormals noDenormals; + const int numSamples = buffer.getNumSamples(); + const int numChannels = buffer.getNumChannels(); + if (! prepared || numSamples <= 0 || numChannels <= 0) + return; + + diagnosticProcessedBlocks.fetch_add(1u, std::memory_order_relaxed); + diagnosticProcessedSamples.fetch_add( + static_cast<std::uint32_t>(numSamples), + std::memory_order_relaxed); + if (numSamples > preparedMaximumBlockSize) + diagnosticOversizedBlocks.fetch_add(1u, std::memory_order_relaxed); + + const float roomAmount = clampUnit( + targetRoomAmount.load(std::memory_order_relaxed)); + const float roomGainTarget = mapRoomGain(roomAmount); + const float roomWidthTarget = clampUnit( + targetRoomWidth.load(std::memory_order_relaxed)); + const bool roomInputSendEnabled = + targetRoomInputSendEnabled.load(std::memory_order_relaxed); + const float lateRoomFeedbackTarget = 0.23f + 0.43f * roomAmount; + const float doublerAmount = clampUnit( + targetDoublerMix.load(std::memory_order_relaxed)); + const float doublerGainTarget = mapDoublerGain(doublerAmount); + const float doublerSpreadTarget = clampUnit( + targetDoublerSpread.load(std::memory_order_relaxed)); + const float doublerDelayMsTarget = clampDoublerDelayMs( + targetDoublerDelayMs.load(std::memory_order_relaxed)); + requestedDelaySpread = doublerSpreadTarget; + requestedDoublerDelayMs = doublerDelayMsTarget; + + constexpr float dormantThreshold = 1.0e-8f; + if (roomGainTarget <= 0.0f + && doublerGainTarget <= 0.0f + && currentRoomGain <= dormantThreshold + && currentDoublerGain <= dormantThreshold) + { + currentRoomGain = 0.0f; + currentDoublerGain = 0.0f; + currentRoomWidth = roomWidthTarget; + currentDoublerSpread = doublerSpreadTarget; + if (! roomDormant) + invalidateRoomHistory(); + if (! doublerDormant) + invalidateDoublerHistory(); + activeDelaySpread = doublerSpreadTarget; + morphTargetDelaySpread = doublerSpreadTarget; + requestedDelaySpread = doublerSpreadTarget; + activeDoublerDelayMs = doublerDelayMsTarget; + morphTargetDoublerDelayMs = doublerDelayMsTarget; + requestedDoublerDelayMs = doublerDelayMsTarget; + delayMorphActive = false; + transientFastEnvelope = 0.0f; + transientSlowEnvelope = 0.0f; + roomTransientDuck = 1.0f; + doublerTransientDuck = 1.0f; + float dryPeak = 0.0f; + std::uint32_t nonFiniteInputSamples = 0u; + const int channelsToSanitize = juce::jmin(2, numChannels); + for (int channel = 0; channel < channelsToSanitize; ++channel) + { + auto* const samples = buffer.getWritePointer(channel); + for (int sample = 0; sample < numSamples; ++sample) + { + if (! std::isfinite(samples[sample])) + { + samples[sample] = 0.0f; + ++nonFiniteInputSamples; + } + dryPeak = juce::jmax(dryPeak, std::abs(samples[sample])); + } + } + diagnosticNonFiniteInputSamples.fetch_add( + nonFiniteInputSamples, + std::memory_order_relaxed); + diagnosticZeroEffectBlocks.fetch_add(1u, std::memory_order_relaxed); + diagnosticLastDryPeak.store(dryPeak, std::memory_order_relaxed); + diagnosticLastGeneratedMidPeak.store(0.0f, std::memory_order_relaxed); + diagnosticLastGeneratedSidePeak.store(0.0f, std::memory_order_relaxed); + return; + } + + const bool roomShouldRun = roomGainTarget > 0.0f + || currentRoomGain > dormantThreshold; + const bool doublerShouldRun = doublerGainTarget > 0.0f + || currentDoublerGain > dormantThreshold; + if (roomShouldRun && roomDormant) + { + invalidateRoomHistory(); + roomDormant = false; + } + if (doublerShouldRun && doublerDormant) + { + invalidateDoublerHistory(); + doublerDormant = false; + activeDelaySpread = doublerSpreadTarget; + morphTargetDelaySpread = doublerSpreadTarget; + requestedDelaySpread = doublerSpreadTarget; + activeDoublerDelayMs = doublerDelayMsTarget; + morphTargetDoublerDelayMs = doublerDelayMsTarget; + requestedDoublerDelayMs = doublerDelayMsTarget; + } + + float dryPeak = 0.0f; + float generatedMidPeak = 0.0f; + float generatedSidePeak = 0.0f; + std::uint32_t nonFiniteInputSamples = 0u; + std::uint32_t nonFiniteWetSamples = 0u; + + for (int sample = 0; sample < numSamples; ++sample) + { + currentRoomGain += (roomGainTarget - currentRoomGain) + * smoothingCoefficient; + currentRoomWidth += (roomWidthTarget - currentRoomWidth) + * smoothingCoefficient; + currentLateRoomFeedback += + (lateRoomFeedbackTarget - currentLateRoomFeedback) + * smoothingCoefficient; + currentDoublerGain += (doublerGainTarget - currentDoublerGain) + * smoothingCoefficient; + currentDoublerSpread += (doublerSpreadTarget - currentDoublerSpread) + * smoothingCoefficient; + if (roomGainTarget <= 0.0f && currentRoomGain < dormantThreshold) + currentRoomGain = 0.0f; + if (doublerGainTarget <= 0.0f && currentDoublerGain < dormantThreshold) + currentDoublerGain = 0.0f; + + const float rawDryL = buffer.getSample(0, sample); + const float rawDryR = numChannels >= 2 + ? buffer.getSample(1, sample) + : rawDryL; + const bool directLIsFinite = std::isfinite(rawDryL); + const bool directRIsFinite = std::isfinite(rawDryR); + const float dryL = directLIsFinite ? rawDryL : 0.0f; + const float dryR = directRIsFinite ? rawDryR : 0.0f; + if (! directLIsFinite) + ++nonFiniteInputSamples; + if (numChannels >= 2 && ! directRIsFinite) + ++nonFiniteInputSamples; + dryPeak = juce::jmax( + dryPeak, + juce::jmax(std::abs(dryL), std::abs(dryR))); + + if (! std::isfinite(transientFastEnvelope) + || ! std::isfinite(transientSlowEnvelope) + || ! std::isfinite(roomTransientDuck) + || ! std::isfinite(doublerTransientDuck)) + { + transientFastEnvelope = 0.0f; + transientSlowEnvelope = 0.0f; + roomTransientDuck = 1.0f; + doublerTransientDuck = 1.0f; + ++nonFiniteWetSamples; + } + if (roomShouldRun || doublerShouldRun) + { + // A disabled room send must not let unrelated raw input duck a + // draining tail. The doubler continues to use the direct source. + const float detectorInput = roomInputSendEnabled || doublerShouldRun + ? juce::jmax(std::abs(dryL), std::abs(dryR)) + : 0.0f; + transientFastEnvelope = juce::jmax( + detectorInput, + transientFastEnvelope * fastEnvelopeRelease); + transientSlowEnvelope += (detectorInput - transientSlowEnvelope) + * slowEnvelopeCoefficient; + const float novelty = juce::jlimit( + 0.0f, + 1.0f, + (transientFastEnvelope - transientSlowEnvelope) + / (transientFastEnvelope + 1.0e-9f)); + constexpr float roomMinimumDuck = 0.70794576f; + const float roomDuckTarget = 1.0f + - (1.0f - roomMinimumDuck) * novelty; + const float doublerDuckTarget = 1.0f - 0.5f * novelty; + if (roomDuckTarget < roomTransientDuck) + roomTransientDuck = roomDuckTarget; + else + roomTransientDuck += (roomDuckTarget - roomTransientDuck) + * transientDuckReleaseCoefficient; + if (doublerDuckTarget < doublerTransientDuck) + doublerTransientDuck = doublerDuckTarget; + else + doublerTransientDuck += (doublerDuckTarget - doublerTransientDuck) + * transientDuckReleaseCoefficient; + } + + float roomMidContribution = 0.0f; + float roomSideContribution = 0.0f; + if (roomShouldRun && ! roomRingL.empty()) + { + const float roomInputL = roomInputSendEnabled ? dryL : 0.0f; + const float roomInputR = roomInputSendEnabled ? dryR : 0.0f; + roomRingL[static_cast<std::size_t>(roomWriteIndex)] = + roomInputL * roomTransientDuck; + roomRingR[static_cast<std::size_t>(roomWriteIndex)] = + roomInputR * roomTransientDuck; + float earlyL = 0.0f; + float earlyR = 0.0f; + for (std::size_t tap = 0; tap < roomTapCount; ++tap) + { + earlyL += readRoomSample(roomRingL, roomDirectTapSamplesL[tap]) + * roomDirectTapGainL[tap]; + earlyR += readRoomSample(roomRingR, roomDirectTapSamplesR[tap]) + * roomDirectTapGainR[tap]; + earlyL += readRoomSample(roomRingR, roomCrossTapSamplesL[tap]) + * roomCrossTapGainL[tap]; + earlyR += readRoomSample(roomRingL, roomCrossTapSamplesR[tap]) + * roomCrossTapGainR[tap]; + } + earlyL = roomWetLowPassL.processSample( + roomWetHighPassL.processSample(earlyL * roomFieldNormalisation)); + earlyR = roomWetLowPassR.processSample( + roomWetHighPassR.processSample(earlyR * roomFieldNormalisation)); + float lateL = 0.0f; + float lateR = 0.0f; + processLateRoom(earlyL, earlyR, lateL, lateR); + const float roomFieldL = earlyL + lateL; + const float roomFieldR = earlyR + lateR; + float roomMid = (roomFieldL + roomFieldR) * 0.5f; + float roomSide = (roomFieldL - roomFieldR) * 0.5f; + roomSide = roomSideHighPass[0].processSample(roomSide); + roomSide = roomSideHighPass[1].processSample(roomSide); + + const float width = currentRoomWidth * 1.35f; + const float widthCompensation = width > 1.0f + ? std::sqrt(2.0f / (1.0f + width * width)) + : 1.0f; + roomMidContribution = roomMid + * currentRoomGain + * roomMidScale + * widthCompensation; + roomSideContribution = roomSide + * currentRoomGain + * width + * widthCompensation; + + ++roomWriteIndex; + if (roomWriteIndex >= static_cast<int>(roomRingL.size())) + roomWriteIndex = 0; + validRoomHistorySamples = juce::jmin( + static_cast<int>(roomRingL.size()) - 1, + validRoomHistorySamples + 1); + } + + float doublerMidContribution = 0.0f; + float doublerSideContribution = 0.0f; + if (doublerShouldRun && ! doublerRingL.empty()) + { + doublerRingL[static_cast<std::size_t>(doublerWriteIndex)] = + dryL * doublerTransientDuck; + doublerRingR[static_cast<std::size_t>(doublerWriteIndex)] = + dryR * doublerTransientDuck; + + advanceDoublerDrift(doublerDriftL, currentDoublerSpread); + advanceDoublerDrift(doublerDriftR, currentDoublerSpread); + if (! delayMorphActive + && (std::abs( + requestedDoublerDelayMs - activeDoublerDelayMs) + > 1.0e-4f + || std::abs(requestedDelaySpread - activeDelaySpread) + > 1.0e-5f)) + { + startDoublerDelayMorph( + requestedDoublerDelayMs, + requestedDelaySpread); + } + + const auto voiceDelaySamples = [this] (float delayMs, + float spreadValue, + bool leftVoice, + float driftSamples) noexcept + { + const float separationMs = 3.0f * clampUnit(spreadValue); + const float voiceDelayMs = clampDoublerDelayMs( + delayMs + separationMs * (leftVoice ? -0.4f : 0.6f)); + const float minimumSamples = static_cast<float>(currentSampleRate) + * 0.003f; + const float maximumSamples = static_cast<float>(currentSampleRate) + * 0.020f; + return juce::jlimit( + minimumSamples, + maximumSamples, + voiceDelayMs * 0.001f + * static_cast<float>(currentSampleRate) + + driftSamples); + }; + + float voiceL = 0.0f; + float voiceR = 0.0f; + if (delayMorphActive) + { + const float morphProgress = static_cast<float>(delayMorphPosition + 1) + / static_cast<float>(juce::jmax(1, delayMorphLength)); + const float morphWeight = raisedCosine(morphProgress); + const float oldVoiceL = readDoublerSample( + doublerRingL, + voiceDelaySamples( + activeDoublerDelayMs, + activeDelaySpread, + true, + doublerDriftL.currentOffsetSamples)); + const float newVoiceL = readDoublerSample( + doublerRingL, + voiceDelaySamples( + morphTargetDoublerDelayMs, + morphTargetDelaySpread, + true, + doublerDriftL.currentOffsetSamples)); + const float oldVoiceR = readDoublerSample( + doublerRingR, + voiceDelaySamples( + activeDoublerDelayMs, + activeDelaySpread, + false, + doublerDriftR.currentOffsetSamples)); + const float newVoiceR = readDoublerSample( + doublerRingR, + voiceDelaySamples( + morphTargetDoublerDelayMs, + morphTargetDelaySpread, + false, + doublerDriftR.currentOffsetSamples)); + voiceL = oldVoiceL + (newVoiceL - oldVoiceL) * morphWeight; + voiceR = oldVoiceR + (newVoiceR - oldVoiceR) * morphWeight; + ++delayMorphPosition; + if (delayMorphPosition >= delayMorphLength) + { + activeDoublerDelayMs = morphTargetDoublerDelayMs; + activeDelaySpread = morphTargetDelaySpread; + delayMorphPosition = 0; + delayMorphActive = false; + } + } + else + { + voiceL = readDoublerSample( + doublerRingL, + voiceDelaySamples( + activeDoublerDelayMs, + activeDelaySpread, + true, + doublerDriftL.currentOffsetSamples)); + voiceR = readDoublerSample( + doublerRingR, + voiceDelaySamples( + activeDoublerDelayMs, + activeDelaySpread, + false, + doublerDriftR.currentOffsetSamples)); + } + voiceL *= doublerDriftL.currentLevel; + voiceR *= doublerDriftR.currentLevel; + voiceL = doublerWetLowPassL.processSample( + doublerWetHighPassL.processSample(voiceL)); + voiceR = doublerWetLowPassR.processSample( + doublerWetHighPassR.processSample(voiceR)); + const float voiceMid = (voiceL + voiceR) * 0.5f; + float voiceSide = (voiceL - voiceR) * 0.5f; + voiceSide = doublerSideHighPass[0].processSample(voiceSide); + voiceSide = doublerSideHighPass[1].processSample(voiceSide); + doublerMidContribution = voiceMid + * currentDoublerGain + * doublerMidScale; + doublerSideContribution = voiceSide + * currentDoublerGain + * currentDoublerSpread; + + ++doublerWriteIndex; + if (doublerWriteIndex >= static_cast<int>(doublerRingL.size())) + doublerWriteIndex = 0; + validDoublerHistorySamples = juce::jmin( + static_cast<int>(doublerRingL.size()) - 1, + validDoublerHistorySamples + 1); + } + + float generatedMid = roomMidContribution + doublerMidContribution; + float generatedSide = roomSideContribution + doublerSideContribution; + if (! std::isfinite(generatedMid)) + { + generatedMid = 0.0f; + ++nonFiniteWetSamples; + } + if (! std::isfinite(generatedSide)) + { + generatedSide = 0.0f; + ++nonFiniteWetSamples; + } + generatedMidPeak = juce::jmax(generatedMidPeak, std::abs(generatedMid)); + generatedSidePeak = juce::jmax(generatedSidePeak, std::abs(generatedSide)); + + if (numChannels >= 2) + { + float outputL = directLIsFinite + ? dryL + generatedMid + generatedSide + : 0.0f; + float outputR = directRIsFinite + ? dryR + generatedMid - generatedSide + : 0.0f; + if (! std::isfinite(outputL)) + { + outputL = 0.0f; + ++nonFiniteWetSamples; + } + if (! std::isfinite(outputR)) + { + outputR = 0.0f; + ++nonFiniteWetSamples; + } + buffer.setSample( + 0, + sample, + outputL); + buffer.setSample( + 1, + sample, + outputR); + } + else + { + // A side field has no valid mono destination. Discarding it here + // makes mono processing identical to a post-process L/R fold. + float output = directLIsFinite ? dryL + generatedMid : 0.0f; + if (! std::isfinite(output)) + { + output = 0.0f; + ++nonFiniteWetSamples; + } + buffer.setSample(0, sample, output); + } + } + + if (roomGainTarget <= 0.0f && currentRoomGain <= dormantThreshold) + invalidateRoomHistory(); + if (doublerGainTarget <= 0.0f && currentDoublerGain <= dormantThreshold) + invalidateDoublerHistory(); + + diagnosticNonFiniteInputSamples.fetch_add( + nonFiniteInputSamples, + std::memory_order_relaxed); + diagnosticNonFiniteWetSamples.fetch_add( + nonFiniteWetSamples, + std::memory_order_relaxed); + diagnosticLastDryPeak.store(dryPeak, std::memory_order_relaxed); + diagnosticLastGeneratedMidPeak.store(generatedMidPeak, std::memory_order_relaxed); + diagnosticLastGeneratedSidePeak.store(generatedSidePeak, std::memory_order_relaxed); +} + +NAMCabPresentation::DiagnosticSnapshot NAMCabPresentation::getDiagnostics() const noexcept +{ + DiagnosticSnapshot result; + result.processedBlocks = diagnosticProcessedBlocks.load(std::memory_order_relaxed); + result.processedSamples = diagnosticProcessedSamples.load(std::memory_order_relaxed); + result.zeroEffectFastPathBlocks = diagnosticZeroEffectBlocks.load(std::memory_order_relaxed); + result.oversizedBlocks = diagnosticOversizedBlocks.load(std::memory_order_relaxed); + result.nonFiniteInputSamples = diagnosticNonFiniteInputSamples.load(std::memory_order_relaxed); + result.nonFiniteWetSamples = diagnosticNonFiniteWetSamples.load(std::memory_order_relaxed); + result.lastDryPeak = diagnosticLastDryPeak.load(std::memory_order_relaxed); + result.lastGeneratedMidPeak = diagnosticLastGeneratedMidPeak.load(std::memory_order_relaxed); + result.lastGeneratedSidePeak = diagnosticLastGeneratedSidePeak.load(std::memory_order_relaxed); + return result; +} + +void NAMCabPresentation::resetDiagnostics() noexcept +{ + diagnosticProcessedBlocks.store(0u, std::memory_order_relaxed); + diagnosticProcessedSamples.store(0u, std::memory_order_relaxed); + diagnosticZeroEffectBlocks.store(0u, std::memory_order_relaxed); + diagnosticOversizedBlocks.store(0u, std::memory_order_relaxed); + diagnosticNonFiniteInputSamples.store(0u, std::memory_order_relaxed); + diagnosticNonFiniteWetSamples.store(0u, std::memory_order_relaxed); + diagnosticLastDryPeak.store(0.0f, std::memory_order_relaxed); + diagnosticLastGeneratedMidPeak.store(0.0f, std::memory_order_relaxed); + diagnosticLastGeneratedSidePeak.store(0.0f, std::memory_order_relaxed); +} + +NAMCabPresentation::SelfTestResult NAMCabPresentation::runDeterministicSelfTest() +{ + constexpr int sampleRate = 48000; + constexpr int testSamples = 8192; + SelfTestResult result; + result.lowFrequencySideToMidLimitDb = lowFrequencySideToMidLimitDb; + result.highFrequencySideRmsMinimum = highFrequencySideRmsMinimum; + result.automationOutputPeakLimit = automationOutputPeakLimit; + result.automationDezipperErrorLimit = automationDezipperErrorLimit; + + juce::AudioBuffer<float> unityInput(2, testSamples); + fillDeterministicTestSignal(unityInput); + juce::AudioBuffer<float> unityOutput; + unityOutput.makeCopyOf(unityInput); + NAMCabPresentation unityProcessor; + unityProcessor.prepare(sampleRate, 64); + processInPartitions(unityProcessor, unityOutput, 8); + result.zeroEffectMaximumError = maximumAbsoluteDifference(unityInput, unityOutput); + result.zeroEffectUnity = result.zeroEffectMaximumError == 0.0f; + + NAMCabPresentation delayControlProcessor; + const bool defaultDelayValid = + delayControlProcessor.getParameters().doublerDelayMs == 4.5f; + delayControlProcessor.setDoublerDelayMs(-100.0f); + const bool minimumDelayValid = + delayControlProcessor.getParameters().doublerDelayMs == 3.0f; + delayControlProcessor.setDoublerDelayMs(100.0f); + const bool maximumDelayValid = + delayControlProcessor.getParameters().doublerDelayMs == 20.0f; + delayControlProcessor.setDoublerDelayMs( + std::numeric_limits<float>::quiet_NaN()); + const bool malformedDelayValid = + delayControlProcessor.getParameters().doublerDelayMs == 4.5f; + result.doublerDelayControlValid = defaultDelayValid + && minimumDelayValid + && maximumDelayValid + && malformedDelayValid; + + Parameters activeParameters; + activeParameters.roomAmount = 0.65f; + activeParameters.roomWidth = 0.82f; + activeParameters.doublerMix = 0.72f; + activeParameters.doublerSpread = 0.78f; + activeParameters.doublerDelayMs = 4.5f; + + juce::AudioBuffer<float> firstPass; + firstPass.makeCopyOf(unityInput); + NAMCabPresentation deterministicProcessor; + deterministicProcessor.setParameters(activeParameters); + deterministicProcessor.prepare(sampleRate, 64); + processInPartitions(deterministicProcessor, firstPass, 64); + deterministicProcessor.reset(); + juce::AudioBuffer<float> secondPass; + secondPass.makeCopyOf(unityInput); + processInPartitions(deterministicProcessor, secondPass, 64); + result.deterministicResetMaximumError = maximumAbsoluteDifference(firstPass, secondPass); + result.deterministicReset = result.deterministicResetMaximumError <= selfTestTolerance; + + NAMCabPresentation partitionProcessor; + partitionProcessor.setParameters(activeParameters); + partitionProcessor.prepare(sampleRate, testSamples); + juce::AudioBuffer<float> singleBlock; + singleBlock.makeCopyOf(unityInput); + partitionProcessor.process(singleBlock); + partitionProcessor.reset(); + juce::AudioBuffer<float> partitioned; + partitioned.makeCopyOf(unityInput); + processInPartitions(partitionProcessor, partitioned, 13); + result.blockPartitionMaximumError = maximumAbsoluteDifference(singleBlock, partitioned); + result.blockPartitionInvariant = result.blockPartitionMaximumError <= selfTestTolerance; + + NAMCabPresentation stereoProcessor; + NAMCabPresentation monoProcessor; + stereoProcessor.setParameters(activeParameters); + monoProcessor.setParameters(activeParameters); + stereoProcessor.prepare(sampleRate, 64); + monoProcessor.prepare(sampleRate, 64); + juce::AudioBuffer<float> stereoSignal; + stereoSignal.makeCopyOf(unityInput); + juce::AudioBuffer<float> monoSignal(1, testSamples); + monoSignal.copyFrom(0, 0, unityInput, 0, 0, testSamples); + processInPartitions(stereoProcessor, stereoSignal, 8); + processInPartitions(monoProcessor, monoSignal, 8); + float monoFoldError = 0.0f; + for (int sample = 0; sample < testSamples; ++sample) + { + const float folded = (stereoSignal.getSample(0, sample) + + stereoSignal.getSample(1, sample)) * 0.5f; + monoFoldError = juce::jmax( + monoFoldError, + std::abs(folded - monoSignal.getSample(0, sample))); + } + result.monoFoldMaximumError = monoFoldError; + result.algebraicSideCancellation = monoFoldError <= selfTestTolerance; + + Parameters roomOnly; + roomOnly.roomAmount = 1.0f; + roomOnly.roomWidth = 0.65f; + roomOnly.doublerMix = 0.0f; + roomOnly.doublerSpread = 0.65f; + NAMCabPresentation stereoRoomProcessor; + NAMCabPresentation monoRoomProcessor; + stereoRoomProcessor.setParameters(roomOnly); + monoRoomProcessor.setParameters(roomOnly); + stereoRoomProcessor.prepare(sampleRate, 64); + monoRoomProcessor.prepare(sampleRate, 64); + juce::AudioBuffer<float> stereoRoomSignal; + stereoRoomSignal.makeCopyOf(unityInput); + juce::AudioBuffer<float> monoRoomSignal(1, testSamples); + monoRoomSignal.copyFrom(0, 0, unityInput, 0, 0, testSamples); + processInPartitions(stereoRoomProcessor, stereoRoomSignal, 8); + processInPartitions(monoRoomProcessor, monoRoomSignal, 8); + float monoRoomSidePeak = 0.0f; + float monoRoomFoldError = 0.0f; + for (int sample = 0; sample < testSamples; ++sample) + { + const float roomLeft = stereoRoomSignal.getSample(0, sample); + const float roomRight = stereoRoomSignal.getSample(1, sample); + monoRoomSidePeak = juce::jmax( + monoRoomSidePeak, + std::abs((roomLeft - roomRight) * 0.5f)); + const float folded = (roomLeft + roomRight) * 0.5f; + monoRoomFoldError = juce::jmax( + monoRoomFoldError, + std::abs(folded - monoRoomSignal.getSample(0, sample))); + } + result.monoRoomGeneratedSidePeak = monoRoomSidePeak; + result.monoRoomFoldMaximumError = monoRoomFoldError; + result.monoRoomCreatesStereo = monoRoomSidePeak >= 1.0e-4f; + result.monoRoomFoldContractValid = monoRoomFoldError <= selfTestTolerance; + + NAMCabPresentation roomProcessor; + roomProcessor.setParameters(roomOnly); + roomProcessor.prepare(sampleRate, 64); + constexpr int impulseSamples = 12000; + juce::AudioBuffer<float> impulse(2, impulseSamples); + impulse.clear(); + impulse.setSample(0, 0, 1.0f); + impulse.setSample(1, 0, 1.0f); + processInPartitions(roomProcessor, impulse, 8); + result.expectedRoomFirstArrivalSample = juce::roundToInt(3.1f * 0.001f * sampleRate); + for (int sample = 1; sample < impulseSamples; ++sample) + { + const float wetL = impulse.getSample(0, sample); + const float wetR = impulse.getSample(1, sample); + if (std::abs(wetL) > 1.0e-8f || std::abs(wetR) > 1.0e-8f) + { + result.observedRoomFirstArrivalSample = sample; + break; + } + } + result.roomFirstArrivalValid = + result.observedRoomFirstArrivalSample == result.expectedRoomFirstArrivalSample; + + float preArrivalError = 0.0f; + for (int sample = 0; + sample < result.expectedRoomFirstArrivalSample; + ++sample) + { + const float expected = sample == 0 ? 1.0f : 0.0f; + preArrivalError = juce::jmax( + preArrivalError, + std::abs(impulse.getSample(0, sample) - expected)); + preArrivalError = juce::jmax( + preArrivalError, + std::abs(impulse.getSample(1, sample) - expected)); + } + result.preArrivalDirectMaximumError = preArrivalError; + result.preArrivalDirectExact = preArrivalError == 0.0f; + + constexpr int lateRoomMeasurementStart = sampleRate * 3 / 20; + constexpr int lateRoomMeasurementEnd = sampleRate / 5; + double lateRoomEnergy = 0.0; + int lateRoomMeasurementSamples = 0; + for (int sample = lateRoomMeasurementStart; + sample < lateRoomMeasurementEnd; + ++sample) + { + const double left = static_cast<double>(impulse.getSample(0, sample)); + const double right = static_cast<double>(impulse.getSample(1, sample)); + lateRoomEnergy += left * left + right * right; + lateRoomMeasurementSamples += 2; + } + result.lateRoom150msRms = lateRoomMeasurementSamples > 0 + ? static_cast<float>(std::sqrt( + lateRoomEnergy / static_cast<double>(lateRoomMeasurementSamples))) + : 0.0f; + result.lateRoomFieldValid = result.lateRoom150msRms >= 1.0e-7f; + + Parameters gatedRoom = roomOnly; + gatedRoom.roomInputSendEnabled = false; + NAMCabPresentation gatedNewInputProcessor; + gatedNewInputProcessor.setParameters(gatedRoom); + gatedNewInputProcessor.prepare(sampleRate, 64); + juce::AudioBuffer<float> gatedNewInputReference; + gatedNewInputReference.makeCopyOf(unityInput); + juce::AudioBuffer<float> gatedNewInputOutput; + gatedNewInputOutput.makeCopyOf(unityInput); + processInPartitions(gatedNewInputProcessor, gatedNewInputOutput, 8); + result.gatedRoomNewInputMaximumError = maximumAbsoluteDifference( + gatedNewInputReference, + gatedNewInputOutput); + + NAMCabPresentation gatedTailProcessor; + gatedTailProcessor.setParameters(roomOnly); + gatedTailProcessor.prepare(sampleRate, 64); + juce::AudioBuffer<float> gatedTailExcitation(2, sampleRate / 8); + gatedTailExcitation.clear(); + gatedTailExcitation.setSample(0, 0, 1.0f); + gatedTailExcitation.setSample(1, 0, 1.0f); + processInPartitions(gatedTailProcessor, gatedTailExcitation, 8); + gatedTailProcessor.setRoomInputSendEnabled(false); + juce::AudioBuffer<float> gatedTailDrain(2, sampleRate / 4); + gatedTailDrain.clear(); + processInPartitions(gatedTailProcessor, gatedTailDrain, 8); + float gatedTailPeak = 0.0f; + for (int channel = 0; channel < 2; ++channel) + { + for (int sample = 0; sample < gatedTailDrain.getNumSamples(); ++sample) + { + gatedTailPeak = juce::jmax( + gatedTailPeak, + std::abs(gatedTailDrain.getSample(channel, sample))); + } + } + result.gatedRoomTailPeak = gatedTailPeak; + result.roomInputSendGateValid = + result.gatedRoomNewInputMaximumError == 0.0f + && result.gatedRoomTailPeak >= 1.0e-7f; + bool multiRateTimingValid = true; + constexpr std::array<int, 3> roomTimingSampleRates { 44100, 48000, 96000 }; + for (const int timingSampleRate : roomTimingSampleRates) + { + NAMCabPresentation timingProcessor; + timingProcessor.setParameters(roomOnly); + timingProcessor.prepare(timingSampleRate, 64); + const int timingSamples = timingSampleRate / 10; + juce::AudioBuffer<float> timingImpulse(2, timingSamples); + timingImpulse.clear(); + timingImpulse.setSample(0, 0, 1.0f); + timingImpulse.setSample(1, 0, 1.0f); + processInPartitions(timingProcessor, timingImpulse, 8); + const int expectedFirstArrival = juce::roundToInt( + 3.1f * 0.001f * static_cast<float>(timingSampleRate)); + int observedFirstArrival = -1; + float timingDirectError = 0.0f; + for (int sample = 0; sample < timingSamples; ++sample) + { + const float expected = sample == 0 ? 1.0f : 0.0f; + if (sample < expectedFirstArrival) + { + timingDirectError = juce::jmax( + timingDirectError, + std::abs(timingImpulse.getSample(0, sample) - expected)); + timingDirectError = juce::jmax( + timingDirectError, + std::abs(timingImpulse.getSample(1, sample) - expected)); + } + if (sample > 0 + && observedFirstArrival < 0 + && (std::abs(timingImpulse.getSample(0, sample)) > 1.0e-8f + || std::abs(timingImpulse.getSample(1, sample)) > 1.0e-8f)) + { + observedFirstArrival = sample; + } + } + multiRateTimingValid = multiRateTimingValid + && timingDirectError == 0.0f + && observedFirstArrival == expectedFirstArrival; + } + result.multiRateRoomTimingValid = multiRateTimingValid; + + struct ToneFieldMeasurement + { + float wetMidRms = 0.0f; + float sideRms = 0.0f; + }; + const auto measureRoomTone = [&roomOnly] (float frequencyHz, + int toneSampleRate) + { + const int toneSamples = juce::jmax(4096, toneSampleRate / 2); + Parameters wideRoom = roomOnly; + wideRoom.roomWidth = 1.0f; + NAMCabPresentation toneProcessor; + toneProcessor.setParameters(wideRoom); + toneProcessor.prepare(toneSampleRate, 64); + juce::AudioBuffer<float> tone(2, toneSamples); + for (int sample = 0; sample < toneSamples; ++sample) + { + const float phase = static_cast<float>(sample) + * (2.0f * juce::MathConstants<float>::pi + * frequencyHz / static_cast<float>(toneSampleRate)); + const float value = std::sin(phase) * 0.25f; + tone.setSample(0, sample, value); + tone.setSample(1, sample, value); + } + processInPartitions(toneProcessor, tone, 8); + double midEnergy = 0.0; + double sideEnergy = 0.0; + const int measurementStart = toneSamples / 2; + for (int sample = measurementStart; sample < toneSamples; ++sample) + { + const double left = static_cast<double>(tone.getSample(0, sample)); + const double right = static_cast<double>(tone.getSample(1, sample)); + const double phase = static_cast<double>(sample) + * (2.0 * juce::MathConstants<double>::pi + * static_cast<double>(frequencyHz) + / static_cast<double>(toneSampleRate)); + const double dry = std::sin(phase) * 0.25; + const double wetMid = (left + right) * 0.5 - dry; + const double side = (left - right) * 0.5; + midEnergy += wetMid * wetMid; + sideEnergy += side * side; + } + const double inverseCount = 1.0 + / static_cast<double>(toneSamples - measurementStart); + ToneFieldMeasurement measurement; + measurement.wetMidRms = static_cast<float>( + std::sqrt(midEnergy * inverseCount)); + measurement.sideRms = static_cast<float>( + std::sqrt(sideEnergy * inverseCount)); + return measurement; + }; + + constexpr std::array<int, 3> testSampleRates { 44100, 48000, 96000 }; + float worstLowFrequencyRatioDb = -160.0f; + float minimumHighFrequencySideRms = std::numeric_limits<float>::max(); + for (const int testSampleRate : testSampleRates) + { + const auto lowTone = measureRoomTone(80.0f, testSampleRate); + const auto highTone = measureRoomTone(1000.0f, testSampleRate); + const float lowRatioDb = lowTone.sideRms > 0.0f + ? 20.0f * std::log10( + lowTone.sideRms + / juce::jmax(1.0e-12f, lowTone.wetMidRms)) + : -160.0f; + worstLowFrequencyRatioDb = juce::jmax( + worstLowFrequencyRatioDb, + lowRatioDb); + minimumHighFrequencySideRms = juce::jmin( + minimumHighFrequencySideRms, + highTone.sideRms); + } + result.room80HzSideToMidDb = worstLowFrequencyRatioDb; + result.room1kHzSideRms = minimumHighFrequencySideRms; + result.lowFrequencyRoomFieldCentred = + result.room80HzSideToMidDb <= lowFrequencySideToMidLimitDb; + result.highFrequencyRoomSidePresent = + result.room1kHzSideRms >= highFrequencySideRmsMinimum; + + Parameters automationPrefill; + automationPrefill.roomAmount = 1.0f; + automationPrefill.roomWidth = 0.0f; + automationPrefill.doublerMix = 1.0f; + automationPrefill.doublerSpread = 0.0f; + NAMCabPresentation automationProcessor; + NAMCabPresentation automationReferenceProcessor; + automationProcessor.setParameters(automationPrefill); + automationReferenceProcessor.setParameters(automationPrefill); + automationProcessor.prepare(sampleRate, 64); + automationReferenceProcessor.prepare(sampleRate, 64); + constexpr int preAutomationSamples = 4096; + constexpr int automationOffSamples = 2400; + constexpr int automatedSamples = 8192; + juce::AudioBuffer<float> preAutomation(2, preAutomationSamples); + for (int sample = 0; sample < preAutomationSamples; ++sample) + { + const float phase = static_cast<float>(sample) + * (2.0f * juce::MathConstants<float>::pi * 311.0f + / static_cast<float>(sampleRate)); + const float value = std::sin(phase) * 0.25f; + preAutomation.setSample(0, sample, value); + preAutomation.setSample(1, sample, value); + } + juce::AudioBuffer<float> preAutomationReference; + preAutomationReference.makeCopyOf(preAutomation); + processInPartitions(automationProcessor, preAutomation, 8); + processInPartitions(automationReferenceProcessor, preAutomationReference, 8); + + Parameters automationZero; + automationZero.roomAmount = 0.0f; + automationZero.roomWidth = 0.0f; + automationZero.doublerMix = 0.0f; + automationZero.doublerSpread = 0.0f; + automationProcessor.setParameters(automationZero); + automationReferenceProcessor.setParameters(automationZero); + juce::AudioBuffer<float> automationOff(2, automationOffSamples); + for (int sample = 0; sample < automationOffSamples; ++sample) + { + const int absoluteSample = preAutomationSamples + sample; + const float phase = static_cast<float>(absoluteSample) + * (2.0f * juce::MathConstants<float>::pi * 311.0f + / static_cast<float>(sampleRate)); + const float value = std::sin(phase) * 0.25f; + automationOff.setSample(0, sample, value); + automationOff.setSample(1, sample, value); + } + juce::AudioBuffer<float> automationOffReference; + automationOffReference.makeCopyOf(automationOff); + processInPartitions(automationProcessor, automationOff, 8); + processInPartitions(automationReferenceProcessor, automationOffReference, 8); + const float previousAutomatedOutput = automationOff.getSample( + 0, automationOffSamples - 1); + const float previousReferenceOutput = automationOffReference.getSample( + 0, automationOffSamples - 1); + + juce::AudioBuffer<float> automationDry(2, automatedSamples); + for (int sample = 0; sample < automatedSamples; ++sample) + { + const int absoluteSample = preAutomationSamples + + automationOffSamples + + sample; + const float phase = static_cast<float>(absoluteSample) + * (2.0f * juce::MathConstants<float>::pi * 311.0f + / static_cast<float>(sampleRate)); + const float value = std::sin(phase) * 0.25f; + automationDry.setSample(0, sample, value); + automationDry.setSample(1, sample, value); + } + juce::AudioBuffer<float> automatedOutput; + automatedOutput.makeCopyOf(automationDry); + juce::AudioBuffer<float> automationReferenceOutput; + automationReferenceOutput.makeCopyOf(automationDry); + Parameters automationMaximum; + automationMaximum.roomAmount = 1.0f; + automationMaximum.roomWidth = 1.0f; + automationMaximum.doublerMix = 1.0f; + automationMaximum.doublerSpread = 1.0f; + automationProcessor.setParameters(automationMaximum); + processInPartitions(automationProcessor, automatedOutput, 8); + processInPartitions( + automationReferenceProcessor, + automationReferenceOutput, + 8); + + bool automationFinite = true; + float automationPeak = 0.0f; + for (int channel = 0; channel < automatedOutput.getNumChannels(); ++channel) + { + for (int sample = 0; sample < automatedOutput.getNumSamples(); ++sample) + { + const float value = automatedOutput.getSample(channel, sample); + if (! std::isfinite(value)) + automationFinite = false; + else + automationPeak = juce::jmax(automationPeak, std::abs(value)); + } + } + float previousAutomationDifference = previousAutomatedOutput + - previousReferenceOutput; + float first32DezipperError = 0.0f; + for (int sample = 0; sample < 32; ++sample) + { + const float automationDifference = automatedOutput.getSample(0, sample) + - automationReferenceOutput.getSample(0, sample); + first32DezipperError = juce::jmax( + first32DezipperError, + std::abs(automationDifference - previousAutomationDifference)); + previousAutomationDifference = automationDifference; + } + const int postMorphStart = juce::jmin( + automatedSamples - 1, + juce::jmax( + juce::roundToInt(delayMorphSeconds * sampleRate), + juce::roundToInt(0.020f * sampleRate)) + + 256); + double postMorphDifferenceEnergy = 0.0; + int postMorphDifferenceSamples = 0; + for (int sample = postMorphStart; sample < automatedSamples; ++sample) + { + for (int channel = 0; channel < 2; ++channel) + { + const double difference = static_cast<double>( + automatedOutput.getSample(channel, sample) + - automationReferenceOutput.getSample(channel, sample)); + postMorphDifferenceEnergy += difference * difference; + ++postMorphDifferenceSamples; + } + } + const float postMorphDifferenceRms = postMorphDifferenceSamples > 0 + ? static_cast<float>(std::sqrt( + postMorphDifferenceEnergy + / static_cast<double>(postMorphDifferenceSamples))) + : 0.0f; + result.automationMaximumOutputPeak = automationPeak; + result.automationFirst32DezipperError = first32DezipperError; + result.automationPostMorphDifferenceRms = postMorphDifferenceRms; + result.automationFiniteAndBounded = automationFinite + && automationPeak <= automationOutputPeakLimit; + result.automationDezippered = + first32DezipperError <= automationDezipperErrorLimit; + result.automationPostArrivalExercised = + postMorphDifferenceRms >= 1.0e-4f; + + NAMCabPresentation transientProcessor; + transientProcessor.setParameters(automationMaximum); + transientProcessor.prepare(sampleRate, 64); + juce::AudioBuffer<float> transientImpulse(2, 1); + transientImpulse.setSample(0, 0, 1.0f); + transientImpulse.setSample(1, 0, 1.0f); + transientProcessor.process(transientImpulse); + result.roomTransientMinimumGain = transientProcessor.roomTransientDuck; + result.doublerTransientMinimumGain = transientProcessor.doublerTransientDuck; + juce::AudioBuffer<float> transientRecovery(2, sampleRate / 2); + transientRecovery.clear(); + processInPartitions(transientProcessor, transientRecovery, 64); + result.roomTransientRecoveredGain = transientProcessor.roomTransientDuck; + result.doublerTransientRecoveredGain = transientProcessor.doublerTransientDuck; + result.transientProtectionValid = + result.roomTransientMinimumGain >= 0.69f + && result.roomTransientMinimumGain <= 0.73f + && result.doublerTransientMinimumGain >= 0.48f + && result.doublerTransientMinimumGain <= 0.52f + && result.roomTransientRecoveredGain >= 0.99f + && result.doublerTransientRecoveredGain >= 0.99f; + + NAMCabPresentation nonFiniteProcessor; + nonFiniteProcessor.setParameters(automationMaximum); + nonFiniteProcessor.prepare(sampleRate, 64); + juce::AudioBuffer<float> nonFiniteWarmup(2, 64); + fillDeterministicTestSignal(nonFiniteWarmup); + nonFiniteProcessor.process(nonFiniteWarmup); + nonFiniteProcessor.roomWetHighPassL.z1 = + std::numeric_limits<float>::quiet_NaN(); + nonFiniteProcessor.roomSideHighPass[0].z2 = + std::numeric_limits<float>::infinity(); + nonFiniteProcessor.doublerWetLowPassR.z1 = + -std::numeric_limits<float>::infinity(); + nonFiniteProcessor.transientFastEnvelope = + std::numeric_limits<float>::quiet_NaN(); + nonFiniteProcessor.roomTransientDuck = + std::numeric_limits<float>::infinity(); + juce::AudioBuffer<float> nonFiniteSignal(2, 4096); + fillDeterministicTestSignal(nonFiniteSignal); + nonFiniteSignal.setSample( + 0, 200, std::numeric_limits<float>::quiet_NaN()); + nonFiniteSignal.setSample( + 1, 400, std::numeric_limits<float>::infinity()); + nonFiniteSignal.setSample( + 0, 600, -std::numeric_limits<float>::infinity()); + nonFiniteSignal.setSample( + 1, 600, std::numeric_limits<float>::quiet_NaN()); + processInPartitions(nonFiniteProcessor, nonFiniteSignal, 8); + bool allRecoveredOutputFinite = true; + for (int channel = 0; channel < 2; ++channel) + { + for (int sample = 0; sample < nonFiniteSignal.getNumSamples(); ++sample) + { + if (! std::isfinite(nonFiniteSignal.getSample(channel, sample))) + allRecoveredOutputFinite = false; + } + } + const auto nonFiniteDiagnostics = nonFiniteProcessor.getDiagnostics(); + const bool invalidDirectSamplesCleared = + nonFiniteSignal.getSample(0, 200) == 0.0f + && nonFiniteSignal.getSample(1, 400) == 0.0f + && nonFiniteSignal.getSample(0, 600) == 0.0f + && nonFiniteSignal.getSample(1, 600) == 0.0f; + result.nonFiniteRecoveryValid = allRecoveredOutputFinite + && invalidDirectSamplesCleared + && nonFiniteDiagnostics.nonFiniteInputSamples == 4u + && nonFiniteDiagnostics.nonFiniteWetSamples >= 1u; + + NAMCabPresentation tailProcessor; + tailProcessor.setParameters(automationMaximum); + tailProcessor.prepare(sampleRate, 64); + constexpr int tailTestSamples = sampleRate * 2; + juce::AudioBuffer<float> tailSignal(2, tailTestSamples); + tailSignal.clear(); + tailSignal.setSample(0, 0, 1.0f); + tailSignal.setSample(1, 0, 1.0f); + processInPartitions(tailProcessor, tailSignal, 8); + float tailEndPeak = 0.0f; + const int tailMeasurementStart = tailTestSamples - sampleRate / 10; + for (int channel = 0; channel < 2; ++channel) + { + for (int sample = tailMeasurementStart; + sample < tailTestSamples; + ++sample) + { + tailEndPeak = juce::jmax( + tailEndPeak, + std::abs(tailSignal.getSample(channel, sample))); + } + } + result.tailEndPeak = tailEndPeak; + result.tailDecayValid = tailEndPeak <= 1.0e-6f; + + result.passed = result.zeroEffectUnity + && result.deterministicReset + && result.blockPartitionInvariant + && result.algebraicSideCancellation + && result.monoRoomCreatesStereo + && result.monoRoomFoldContractValid + && result.roomFirstArrivalValid + && result.lowFrequencyRoomFieldCentred + && result.highFrequencyRoomSidePresent + && result.preArrivalDirectExact + && result.automationFiniteAndBounded + && result.automationDezippered + && result.automationPostArrivalExercised + && result.multiRateRoomTimingValid + && result.transientProtectionValid + && result.nonFiniteRecoveryValid + && result.tailDecayValid + && result.roomInputSendGateValid + && result.lateRoomFieldValid + && result.doublerDelayControlValid; + return result; +} + +NAMCabPresentation::BenchmarkResult NAMCabPresentation::runBenchmark( + BenchmarkMode mode, + double sampleRate, + int blockSize, + int measuredBlocks) +{ + BenchmarkResult result; + result.mode = mode; + result.sampleRate = std::isfinite(sampleRate) + ? juce::jmax(8000.0, sampleRate) + : 48000.0; + result.blockSize = juce::jlimit(1, 8192, blockSize); + result.measuredBlocks = juce::jmax(1000, measuredBlocks); + + Parameters benchmarkParameters; + benchmarkParameters.roomAmount = 1.0f; + benchmarkParameters.roomWidth = 0.80f; + benchmarkParameters.doublerMix = mode == BenchmarkMode::roomAndDoubler + ? 1.0f + : 0.0f; + benchmarkParameters.doublerSpread = mode == BenchmarkMode::roomAndDoubler + ? 1.0f + : 0.65f; + + NAMCabPresentation processor; + processor.setParameters(benchmarkParameters); + processor.prepare(result.sampleRate, result.blockSize); + + juce::AudioBuffer<float> dry(2, result.blockSize); + juce::AudioBuffer<float> processed(2, result.blockSize); + std::uint32_t randomState = 0x243f6a88u; + for (int sample = 0; sample < result.blockSize; ++sample) + { + randomState ^= randomState << 13u; + randomState ^= randomState >> 17u; + randomState ^= randomState << 5u; + const float noise = static_cast<float>(randomState & 0x00ffffffu) + * (2.0f / 16777215.0f) - 1.0f; + const float value = noise * 0.22f; + dry.setSample(0, sample, value); + dry.setSample(1, sample, value); + } + + const auto restoreDry = [&dry, &processed] () noexcept + { + processed.copyFrom(0, 0, dry, 0, 0, dry.getNumSamples()); + processed.copyFrom(1, 0, dry, 1, 0, dry.getNumSamples()); + }; + + constexpr int warmupBlocks = 4096; + for (int block = 0; block < warmupBlocks; ++block) + { + restoreDry(); + processor.process(processed); + } + + std::vector<double> callbackMicroseconds( + static_cast<std::size_t>(result.measuredBlocks), + 0.0); + float processedChecksum = 0.0f; + double elapsedMicroseconds = 0.0; + result.callbackDeadlineMicroseconds = + static_cast<double>(result.blockSize) / result.sampleRate * 1000000.0; + for (int block = 0; block < result.measuredBlocks; ++block) + { + restoreDry(); + const juce::int64 callbackStart = juce::Time::getHighResolutionTicks(); + processor.process(processed); + const juce::int64 callbackTicks = juce::Time::getHighResolutionTicks() + - callbackStart; + const double callbackTimeMicroseconds = + juce::Time::highResolutionTicksToSeconds(callbackTicks) + * 1000000.0; + callbackMicroseconds[static_cast<std::size_t>(block)] = + callbackTimeMicroseconds; + elapsedMicroseconds += callbackTimeMicroseconds; + if (callbackTimeMicroseconds > result.callbackDeadlineMicroseconds) + ++result.deadlineMisses; + processedChecksum += processed.getSample(0, block % result.blockSize) + * 1.0e-9f; + } + std::sort(callbackMicroseconds.begin(), callbackMicroseconds.end()); + const auto percentile = [&callbackMicroseconds] (double proportion) + { + const auto count = callbackMicroseconds.size(); + const auto index = static_cast<std::size_t>(juce::jlimit( + 0.0, + static_cast<double>(count - 1u), + std::ceil(proportion * static_cast<double>(count)) - 1.0)); + return callbackMicroseconds[index]; + }; + + result.netElapsedMilliseconds = elapsedMicroseconds * 0.001; + result.averageMicrosecondsPerBlock = elapsedMicroseconds + / static_cast<double>(result.measuredBlocks); + result.p99Microseconds = percentile(0.99); + result.p999Microseconds = percentile(0.999); + result.maximumMicroseconds = callbackMicroseconds.back(); + result.realtimeDeadlineFraction = result.averageMicrosecondsPerBlock + / juce::jmax(1.0e-12, result.callbackDeadlineMicroseconds); + result.outputChecksum = processedChecksum; + result.generatedSidePeak = processor.getDiagnostics().lastGeneratedSidePeak; + // Percentiles characterize this component's repeatable processing cost. + // A userspace wall-clock maximum (and its derived miss count) can include + // an unrelated Windows scheduler pre-emption, so those values stay in the + // report as diagnostics rather than making a deterministic DSP gate flaky. + result.deadlineCriteriaPassed = + result.averageMicrosecondsPerBlock + <= result.callbackDeadlineMicroseconds * 0.25 + && result.p99Microseconds + <= result.callbackDeadlineMicroseconds * 0.50 + && result.p999Microseconds + <= result.callbackDeadlineMicroseconds * 0.75; + result.valid = std::isfinite(result.averageMicrosecondsPerBlock) + && result.averageMicrosecondsPerBlock >= 0.0 + && result.generatedSidePeak > 1.0e-6f + && result.deadlineCriteriaPassed; + return result; +} + +NAMCabPresentation::BenchmarkResult NAMCabPresentation::runRoomOnlyBenchmark( + double sampleRate, + int blockSize, + int measuredBlocks) +{ + return runBenchmark( + BenchmarkMode::roomOnly, + sampleRate, + blockSize, + measuredBlocks); +} + +NAMCabPresentation::BenchmarkResult NAMCabPresentation::runRoomAndDoublerBenchmark( + double sampleRate, + int blockSize, + int measuredBlocks) +{ + return runBenchmark( + BenchmarkMode::roomAndDoubler, + sampleRate, + blockSize, + measuredBlocks); +} diff --git a/Source/NAMCabPresentation.h b/Source/NAMCabPresentation.h new file mode 100644 index 0000000..e56ca55 --- /dev/null +++ b/Source/NAMCabPresentation.h @@ -0,0 +1,331 @@ +#pragma once + +#include <JuceHeader.h> + +#include <array> +#include <atomic> +#include <cstdint> +#include <vector> + +/** + * Allocation-free post-cabinet presentation field for the NAM Rack. + * + * The processor adds two parallel, wet-only components to an unchanged close + * cabinet signal: + * - a true-stereo 2x2 early-reflection field feeding a short late room; and + * - a deterministic, transient-protected two-voice doubler. + * + * prepare() and reset() are message-thread operations. process() performs no + * allocation, locking, logging, I/O, coefficient construction, or container + * resizing. Parameter targets are lock-free atomics and all audible changes + * are smoothed or delay-head crossfaded in the sample domain. + */ +class NAMCabPresentation final +{ +public: + struct Parameters + { + float roomAmount = 0.0f; // 0..1; zero is exact bypass + float roomWidth = 0.65f; // 0..1; maps to 0..135% wet side + float doublerMix = 0.0f; // 0..1; zero is exact bypass + float doublerSpread = 0.65f; // 0..1 + bool roomInputSendEnabled = true; // false drains the existing room tail + float doublerDelayMs = 4.5f; // 3..20 ms; independent of Spread + }; + + struct DiagnosticSnapshot + { + std::uint32_t processedBlocks = 0; + std::uint32_t processedSamples = 0; + std::uint32_t zeroEffectFastPathBlocks = 0; + std::uint32_t oversizedBlocks = 0; + std::uint32_t nonFiniteInputSamples = 0; + std::uint32_t nonFiniteWetSamples = 0; + float lastDryPeak = 0.0f; + float lastGeneratedMidPeak = 0.0f; + float lastGeneratedSidePeak = 0.0f; + }; + + /** + * Synchronous, allocation-permitted deterministic regression data for + * harnesses. It deliberately does not assert spaciousness, naturalness, + * product-reference similarity, or any other subjective audio quality. + */ + struct SelfTestResult + { + bool passed = false; + bool zeroEffectUnity = false; + bool deterministicReset = false; + bool blockPartitionInvariant = false; + bool algebraicSideCancellation = false; + bool monoRoomCreatesStereo = false; + bool monoRoomFoldContractValid = false; + bool roomFirstArrivalValid = false; + bool lowFrequencyRoomFieldCentred = false; + bool highFrequencyRoomSidePresent = false; + bool preArrivalDirectExact = false; + bool automationFiniteAndBounded = false; + bool automationDezippered = false; + bool automationPostArrivalExercised = false; + bool multiRateRoomTimingValid = false; + bool transientProtectionValid = false; + bool nonFiniteRecoveryValid = false; + bool tailDecayValid = false; + bool roomInputSendGateValid = false; + bool lateRoomFieldValid = false; + bool doublerDelayControlValid = false; + float zeroEffectMaximumError = 0.0f; + float deterministicResetMaximumError = 0.0f; + float blockPartitionMaximumError = 0.0f; + float monoFoldMaximumError = 0.0f; + float monoRoomGeneratedSidePeak = 0.0f; + float monoRoomFoldMaximumError = 0.0f; + float room80HzSideToMidDb = 0.0f; + float room1kHzSideRms = 0.0f; + float preArrivalDirectMaximumError = 0.0f; + float automationMaximumOutputPeak = 0.0f; + float automationFirst32DezipperError = 0.0f; + float automationPostMorphDifferenceRms = 0.0f; + float roomTransientMinimumGain = 1.0f; + float doublerTransientMinimumGain = 1.0f; + float roomTransientRecoveredGain = 1.0f; + float doublerTransientRecoveredGain = 1.0f; + float tailEndPeak = 0.0f; + float gatedRoomTailPeak = 0.0f; + float gatedRoomNewInputMaximumError = 0.0f; + float lateRoom150msRms = 0.0f; + float lowFrequencySideToMidLimitDb = -18.0f; + float highFrequencySideRmsMinimum = 1.0e-4f; + float automationOutputPeakLimit = 4.0f; + float automationDezipperErrorLimit = 5.0e-6f; + int expectedRoomFirstArrivalSample = 0; + int observedRoomFirstArrivalSample = -1; + }; + + enum class BenchmarkMode : std::uint8_t + { + roomOnly = 0, + roomAndDoubler + }; + + struct BenchmarkResult + { + bool valid = false; + BenchmarkMode mode = BenchmarkMode::roomOnly; + double sampleRate = 0.0; + int blockSize = 0; + int measuredBlocks = 0; + double netElapsedMilliseconds = 0.0; + double averageMicrosecondsPerBlock = 0.0; + double p99Microseconds = 0.0; + double p999Microseconds = 0.0; + double maximumMicroseconds = 0.0; + double callbackDeadlineMicroseconds = 0.0; + double realtimeDeadlineFraction = 0.0; + std::uint32_t deadlineMisses = 0; + bool deadlineCriteriaPassed = false; + float outputChecksum = 0.0f; + float generatedSidePeak = 0.0f; + }; + + NAMCabPresentation() = default; + ~NAMCabPresentation() = default; + + void prepare(double sampleRate, int maximumBlockSize); + void reset() noexcept; + + void setParameters(const Parameters& newParameters) noexcept; + [[nodiscard]] Parameters getParameters() const noexcept; + + void setRoomAmount(float amount) noexcept; + void setRoomWidth(float width) noexcept; + void setRoomInputSendEnabled(bool enabled) noexcept; + void setDoublerMix(float mix) noexcept; + void setDoublerSpread(float spread) noexcept; + void setDoublerDelayMs(float delayMs) noexcept; + + /** + * Adds the presentation field in place while preserving the direct signal + * at unity. Stereo side contributions are applied as +S/-S, so they cancel + * algebraically when L/R are folded to mono. Channels above the first two + * are deliberately left unchanged. + */ + void process(juce::AudioBuffer<float>& buffer) noexcept; + + [[nodiscard]] bool isPrepared() const noexcept { return prepared; } + [[nodiscard]] int getLatencySamples() const noexcept { return 0; } + [[nodiscard]] double getMaximumTailSeconds() const noexcept { return 0.80; } + + [[nodiscard]] DiagnosticSnapshot getDiagnostics() const noexcept; + void resetDiagnostics() noexcept; + + [[nodiscard]] static SelfTestResult runDeterministicSelfTest(); + [[nodiscard]] static BenchmarkResult runBenchmark( + BenchmarkMode mode, + double sampleRate = 48000.0, + int blockSize = 8, + int measuredBlocks = 200000); + [[nodiscard]] static BenchmarkResult runRoomOnlyBenchmark( + double sampleRate = 48000.0, + int blockSize = 8, + int measuredBlocks = 200000); + [[nodiscard]] static BenchmarkResult runRoomAndDoublerBenchmark( + double sampleRate = 48000.0, + int blockSize = 8, + int measuredBlocks = 200000); + +private: + struct Biquad + { + float b0 = 1.0f; + float b1 = 0.0f; + float b2 = 0.0f; + float a1 = 0.0f; + float a2 = 0.0f; + float z1 = 0.0f; + float z2 = 0.0f; + + void configureLowPass(double sampleRate, float frequencyHz, float q) noexcept; + void configureHighPass(double sampleRate, float frequencyHz, float q) noexcept; + void reset() noexcept; + [[nodiscard]] float processSample(float sample) noexcept; + }; + + struct DoublerDriftState + { + std::uint32_t randomState = 1; + float offsetStartSamples = 0.0f; + float offsetTargetSamples = 0.0f; + float currentOffsetSamples = 0.0f; + float levelStart = 1.0f; + float levelTarget = 1.0f; + float currentLevel = 1.0f; + int segmentPosition = 0; + int segmentLength = 0; + }; + + static constexpr std::size_t roomTapCount = 8; + static constexpr std::size_t lateRoomLineCount = 4; + static constexpr float parameterSmoothingSeconds = 0.020f; + static constexpr float delayMorphSeconds = 0.030f; + static constexpr float roomFieldNormalisation = 0.42f; + static constexpr float roomMidScale = 0.62f; + static constexpr float lateRoomInputGain = 0.32f; + static constexpr float lateRoomOutputGain = 0.58f; + static constexpr float doublerMidScale = 0.55f; + + static float clampUnit(float value) noexcept; + static float nextRandomSigned(std::uint32_t& state) noexcept; + static float smootherStep(float value) noexcept; + static float raisedCosine(float value) noexcept; + static float mapRoomGain(float amount) noexcept; + static float mapDoublerGain(float amount) noexcept; + static float clampDoublerDelayMs(float delayMs) noexcept; + + void configureFilters() noexcept; + void resetRoomRuntimeState(bool clearStorage) noexcept; + void resetDoublerRuntimeState(bool clearStorage) noexcept; + void invalidateRoomHistory() noexcept; + void invalidateDoublerHistory() noexcept; + + [[nodiscard]] float readRoomSample(const std::vector<float>& ring, + int delaySamples) const noexcept; + [[nodiscard]] float readDoublerSample(const std::vector<float>& ring, + float delaySamples) const noexcept; + void advanceDoublerDrift(DoublerDriftState& state, + float spread) noexcept; + void startDoublerDelayMorph(float requestedDelayMs, + float requestedSpread) noexcept; + void processLateRoom(float inputL, + float inputR, + float& outputL, + float& outputR) noexcept; + + double currentSampleRate = 48000.0; + int preparedMaximumBlockSize = 0; + bool prepared = false; + + std::atomic<float> targetRoomAmount { 0.0f }; + std::atomic<float> targetRoomWidth { 0.65f }; + std::atomic<bool> targetRoomInputSendEnabled { true }; + std::atomic<float> targetDoublerMix { 0.0f }; + std::atomic<float> targetDoublerSpread { 0.65f }; + std::atomic<float> targetDoublerDelayMs { 4.5f }; + + float currentRoomGain = 0.0f; + float currentRoomWidth = 0.65f; + float currentDoublerGain = 0.0f; + float currentDoublerSpread = 0.65f; + float smoothingCoefficient = 1.0f; + + std::vector<float> roomRingL; + std::vector<float> roomRingR; + int roomWriteIndex = 0; + int validRoomHistorySamples = 0; + bool roomDormant = true; + std::array<int, roomTapCount> roomDirectTapSamplesL {}; + std::array<int, roomTapCount> roomDirectTapSamplesR {}; + std::array<int, roomTapCount> roomCrossTapSamplesL {}; + std::array<int, roomTapCount> roomCrossTapSamplesR {}; + std::array<std::vector<float>, lateRoomLineCount> lateRoomRings; + std::array<int, lateRoomLineCount> lateRoomWriteIndices {}; + std::array<int, lateRoomLineCount> lateRoomValidSamples {}; + std::array<float, lateRoomLineCount> lateRoomDampingStates {}; + float lateRoomDampingCoefficient = 1.0f; + float currentLateRoomFeedback = 0.25f; + + Biquad roomWetHighPassL; + Biquad roomWetHighPassR; + Biquad roomWetLowPassL; + Biquad roomWetLowPassR; + std::array<Biquad, 2> roomSideHighPass; + + std::vector<float> doublerRingL; + std::vector<float> doublerRingR; + int doublerWriteIndex = 0; + int validDoublerHistorySamples = 0; + bool doublerDormant = true; + DoublerDriftState doublerDriftL; + DoublerDriftState doublerDriftR; + Biquad doublerWetHighPassL; + Biquad doublerWetHighPassR; + Biquad doublerWetLowPassL; + Biquad doublerWetLowPassR; + std::array<Biquad, 2> doublerSideHighPass; + float transientFastEnvelope = 0.0f; + float transientSlowEnvelope = 0.0f; + float roomTransientDuck = 1.0f; + float doublerTransientDuck = 1.0f; + float fastEnvelopeRelease = 0.0f; + float slowEnvelopeCoefficient = 0.0f; + float transientDuckReleaseCoefficient = 0.0f; + + float activeDelaySpread = 0.65f; + float morphTargetDelaySpread = 0.65f; + float requestedDelaySpread = 0.65f; + float activeDoublerDelayMs = 4.5f; + float morphTargetDoublerDelayMs = 4.5f; + float requestedDoublerDelayMs = 4.5f; + int delayMorphPosition = 0; + int delayMorphLength = 1; + bool delayMorphActive = false; + + std::atomic<std::uint32_t> diagnosticProcessedBlocks { 0 }; + std::atomic<std::uint32_t> diagnosticProcessedSamples { 0 }; + std::atomic<std::uint32_t> diagnosticZeroEffectBlocks { 0 }; + std::atomic<std::uint32_t> diagnosticOversizedBlocks { 0 }; + std::atomic<std::uint32_t> diagnosticNonFiniteInputSamples { 0 }; + std::atomic<std::uint32_t> diagnosticNonFiniteWetSamples { 0 }; + std::atomic<float> diagnosticLastDryPeak { 0.0f }; + std::atomic<float> diagnosticLastGeneratedMidPeak { 0.0f }; + std::atomic<float> diagnosticLastGeneratedSidePeak { 0.0f }; + + static_assert(std::atomic<float>::is_always_lock_free, + "NAM Cab Presentation parameter and metric floats must be lock-free"); + static_assert(std::atomic<bool>::is_always_lock_free, + "NAM Cab Presentation switches must be lock-free"); + static_assert(std::atomic<std::uint32_t>::is_always_lock_free, + "NAM Cab Presentation counters must be lock-free"); + + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(NAMCabPresentation) +}; diff --git a/Source/NAMDelayRegression.cpp b/Source/NAMDelayRegression.cpp new file mode 100644 index 0000000..3dca137 --- /dev/null +++ b/Source/NAMDelayRegression.cpp @@ -0,0 +1,1793 @@ +#include "NAMDelayRegression.h" +#include "BuiltInEffects2.h" +#include "TrackProcessor.h" + +#include <algorithm> +#include <array> +#include <atomic> +#include <cmath> +#include <cstdint> +#include <limits> +#include <memory> +#include <numeric> +#include <utility> +#include <vector> + +void NAMDelayRegression::addCheck( + juce::Array<juce::var>& targetChecks, + const juce::String& id, + const juce::String& status, + const juce::String& detail, + const juce::var& value) +{ + auto* object = new juce::DynamicObject(); + object->setProperty("id", id); + object->setProperty("status", status); + object->setProperty("detail", detail); + if (! value.isVoid()) + object->setProperty("value", value); + targetChecks.add(juce::var(object)); +} + +void NAMDelayRegression::configureNeutralRack(S13NAMRack& rack) +{ + rack.inputTrimDb.store(0.0f); + rack.outputTrimDb.store(0.0f); + rack.gateThresholdDb.store(-100.0f); + rack.compressorEnabled.store(0.0f); + rack.octaverEnabled.store(0.0f); + rack.precisionDriveEnabled.store(0.0f); + rack.chaosEnabled.store(0.0f); + rack.pedalMix.store(0.0f); + rack.ampEnabled.store(0.0f); + rack.setCabRequestedEnabled(false); + rack.eqEnabled.store(0.0f); + rack.chorusMix.store(0.0f); + rack.modulatorEnabled.store(0.0f); + rack.delayEnabled.store(0.0f); + rack.reverbEnabled.store(0.0f); + rack.auditionSource.store(0.0f); +} + +juce::var NAMDelayRegression::runDelayV10ContractProbe() +{ + constexpr std::array<float, 5> modulationBoundaries { + 0.0f, 0.4999f, 0.5f, 0.9999f, 1.0f + }; + constexpr std::array<int, 5> expectedLeft { + 2, 2, 3, 3, 4 + }; + constexpr std::array<int, 5> expectedPingPongRight { + 3, 3, 4, 4, 4 + }; + bool syncResolverPassed = true; + juce::Array<juce::var> syncCases; + for (size_t index = 0; + index < modulationBoundaries.size(); + ++index) + { + const auto mono = + S13NAMRack::resolveDelaySyncSelection( + modulationBoundaries[index], false); + const auto pingPong = + S13NAMRack::resolveDelaySyncSelection( + modulationBoundaries[index], true); + const bool casePassed = + mono.leftNoteIndex == expectedLeft[index] + && mono.rightNoteIndex == expectedLeft[index] + && pingPong.leftNoteIndex == expectedLeft[index] + && pingPong.rightNoteIndex + == expectedPingPongRight[index]; + syncResolverPassed = + syncResolverPassed && casePassed; + + auto* value = new juce::DynamicObject(); + value->setProperty( + "modulation", modulationBoundaries[index]); + value->setProperty( + "leftNoteIndex", pingPong.leftNoteIndex); + value->setProperty( + "rightNoteIndex", pingPong.rightNoteIndex); + value->setProperty("pass", casePassed); + syncCases.add(juce::var(value)); + } + const auto nonFiniteSync = + S13NAMRack::resolveDelaySyncSelection( + std::numeric_limits<float>::quiet_NaN(), true); + syncResolverPassed = + syncResolverPassed + && nonFiniteSync.leftNoteIndex == 2 + && nonFiniteSync.rightNoteIndex == 3; + + const auto digital = + S13NAMRack::resolveDelayMacroState( + 360.0f, 0.55f, 0.35f, 0.80f, 0.40f, + 0.0f, 1.0f, 1.0f, + S13NAMRack::guitarInstrumentProfile); + const auto tape = + S13NAMRack::resolveDelayMacroState( + 360.0f, 0.55f, 0.35f, 0.80f, 0.40f, + 1.0f, 1.0f, 1.0f, + S13NAMRack::guitarInstrumentProfile); + const auto analog = + S13NAMRack::resolveDelayMacroState( + 360.0f, 0.55f, 0.35f, 0.80f, 0.40f, + 2.0f, 1.0f, 1.0f, + S13NAMRack::guitarInstrumentProfile); + const auto bassTape = + S13NAMRack::resolveDelayMacroState( + 360.0f, 0.55f, 0.35f, 0.80f, 0.40f, + 1.0f, 1.0f, 1.0f, + S13NAMRack::bassInstrumentProfile); + const auto multi = + S13NAMRack::resolveDelayMacroState( + 360.0f, 0.55f, 0.35f, 0.80f, 0.40f, + 3.0f, 1.0f, 1.0f, + S13NAMRack::guitarInstrumentProfile); + const auto dual = + S13NAMRack::resolveDelayMacroState( + 360.0f, 0.55f, 0.35f, 0.80f, 0.40f, + 4.0f, 1.0f, 1.0f, + S13NAMRack::guitarInstrumentProfile); + const auto malformed = + S13NAMRack::resolveDelayMacroState( + std::numeric_limits<float>::quiet_NaN(), + std::numeric_limits<float>::infinity(), + -4.0f, + std::numeric_limits<float>::quiet_NaN(), + 9.0f, + std::numeric_limits<float>::quiet_NaN(), + -1.0f, + 8.0f, + 99); + const auto macroFinite = [] ( + const S13NAMRack::DelayMacroState& state) + { + return std::isfinite(state.timeMsL) + && std::isfinite(state.timeMsR) + && std::isfinite(state.mix) + && std::isfinite(state.dryGain) + && std::isfinite(state.feedbackGain) + && std::isfinite(state.crossFeed) + && std::isfinite(state.lowPassHz) + && std::isfinite(state.highPassHz) + && std::isfinite(state.saturation) + && std::isfinite(state.stereoWidth) + && std::isfinite(state.wowDepthMs) + && std::isfinite(state.wowRateHz) + && std::isfinite(state.flutterDepthMs) + && std::isfinite(state.flutterRateHz) + && std::isfinite(state.duckAttackMs) + && std::isfinite(state.duckReleaseMs) + && std::isfinite(state.duckMaxReduction) + && std::all_of( + state.multiTapRatios.begin(), + state.multiTapRatios.end(), + [] (float value) { return std::isfinite(value); }) + && std::all_of( + state.multiTapWeights.begin(), + state.multiTapWeights.end(), + [] (float value) { return std::isfinite(value); }) + && std::isfinite(state.multiFeedbackGain) + && std::isfinite(state.dualTimeRatio) + && std::isfinite(state.dualFeedbackGain) + && std::isfinite(state.dualLowPassHz) + && std::isfinite(state.dualHighPassHz) + && std::isfinite(state.dualSaturation) + && std::isfinite(state.dualModDepthMs) + && std::isfinite(state.dualModRateHz) + && std::isfinite(state.topologyControl); + }; + const bool macroContractPassed = + macroFinite(digital) + && macroFinite(tape) + && macroFinite(analog) + && macroFinite(bassTape) + && macroFinite(multi) + && macroFinite(dual) + && macroFinite(malformed) + && digital.mode == S13NAMRack::digitalDelayMode + && tape.mode == S13NAMRack::tapeDelayMode + && analog.mode == S13NAMRack::analogDelayMode + && multi.mode == S13NAMRack::multiDelayMode + && dual.mode == S13NAMRack::dualDelayMode + && digital.lowPassHz > tape.lowPassHz + && tape.lowPassHz > analog.lowPassHz + && digital.feedbackGain > tape.feedbackGain + && tape.feedbackGain > analog.feedbackGain + && tape.wowDepthMs > analog.wowDepthMs + && analog.wowDepthMs > 0.0f + && tape.flutterDepthMs > 0.0f + && digital.flutterDepthMs == 0.0f + && analog.flutterDepthMs == 0.0f + // Bass retains the fundamental through its unity dry path while the + // repeat path is filtered more aggressively to prevent low buildup. + && bassTape.highPassHz > tape.highPassHz + && bassTape.lowPassHz > tape.lowPassHz + && std::abs(bassTape.dryGain - 1.0f) <= 1.0e-6f + && std::abs( + tape.dryGain + - std::cos( + 0.35f + * juce::MathConstants<float>::halfPi)) + <= 1.0e-6f + && std::abs( + tape.mix + - std::sin( + 0.35f + * juce::MathConstants<float>::halfPi)) + <= 1.0e-6f + && std::abs(multi.multiTapRatios[0] - 1.0f) <= 1.0e-7f + && std::abs(multi.multiTapRatios[1] - 0.726f) <= 1.0e-6f + && std::abs(multi.multiTapRatios[2] - 0.546f) <= 1.0e-6f + && std::abs(multi.multiTapRatios[3] - 0.374f) <= 1.0e-6f + && std::abs( + std::accumulate( + multi.multiTapWeights.begin(), + multi.multiTapWeights.end(), + 0.0f) + - 1.0f) <= 1.0e-7f + && std::abs(multi.multiFeedbackGain - 0.528f) <= 1.0e-6f + && std::abs(dual.dualTimeRatio - 0.90f) <= 1.0e-6f + && std::abs(dual.dualFeedbackGain - 0.5038f) <= 1.0e-6f + && std::abs(dual.dualLowPassHz - 6400.0f) <= 1.0e-5f + && std::abs(dual.dualSaturation - 0.42f) <= 1.0e-6f + && malformed.mode == S13NAMRack::tapeDelayMode + && std::abs(malformed.timeMsL - 360.0f) <= 1.0e-6f + && malformed.mix == 0.0f + && malformed.duckAmount == 1.0f + && ! malformed.pingPong + && malformed.tempoSync; + + juce::ValueTree legacyState("S13NAMRack"); + legacyState.setProperty( + "namEffectsDspVersion", + S13NAMRack::reverbVoiceIntroducedNAMEffectsDspVersion, + nullptr); + legacyState.setProperty("reverbVoice", 3.0, nullptr); + legacyState.setProperty("delayMix", 4.0, nullptr); + legacyState.setProperty("delayTimeMs", -4.0, nullptr); + legacyState.setProperty("delayFeedback", 7.0, nullptr); + legacyState.setProperty("delayMod", -1.0, nullptr); + legacyState.setProperty("delayDucker", 3.0, nullptr); + legacyState.setProperty("delayMode", 99.0, nullptr); + legacyState.setProperty("delayPingPong", 0.2, nullptr); + legacyState.setProperty("delayTempoSync", 0.8, nullptr); + legacyState.setProperty("delayEnabled", -2.0, nullptr); + legacyState.setProperty("inputMode", 1.0, nullptr); + legacyState.setProperty("auditionSource", 1.0, nullptr); + juce::MemoryBlock migratedState; + { + juce::MemoryOutputStream stream( + migratedState, false); + legacyState.writeToStream(stream); + } + bool firstMigrationChanged = false; + const bool firstMigrationSucceeded = + S13NAMRack::migratePresetStateToCurrent( + migratedState, firstMigrationChanged); + const auto canonicalState = + juce::ValueTree::readFromData( + migratedState.getData(), migratedState.getSize()); + bool secondMigrationChanged = true; + const bool secondMigrationSucceeded = + S13NAMRack::migratePresetStateToCurrent( + migratedState, secondMigrationChanged); + const auto closeProperty = [&canonicalState] ( + const char* property, + double expected) + { + return canonicalState.isValid() + && std::abs( + static_cast<double>( + canonicalState.getProperty(property)) + - expected) <= 1.0e-7; + }; + const bool stateContractPassed = + firstMigrationSucceeded + && firstMigrationChanged + && secondMigrationSucceeded + && ! secondMigrationChanged + && canonicalState.isValid() + && static_cast<int>(canonicalState.getProperty( + "namEffectsDspVersion", 0)) + == S13NAMRack::currentNAMEffectsDspVersion + && closeProperty("delayMix", 1.0) + && closeProperty("delayTimeMs", 1.0) + && closeProperty("delayFeedback", 0.85) + && closeProperty("delayMod", 0.0) + && closeProperty("delayDucker", 1.0) + && closeProperty("delayMode", 2.0) + && closeProperty("delayPingPong", 0.0) + && closeProperty("delayTempoSync", 1.0) + && closeProperty("delayEnabled", 0.0) + && ! canonicalState.hasProperty("inputMode") + && ! canonicalState.hasProperty("auditionSource") + && closeProperty("reverbVoice", 3.0); + + juce::ValueTree currentState("S13NAMRack"); + currentState.setProperty( + "namEffectsDspVersion", + S13NAMRack::currentNAMEffectsDspVersion, + nullptr); + currentState.setProperty("delayMode", 99.0, nullptr); + currentState.setProperty("inputMode", 1.0, nullptr); + currentState.setProperty("auditionSource", 1.0, nullptr); + juce::MemoryBlock currentStateData; + { + juce::MemoryOutputStream stream(currentStateData, false); + currentState.writeToStream(stream); + } + bool currentStateChanged = false; + const bool currentStateSucceeded = + S13NAMRack::migratePresetStateToCurrent( + currentStateData, + currentStateChanged); + const auto canonicalCurrentState = + juce::ValueTree::readFromData( + currentStateData.getData(), + currentStateData.getSize()); + const bool currentStateContractPassed = + currentStateSucceeded + && currentStateChanged + && canonicalCurrentState.isValid() + && std::abs(static_cast<double>( + canonicalCurrentState.getProperty("delayMode")) - 4.0) + <= 1.0e-7 + && ! canonicalCurrentState.hasProperty("inputMode") + && ! canonicalCurrentState.hasProperty("auditionSource"); + + const auto migrateModeFixture = [] ( + const juce::var& version, + bool includeVersion) + { + juce::ValueTree tree("S13NAMRack"); + if (includeVersion) + { + tree.setProperty( + "namEffectsDspVersion", version, nullptr); + } + tree.setProperty("delayMode", 4.0, nullptr); + juce::MemoryBlock data; + { + juce::MemoryOutputStream stream(data, false); + tree.writeToStream(stream); + } + bool changed = false; + if (! S13NAMRack::migratePresetStateToCurrent( + data, changed)) + return -1.0; + const auto migrated = juce::ValueTree::readFromData( + data.getData(), data.getSize()); + return migrated.isValid() + ? static_cast<double>( + migrated.getProperty("delayMode", -1.0)) + : -1.0; + }; + const double missingVersionMode = migrateModeFixture( + {}, false); + const double v10Mode = migrateModeFixture( + S13NAMRack::delayV10IntroducedNAMEffectsDspVersion, + true); + const double developmentAliasMode = migrateModeFixture( + S13NAMRack::developmentNAMEffectsDspVersionAlias, true); + const double futureVersionMode = migrateModeFixture( + S13NAMRack::currentNAMEffectsDspVersion + 1, true); + const double fractionalVersionMode = migrateModeFixture( + static_cast<double>( + S13NAMRack::currentNAMEffectsDspVersion) + 0.7, + true); + + const auto migrateNestedModeFixture = [] ( + int parentVersion) + { + auto* ui = new juce::DynamicObject(); + auto* baseline = new juce::DynamicObject(); + auto* values = new juce::DynamicObject(); + values->setProperty("delayMode", 4.0); + baseline->setProperty("values", juce::var(values)); + ui->setProperty( + "namPresetBaseline", juce::var(baseline)); + juce::ValueTree tree("S13NAMRack"); + tree.setProperty( + "namEffectsDspVersion", parentVersion, nullptr); + tree.setProperty( + "uiStateJSON", + juce::JSON::toString(juce::var(ui), false), + nullptr); + juce::MemoryBlock data; + { + juce::MemoryOutputStream stream(data, false); + tree.writeToStream(stream); + } + bool changed = false; + if (! S13NAMRack::migratePresetStateToCurrent( + data, changed)) + return -1.0; + const auto migrated = juce::ValueTree::readFromData( + data.getData(), data.getSize()); + const auto migratedUi = juce::JSON::parse( + migrated.getProperty("uiStateJSON", {}).toString()); + if (auto* migratedUiObject = + migratedUi.getDynamicObject()) + { + if (auto* migratedBaseline = + migratedUiObject->getProperty( + "namPresetBaseline").getDynamicObject()) + { + if (auto* migratedValues = + migratedBaseline->getProperty( + "values").getDynamicObject()) + { + return static_cast<double>( + migratedValues->getProperty("delayMode")); + } + } + } + return -1.0; + }; + const double nestedLegacyMode = + migrateNestedModeFixture(7); + const double nestedV10Mode = + migrateNestedModeFixture( + S13NAMRack::delayV10IntroducedNAMEffectsDspVersion); + const double nestedCurrentMode = + migrateNestedModeFixture( + S13NAMRack::currentNAMEffectsDspVersion); + const double nestedDevelopmentAliasMode = + migrateNestedModeFixture( + S13NAMRack::developmentNAMEffectsDspVersionAlias); + const bool versionMigrationContractPassed = + std::abs(missingVersionMode - 1.0) <= 1.0e-7 + && std::abs(v10Mode - 4.0) <= 1.0e-7 + && std::abs(developmentAliasMode - 4.0) <= 1.0e-7 + && std::abs(futureVersionMode - 1.0) <= 1.0e-7 + && std::abs(fractionalVersionMode - 1.0) <= 1.0e-7 + && std::abs(nestedLegacyMode - 2.0) <= 1.0e-7 + && std::abs(nestedV10Mode - 4.0) <= 1.0e-7 + && std::abs(nestedCurrentMode - 4.0) <= 1.0e-7 + && std::abs(nestedDevelopmentAliasMode - 4.0) <= 1.0e-7; + + S13NAMRack malformedSaveRack; + const float nonFinite = + std::numeric_limits<float>::quiet_NaN(); + malformedSaveRack.delayMix.store(nonFinite); + malformedSaveRack.delayTimeMs.store(nonFinite); + malformedSaveRack.delayFeedback.store(nonFinite); + malformedSaveRack.delayMod.store(nonFinite); + malformedSaveRack.delayDucker.store(nonFinite); + malformedSaveRack.delayMode.store(nonFinite); + malformedSaveRack.delayPingPong.store(nonFinite); + malformedSaveRack.delayTempoSync.store(nonFinite); + malformedSaveRack.delayEnabled.store(nonFinite); + juce::MemoryBlock malformedSaveState; + malformedSaveRack.getStateInformation(malformedSaveState); + const auto canonicalSavedState = + juce::ValueTree::readFromData( + malformedSaveState.getData(), + malformedSaveState.getSize()); + const bool saveBoundaryContractPassed = + canonicalSavedState.isValid() + && std::abs(static_cast<double>( + canonicalSavedState.getProperty("delayMix")) - 0.22) + <= 1.0e-7 + && std::abs(static_cast<double>( + canonicalSavedState.getProperty("delayTimeMs")) - 360.0) + <= 1.0e-7 + && std::abs(static_cast<double>( + canonicalSavedState.getProperty("delayFeedback")) - 0.22) + <= 1.0e-7 + && std::abs(static_cast<double>( + canonicalSavedState.getProperty("delayMode")) - 1.0) + <= 1.0e-7 + && std::abs(static_cast<double>( + canonicalSavedState.getProperty("delayPingPong")) - 1.0) + <= 1.0e-7 + && std::abs(static_cast<double>( + canonicalSavedState.getProperty("delayTempoSync"))) + <= 1.0e-7 + && std::abs(static_cast<double>( + canonicalSavedState.getProperty("delayEnabled"))) + <= 1.0e-7; + + auto* value = new juce::DynamicObject(); + value->setProperty("syncCases", syncCases); + value->setProperty( + "syncResolverPassed", syncResolverPassed); + value->setProperty( + "macroContractPassed", macroContractPassed); + value->setProperty( + "stateContractPassed", stateContractPassed); + value->setProperty( + "currentStateContractPassed", + currentStateContractPassed); + value->setProperty( + "versionMigrationContractPassed", + versionMigrationContractPassed); + value->setProperty( + "saveBoundaryContractPassed", + saveBoundaryContractPassed); + value->setProperty( + "missingVersionMode", missingVersionMode); + value->setProperty( + "developmentAliasMode", developmentAliasMode); + value->setProperty( + "futureVersionMode", futureVersionMode); + value->setProperty( + "fractionalVersionMode", fractionalVersionMode); + value->setProperty( + "nestedLegacyMode", nestedLegacyMode); + value->setProperty( + "nestedCurrentMode", nestedCurrentMode); + value->setProperty( + "nestedDevelopmentAliasMode", + nestedDevelopmentAliasMode); + value->setProperty( + "digitalLowPassHz", digital.lowPassHz); + value->setProperty( + "tapeLowPassHz", tape.lowPassHz); + value->setProperty( + "analogLowPassHz", analog.lowPassHz); + value->setProperty( + "bassTapeHighPassHz", bassTape.highPassHz); + value->setProperty( + "guitarTapeHighPassHz", tape.highPassHz); + value->setProperty( + "pass", + syncResolverPassed + && macroContractPassed + && stateContractPassed + && currentStateContractPassed + && versionMigrationContractPassed + && saveBoundaryContractPassed); + return juce::var(value); +} + +juce::var NAMDelayRegression::runDelayV10AudioProbe() +{ + const auto configureDelay = [] ( + S13Delay& delay, + const S13NAMRack::DelayMacroState& state) + { + delay.setExtendedModesEnabled(true); + delay.delayTimeL.store(state.timeMsL); + delay.delayTimeR.store(state.timeMsR); + delay.feedback.store(state.feedbackGain); + delay.crossFeed.store(state.crossFeed); + delay.mix.store(state.mix); + delay.pingPong.store(state.pingPong ? 1.0f : 0.0f); + delay.tempoSync.store(state.tempoSync ? 1.0f : 0.0f); + delay.syncNoteL.store( + static_cast<float>(state.sync.leftNoteIndex)); + delay.syncNoteR.store( + static_cast<float>(state.sync.rightNoteIndex)); + delay.lpfFreq.store(state.lowPassHz); + delay.hpfFreq.store(state.highPassHz); + delay.fbSaturation.store(state.saturation); + delay.stereoWidth.store(state.stereoWidth); + delay.delayMode.store(static_cast<float>(state.mode)); + delay.ducking.store(state.duckAmount); + delay.wowDepthMs.store(state.wowDepthMs); + delay.wowRateHz.store(state.wowRateHz); + delay.flutterDepthMs.store(state.flutterDepthMs); + delay.flutterRateHz.store(state.flutterRateHz); + delay.duckAttackMs.store(state.duckAttackMs); + delay.duckReleaseMs.store(state.duckReleaseMs); + delay.duckMaxReduction.store(state.duckMaxReduction); + delay.topologyControl.store(state.topologyControl); + delay.multiFeedback.store(state.multiFeedbackGain); + delay.dualTimeRatio.store(state.dualTimeRatio); + delay.dualFeedback.store(state.dualFeedbackGain); + delay.dualLowPassHz.store(state.dualLowPassHz); + delay.dualHighPassHz.store(state.dualHighPassHz); + delay.dualSaturation.store(state.dualSaturation); + delay.dualModDepthMs.store(state.dualModDepthMs); + delay.dualModRateHz.store(state.dualModRateHz); + delay.inputSend.store(1.0f); + delay.unityDry.store( + state.dryGain >= 0.9999f ? 1.0f : 0.0f); + }; + + juce::Array<juce::var> timingCases; + bool timingPassed = true; + for (const double sampleRate : + { 44100.0, 48000.0, 96000.0 }) + { + constexpr float requestedDelayMs = 125.0f; + const int totalSamples = juce::roundToInt( + sampleRate * 0.16); + const int expectedSample = juce::roundToInt( + sampleRate + * static_cast<double>(requestedDelayMs) + * 0.001); + S13Delay delay(0.25f); + const auto state = + S13NAMRack::resolveDelayMacroState( + requestedDelayMs, 0.0f, 1.0f, + 0.0f, 0.0f, 0.0f, + 0.0f, 0.0f, + S13NAMRack::guitarInstrumentProfile); + configureDelay(delay, state); + delay.prepareToPlay(sampleRate, 64); + + constexpr std::array<int, 6> pattern { + 7, 31, 5, 64, 13, 47 + }; + int cursor = 0; + int patternIndex = 0; + int peakSample = -1; + float peak = 0.0f; + double absoluteWetSum = 0.0; + bool finite = true; + juce::MidiBuffer midi; + while (cursor < totalSamples) + { + const int blockSize = juce::jmin( + pattern[static_cast<size_t>( + patternIndex % pattern.size())], + totalSamples - cursor); + juce::AudioBuffer<float> block(2, blockSize); + block.clear(); + if (cursor == 0) + { + block.setSample(0, 0, 1.0f); + block.setSample(1, 0, 1.0f); + } + delay.processBlock(block, midi); + for (int sample = 0; sample < blockSize; ++sample) + { + const float output = + block.getSample(0, sample); + finite = finite && std::isfinite(output); + absoluteWetSum += std::abs( + static_cast<double>(output)); + if (std::abs(output) > peak) + { + peak = std::abs(output); + peakSample = cursor + sample; + } + } + cursor += blockSize; + ++patternIndex; + } + const int timingErrorSamples = + peakSample >= 0 + ? std::abs(peakSample - expectedSample) + : totalSamples; + const bool casePassed = + finite + // A fractional linear-interpolation tap can split a unity + // impulse evenly across its two neighbouring samples. Directly + // after reset, the complete-history guard intentionally rejects + // the earlier half until both interpolation samples are valid; + // the surviving half is the correct first-repeat oracle here. + && absoluteWetSum > 0.49 + && peak > 0.45f + && timingErrorSamples <= 2; + timingPassed = timingPassed && casePassed; + + auto* value = new juce::DynamicObject(); + value->setProperty("sampleRate", sampleRate); + value->setProperty( + "expectedSample", expectedSample); + value->setProperty("peakSample", peakSample); + value->setProperty( + "timingErrorSamples", timingErrorSamples); + value->setProperty("peak", peak); + value->setProperty( + "absoluteWetSum", absoluteWetSum); + value->setProperty("pass", casePassed); + timingCases.add(juce::var(value)); + } + + constexpr double renderSampleRate = 48000.0; + constexpr int maximumBlockSize = 64; + constexpr int renderSamples = 24000; + const auto renderMode = [ + &configureDelay, + renderSampleRate, + maximumBlockSize, + renderSamples] ( + int mode, + const std::array<int, 6>& blockPattern) + { + S13Delay delay(1.0f); + const auto state = + S13NAMRack::resolveDelayMacroState( + 37.0f, 0.62f, 1.0f, + 0.80f, 0.0f, + static_cast<float>(mode), + 1.0f, 0.0f, + S13NAMRack::guitarInstrumentProfile); + configureDelay(delay, state); + delay.prepareToPlay( + renderSampleRate, maximumBlockSize); + + juce::AudioBuffer<float> capture( + 2, renderSamples); + capture.clear(); + juce::MidiBuffer midi; + int cursor = 0; + int patternIndex = 0; + while (cursor < renderSamples) + { + const int blockSize = juce::jmin( + blockPattern[static_cast<size_t>( + patternIndex % blockPattern.size())], + renderSamples - cursor); + juce::AudioBuffer<float> block(2, blockSize); + for (int sample = 0; sample < blockSize; ++sample) + { + const int absoluteSample = cursor + sample; + const double time = + static_cast<double>(absoluteSample) + / renderSampleRate; + const float transient = + absoluteSample % 1601 == 0 + ? 0.32f + : 0.0f; + const float left = transient + + 0.12f * static_cast<float>(std::sin( + juce::MathConstants<double>::twoPi + * 173.0 * time)) + + 0.07f * static_cast<float>(std::sin( + juce::MathConstants<double>::twoPi + * 3191.0 * time + 0.23)); + const float right = -0.70f * transient + + 0.10f * static_cast<float>(std::sin( + juce::MathConstants<double>::twoPi + * 241.0 * time + 0.47)) + + 0.06f * static_cast<float>(std::sin( + juce::MathConstants<double>::twoPi + * 5117.0 * time + 0.91)); + block.setSample(0, sample, left); + block.setSample(1, sample, right); + } + delay.processBlock(block, midi); + capture.copyFrom( + 0, cursor, block, 0, 0, blockSize); + capture.copyFrom( + 1, cursor, block, 1, 0, blockSize); + cursor += blockSize; + ++patternIndex; + } + return capture; + }; + constexpr std::array<int, 6> uniformPattern { + 64, 64, 64, 64, 64, 64 + }; + constexpr std::array<int, 6> irregularPattern { + 7, 31, 5, 64, 13, 47 + }; + const auto tapeUniform = renderMode( + S13NAMRack::tapeDelayMode, uniformPattern); + const auto tapeIrregular = renderMode( + S13NAMRack::tapeDelayMode, irregularPattern); + const auto digital = renderMode( + S13NAMRack::digitalDelayMode, irregularPattern); + const auto analog = renderMode( + S13NAMRack::analogDelayMode, irregularPattern); + const auto multiUniform = renderMode( + S13NAMRack::multiDelayMode, uniformPattern); + const auto multiIrregular = renderMode( + S13NAMRack::multiDelayMode, irregularPattern); + const auto dualUniform = renderMode( + S13NAMRack::dualDelayMode, uniformPattern); + const auto dualIrregular = renderMode( + S13NAMRack::dualDelayMode, irregularPattern); + const auto maximumDifference = [] ( + const juce::AudioBuffer<float>& first, + const juce::AudioBuffer<float>& second) + { + float maximum = 0.0f; + for (int channel = 0; channel < 2; ++channel) + for (int sample = 0; + sample < first.getNumSamples(); + ++sample) + maximum = juce::jmax( + maximum, + std::abs( + first.getSample(channel, sample) + - second.getSample(channel, sample))); + return maximum; + }; + const auto differenceRms = [] ( + const juce::AudioBuffer<float>& first, + const juce::AudioBuffer<float>& second) + { + double energy = 0.0; + int count = 0; + for (int channel = 0; channel < 2; ++channel) + { + for (int sample = 0; + sample < first.getNumSamples(); + ++sample) + { + const double difference = + static_cast<double>( + first.getSample(channel, sample)) + - static_cast<double>( + second.getSample(channel, sample)); + energy += difference * difference; + ++count; + } + } + return count > 0 + ? std::sqrt(energy / static_cast<double>(count)) + : 0.0; + }; + const auto bufferIsFinite = [] ( + const juce::AudioBuffer<float>& capture) + { + for (int channel = 0; + channel < capture.getNumChannels(); + ++channel) + for (int sample = 0; + sample < capture.getNumSamples(); + ++sample) + if (! std::isfinite( + capture.getSample(channel, sample))) + return false; + return true; + }; + const float partitionMaximumDifference = + maximumDifference(tapeUniform, tapeIrregular); + const float multiPartitionMaximumDifference = + maximumDifference(multiUniform, multiIrregular); + const float dualPartitionMaximumDifference = + maximumDifference(dualUniform, dualIrregular); + const double digitalTapeDifference = + differenceRms(digital, tapeIrregular); + const double tapeAnalogDifference = + differenceRms(tapeIrregular, analog); + const double digitalAnalogDifference = + differenceRms(digital, analog); + const double multiDualDifference = + differenceRms(multiIrregular, dualIrregular); + const double tapeMultiDifference = + differenceRms(tapeIrregular, multiIrregular); + const bool partitionAndDistinctnessPassed = + bufferIsFinite(tapeUniform) + && bufferIsFinite(tapeIrregular) + && bufferIsFinite(digital) + && bufferIsFinite(analog) + && bufferIsFinite(multiUniform) + && bufferIsFinite(multiIrregular) + && bufferIsFinite(dualUniform) + && bufferIsFinite(dualIrregular) + && partitionMaximumDifference <= 2.0e-6f + && multiPartitionMaximumDifference <= 2.0e-6f + && dualPartitionMaximumDifference <= 2.0e-6f + && digitalTapeDifference > 1.0e-4 + && tapeAnalogDifference > 1.0e-4 + && digitalAnalogDifference > 1.0e-4 + && multiDualDifference > 1.0e-4 + && tapeMultiDifference > 1.0e-4; + + juce::Array<juce::var> tailCases; + bool tailContractPassed = true; + for (int mode = S13NAMRack::digitalDelayMode; + mode <= S13NAMRack::dualDelayMode; + ++mode) + { + S13Delay delay(3.0f); + const auto state = + S13NAMRack::resolveDelayMacroState( + 360.0f, 0.55f, 0.35f, + 0.80f, 0.0f, + static_cast<float>(mode), + 1.0f, 0.0f, + S13NAMRack::guitarInstrumentProfile); + configureDelay(delay, state); + delay.prepareToPlay(44100.0, 64); + double maximumFeedback = static_cast<double>(state.feedbackGain); + if (mode == S13NAMRack::multiDelayMode) + { + maximumFeedback = juce::jmax( + maximumFeedback, + static_cast<double>(state.multiFeedbackGain)); + } + else if (mode == S13NAMRack::dualDelayMode) + { + maximumFeedback = juce::jmax( + maximumFeedback, + static_cast<double>(state.dualFeedbackGain)); + } + const double repeatsToMinus60 = + std::log( + 0.001 + / juce::jmax( + 1.0, + static_cast<double>(state.stereoWidth))) + / std::log(maximumFeedback); + double maximumModulationMs = static_cast<double>( + state.wowDepthMs + state.flutterDepthMs); + if (mode == S13NAMRack::dualDelayMode) + { + maximumModulationMs = juce::jmax( + maximumModulationMs, + static_cast<double>(state.dualModDepthMs)); + } + const double expectedTailSeconds = + ((static_cast<double>(juce::jmax( + state.timeMsL, state.timeMsR)) + + maximumModulationMs) + * 0.001 + + 1.0 / 44100.0) + * juce::jmax(1.0, repeatsToMinus60 + 1.0); + const double reportedTailSeconds = + delay.getTailLengthSeconds(); + const bool casePassed = + std::isfinite(reportedTailSeconds) + && reportedTailSeconds > 0.0 + && std::abs( + reportedTailSeconds + - expectedTailSeconds) <= 1.0e-5; + tailContractPassed = + tailContractPassed && casePassed; + + auto* value = new juce::DynamicObject(); + value->setProperty("mode", mode); + value->setProperty( + "reportedTailSeconds", reportedTailSeconds); + value->setProperty( + "expectedTailSeconds", expectedTailSeconds); + value->setProperty("pass", casePassed); + tailCases.add(juce::var(value)); + } + + // Use an integral one-millisecond tap. At 44.1 kHz the separate complete- + // interpolation-history guard intentionally rejects the first fractional + // lobe, which makes its excitation peak unsuitable as a width oracle. + constexpr double widthTailSampleRate = 48000.0; + constexpr int widthTailBlockSize = 64; + constexpr float widthTailFeedback = 0.80f; + constexpr float widthTailDelayMs = 1.0f; + S13Delay widthTailDelay(3.0f); + auto widthTailState = S13NAMRack::resolveDelayMacroState( + widthTailDelayMs, + widthTailFeedback, + 1.0f, + 0.0f, + 0.0f, + static_cast<float>(S13NAMRack::digitalDelayMode), + 0.0f, + 0.0f, + S13NAMRack::guitarInstrumentProfile); + widthTailState.stereoWidth = 2.0f; + widthTailState.lowPassHz = 20000.0f; + widthTailState.highPassHz = 20.0f; + widthTailState.saturation = 0.0f; + configureDelay(widthTailDelay, widthTailState); + widthTailDelay.prepareToPlay( + widthTailSampleRate, widthTailBlockSize); + const double widthAwareExpectedTailSeconds = + (static_cast<double>(widthTailDelayMs) * 0.001 + + 1.0 / widthTailSampleRate) + * (std::log(0.001 / 2.0) + / std::log(static_cast<double>(widthTailFeedback)) + + 1.0); + const double widthAwareReportedTailSeconds = + widthTailDelay.getTailLengthSeconds(); + const int widthTailDeclaredSamples = static_cast<int>(std::ceil( + widthAwareReportedTailSeconds * widthTailSampleRate)); + const int widthTailRenderSamples = + widthTailDeclaredSamples + + juce::roundToInt( + widthTailSampleRate + * static_cast<double>(widthTailDelayMs) * 0.002); + float widthTailPeak = 0.0f; + float widthTailPostDeclarationPeak = 0.0f; + juce::MidiBuffer widthTailMidi; + for (int cursor = 0; + cursor < widthTailRenderSamples; + cursor += widthTailBlockSize) + { + const int blockSamples = juce::jmin( + widthTailBlockSize, + widthTailRenderSamples - cursor); + juce::AudioBuffer<float> block(2, blockSamples); + block.clear(); + if (cursor == 0) + { + block.setSample(0, 0, 1.0f); + block.setSample(1, 0, -1.0f); + } + widthTailDelay.processBlock(block, widthTailMidi); + for (int sample = 0; sample < blockSamples; ++sample) + { + const float samplePeak = juce::jmax( + std::abs(block.getSample(0, sample)), + std::abs(block.getSample(1, sample))); + widthTailPeak = juce::jmax(widthTailPeak, samplePeak); + if (cursor + sample >= widthTailDeclaredSamples) + { + widthTailPostDeclarationPeak = juce::jmax( + widthTailPostDeclarationPeak, samplePeak); + } + } + } + const bool widthAwareTailPassed = + std::abs( + widthAwareReportedTailSeconds + - widthAwareExpectedTailSeconds) <= 1.0e-5 + && widthTailPeak >= 0.25f + && widthTailPostDeclarationPeak <= 0.00105f; + + auto* value = new juce::DynamicObject(); + value->setProperty("timingCases", timingCases); + value->setProperty( + "partitionMaximumDifference", + partitionMaximumDifference); + value->setProperty( + "multiPartitionMaximumDifference", + multiPartitionMaximumDifference); + value->setProperty( + "dualPartitionMaximumDifference", + dualPartitionMaximumDifference); + value->setProperty( + "digitalTapeDifferenceRms", + digitalTapeDifference); + value->setProperty( + "tapeAnalogDifferenceRms", + tapeAnalogDifference); + value->setProperty( + "digitalAnalogDifferenceRms", + digitalAnalogDifference); + value->setProperty( + "multiDualDifferenceRms", + multiDualDifference); + value->setProperty( + "tapeMultiDifferenceRms", + tapeMultiDifference); + value->setProperty("tailCases", tailCases); + value->setProperty( + "widthAwareExpectedTailSeconds", + widthAwareExpectedTailSeconds); + value->setProperty( + "widthAwareReportedTailSeconds", + widthAwareReportedTailSeconds); + value->setProperty( + "widthTailPostDeclarationPeak", + widthTailPostDeclarationPeak); + value->setProperty("widthTailPeak", widthTailPeak); + value->setProperty( + "widthAwareTailPassed", widthAwareTailPassed); + value->setProperty( + "pass", + timingPassed + && partitionAndDistinctnessPassed + && tailContractPassed + && widthAwareTailPassed); + return juce::var(value); +} + +juce::var NAMDelayRegression::runDelayV10Stage3TopologyProbe() +{ + constexpr int topologyBlockSize = 64; + constexpr std::array<int, 4> multiRatioNumerators { + 43, 61, 79, 100 + }; + constexpr std::array<float, 4> multiWeights { + 0.13f, 0.20f, 0.25f, 0.42f + }; + constexpr std::array<int, 4> multiStereoChannels { + 1, 0, 1, 0 + }; + + const auto configureExactDelay = [] ( + S13Delay& delay, + double sampleRate, + int baseDelaySamples, + int mode, + float secondaryFeedback) + { + const float delayMs = static_cast<float>( + static_cast<double>(baseDelaySamples) + * 1000.0 / sampleRate); + delay.setExtendedModesEnabled(true); + delay.delayTimeL.store(delayMs); + delay.delayTimeR.store(delayMs); + delay.feedback.store(0.0f); + delay.crossFeed.store(0.0f); + delay.mix.store(1.0f); + delay.pingPong.store(0.0f); + delay.tempoSync.store(0.0f); + delay.syncNoteL.store(2.0f); + delay.syncNoteR.store(2.0f); + delay.lpfFreq.store(20000.0f); + delay.hpfFreq.store(20.0f); + delay.fbSaturation.store(0.0f); + delay.stereoWidth.store(1.0f); + delay.delayMode.store(static_cast<float>(mode)); + delay.ducking.store(0.0f); + delay.wowDepthMs.store(0.0f); + delay.wowRateHz.store(0.25f); + delay.flutterDepthMs.store(0.0f); + delay.flutterRateHz.store(6.4f); + delay.duckAttackMs.store(8.0f); + delay.duckReleaseMs.store(180.0f); + delay.duckMaxReduction.store(0.82f); + delay.topologyControl.store(0.0f); + delay.multiFeedback.store(0.0f); + delay.dualTimeRatio.store(0.5f); + delay.dualFeedback.store(secondaryFeedback); + delay.dualLowPassHz.store(20000.0f); + delay.dualHighPassHz.store(20.0f); + delay.dualSaturation.store(0.0f); + delay.dualModDepthMs.store(0.0f); + delay.dualModRateHz.store(0.25f); + delay.inputSend.store(1.0f); + delay.unityDry.store(0.0f); + }; + + const auto renderImpulse = [&configureExactDelay] ( + double sampleRate, + int baseDelaySamples, + int mode, + int numChannels, + int rightImpulseSample, + float secondaryFeedback, + int totalSamples) + { + constexpr int blockSize = 64; + S13Delay delay(0.5f); + configureExactDelay( + delay, + sampleRate, + baseDelaySamples, + mode, + secondaryFeedback); + delay.prepareToPlay(sampleRate, blockSize); + + juce::AudioBuffer<float> capture( + numChannels, totalSamples); + capture.clear(); + juce::MidiBuffer midi; + int cursor = 0; + while (cursor < totalSamples) + { + const int blockSamples = juce::jmin( + blockSize, totalSamples - cursor); + juce::AudioBuffer<float> block( + numChannels, blockSamples); + block.clear(); + if (cursor == 0) + block.setSample(0, 0, 1.0f); + if (numChannels > 1 + && rightImpulseSample >= cursor + && rightImpulseSample < cursor + blockSamples) + { + block.setSample( + 1, + rightImpulseSample - cursor, + 1.0f); + } + delay.processBlock(block, midi); + for (int channel = 0; + channel < numChannels; + ++channel) + { + capture.copyFrom( + channel, + cursor, + block, + channel, + 0, + blockSamples); + } + cursor += blockSamples; + } + return capture; + }; + + const auto windowPeak = [] ( + const juce::AudioBuffer<float>& capture, + int channel, + int centreSample, + int radius) + { + float peak = 0.0f; + for (int sample = juce::jmax(0, centreSample - radius); + sample <= juce::jmin( + capture.getNumSamples() - 1, + centreSample + radius); + ++sample) + { + peak = juce::jmax( + peak, + std::abs(capture.getSample(channel, sample))); + } + return peak; + }; + + const auto captureIsFinite = [] ( + const juce::AudioBuffer<float>& capture) + { + for (int channel = 0; + channel < capture.getNumChannels(); + ++channel) + { + for (int sample = 0; + sample < capture.getNumSamples(); + ++sample) + { + if (! std::isfinite( + capture.getSample(channel, sample))) + { + return false; + } + } + } + return true; + }; + + bool exactTopologyPassed = true; + juce::Array<juce::var> exactRateCases; + constexpr std::array<double, 3> topologySampleRates { + 44100.0, 48000.0, 96000.0 + }; + constexpr std::array<int, 3> exactBaseDelaySamples { + 4400, 4800, 9600 + }; + for (size_t rateIndex = 0; + rateIndex < topologySampleRates.size(); + ++rateIndex) + { + const double sampleRate = topologySampleRates[rateIndex]; + const int baseDelaySamples = + exactBaseDelaySamples[rateIndex]; + const int rightImpulseOffset = baseDelaySamples / 20; + const int totalSamples = + baseDelaySamples + rightImpulseOffset + 16; + const auto multiStereo = renderImpulse( + sampleRate, + baseDelaySamples, + S13NAMRack::multiDelayMode, + 2, + -1, + 0.0f, + totalSamples); + const auto multiMono = renderImpulse( + sampleRate, + baseDelaySamples, + S13NAMRack::multiDelayMode, + 1, + -1, + 0.0f, + totalSamples); + const auto dualStereo = renderImpulse( + sampleRate, + baseDelaySamples, + S13NAMRack::dualDelayMode, + 2, + rightImpulseOffset, + 0.0f, + totalSamples); + + bool multiStereoPassed = + captureIsFinite(multiStereo); + bool multiMonoPassed = captureIsFinite(multiMono); + float multiMonoAbsoluteSum = 0.0f; + float multiStereoAbsoluteSum = 0.0f; + float maximumMultiWeightError = 0.0f; + float maximumMultiWrongChannelPeak = 0.0f; + for (size_t tap = 0; + tap < multiRatioNumerators.size(); + ++tap) + { + const int tapSample = + baseDelaySamples + * multiRatioNumerators[tap] / 100; + const int stereoChannel = + multiStereoChannels[tap]; + const float stereoPeak = windowPeak( + multiStereo, stereoChannel, tapSample, 2); + const float wrongChannelPeak = windowPeak( + multiStereo, + 1 - stereoChannel, + tapSample, + 2); + const float monoPeak = windowPeak( + multiMono, 0, tapSample, 2); + maximumMultiWeightError = juce::jmax( + maximumMultiWeightError, + juce::jmax( + std::abs(stereoPeak - multiWeights[tap]), + std::abs(monoPeak - multiWeights[tap]))); + maximumMultiWrongChannelPeak = juce::jmax( + maximumMultiWrongChannelPeak, + wrongChannelPeak); + multiStereoPassed = multiStereoPassed + && std::abs(stereoPeak - multiWeights[tap]) + <= 1.0e-4f + && wrongChannelPeak <= 1.0e-6f; + multiMonoPassed = multiMonoPassed + && std::abs(monoPeak - multiWeights[tap]) + <= 1.0e-4f; + } + for (int sample = 0; + sample < multiMono.getNumSamples(); + ++sample) + { + multiMonoAbsoluteSum += std::abs( + multiMono.getSample(0, sample)); + multiStereoAbsoluteSum += std::abs( + multiStereo.getSample(0, sample)); + multiStereoAbsoluteSum += std::abs( + multiStereo.getSample(1, sample)); + } + multiMonoPassed = multiMonoPassed + && std::abs(multiMonoAbsoluteSum - 1.0f) + <= 5.0e-4f; + multiStereoPassed = multiStereoPassed + && std::abs(multiStereoAbsoluteSum - 1.0f) + <= 5.0e-4f; + + const int secondaryLeftSample = baseDelaySamples / 2; + const int secondaryRightSample = + secondaryLeftSample + rightImpulseOffset; + const int primaryLeftSample = baseDelaySamples; + const int primaryRightSample = + primaryLeftSample + rightImpulseOffset; + const float secondaryLeftPeak = windowPeak( + dualStereo, 0, secondaryLeftSample, 2); + const float secondaryLeftWrongChannel = windowPeak( + dualStereo, 1, secondaryLeftSample, 2); + const float secondaryRightPeak = windowPeak( + dualStereo, 1, secondaryRightSample, 2); + const float secondaryRightWrongChannel = windowPeak( + dualStereo, 0, secondaryRightSample, 2); + const float primaryLeftPeak = windowPeak( + dualStereo, 0, primaryLeftSample, 2); + const float primaryLeftWrongChannel = windowPeak( + dualStereo, 1, primaryLeftSample, 2); + const float primaryRightPeak = windowPeak( + dualStereo, 1, primaryRightSample, 2); + const float primaryRightWrongChannel = windowPeak( + dualStereo, 0, primaryRightSample, 2); + float dualAbsoluteSum = 0.0f; + for (int channel = 0; channel < 2; ++channel) + { + for (int sample = 0; + sample < dualStereo.getNumSamples(); + ++sample) + { + dualAbsoluteSum += std::abs( + dualStereo.getSample(channel, sample)); + } + } + const bool dualIndependentPassed = + captureIsFinite(dualStereo) + && std::abs(secondaryLeftPeak - 0.35f) + <= 1.0e-4f + && std::abs(secondaryRightPeak - 0.35f) + <= 1.0e-4f + && std::abs(primaryLeftPeak - 0.65f) + <= 1.0e-4f + && std::abs(primaryRightPeak - 0.65f) + <= 1.0e-4f + && secondaryLeftWrongChannel <= 1.0e-6f + && secondaryRightWrongChannel <= 1.0e-6f + && primaryLeftWrongChannel <= 1.0e-6f + && primaryRightWrongChannel <= 1.0e-6f + && std::abs(dualAbsoluteSum - 2.0f) + <= 1.0e-3f; + const bool casePassed = + multiStereoPassed + && multiMonoPassed + && dualIndependentPassed; + exactTopologyPassed = + exactTopologyPassed && casePassed; + + auto* value = new juce::DynamicObject(); + value->setProperty("sampleRate", sampleRate); + value->setProperty( + "baseDelaySamples", baseDelaySamples); + value->setProperty( + "maximumMultiWeightError", + maximumMultiWeightError); + value->setProperty( + "maximumMultiWrongChannelPeak", + maximumMultiWrongChannelPeak); + value->setProperty( + "multiMonoAbsoluteSum", + multiMonoAbsoluteSum); + value->setProperty( + "multiStereoAbsoluteSum", + multiStereoAbsoluteSum); + value->setProperty( + "dualSecondaryLeftPeak", + secondaryLeftPeak); + value->setProperty( + "dualSecondaryRightPeak", + secondaryRightPeak); + value->setProperty( + "dualPrimaryLeftPeak", + primaryLeftPeak); + value->setProperty( + "dualPrimaryRightPeak", + primaryRightPeak); + value->setProperty( + "dualAbsoluteSum", dualAbsoluteSum); + value->setProperty( + "multiStereoPassed", multiStereoPassed); + value->setProperty( + "multiMonoPassed", multiMonoPassed); + value->setProperty( + "dualIndependentPassed", dualIndependentPassed); + value->setProperty("pass", casePassed); + exactRateCases.add(juce::var(value)); + } + + constexpr double primeSampleRate = 48000.0; + constexpr int primeBaseDelaySamples = 4800; + constexpr int primeTotalSamples = 7240; + S13Delay recursiveDual(0.5f); + configureExactDelay( + recursiveDual, + primeSampleRate, + primeBaseDelaySamples, + S13NAMRack::dualDelayMode, + 0.70f); + recursiveDual.prepareToPlay( + primeSampleRate, topologyBlockSize); + juce::AudioBuffer<float> recursiveCapture( + 2, primeTotalSamples); + recursiveCapture.clear(); + juce::MidiBuffer recursiveMidi; + int recursiveCursor = 0; + while (recursiveCursor < primeTotalSamples) + { + const int blockSamples = juce::jmin( + topologyBlockSize, + primeTotalSamples - recursiveCursor); + juce::AudioBuffer<float> block(2, blockSamples); + block.clear(); + if (recursiveCursor == 0) + block.setSample(0, 0, 1.0f); + recursiveDual.processBlock(block, recursiveMidi); + recursiveCapture.copyFrom( + 0, recursiveCursor, block, 0, 0, blockSamples); + recursiveCapture.copyFrom( + 1, recursiveCursor, block, 1, 0, blockSamples); + recursiveCursor += blockSamples; + } + const float independentSecondaryRecursionPeak = windowPeak( + recursiveCapture, + 0, + 3 * primeBaseDelaySamples / 2, + 8); + const bool independentRecursionPassed = + captureIsFinite(recursiveCapture) + && independentSecondaryRecursionPeak > 0.02f; + + S13Delay continuouslyPrimedDual(0.5f); + configureExactDelay( + continuouslyPrimedDual, + primeSampleRate, + primeBaseDelaySamples, + S13NAMRack::digitalDelayMode, + 0.0f); + continuouslyPrimedDual.prepareToPlay( + primeSampleRate, topologyBlockSize); + juce::AudioBuffer<float> primedCapture( + 2, primeBaseDelaySamples / 2 + 16); + primedCapture.clear(); + juce::MidiBuffer primedMidi; + int primedCursor = 0; + while (primedCursor < primedCapture.getNumSamples()) + { + const int blockSamples = juce::jmin( + topologyBlockSize, + primedCapture.getNumSamples() - primedCursor); + juce::AudioBuffer<float> block(2, blockSamples); + block.clear(); + if (primedCursor == 0) + block.setSample(0, 0, 1.0f); + if (primedCursor == topologyBlockSize) + { + continuouslyPrimedDual.delayMode.store( + static_cast<float>(S13NAMRack::dualDelayMode)); + } + continuouslyPrimedDual.processBlock(block, primedMidi); + primedCapture.copyFrom( + 0, primedCursor, block, 0, 0, blockSamples); + primedCapture.copyFrom( + 1, primedCursor, block, 1, 0, blockSamples); + primedCursor += blockSamples; + } + const float continuouslyPrimedSecondaryPeak = windowPeak( + primedCapture, + 0, + primeBaseDelaySamples / 2, + 2); + const bool continuousPrimePassed = + captureIsFinite(primedCapture) + && continuouslyPrimedSecondaryPeak > 0.05f; + + const auto renderTopologyAutomation = [] ( + const std::array<int, 6>& partitions) + { + constexpr double sampleRate = 48000.0; + constexpr int blockSize = 64; + constexpr int totalSamples = 22000; + constexpr std::array<int, 3> eventSamples { + 4096, 11264, 19456 + }; + constexpr std::array<int, 3> eventModes { + S13NAMRack::multiDelayMode, + S13NAMRack::dualDelayMode, + S13NAMRack::tapeDelayMode + }; + S13Delay delay(1.0f); + delay.setExtendedModesEnabled(true); + delay.delayTimeL.store(37.0f); + delay.delayTimeR.store(43.66f); + delay.feedback.store(0.35f); + delay.crossFeed.store(0.12f); + delay.mix.store(1.0f); + delay.pingPong.store(1.0f); + delay.tempoSync.store(0.0f); + delay.lpfFreq.store(9200.0f); + delay.hpfFreq.store(105.0f); + delay.fbSaturation.store(0.22f); + delay.stereoWidth.store(1.08f); + delay.delayMode.store( + static_cast<float>(S13NAMRack::digitalDelayMode)); + delay.ducking.store(0.0f); + delay.wowDepthMs.store(0.32f); + delay.wowRateHz.store(0.37f); + delay.flutterDepthMs.store(0.08f); + delay.flutterRateHz.store(6.2f); + delay.topologyControl.store(0.60f); + delay.multiFeedback.store(0.336f); + delay.dualTimeRatio.store(0.80f); + delay.dualFeedback.store(0.3122f); + delay.dualLowPassHz.store(7000.0f); + delay.dualHighPassHz.store(134.0f); + delay.dualSaturation.store(0.36f); + delay.dualModDepthMs.store(0.57f); + delay.dualModRateHz.store(0.34f); + delay.prepareToPlay(sampleRate, blockSize); + + juce::AudioBuffer<float> capture(2, totalSamples); + capture.clear(); + juce::MidiBuffer midi; + int cursor = 0; + size_t partitionIndex = 0; + size_t eventIndex = 0; + while (cursor < totalSamples) + { + if (eventIndex < eventSamples.size() + && cursor == eventSamples[eventIndex]) + { + delay.delayMode.store(static_cast<float>( + eventModes[eventIndex])); + ++eventIndex; + } + int blockSamples = juce::jmin( + partitions[partitionIndex % partitions.size()], + totalSamples - cursor); + if (eventIndex < eventSamples.size() + && cursor < eventSamples[eventIndex]) + { + blockSamples = juce::jmin( + blockSamples, + eventSamples[eventIndex] - cursor); + } + juce::AudioBuffer<float> block(2, blockSamples); + for (int sample = 0; + sample < blockSamples; + ++sample) + { + const int absoluteSample = cursor + sample; + const double time = + static_cast<double>(absoluteSample) + / sampleRate; + const float marker = + absoluteSample % 1291 == 0 + ? 0.24f + : 0.0f; + block.setSample( + 0, + sample, + marker + + 0.08f * static_cast<float>(std::sin( + juce::MathConstants<double>::twoPi + * 181.0 * time))); + block.setSample( + 1, + sample, + -marker * 0.63f + + 0.07f * static_cast<float>(std::sin( + juce::MathConstants<double>::twoPi + * 263.0 * time + 0.41))); + } + delay.processBlock(block, midi); + capture.copyFrom( + 0, cursor, block, 0, 0, blockSamples); + capture.copyFrom( + 1, cursor, block, 1, 0, blockSamples); + cursor += blockSamples; + ++partitionIndex; + } + return capture; + }; + constexpr std::array<int, 6> fixedPartitions { + 64, 64, 64, 64, 64, 64 + }; + constexpr std::array<int, 6> unevenPartitions { + 7, 31, 5, 64, 13, 47 + }; + const auto fixedAutomation = renderTopologyAutomation( + fixedPartitions); + const auto unevenAutomation = renderTopologyAutomation( + unevenPartitions); + float topologyPartitionDifference = 0.0f; + float topologyAutomationPeak = 0.0f; + for (int channel = 0; channel < 2; ++channel) + { + for (int sample = 0; + sample < fixedAutomation.getNumSamples(); + ++sample) + { + topologyPartitionDifference = juce::jmax( + topologyPartitionDifference, + std::abs( + fixedAutomation.getSample(channel, sample) + - unevenAutomation.getSample(channel, sample))); + topologyAutomationPeak = juce::jmax( + topologyAutomationPeak, + std::abs(fixedAutomation.getSample(channel, sample))); + } + } + const bool topologyAutomationPassed = + captureIsFinite(fixedAutomation) + && captureIsFinite(unevenAutomation) + && topologyPartitionDifference <= 2.0e-6f + && topologyAutomationPeak <= 2.0f; + + S13Delay resetDual(0.5f); + configureExactDelay( + resetDual, + primeSampleRate, + primeBaseDelaySamples, + S13NAMRack::dualDelayMode, + 0.65f); + resetDual.prepareToPlay( + primeSampleRate, topologyBlockSize); + juce::MidiBuffer resetMidi; + for (int cursor = 0; + cursor < primeBaseDelaySamples + topologyBlockSize; + cursor += topologyBlockSize) + { + juce::AudioBuffer<float> block(2, topologyBlockSize); + block.clear(); + if (cursor == 0) + { + block.setSample(0, 0, 0.8f); + block.setSample(1, 7, -0.6f); + } + resetDual.processBlock(block, resetMidi); + } + resetDual.resetTailState(); + resetDual.resetRackRuntimeMixState(0.0f, false); + float resetStalePeak = 0.0f; + for (int cursor = 0; + cursor < primeBaseDelaySamples + topologyBlockSize; + cursor += topologyBlockSize) + { + juce::AudioBuffer<float> block(2, topologyBlockSize); + block.clear(); + resetDual.processBlock(block, resetMidi); + for (int channel = 0; channel < 2; ++channel) + resetStalePeak = juce::jmax( + resetStalePeak, + block.getMagnitude(channel, 0, topologyBlockSize)); + } + resetDual.prepareToPlay( + primeSampleRate, topologyBlockSize); + float reprepareStalePeak = 0.0f; + for (int cursor = 0; + cursor < primeBaseDelaySamples + topologyBlockSize; + cursor += topologyBlockSize) + { + juce::AudioBuffer<float> block(2, topologyBlockSize); + block.clear(); + resetDual.processBlock(block, resetMidi); + for (int channel = 0; channel < 2; ++channel) + reprepareStalePeak = juce::jmax( + reprepareStalePeak, + block.getMagnitude(channel, 0, topologyBlockSize)); + } + const bool resetAndRepreparePassed = + resetStalePeak <= 1.0e-7f + && reprepareStalePeak <= 1.0e-7f; + + const bool pass = + exactTopologyPassed + && independentRecursionPassed + && continuousPrimePassed + && topologyAutomationPassed + && resetAndRepreparePassed; + auto* value = new juce::DynamicObject(); + value->setProperty("exactRateCases", exactRateCases); + value->setProperty( + "independentSecondaryRecursionPeak", + independentSecondaryRecursionPeak); + value->setProperty( + "continuouslyPrimedSecondaryPeak", + continuouslyPrimedSecondaryPeak); + value->setProperty( + "topologyPartitionMaximumDifference", + topologyPartitionDifference); + value->setProperty( + "topologyAutomationPeak", + topologyAutomationPeak); + value->setProperty( + "resetStaleHistoryPeak", resetStalePeak); + value->setProperty( + "reprepareStaleHistoryPeak", reprepareStalePeak); + value->setProperty( + "exactTopologyPassed", exactTopologyPassed); + value->setProperty( + "independentRecursionPassed", + independentRecursionPassed); + value->setProperty( + "continuousPrimePassed", continuousPrimePassed); + value->setProperty( + "topologyAutomationPassed", + topologyAutomationPassed); + value->setProperty( + "resetAndRepreparePassed", + resetAndRepreparePassed); + value->setProperty("pass", pass); + return juce::var(value); +} + +juce::Array<juce::var> NAMDelayRegression::runCoreChecks() +{ + juce::Array<juce::var> checks; + + const auto delayV10ContractProbe = + runDelayV10ContractProbe(); + addCheck( + checks, + "delay_v10_sync_macro_and_state_contract", + delayV10ContractProbe.getProperty("pass", false) + ? "pass" + : "fail", + "Delay V10 must use one monotonic three-step sync resolver, derive all Digital/Tape/Analog/Multi/Dual character and Guitar/Bass support values only from the six faceplate controls plus Instrument, canonicalize all nine saved delay fields across legacy/current/unknown and nested snapshots, preserve V9 Reverb Voice, and make migration idempotent.", + delayV10ContractProbe); + const auto delayV10AudioProbe = + runDelayV10AudioProbe(); + addCheck( + checks, + "delay_v10_timing_partition_modes_and_tail", + delayV10AudioProbe.getProperty("pass", false) + ? "pass" + : "fail", + "Delay V10 must place a 125 ms manual echo within two samples at 44.1/48/96 kHz, render sample-identically across regular and irregular callback partitions, make all five modes objectively distinct, and declare each mode's exact derived -60 dB tail without hidden saved controls.", + delayV10AudioProbe); + const auto delayV10Stage3TopologyProbe = + runDelayV10Stage3TopologyProbe(); + addCheck( + checks, + "delay_v10_multi_dual_topology_objective_matrix", + delayV10Stage3TopologyProbe.getProperty("pass", false) + ? "pass" + : "fail", + "Delay V10 Multi must render the exact four normalized alternating taps in stereo and mono at 44.1/48/96 kHz; Dual must use isolated continuously primed L/R secondary histories with independent recursion; 0-to-Multi-to-Dual-to-Tape automation must remain callback-partition invariant; and logical reset/reprepare must invalidate both histories.", + delayV10Stage3TopologyProbe); + + return checks; +} + +juce::Array<juce::var> NAMDelayRegression::run() +{ + auto checks = runCoreChecks(); + checks.addArray(runLifecycleChecks()); + checks.addArray(runRackTailChecks()); + return checks; +} diff --git a/Source/NAMDelayRegression.h b/Source/NAMDelayRegression.h new file mode 100644 index 0000000..20fe192 --- /dev/null +++ b/Source/NAMDelayRegression.h @@ -0,0 +1,43 @@ +#pragma once + +#include <JuceHeader.h> + +class S13NAMRack; + +// Kept in dedicated translation units so the deterministic Delay/Tape/host- +// tail objective matrix never inflates AudioEngine::runNAMRackRegression or +// one diagnostic helper beyond MSVC's compiler-heap limits. +class NAMDelayRegression final +{ +public: + static juce::Array<juce::var> run(); + +private: + inline static constexpr double fixtureSampleRate = 44100.0; + inline static constexpr int fixtureBlockSize = 512; + + static void addCheck( + juce::Array<juce::var>& targetChecks, + const juce::String& id, + const juce::String& status, + const juce::String& detail, + const juce::var& value = juce::var()); + static void configureNeutralRack(S13NAMRack& rack); + + static juce::Array<juce::var> runCoreChecks(); + static juce::Array<juce::var> runLifecycleChecks(); + static juce::Array<juce::var> runRackTailChecks(); + + static juce::var runDelayV10ContractProbe(); + static juce::var runDelayV10AudioProbe(); + static juce::var runDelayV10Stage3TopologyProbe(); + static juce::var runDelayPlayHeadLifecycleProbe(); + static juce::var runDelayTailLifecycleProbe(); + static juce::var runDelayHighFeedbackDecayProbe(); + static juce::var runDelayFractionalResetProbe(); + static juce::var runStandaloneDelayMalformedAndLegacyModeProbe(); + static juce::var runRackDelaySpilloverProbe(); + static juce::var runRackDelayV10FrozenTailAndBudgetProbe(); + static juce::var runRackMinimumDelayBypassProbe(); + static juce::var runTrackProcessorSparseTailServiceProbe(); +}; diff --git a/Source/NAMDelayRegressionLifecycle.cpp b/Source/NAMDelayRegressionLifecycle.cpp new file mode 100644 index 0000000..91dc717 --- /dev/null +++ b/Source/NAMDelayRegressionLifecycle.cpp @@ -0,0 +1,1427 @@ +#include "NAMDelayRegression.h" +#include "BuiltInEffects2.h" +#include "TrackProcessor.h" + +#include <algorithm> +#include <array> +#include <atomic> +#include <cmath> +#include <cstdint> +#include <limits> +#include <memory> +#include <numeric> +#include <utility> +#include <vector> + +juce::var NAMDelayRegression::runDelayPlayHeadLifecycleProbe() +{ + struct CountingPlayHead final : juce::AudioPlayHead + { + explicit CountingPlayHead(double tempo) : bpm(tempo) {} + + juce::Optional<PositionInfo> getPosition() const override + { + ++positionCalls; + PositionInfo info; + info.setBpm(bpm); + info.setIsPlaying(true); + return info; + } + + double bpm = 60.0; + mutable int positionCalls = 0; + }; + + CountingPlayHead standaloneHead(60.0); + S13Delay standaloneDelay(10.0f); + standaloneDelay.delayTimeL.store(250.0f); + standaloneDelay.delayTimeR.store(250.0f); + standaloneDelay.feedback.store(0.0f); + standaloneDelay.mix.store(1.0f); + standaloneDelay.tempoSync.store(1.0f); + standaloneDelay.syncNoteL.store(2.0f); + standaloneDelay.syncNoteR.store(2.0f); + standaloneDelay.setPlayHead(&standaloneHead); + standaloneDelay.prepareToPlay( + fixtureSampleRate, fixtureBlockSize); + const int callsAfterPrepare = + standaloneHead.positionCalls; + const double conservativeUnknownTail = + standaloneDelay.getTailLengthSeconds(); + const int callsAfterInitialTail = + standaloneHead.positionCalls; + standaloneDelay.resetTailState(); + const int callsAfterReset = + standaloneHead.positionCalls; + + juce::AudioBuffer<float> standaloneBlock( + 2, fixtureBlockSize); + standaloneBlock.clear(); + standaloneBlock.setSample(0, 0, 0.5f); + juce::MidiBuffer midi; + standaloneDelay.processBlock(standaloneBlock, midi); + const int callsAfterProcess = + standaloneHead.positionCalls; + const double publishedTempoTail = + standaloneDelay.getTailLengthSeconds(); + const int callsAfterPublishedTail = + standaloneHead.positionCalls; + const float standaloneSnappedSamplesAt60 = + standaloneDelay.requestedDelaySamplesL; + const bool standaloneSnappedWithoutMorphAt60 = + ! standaloneDelay.delayTimeMorphActive + && ! standaloneDelay.delayTimeChangePending; + standaloneDelay.resetTailState(); + const int callsAfterPublishedReset = + standaloneHead.positionCalls; + const float tempoRetainedAcrossLogicalReset = + standaloneDelay.publishedTempoBpm.load( + std::memory_order_relaxed); + standaloneHead.bpm = 10.0; + standaloneDelay.prepareToPlay( + fixtureSampleRate, fixtureBlockSize); + const int callsAfterStaleTempoPrepare = + standaloneHead.positionCalls; + const double staleTempoPreCallbackTail = + standaloneDelay.getTailLengthSeconds(); + standaloneBlock.clear(); + standaloneBlock.setSample(0, 0, 0.5f); + standaloneDelay.processBlock(standaloneBlock, midi); + const int callsAfterTenBpmProcess = + standaloneHead.positionCalls; + const float standaloneSnappedSamplesAt10 = + standaloneDelay.requestedDelaySamplesL; + const bool standaloneSnappedWithoutMorphAt10 = + ! standaloneDelay.delayTimeMorphActive + && ! standaloneDelay.delayTimeChangePending; + const double tenBpmPublishedTail = + standaloneDelay.getTailLengthSeconds(); + standaloneDelay.reset(); + const int callsAfterHostReset = + standaloneHead.positionCalls; + const float tempoAfterHostReset = + standaloneDelay.publishedTempoBpm.load( + std::memory_order_relaxed); + const double hostResetPreCallbackTail = + standaloneDelay.getTailLengthSeconds(); + const float expectedQuarterNoteSamples = + static_cast<float>(fixtureSampleRate); + const float expectedTenBpmQuarterSamples = + static_cast<float>(fixtureSampleRate * 6.0); + const bool standaloneLifecyclePassed = + callsAfterPrepare == 0 + && callsAfterInitialTail == 0 + && callsAfterReset == 0 + && callsAfterProcess == 1 + && callsAfterPublishedTail == 1 + && callsAfterPublishedReset == 1 + && callsAfterStaleTempoPrepare == 1 + && callsAfterTenBpmProcess == 2 + && callsAfterHostReset == 2 + && conservativeUnknownTail + >= publishedTempoTail * 5.9 + && std::abs( + standaloneSnappedSamplesAt60 + - expectedQuarterNoteSamples) <= 1.0f + && std::abs( + tempoRetainedAcrossLogicalReset - 60.0f) <= 1.0e-6f + && standaloneSnappedWithoutMorphAt60 + && staleTempoPreCallbackTail + 1.0e-5 + >= tenBpmPublishedTail + && hostResetPreCallbackTail + 1.0e-5 + >= tenBpmPublishedTail + && std::abs( + standaloneSnappedSamplesAt10 + - expectedTenBpmQuarterSamples) <= 1.0f + && standaloneSnappedWithoutMorphAt10 + && std::abs(tempoAfterHostReset) <= 1.0e-6f; + + CountingPlayHead rackHead(60.0); + S13NAMRack rack; + configureNeutralRack(rack); + rack.delayEnabled.store(1.0f); + rack.delayMix.store(0.75f); + rack.delayFeedback.store(0.0f); + rack.delayMod.store(0.0f); + rack.delayDucker.store(0.0f); + rack.delayMode.store(static_cast<float>( + S13NAMRack::digitalDelayMode)); + rack.delayTempoSync.store(1.0f); + rack.setPlayHead(&rackHead); + rack.prepareToPlay(fixtureSampleRate, fixtureBlockSize); + const int rackCallsAfterPrepare = + rackHead.positionCalls; + const double rackUnknownTail = + rack.getTailLengthSeconds(); + const int rackCallsAfterInitialTail = + rackHead.positionCalls; + juce::AudioBuffer<float> rackBlock( + 2, fixtureBlockSize); + rackBlock.clear(); + rackBlock.setSample(0, 0, 0.5f); + rack.processBlock(rackBlock, midi); + const int rackCallsAfterProcess = + rackHead.positionCalls; + const double rackPublishedTail = + rack.getTailLengthSeconds(); + const int rackCallsAfterPublishedTail = + rackHead.positionCalls; + const float rackSnappedSamplesAt60 = + rack.rackDelay.requestedDelaySamplesL; + rackHead.bpm = 10.0; + rack.reset(); + const int rackCallsAfterHostReset = + rackHead.positionCalls; + const double rackStaleTempoPreCallbackTail = + rack.getTailLengthSeconds(); + const double maximumAutomatedDelayTail = + rack.getAutomatedTailLengthSeconds( + S13NAMRack::tailAutomationDelay); + const double actualQuarterWidth = 1.08; + const double actualQuarterTailAtTenBpm = + (6.0 + 1.0 / fixtureSampleRate) + * (std::log(0.001 / actualQuarterWidth) + / std::log(0.85) + + 1.0); + rackBlock.clear(); + rackBlock.setSample(0, 0, 0.5f); + rack.processBlock(rackBlock, midi); + const int rackCallsAfterTenBpmProcess = + rackHead.positionCalls; + const float rackSnappedSamplesAt10 = + rack.rackDelay.requestedDelaySamplesL; + const bool rackSnappedWithoutMorphAt10 = + ! rack.rackDelay.delayTimeMorphActive + && ! rack.rackDelay.delayTimeChangePending; + const double rackTenBpmPublishedTail = + rack.getTailLengthSeconds(); + const bool rackLifecyclePassed = + rackCallsAfterPrepare == 0 + && rackCallsAfterInitialTail == 0 + && rackCallsAfterProcess == 1 + && rackCallsAfterPublishedTail == 1 + && rackCallsAfterHostReset == 1 + && rackCallsAfterTenBpmProcess == 2 + && rackUnknownTail >= rackPublishedTail + && rackStaleTempoPreCallbackTail + + 0.020 + + 2.0 / fixtureSampleRate + >= rackTenBpmPublishedTail + && maximumAutomatedDelayTail + >= actualQuarterTailAtTenBpm + && std::abs( + rackSnappedSamplesAt60 + - expectedQuarterNoteSamples) <= 1.0f + && std::abs( + rackSnappedSamplesAt10 + - expectedTenBpmQuarterSamples) <= 1.0f + && rackSnappedWithoutMorphAt10 + && std::abs( + rack.publishedTempoBpm.load( + std::memory_order_relaxed) + - 10.0f) <= 1.0e-6f + && std::abs( + rack.rackDelay.publishedTempoBpm.load( + std::memory_order_relaxed) + - 10.0f) <= 1.0e-6f; + + CountingPlayHead maximumTailHead(10.0); + S13Delay maximumTailDelay; + maximumTailDelay.delayTimeL.store(1.0f); + maximumTailDelay.delayTimeR.store(1.0f); + maximumTailDelay.feedback.store(0.95f); + maximumTailDelay.crossFeed.store(0.0f); + maximumTailDelay.mix.store(1.0f); + maximumTailDelay.tempoSync.store(1.0f); + maximumTailDelay.syncNoteL.store(0.0f); + maximumTailDelay.syncNoteR.store(0.0f); + maximumTailDelay.lpfFreq.store(20000.0f); + maximumTailDelay.hpfFreq.store(20.0f); + maximumTailDelay.fbSaturation.store(0.0f); + maximumTailDelay.stereoWidth.store(2.0f); + maximumTailDelay.delayMode.store(0.0f); + maximumTailDelay.ducking.store(0.0f); + maximumTailDelay.setPlayHead(&maximumTailHead); + maximumTailDelay.prepareToPlay( + fixtureSampleRate, fixtureBlockSize); + juce::AudioBuffer<float> maximumTailBlock( + 2, fixtureBlockSize); + maximumTailBlock.clear(); + maximumTailBlock.setSample(0, 0, 1.0f); + maximumTailBlock.setSample(1, 0, -1.0f); + maximumTailDelay.processBlock(maximumTailBlock, midi); + const double maximumTailIntervals = + std::log(0.001 / 2.0) / std::log(0.95) + 1.0; + const double maximumTailExpectedBound = + (24.0 + 1.0 / fixtureSampleRate) + * maximumTailIntervals; + const double maximumTailPublishedBound = + static_cast<double>( + maximumTailDelay.publishedLiveTailSeconds.load( + std::memory_order_relaxed)); + maximumTailDelay.tempoSync.store(0.0f); + maximumTailDelay.delayTimeL.store(1.0f); + maximumTailDelay.delayTimeR.store(1.0f); + maximumTailDelay.feedback.store(0.0f); + maximumTailDelay.mix.store(0.0f); + maximumTailDelay.stereoWidth.store(1.0f); + const double maximumTailPreservedAfterDownwardEdit = + maximumTailDelay.getTailLengthSeconds(); + const bool maximumCapacityTailPassed = + maximumTailPublishedBound > 300.0 + && maximumTailPublishedBound + 0.01 + >= maximumTailExpectedBound + && maximumTailPreservedAfterDownwardEdit + 0.01 + >= maximumTailExpectedBound; + + auto* value = new juce::DynamicObject(); + value->setProperty( + "standalonePlayHeadCallsAfterPrepare", + callsAfterPrepare); + value->setProperty( + "standalonePlayHeadCallsAfterProcess", + callsAfterProcess); + value->setProperty( + "standaloneUnknownTempoTailSeconds", + conservativeUnknownTail); + value->setProperty( + "standalonePublishedTempoTailSeconds", + publishedTempoTail); + value->setProperty( + "standaloneTenBpmPublishedTailSeconds", + tenBpmPublishedTail); + value->setProperty( + "standaloneStaleTempoPreCallbackTailSeconds", + staleTempoPreCallbackTail); + value->setProperty( + "standaloneHostResetPreCallbackTailSeconds", + hostResetPreCallbackTail); + value->setProperty( + "standaloneSnappedSamplesAt60", + standaloneSnappedSamplesAt60); + value->setProperty( + "standaloneSnappedSamplesAt10", + standaloneSnappedSamplesAt10); + value->setProperty( + "standaloneLifecyclePassed", + standaloneLifecyclePassed); + value->setProperty( + "rackPlayHeadCallsAfterPrepare", + rackCallsAfterPrepare); + value->setProperty( + "rackPlayHeadCallsAfterProcess", + rackCallsAfterProcess); + value->setProperty( + "rackUnknownTempoTailSeconds", rackUnknownTail); + value->setProperty( + "rackPublishedTempoTailSeconds", rackPublishedTail); + value->setProperty( + "rackTenBpmPublishedTailSeconds", + rackTenBpmPublishedTail); + value->setProperty( + "rackStaleTempoPreCallbackTailSeconds", + rackStaleTempoPreCallbackTail); + value->setProperty( + "rackSnappedSamplesAt60", + rackSnappedSamplesAt60); + value->setProperty( + "rackSnappedSamplesAt10", + rackSnappedSamplesAt10); + value->setProperty( + "maximumAutomatedDelayTailSeconds", + maximumAutomatedDelayTail); + value->setProperty( + "actualQuarterTailAtTenBpmSeconds", + actualQuarterTailAtTenBpm); + value->setProperty( + "rackLifecyclePassed", rackLifecyclePassed); + value->setProperty( + "maximumTailExpectedBoundSeconds", + maximumTailExpectedBound); + value->setProperty( + "maximumTailPublishedBoundSeconds", + maximumTailPublishedBound); + value->setProperty( + "maximumTailPreservedAfterDownwardEditSeconds", + maximumTailPreservedAfterDownwardEdit); + value->setProperty( + "maximumCapacityTailPassed", + maximumCapacityTailPassed); + value->setProperty( + "pass", + standaloneLifecyclePassed + && rackLifecyclePassed + && maximumCapacityTailPassed); + return juce::var(value); +} + +juce::var NAMDelayRegression::runDelayTailLifecycleProbe() +{ + const int delaySamples = + juce::roundToInt(fixtureSampleRate * 0.25); + const int renderedSamples = delaySamples + 2048; + + auto configureDelay = [] (S13Delay& delay) + { + delay.delayTimeL.store(250.0f); + delay.delayTimeR.store(250.0f); + delay.feedback.store(0.0f); + delay.crossFeed.store(0.0f); + delay.mix.store(1.0f); + delay.pingPong.store(0.0f); + delay.tempoSync.store(0.0f); + delay.lpfFreq.store(20000.0f); + delay.hpfFreq.store(20.0f); + delay.fbSaturation.store(0.0f); + delay.stereoWidth.store(1.0f); + delay.delayMode.store(0.0f); + delay.ducking.store(0.0f); + }; + + auto renderSilenceAfterImpulse = [&] ( + S13Delay& delay, + bool resetAfterWriting, + bool preserveUnityDry) + { + juce::AudioBuffer<float> capture(2, renderedSamples); + capture.clear(); + juce::MidiBuffer midi; + int cursor = 0; + + juce::AudioBuffer<float> firstBlock(2, fixtureBlockSize); + firstBlock.clear(); + firstBlock.setSample(0, 0, 0.75f); + firstBlock.setSample(1, 0, -0.50f); + delay.processBlock(firstBlock, midi); + capture.copyFrom( + 0, 0, firstBlock, 0, 0, fixtureBlockSize); + capture.copyFrom( + 1, 0, firstBlock, 1, 0, fixtureBlockSize); + cursor += fixtureBlockSize; + + if (resetAfterWriting) + delay.resetTailState(); + delay.inputSend.store(0.0f); + delay.unityDry.store(preserveUnityDry ? 1.0f : 0.0f); + + while (cursor < renderedSamples) + { + const int blockSize = juce::jmin( + fixtureBlockSize, renderedSamples - cursor); + juce::AudioBuffer<float> block(2, blockSize); + block.clear(); + delay.processBlock(block, midi); + capture.copyFrom(0, cursor, block, 0, 0, blockSize); + capture.copyFrom(1, cursor, block, 1, 0, blockSize); + cursor += blockSize; + } + return capture; + }; + + S13Delay noSendDelay(1.0f); + configureDelay(noSendDelay); + noSendDelay.prepareToPlay( + fixtureSampleRate, fixtureBlockSize); + noSendDelay.inputSend.store(0.0f); + noSendDelay.unityDry.store(1.0f); + const auto noSendCapture = + renderSilenceAfterImpulse(noSendDelay, false, true); + float noSendEchoPeak = 0.0f; + for (int channel = 0; channel < 2; ++channel) + for (int sample = delaySamples - 8; + sample <= delaySamples + 8; + ++sample) + noSendEchoPeak = juce::jmax( + noSendEchoPeak, + std::abs(noSendCapture.getSample(channel, sample))); + + S13Delay resetDelay(1.0f); + configureDelay(resetDelay); + resetDelay.prepareToPlay( + fixtureSampleRate, fixtureBlockSize); + resetDelay.inputSend.store(1.0f); + resetDelay.unityDry.store(0.0f); + const auto resetCapture = + renderSilenceAfterImpulse(resetDelay, true, false); + float resetLeakPeak = 0.0f; + for (int channel = 0; channel < 2; ++channel) + for (int sample = fixtureBlockSize; + sample < resetCapture.getNumSamples(); + ++sample) + resetLeakPeak = juce::jmax( + resetLeakPeak, + std::abs(resetCapture.getSample(channel, sample))); + + auto* value = new juce::DynamicObject(); + value->setProperty("delaySamples", delaySamples); + value->setProperty("inputSendZeroEchoPeak", noSendEchoPeak); + value->setProperty("resetStaleHistoryPeak", resetLeakPeak); + value->setProperty( + "pass", + noSendEchoPeak <= 1.0e-7f + && resetLeakPeak <= 1.0e-7f); + return juce::var(value); +} + +juce::var NAMDelayRegression::runDelayHighFeedbackDecayProbe() +{ + constexpr double delaySampleRate = 44100.0; + constexpr int delayBlockSize = 16; + constexpr int stimulusBlocks = 1378; + constexpr int tailWindowBlocks = 1378; + constexpr int tailWindowCount = 8; + constexpr int stimulusSamples = + stimulusBlocks * delayBlockSize; + constexpr int tailWindowSamples = + tailWindowBlocks * delayBlockSize; + constexpr int totalBlocks = + stimulusBlocks + + tailWindowBlocks * tailWindowCount; + constexpr float feedbackAmount = 0.85f; + constexpr float characterAmount = 1.0f; + constexpr float maximumAcceptedPeak = 2.0f; + constexpr double maximumWindowGrowth = 1.15; + constexpr double maximumFinalToFirstRms = 0.10; + const int strumIntervalSamples = + juce::roundToInt(delaySampleRate * 0.075); + + auto runMode = [&] (int mode) + { + S13Delay delay(1.0f); + delay.setExtendedModesEnabled(true); + const auto state = + S13NAMRack::resolveDelayMacroState( + 37.0f, + feedbackAmount, + 1.0f, + characterAmount, + 0.0f, + static_cast<float>(mode), + 1.0f, + 0.0f, + S13NAMRack::guitarInstrumentProfile); + delay.delayTimeL.store( + state.timeMsL, std::memory_order_relaxed); + delay.delayTimeR.store( + state.timeMsR, + std::memory_order_relaxed); + delay.feedback.store( + state.feedbackGain, + std::memory_order_relaxed); + delay.crossFeed.store( + state.crossFeed, std::memory_order_relaxed); + delay.mix.store( + 1.0f, std::memory_order_relaxed); + delay.pingPong.store( + 1.0f, std::memory_order_relaxed); + delay.tempoSync.store( + 0.0f, std::memory_order_relaxed); + delay.lpfFreq.store( + state.lowPassHz, + std::memory_order_relaxed); + delay.hpfFreq.store( + state.highPassHz, std::memory_order_relaxed); + delay.fbSaturation.store( + state.saturation, + std::memory_order_relaxed); + delay.stereoWidth.store( + state.stereoWidth, std::memory_order_relaxed); + delay.delayMode.store( + static_cast<float>(mode), + std::memory_order_relaxed); + delay.ducking.store( + 0.0f, std::memory_order_relaxed); + delay.wowDepthMs.store( + state.wowDepthMs, std::memory_order_relaxed); + delay.wowRateHz.store( + state.wowRateHz, std::memory_order_relaxed); + delay.flutterDepthMs.store( + state.flutterDepthMs, std::memory_order_relaxed); + delay.flutterRateHz.store( + state.flutterRateHz, std::memory_order_relaxed); + delay.duckAttackMs.store( + state.duckAttackMs, std::memory_order_relaxed); + delay.duckReleaseMs.store( + state.duckReleaseMs, std::memory_order_relaxed); + delay.duckMaxReduction.store( + state.duckMaxReduction, std::memory_order_relaxed); + delay.topologyControl.store( + state.topologyControl, std::memory_order_relaxed); + delay.multiFeedback.store( + state.multiFeedbackGain, std::memory_order_relaxed); + delay.dualTimeRatio.store( + state.dualTimeRatio, std::memory_order_relaxed); + delay.dualFeedback.store( + state.dualFeedbackGain, std::memory_order_relaxed); + delay.dualLowPassHz.store( + state.dualLowPassHz, std::memory_order_relaxed); + delay.dualHighPassHz.store( + state.dualHighPassHz, std::memory_order_relaxed); + delay.dualSaturation.store( + state.dualSaturation, std::memory_order_relaxed); + delay.dualModDepthMs.store( + state.dualModDepthMs, std::memory_order_relaxed); + delay.dualModRateHz.store( + state.dualModRateHz, std::memory_order_relaxed); + delay.prepareToPlay( + delaySampleRate, delayBlockSize); + delay.inputSend.store( + 1.0f, std::memory_order_relaxed); + delay.unityDry.store( + 0.0f, std::memory_order_relaxed); + + std::array<double, 8> + tailEnergy {}; + std::array<int, 8> + tailValueCounts {}; + float inputPeak = 0.0f; + float outputPeak = 0.0f; + int nonFiniteCount = 0; + juce::AudioBuffer<float> block( + 2, delayBlockSize); + juce::MidiBuffer midi; + + for (int blockIndex = 0; + blockIndex < totalBlocks; + ++blockIndex) + { + block.clear(); + for (int sample = 0; + sample < delayBlockSize; + ++sample) + { + const int absoluteSample = + blockIndex * delayBlockSize + + sample; + if (absoluteSample >= stimulusSamples) + continue; + + const int strumSample = + absoluteSample + % strumIntervalSamples; + const int strumIndex = + absoluteSample + / strumIntervalSamples; + const double localTime = + static_cast<double>(strumSample) + / delaySampleRate; + const float envelope = + static_cast<float>( + std::exp(-localTime / 0.018)); + const double phase = + juce::MathConstants<double>::twoPi + * localTime; + const float polarity = + (strumIndex & 1) == 0 + ? 1.0f + : -1.0f; + const float attack = + strumSample == 0 + ? 0.34f * polarity + : 0.0f; + const float left = + attack + + envelope + * static_cast<float>( + 0.16 + * std::sin( + phase * 110.0) + + 0.10 + * std::sin( + phase * 329.63 + + 0.31) + + 0.06 + * std::sin( + phase * 987.77 + + 1.12)); + const float right = + -attack * 0.72f + + envelope + * static_cast<float>( + 0.13 + * std::sin( + phase * 146.83 + + 0.73) + + 0.09 + * std::sin( + phase * 440.0 + + 1.41) + + 0.05 + * std::sin( + phase * 1318.51 + + 2.07)); + block.setSample(0, sample, left); + block.setSample(1, sample, right); + inputPeak = juce::jmax( + inputPeak, + juce::jmax( + std::abs(left), + std::abs(right))); + } + + delay.processBlock(block, midi); + for (int channel = 0; + channel < 2; + ++channel) + { + const auto* samples = + block.getReadPointer(channel); + for (int sample = 0; + sample < delayBlockSize; + ++sample) + { + const float value = samples[sample]; + if (! std::isfinite(value)) + { + ++nonFiniteCount; + continue; + } + + outputPeak = juce::jmax( + outputPeak, + std::abs(value)); + const int absoluteSample = + blockIndex * delayBlockSize + + sample; + if (absoluteSample + < stimulusSamples) + { + continue; + } + + const int windowIndex = + (absoluteSample + - stimulusSamples) + / tailWindowSamples; + if (windowIndex + < tailWindowCount) + { + tailEnergy[ + static_cast<size_t>( + windowIndex)] + += static_cast<double>( + value) + * static_cast<double>( + value); + ++tailValueCounts[ + static_cast<size_t>( + windowIndex)]; + } + } + } + } + + std::array<double, 8> + tailRms {}; + juce::Array<juce::var> tailWindowRms; + for (size_t windowIndex = 0; + windowIndex < tailRms.size(); + ++windowIndex) + { + const int valueCount = + tailValueCounts[windowIndex]; + tailRms[windowIndex] = + valueCount > 0 + ? std::sqrt( + tailEnergy[windowIndex] + / static_cast<double>( + valueCount)) + : 0.0; + tailWindowRms.add( + tailRms[windowIndex]); + } + + bool nonGrowingDecay = true; + for (size_t windowIndex = 1; + windowIndex < tailRms.size(); + ++windowIndex) + { + const double allowedRms = + tailRms[windowIndex - 1] + * maximumWindowGrowth + + 1.0e-8; + if (tailRms[windowIndex] + > allowedRms) + { + nonGrowingDecay = false; + } + } + + const double firstTailRms = + tailRms.front(); + const double finalTailRms = + tailRms.back(); + const double finalToFirstRms = + firstTailRms > 0.0 + ? finalTailRms + / firstTailRms + : std::numeric_limits< + double>::infinity(); + const bool pass = + nonFiniteCount == 0 + && inputPeak > 0.1f + && outputPeak <= maximumAcceptedPeak + && firstTailRms > 1.0e-5 + && nonGrowingDecay + && finalToFirstRms + <= maximumFinalToFirstRms + && finalTailRms <= 1.0e-4; + + auto* value = + new juce::DynamicObject(); + value->setProperty( + "mode", + mode == S13NAMRack::digitalDelayMode + ? "Digital" + : mode == S13NAMRack::tapeDelayMode + ? "Tape" + : mode == S13NAMRack::analogDelayMode + ? "Analog" + : mode == S13NAMRack::multiDelayMode + ? "Multi" + : "Dual"); + value->setProperty( + "feedback", feedbackAmount); + value->setProperty( + "characterControl", + characterAmount); + value->setProperty( + "inputPeak", inputPeak); + value->setProperty( + "outputPeak", outputPeak); + value->setProperty( + "maximumAcceptedPeak", + maximumAcceptedPeak); + value->setProperty( + "tailWindowRms", tailWindowRms); + value->setProperty( + "finalToFirstTailRms", + finalToFirstRms); + value->setProperty( + "nonGrowingDecay", + nonGrowingDecay); + value->setProperty( + "nonFiniteCount", + nonFiniteCount); + value->setProperty("pass", pass); + return juce::var(value); + }; + + juce::Array<juce::var> cases; + bool allPass = true; + for (int mode = S13NAMRack::digitalDelayMode; + mode <= S13NAMRack::dualDelayMode; + ++mode) + { + const auto result = runMode(mode); + allPass = + allPass + && static_cast<bool>( + result.getProperty( + "pass", false)); + cases.add(result); + } + + auto* value = new juce::DynamicObject(); + value->setProperty( + "sampleRate", delaySampleRate); + value->setProperty( + "blockSize", delayBlockSize); + value->setProperty( + "stimulusSeconds", + static_cast<double>(stimulusSamples) + / delaySampleRate); + value->setProperty( + "silenceSeconds", + static_cast<double>( + tailWindowSamples + * tailWindowCount) + / delaySampleRate); + value->setProperty( + "cases", cases); + value->setProperty("pass", allPass); + return juce::var(value); +} + +juce::var NAMDelayRegression::runDelayFractionalResetProbe() +{ + constexpr double delaySampleRate = 44100.0; + constexpr int delayBlockSize = 16; + constexpr float requestedDelaySamples = 44.5f; + constexpr float historyMarker = 0.75f; + constexpr int prefillBlocks = 8; + constexpr int observationBlocks = 8; + const float delayMs = + requestedDelaySamples + * 1000.0f + / static_cast<float>( + delaySampleRate); + const int floorHistorySamples = + static_cast<int>( + std::floor(requestedDelaySamples)); + const int requiredHistorySamples = + static_cast<int>( + std::ceil(requestedDelaySamples)); + + S13Delay delay(0.1f); + delay.delayTimeL.store( + delayMs, std::memory_order_relaxed); + delay.delayTimeR.store( + delayMs, std::memory_order_relaxed); + delay.feedback.store( + 0.0f, std::memory_order_relaxed); + delay.crossFeed.store( + 0.0f, std::memory_order_relaxed); + delay.mix.store( + 1.0f, std::memory_order_relaxed); + delay.pingPong.store( + 0.0f, std::memory_order_relaxed); + delay.tempoSync.store( + 0.0f, std::memory_order_relaxed); + delay.lpfFreq.store( + 20000.0f, std::memory_order_relaxed); + delay.hpfFreq.store( + 20.0f, std::memory_order_relaxed); + delay.fbSaturation.store( + 0.0f, std::memory_order_relaxed); + delay.stereoWidth.store( + 1.0f, std::memory_order_relaxed); + delay.delayMode.store( + 0.0f, std::memory_order_relaxed); + delay.ducking.store( + 0.0f, std::memory_order_relaxed); + delay.prepareToPlay( + delaySampleRate, delayBlockSize); + delay.inputSend.store( + 1.0f, std::memory_order_relaxed); + delay.unityDry.store( + 0.0f, std::memory_order_relaxed); + + juce::AudioBuffer<float> block( + 2, delayBlockSize); + juce::MidiBuffer midi; + for (int blockIndex = 0; + blockIndex < prefillBlocks; + ++blockIndex) + { + for (int sample = 0; + sample < delayBlockSize; + ++sample) + { + block.setSample( + 0, sample, historyMarker); + block.setSample( + 1, sample, + -historyMarker * 0.8f); + } + delay.processBlock(block, midi); + } + + delay.inputSend.store( + 0.0f, std::memory_order_relaxed); + delay.unityDry.store( + 0.0f, std::memory_order_relaxed); + delay.resetTailState(); + + float staleHistoryPeak = 0.0f; + int peakSample = -1; + int nonFiniteCount = 0; + for (int blockIndex = 0; + blockIndex < observationBlocks; + ++blockIndex) + { + block.clear(); + delay.processBlock(block, midi); + for (int channel = 0; + channel < 2; + ++channel) + { + const auto* samples = + block.getReadPointer(channel); + for (int sample = 0; + sample < delayBlockSize; + ++sample) + { + const float value = samples[sample]; + if (! std::isfinite(value)) + { + ++nonFiniteCount; + continue; + } + + const float magnitude = + std::abs(value); + if (magnitude + > staleHistoryPeak) + { + staleHistoryPeak = + magnitude; + peakSample = + blockIndex + * delayBlockSize + + sample; + } + } + } + } + + const bool pass = + floorHistorySamples + < requiredHistorySamples + && nonFiniteCount == 0 + && staleHistoryPeak <= 1.0e-7f; + auto* value = new juce::DynamicObject(); + value->setProperty( + "sampleRate", delaySampleRate); + value->setProperty( + "blockSize", delayBlockSize); + value->setProperty( + "requestedDelaySamples", + requestedDelaySamples); + value->setProperty( + "floorHistorySamples", + floorHistorySamples); + value->setProperty( + "requiredHistorySamples", + requiredHistorySamples); + value->setProperty( + "prefillSamples", + prefillBlocks * delayBlockSize); + value->setProperty( + "observationSamples", + observationBlocks + * delayBlockSize); + value->setProperty( + "staleHistoryPeak", + staleHistoryPeak); + value->setProperty( + "peakSample", peakSample); + value->setProperty( + "nonFiniteCount", + nonFiniteCount); + value->setProperty("pass", pass); + return juce::var(value); +} + +juce::var NAMDelayRegression::runStandaloneDelayMalformedAndLegacyModeProbe() +{ + const double quietNaN = + std::numeric_limits<double>::quiet_NaN(); + const double positiveInfinity = + std::numeric_limits<double>::infinity(); + const double negativeInfinity = + -std::numeric_limits<double>::infinity(); + juce::ValueTree malformedTree("S13Delay"); + malformedTree.setProperty("delayTimeL", quietNaN, nullptr); + malformedTree.setProperty("delayTimeR", positiveInfinity, nullptr); + malformedTree.setProperty("feedback", negativeInfinity, nullptr); + malformedTree.setProperty("crossFeed", quietNaN, nullptr); + malformedTree.setProperty("mix", positiveInfinity, nullptr); + malformedTree.setProperty("pingPong", quietNaN, nullptr); + malformedTree.setProperty("tempoSync", 1.0, nullptr); + malformedTree.setProperty("syncNoteL", quietNaN, nullptr); + malformedTree.setProperty("syncNoteR", positiveInfinity, nullptr); + malformedTree.setProperty("lpfFreq", quietNaN, nullptr); + malformedTree.setProperty("hpfFreq", negativeInfinity, nullptr); + malformedTree.setProperty("fbSaturation", positiveInfinity, nullptr); + malformedTree.setProperty("stereoWidth", quietNaN, nullptr); + malformedTree.setProperty("delayMode", quietNaN, nullptr); + malformedTree.setProperty("ducking", positiveInfinity, nullptr); + juce::MemoryBlock malformedState; + { + juce::MemoryOutputStream stream(malformedState, false); + malformedTree.writeToStream(stream); + } + + S13Delay malformedDelay(3.0f); + malformedDelay.setStateInformation( + malformedState.getData(), + static_cast<int>(malformedState.getSize())); + const auto finiteAtomic = [] ( + const std::atomic<float>& value) + { + return std::isfinite( + value.load(std::memory_order_relaxed)); + }; + const bool restoredStateSanitized = + finiteAtomic(malformedDelay.delayTimeL) + && finiteAtomic(malformedDelay.delayTimeR) + && finiteAtomic(malformedDelay.feedback) + && finiteAtomic(malformedDelay.crossFeed) + && finiteAtomic(malformedDelay.mix) + && finiteAtomic(malformedDelay.pingPong) + && finiteAtomic(malformedDelay.tempoSync) + && finiteAtomic(malformedDelay.syncNoteL) + && finiteAtomic(malformedDelay.syncNoteR) + && finiteAtomic(malformedDelay.lpfFreq) + && finiteAtomic(malformedDelay.hpfFreq) + && finiteAtomic(malformedDelay.fbSaturation) + && finiteAtomic(malformedDelay.stereoWidth) + && finiteAtomic(malformedDelay.delayMode) + && finiteAtomic(malformedDelay.ducking) + && std::abs(malformedDelay.delayMode.load()) <= 1.0e-7f + && std::abs(malformedDelay.syncNoteL.load()) <= 1.0e-7f + && std::abs(malformedDelay.syncNoteR.load()) <= 1.0e-7f + && malformedDelay.tempoSync.load() >= 0.5f; + + const float floatNaN = + std::numeric_limits<float>::quiet_NaN(); + const float floatInfinity = + std::numeric_limits<float>::infinity(); + malformedDelay.wowDepthMs.store(floatNaN); + malformedDelay.wowRateHz.store(floatInfinity); + malformedDelay.flutterDepthMs.store(floatNaN); + malformedDelay.flutterRateHz.store(floatInfinity); + malformedDelay.duckAttackMs.store(floatNaN); + malformedDelay.duckReleaseMs.store(floatInfinity); + malformedDelay.duckMaxReduction.store(floatNaN); + malformedDelay.topologyControl.store(floatInfinity); + malformedDelay.multiFeedback.store(floatNaN); + malformedDelay.dualTimeRatio.store(floatInfinity); + malformedDelay.dualFeedback.store(floatNaN); + malformedDelay.dualLowPassHz.store(floatInfinity); + malformedDelay.dualHighPassHz.store(floatNaN); + malformedDelay.dualSaturation.store(floatInfinity); + malformedDelay.dualModDepthMs.store(floatNaN); + malformedDelay.dualModRateHz.store(floatInfinity); + constexpr double malformedSampleRate = 48000.0; + constexpr int malformedBlockSize = 64; + malformedDelay.prepareToPlay( + malformedSampleRate, malformedBlockSize); + + // Re-poison every callback-visible group after prepare so processBlock, + // tail reporting, and state export each prove their own sanitization. + malformedDelay.delayTimeL.store(floatNaN); + malformedDelay.delayTimeR.store(floatInfinity); + malformedDelay.feedback.store(floatNaN); + malformedDelay.crossFeed.store(floatInfinity); + malformedDelay.mix.store(floatNaN); + malformedDelay.pingPong.store(floatInfinity); + malformedDelay.tempoSync.store(1.0f); + malformedDelay.syncNoteL.store(floatNaN); + malformedDelay.syncNoteR.store(floatInfinity); + malformedDelay.lpfFreq.store(floatNaN); + malformedDelay.hpfFreq.store(floatInfinity); + malformedDelay.fbSaturation.store(floatNaN); + malformedDelay.stereoWidth.store(floatInfinity); + malformedDelay.delayMode.store(floatNaN); + malformedDelay.ducking.store(floatInfinity); + malformedDelay.wowDepthMs.store(floatNaN); + malformedDelay.wowRateHz.store(floatInfinity); + malformedDelay.flutterDepthMs.store(floatNaN); + malformedDelay.flutterRateHz.store(floatInfinity); + malformedDelay.duckAttackMs.store(floatNaN); + malformedDelay.duckReleaseMs.store(floatInfinity); + malformedDelay.duckMaxReduction.store(floatNaN); + malformedDelay.topologyControl.store(floatInfinity); + malformedDelay.multiFeedback.store(floatNaN); + malformedDelay.dualTimeRatio.store(floatInfinity); + malformedDelay.dualFeedback.store(floatNaN); + malformedDelay.dualLowPassHz.store(floatInfinity); + malformedDelay.dualHighPassHz.store(floatNaN); + malformedDelay.dualSaturation.store(floatInfinity); + malformedDelay.dualModDepthMs.store(floatNaN); + malformedDelay.dualModRateHz.store(floatInfinity); + malformedDelay.inputSend.store(floatNaN); + malformedDelay.unityDry.store(floatInfinity); + + constexpr int malformedRenderSamples = 101376; + int malformedNonFiniteCount = 0; + float malformedOutputPeak = 0.0f; + juce::MidiBuffer malformedMidi; + int malformedCursor = 0; + while (malformedCursor < malformedRenderSamples) + { + const int blockSamples = juce::jmin( + malformedBlockSize, + malformedRenderSamples - malformedCursor); + juce::AudioBuffer<float> block(2, blockSamples); + for (int sample = 0; sample < blockSamples; ++sample) + { + const int absoluteSample = malformedCursor + sample; + const float input = + (absoluteSample == 0 ? 0.40f : 0.0f) + + 0.03f * static_cast<float>(std::sin( + juce::MathConstants<double>::twoPi + * 173.0 + * static_cast<double>(absoluteSample) + / malformedSampleRate)); + block.setSample(0, sample, input); + block.setSample(1, sample, -input * 0.71f); + } + malformedDelay.processBlock(block, malformedMidi); + for (int channel = 0; channel < 2; ++channel) + { + for (int sample = 0; sample < blockSamples; ++sample) + { + const float output = block.getSample(channel, sample); + if (! std::isfinite(output)) + ++malformedNonFiniteCount; + else + malformedOutputPeak = juce::jmax( + malformedOutputPeak, + std::abs(output)); + } + } + malformedCursor += blockSamples; + } + const double malformedTailSeconds = + malformedDelay.getTailLengthSeconds(); + juce::MemoryBlock sanitizedState; + malformedDelay.getStateInformation(sanitizedState); + const auto sanitizedTree = juce::ValueTree::readFromData( + sanitizedState.getData(), sanitizedState.getSize()); + bool exportedStateFinite = sanitizedTree.isValid(); + if (sanitizedTree.isValid()) + { + for (int propertyIndex = 0; + propertyIndex < sanitizedTree.getNumProperties(); + ++propertyIndex) + { + exportedStateFinite = exportedStateFinite + && std::isfinite(static_cast<double>( + sanitizedTree.getProperty( + sanitizedTree.getPropertyName(propertyIndex)))); + } + } + const bool malformedRuntimePassed = + restoredStateSanitized + && malformedNonFiniteCount == 0 + && malformedOutputPeak <= 2.0f + && std::isfinite(malformedTailSeconds) + && malformedTailSeconds > 0.0 + && malformedTailSeconds <= 60.0 + && exportedStateFinite + && std::abs(static_cast<double>( + sanitizedTree.getProperty("delayMode", -1.0))) + <= 1.0e-7; + + const auto makeLegacyModeState = [] (float mode) + { + juce::ValueTree tree("S13Delay"); + tree.setProperty("delayTimeL", 37.0, nullptr); + tree.setProperty("delayTimeR", 37.0, nullptr); + tree.setProperty("feedback", 0.55, nullptr); + tree.setProperty("crossFeed", 0.0, nullptr); + tree.setProperty("mix", 1.0, nullptr); + tree.setProperty("pingPong", 0.0, nullptr); + tree.setProperty("tempoSync", 0.0, nullptr); + tree.setProperty("syncNoteL", 2.0, nullptr); + tree.setProperty("syncNoteR", 2.0, nullptr); + tree.setProperty("lpfFreq", 9200.0, nullptr); + tree.setProperty("hpfFreq", 75.0, nullptr); + tree.setProperty("fbSaturation", 0.40, nullptr); + tree.setProperty("stereoWidth", 1.0, nullptr); + tree.setProperty("delayMode", mode, nullptr); + tree.setProperty("ducking", 0.0, nullptr); + juce::MemoryBlock state; + { + juce::MemoryOutputStream stream(state, false); + tree.writeToStream(stream); + } + return state; + }; + const auto renderLegacyMode = [&makeLegacyModeState] (float mode) + { + constexpr double sampleRate = 48000.0; + constexpr int blockSize = 64; + constexpr int totalSamples = 48000; + S13Delay delay(1.0f); + const auto state = makeLegacyModeState(mode); + delay.setStateInformation( + state.getData(), static_cast<int>(state.getSize())); + delay.prepareToPlay(sampleRate, blockSize); + juce::AudioBuffer<float> capture(2, totalSamples); + capture.clear(); + juce::MidiBuffer midi; + int cursor = 0; + while (cursor < totalSamples) + { + const int blockSamples = juce::jmin( + blockSize, totalSamples - cursor); + juce::AudioBuffer<float> block(2, blockSamples); + for (int sample = 0; sample < blockSamples; ++sample) + { + const int absoluteSample = cursor + sample; + const float marker = absoluteSample % 997 == 0 + ? 0.30f + : 0.0f; + const double time = + static_cast<double>(absoluteSample) / sampleRate; + block.setSample( + 0, + sample, + marker + + 0.07f * static_cast<float>(std::sin( + juce::MathConstants<double>::twoPi + * 211.0 * time))); + block.setSample( + 1, + sample, + -marker * 0.61f + + 0.06f * static_cast<float>(std::sin( + juce::MathConstants<double>::twoPi + * 337.0 * time + 0.37))); + } + delay.processBlock(block, midi); + capture.copyFrom( + 0, cursor, block, 0, 0, blockSamples); + capture.copyFrom( + 1, cursor, block, 1, 0, blockSamples); + cursor += blockSamples; + } + return capture; + }; + + S13Delay legacyFractionalStateDelay(1.0f); + const auto legacyFractionalState = + makeLegacyModeState(1.9f); + legacyFractionalStateDelay.setStateInformation( + legacyFractionalState.getData(), + static_cast<int>(legacyFractionalState.getSize())); + juce::MemoryBlock legacyFractionalSavedState; + legacyFractionalStateDelay.getStateInformation( + legacyFractionalSavedState); + const auto legacyFractionalSavedTree = + juce::ValueTree::readFromData( + legacyFractionalSavedState.getData(), + legacyFractionalSavedState.getSize()); + const auto fractionalCapture = renderLegacyMode(1.9f); + const auto tapeCapture = renderLegacyMode(1.0f); + const auto analogCapture = renderLegacyMode(2.0f); + float fractionalTapeMaximumDifference = 0.0f; + double fractionalAnalogDifferenceEnergy = 0.0; + int fractionalAnalogValueCount = 0; + for (int channel = 0; channel < 2; ++channel) + { + for (int sample = 0; + sample < fractionalCapture.getNumSamples(); + ++sample) + { + fractionalTapeMaximumDifference = juce::jmax( + fractionalTapeMaximumDifference, + std::abs( + fractionalCapture.getSample(channel, sample) + - tapeCapture.getSample(channel, sample))); + const double difference = static_cast<double>( + fractionalCapture.getSample(channel, sample)) + - static_cast<double>( + analogCapture.getSample(channel, sample)); + fractionalAnalogDifferenceEnergy += + difference * difference; + ++fractionalAnalogValueCount; + } + } + const double fractionalAnalogDifferenceRms = + fractionalAnalogValueCount > 0 + ? std::sqrt( + fractionalAnalogDifferenceEnergy + / static_cast<double>(fractionalAnalogValueCount)) + : 0.0; + const bool legacyFractionalModePassed = + std::abs( + legacyFractionalStateDelay.delayMode.load() - 1.9f) + <= 1.0e-6f + && legacyFractionalSavedTree.isValid() + && std::abs(static_cast<double>( + legacyFractionalSavedTree.getProperty("delayMode")) + - 1.9) + <= 1.0e-6 + && fractionalTapeMaximumDifference <= 1.0e-7f + && fractionalAnalogDifferenceRms > 1.0e-5; + + auto* value = new juce::DynamicObject(); + value->setProperty( + "restoredMalformedStateSanitized", + restoredStateSanitized); + value->setProperty( + "malformedNonFiniteCount", + malformedNonFiniteCount); + value->setProperty( + "malformedOutputPeak", malformedOutputPeak); + value->setProperty( + "malformedTailSeconds", malformedTailSeconds); + value->setProperty( + "exportedMalformedStateFinite", + exportedStateFinite); + value->setProperty( + "legacyFractionalSavedMode", + legacyFractionalSavedTree.getProperty( + "delayMode", -1.0)); + value->setProperty( + "fractionalTapeMaximumDifference", + fractionalTapeMaximumDifference); + value->setProperty( + "fractionalAnalogDifferenceRms", + fractionalAnalogDifferenceRms); + value->setProperty( + "malformedRuntimePassed", malformedRuntimePassed); + value->setProperty( + "legacyFractionalModePassed", + legacyFractionalModePassed); + value->setProperty( + "pass", + malformedRuntimePassed && legacyFractionalModePassed); + return juce::var(value); +} + +juce::Array<juce::var> NAMDelayRegression::runLifecycleChecks() +{ + juce::Array<juce::var> checks; + + const auto delayPlayHeadLifecycleProbe = + runDelayPlayHeadLifecycleProbe(); + addCheck( + checks, + "delay_playhead_access_is_callback_only_and_sync_head_snaps", + delayPlayHeadLifecycleProbe.getProperty("pass", false) + ? "pass" + : "fail", + "Delay and NAM Rack lifecycle/tail APIs must never query the host playhead. A valid BPM is published only by processBlock, unknown-tempo tail reporting is conservative, and the first empty-history callback must snap sync heads to the actual tempo before accepting its transient.", + delayPlayHeadLifecycleProbe); + const auto delayTailLifecycleProbe = + runDelayTailLifecycleProbe(); + addCheck( + checks, + "delay_tail_input_send_and_reset_are_isolated", + delayTailLifecycleProbe.getProperty("pass", false) + ? "pass" + : "fail", + "Delay inputSend=0 must pass current dry input without recording a new echo, and resetTailState must prevent pre-reset ring contents from resurfacing.", + delayTailLifecycleProbe); + const auto delayHighFeedbackDecayProbe = + runDelayHighFeedbackDecayProbe(); + addCheck( + checks, + "delay_high_feedback_character_decay_is_bounded", + delayHighFeedbackDecayProbe.getProperty( + "pass", false) + ? "pass" + : "fail", + "At exact 44.1 kHz/16-sample callbacks, deterministic strums followed by silence must remain finite and bounded and decay without window-to-window growth in all five derived Digital, Tape, Analog, Multi, and Dual modes at maximum visible Feedback and Modulation.", + delayHighFeedbackDecayProbe); + const auto delayFractionalResetProbe = + runDelayFractionalResetProbe(); + addCheck( + checks, + "delay_fractional_reset_requires_complete_interpolation_history", + delayFractionalResetProbe.getProperty( + "pass", false) + ? "pass" + : "fail", + "After a logical reset, a 44.5-sample linear-interpolation tap must stay muted until both source samples are post-reset; using floor(delay) for the history gate would expose one stale pre-reset marker sample.", + delayFractionalResetProbe); + const auto standaloneDelayMalformedAndLegacyModeProbe = + runStandaloneDelayMalformedAndLegacyModeProbe(); + addCheck( + checks, + "standalone_delay_malformed_state_and_legacy_fractional_mode", + standaloneDelayMalformedAndLegacyModeProbe.getProperty( + "pass", false) + ? "pass" + : "fail", + "Standalone Delay must sanitize malformed persisted and live NaN/Inf parameters across prepare, tempo-sync processing, tail reporting and state export, while retaining the historical fractional-mode contract in which 1.9 remains serialized as 1.9 but processes exactly as truncated Tape rather than rounded Analog.", + standaloneDelayMalformedAndLegacyModeProbe); + + return checks; +} diff --git a/Source/NAMDelayRegressionRackTail.cpp b/Source/NAMDelayRegressionRackTail.cpp new file mode 100644 index 0000000..159e9a9 --- /dev/null +++ b/Source/NAMDelayRegressionRackTail.cpp @@ -0,0 +1,1188 @@ +#include "NAMDelayRegression.h" +#include "BuiltInEffects2.h" +#include "TrackProcessor.h" + +#include <algorithm> +#include <array> +#include <atomic> +#include <cmath> +#include <cstdint> +#include <limits> +#include <memory> +#include <numeric> +#include <utility> +#include <vector> + +juce::var NAMDelayRegression::runRackDelaySpilloverProbe() +{ + S13NAMRack spillRack; + S13NAMRack referenceRack; + spillRack.prepareToPlay( + fixtureSampleRate, fixtureBlockSize); + referenceRack.prepareToPlay( + fixtureSampleRate, fixtureBlockSize); + configureNeutralRack(spillRack); + configureNeutralRack(referenceRack); + + spillRack.delayEnabled.store(1.0f); + spillRack.delayMix.store(0.8f); + spillRack.delayTimeMs.store(20.0f); + spillRack.delayFeedback.store(0.0f); + spillRack.delayMod.store(0.0f); + spillRack.delayDucker.store(0.0f); + spillRack.delayMode.store(0.0f); + spillRack.delayPingPong.store(0.0f); + spillRack.delayTempoSync.store(0.0f); + + juce::MidiBuffer midi; + for (int warmup = 0; warmup < 64; ++warmup) + { + juce::AudioBuffer<float> spillBlock( + 2, fixtureBlockSize); + juce::AudioBuffer<float> referenceBlock( + 2, fixtureBlockSize); + spillBlock.clear(); + referenceBlock.clear(); + spillRack.processBlock(spillBlock, midi); + referenceRack.processBlock(referenceBlock, midi); + } + + juce::AudioBuffer<float> spillImpulse( + 2, fixtureBlockSize); + juce::AudioBuffer<float> referenceImpulse( + 2, fixtureBlockSize); + spillImpulse.clear(); + referenceImpulse.clear(); + spillImpulse.setSample(0, 0, 0.65f); + spillImpulse.setSample(1, 0, -0.45f); + referenceImpulse.makeCopyOf(spillImpulse, true); + spillRack.processBlock(spillImpulse, midi); + referenceRack.processBlock(referenceImpulse, midi); + spillRack.delayEnabled.store(0.0f); + + float spillPeak = 0.0f; + float lateDifferencePeak = 0.0f; + constexpr int bypassBlocks = 6; + for (int blockIndex = 0; + blockIndex < bypassBlocks; + ++blockIndex) + { + juce::AudioBuffer<float> spillBlock( + 2, fixtureBlockSize); + juce::AudioBuffer<float> referenceBlock( + 2, fixtureBlockSize); + for (int sample = 0; + sample < fixtureBlockSize; + ++sample) + { + const int absoluteSample = + blockIndex * fixtureBlockSize + sample; + const float marker = + 0.03f * std::sin( + juce::MathConstants<float>::twoPi + * 617.0f + * static_cast<float>(absoluteSample) + / static_cast<float>(fixtureSampleRate)); + spillBlock.setSample(0, sample, marker); + spillBlock.setSample(1, sample, -marker * 0.7f); + referenceBlock.setSample(0, sample, marker); + referenceBlock.setSample(1, sample, -marker * 0.7f); + } + + spillRack.processBlock(spillBlock, midi); + referenceRack.processBlock(referenceBlock, midi); + for (int channel = 0; channel < 2; ++channel) + { + for (int sample = 0; + sample < fixtureBlockSize; + ++sample) + { + const float difference = std::abs( + spillBlock.getSample(channel, sample) + - referenceBlock.getSample(channel, sample)); + if (blockIndex < 2) + spillPeak = juce::jmax( + spillPeak, difference); + if (blockIndex >= 3) + lateDifferencePeak = juce::jmax( + lateDifferencePeak, difference); + } + } + } + + auto* value = new juce::DynamicObject(); + value->setProperty("spillPeak", spillPeak); + value->setProperty( + "lateDifferencePeak", lateDifferencePeak); + value->setProperty("bypassBlocks", bypassBlocks); + value->setProperty( + "pass", + spillPeak > 1.0e-4f + && lateDifferencePeak <= 1.0e-6f); + return juce::var(value); +} + +juce::var NAMDelayRegression::runRackDelayV10FrozenTailAndBudgetProbe() +{ + const auto configureFrozenDualRack = [&] ( + S13NAMRack& rack) + { + configureNeutralRack(rack); + rack.instrumentProfile.store( + static_cast<float>( + S13NAMRack::guitarInstrumentProfile)); + rack.delayEnabled.store(1.0f); + rack.delayTimeMs.store(40.0f); + rack.delayFeedback.store(0.55f); + rack.delayMix.store(0.80f); + rack.delayMod.store(0.72f); + rack.delayDucker.store(0.30f); + rack.delayMode.store(static_cast<float>( + S13NAMRack::dualDelayMode)); + rack.delayPingPong.store(1.0f); + rack.delayTempoSync.store(0.0f); + rack.prepareToPlay( + fixtureSampleRate, fixtureBlockSize); + }; + + S13NAMRack frozenReferenceRack; + S13NAMRack frozenEditedRack; + configureFrozenDualRack(frozenReferenceRack); + configureFrozenDualRack(frozenEditedRack); + juce::MidiBuffer frozenMidi; + juce::AudioBuffer<float> referenceImpulse( + 2, fixtureBlockSize); + juce::AudioBuffer<float> editedImpulse( + 2, fixtureBlockSize); + referenceImpulse.clear(); + editedImpulse.clear(); + referenceImpulse.setSample(0, 0, 0.72f); + referenceImpulse.setSample(1, 9, -0.53f); + editedImpulse.makeCopyOf(referenceImpulse, true); + frozenReferenceRack.processDelayStage( + referenceImpulse, frozenMidi); + frozenEditedRack.processDelayStage( + editedImpulse, frozenMidi); + frozenReferenceRack.delayEnabled.store(0.0f); + frozenEditedRack.delayEnabled.store(0.0f); + + // Every visible source feeding DelayMacroState is deliberately changed + // after bypass. A partial freeze would now retarget at least one delay + // history, feedback/filter law, topology, sync route, or dry/wet law. + frozenEditedRack.instrumentProfile.store( + static_cast<float>(S13NAMRack::bassInstrumentProfile)); + frozenEditedRack.delayTimeMs.store(777.0f); + frozenEditedRack.delayFeedback.store(0.05f); + frozenEditedRack.delayMix.store(0.20f); + frozenEditedRack.delayMod.store(0.02f); + frozenEditedRack.delayDucker.store(0.90f); + frozenEditedRack.delayMode.store(static_cast<float>( + S13NAMRack::multiDelayMode)); + frozenEditedRack.delayPingPong.store(0.0f); + frozenEditedRack.delayTempoSync.store(1.0f); + + const auto frozenInitialTailBudget = std::max( + frozenReferenceRack.delayTailSamplesRemaining, + frozenEditedRack.delayTailSamplesRemaining); + const int drainBlocks = juce::jmax( + 1, + static_cast<int>( + (frozenInitialTailBudget + + static_cast<std::int64_t>(fixtureBlockSize) - 1) + / static_cast<std::int64_t>(fixtureBlockSize)) + + 1); + double frozenTailEnergy = 0.0; + float frozenTailMaximumDifference = 0.0f; + int frozenTailNonFiniteCount = 0; + for (int blockIndex = 0; + blockIndex < drainBlocks; + ++blockIndex) + { + juce::AudioBuffer<float> referenceBlock( + 2, fixtureBlockSize); + juce::AudioBuffer<float> editedBlock( + 2, fixtureBlockSize); + referenceBlock.clear(); + editedBlock.clear(); + frozenReferenceRack.processDelayStage( + referenceBlock, frozenMidi); + frozenEditedRack.processDelayStage( + editedBlock, frozenMidi); + for (int channel = 0; channel < 2; ++channel) + { + for (int sample = 0; + sample < fixtureBlockSize; + ++sample) + { + const float reference = + referenceBlock.getSample(channel, sample); + const float edited = + editedBlock.getSample(channel, sample); + if (! std::isfinite(reference) + || ! std::isfinite(edited)) + { + ++frozenTailNonFiniteCount; + continue; + } + frozenTailEnergy += + static_cast<double>(reference) + * static_cast<double>(reference); + frozenTailMaximumDifference = juce::jmax( + frozenTailMaximumDifference, + std::abs(reference - edited)); + } + } + } + const bool frozenTailPassed = + frozenTailNonFiniteCount == 0 + && frozenTailEnergy > 1.0e-5 + && frozenTailMaximumDifference <= 2.0e-6f + && frozenReferenceRack.delayTailSamplesRemaining == 0 + && frozenEditedRack.delayTailSamplesRemaining == 0 + && frozenReferenceRack.getTailLengthSeconds() <= 1.0e-9 + && frozenEditedRack.getTailLengthSeconds() <= 1.0e-9 + && ! frozenReferenceRack.delayTailMacroValid + && ! frozenEditedRack.delayTailMacroValid; + + struct DownwardBudgetResult + { + std::int64_t initialBudget = 0; + std::int64_t initialReportedBudget = 0; + std::int64_t initialPublicBudget = 0; + std::int64_t elapsedPriorBudget = 0; + std::int64_t elapsedPriorReportedBudget = 0; + std::int64_t loweredBudget = 0; + std::int64_t lowerReportedBudget = 0; + std::int64_t lowerPublicBudget = 0; + std::int64_t bypassBudget = 0; + std::int64_t bypassPublicBudget = 0; + std::int64_t expectedBypassBudget = 0; + bool cachedLowerMacro = false; + bool pass = false; + }; + const auto runDownwardBudgetCase = [&] ( + float initialTimeMs, + float loweredTimeMs, + float initialFeedback, + float loweredFeedback, + float initialMix, + float loweredMix) + { + S13NAMRack rack; + configureNeutralRack(rack); + rack.instrumentProfile.store(static_cast<float>( + S13NAMRack::guitarInstrumentProfile)); + rack.delayEnabled.store(1.0f); + rack.delayMix.store(initialMix); + rack.delayMod.store(0.0f); + rack.delayDucker.store(0.0f); + rack.delayMode.store(static_cast<float>( + S13NAMRack::digitalDelayMode)); + rack.delayPingPong.store(0.0f); + rack.delayTempoSync.store(0.0f); + rack.delayTimeMs.store(initialTimeMs); + rack.delayFeedback.store(initialFeedback); + rack.prepareToPlay( + fixtureSampleRate, fixtureBlockSize); + + juce::MidiBuffer midi; + juce::AudioBuffer<float> activeBlock( + 2, fixtureBlockSize); + activeBlock.clear(); + activeBlock.setSample(0, 0, 0.61f); + activeBlock.setSample(1, 5, -0.44f); + rack.processDelayStage(activeBlock, midi); + DownwardBudgetResult result; + result.initialBudget = + rack.delayTailSamplesRemaining; + result.initialReportedBudget = + static_cast<std::int64_t>(std::ceil( + rack.rackDelay.getTailLengthSeconds() + * fixtureSampleRate)); + result.initialPublicBudget = + static_cast<std::int64_t>(std::ceil( + rack.getTailLengthSeconds() + * fixtureSampleRate)); + + rack.delayTimeMs.store(loweredTimeMs); + rack.delayFeedback.store(loweredFeedback); + rack.delayMix.store(loweredMix); + activeBlock.clear(); + rack.processDelayStage(activeBlock, midi); + result.loweredBudget = + rack.delayTailSamplesRemaining; + result.lowerReportedBudget = + static_cast<std::int64_t>(std::ceil( + rack.rackDelay.getTailLengthSeconds() + * fixtureSampleRate)); + result.lowerPublicBudget = + static_cast<std::int64_t>(std::ceil( + rack.getTailLengthSeconds() + * fixtureSampleRate)); + const auto loweredMacro = + S13NAMRack::resolveDelayMacroState( + loweredTimeMs, + loweredFeedback, + loweredMix, + 0.0f, + 0.0f, + static_cast<float>( + S13NAMRack::digitalDelayMode), + 0.0f, + 0.0f, + S13NAMRack::guitarInstrumentProfile); + result.cachedLowerMacro = + rack.delayTailMacroValid + && std::abs( + rack.delayTailMacro.timeMsL + - loweredMacro.timeMsL) <= 1.0e-6f + && std::abs( + rack.delayTailMacro.feedbackGain + - loweredMacro.feedbackGain) <= 1.0e-6f + && std::abs( + rack.delayTailMacro.mix + - loweredMacro.mix) <= 1.0e-6f; + + rack.delayEnabled.store(0.0f); + juce::AudioBuffer<float> bypassBlock( + 2, fixtureBlockSize); + bypassBlock.clear(); + rack.processDelayStage(bypassBlock, midi); + result.bypassBudget = + rack.delayTailSamplesRemaining; + result.bypassPublicBudget = + static_cast<std::int64_t>(std::ceil( + rack.getTailLengthSeconds() + * fixtureSampleRate)); + result.elapsedPriorBudget = + juce::jmax<std::int64_t>( + 0, + result.initialBudget + - static_cast<std::int64_t>( + fixtureBlockSize)); + result.elapsedPriorReportedBudget = + juce::jmax<std::int64_t>( + 0, + result.initialReportedBudget + - static_cast<std::int64_t>( + fixtureBlockSize)); + result.expectedBypassBudget = + juce::jmax<std::int64_t>( + 0, + result.loweredBudget + - static_cast<std::int64_t>( + fixtureBlockSize)); + result.pass = + result.initialBudget + > static_cast<std::int64_t>(fixtureBlockSize) + && result.initialReportedBudget + > static_cast<std::int64_t>(fixtureBlockSize) + && result.lowerReportedBudget + 2 + >= result.elapsedPriorReportedBudget + && result.loweredBudget + >= result.elapsedPriorBudget + && result.initialPublicBudget + 2 + >= result.initialBudget + && result.lowerPublicBudget + 2 + >= result.loweredBudget + && result.bypassBudget + == result.expectedBypassBudget + && result.bypassPublicBudget + 2 + >= result.bypassBudget + && result.cachedLowerMacro; + return result; + }; + const auto downwardFeedbackBudget = + runDownwardBudgetCase( + 40.0f, 40.0f, + 0.85f, 0.0f, + 0.75f, 0.75f); + const auto downwardTimeBudget = + runDownwardBudgetCase( + 2000.0f, 1.0f, + 0.0f, 0.0f, + 0.75f, 0.75f); + const auto downwardMixBudget = + runDownwardBudgetCase( + 180.0f, 180.0f, + 0.65f, 0.65f, + 0.90f, 0.05f); + const bool downwardAutomationBudgetPassed = + downwardFeedbackBudget.pass + && downwardTimeBudget.pass + && downwardMixBudget.pass; + + S13NAMRack sendReleaseHorizonRack; + configureNeutralRack(sendReleaseHorizonRack); + sendReleaseHorizonRack.delayEnabled.store(1.0f); + sendReleaseHorizonRack.delayMix.store(1.0f); + sendReleaseHorizonRack.delayTimeMs.store(2000.0f); + sendReleaseHorizonRack.delayFeedback.store(0.0f); + sendReleaseHorizonRack.delayMod.store(0.0f); + sendReleaseHorizonRack.delayDucker.store(0.0f); + sendReleaseHorizonRack.delayMode.store(static_cast<float>( + S13NAMRack::digitalDelayMode)); + sendReleaseHorizonRack.delayPingPong.store(0.0f); + sendReleaseHorizonRack.delayTempoSync.store(0.0f); + sendReleaseHorizonRack.prepareToPlay( + fixtureSampleRate, fixtureBlockSize); + juce::AudioBuffer<float> horizonActiveBlock( + 2, fixtureBlockSize); + for (int channel = 0; channel < 2; ++channel) + horizonActiveBlock.clear(channel, 0, fixtureBlockSize); + for (int sample = 0; + sample < fixtureBlockSize; + ++sample) + { + horizonActiveBlock.setSample(0, sample, 0.50f); + horizonActiveBlock.setSample(1, sample, -0.35f); + } + sendReleaseHorizonRack.processDelayStage( + horizonActiveBlock, frozenMidi); + const auto sendReleaseInitialBudget = + sendReleaseHorizonRack.delayTailSamplesRemaining; + const auto minimumSendReleaseBudget = + static_cast<std::int64_t>(std::ceil( + fixtureSampleRate * 2.020)); + sendReleaseHorizonRack.delayEnabled.store(0.0f); + const int releaseObservationStart = + static_cast<int>(std::ceil( + fixtureSampleRate * 2.008)); + const int releaseObservationEnd = + static_cast<int>(std::ceil( + fixtureSampleRate * 2.012)); + float sendReleaseLateEchoPeak = 0.0f; + int releaseCursor = 0; + while (releaseCursor < releaseObservationEnd) + { + juce::AudioBuffer<float> horizonBlock( + 2, fixtureBlockSize); + horizonBlock.clear(); + sendReleaseHorizonRack.processDelayStage( + horizonBlock, frozenMidi); + for (int sample = 0; + sample < fixtureBlockSize; + ++sample) + { + const int absoluteSample = releaseCursor + sample; + if (absoluteSample < releaseObservationStart + || absoluteSample >= releaseObservationEnd) + { + continue; + } + sendReleaseLateEchoPeak = juce::jmax( + sendReleaseLateEchoPeak, + juce::jmax( + std::abs(horizonBlock.getSample(0, sample)), + std::abs(horizonBlock.getSample(1, sample)))); + } + releaseCursor += fixtureBlockSize; + } + const auto sendReleaseRemainingBudget = + sendReleaseHorizonRack.delayTailSamplesRemaining; + const auto expectedSendReleaseRemainingBudget = + juce::jmax<std::int64_t>( + 0, + sendReleaseInitialBudget + - static_cast<std::int64_t>(releaseCursor)); + const bool sendReleaseHorizonPassed = + sendReleaseInitialBudget >= minimumSendReleaseBudget + && sendReleaseRemainingBudget + == expectedSendReleaseRemainingBudget + && sendReleaseLateEchoPeak > 1.0e-4f; + + S13NAMRack rapidRetargetRack; + configureNeutralRack(rapidRetargetRack); + rapidRetargetRack.delayEnabled.store(1.0f); + rapidRetargetRack.delayMix.store(1.0f); + rapidRetargetRack.delayTimeMs.store(100.0f); + rapidRetargetRack.delayFeedback.store(0.0f); + rapidRetargetRack.delayMod.store(0.0f); + rapidRetargetRack.delayDucker.store(0.0f); + rapidRetargetRack.delayMode.store(static_cast<float>( + S13NAMRack::digitalDelayMode)); + rapidRetargetRack.delayPingPong.store(0.0f); + rapidRetargetRack.delayTempoSync.store(0.0f); + rapidRetargetRack.prepareToPlay( + fixtureSampleRate, fixtureBlockSize); + juce::AudioBuffer<float> retargetBlock( + 2, fixtureBlockSize); + retargetBlock.clear(); + retargetBlock.setSample(0, 0, 0.5f); + rapidRetargetRack.processDelayStage( + retargetBlock, frozenMidi); + rapidRetargetRack.delayTimeMs.store(1000.0f); + retargetBlock.clear(); + rapidRetargetRack.processDelayStage( + retargetBlock, frozenMidi); + rapidRetargetRack.delayTimeMs.store(1500.0f); + retargetBlock.clear(); + rapidRetargetRack.processDelayStage( + retargetBlock, frozenMidi); + const bool rapidRetargetStatesArmed = + rapidRetargetRack.rackDelay.delayTimeMorphActive + && rapidRetargetRack.rackDelay.delayTimeChangePending; + const auto rapidRetargetBudget = + rapidRetargetRack.delayTailSamplesRemaining; + const auto minimumRapidRetargetBudget = + static_cast<std::int64_t>(std::ceil( + fixtureSampleRate * (1.5 + 0.03 + 0.03 + 0.02))); + rapidRetargetRack.delayEnabled.store(0.0f); + retargetBlock.clear(); + rapidRetargetRack.processDelayStage( + retargetBlock, frozenMidi); + const auto rapidRetargetBypassBudget = + rapidRetargetRack.delayTailSamplesRemaining; + const bool rapidRetargetTailPassed = + rapidRetargetStatesArmed + && rapidRetargetBudget >= minimumRapidRetargetBudget + && rapidRetargetBypassBudget + == rapidRetargetBudget + - static_cast<std::int64_t>(fixtureBlockSize); + + const auto budgetToVar = [] ( + const DownwardBudgetResult& result) + { + auto* value = new juce::DynamicObject(); + value->setProperty( + "initialBudgetSamples", + static_cast<juce::int64>(result.initialBudget)); + value->setProperty( + "initialReportedBudgetSamples", + static_cast<juce::int64>( + result.initialReportedBudget)); + value->setProperty( + "initialPublicBudgetSamples", + static_cast<juce::int64>( + result.initialPublicBudget)); + value->setProperty( + "elapsedPriorBudgetSamples", + static_cast<juce::int64>( + result.elapsedPriorBudget)); + value->setProperty( + "elapsedPriorReportedBudgetSamples", + static_cast<juce::int64>( + result.elapsedPriorReportedBudget)); + value->setProperty( + "loweredBudgetSamples", + static_cast<juce::int64>(result.loweredBudget)); + value->setProperty( + "lowerReportedBudgetSamples", + static_cast<juce::int64>(result.lowerReportedBudget)); + value->setProperty( + "lowerPublicBudgetSamples", + static_cast<juce::int64>(result.lowerPublicBudget)); + value->setProperty( + "firstBypassBudgetSamples", + static_cast<juce::int64>(result.bypassBudget)); + value->setProperty( + "firstBypassPublicBudgetSamples", + static_cast<juce::int64>( + result.bypassPublicBudget)); + value->setProperty( + "expectedFirstBypassBudgetSamples", + static_cast<juce::int64>( + result.expectedBypassBudget)); + value->setProperty( + "cachedLowerMacro", result.cachedLowerMacro); + value->setProperty("pass", result.pass); + return juce::var(value); + }; + + auto* value = new juce::DynamicObject(); + value->setProperty( + "frozenTailEnergy", frozenTailEnergy); + value->setProperty( + "frozenInitialTailBudgetSamples", + static_cast<juce::int64>(frozenInitialTailBudget)); + value->setProperty( + "frozenTailMaximumDifference", + frozenTailMaximumDifference); + value->setProperty( + "frozenTailNonFiniteCount", + frozenTailNonFiniteCount); + value->setProperty( + "frozenTailPassed", frozenTailPassed); + value->setProperty( + "downwardFeedback", budgetToVar( + downwardFeedbackBudget)); + value->setProperty( + "downwardTime", budgetToVar( + downwardTimeBudget)); + value->setProperty( + "downwardMix", budgetToVar( + downwardMixBudget)); + value->setProperty( + "downwardAutomationBudgetPassed", + downwardAutomationBudgetPassed); + value->setProperty( + "sendReleaseInitialBudgetSamples", + static_cast<juce::int64>(sendReleaseInitialBudget)); + value->setProperty( + "minimumSendReleaseBudgetSamples", + static_cast<juce::int64>(minimumSendReleaseBudget)); + value->setProperty( + "sendReleaseRemainingBudgetSamples", + static_cast<juce::int64>(sendReleaseRemainingBudget)); + value->setProperty( + "expectedSendReleaseRemainingBudgetSamples", + static_cast<juce::int64>(expectedSendReleaseRemainingBudget)); + value->setProperty( + "sendReleaseLateEchoPeak", sendReleaseLateEchoPeak); + value->setProperty( + "sendReleaseHorizonPassed", sendReleaseHorizonPassed); + value->setProperty( + "rapidRetargetBudgetSamples", + static_cast<juce::int64>(rapidRetargetBudget)); + value->setProperty( + "minimumRapidRetargetBudgetSamples", + static_cast<juce::int64>(minimumRapidRetargetBudget)); + value->setProperty( + "rapidRetargetFirstBypassBudgetSamples", + static_cast<juce::int64>(rapidRetargetBypassBudget)); + value->setProperty( + "rapidRetargetStatesArmed", rapidRetargetStatesArmed); + value->setProperty( + "rapidRetargetTailPassed", rapidRetargetTailPassed); + value->setProperty( + "pass", + frozenTailPassed + && downwardAutomationBudgetPassed + && sendReleaseHorizonPassed + && rapidRetargetTailPassed); + return juce::var(value); +} + +juce::var NAMDelayRegression::runRackMinimumDelayBypassProbe() +{ + constexpr float minimumDelayMs = 1.0f; + constexpr float delayWetMix = 0.80f; + constexpr float constantInput = 0.50f; + constexpr int warmupBlocks = 64; + constexpr int observationBlocks = 4; + + auto configureMinimumDelay = + [&] (S13NAMRack& rack) + { + configureNeutralRack(rack); + rack.delayEnabled.store(1.0f); + rack.delayMix.store(delayWetMix); + rack.delayTimeMs.store(minimumDelayMs); + rack.delayFeedback.store(0.0f); + rack.delayMod.store(0.0f); + rack.delayDucker.store(0.0f); + rack.delayMode.store(0.0f); + rack.delayPingPong.store(0.0f); + rack.delayTempoSync.store(0.0f); + }; + auto prepareRack = [&] ( + S13NAMRack& rack, + bool withDelay) + { + if (withDelay) + configureMinimumDelay(rack); + else + configureNeutralRack(rack); + rack.prepareToPlay( + fixtureSampleRate, fixtureBlockSize); + }; + auto warmSilence = [&] ( + S13NAMRack& rack, + juce::MidiBuffer& midi) + { + for (int blockIndex = 0; + blockIndex < warmupBlocks; + ++blockIndex) + { + juce::AudioBuffer<float> block( + 2, fixtureBlockSize); + block.clear(); + rack.processBlock(block, midi); + } + }; + + S13NAMRack fadeRack; + S13NAMRack fadeReferenceRack; + prepareRack(fadeRack, true); + prepareRack(fadeReferenceRack, false); + juce::MidiBuffer midi; + warmSilence(fadeRack, midi); + warmSilence(fadeReferenceRack, midi); + fadeRack.delayEnabled.store(0.0f); + + const int observationSamples = + observationBlocks * fixtureBlockSize; + juce::AudioBuffer<float> fadeCapture( + 2, observationSamples); + juce::AudioBuffer<float> fadeReferenceCapture( + 2, observationSamples); + fadeCapture.clear(); + fadeReferenceCapture.clear(); + for (int blockIndex = 0; + blockIndex < observationBlocks; + ++blockIndex) + { + juce::AudioBuffer<float> block( + 2, fixtureBlockSize); + juce::AudioBuffer<float> referenceBlock( + 2, fixtureBlockSize); + for (int sample = 0; + sample < fixtureBlockSize; + ++sample) + { + block.setSample(0, sample, constantInput); + block.setSample(1, sample, -constantInput * 0.70f); + referenceBlock.setSample( + 0, sample, constantInput); + referenceBlock.setSample( + 1, sample, -constantInput * 0.70f); + } + fadeRack.processBlock(block, midi); + fadeReferenceRack.processBlock( + referenceBlock, midi); + fadeCapture.copyFrom( + 0, + blockIndex * fixtureBlockSize, + block, + 0, + 0, + fixtureBlockSize); + fadeCapture.copyFrom( + 1, + blockIndex * fixtureBlockSize, + block, + 1, + 0, + fixtureBlockSize); + fadeReferenceCapture.copyFrom( + 0, + blockIndex * fixtureBlockSize, + referenceBlock, + 0, + 0, + fixtureBlockSize); + fadeReferenceCapture.copyFrom( + 1, + blockIndex * fixtureBlockSize, + referenceBlock, + 1, + 0, + fixtureBlockSize); + } + + float maximumRatioStep = 0.0f; + float firstRatio = 0.0f; + float tenMillisecondRatio = 0.0f; + float thirtyMillisecondError = 1.0f; + int firstMeasuredSample = -1; + int firstUnitySample = -1; + float previousRatio = 0.0f; + bool havePreviousRatio = false; + const int tenMillisecondSample = + juce::roundToInt( + static_cast<float>(fixtureSampleRate) * 0.010f); + const int thirtyMillisecondSample = + juce::roundToInt( + static_cast<float>(fixtureSampleRate) * 0.030f); + for (int sample = 0; + sample < observationSamples; + ++sample) + { + const float reference = + fadeReferenceCapture.getSample(0, sample); + if (std::abs(reference) <= 0.10f) + continue; + + const float ratio = + fadeCapture.getSample(0, sample) / reference; + if (firstMeasuredSample < 0) + { + firstMeasuredSample = sample; + firstRatio = ratio; + } + if (havePreviousRatio) + { + maximumRatioStep = juce::jmax( + maximumRatioStep, + std::abs(ratio - previousRatio)); + } + previousRatio = ratio; + havePreviousRatio = true; + if (sample == tenMillisecondSample) + tenMillisecondRatio = ratio; + if (sample == thirtyMillisecondSample) + { + thirtyMillisecondError = + std::abs(ratio - 1.0f); + } + if (firstUnitySample < 0 + && ratio >= 0.9999f) + { + firstUnitySample = sample; + } + } + + S13NAMRack bypassMarkerRack; + S13NAMRack bypassSilenceRack; + prepareRack(bypassMarkerRack, true); + prepareRack(bypassSilenceRack, true); + warmSilence(bypassMarkerRack, midi); + warmSilence(bypassSilenceRack, midi); + bypassMarkerRack.delayEnabled.store(0.0f); + bypassSilenceRack.delayEnabled.store(0.0f); + + juce::AudioBuffer<float> markerCapture( + 2, observationSamples); + juce::AudioBuffer<float> silenceCapture( + 2, observationSamples); + markerCapture.clear(); + silenceCapture.clear(); + for (int blockIndex = 0; + blockIndex < observationBlocks; + ++blockIndex) + { + juce::AudioBuffer<float> markerBlock( + 2, fixtureBlockSize); + juce::AudioBuffer<float> silenceBlock( + 2, fixtureBlockSize); + markerBlock.clear(); + silenceBlock.clear(); + if (blockIndex == 0) + { + markerBlock.setSample(0, 0, 0.64f); + markerBlock.setSample(1, 0, -0.41f); + } + bypassMarkerRack.processBlock(markerBlock, midi); + bypassSilenceRack.processBlock( + silenceBlock, midi); + markerCapture.copyFrom( + 0, + blockIndex * fixtureBlockSize, + markerBlock, + 0, + 0, + fixtureBlockSize); + markerCapture.copyFrom( + 1, + blockIndex * fixtureBlockSize, + markerBlock, + 1, + 0, + fixtureBlockSize); + silenceCapture.copyFrom( + 0, + blockIndex * fixtureBlockSize, + silenceBlock, + 0, + 0, + fixtureBlockSize); + silenceCapture.copyFrom( + 1, + blockIndex * fixtureBlockSize, + silenceBlock, + 1, + 0, + fixtureBlockSize); + } + + int directImpulseSample = -1; + float directImpulsePeak = 0.0f; + for (int sample = 0; + sample < observationSamples; + ++sample) + { + const float difference = std::abs( + markerCapture.getSample(0, sample) + - silenceCapture.getSample(0, sample)); + if (difference > directImpulsePeak) + { + directImpulsePeak = difference; + directImpulseSample = sample; + } + } + + float rejectedInputEchoPeak = 0.0f; + for (int channel = 0; channel < 2; ++channel) + { + for (int sample = 0; + sample < observationSamples; + ++sample) + { + if (std::abs(sample - directImpulseSample) <= 2) + continue; + rejectedInputEchoPeak = juce::jmax( + rejectedInputEchoPeak, + std::abs( + markerCapture.getSample( + channel, sample) + - silenceCapture.getSample( + channel, sample))); + } + } + + const int minimumFadeSamples = juce::roundToInt( + static_cast<float>(fixtureSampleRate) * 0.019f); + const bool pass = + firstMeasuredSample >= 0 + && firstRatio > 0.15f + && firstRatio < 0.35f + && tenMillisecondRatio > 0.48f + && tenMillisecondRatio < 0.72f + && firstUnitySample >= minimumFadeSamples + && maximumRatioStep < 0.005f + && thirtyMillisecondError <= 1.0e-6f + && directImpulsePeak > 0.05f + && rejectedInputEchoPeak <= 1.0e-7f; + + auto* value = new juce::DynamicObject(); + value->setProperty( + "minimumDelayMs", minimumDelayMs); + value->setProperty( + "feedback", 0.0); + value->setProperty( + "reportedRackLatencySamples", + fadeRack.getLatencySamples()); + value->setProperty( + "firstMeasuredSample", firstMeasuredSample); + value->setProperty( + "firstDryRatio", firstRatio); + value->setProperty( + "tenMillisecondDryRatio", + tenMillisecondRatio); + value->setProperty( + "firstUnityDrySample", firstUnitySample); + value->setProperty( + "minimumAcceptedFadeSamples", + minimumFadeSamples); + value->setProperty( + "maximumAdjacentDryRatioStep", + maximumRatioStep); + value->setProperty( + "thirtyMillisecondDryError", + thirtyMillisecondError); + value->setProperty( + "bypassDirectImpulseSample", + directImpulseSample); + value->setProperty( + "bypassDirectImpulsePeak", + directImpulsePeak); + value->setProperty( + "rejectedBypassInputEchoPeak", + rejectedInputEchoPeak); + value->setProperty("pass", pass); + return juce::var(value); +} + +juce::var NAMDelayRegression::runTrackProcessorSparseTailServiceProbe() +{ + struct SparseDelayPlayHead final : juce::AudioPlayHead + { + juce::Optional<PositionInfo> getPosition() const override + { + PositionInfo info; + info.setBpm(10.0); + info.setIsPlaying(true); + return info; + } + } playHead; + + auto rack = std::make_unique<S13NAMRack>(); + auto* const rackPointer = rack.get(); + configureNeutralRack(*rackPointer); + rackPointer->delayEnabled.store(1.0f); + rackPointer->delayTimeMs.store(250.0f); + rackPointer->delayFeedback.store(0.85f); + rackPointer->delayMix.store(1.0f); + rackPointer->delayMod.store(0.0f); + rackPointer->delayDucker.store(0.0f); + rackPointer->delayMode.store(0.0f); + rackPointer->delayPingPong.store(0.0f); + rackPointer->delayTempoSync.store(1.0f); + rackPointer->setPlayHead(&playHead); + + TrackProcessor track; + track.stopTimer(); + track.setTrackType(TrackType::Audio); + const bool addPassed = track.addTrackFX( + std::move(rack), fixtureSampleRate, fixtureBlockSize); + track.prepareToPlay(fixtureSampleRate, fixtureBlockSize); + const int initialBudgetSamples = + track.realtimeFXTailBudgetSamples.load( + std::memory_order_acquire); + const int initialMinimumSamples = + track.realtimeFXTailMinimumDrainSamples.load( + std::memory_order_acquire); + const bool representsMoreThan120Seconds = + initialBudgetSamples + > juce::roundToInt(120.0 * fixtureSampleRate) + && initialMinimumSamples + > juce::roundToInt(120.0 * fixtureSampleRate); + + constexpr double renderSeconds = 12.20; + const int renderSamples = juce::roundToInt( + renderSeconds * fixtureSampleRate); + const int timerPeriodSamples = juce::jmax( + fixtureBlockSize, + juce::roundToInt(0.250 * fixtureSampleRate)); + int samplesUntilTimer = timerPeriodSamples; + int timerMaintenanceCalls = 0; + float firstRepeatPeak = 0.0f; + float secondRepeatPeak = 0.0f; + juce::MidiBuffer midi; + for (int absoluteStart = 0; + absoluteStart < renderSamples; + absoluteStart += fixtureBlockSize) + { + juce::AudioBuffer<float> block( + 2, fixtureBlockSize); + block.clear(); + if (absoluteStart == 0) + { + block.setSample(0, 0, 0.55f); + block.setSample(1, 0, -0.31f); + } + track.processBlock(block, midi); + for (int sample = 0; + sample < fixtureBlockSize; + ++sample) + { + const double timeSeconds = + static_cast<double>(absoluteStart + sample) + / fixtureSampleRate; + const float peak = juce::jmax( + std::abs(block.getSample(0, sample)), + std::abs(block.getSample(1, sample))); + if (timeSeconds >= 5.95 && timeSeconds <= 6.05) + firstRepeatPeak = juce::jmax(firstRepeatPeak, peak); + if (timeSeconds >= 11.95 && timeSeconds <= 12.05) + secondRepeatPeak = juce::jmax(secondRepeatPeak, peak); + } + + samplesUntilTimer -= fixtureBlockSize; + while (samplesUntilTimer <= 0) + { + track.timerCallback(); + ++timerMaintenanceCalls; + samplesUntilTimer += timerPeriodSamples; + } + } + + const bool sparseRepeatsSurvived = + firstRepeatPeak > 1.0e-5f + && secondRepeatPeak > 1.0e-5f + && track.realtimeFXTailActive.load( + std::memory_order_acquire) + && ! track.realtimeFXTailResetPending.load( + std::memory_order_acquire) + && track.realtimeFXTailMinimumSamplesRemaining > 0; + + const int previousPublishedBudget = + track.realtimeFXTailLastPublishedBudgetSamples; + const int increasedPublishedBudget = juce::jmin( + std::numeric_limits<int>::max() - fixtureBlockSize * 4, + juce::jmax( + previousPublishedBudget, + track.realtimeFXTailHardSamplesRemaining) + + juce::roundToInt(2.0 * fixtureSampleRate)); + track.realtimeFXTailBudgetSamples.store( + increasedPublishedBudget, std::memory_order_release); + track.realtimeFXTailMinimumDrainSamples.store( + increasedPublishedBudget - fixtureBlockSize, + std::memory_order_release); + juce::AudioBuffer<float> adoptionBlock( + 2, fixtureBlockSize); + adoptionBlock.clear(); + track.processBlock(adoptionBlock, midi); + const int afterIncreaseSamples = + track.realtimeFXTailHardSamplesRemaining; + adoptionBlock.clear(); + track.processBlock(adoptionBlock, midi); + const int afterUnchangedSamples = + track.realtimeFXTailHardSamplesRemaining; + const bool upwardBudgetAdoptedOnce = + afterIncreaseSamples + == increasedPublishedBudget - fixtureBlockSize + && afterUnchangedSamples + == afterIncreaseSamples - fixtureBlockSize; + + auto* value = new juce::DynamicObject(); + value->setProperty("trackFXAdded", addPassed); + value->setProperty( + "initialBudgetSamples", initialBudgetSamples); + value->setProperty( + "initialMinimumDrainSamples", initialMinimumSamples); + value->setProperty( + "representsMoreThan120Seconds", + representsMoreThan120Seconds); + value->setProperty( + "timerMaintenanceCalls", timerMaintenanceCalls); + value->setProperty("firstRepeatPeak", firstRepeatPeak); + value->setProperty("secondRepeatPeak", secondRepeatPeak); + value->setProperty( + "sparseRepeatsSurvived", sparseRepeatsSurvived); + value->setProperty( + "increasedPublishedBudget", increasedPublishedBudget); + value->setProperty( + "afterIncreaseSamples", afterIncreaseSamples); + value->setProperty( + "afterUnchangedSamples", afterUnchangedSamples); + value->setProperty( + "upwardBudgetAdoptedOnce", upwardBudgetAdoptedOnce); + value->setProperty( + "pass", + addPassed + && representsMoreThan120Seconds + && timerMaintenanceCalls >= 40 + && sparseRepeatsSurvived + && upwardBudgetAdoptedOnce); + return juce::var(value); +} + +juce::Array<juce::var> NAMDelayRegression::runRackTailChecks() +{ + juce::Array<juce::var> checks; + + const auto rackDelaySpilloverProbe = + runRackDelaySpilloverProbe(); + addCheck( + checks, + "rack_delay_bypass_spills_then_becomes_dry", + rackDelaySpilloverProbe.getProperty("pass", false) + ? "pass" + : "fail", + "Disabling the rack delay must preserve its already-recorded echo over unity dry, reject new bypass input from the delay line, and return to the fixed-latency dry reference after the bounded tail.", + rackDelaySpilloverProbe); + const auto rackDelayV10FrozenTailAndBudgetProbe = + runRackDelayV10FrozenTailAndBudgetProbe(); + addCheck( + checks, + "rack_delay_v10_frozen_tail_macro_and_downward_budget", + rackDelayV10FrozenTailAndBudgetProbe.getProperty( + "pass", false) + ? "pass" + : "fail", + "After Delay bypass, edits to every visible macro source must not alter the already-generated Dual tail. While active, downward Feedback, Time, or Mix automation may update the frozen macro for the eventual bypass, but both the processor's published live-tail bound and the rack's armed budget must retain the elapsed conservative bound. The budget must also include the additive input-send release horizon and both current plus queued time-morph horizons, so late release-fed or rapidly retargeted echoes cannot be truncated.", + rackDelayV10FrozenTailAndBudgetProbe); + const auto rackMinimumDelayBypassProbe = + runRackMinimumDelayBypassProbe(); + addCheck( + checks, + "rack_delay_minimum_time_bypass_is_smooth_and_input_isolated", + rackMinimumDelayBypassProbe.getProperty("pass", false) + ? "pass" + : "fail", + "At the 1 ms minimum time and zero feedback, rack Delay bypass must reject new input from the delay line, ramp its dry gain without a block-edge jump, retain the bounded drain for at least the 20 ms transition, and then become exactly dry.", + rackMinimumDelayBypassProbe); + const auto trackProcessorSparseTailServiceProbe = + runTrackProcessorSparseTailServiceProbe(); + addCheck( + checks, + "track_processor_sparse_delay_tail_service_contract", + trackProcessorSparseTailServiceProbe.getProperty("pass", false) + ? "pass" + : "fail", + "TrackProcessor must represent the Rack's greater-than-120-second 10-BPM delay tail, run actual control-thread timer maintenance without treating the silence between 6-second repeats as completion, preserve the second repeat at 12 seconds, and adopt a newly published longer live budget exactly once.", + trackProcessorSparseTailServiceProbe); + + return checks; +} diff --git a/Source/NAMModelSafety.h b/Source/NAMModelSafety.h new file mode 100644 index 0000000..5f706b5 --- /dev/null +++ b/Source/NAMModelSafety.h @@ -0,0 +1,13 @@ +#pragma once + +#include <JuceHeader.h> + +namespace OpenStudioNAMModelSafety +{ +// Real-world NAM captures are generally far smaller than this. Keeping the +// supported ceiling at 64 MiB bounds the simultaneous UTF-8, parsed JSON, and +// dual-lane DSP construction footprint in the live process. +inline constexpr juce::int64 maximumFileBytes = + static_cast<juce::int64>(64) * 1024 * 1024; +inline constexpr const char* maximumFileDescription = "64 MiB"; +} diff --git a/Source/NAMPolyOctaver.cpp b/Source/NAMPolyOctaver.cpp new file mode 100644 index 0000000..fbe0460 --- /dev/null +++ b/Source/NAMPolyOctaver.cpp @@ -0,0 +1,1584 @@ +/* + NAMPolyOctaver: stereo multirate ERB phase-scaling octave generator. + + The constant-ERB complex-filter layout, octave phase-scaling equations, + 6:1 multirate topology, FIR coefficients, and fast square-root method are + adapted from: + + terrarium-poly-octave + Copyright (c) 2024 Steven Schulteis + https://github.com/schult/terrarium-poly-octave + + That implementation follows the ERB-PS2 method described by Etienne + Thuillier in "Real-Time Polyphonic Octave Doubling for the Guitar" + (Aalto University, 2016). OpenStudio's implementation adds stereo state, + sample-rate-aware ERB coefficients, arbitrary host-block partitioning, + finite recovery, atomic parameters, and deterministic test access. It + does not depend on the Daisy, Q, or GCEM libraries used by the firmware. + + MIT License + + 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. +*/ + +#include "NAMPolyOctaver.h" + +#include <algorithm> +#include <cmath> +#include <cstring> +#include <limits> +#include <vector> + +namespace +{ +constexpr float nominalDecimatorPassbandHz = 1800.0f; +constexpr float nominalInterpolatorStopbandHz = 4400.0f; + +float sanitiseLevel(float value, float fallback) noexcept +{ + if (! std::isfinite(value)) + return fallback; + return juce::jlimit(0.0f, 1.25f, value); +} + +float maximumAbsoluteDifference(const std::vector<float>& left, + const std::vector<float>& right) noexcept +{ + const std::size_t count = juce::jmin(left.size(), right.size()); + float maximum = left.size() == right.size() + ? 0.0f + : std::numeric_limits<float>::infinity(); + for (std::size_t index = 0; index < count; ++index) + maximum = juce::jmax(maximum, std::abs(left[index] - right[index])); + return maximum; +} + +float maximumAbsoluteValue(const std::vector<float>& values) noexcept +{ + float maximum = 0.0f; + for (const float value : values) + maximum = juce::jmax(maximum, std::abs(value)); + return maximum; +} + +double vectorRms(const std::vector<float>& values, + std::size_t begin) noexcept +{ + if (begin >= values.size()) + return 0.0; + double sumSquares = 0.0; + for (std::size_t index = begin; index < values.size(); ++index) + { + const double value = static_cast<double>(values[index]); + sumSquares += value * value; + } + return std::sqrt(sumSquares + / static_cast<double>(values.size() - begin)); +} + +double toneMagnitude(const std::vector<float>& values, + std::size_t begin, + double sampleRate, + double frequency) noexcept +{ + if (begin >= values.size() + || frequency <= 0.0 + || frequency >= sampleRate * 0.5) + { + return 0.0; + } + + double real = 0.0; + double imaginary = 0.0; + const double angularFrequency = 2.0 * juce::MathConstants<double>::pi + * frequency / sampleRate; + for (std::size_t index = begin; index < values.size(); ++index) + { + const double phase = angularFrequency + * static_cast<double>(index - begin); + const double value = static_cast<double>(values[index]); + real += value * std::cos(phase); + imaginary -= value * std::sin(phase); + } + return 2.0 * std::sqrt(real * real + imaginary * imaginary) + / static_cast<double>(values.size() - begin); +} + +float ratioToDecibels(double numerator, double denominator) noexcept +{ + constexpr double floor = 1.0e-15; + return static_cast<float>(20.0 * std::log10( + juce::jmax(floor, numerator) / juce::jmax(floor, denominator))); +} +} + +NAMPolyOctaver::NAMPolyOctaver() noexcept +{ + smoothedDirectLevel.setCurrentAndTargetValue(1.0f); + smoothedOctaveDownLevel.setCurrentAndTargetValue(0.0f); + smoothedOctaveUpLevel.setCurrentAndTargetValue(0.0f); + for (auto& profile : smoothedBassProfile) + profile.setCurrentAndTargetValue(0.0f); +} + +float NAMPolyOctaver::DecimatorState::stageOne() const noexcept +{ + return + 0.000066177472224418f * (fullRate.atAge(11) + fullRate.atAge(31)) + + 0.0009613901552378511f * (fullRate.atAge(12) + fullRate.atAge(30)) + + 0.003835090815380887f * (fullRate.atAge(13) + fullRate.atAge(29)) + + 0.010496532623165526f * (fullRate.atAge(14) + fullRate.atAge(28)) + + 0.02272703591356282f * (fullRate.atAge(15) + fullRate.atAge(27)) + + 0.041464390530886956f * (fullRate.atAge(16) + fullRate.atAge(26)) + + 0.06591039391505207f * (fullRate.atAge(17) + fullRate.atAge(25)) + + 0.09309984953947406f * (fullRate.atAge(18) + fullRate.atAge(24)) + + 0.11829177835273737f * (fullRate.atAge(19) + fullRate.atAge(23)) + + 0.13620590247679107f * (fullRate.atAge(20) + fullRate.atAge(22)) + + 0.14270010010002276f * fullRate.atAge(21); +} + +float NAMPolyOctaver::DecimatorState::stageTwo() const noexcept +{ + return + -0.00299995f * (oneThirdRate.atAge(1) + oneThirdRate.atAge(15)) + + 0.01858487f * (oneThirdRate.atAge(3) + oneThirdRate.atAge(13)) + - 0.06984829f * (oneThirdRate.atAge(5) + oneThirdRate.atAge(11)) + + 0.30421664f * (oneThirdRate.atAge(7) + oneThirdRate.atAge(9)) + + 0.5f * oneThirdRate.atAge(8); +} + +float NAMPolyOctaver::DecimatorState::process( + const std::array<float, resampleFactor>& input) noexcept +{ + fullRate.push(input[0]); + fullRate.push(input[1]); + fullRate.push(input[2]); + oneThirdRate.push(stageOne()); + + fullRate.push(input[3]); + fullRate.push(input[4]); + fullRate.push(input[5]); + oneThirdRate.push(stageOne()); + + return stageTwo(); +} + +void NAMPolyOctaver::DecimatorState::reset() noexcept +{ + fullRate.clear(); + oneThirdRate.clear(); +} + +float NAMPolyOctaver::InterpolatorState::stageOneEven() const noexcept +{ + return + -0.0028536199247471473f + * (reducedRate.atAge(7) + reducedRate.atAge(31)) + - 0.040326725115203695f + * (reducedRate.atAge(8) + reducedRate.atAge(30)) + - 0.036134596458820015f + * (reducedRate.atAge(9) + reducedRate.atAge(29)) + + 0.033522051189265496f + * (reducedRate.atAge(10) + reducedRate.atAge(28)) + - 0.031442224275585025f + * (reducedRate.atAge(11) + reducedRate.atAge(27)) + + 0.03258337681750486f + * (reducedRate.atAge(12) + reducedRate.atAge(26)) + - 0.03538414864961937f + * (reducedRate.atAge(13) + reducedRate.atAge(25)) + + 0.038811868988079715f + * (reducedRate.atAge(14) + reducedRate.atAge(24)) + - 0.042204493894155204f + * (reducedRate.atAge(15) + reducedRate.atAge(23)) + + 0.045128824129776035f + * (reducedRate.atAge(16) + reducedRate.atAge(22)) + - 0.04736995557907843f + * (reducedRate.atAge(17) + reducedRate.atAge(21)) + + 0.048831901671617876f + * (reducedRate.atAge(18) + reducedRate.atAge(20)) + + 0.9507771467941135f * reducedRate.atAge(19); +} + +float NAMPolyOctaver::InterpolatorState::stageOneOdd() const noexcept +{ + return + -0.015961858776449508f + * (reducedRate.atAge(7) + reducedRate.atAge(30)) + - 0.056128740058266235f + * (reducedRate.atAge(8) + reducedRate.atAge(29)) + + 0.011026026040094625f + * (reducedRate.atAge(9) + reducedRate.atAge(28)) + + 0.003198795994721635f + * (reducedRate.atAge(10) + reducedRate.atAge(27)) + - 0.01108582057161854f + * (reducedRate.atAge(11) + reducedRate.atAge(26)) + + 0.01951384497860086f + * (reducedRate.atAge(12) + reducedRate.atAge(25)) + - 0.030860282826182514f + * (reducedRate.atAge(13) + reducedRate.atAge(24)) + + 0.04707993944078406f + * (reducedRate.atAge(14) + reducedRate.atAge(23)) + - 0.07155908583004919f + * (reducedRate.atAge(15) + reducedRate.atAge(22)) + + 0.1129220770668398f + * (reducedRate.atAge(16) + reducedRate.atAge(21)) + - 0.2033122562119347f + * (reducedRate.atAge(17) + reducedRate.atAge(20)) + + 0.6336728217960803f + * (reducedRate.atAge(18) + reducedRate.atAge(19)); +} + +float NAMPolyOctaver::InterpolatorState::stageTwoPhaseZero() const noexcept +{ + return + 0.00036440608905813593f * oneThirdRate.atAge(5) + + 0.0005821260464558225f * oneThirdRate.atAge(6) + - 0.043244023722481956f * oneThirdRate.atAge(7) + - 0.10310036386076359f * oneThirdRate.atAge(8) + + 0.13604229993913602f * oneThirdRate.atAge(9) + + 0.5503466630244301f * oneThirdRate.atAge(10) + + 0.4407091552750118f * oneThirdRate.atAge(11) + + 0.009420000864297772f * oneThirdRate.atAge(12) + - 0.09801301258361905f * oneThirdRate.atAge(13) + - 0.019627176246818184f * oneThirdRate.atAge(14) + + 0.001762424830497545f * oneThirdRate.atAge(15); +} + +float NAMPolyOctaver::InterpolatorState::stageTwoPhaseOne() const noexcept +{ + return + 0.001112114188613258f + * (oneThirdRate.atAge(5) + oneThirdRate.atAge(15)) + - 0.005449383064836152f + * (oneThirdRate.atAge(6) + oneThirdRate.atAge(14)) + - 0.07276547446584428f + * (oneThirdRate.atAge(7) + oneThirdRate.atAge(13)) + - 0.0709695783332148f + * (oneThirdRate.atAge(8) + oneThirdRate.atAge(12)) + + 0.2904591843823435f + * (oneThirdRate.atAge(9) + oneThirdRate.atAge(11)) + + 0.590541634315722f * oneThirdRate.atAge(10); +} + +float NAMPolyOctaver::InterpolatorState::stageTwoPhaseTwo() const noexcept +{ + return + 0.001762424830497545f * oneThirdRate.atAge(5) + - 0.019627176246818184f * oneThirdRate.atAge(6) + - 0.09801301258361905f * oneThirdRate.atAge(7) + + 0.009420000864297772f * oneThirdRate.atAge(8) + + 0.4407091552750118f * oneThirdRate.atAge(9) + + 0.5503466630244301f * oneThirdRate.atAge(10) + + 0.13604229993913602f * oneThirdRate.atAge(11) + - 0.10310036386076359f * oneThirdRate.atAge(12) + - 0.043244023722481956f * oneThirdRate.atAge(13) + + 0.0005821260464558225f * oneThirdRate.atAge(14) + + 0.00036440608905813593f * oneThirdRate.atAge(15); +} + +void NAMPolyOctaver::InterpolatorState::process( + float input, + std::array<float, resampleFactor>& output) noexcept +{ + reducedRate.push(input); + + oneThirdRate.push(stageOneEven()); + output[0] = stageTwoPhaseZero(); + output[1] = stageTwoPhaseOne(); + output[2] = stageTwoPhaseTwo(); + + oneThirdRate.push(stageOneOdd()); + output[3] = stageTwoPhaseZero(); + output[4] = stageTwoPhaseOne(); + output[5] = stageTwoPhaseTwo(); +} + +void NAMPolyOctaver::InterpolatorState::reset() noexcept +{ + reducedRate.clear(); + oneThirdRate.clear(); +} + +void NAMPolyOctaver::ChannelRateState::reset() noexcept +{ + decimator.reset(); + downInterpolator.reset(); + upInterpolator.reset(); + pendingInput.fill(0.0f); + pendingDownOutput.fill(0.0f); + pendingUpOutput.fill(0.0f); + phase = 0; + downInterpolatorActive = false; + upInterpolatorActive = false; + octaveDownDcInput = 0.0f; + octaveDownDcOutput = 0.0f; +} + +float NAMPolyOctaver::bandCentreHz(int erbIndex) noexcept +{ + return 480.0f * std::pow(2.0f, 0.027f * static_cast<float>(erbIndex)) + - 420.0f; +} + +float NAMPolyOctaver::bandBandwidthHz(int erbIndex) noexcept +{ + const float previous = bandCentreHz(erbIndex - 1); + const float current = bandCentreHz(erbIndex); + const float next = bandCentreHz(erbIndex + 1); + const float lowerSpacing = juce::jmax(0.001f, current - previous); + const float upperSpacing = juce::jmax(0.001f, next - current); + return 2.0f * lowerSpacing * upperSpacing + / (lowerSpacing + upperSpacing); +} + +float NAMPolyOctaver::fastInverseSqrt(float value) noexcept +{ + static_assert(std::numeric_limits<float>::is_iec559, + "Fast inverse square root requires IEEE-754 float"); + if (! std::isfinite(value) || value <= phaseEnergyFloor) + return 0.0f; + + std::uint32_t bits = 0; + std::memcpy(&bits, &value, sizeof(bits)); + bits = 0x5F1FFFF9U - (bits >> 1U); + float estimate = 0.0f; + std::memcpy(&estimate, &bits, sizeof(estimate)); + return estimate * (0.703952253f + * (2.38924456f - value * estimate * estimate)); +} + +float NAMPolyOctaver::fastSqrt(float value) noexcept +{ + return value > phaseEnergyFloor + ? value * fastInverseSqrt(value) + : 0.0f; +} + +NAMPolyOctaver::ComplexValue NAMPolyOctaver::multiply( + ComplexValue left, + ComplexValue right) noexcept +{ + return { + left.real * right.real - left.imag * right.imag, + left.real * right.imag + left.imag * right.real + }; +} + +void NAMPolyOctaver::prepare(double sampleRate, int maximumBlockSize) noexcept +{ + prepared.store(false, std::memory_order_release); + + const double safeSampleRate = sampleRate > 1000.0 + ? sampleRate + : 44100.0; + diagnosticSampleRate.store( + static_cast<float>(safeSampleRate), std::memory_order_relaxed); + diagnosticMaximumBlockSize.store( + juce::jmax(1, maximumBlockSize), std::memory_order_relaxed); + + designFilterBank(safeSampleRate); + octaveDownHighPassCoefficient = std::exp( + -juce::MathConstants<float>::twoPi * 18.0f + / static_cast<float>(safeSampleRate)); + + smoothedDirectLevel.reset(safeSampleRate, levelRampSeconds); + smoothedOctaveDownLevel.reset(safeSampleRate, levelRampSeconds); + smoothedOctaveUpLevel.reset(safeSampleRate, levelRampSeconds); + for (auto& profile : smoothedBassProfile) + { + profile.reset( + safeSampleRate / static_cast<double>(resampleFactor), + levelRampSeconds); + profile.setCurrentAndTargetValue( + requestedInstrumentProfile.load( + std::memory_order_relaxed) == 1 + ? 1.0f + : 0.0f); + } + smoothedDirectLevel.setCurrentAndTargetValue( + requestedDirectLevel.load(std::memory_order_relaxed)); + smoothedOctaveDownLevel.setCurrentAndTargetValue( + requestedOctaveDownLevel.load(std::memory_order_relaxed)); + smoothedOctaveUpLevel.setCurrentAndTargetValue( + requestedOctaveUpLevel.load(std::memory_order_relaxed)); + + resetDspState(); + resetDiagnostics(); + prepared.store(true, std::memory_order_release); +} + +void NAMPolyOctaver::designFilterBank(double sampleRate) noexcept +{ + bands.fill(BandCoefficients {}); + activeBandCount = 0; + octaveUpBandCount = 0; + + const double reducedSampleRate = juce::jmax( + 1000.0, sampleRate / static_cast<double>(resampleFactor)); + const double pi = juce::MathConstants<double>::pi; + const double squareRootTwo = std::sqrt(2.0); + + for (int band = 0; band < maximumBands; ++band) + { + // Array indices 0..3 are the Bass-only B0/E1 extension. Indices + // 4..83 retain the original Guitar ERB indices 0..79 exactly. + const int erbIndex = band - bassExtendedBandCount; + const float centre = bandCentreHz(erbIndex); + if (! std::isfinite(centre) + || centre <= 0.0f + || centre >= static_cast<float>(reducedSampleRate * 0.46)) + { + break; + } + + const float bandwidth = juce::jmax( + 1.0f, bandBandwidthHz(erbIndex)); + const double angularBandwidth = + pi * static_cast<double>(bandwidth) / reducedSampleRate; + const double cosineBandwidth = std::cos(angularBandwidth); + const double sineBandwidth = std::sin(angularBandwidth); + const double denominator = + 1.0 + squareRootTwo * sineBandwidth * 0.5; + const double prototypeGain = + (1.0 - cosineBandwidth) / (2.0 * denominator); + const double centreRadians = + 2.0 * pi * static_cast<double>(centre) / reducedSampleRate; + const double centreCosine = std::cos(centreRadians); + const double centreSine = std::sin(centreRadians); + const double doubleCentreCosine = std::cos(2.0 * centreRadians); + const double doubleCentreSine = std::sin(2.0 * centreRadians); + const double c1Scale = -2.0 * cosineBandwidth / denominator; + const double c2Scale = + (1.0 - squareRootTwo * sineBandwidth * 0.5) / denominator; + + auto& coefficients = bands[static_cast<std::size_t>(band)]; + coefficients.centreHz = centre; + coefficients.bandwidthHz = bandwidth; + coefficients.d0 = static_cast<float>(prototypeGain); + coefficients.d1 = { + static_cast<float>(2.0 * prototypeGain * centreCosine), + static_cast<float>(2.0 * prototypeGain * centreSine) + }; + coefficients.d2 = { + static_cast<float>(prototypeGain * doubleCentreCosine), + static_cast<float>(prototypeGain * doubleCentreSine) + }; + coefficients.c1 = { + static_cast<float>(c1Scale * centreCosine), + static_cast<float>(c1Scale * centreSine) + }; + coefficients.c2 = { + static_cast<float>(c2Scale * doubleCentreCosine), + static_cast<float>(c2Scale * doubleCentreSine) + }; + + ++activeBandCount; + ++octaveUpBandCount; + } + + const float hostRateScale = static_cast<float>(sampleRate / 48000.0); + const bool bassProfile = requestedInstrumentProfile.load( + std::memory_order_relaxed) == 1; + diagnosticActiveBandCount.store( + juce::jmin(80, activeBandCount), + std::memory_order_relaxed); + diagnosticOctaveUpBandCount.store( + juce::jmin(80, octaveUpBandCount), + std::memory_order_relaxed); + diagnosticLowestBandCentreHz.store( + activeBandCount > 0 + ? bands[static_cast<std::size_t>( + bassProfile ? 0 : bassExtendedBandCount)].centreHz + : 0.0f, + std::memory_order_relaxed); + diagnosticHighestBandCentreHz.store( + activeBandCount > 0 + ? bands[static_cast<std::size_t>(juce::jmin( + activeBandCount - 1, + bassProfile ? 79 : 83))].centreHz + : 0.0f, + std::memory_order_relaxed); + diagnosticWetAntiAliasCutoffHz.store( + nominalDecimatorPassbandHz * hostRateScale, + std::memory_order_relaxed); +} + +void NAMPolyOctaver::resetDspState() noexcept +{ + for (auto& channel : channelStates) + for (auto& state : channel) + state = BandChannelState {}; + for (auto& state : channelRateStates) + state.reset(); + dspStateIsReset = true; +} + +void NAMPolyOctaver::reset() noexcept +{ + resetDspState(); + + const double sampleRate = juce::jmax( + 1.0, + static_cast<double>( + diagnosticSampleRate.load(std::memory_order_relaxed))); + smoothedDirectLevel.reset(sampleRate, levelRampSeconds); + smoothedOctaveDownLevel.reset(sampleRate, levelRampSeconds); + smoothedOctaveUpLevel.reset(sampleRate, levelRampSeconds); + for (auto& profile : smoothedBassProfile) + { + profile.reset( + sampleRate / static_cast<double>(resampleFactor), + levelRampSeconds); + profile.setCurrentAndTargetValue( + requestedInstrumentProfile.load( + std::memory_order_relaxed) == 1 + ? 1.0f + : 0.0f); + } + smoothedDirectLevel.setCurrentAndTargetValue( + requestedDirectLevel.load(std::memory_order_relaxed)); + smoothedOctaveDownLevel.setCurrentAndTargetValue( + requestedOctaveDownLevel.load(std::memory_order_relaxed)); + smoothedOctaveUpLevel.setCurrentAndTargetValue( + requestedOctaveUpLevel.load(std::memory_order_relaxed)); + resetDiagnostics(); +} + +void NAMPolyOctaver::setLevels(float directLevel, + float octaveDownLevel, + float octaveUpLevel) noexcept +{ + requestedDirectLevel.store( + sanitiseLevel(directLevel, 1.0f), std::memory_order_relaxed); + requestedOctaveDownLevel.store( + sanitiseLevel(octaveDownLevel, 0.0f), std::memory_order_relaxed); + requestedOctaveUpLevel.store( + sanitiseLevel(octaveUpLevel, 0.0f), std::memory_order_relaxed); +} + +void NAMPolyOctaver::setInstrumentProfile(int profile) noexcept +{ + const int safeProfile = profile == 1 ? 1 : 0; + requestedInstrumentProfile.store( + safeProfile, + std::memory_order_relaxed); + if (prepared.load(std::memory_order_acquire) + && activeBandCount > bassExtendedBandCount) + { + diagnosticLowestBandCentreHz.store( + bands[static_cast<std::size_t>( + safeProfile == 1 ? 0 : bassExtendedBandCount)].centreHz, + std::memory_order_relaxed); + diagnosticHighestBandCentreHz.store( + bands[static_cast<std::size_t>(juce::jmin( + activeBandCount - 1, + safeProfile == 1 ? 79 : 83))].centreHz, + std::memory_order_relaxed); + } +} + +void NAMPolyOctaver::synchroniseLevelTargets() noexcept +{ + const float direct = requestedDirectLevel.load(std::memory_order_relaxed); + const float down = requestedOctaveDownLevel.load(std::memory_order_relaxed); + const float up = requestedOctaveUpLevel.load(std::memory_order_relaxed); + if (smoothedDirectLevel.getTargetValue() != direct) + smoothedDirectLevel.setTargetValue(direct); + if (smoothedOctaveDownLevel.getTargetValue() != down) + smoothedOctaveDownLevel.setTargetValue(down); + if (smoothedOctaveUpLevel.getTargetValue() != up) + smoothedOctaveUpLevel.setTargetValue(up); +} + +void NAMPolyOctaver::synchroniseProfileTargets() noexcept +{ + const float target = requestedInstrumentProfile.load( + std::memory_order_relaxed) == 1 + ? 1.0f + : 0.0f; + for (auto& profile : smoothedBassProfile) + { + if (profile.getTargetValue() != target) + profile.setTargetValue(target); + } +} + +bool NAMPolyOctaver::wetPathIsExactlySilent() const noexcept +{ + return ! smoothedOctaveDownLevel.isSmoothing() + && ! smoothedOctaveUpLevel.isSmoothing() + && smoothedOctaveDownLevel.getCurrentValue() == 0.0f + && smoothedOctaveDownLevel.getTargetValue() == 0.0f + && smoothedOctaveUpLevel.getCurrentValue() == 0.0f + && smoothedOctaveUpLevel.getTargetValue() == 0.0f; +} + +bool NAMPolyOctaver::directPathIsExactlyUnity() const noexcept +{ + return ! smoothedDirectLevel.isSmoothing() + && smoothedDirectLevel.getCurrentValue() == 1.0f + && smoothedDirectLevel.getTargetValue() == 1.0f; +} + +bool NAMPolyOctaver::allPathsAreExactlySilent() const noexcept +{ + return wetPathIsExactlySilent() + && ! smoothedDirectLevel.isSmoothing() + && smoothedDirectLevel.getCurrentValue() == 0.0f + && smoothedDirectLevel.getTargetValue() == 0.0f; +} + +NAMPolyOctaver::VoiceFrame NAMPolyOctaver::processReducedRateSample( + int channel, + float input, + bool generateOctaveDown, + bool generateOctaveUp, + std::uint64_t& nonFiniteCount) noexcept +{ + VoiceFrame voices; + if (channel < 0 || channel >= maximumChannels || activeBandCount <= 0) + return voices; + + if (! std::isfinite(input)) + { + input = 0.0f; + ++nonFiniteCount; + } + + auto& states = channelStates[static_cast<std::size_t>(channel)]; + const float bassBlend = smoothedBassProfile[ + static_cast<std::size_t>(channel)].getNextValue(); + for (int band = 0; band < activeBandCount; ++band) + { + const float profileBandGain = band < bassExtendedBandCount + ? bassBlend + : (band >= 80 ? 1.0f - bassBlend : 1.0f); + const auto& coefficients = bands[static_cast<std::size_t>(band)]; + auto& state = states[static_cast<std::size_t>(band)]; + + const ComplexValue previousBandOutput = state.previousBandOutput; + const ComplexValue bandOutput { + state.state2.real + coefficients.d0 * input, + state.state2.imag + }; + const ComplexValue c1Output = multiply(coefficients.c1, bandOutput); + const ComplexValue c2Output = multiply(coefficients.c2, bandOutput); + const ComplexValue nextState2 { + state.state1.real + coefficients.d1.real * input - c1Output.real, + state.state1.imag + coefficients.d1.imag * input - c1Output.imag + }; + const ComplexValue nextState1 { + coefficients.d2.real * input - c2Output.real, + coefficients.d2.imag * input - c2Output.imag + }; + + if (! std::isfinite(bandOutput.real) + || ! std::isfinite(bandOutput.imag) + || ! std::isfinite(nextState1.real) + || ! std::isfinite(nextState1.imag) + || ! std::isfinite(nextState2.real) + || ! std::isfinite(nextState2.imag)) + { + state = BandChannelState {}; + ++nonFiniteCount; + continue; + } + + state.state1 = nextState1; + state.state2 = nextState2; + state.previousBandOutput = bandOutput; + + if (bandOutput.real < 0.0f + && std::signbit(bandOutput.imag) + != std::signbit(previousBandOutput.imag)) + { + state.octaveDownSign = -state.octaveDownSign; + } + + const float real = bandOutput.real; + const float imag = bandOutput.imag; + const float energy = real * real + imag * imag; + if (! std::isfinite(energy)) + { + state = BandChannelState {}; + ++nonFiniteCount; + continue; + } + if (energy <= phaseEnergyFloor) + continue; + + const float inverseMagnitude = fastInverseSqrt(energy); + + if (generateOctaveUp) + { + voices.octaveUp += profileBandGain + * (real * real - imag * imag) * inverseMagnitude; + } + + if (generateOctaveDown) + { + const float halfNormalisedReal = juce::jlimit( + -0.5f, 0.5f, 0.5f * real * inverseMagnitude); + const float rootReal = fastSqrt( + juce::jmax(0.0f, 0.5f + halfNormalisedReal)); + const float rootImag = (imag < 0.0f ? -1.0f : 1.0f) + * fastSqrt( + juce::jmax(0.0f, 0.5f - halfNormalisedReal)); + voices.octaveDown += profileBandGain * state.octaveDownSign + * (real * rootReal + imag * rootImag); + } + } + + if (! std::isfinite(voices.octaveDown) + || ! std::isfinite(voices.octaveUp)) + { + voices = {}; + for (auto& state : states) + state = BandChannelState {}; + ++nonFiniteCount; + } + return voices; +} + +NAMPolyOctaver::VoiceFrame NAMPolyOctaver::processVoiceSample( + int channel, + float input, + bool generateOctaveDown, + bool generateOctaveUp, + std::uint64_t& nonFiniteCount) noexcept +{ + VoiceFrame output; + if (channel < 0 || channel >= maximumChannels) + return output; + + auto& rateState = channelRateStates[static_cast<std::size_t>(channel)]; + if (! std::isfinite(input)) + { + input = 0.0f; + ++nonFiniteCount; + } + + const auto phaseIndex = static_cast<std::size_t>(rateState.phase); + if (generateOctaveDown) + { + const float rawOctaveDown = + rateState.pendingDownOutput[phaseIndex]; + output.octaveDown = rawOctaveDown + - rateState.octaveDownDcInput + + octaveDownHighPassCoefficient + * rateState.octaveDownDcOutput; + rateState.octaveDownDcInput = rawOctaveDown; + rateState.octaveDownDcOutput = std::isfinite(output.octaveDown) + ? output.octaveDown + : 0.0f; + } + else + { + rateState.octaveDownDcInput = 0.0f; + rateState.octaveDownDcOutput = 0.0f; + } + output.octaveUp = generateOctaveUp + ? rateState.pendingUpOutput[phaseIndex] + : 0.0f; + rateState.pendingInput[phaseIndex] = input; + + ++rateState.phase; + if (rateState.phase >= resampleFactor) + { + const float reducedInput = + rateState.decimator.process(rateState.pendingInput); + if (! std::isfinite(reducedInput)) + { + rateState.reset(); + auto& states = channelStates[static_cast<std::size_t>(channel)]; + for (auto& state : states) + state = BandChannelState {}; + ++nonFiniteCount; + } + else + { + const VoiceFrame reducedVoices = processReducedRateSample( + channel, + reducedInput, + generateOctaveDown, + generateOctaveUp, + nonFiniteCount); + + if (generateOctaveDown) + { + rateState.downInterpolator.process( + reducedVoices.octaveDown, + rateState.pendingDownOutput); + rateState.downInterpolatorActive = true; + } + else + { + if (rateState.downInterpolatorActive) + rateState.downInterpolator.reset(); + rateState.pendingDownOutput.fill(0.0f); + rateState.downInterpolatorActive = false; + } + + if (generateOctaveUp) + { + rateState.upInterpolator.process( + reducedVoices.octaveUp, + rateState.pendingUpOutput); + rateState.upInterpolatorActive = true; + } + else + { + if (rateState.upInterpolatorActive) + rateState.upInterpolator.reset(); + rateState.pendingUpOutput.fill(0.0f); + rateState.upInterpolatorActive = false; + } + rateState.phase = 0; + } + } + + if (! std::isfinite(output.octaveDown) + || ! std::isfinite(output.octaveUp)) + { + output = {}; + rateState.reset(); + auto& states = channelStates[static_cast<std::size_t>(channel)]; + for (auto& state : states) + state = BandChannelState {}; + ++nonFiniteCount; + } + + dspStateIsReset = false; + return output; +} + +void NAMPolyOctaver::processBlock(juce::AudioBuffer<float>& buffer) noexcept +{ + juce::ScopedNoDenormals noDenormals; + + const int numSamples = buffer.getNumSamples(); + const int numChannels = buffer.getNumChannels(); + if (numSamples <= 0 || numChannels <= 0) + return; + + if (! prepared.load(std::memory_order_acquire)) + return; + + synchroniseLevelTargets(); + synchroniseProfileTargets(); + + if (wetPathIsExactlySilent() && directPathIsExactlyUnity()) + { + if (! dspStateIsReset) + resetDspState(); + diagnosticProcessedBlocks.fetch_add(1, std::memory_order_relaxed); + diagnosticProcessedSamples.fetch_add( + static_cast<std::uint64_t>(numSamples), + std::memory_order_relaxed); + diagnosticFastPathBlocks.fetch_add(1, std::memory_order_relaxed); + diagnosticLastBlockDownPeak.store(0.0f, std::memory_order_relaxed); + diagnosticLastBlockUpPeak.store(0.0f, std::memory_order_relaxed); + return; + } + + if (allPathsAreExactlySilent()) + { + if (! dspStateIsReset) + resetDspState(); + buffer.clear(); + diagnosticProcessedBlocks.fetch_add(1, std::memory_order_relaxed); + diagnosticProcessedSamples.fetch_add( + static_cast<std::uint64_t>(numSamples), + std::memory_order_relaxed); + diagnosticFastPathBlocks.fetch_add(1, std::memory_order_relaxed); + diagnosticLastBlockDownPeak.store(0.0f, std::memory_order_relaxed); + diagnosticLastBlockUpPeak.store(0.0f, std::memory_order_relaxed); + return; + } + + if (wetPathIsExactlySilent()) + { + if (! dspStateIsReset) + resetDspState(); + for (int sample = 0; sample < numSamples; ++sample) + { + const float directLevel = smoothedDirectLevel.getNextValue(); + for (int channel = 0; channel < numChannels; ++channel) + buffer.getWritePointer(channel)[sample] *= directLevel; + } + diagnosticProcessedBlocks.fetch_add(1, std::memory_order_relaxed); + diagnosticProcessedSamples.fetch_add( + static_cast<std::uint64_t>(numSamples), + std::memory_order_relaxed); + diagnosticFastPathBlocks.fetch_add(1, std::memory_order_relaxed); + diagnosticLastBlockDownPeak.store(0.0f, std::memory_order_relaxed); + diagnosticLastBlockUpPeak.store(0.0f, std::memory_order_relaxed); + return; + } + + const int processedChannels = juce::jmin(numChannels, maximumChannels); + const bool generateOctaveDown = + smoothedOctaveDownLevel.isSmoothing() + || smoothedOctaveDownLevel.getCurrentValue() != 0.0f + || smoothedOctaveDownLevel.getTargetValue() != 0.0f; + const bool generateOctaveUp = + smoothedOctaveUpLevel.isSmoothing() + || smoothedOctaveUpLevel.getCurrentValue() != 0.0f + || smoothedOctaveUpLevel.getTargetValue() != 0.0f; + std::array<float*, maximumChannels> channelData {}; + for (int channel = 0; channel < processedChannels; ++channel) + channelData[static_cast<std::size_t>(channel)] = + buffer.getWritePointer(channel); + + std::uint64_t nonFiniteCount = 0; + float downPeak = 0.0f; + float upPeak = 0.0f; + for (int sample = 0; sample < numSamples; ++sample) + { + const float directLevel = smoothedDirectLevel.getNextValue(); + const float downLevel = smoothedOctaveDownLevel.getNextValue(); + const float upLevel = smoothedOctaveUpLevel.getNextValue(); + + for (int channel = 0; channel < processedChannels; ++channel) + { + auto* const samples = channelData[static_cast<std::size_t>(channel)]; + float direct = samples[sample]; + if (! std::isfinite(direct)) + { + direct = 0.0f; + ++nonFiniteCount; + } + const VoiceFrame voices = processVoiceSample( + channel, + direct, + generateOctaveDown, + generateOctaveUp, + nonFiniteCount); + downPeak = juce::jmax(downPeak, std::abs(voices.octaveDown)); + upPeak = juce::jmax(upPeak, std::abs(voices.octaveUp)); + const float mixed = direct * directLevel + + voices.octaveDown * downLevel + + voices.octaveUp * upLevel; + if (std::isfinite(mixed)) + samples[sample] = mixed; + else + { + samples[sample] = 0.0f; + ++nonFiniteCount; + } + } + + for (int channel = processedChannels; channel < numChannels; ++channel) + buffer.getWritePointer(channel)[sample] *= directLevel; + } + + diagnosticProcessedBlocks.fetch_add(1, std::memory_order_relaxed); + diagnosticProcessedSamples.fetch_add( + static_cast<std::uint64_t>(numSamples), + std::memory_order_relaxed); + diagnosticNonFiniteRecoveries.fetch_add( + nonFiniteCount, std::memory_order_relaxed); + diagnosticLastBlockDownPeak.store(downPeak, std::memory_order_relaxed); + diagnosticLastBlockUpPeak.store(upPeak, std::memory_order_relaxed); +} + +void NAMPolyOctaver::processVoicesForTesting( + const float* const* inputs, + float* const* octaveDownOutputs, + float* const* octaveUpOutputs, + int numChannels, + int numSamples) noexcept +{ + juce::ScopedNoDenormals noDenormals; + + synchroniseProfileTargets(); + + if (! prepared.load(std::memory_order_acquire) + || inputs == nullptr + || octaveDownOutputs == nullptr + || octaveUpOutputs == nullptr + || numSamples <= 0) + { + return; + } + + const int processedChannels = juce::jlimit( + 0, maximumChannels, numChannels); + std::uint64_t nonFiniteCount = 0; + float downPeak = 0.0f; + float upPeak = 0.0f; + for (int channel = 0; channel < processedChannels; ++channel) + { + if (inputs[channel] == nullptr + || octaveDownOutputs[channel] == nullptr + || octaveUpOutputs[channel] == nullptr) + { + ++nonFiniteCount; + continue; + } + + for (int sample = 0; sample < numSamples; ++sample) + { + const VoiceFrame voices = processVoiceSample( + channel, + inputs[channel][sample], + true, + true, + nonFiniteCount); + octaveDownOutputs[channel][sample] = voices.octaveDown; + octaveUpOutputs[channel][sample] = voices.octaveUp; + downPeak = juce::jmax(downPeak, std::abs(voices.octaveDown)); + upPeak = juce::jmax(upPeak, std::abs(voices.octaveUp)); + } + } + + diagnosticProcessedBlocks.fetch_add(1, std::memory_order_relaxed); + diagnosticProcessedSamples.fetch_add( + static_cast<std::uint64_t>(numSamples), + std::memory_order_relaxed); + diagnosticNonFiniteRecoveries.fetch_add( + nonFiniteCount, std::memory_order_relaxed); + diagnosticLastBlockDownPeak.store(downPeak, std::memory_order_relaxed); + diagnosticLastBlockUpPeak.store(upPeak, std::memory_order_relaxed); +} + +NAMPolyOctaver::Diagnostics NAMPolyOctaver::getDiagnostics() const noexcept +{ + Diagnostics result; + result.sampleRate = static_cast<double>( + diagnosticSampleRate.load(std::memory_order_relaxed)); + result.processingSampleRate = result.sampleRate + / static_cast<double>(resampleFactor); + result.preparedMaximumBlockSize = + diagnosticMaximumBlockSize.load(std::memory_order_relaxed); + result.activeBandCount = + diagnosticActiveBandCount.load(std::memory_order_relaxed); + result.octaveUpBandCount = + diagnosticOctaveUpBandCount.load(std::memory_order_relaxed); + result.instrumentProfile = requestedInstrumentProfile.load( + std::memory_order_relaxed) == 1 ? 1 : 0; + result.multirateFactor = resampleFactor; + result.lowestBandCentreHz = + diagnosticLowestBandCentreHz.load(std::memory_order_relaxed); + result.highestBandCentreHz = + diagnosticHighestBandCentreHz.load(std::memory_order_relaxed); + result.maximumGeneratedUpFrequencyHz = + 2.0f * result.highestBandCentreHz; + result.octaveUpPassbandHz = result.maximumGeneratedUpFrequencyHz; + result.octaveUpStopbandHz = juce::jmin( + static_cast<float>(result.sampleRate * 0.5), + nominalInterpolatorStopbandHz + * static_cast<float>(result.sampleRate / 48000.0)); + result.wetAntiAliasCutoffHz = + diagnosticWetAntiAliasCutoffHz.load(std::memory_order_relaxed); + result.wetAntiAliasOrder = wetAntiAliasOrder; + result.reportedLatencySamples = getLatencySamples(); + result.processedBlocks = + diagnosticProcessedBlocks.load(std::memory_order_relaxed); + result.processedSamples = + diagnosticProcessedSamples.load(std::memory_order_relaxed); + result.fastPathBlocks = + diagnosticFastPathBlocks.load(std::memory_order_relaxed); + result.nonFiniteRecoveries = + diagnosticNonFiniteRecoveries.load(std::memory_order_relaxed); + result.lastBlockDownPeak = + diagnosticLastBlockDownPeak.load(std::memory_order_relaxed); + result.lastBlockUpPeak = + diagnosticLastBlockUpPeak.load(std::memory_order_relaxed); + return result; +} + +void NAMPolyOctaver::resetDiagnostics() noexcept +{ + diagnosticProcessedBlocks.store(0, std::memory_order_relaxed); + diagnosticProcessedSamples.store(0, std::memory_order_relaxed); + diagnosticFastPathBlocks.store(0, std::memory_order_relaxed); + diagnosticNonFiniteRecoveries.store(0, std::memory_order_relaxed); + diagnosticLastBlockDownPeak.store(0.0f, std::memory_order_relaxed); + diagnosticLastBlockUpPeak.store(0.0f, std::memory_order_relaxed); +} + +NAMPolyOctaver::SelfTestResult NAMPolyOctaver::runDeterministicSelfTest( + double sampleRate) +{ + SelfTestResult result; + const double safeSampleRate = sampleRate > 1000.0 + ? sampleRate + : 48000.0; + constexpr double twoPi = 2.0 * juce::MathConstants<double>::pi; + + { + constexpr int sampleCount = 257; + juce::AudioBuffer<float> buffer(maximumChannels, sampleCount); + juce::AudioBuffer<float> reference(maximumChannels, sampleCount); + for (int channel = 0; channel < maximumChannels; ++channel) + { + auto* const samples = buffer.getWritePointer(channel); + for (int sample = 0; sample < sampleCount; ++sample) + { + const double time = static_cast<double>(sample) + / safeSampleRate; + samples[sample] = static_cast<float>( + 0.17 * std::sin(twoPi * (110.0 + 63.0 * channel) * time) + + 0.04 * std::sin( + twoPi * (701.0 + 296.0 * channel) * time + 0.2)); + } + } + reference.makeCopyOf(buffer); + NAMPolyOctaver bypass; + bypass.prepare(safeSampleRate, sampleCount); + bypass.processBlock(buffer); + result.exactBypassPassed = true; + for (int channel = 0; channel < maximumChannels; ++channel) + { + result.exactBypassPassed = result.exactBypassPassed + && std::memcmp( + buffer.getReadPointer(channel), + reference.getReadPointer(channel), + static_cast<std::size_t>(sampleCount) * sizeof(float)) == 0; + } + + NAMPolyOctaver silence; + silence.setLevels(0.0f, 0.0f, 0.0f); + silence.prepare(safeSampleRate, sampleCount); + silence.processBlock(reference); + result.exactSilencePassed = true; + for (int channel = 0; channel < maximumChannels; ++channel) + { + const auto* const samples = reference.getReadPointer(channel); + for (int sample = 0; sample < sampleCount; ++sample) + result.exactSilencePassed = result.exactSilencePassed + && samples[sample] == 0.0f; + } + } + + const int streamSampleCount = juce::jmax( + 8192, static_cast<int>(std::ceil(safeSampleRate * 0.4)) + 5); + std::vector<float> inputLeft( + static_cast<std::size_t>(streamSampleCount)); + std::vector<float> inputRight( + static_cast<std::size_t>(streamSampleCount)); + for (int sample = 0; sample < streamSampleCount; ++sample) + { + const double time = static_cast<double>(sample) / safeSampleRate; + inputLeft[static_cast<std::size_t>(sample)] = static_cast<float>( + 0.16 * std::sin(twoPi * 110.0 * time) + + 0.07 * std::sin(twoPi * 713.0 * time + 0.31)); + inputRight[static_cast<std::size_t>(sample)] = static_cast<float>( + 0.14 * std::sin(twoPi * 173.0 * time + 0.17) + + 0.05 * std::sin(twoPi * 997.0 * time + 0.83)); + } + + auto renderWholeStream = [&inputLeft, + &inputRight, + streamSampleCount]( + NAMPolyOctaver& processor, + std::array<std::vector<float>, maximumChannels>& down, + std::array<std::vector<float>, maximumChannels>& up) + { + for (int channel = 0; channel < maximumChannels; ++channel) + { + down[static_cast<std::size_t>(channel)].assign( + static_cast<std::size_t>(streamSampleCount), 0.0f); + up[static_cast<std::size_t>(channel)].assign( + static_cast<std::size_t>(streamSampleCount), 0.0f); + } + const float* inputChannels[] { inputLeft.data(), inputRight.data() }; + float* downChannels[] { down[0].data(), down[1].data() }; + float* upChannels[] { up[0].data(), up[1].data() }; + processor.processVoicesForTesting( + inputChannels, + downChannels, + upChannels, + maximumChannels, + streamSampleCount); + }; + + std::array<std::vector<float>, maximumChannels> resetDownA; + std::array<std::vector<float>, maximumChannels> resetUpA; + std::array<std::vector<float>, maximumChannels> resetDownB; + std::array<std::vector<float>, maximumChannels> resetUpB; + NAMPolyOctaver resetProcessor; + resetProcessor.prepare(safeSampleRate, 257); + renderWholeStream(resetProcessor, resetDownA, resetUpA); + resetProcessor.reset(); + renderWholeStream(resetProcessor, resetDownB, resetUpB); + result.maximumResetDifference = 0.0f; + for (int channel = 0; channel < maximumChannels; ++channel) + { + const auto channelIndex = static_cast<std::size_t>(channel); + result.maximumResetDifference = juce::jmax( + result.maximumResetDifference, + maximumAbsoluteDifference( + resetDownA[channelIndex], resetDownB[channelIndex])); + result.maximumResetDifference = juce::jmax( + result.maximumResetDifference, + maximumAbsoluteDifference( + resetUpA[channelIndex], resetUpB[channelIndex])); + } + result.resetDeterminismPassed = result.maximumResetDifference == 0.0f; + + NAMPolyOctaver partitionProcessor; + partitionProcessor.prepare(safeSampleRate, 257); + std::array<std::vector<float>, maximumChannels> partitionDown; + std::array<std::vector<float>, maximumChannels> partitionUp; + for (int channel = 0; channel < maximumChannels; ++channel) + { + partitionDown[static_cast<std::size_t>(channel)].assign( + static_cast<std::size_t>(streamSampleCount), 0.0f); + partitionUp[static_cast<std::size_t>(channel)].assign( + static_cast<std::size_t>(streamSampleCount), 0.0f); + } + constexpr std::array<int, 11> partitionPattern { + 1, 5, 7, 8, 13, 2, 31, 64, 3, 127, 11 + }; + int offset = 0; + std::size_t partitionIndex = 0; + while (offset < streamSampleCount) + { + const int count = juce::jmin( + partitionPattern[partitionIndex % partitionPattern.size()], + streamSampleCount - offset); + const float* inputChannels[] { + inputLeft.data() + offset, + inputRight.data() + offset + }; + float* downChannels[] { + partitionDown[0].data() + offset, + partitionDown[1].data() + offset + }; + float* upChannels[] { + partitionUp[0].data() + offset, + partitionUp[1].data() + offset + }; + partitionProcessor.processVoicesForTesting( + inputChannels, + downChannels, + upChannels, + maximumChannels, + count); + offset += count; + ++partitionIndex; + } + result.maximumPartitionDifference = 0.0f; + for (int channel = 0; channel < maximumChannels; ++channel) + { + const auto channelIndex = static_cast<std::size_t>(channel); + result.maximumPartitionDifference = juce::jmax( + result.maximumPartitionDifference, + maximumAbsoluteDifference( + resetDownA[channelIndex], partitionDown[channelIndex])); + result.maximumPartitionDifference = juce::jmax( + result.maximumPartitionDifference, + maximumAbsoluteDifference( + resetUpA[channelIndex], partitionUp[channelIndex])); + } + result.partitionInvariantPassed = + result.maximumPartitionDifference == 0.0f; + + { + NAMPolyOctaver stereoProcessor; + stereoProcessor.prepare(safeSampleRate, 257); + std::vector<float> silent( + static_cast<std::size_t>(streamSampleCount), 0.0f); + std::array<std::vector<float>, maximumChannels> down; + std::array<std::vector<float>, maximumChannels> up; + for (int channel = 0; channel < maximumChannels; ++channel) + { + down[static_cast<std::size_t>(channel)].assign( + static_cast<std::size_t>(streamSampleCount), 0.0f); + up[static_cast<std::size_t>(channel)].assign( + static_cast<std::size_t>(streamSampleCount), 0.0f); + } + const float* inputChannels[] { inputLeft.data(), silent.data() }; + float* downChannels[] { down[0].data(), down[1].data() }; + float* upChannels[] { up[0].data(), up[1].data() }; + stereoProcessor.processVoicesForTesting( + inputChannels, + downChannels, + upChannels, + maximumChannels, + streamSampleCount); + result.maximumSilentChannelLeak = juce::jmax( + maximumAbsoluteValue(down[1]), maximumAbsoluteValue(up[1])); + result.stereoIsolationPassed = result.maximumSilentChannelLeak == 0.0f; + + stereoProcessor.reset(); + const float* identicalInputs[] { inputLeft.data(), inputLeft.data() }; + stereoProcessor.processVoicesForTesting( + identicalInputs, + downChannels, + upChannels, + maximumChannels, + streamSampleCount); + result.maximumIdenticalStereoDifference = juce::jmax( + maximumAbsoluteDifference(down[0], down[1]), + maximumAbsoluteDifference(up[0], up[1])); + result.identicalStereoParityPassed = + result.maximumIdenticalStereoDifference == 0.0f; + } + + { + NAMPolyOctaver finiteProcessor; + finiteProcessor.prepare(safeSampleRate, 257); + std::vector<float> contaminatedLeft = inputLeft; + std::vector<float> contaminatedRight = inputRight; + contaminatedLeft[contaminatedLeft.size() / 3] + = std::numeric_limits<float>::quiet_NaN(); + contaminatedRight[contaminatedRight.size() / 2] + = std::numeric_limits<float>::infinity(); + std::array<std::vector<float>, maximumChannels> down; + std::array<std::vector<float>, maximumChannels> up; + for (int channel = 0; channel < maximumChannels; ++channel) + { + down[static_cast<std::size_t>(channel)].assign( + static_cast<std::size_t>(streamSampleCount), 0.0f); + up[static_cast<std::size_t>(channel)].assign( + static_cast<std::size_t>(streamSampleCount), 0.0f); + } + const float* inputChannels[] { + contaminatedLeft.data(), contaminatedRight.data() + }; + float* downChannels[] { down[0].data(), down[1].data() }; + float* upChannels[] { up[0].data(), up[1].data() }; + finiteProcessor.processVoicesForTesting( + inputChannels, + downChannels, + upChannels, + maximumChannels, + streamSampleCount); + bool outputsAreFinite = true; + for (int channel = 0; channel < maximumChannels; ++channel) + { + for (const float value : down[static_cast<std::size_t>(channel)]) + outputsAreFinite = outputsAreFinite && std::isfinite(value); + for (const float value : up[static_cast<std::size_t>(channel)]) + outputsAreFinite = outputsAreFinite && std::isfinite(value); + } + result.nonFiniteRecoveries = + finiteProcessor.getDiagnostics().nonFiniteRecoveries; + const std::size_t tailBegin = static_cast<std::size_t>( + streamSampleCount * 3 / 4); + const double tailRms = vectorRms(down[0], tailBegin) + + vectorRms(up[0], tailBegin) + + vectorRms(down[1], tailBegin) + + vectorRms(up[1], tailBegin); + result.finiteRecoveryPassed = outputsAreFinite + && result.nonFiniteRecoveries >= 2 + && tailRms > 1.0e-4; + } + + const int toneSampleCount = juce::jmax( + 4096, static_cast<int>(std::ceil(safeSampleRate * 1.5))); + const std::size_t toneAnalysisBegin = static_cast<std::size_t>( + juce::jlimit(0, toneSampleCount - 1, + static_cast<int>(std::ceil(safeSampleRate * 0.5)))); + auto renderTone = [safeSampleRate, toneSampleCount, twoPi]( + double frequency, + std::vector<float>& down, + std::vector<float>& up, + int instrumentProfile = 0) + { + std::vector<float> input(static_cast<std::size_t>(toneSampleCount)); + down.assign(static_cast<std::size_t>(toneSampleCount), 0.0f); + up.assign(static_cast<std::size_t>(toneSampleCount), 0.0f); + for (int sample = 0; sample < toneSampleCount; ++sample) + { + input[static_cast<std::size_t>(sample)] = static_cast<float>( + 0.2 * std::sin(twoPi * frequency + * static_cast<double>(sample) / safeSampleRate)); + } + NAMPolyOctaver processor; + processor.setInstrumentProfile(instrumentProfile); + processor.prepare(safeSampleRate, 257); + const float* inputChannels[] { input.data() }; + float* downChannels[] { down.data() }; + float* upChannels[] { up.data() }; + processor.processVoicesForTesting( + inputChannels, downChannels, upChannels, 1, toneSampleCount); + }; + + result.minimumTargetDominanceDb = + std::numeric_limits<float>::infinity(); + bool allTargetsPresent = true; + double validStopbandReferenceRms = 0.0; + for (const double frequency : { 110.0, 220.0, 440.0, 880.0 }) + { + std::vector<float> down; + std::vector<float> up; + renderTone(frequency, down, up); + const double downTarget = toneMagnitude( + down, toneAnalysisBegin, safeSampleRate, frequency * 0.5); + const double downResidual = toneMagnitude( + down, toneAnalysisBegin, safeSampleRate, frequency); + const double upTarget = toneMagnitude( + up, toneAnalysisBegin, safeSampleRate, frequency * 2.0); + const double upResidual = toneMagnitude( + up, toneAnalysisBegin, safeSampleRate, frequency); + const float downDominance = ratioToDecibels( + downTarget, downResidual); + const float upDominance = ratioToDecibels(upTarget, upResidual); + result.minimumTargetDominanceDb = juce::jmin( + result.minimumTargetDominanceDb, + juce::jmin(downDominance, upDominance)); + allTargetsPresent = allTargetsPresent + && downTarget > 0.02 + && upTarget > 0.02; + if (frequency == 880.0) + validStopbandReferenceRms = vectorRms(up, toneAnalysisBegin); + } + result.targetFrequencyPassed = allTargetsPresent + && result.minimumTargetDominanceDb >= 30.0f; + + result.minimumBassLowNoteDominanceDb = + std::numeric_limits<float>::infinity(); + bool allBassLowNotesPresent = true; + for (const double frequency : { 30.8677, 41.2034 }) + { + std::vector<float> down; + std::vector<float> up; + renderTone(frequency, down, up, 1); + const double downTarget = toneMagnitude( + down, toneAnalysisBegin, safeSampleRate, frequency * 0.5); + const double downResidual = toneMagnitude( + down, toneAnalysisBegin, safeSampleRate, frequency); + const double upTarget = toneMagnitude( + up, toneAnalysisBegin, safeSampleRate, frequency * 2.0); + const double upResidual = toneMagnitude( + up, toneAnalysisBegin, safeSampleRate, frequency); + result.minimumBassLowNoteDominanceDb = juce::jmin( + result.minimumBassLowNoteDominanceDb, + juce::jmin( + ratioToDecibels(downTarget, downResidual), + ratioToDecibels(upTarget, upResidual))); + allBassLowNotesPresent = allBassLowNotesPresent + && downTarget > 0.006 + && upTarget > 0.006; + } + result.bassLowNotePassed = allBassLowNotesPresent + && result.minimumBassLowNoteDominanceDb >= 24.0f; + + // Live Guitar->Bass->Guitar publication is exercised at hostile eight- + // sample and uneven callback boundaries. All 84 ERB states keep advancing + // regardless of profile, so the only difference is the 20 ms band-gain + // ramp and callback partitioning remains sample-identical. + const int switchSampleCount = juce::jmax( + 8192, static_cast<int>(safeSampleRate * 0.75)); + std::vector<float> switchInput( + static_cast<std::size_t>(switchSampleCount)); + for (int sample = 0; sample < switchSampleCount; ++sample) + { + switchInput[static_cast<std::size_t>(sample)] = static_cast<float>( + 0.18 * std::sin(twoPi * 41.2034 + * static_cast<double>(sample) / safeSampleRate)); + } + const int bassAt = switchSampleCount / 3; + const int guitarAt = switchSampleCount * 2 / 3; + auto renderProfileSwitch = [&] ( + const std::vector<int>& partitions, + std::vector<float>& output) + { + output.assign( + static_cast<std::size_t>(switchSampleCount), 0.0f); + NAMPolyOctaver processor; + processor.setLevels(0.0f, 0.72f, 0.45f); + processor.prepare(safeSampleRate, 257); + int offset = 0; + std::size_t partitionIndex = 0; + while (offset < switchSampleCount) + { + int count = partitions[partitionIndex % partitions.size()]; + count = juce::jmin(count, switchSampleCount - offset); + if (offset < bassAt && offset + count > bassAt) + count = bassAt - offset; + if (offset < guitarAt && offset + count > guitarAt) + count = guitarAt - offset; + if (offset == bassAt) + processor.setInstrumentProfile(1); + else if (offset == guitarAt) + processor.setInstrumentProfile(0); + const float* inputChannels[] { + switchInput.data() + offset + }; + std::vector<float> down(static_cast<std::size_t>(count)); + std::vector<float> up(static_cast<std::size_t>(count)); + float* downChannels[] { down.data() }; + float* upChannels[] { up.data() }; + processor.processVoicesForTesting( + inputChannels, downChannels, upChannels, 1, count); + for (int sample = 0; sample < count; ++sample) + { + output[static_cast<std::size_t>(offset + sample)] = + down[static_cast<std::size_t>(sample)] * 0.72f + + up[static_cast<std::size_t>(sample)] * 0.45f; + } + offset += count; + ++partitionIndex; + } + }; + std::vector<float> eightSampleSwitch; + std::vector<float> unevenSwitch; + renderProfileSwitch({ 8 }, eightSampleSwitch); + renderProfileSwitch( + { 1, 7, 3, 8, 2, 5, 8, 4 }, unevenSwitch); + result.maximumProfileSwitchPartitionDifference = + maximumAbsoluteDifference(eightSampleSwitch, unevenSwitch); + result.maximumProfileSwitchDelta = 0.0f; + bool switchOutputFinite = true; + for (std::size_t index = 1; index < eightSampleSwitch.size(); ++index) + { + switchOutputFinite = switchOutputFinite + && std::isfinite(eightSampleSwitch[index]); + result.maximumProfileSwitchDelta = juce::jmax( + result.maximumProfileSwitchDelta, + std::abs(eightSampleSwitch[index] + - eightSampleSwitch[index - 1])); + } + result.liveProfileSwitchPartitionPassed = + result.maximumProfileSwitchPartitionDifference == 0.0f; + result.liveProfileSwitchPassed = switchOutputFinite + && result.maximumProfileSwitchDelta < 0.20f; + + { + std::vector<float> rejectedDown; + std::vector<float> rejectedUp; + renderTone(safeSampleRate * 0.31, rejectedDown, rejectedUp); + const double rejectedRms = vectorRms( + rejectedUp, toneAnalysisBegin); + result.stopbandRejectionDb = ratioToDecibels( + rejectedRms, validStopbandReferenceRms); + result.stopbandRejectionPassed = + validStopbandReferenceRms > 1.0e-4 + && result.stopbandRejectionDb <= -70.0f; + } + + result.passed = result.exactBypassPassed + && result.exactSilencePassed + && result.resetDeterminismPassed + && result.partitionInvariantPassed + && result.stereoIsolationPassed + && result.identicalStereoParityPassed + && result.finiteRecoveryPassed + && result.targetFrequencyPassed + && result.bassLowNotePassed + && result.liveProfileSwitchPassed + && result.liveProfileSwitchPartitionPassed + && result.stopbandRejectionPassed; + return result; +} diff --git a/Source/NAMPolyOctaver.h b/Source/NAMPolyOctaver.h new file mode 100644 index 0000000..f4f05dd --- /dev/null +++ b/Source/NAMPolyOctaver.h @@ -0,0 +1,320 @@ +#pragma once + +#include <JuceHeader.h> + +#include <array> +#include <atomic> +#include <cstddef> +#include <cstdint> + +/** + * Stereo, fixed-ratio polyphonic octave generator for the NAM Rack. + * + * The DSP follows Steven Schulteis' MIT-licensed terrarium-poly-octave + * implementation of Etienne Thuillier's ERB-PS2 method: a 6:1 multirate + * front end, 80 complex ERB bands, and polyphase reconstruction. This host + * implementation keeps independent fixed state for two channels and carries + * the six-sample resampling phase across arbitrary callback partitions. + * + * prepare(), reset(), and parameter writes follow the normal AudioProcessor + * lifecycle. processBlock() performs no allocation, locking, logging, file + * I/O, coefficient design, or dynamic container growth. + */ +class NAMPolyOctaver final +{ +public: + static constexpr int maximumChannels = 2; + // Four sub-guitar ERB bands extend the same filter bank to 25.3 Hz for + // five-string bass B0. Guitar keeps the original 60 Hz first band and is + // therefore the bit-compatible default voicing. + static constexpr int bassExtendedBandCount = 4; + static constexpr int maximumBands = 84; + static constexpr int resampleFactor = 6; + + struct VoiceFrame + { + float octaveDown = 0.0f; + float octaveUp = 0.0f; + }; + + struct Diagnostics + { + double sampleRate = 0.0; + double processingSampleRate = 0.0; + int preparedMaximumBlockSize = 0; + int activeBandCount = 0; + int octaveUpBandCount = 0; + int instrumentProfile = 0; + int multirateFactor = 0; + float lowestBandCentreHz = 0.0f; + float highestBandCentreHz = 0.0f; + float octaveUpPassbandHz = 0.0f; + float octaveUpStopbandHz = 0.0f; + float wetAntiAliasCutoffHz = 0.0f; + int wetAntiAliasOrder = 0; + float maximumGeneratedUpFrequencyHz = 0.0f; + int reportedLatencySamples = 0; + std::uint64_t processedBlocks = 0; + std::uint64_t processedSamples = 0; + std::uint64_t fastPathBlocks = 0; + std::uint64_t nonFiniteRecoveries = 0; + float lastBlockDownPeak = 0.0f; + float lastBlockUpPeak = 0.0f; + }; + + struct SelfTestResult + { + bool passed = false; + bool exactBypassPassed = false; + bool exactSilencePassed = false; + bool resetDeterminismPassed = false; + bool partitionInvariantPassed = false; + bool stereoIsolationPassed = false; + bool identicalStereoParityPassed = false; + bool finiteRecoveryPassed = false; + bool targetFrequencyPassed = false; + bool bassLowNotePassed = false; + bool liveProfileSwitchPassed = false; + bool liveProfileSwitchPartitionPassed = false; + bool stopbandRejectionPassed = false; + float maximumResetDifference = 0.0f; + float maximumPartitionDifference = 0.0f; + float maximumSilentChannelLeak = 0.0f; + float maximumIdenticalStereoDifference = 0.0f; + float minimumTargetDominanceDb = 0.0f; + float minimumBassLowNoteDominanceDb = 0.0f; + float maximumProfileSwitchDelta = 0.0f; + float maximumProfileSwitchPartitionDifference = 0.0f; + float stopbandRejectionDb = 0.0f; + std::uint64_t nonFiniteRecoveries = 0; + }; + + NAMPolyOctaver() noexcept; + + /** Designs the sample-rate-dependent ERB bank and resets all history. */ + void prepare(double sampleRate, int maximumBlockSize) noexcept; + + /** Clears all phase/filter/resampling history deterministically. */ + void reset() noexcept; + + /** + * Sets independent linear gains. Values are clamped to [0, 1.25] and + * consumed through lock-free atomics at the next audio callback. A + * 20-millisecond sample-domain ramp is applied by processBlock(). + */ + void setLevels(float directLevel, + float octaveDownLevel, + float octaveUpLevel) noexcept; + + /** Selects 0=Guitar (60 Hz first ERB band) or 1=Bass (25.3 Hz). */ + void setInstrumentProfile(int profile) noexcept; + + /** In-place production mixer: Direct + Octave Down + Octave Up. */ + void processBlock(juce::AudioBuffer<float>& buffer) noexcept; + + /** + * Allocation-free raw-voice hook for deterministic headless tests. + * + * The input and output arrays must each contain numChannels valid channel + * pointers. numChannels is clamped to the supported mono/stereo range. + * This advances the exact production filter/resampling state but does not + * apply the Direct/Down/Up level smoothers. + */ + void processVoicesForTesting(const float* const* inputs, + float* const* octaveDownOutputs, + float* const* octaveUpOutputs, + int numChannels, + int numSamples) noexcept; + + [[nodiscard]] Diagnostics getDiagnostics() const noexcept; + void resetDiagnostics() noexcept; + + /** + * Runs allocation-using deterministic validation on the calling thread. + * This is a headless QA hook and must never be called from the audio + * callback. Subjective octave tone/voicing is deliberately not asserted. + */ + [[nodiscard]] static SelfTestResult runDeterministicSelfTest( + double sampleRate = 48000.0); + + [[nodiscard]] bool isPrepared() const noexcept + { + return prepared.load(std::memory_order_acquire); + } + + /** The wet path is causal; its FIR/chunk delay is deliberately not PDC. */ + [[nodiscard]] static constexpr int getLatencySamples() noexcept { return 0; } + +private: + struct ComplexValue + { + float real = 0.0f; + float imag = 0.0f; + }; + + struct BandCoefficients + { + float centreHz = 0.0f; + float bandwidthHz = 0.0f; + float d0 = 0.0f; + ComplexValue d1; + ComplexValue d2; + ComplexValue c1; + ComplexValue c2; + }; + + struct BandChannelState + { + ComplexValue state1; + ComplexValue state2; + ComplexValue previousBandOutput; + float octaveDownSign = 1.0f; + }; + + template <std::size_t size> + struct FixedRing + { + static_assert(size > 0 && (size & (size - 1)) == 0, + "FixedRing size must be a power of two"); + + void push(float value) noexcept + { + position = (position - 1U) & (size - 1U); + samples[position] = value; + } + + [[nodiscard]] float atAge(std::size_t age) const noexcept + { + return samples[(position + age) & (size - 1U)]; + } + + void clear() noexcept + { + samples.fill(0.0f); + position = 0; + } + + std::array<float, size> samples {}; + std::size_t position = 0; + }; + + struct DecimatorState + { + float process(const std::array<float, resampleFactor>& input) noexcept; + void reset() noexcept; + + [[nodiscard]] float stageOne() const noexcept; + [[nodiscard]] float stageTwo() const noexcept; + + FixedRing<32> fullRate; + FixedRing<16> oneThirdRate; + }; + + struct InterpolatorState + { + void process(float input, + std::array<float, resampleFactor>& output) noexcept; + void reset() noexcept; + + [[nodiscard]] float stageOneEven() const noexcept; + [[nodiscard]] float stageOneOdd() const noexcept; + [[nodiscard]] float stageTwoPhaseZero() const noexcept; + [[nodiscard]] float stageTwoPhaseOne() const noexcept; + [[nodiscard]] float stageTwoPhaseTwo() const noexcept; + + FixedRing<32> reducedRate; + FixedRing<16> oneThirdRate; + }; + + struct ChannelRateState + { + DecimatorState decimator; + InterpolatorState downInterpolator; + InterpolatorState upInterpolator; + std::array<float, resampleFactor> pendingInput {}; + std::array<float, resampleFactor> pendingDownOutput {}; + std::array<float, resampleFactor> pendingUpOutput {}; + int phase = 0; + bool downInterpolatorActive = false; + bool upInterpolatorActive = false; + float octaveDownDcInput = 0.0f; + float octaveDownDcOutput = 0.0f; + + void reset() noexcept; + }; + + static constexpr float levelRampSeconds = 0.020f; + static constexpr float phaseEnergyFloor = 1.0e-20f; + static constexpr int wetAntiAliasOrder = 34; + + static float bandCentreHz(int erbIndex) noexcept; + static float bandBandwidthHz(int erbIndex) noexcept; + static float fastInverseSqrt(float value) noexcept; + static float fastSqrt(float value) noexcept; + static ComplexValue multiply(ComplexValue left, + ComplexValue right) noexcept; + + void designFilterBank(double sampleRate) noexcept; + void resetDspState() noexcept; + void synchroniseLevelTargets() noexcept; + void synchroniseProfileTargets() noexcept; + VoiceFrame processVoiceSample(int channel, + float input, + bool generateOctaveDown, + bool generateOctaveUp, + std::uint64_t& nonFiniteCount) noexcept; + VoiceFrame processReducedRateSample(int channel, + float input, + bool generateOctaveDown, + bool generateOctaveUp, + std::uint64_t& nonFiniteCount) noexcept; + + [[nodiscard]] bool wetPathIsExactlySilent() const noexcept; + [[nodiscard]] bool directPathIsExactlyUnity() const noexcept; + [[nodiscard]] bool allPathsAreExactlySilent() const noexcept; + + std::array<BandCoefficients, maximumBands> bands {}; + std::array<std::array<BandChannelState, maximumBands>, maximumChannels> + channelStates {}; + std::array<ChannelRateState, maximumChannels> channelRateStates {}; + int activeBandCount = 0; + int octaveUpBandCount = 0; + bool dspStateIsReset = true; + + std::atomic<float> requestedDirectLevel { 1.0f }; + std::atomic<float> requestedOctaveDownLevel { 0.0f }; + std::atomic<float> requestedOctaveUpLevel { 0.0f }; + std::atomic<int> requestedInstrumentProfile { 0 }; + juce::SmoothedValue<float, juce::ValueSmoothingTypes::Linear> + smoothedDirectLevel; + juce::SmoothedValue<float, juce::ValueSmoothingTypes::Linear> + smoothedOctaveDownLevel; + juce::SmoothedValue<float, juce::ValueSmoothingTypes::Linear> + smoothedOctaveUpLevel; + std::array< + juce::SmoothedValue<float, juce::ValueSmoothingTypes::Linear>, + maximumChannels> smoothedBassProfile; + + std::atomic<bool> prepared { false }; + std::atomic<float> diagnosticSampleRate { 0.0f }; + std::atomic<int> diagnosticMaximumBlockSize { 0 }; + std::atomic<int> diagnosticActiveBandCount { 0 }; + std::atomic<int> diagnosticOctaveUpBandCount { 0 }; + float octaveDownHighPassCoefficient = 0.0f; + std::atomic<float> diagnosticLowestBandCentreHz { 0.0f }; + std::atomic<float> diagnosticHighestBandCentreHz { 0.0f }; + std::atomic<float> diagnosticWetAntiAliasCutoffHz { 0.0f }; + std::atomic<std::uint64_t> diagnosticProcessedBlocks { 0 }; + std::atomic<std::uint64_t> diagnosticProcessedSamples { 0 }; + std::atomic<std::uint64_t> diagnosticFastPathBlocks { 0 }; + std::atomic<std::uint64_t> diagnosticNonFiniteRecoveries { 0 }; + std::atomic<float> diagnosticLastBlockDownPeak { 0.0f }; + std::atomic<float> diagnosticLastBlockUpPeak { 0.0f }; + + static_assert(std::atomic<float>::is_always_lock_free, + "NAMPolyOctaver requires lock-free float atomics"); + static_assert(std::atomic<std::uint64_t>::is_always_lock_free, + "NAMPolyOctaver requires lock-free diagnostic counters"); + + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(NAMPolyOctaver) +}; diff --git a/Source/OwnPitchEngine.cpp b/Source/OwnPitchEngine.cpp index 4a0dc3c..1936fb4 100644 --- a/Source/OwnPitchEngine.cpp +++ b/Source/OwnPitchEngine.cpp @@ -84,16 +84,19 @@ static bool writeOwnPitchLayerDumpWav ( } juce::WavAudioFormat format; - std::unique_ptr<juce::FileOutputStream> stream (file.createOutputStream()); + std::unique_ptr<juce::OutputStream> stream (file.createOutputStream()); if (stream == nullptr) return false; - std::unique_ptr<juce::AudioFormatWriter> writer ( - format.createWriterFor (stream.get(), sampleRate, static_cast<unsigned int> (numChannels), 24, {}, 0)); + auto writer = format.createWriterFor ( + stream, + juce::AudioFormatWriterOptions() + .withSampleRate (sampleRate) + .withNumChannels (numChannels) + .withBitsPerSample (24)); if (writer == nullptr) return false; - stream.release(); return writer->writeFromAudioSampleBuffer (buffer, 0, numSamples); } diff --git a/Source/PeakCache.h b/Source/PeakCache.h index aaf6bcb..d12037f 100644 --- a/Source/PeakCache.h +++ b/Source/PeakCache.h @@ -124,7 +124,11 @@ class PeakCache // Keep waveform generation serialized and low-impact; concurrent full-file // peak scans can steal disk/CPU from 32/64-sample monitoring callbacks. - juce::ThreadPool backgroundPool { 1 }; + juce::ThreadPool backgroundPool { + 1, + juce::Thread::osDefaultStackSize, + juce::Thread::Priority::low + }; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(PeakCache) }; diff --git a/Source/PitchResynthesizer.cpp b/Source/PitchResynthesizer.cpp index 406232a..53f5647 100644 --- a/Source/PitchResynthesizer.cpp +++ b/Source/PitchResynthesizer.cpp @@ -138,16 +138,19 @@ static bool writePitchLayerDumpWav ( } juce::WavAudioFormat format; - std::unique_ptr<juce::FileOutputStream> stream (file.createOutputStream()); + std::unique_ptr<juce::OutputStream> stream (file.createOutputStream()); if (stream == nullptr) return false; - std::unique_ptr<juce::AudioFormatWriter> writer ( - format.createWriterFor (stream.get(), sampleRate, static_cast<unsigned int> (numChannels), 24, {}, 0)); + auto writer = format.createWriterFor ( + stream, + juce::AudioFormatWriterOptions() + .withSampleRate (sampleRate) + .withNumChannels (numChannels) + .withBitsPerSample (24)); if (writer == nullptr) return false; - stream.release(); return writer->writeFromAudioSampleBuffer (buffer, 0, numSamples); } diff --git a/Source/PitchResynthesizer.h b/Source/PitchResynthesizer.h index 0bad878..bd91809 100644 --- a/Source/PitchResynthesizer.h +++ b/Source/PitchResynthesizer.h @@ -9,7 +9,7 @@ * PitchResynthesizer — Offline pitch correction from graphical edits. * * Takes original audio + edited notes, produces corrected audio. - * Uses the Studio13 native VSF renderer for graphical offline pitch-only edits. + * Uses the OpenStudio native VSF renderer for graphical offline pitch-only edits. * * Non-destructive: original audio is never modified. */ diff --git a/Source/PlaybackEngine.cpp b/Source/PlaybackEngine.cpp index 1735e82..c8cd832 100644 --- a/Source/PlaybackEngine.cpp +++ b/Source/PlaybackEngine.cpp @@ -1,16 +1,70 @@ #include "PlaybackEngine.h" #include <algorithm> #include <cmath> +#include <thread> namespace { -constexpr bool kAudioPlaybackDebugLogs = false; +constexpr unsigned int kPitchRouteScrubPreview = 1u << 0; +constexpr unsigned int kPitchRouteClipLivePreview = 1u << 1; +constexpr unsigned int kPitchRouteRenderedSegment = 1u << 2; +constexpr unsigned int kPitchRouteCorrectedSource = 1u << 3; + +#ifndef OPENSTUDIO_AUDIO_PLAYBACK_DEBUG + #define OPENSTUDIO_AUDIO_PLAYBACK_DEBUG 0 +#endif +#if OPENSTUDIO_AUDIO_PLAYBACK_DEBUG +constexpr bool kAudioPlaybackDebugLogs = true; static void logAudioPlayback(const juce::String& message) { - if (kAudioPlaybackDebugLogs) - juce::Logger::writeToLog("[audio.playback] " + message); + juce::Logger::writeToLog("[audio.playback] " + message); } + #define OPENSTUDIO_LOG_AUDIO_PLAYBACK(message) logAudioPlayback(message) +#else +constexpr bool kAudioPlaybackDebugLogs = false; + #define OPENSTUDIO_LOG_AUDIO_PLAYBACK(message) do { } while (false) +#endif + +class StereoStreamingSourceReader final : public juce::AudioFormatReader +{ +public: + explicit StereoStreamingSourceReader(std::unique_ptr<juce::AudioFormatReader> sourceReader) + : juce::AudioFormatReader(nullptr, sourceReader->getFormatName()), + source(std::move(sourceReader)) + { + sampleRate = source->sampleRate; + lengthInSamples = source->lengthInSamples; + numChannels = juce::jmin(static_cast<unsigned int>(2), source->numChannels); + bitsPerSample = source->bitsPerSample; + usesFloatingPointData = source->usesFloatingPointData; + metadataValues = source->metadataValues; + } + + bool readSamples(int* const* destSamples, + int numDestChannels, + int startOffsetInDestBuffer, + juce::int64 startSampleInFile, + int numSamples) override + { + int* shiftedDestinations[2] { nullptr, nullptr }; + const int channelsToRead = juce::jlimit(0, 2, numDestChannels); + for (int channel = 0; channel < channelsToRead; ++channel) + { + if (destSamples[channel] != nullptr) + shiftedDestinations[channel] = destSamples[channel] + startOffsetInDestBuffer; + } + + return source->read(shiftedDestinations, + channelsToRead, + startSampleInFile, + numSamples, + true); + } + +private: + std::unique_ptr<juce::AudioFormatReader> source; +}; static float peakForBuffer(const juce::AudioBuffer<float>& buffer, int numSamples) { @@ -131,109 +185,944 @@ float PlaybackEngine::applyFadeCurve(float t, int curveType) } } +void PlaybackEngine::StreamingContinuityState::reset( + int channels) noexcept +{ + lastOutput.fill(0.0f); + concealedOutput.fill(0.0f); + expectedNextTimelineTime = 0.0; + recoverySamplesRemaining = 0; + activeChannels = juce::jlimit(0, 2, channels); + hasOutputHistory = false; + hasExpectedTimelineTime = false; + concealing = false; +} + +bool PlaybackEngine::StreamingContinuityState::beginBlock( + bool sourceReady, + bool timelineContiguous, + int channels) noexcept +{ + const int boundedChannels = + juce::jlimit(0, 2, channels); + if (! timelineContiguous + || activeChannels != boundedChannels) + { + reset(boundedChannels); + } + + if (! sourceReady) + { + if (! concealing) + { + for (int channel = 0; + channel < activeChannels; + ++channel) + { + const float previous = + hasOutputHistory + && std::isfinite(lastOutput[ + static_cast<size_t>(channel)]) + ? lastOutput[ + static_cast<size_t>(channel)] + : 0.0f; + concealedOutput[ + static_cast<size_t>(channel)] = + previous; + } + } + + concealing = true; + recoverySamplesRemaining = 0; + return false; + } + + if (concealing) + { + concealing = false; + recoverySamplesRemaining = + STREAMING_RECOVERY_SAMPLES; + return true; + } + + return false; +} + +float PlaybackEngine::StreamingContinuityState::processSample( + int channel, + float sourceSample, + bool sourceReady) noexcept +{ + if (channel < 0 || channel >= activeChannels) + return sourceReady ? sourceSample : 0.0f; + + const auto index = static_cast<size_t>(channel); + float output = sourceSample; + + if (! sourceReady) + { + concealedOutput[index] = + std::isfinite(concealedOutput[index]) + ? concealedOutput[index] + * STREAMING_CONCEALMENT_DECAY + : 0.0f; + output = concealedOutput[index]; + } + else if (recoverySamplesRemaining > 0) + { + concealedOutput[index] = + std::isfinite(concealedOutput[index]) + ? concealedOutput[index] + * STREAMING_CONCEALMENT_DECAY + : 0.0f; + const float recoveryProgress = + static_cast<float>( + STREAMING_RECOVERY_SAMPLES + - recoverySamplesRemaining + + 1) + / static_cast<float>( + STREAMING_RECOVERY_SAMPLES); + output = concealedOutput[index] + + recoveryProgress + * (sourceSample + - concealedOutput[index]); + } + + lastOutput[index] = + std::isfinite(output) ? output : 0.0f; + return lastOutput[index]; +} + +void PlaybackEngine::StreamingContinuityState::advanceFrame( + bool sourceReady) noexcept +{ + if (sourceReady + && recoverySamplesRemaining > 0) + { + --recoverySamplesRemaining; + if (recoverySamplesRemaining == 0) + concealedOutput = lastOutput; + } + + hasOutputHistory = true; +} + +PlaybackEngine::StreamingContinuityState& +PlaybackEngine::getTrackPlaybackContinuityState( + const juce::String& trackId) noexcept +{ + juce::int64 trackKey = trackId.hashCode64(); + if (trackKey == 0) + trackKey = 1; + + ++trackPlaybackContinuityUseCounter; + if (trackPlaybackContinuityUseCounter == 0) + trackPlaybackContinuityUseCounter = 1; + + const auto startIndex = + static_cast<size_t>( + static_cast<juce::uint64>(trackKey) + % TRACK_PLAYBACK_CONTINUITY_SLOT_COUNT); + size_t emptyIndex = + TRACK_PLAYBACK_CONTINUITY_SLOT_COUNT; + size_t oldestIndex = startIndex; + juce::uint64 oldestUse = + std::numeric_limits<juce::uint64>::max(); + + for (size_t probe = 0; + probe < TRACK_PLAYBACK_CONTINUITY_SLOT_COUNT; + ++probe) + { + const auto index = + (startIndex + probe) + % TRACK_PLAYBACK_CONTINUITY_SLOT_COUNT; + auto& slot = + trackPlaybackContinuitySlots[index]; + if (slot.trackKey == trackKey) + { + slot.lastUseCounter = + trackPlaybackContinuityUseCounter; + return slot.continuity; + } + if (slot.trackKey == 0 + && emptyIndex + == TRACK_PLAYBACK_CONTINUITY_SLOT_COUNT) + { + emptyIndex = index; + } + if (slot.lastUseCounter < oldestUse) + { + oldestUse = slot.lastUseCounter; + oldestIndex = index; + } + } + + const auto selectedIndex = + emptyIndex + < TRACK_PLAYBACK_CONTINUITY_SLOT_COUNT + ? emptyIndex + : oldestIndex; + auto& selected = + trackPlaybackContinuitySlots[ + selectedIndex]; + selected = {}; + selected.trackKey = trackKey; + selected.lastUseCounter = + trackPlaybackContinuityUseCounter; + return selected.continuity; +} + +PlaybackEngine::StreamingContinuityRegressionResult +PlaybackEngine::runStreamingContinuityRegression() noexcept +{ + auto prepareMiss = + [] (StreamingContinuityState& state) + { + state.reset(1); + state.beginBlock(true, false, 1); + for (int sample = 0; sample < 16; ++sample) + { + state.processSample( + 0, 0.8f, true); + state.advanceFrame(true); + } + + const float preMiss = + state.lastOutput[0]; + state.beginBlock(false, true, 1); + float firstConcealed = 0.0f; + for (int sample = 0; sample < 16; ++sample) + { + const float concealed = + state.processSample( + 0, 0.0f, false); + if (sample == 0) + firstConcealed = concealed; + state.advanceFrame(false); + } + return std::pair<float, float>( + std::abs(firstConcealed - preMiss), + state.lastOutput[0]); + }; + + StreamingContinuityState fixedState; + const auto fixedMiss = + prepareMiss(fixedState); + std::array<float, + STREAMING_RECOVERY_SAMPLES> + fixedRecovery {}; + fixedState.beginBlock(true, true, 1); + float fixedPrevious = fixedMiss.second; + float recoveryMaximumStep = 0.0f; + for (int sample = 0; + sample < STREAMING_RECOVERY_SAMPLES; + ++sample) + { + const float output = + fixedState.processSample( + 0, -0.8f, true); + fixedRecovery[ + static_cast<size_t>(sample)] = + output; + recoveryMaximumStep = + juce::jmax( + recoveryMaximumStep, + std::abs(output - fixedPrevious)); + fixedPrevious = output; + fixedState.advanceFrame(true); + } + + StreamingContinuityState partitionedState; + prepareMiss(partitionedState); + std::array<float, + STREAMING_RECOVERY_SAMPLES> + partitionedRecovery {}; + for (int block = 0; block < 4; ++block) + { + partitionedState.beginBlock( + true, true, 1); + for (int sample = 0; sample < 16; ++sample) + { + const auto outputIndex = + static_cast<size_t>( + block * 16 + sample); + partitionedRecovery[outputIndex] = + partitionedState.processSample( + 0, -0.8f, true); + partitionedState.advanceFrame(true); + } + } + + float partitionMaximumDifference = 0.0f; + for (size_t sample = 0; + sample < fixedRecovery.size(); + ++sample) + { + partitionMaximumDifference = + juce::jmax( + partitionMaximumDifference, + std::abs( + fixedRecovery[sample] + - partitionedRecovery[sample])); + } + + StreamingContinuityState fadeState; + prepareMiss(fadeState); + float fadeToZeroFinalSample = 0.0f; + fadeState.beginBlock(false, true, 1); + for (int sample = 0; sample < 16; ++sample) + { + const float rawConcealedSample = + fadeState.processSample( + 0, 0.0f, false); + const float currentFadeGain = + 1.0f + - static_cast<float>(sample + 1) + / 16.0f; + fadeToZeroFinalSample = + rawConcealedSample + * currentFadeGain; + fadeState.advanceFrame(false); + } + + StreamingContinuityRegressionResult result; + result.concealmentEntryStep = + fixedMiss.first; + result.recoveryMaximumStep = + recoveryMaximumStep; + result.partitionMaximumDifference = + partitionMaximumDifference; + result.recoveredSample = + fixedRecovery.back(); + result.fadeToZeroFinalSample = + fadeToZeroFinalSample; + result.passed = + result.concealmentEntryStep <= 0.001f + && result.recoveryMaximumStep <= 0.03f + && result.partitionMaximumDifference + <= 1.0e-7f + && std::abs( + result.recoveredSample + 0.8f) + <= 1.0e-6f + && std::abs( + result.fadeToZeroFinalSample) + <= 1.0e-7f; + return result; +} + +PlaybackEngine::OuterLockContinuityRegressionResult +PlaybackEngine::runOuterLockContinuityRegression() +{ + constexpr double fixtureSampleRate = 48000.0; + constexpr int missSamples = 16; + constexpr int recoverySamples = + STREAMING_RECOVERY_SAMPLES; + const juce::String trackId( + "outer-lock-continuity-fixture"); + + PlaybackEngine probe; + auto& continuity = + probe.getTrackPlaybackContinuityState( + trackId); + continuity.reset(1); + continuity.beginBlock(true, false, 1); + for (int sample = 0; + sample < missSamples; + ++sample) + { + continuity.processSample( + 0, 0.8f, true); + continuity.advanceFrame(true); + } + continuity.expectedNextTimelineTime = 0.0; + continuity.hasExpectedTimelineTime = true; + const float preMissSample = + continuity.lastOutput[0]; + + juce::AudioBuffer<float> concealed( + 1, missSamples); + concealed.clear(); + { + const juce::ScopedLock publicationGuard( + probe.lock); + std::thread callbackThread( + [&] + { + probe.fillTrackBuffer( + trackId, + concealed, + 0.0, + missSamples, + fixtureSampleRate); + }); + callbackThread.join(); + } + + juce::AudioBuffer<float> recovered( + 1, recoverySamples); + recovered.clear(); + probe.fillTrackBuffer( + trackId, + recovered, + static_cast<double>(missSamples) + / fixtureSampleRate, + recoverySamples, + fixtureSampleRate); + + OuterLockContinuityRegressionResult result; + result.tryLockMisses = + probe.getTryLockFailureCount(); + result.concealmentEvents = + probe + .getOuterLockContinuityConcealmentCount(); + result.recoveryEvents = + probe + .getOuterLockContinuityRecoveryCount(); + result.concealmentEntryStep = + std::abs( + concealed.getSample(0, 0) + - preMissSample); + result.recoveryEntryStep = + std::abs( + recovered.getSample(0, 0) + - concealed.getSample( + 0, missSamples - 1)); + result.recoveredSample = + recovered.getSample( + 0, recoverySamples - 1); + result.passed = + result.tryLockMisses == 1 + && result.concealmentEvents == 1 + && result.recoveryEvents == 1 + && result.concealmentEntryStep + <= 0.001f + && result.recoveryEntryStep + <= 0.02f + && std::abs(result.recoveredSample) + <= 1.0e-6f; + return result; +} + PlaybackEngine::PlaybackEngine() { formatManager.registerBasicFormats(); + streamingReadAheadThread.startThread(juce::Thread::Priority::normal); // Pre-allocate pitch-preview channel-pointer vectors (max stereo = 2 channels). // Avoids heap allocation inside fillTrackBuffer for every pitch-previewed clip. pitchPreviewInPtrs.resize (2); pitchPreviewOutPtrs.resize (2); + reusableChunkBoundaries.reserve (64); + reusableFileBuffer.setSize(2, 65536, false, true, false); + reusableTrackPlaybackBuffer.setSize( + 2, 65536, false, true, false); + pitchShiftWorkBuffer.setSize(2, 65536, false, true, false); } PlaybackEngine::~PlaybackEngine() { + streamingReadAheadThread.stopThread(2000); juce::ScopedLock sl(lock); readers.clear(); - audioDataCache.clear(); + streamingContinuityStates.clear(); + refreshStreamingReaderDiagnosticsLocked(); + fullyDecodedSources.clear(); + fullyDecodedSourceAccessTimes.clear(); + fullyDecodedBytesInUse = 0; + refreshFullyDecodedSourceDiagnosticsLocked(); clips.clear(); } -void PlaybackEngine::preloadReader(const juce::File& file) +void PlaybackEngine::refreshStreamingReaderDiagnosticsLocked() noexcept { - // Called from message thread — creates reader so audio thread never does disk I/O - juce::String filePath = file.getFullPathName(); - auto it = readers.find(filePath); - if (it != readers.end() && it->second != nullptr) - { - readerAccessTimes[filePath] = juce::Time::currentTimeMillis(); - return; // Already loaded - } + juce::int64 capacityBytes = 0; + constexpr juce::int64 bufferedFramesPerReader = + static_cast<juce::int64>(STREAMING_READ_AHEAD_SAMPLES) * 2; - std::unique_ptr<juce::AudioFormatReader> newReader(formatManager.createReaderFor(file)); - if (newReader) + for (const auto& [path, reader] : readers) { - readers[filePath] = std::move(newReader); - readerAccessTimes[filePath] = juce::Time::currentTimeMillis(); - evictOldReaders(); - juce::Logger::writeToLog("PlaybackEngine: Pre-loaded reader for: " + filePath); + juce::ignoreUnused(path); + if (reader != nullptr) + { + capacityBytes += bufferedFramesPerReader + * static_cast<juce::int64>(reader->numChannels) + * static_cast<juce::int64>(sizeof(float)); + } } + + cachedReaderCount.store(static_cast<int>(readers.size()), std::memory_order_release); + cachedStreamingReadAheadCapacityBytes.store(capacityBytes, std::memory_order_release); +} + +void PlaybackEngine::refreshFullyDecodedSourceDiagnosticsLocked() noexcept +{ + fullyDecodedSourceCount.store( + static_cast<int>(fullyDecodedSources.size()), + std::memory_order_release); + fullyDecodedSourceBytes.store( + fullyDecodedBytesInUse, + std::memory_order_release); +} + +void PlaybackEngine::refreshPitchPreviewRoutingDiagnosticsLocked() noexcept +{ + unsigned int flags = 0; + if (pitchScrubPreview.active || pitchScrubPreview.releasePending) + flags |= kPitchRouteScrubPreview; + if (!clipPitchPreviews.empty()) + flags |= kPitchRouteClipLivePreview; + if (!renderedPreviewSegments.empty()) + flags |= kPitchRouteRenderedSegment; + if (!pitchCorrectedFiles.empty()) + flags |= kPitchRouteCorrectedSource; + + pitchPreviewRoutingDiagnosticFlags.store(flags, std::memory_order_release); +} + +bool PlaybackEngine::primeStreamingReader(juce::BufferingAudioReader& reader, + double offsetSeconds, + int maxWaitMilliseconds) +{ + const int channels = juce::jmax(1, static_cast<int>(reader.numChannels)); + juce::AudioBuffer<float> scratch(channels, 1); + scratch.clear(); + const auto samplePosition = static_cast<juce::int64>( + juce::jmax(0.0, offsetSeconds) * reader.sampleRate); + if (maxWaitMilliseconds > 0) + reader.setReadTimeout(maxWaitMilliseconds); + const bool ready = reader.read(&scratch, 0, 1, samplePosition, true, true); + if (maxWaitMilliseconds > 0) + reader.setReadTimeout(0); + return ready; } -void PlaybackEngine::preloadAudioData(const juce::File& file, juce::AudioFormatReader& reader) +void PlaybackEngine::preloadReader(const juce::File& file, + const juce::String& readerKey, + double initialOffsetSeconds, + int maxWaitMilliseconds) { - constexpr juce::int64 maxCachedAudioBytesPerFile = 256LL * 1024LL * 1024LL; + // Reader construction and full-file decoding happen before taking the clip + // publication lock. The callback can keep the previously published state. const auto filePath = file.getFullPathName(); - const int channels = static_cast<int>(reader.numChannels); - const auto length = reader.lengthInSamples; - if (channels <= 0 || length <= 0 || length > std::numeric_limits<int>::max()) + const auto cacheKey = readerKey.isNotEmpty() ? readerKey : filePath; + std::shared_ptr<juce::BufferingAudioReader> existingReader; { - audioDataCache.erase(filePath); + const juce::ScopedLock sl(lock); + auto decoded = fullyDecodedSources.find(cacheKey); + if (decoded != fullyDecodedSources.end() + && decoded->second != nullptr) + { + fullyDecodedSourceAccessTimes[cacheKey] = + juce::Time::currentTimeMillis(); + return; + } + + auto existing = readers.find(cacheKey); + if (existing != readers.end() && existing->second != nullptr) + { + readerAccessTimes[cacheKey] = juce::Time::currentTimeMillis(); + existingReader = existing->second; + } + } + if (existingReader != nullptr) + { + // Published readers always keep timeout=0. This call only moves the + // background thread's requested position and cannot wait for decoding. + primeStreamingReader(*existingReader, initialOffsetSeconds, 0); return; } - const juce::int64 requiredBytes = length * static_cast<juce::int64>(channels) * static_cast<juce::int64>(sizeof(float)); - if (requiredBytes > maxCachedAudioBytesPerFile) + std::unique_ptr<juce::AudioFormatReader> sourceReader(formatManager.createReaderFor(file)); + if (sourceReader == nullptr) { - audioDataCache.erase(filePath); + juce::Logger::writeToLog("PlaybackEngine: Failed to create streaming reader for: " + filePath); return; } - auto cached = std::make_shared<CachedAudioData>(); - cached->sampleRate = reader.sampleRate; - cached->lengthInSamples = length; - cached->numChannels = channels; - cached->buffer.setSize(channels, static_cast<int>(length)); - if (reader.read(&cached->buffer, 0, static_cast<int>(length), 0, true, true)) - audioDataCache[filePath] = std::move(cached); - else - audioDataCache.erase(filePath); + const int decodedChannels = juce::jlimit( + 0, 2, static_cast<int>(sourceReader->numChannels)); + const auto sourceLength = sourceReader->lengthInSamples; + const auto bytesPerFrame = + static_cast<juce::int64>(decodedChannels) + * static_cast<juce::int64>(sizeof(float)); + const bool eligibleForFullDecode = + decodedChannels > 0 + && sourceReader->sampleRate > 0.0 + && sourceLength > 0 + && sourceLength + <= static_cast<juce::int64>( + std::numeric_limits<int>::max()) + && bytesPerFrame > 0 + && sourceLength + <= MAX_FULLY_DECODED_SOURCE_BYTES + / bytesPerFrame; + + if (eligibleForFullDecode) + { + auto decodedSource = + std::make_unique<FullyDecodedSource>(); + decodedSource->sampleRate = sourceReader->sampleRate; + decodedSource->lengthInSamples = sourceLength; + decodedSource->numChannels = decodedChannels; + decodedSource->decodedBytes = + sourceLength * bytesPerFrame; + decodedSource->samples.setSize( + decodedChannels, + static_cast<int>(sourceLength), + false, + true, + false); + + const bool decodedCompletely = sourceReader->read( + &decodedSource->samples, + 0, + static_cast<int>(sourceLength), + 0, + true, + true); + if (decodedCompletely) + { + bool publishedDecodedSource = false; + bool decodedSourceAlreadyPublished = false; + std::vector<std::unique_ptr<FullyDecodedSource>> + retiredSources; + { + const juce::ScopedLock sl(lock); + auto existingDecoded = + fullyDecodedSources.find(cacheKey); + decodedSourceAlreadyPublished = + existingDecoded + != fullyDecodedSources.end() + && existingDecoded->second != nullptr; + + if (! decodedSourceAlreadyPublished + && evictFullyDecodedSourcesToFitLocked( + decodedSource->decodedBytes, + cacheKey, + retiredSources)) + { + fullyDecodedBytesInUse += + decodedSource->decodedBytes; + fullyDecodedSources.emplace( + cacheKey, + std::move(decodedSource)); + fullyDecodedSourceAccessTimes[cacheKey] = + juce::Time::currentTimeMillis(); + refreshFullyDecodedSourceDiagnosticsLocked(); + publishedDecodedSource = true; + } + else if (decodedSourceAlreadyPublished) + { + fullyDecodedSourceAccessTimes[cacheKey] = + juce::Time::currentTimeMillis(); + } + } + + // Potentially large sample buffers are destroyed here, after the + // publication guard has been released. + retiredSources.clear(); + + if (publishedDecodedSource + || decodedSourceAlreadyPublished) + { + juce::Logger::writeToLog( + "PlaybackEngine: Prepared fully decoded source (" + + juce::String( + sourceLength * bytesPerFrame) + + " bytes): " + + filePath); + return; + } + + fullyDecodedSourceBudgetFallbackCount.fetch_add( + 1, std::memory_order_relaxed); + } + } + + // Large sources, corrupt/partial decodes, and decoded-cache budget misses + // retain the bounded streaming path. Its timeout remains zero once + // published, so the callback reports a cache miss rather than waiting. + auto stereoReader = std::make_unique<StereoStreamingSourceReader>(std::move(sourceReader)); + auto bufferedReader = std::make_shared<juce::BufferingAudioReader>( + stereoReader.release(), + streamingReadAheadThread, + STREAMING_READ_AHEAD_SAMPLES); + bufferedReader->setReadTimeout(0); + primeStreamingReader(*bufferedReader, initialOffsetSeconds, maxWaitMilliseconds); + + std::shared_ptr<juce::BufferingAudioReader> concurrentlyPublishedReader; + { + const juce::ScopedLock sl(lock); + auto [it, inserted] = readers.emplace(cacheKey, bufferedReader); + if (!inserted && it->second != nullptr) + concurrentlyPublishedReader = it->second; + streamingContinuityStates.try_emplace(cacheKey); + readerAccessTimes[cacheKey] = juce::Time::currentTimeMillis(); + evictOldReaders(cacheKey); + } + if (concurrentlyPublishedReader != nullptr) + primeStreamingReader(*concurrentlyPublishedReader, initialOffsetSeconds, 0); + + juce::Logger::writeToLog("PlaybackEngine: Prepared bounded streaming reader for: " + filePath); } -juce::AudioFormatReader* PlaybackEngine::getCachedReader(const juce::File& file) +juce::int64 PlaybackEngine::getStreamingReadAheadCapacityBytes() const { - // Audio-thread safe: only looks up, never creates readers - auto it = readers.find(file.getFullPathName()); + return cachedStreamingReadAheadCapacityBytes.load(std::memory_order_acquire); +} + +void PlaybackEngine::requestReadAheadAtTime(double timelineTimeSeconds) +{ + struct ReadAheadRequest + { + std::shared_ptr<juce::BufferingAudioReader> reader; + double offsetSeconds = 0.0; + }; + + std::vector<ReadAheadRequest> requests; + { + const juce::ScopedLock sl(lock); + requests.reserve(clips.size()); + constexpr double preRollSeconds = 2.0; + + for (const auto& clip : clips) + { + if (!clip.isActive + || timelineTimeSeconds >= clip.startTime + clip.duration + || timelineTimeSeconds + preRollSeconds < clip.startTime) + { + continue; + } + + const double clipTime = juce::jmax(0.0, timelineTimeSeconds - clip.startTime); + const juce::String* readerKey = &clip.readerKey; + double sourceOffset = clip.offset + clipTime; + + auto segmentIt = renderedPreviewSegments.find(clip.clipId); + if (segmentIt != renderedPreviewSegments.end()) + { + for (const auto& segment : segmentIt->second) + { + if (clipTime >= segment.startSec && clipTime < segment.endSec) + { + readerKey = &segment.readerKey; + sourceOffset = segment.fileOffsetSec + (clipTime - segment.startSec); + break; + } + } + } + + auto readerIt = readers.find(*readerKey); + if (readerIt != readers.end() && readerIt->second != nullptr) + requests.push_back({ readerIt->second, sourceOffset }); + } + } + + // Published readers permanently use timeout=0. These calls only publish a + // desired source position to JUCE's time-slice thread and never wait for I/O. + for (const auto& request : requests) + primeStreamingReader(*request.reader, request.offsetSeconds, 0); +} + +juce::BufferingAudioReader* PlaybackEngine::getCachedReader(const juce::String& readerKey) +{ + auto it = readers.find(readerKey); if (it != readers.end() && it->second != nullptr) return it->second.get(); return nullptr; } -void PlaybackEngine::evictOldReaders() +const PlaybackEngine::FullyDecodedSource* +PlaybackEngine::getFullyDecodedSource( + const juce::String& readerKey) const noexcept +{ + auto it = fullyDecodedSources.find(readerKey); + if (it != fullyDecodedSources.end() + && it->second != nullptr) + { + return it->second.get(); + } + return nullptr; +} + +bool PlaybackEngine::evictFullyDecodedSourcesToFitLocked( + juce::int64 requiredBytes, + const juce::String& protectedKey, + std::vector<std::unique_ptr<FullyDecodedSource>>& retiredSources) +{ + if (requiredBytes <= 0 + || requiredBytes > MAX_FULLY_DECODED_SOURCE_BYTES + || requiredBytes > MAX_FULLY_DECODED_CACHE_BYTES) + { + return false; + } + + if (fullyDecodedBytesInUse + <= MAX_FULLY_DECODED_CACHE_BYTES + - requiredBytes) + { + return true; + } + + std::vector<juce::String> referencedKeys; + referencedKeys.reserve( + clips.size() + renderedPreviewSegments.size()); + for (const auto& clip : clips) + { + if (clip.isActive + && clip.readerKey.isNotEmpty()) + { + referencedKeys.push_back(clip.readerKey); + } + } + for (const auto& [clipId, segments] : + renderedPreviewSegments) + { + juce::ignoreUnused(clipId); + for (const auto& segment : segments) + { + if (segment.readerKey.isNotEmpty()) + referencedKeys.push_back( + segment.readerKey); + } + } + + const auto isReferenced = + [&] (const juce::String& key) + { + return key == protectedKey + || std::find( + referencedKeys.begin(), + referencedKeys.end(), + key) != referencedKeys.end(); + }; + + std::vector< + std::pair<juce::int64, juce::String>> + candidates; + candidates.reserve( + fullyDecodedSourceAccessTimes.size()); + for (const auto& [key, accessTime] : + fullyDecodedSourceAccessTimes) + { + if (! isReferenced(key)) + candidates.push_back( + { accessTime, key }); + } + std::sort(candidates.begin(), candidates.end()); + + int evicted = 0; + for (const auto& [accessTime, key] : + candidates) + { + juce::ignoreUnused(accessTime); + if (fullyDecodedBytesInUse + <= MAX_FULLY_DECODED_CACHE_BYTES + - requiredBytes) + { + break; + } + + auto source = fullyDecodedSources.find(key); + if (source == fullyDecodedSources.end() + || source->second == nullptr) + { + fullyDecodedSourceAccessTimes.erase(key); + continue; + } + + fullyDecodedBytesInUse = + std::max<juce::int64>( + 0, + fullyDecodedBytesInUse + - source->second->decodedBytes); + retiredSources.push_back( + std::move(source->second)); + fullyDecodedSources.erase(source); + fullyDecodedSourceAccessTimes.erase(key); + ++evicted; + } + + if (evicted > 0) + { + fullyDecodedSourceEvictionCount.fetch_add( + evicted, std::memory_order_relaxed); + refreshFullyDecodedSourceDiagnosticsLocked(); + } + + return fullyDecodedBytesInUse + <= MAX_FULLY_DECODED_CACHE_BYTES + - requiredBytes; +} + +void PlaybackEngine::evictOldReaders(const juce::String& protectedKey) { if ((int)readers.size() <= MAX_CACHED_READERS) + { + refreshStreamingReaderDiagnosticsLocked(); return; + } - // Evict the oldest 25% by access time - int numToEvict = (int)readers.size() / 4; - if (numToEvict < 1) numToEvict = 1; + std::vector<juce::String> referencedKeys; + referencedKeys.reserve(clips.size() + renderedPreviewSegments.size()); + for (const auto& clip : clips) + { + if (clip.isActive && clip.readerKey.isNotEmpty()) + referencedKeys.push_back(clip.readerKey); + } + for (const auto& [clipId, segments] : renderedPreviewSegments) + { + juce::ignoreUnused(clipId); + for (const auto& segment : segments) + { + if (segment.readerKey.isNotEmpty()) + referencedKeys.push_back(segment.readerKey); + } + } + + const auto isReferenced = [&referencedKeys, &protectedKey](const juce::String& key) + { + return key == protectedKey + || std::find(referencedKeys.begin(), referencedKeys.end(), key) != referencedKeys.end(); + }; // Collect entries sorted by access time (oldest first) std::vector<std::pair<juce::int64, juce::String>> entries; for (const auto& [path, accessTime] : readerAccessTimes) - entries.push_back({ accessTime, path }); + { + if (!isReferenced(path)) + entries.push_back({ accessTime, path }); + } std::sort(entries.begin(), entries.end()); - for (int i = 0; i < numToEvict && i < (int)entries.size(); ++i) + const int desiredEvictions = static_cast<int>(readers.size()) - MAX_CACHED_READERS; + const int numToEvict = juce::jmin(desiredEvictions, static_cast<int>(entries.size())); + for (int i = 0; i < numToEvict; ++i) { const auto& path = entries[i].second; readers.erase(path); - audioDataCache.erase(path); + streamingContinuityStates.erase(path); readerAccessTimes.erase(path); } - juce::Logger::writeToLog("PlaybackEngine: Evicted " + juce::String(numToEvict) + " old readers"); + if (numToEvict > 0) + streamingReaderEvictionCount.fetch_add(numToEvict, std::memory_order_relaxed); + + if (static_cast<int>(readers.size()) > MAX_CACHED_READERS) + { + streamingReaderBudgetOvercommitCount.fetch_add(1, std::memory_order_relaxed); + juce::Logger::writeToLog( + "PlaybackEngine: Read-ahead target overcommitted to preserve active clips; readers=" + + juce::String(static_cast<int>(readers.size()))); + } + else if (numToEvict > 0) + { + juce::Logger::writeToLog("PlaybackEngine: Evicted " + juce::String(numToEvict) + + " inactive streaming readers"); + } + + refreshStreamingReaderDiagnosticsLocked(); } float PlaybackEngine::interpolateGainEnvelope(const std::vector<GainEnvelopePoint>& points, double time) @@ -277,8 +1166,6 @@ void PlaybackEngine::addClip(const juce::File& audioFile, double startTime, doub double offset, double volumeDB, double fadeIn, double fadeOut, const juce::String& clipId, const juce::File& sourceAudioFile, double sourceOffset) { - juce::ScopedLock sl(lock); - if (!audioFile.existsAsFile()) { juce::Logger::writeToLog("PlaybackEngine: Cannot add clip - file does not exist: " + audioFile.getFullPathName()); @@ -287,69 +1174,79 @@ void PlaybackEngine::addClip(const juce::File& audioFile, double startTime, doub juce::File effectiveFile = audioFile; double effectiveOffset = offset; - const bool hasActivePitchPreview = clipId.isNotEmpty() && clipPitchPreviews.find(clipId) != clipPitchPreviews.end(); - - // If a live pitch preview is active, always base playback on the original source. - // syncClipsWithBackend re-adds clips on every play, and the store's filePath may still - // point at an older corrected render. Reusing that here would make the live preview - // process already-corrected audio again, compounding pitch/formant on every play cycle. - if (hasActivePitchPreview && sourceAudioFile.existsAsFile()) + std::vector<RenderedPreviewSegment> segmentsToPreload; { - effectiveFile = sourceAudioFile; - effectiveOffset = sourceOffset >= 0.0 ? sourceOffset : offset; - juce::Logger::writeToLog("PlaybackEngine: Using original source for live preview clip " + clipId - + " -> " + effectiveFile.getFullPathName()); - } - else - { - // Check if this clip has a pitch-corrected file from a previous session. - // syncClipsWithBackend always re-adds clips with the original filePath from - // the frontend store, but the corrected file should be used for playback. - auto correctedIt = pitchCorrectedFiles.find(clipId); - if (correctedIt != pitchCorrectedFiles.end() && correctedIt->second.existsAsFile()) + const juce::ScopedLock sl(lock); + const bool hasActivePitchPreview = clipId.isNotEmpty() + && clipPitchPreviews.find(clipId) != clipPitchPreviews.end(); + + if (hasActivePitchPreview && sourceAudioFile.existsAsFile()) { - effectiveFile = correctedIt->second; - effectiveOffset = 0.0; // Corrected files always start at sample 0 - juce::Logger::writeToLog("PlaybackEngine: Using corrected file for clip " + clipId + effectiveFile = sourceAudioFile; + effectiveOffset = sourceOffset >= 0.0 ? sourceOffset : offset; + juce::Logger::writeToLog("PlaybackEngine: Using original source for live preview clip " + clipId + " -> " + effectiveFile.getFullPathName()); } - } - - // Pre-load the reader on the message thread so audio thread never does disk I/O - preloadReader(effectiveFile); - if (clipId.isNotEmpty()) - { - auto segmentIt = renderedPreviewSegments.find (clipId); - if (segmentIt != renderedPreviewSegments.end()) + else { - for (const auto& segment : segmentIt->second) + auto correctedIt = pitchCorrectedFiles.find(clipId); + if (correctedIt != pitchCorrectedFiles.end() && correctedIt->second.existsAsFile()) { - if (segment.audioFile.existsAsFile()) - preloadReader (segment.audioFile); + effectiveFile = correctedIt->second; + effectiveOffset = 0.0; + juce::Logger::writeToLog("PlaybackEngine: Using corrected file for clip " + clipId + + " -> " + effectiveFile.getFullPathName()); } } + + if (clipId.isNotEmpty()) + { + auto segmentIt = renderedPreviewSegments.find(clipId); + if (segmentIt != renderedPreviewSegments.end()) + segmentsToPreload = segmentIt->second; + } + } + + const auto logicalClipId = clipId.isNotEmpty() ? clipId : juce::Uuid().toString(); + const auto clipReaderKey = "clip|" + logicalClipId + "|" + effectiveFile.getFullPathName(); + + // Decoder construction and initial read-ahead occur without holding the + // clip publication lock. + preloadReader(effectiveFile, clipReaderKey, effectiveOffset); + for (const auto& segment : segmentsToPreload) + { + if (segment.audioFile.existsAsFile()) + preloadReader(segment.audioFile, + segment.readerKey, + segment.fileOffsetSec); } ClipInfo clip(effectiveFile, startTime, duration, trackId, effectiveOffset, volumeDB, fadeIn, fadeOut); clip.clipId = clipId; clip.envelopeKey = trackId + "::" + clipId; // Pre-compute to avoid string alloc on audio thread + clip.readerKey = clipReaderKey; clip.originalAudioFile = sourceAudioFile.existsAsFile() ? sourceAudioFile : audioFile; clip.originalOffset = sourceOffset >= 0.0 ? sourceOffset : offset; - clips.push_back(clip); + int totalClipCount = 0; + { + const juce::ScopedLock sl(lock); + clips.push_back(clip); + totalClipCount = static_cast<int>(clips.size()); + } juce::Logger::writeToLog("PlaybackEngine: Added clip - Track " + trackId + ", Start: " + juce::String(startTime) + "s, Duration: " + juce::String(duration) + "s, Offset: " + juce::String(offset) + "s, Volume: " + juce::String(volumeDB) + "dB"); - logAudioPlayback("addClip track=" + trackId + OPENSTUDIO_LOG_AUDIO_PLAYBACK("addClip track=" + trackId + " clipId=" + clipId + " file=" + effectiveFile.getFullPathName() + " originalFile=" + clip.originalAudioFile.getFullPathName() + " start=" + juce::String(startTime, 3) + " duration=" + juce::String(duration, 3) + " offset=" + juce::String(effectiveOffset, 3) - + " totalClips=" + juce::String(static_cast<int>(clips.size()))); + + " totalClips=" + juce::String(totalClipCount)); } void PlaybackEngine::removeClip(const juce::String& trackId, const juce::String& filePath) @@ -368,6 +1265,22 @@ void PlaybackEngine::removeClip(const juce::String& trackId, const juce::String& juce::Logger::writeToLog("PlaybackEngine: Removed clip from track " + trackId); } +void PlaybackEngine::removeClipById(const juce::String& trackId, const juce::String& clipId) +{ + juce::ScopedLock sl(lock); + + clips.erase( + std::remove_if(clips.begin(), clips.end(), + [&trackId, &clipId](const ClipInfo& clip) { + return clip.trackId == trackId && clip.clipId == clipId; + }), + clips.end() + ); + gainEnvelopes.erase(trackId + "::" + clipId); + + juce::Logger::writeToLog("PlaybackEngine: Removed clip " + clipId + " from track " + trackId); +} + void PlaybackEngine::replaceClipAudioFile(const juce::String& clipId, const juce::File& newFile) { if (!newFile.existsAsFile()) @@ -376,22 +1289,20 @@ void PlaybackEngine::replaceClipAudioFile(const juce::String& clipId, const juce return; } + const auto newReaderKey = "clip|" + clipId + "|" + newFile.getFullPathName(); + preloadReader(newFile, newReaderKey, 0.0); + juce::ScopedLock sl(lock); for (auto& clip : clips) { if (clip.clipId == clipId) { - // Evict old reader so the audio thread stops reading the old file - readers.erase(clip.audioFile.getFullPathName()); - audioDataCache.erase(clip.audioFile.getFullPathName()); - readerAccessTimes.erase(clip.audioFile.getFullPathName()); // Swap in the new file. Corrected files start at sample 0, but restoring // the original file should also restore the original trim offset. const bool restoringOriginal = (newFile == clip.originalAudioFile); clip.audioFile = newFile; clip.offset = restoringOriginal ? clip.originalOffset : 0.0; - // Pre-load new reader while we still hold the lock (same pattern as addClip) - preloadReader(newFile); + clip.readerKey = newReaderKey; // Clear any active pitch preview — the corrected audio is now baked // into the file, so the real-time PitchShifter must not double-shift. clipPitchPreviews.erase(clipId); @@ -412,6 +1323,7 @@ void PlaybackEngine::replaceClipAudioFile(const juce::String& clipId, const juce pitchCorrectedFiles.erase(clipId); else pitchCorrectedFiles[clipId] = newFile; + refreshPitchPreviewRoutingDiagnosticsLocked(); juce::Logger::writeToLog("PlaybackEngine: Replaced audio file for clip " + clipId + " -> " + newFile.getFullPathName()); return; @@ -434,6 +1346,12 @@ void PlaybackEngine::queueDeferredClipAudioFile(const juce::String& clipId, cons + " -> " + newFile.getFullPathName()); } +void PlaybackEngine::cancelDeferredClipAudioFile(const juce::String& clipId) +{ + juce::ScopedLock sl(lock); + deferredClipSwaps.erase(clipId); +} + bool PlaybackEngine::commitDeferredClipAudioFile(const juce::String& clipId) { juce::File fileToCommit; @@ -478,6 +1396,12 @@ bool PlaybackEngine::setClipRenderedPreviewSegment(const juce::String& clipId, return false; } + const auto segmentReaderKey = "segment|" + clipId + + "|" + juce::String(startSec, 9) + + "|" + juce::String(endSec, 9) + + "|" + audioFile.getFullPathName(); + preloadReader(audioFile, segmentReaderKey, fileOffsetSec); + juce::ScopedLock sl(lock); if (pitchCorrectedFiles.find(clipId) != pitchCorrectedFiles.end()) { @@ -498,7 +1422,6 @@ bool PlaybackEngine::setClipRenderedPreviewSegment(const juce::String& clipId, } } - preloadReader(audioFile); auto& segments = renderedPreviewSegments[clipId]; segments.erase(std::remove_if(segments.begin(), segments.end(), [startSec, endSec](const RenderedPreviewSegment& segment) @@ -509,10 +1432,11 @@ bool PlaybackEngine::setClipRenderedPreviewSegment(const juce::String& clipId, return sameWindow || overlaps; }), segments.end()); - segments.push_back({ audioFile, startSec, endSec, fileOffsetSec }); + segments.push_back({ audioFile, startSec, endSec, fileOffsetSec, segmentReaderKey }); std::sort(segments.begin(), segments.end(), [] (const RenderedPreviewSegment& a, const RenderedPreviewSegment& b) { return a.startSec < b.startSec; }); + refreshPitchPreviewRoutingDiagnosticsLocked(); juce::Logger::writeToLog("PlaybackEngine: Set rendered preview segment for clip " + clipId + " [" + juce::String(startSec, 3) + ", " + juce::String(endSec, 3) + "]" + " fileOffset=" + juce::String(fileOffsetSec, 3) @@ -526,6 +1450,7 @@ void PlaybackEngine::beginRenderedPreviewSegmentGeneration(const juce::String& c juce::ScopedLock sl(lock); renderedPreviewSegments.erase(clipId); renderedPreviewSegmentGenerations[clipId] = generation; + refreshPitchPreviewRoutingDiagnosticsLocked(); juce::Logger::writeToLog("PlaybackEngine: Began rendered preview generation for clip " + clipId + " generation=" + juce::String(generation)); } @@ -538,6 +1463,7 @@ void PlaybackEngine::invalidateRenderedPreviewSegments(const juce::String& clipI ++generation; if (generation <= 0) generation = 1; + refreshPitchPreviewRoutingDiagnosticsLocked(); juce::Logger::writeToLog("PlaybackEngine: Invalidated rendered preview segments for clip " + clipId + " generation=" + juce::String(generation)); } @@ -550,6 +1476,7 @@ void PlaybackEngine::clearClipRenderedPreviewSegments(const juce::String& clipId ++generation; if (generation <= 0) generation = 1; + refreshPitchPreviewRoutingDiagnosticsLocked(); juce::Logger::writeToLog("PlaybackEngine: Cleared rendered preview segments for clip " + clipId + " generation=" + juce::String(generation)); } @@ -572,6 +1499,7 @@ void PlaybackEngine::clearAllPitchPreviewRoutes(const juce::String& clipId) pitchScrubPreview = {}; pitchScrubPreviewStatus = {}; pitchScrubStretcherPrepared = false; + refreshPitchPreviewRoutingDiagnosticsLocked(); juce::Logger::writeToLog("PlaybackEngine: Hard-cleared all pitch preview routes"); return; } @@ -590,6 +1518,7 @@ void PlaybackEngine::clearAllPitchPreviewRoutes(const juce::String& clipId) pitchScrubStretcherPrepared = false; } + refreshPitchPreviewRoutingDiagnosticsLocked(); juce::Logger::writeToLog("PlaybackEngine: Hard-cleared pitch preview routes for clip " + clipId + " generation=" + juce::String(generation)); } @@ -625,6 +1554,7 @@ int PlaybackEngine::clearPitchPreviewRoutesForCorrectedSources() if (cleared > 0) juce::Logger::writeToLog("PlaybackEngine: Hard-cleared pitch preview routes for " + juce::String(cleared) + " corrected-source clip(s)"); + refreshPitchPreviewRoutingDiagnosticsLocked(); return cleared; } @@ -704,19 +1634,27 @@ void PlaybackEngine::clearPitchCorrectionFile(const juce::String& clipId) pitchScrubStretcherPrepared = false; } deferredClipSwaps.erase(clipId); + refreshPitchPreviewRoutingDiagnosticsLocked(); juce::Logger::writeToLog("PlaybackEngine: Cleared pitch correction file for clip " + clipId); } void PlaybackEngine::clearAllClips() { juce::ScopedLock sl(lock); +#if OPENSTUDIO_AUDIO_PLAYBACK_DEBUG const int previousClipCount = static_cast<int>(clips.size()); const int preservedPreviewCount = static_cast<int>(clipPitchPreviews.size()); const int preservedCorrectedCount = static_cast<int>(pitchCorrectedFiles.size()); +#endif clips.clear(); readers.clear(); - audioDataCache.clear(); + streamingContinuityStates.clear(); readerAccessTimes.clear(); + refreshStreamingReaderDiagnosticsLocked(); + fullyDecodedSources.clear(); + fullyDecodedSourceAccessTimes.clear(); + fullyDecodedBytesInUse = 0; + refreshFullyDecodedSourceDiagnosticsLocked(); // NOTE: clipPitchPreviews is NOT cleared here — it must survive sync cycles. // syncClipsWithBackend calls clearAllClips + re-adds clips, and the preview // must persist so the user continues hearing edited notes across play cycles. @@ -726,7 +1664,7 @@ void PlaybackEngine::clearAllClips() lagrangeInterpolatorR.reset(); juce::Logger::writeToLog("PlaybackEngine: Cleared all clips (pitch previews preserved: " + juce::String(static_cast<int>(clipPitchPreviews.size())) + ")"); - logAudioPlayback("clearAllClips previousClipCount=" + juce::String(previousClipCount) + OPENSTUDIO_LOG_AUDIO_PLAYBACK("clearAllClips previousClipCount=" + juce::String(previousClipCount) + " preservedPreviews=" + juce::String(preservedPreviewCount) + " preservedCorrectedFiles=" + juce::String(preservedCorrectedCount)); } @@ -766,35 +1704,15 @@ std::vector<PlaybackEngine::ClipInfo> PlaybackEngine::getClipSnapshot() const return clips; } -juce::AudioFormatReader* PlaybackEngine::getReader(const juce::File& file) -{ - juce::String filePath = file.getFullPathName(); - - // Check if reader already exists - auto it = readers.find(filePath); - if (it != readers.end() && it->second != nullptr) - return it->second.get(); - - // Create new reader - std::unique_ptr<juce::AudioFormatReader> newReader(formatManager.createReaderFor(file)); - if (newReader == nullptr) - { - juce::Logger::writeToLog("PlaybackEngine: Failed to create reader for: " + filePath); - return nullptr; - } - - auto* readerPtr = newReader.get(); - readers[filePath] = std::move(newReader); - - juce::Logger::writeToLog("PlaybackEngine: Created reader for: " + filePath); - return readerPtr; -} - // ---- Pitch preview methods ---- void PlaybackEngine::setClipPitchPreview (const juce::String& clipId, const ClipPitchPreviewData& preview) { + juce::File originalFileToPreload; + juce::String originalReaderKey; + double originalOffsetToPreload = 0.0; + { juce::ScopedLock sl (lock); // If the clip currently has a pitch-corrected file baked in, revert to the @@ -814,19 +1732,21 @@ void PlaybackEngine::setClipPitchPreview (const juce::String& clipId, { if (clip.clipId == clipId && clip.originalAudioFile.existsAsFile()) { + const auto desiredReaderKey = "clip|" + clipId + + "|" + clip.originalAudioFile.getFullPathName(); const bool usingOriginalAlready = (clip.audioFile == clip.originalAudioFile) && std::abs (clip.offset - clip.originalOffset) < 0.0005; if (! usingOriginalAlready) { - readers.erase (clip.audioFile.getFullPathName()); - audioDataCache.erase (clip.audioFile.getFullPathName()); - readerAccessTimes.erase (clip.audioFile.getFullPathName()); clip.audioFile = clip.originalAudioFile; clip.offset = clip.originalOffset; - preloadReader (clip.audioFile); juce::Logger::writeToLog ("PlaybackEngine: Reverted clip " + clipId + " to original file for preview"); } + clip.readerKey = desiredReaderKey; + originalFileToPreload = clip.originalAudioFile; + originalReaderKey = desiredReaderKey; + originalOffsetToPreload = clip.originalOffset; break; } } @@ -858,12 +1778,20 @@ void PlaybackEngine::setClipPitchPreview (const juce::String& clipId, + " liveFormantSuppressed=" + juce::String (std::abs (preview.globalFormantSemitones) > 0.01f ? "yes" : "no") + " window=[" + juce::String (preview.previewStartSec, 3) + "," + juce::String (preview.previewEndSec, 3) + "]"); + refreshPitchPreviewRoutingDiagnosticsLocked(); + } + + if (originalFileToPreload.existsAsFile()) + preloadReader(originalFileToPreload, + originalReaderKey, + originalOffsetToPreload); } void PlaybackEngine::clearClipPitchPreview (const juce::String& clipId) { juce::ScopedLock sl (lock); clipPitchPreviews.erase (clipId); + refreshPitchPreviewRoutingDiagnosticsLocked(); juce::Logger::writeToLog ("PlaybackEngine: Cleared pitch preview for clip " + clipId); } @@ -879,6 +1807,9 @@ void PlaybackEngine::setPitchScrubPreview (const PitchScrubPreviewData& preview) pitchScrubPreview.active = preview.loopBuffer.getNumSamples() > 8 && preview.loopBuffer.getNumChannels() > 0 && preview.pitchRatio > 0.0f; + pitchScrubPreviewMayRender.store( + pitchScrubPreview.active, + std::memory_order_release); pitchScrubPreview.readPosition = 0.0; pitchScrubPreview.currentGain = 0.0f; pitchScrubPreview.targetGain = juce::jlimit (0.0f, 2.0f, preview.gain); @@ -912,7 +1843,8 @@ void PlaybackEngine::setPitchScrubPreview (const PitchScrubPreviewData& preview) pitchScrubInputBuffer.setSize (juce::jmax (1, preview.loopBuffer.getNumChannels()), preloadSamples, false, true, true); pitchScrubOutputBuffer.setSize (juce::jmax (1, preview.loopBuffer.getNumChannels()), preloadSamples, false, true, true); - logAudioPlayback ("setPitchScrubPreview clip=" + preview.clipId + refreshPitchPreviewRoutingDiagnosticsLocked(); + OPENSTUDIO_LOG_AUDIO_PLAYBACK("setPitchScrubPreview clip=" + preview.clipId + " track=" + preview.trackId + " samples=" + juce::String (preview.loopBuffer.getNumSamples()) + " channels=" + juce::String (preview.loopBuffer.getNumChannels()) @@ -941,7 +1873,8 @@ void PlaybackEngine::clearPitchScrubPreview (const juce::String& clipId) pitchScrubPreview.releasePending = true; pitchScrubPreview.targetGain = 0.0f; pitchScrubPreviewStatus.releasePending = true; - logAudioPlayback ("clearPitchScrubPreview clip=" + clipId); + refreshPitchPreviewRoutingDiagnosticsLocked(); + OPENSTUDIO_LOG_AUDIO_PLAYBACK("clearPitchScrubPreview clip=" + clipId); } } @@ -965,7 +1898,10 @@ void PlaybackEngine::renderPitchScrubPreview (juce::AudioBuffer<float>& buffer, || pitchScrubPreview.loopBuffer.getNumSamples() <= 8 || pitchScrubPreview.loopBuffer.getNumChannels() <= 0 || sampleRate <= 0.0) + { + pitchScrubPreviewMayRender.store(false, std::memory_order_release); return; + } const auto playbackRatio = (pitchScrubPreview.sourceSampleRate > 0.0) ? (pitchScrubPreview.sourceSampleRate / sampleRate) @@ -1088,6 +2024,8 @@ void PlaybackEngine::renderPitchScrubPreview (juce::AudioBuffer<float>& buffer, pitchScrubPreviewStatus.releasePending = false; pitchScrubPreviewStatus.previewArmed = false; pitchScrubStretcherPrepared = false; + pitchScrubPreviewMayRender.store(false, std::memory_order_release); + refreshPitchPreviewRoutingDiagnosticsLocked(); } } #if defined(_MSC_VER) @@ -1104,20 +2042,36 @@ PlaybackEngine::PitchScrubPreviewStatus PlaybackEngine::getPitchScrubPreviewStat PlaybackEngine::PitchPreviewRoutingStatus PlaybackEngine::getPitchPreviewRoutingStatus (const juce::String& clipId) const { + if (clipId.isEmpty()) + { + const auto diagnostic = getPitchPreviewRoutingDiagnosticStatus(); + PitchPreviewRoutingStatus status; + status.scrubPreviewActive = diagnostic.scrubPreviewActive; + status.clipLivePreviewActive = diagnostic.clipLivePreviewActive; + status.renderedSegmentActive = diagnostic.renderedSegmentActive; + status.correctedSourceActive = diagnostic.correctedSourceActive; + + if (status.renderedSegmentActive) + status.monitorMode = "rendered_segment"; + else if (status.scrubPreviewActive) + status.monitorMode = "scrub"; + else if (status.clipLivePreviewActive) + status.monitorMode = "clip_live_preview"; + else if (status.correctedSourceActive) + status.monitorMode = "corrected_source"; + else + status.monitorMode = "none"; + + return status; + } + const juce::ScopedLock sl (lock); PitchPreviewRoutingStatus status; - const bool queryAll = clipId.isEmpty(); status.scrubPreviewActive = (pitchScrubPreview.active || pitchScrubPreview.releasePending) - && (queryAll || pitchScrubPreview.clipId == clipId); - status.clipLivePreviewActive = queryAll - ? ! clipPitchPreviews.empty() - : clipPitchPreviews.find (clipId) != clipPitchPreviews.end(); - status.renderedSegmentActive = queryAll - ? ! renderedPreviewSegments.empty() - : renderedPreviewSegments.find (clipId) != renderedPreviewSegments.end(); - status.correctedSourceActive = queryAll - ? ! pitchCorrectedFiles.empty() - : pitchCorrectedFiles.find (clipId) != pitchCorrectedFiles.end(); + && pitchScrubPreview.clipId == clipId; + status.clipLivePreviewActive = clipPitchPreviews.find (clipId) != clipPitchPreviews.end(); + status.renderedSegmentActive = renderedPreviewSegments.find (clipId) != renderedPreviewSegments.end(); + status.correctedSourceActive = pitchCorrectedFiles.find (clipId) != pitchCorrectedFiles.end(); if (status.renderedSegmentActive) status.monitorMode = "rendered_segment"; @@ -1133,6 +2087,18 @@ PlaybackEngine::PitchPreviewRoutingStatus PlaybackEngine::getPitchPreviewRouting return status; } +PlaybackEngine::PitchPreviewRoutingDiagnosticStatus +PlaybackEngine::getPitchPreviewRoutingDiagnosticStatus() const noexcept +{ + const auto flags = pitchPreviewRoutingDiagnosticFlags.load(std::memory_order_acquire); + PitchPreviewRoutingDiagnosticStatus status; + status.scrubPreviewActive = (flags & kPitchRouteScrubPreview) != 0; + status.clipLivePreviewActive = (flags & kPitchRouteClipLivePreview) != 0; + status.renderedSegmentActive = (flags & kPitchRouteRenderedSegment) != 0; + status.correctedSourceActive = (flags & kPitchRouteCorrectedSource) != 0; + return status; +} + float PlaybackEngine::lookupPitchRatio (const std::vector<PitchCorrectionSegment>& segments, double timeInClip) { // Binary search could be used for large segment lists, but linear is fine for typical note counts @@ -1154,27 +2120,112 @@ void PlaybackEngine::fillTrackBuffer(const juce::String& trackId, int numSamples, double sampleRate) { - // Use TryLock to avoid blocking the audio thread (REAPER-style). - // If the lock is held (message thread adding/removing clips), we return silence. - // This is extremely rare and inaudible — same pattern as AudioRecorder::writeBlock. + if (numSamples <= 0 + || sampleRate <= 0.0 + || buffer.getNumChannels() <= 0) + { + return; + } + + const int playbackOutputChannels = + juce::jmin( + buffer.getNumChannels(), + reusableTrackPlaybackBuffer + .getNumChannels()); + auto& trackContinuity = + getTrackPlaybackContinuityState(trackId); + const double continuityTolerance = + 2.0 / sampleRate; + const bool timelineContiguous = + trackContinuity.hasExpectedTimelineTime + && std::abs( + currentTime + - trackContinuity + .expectedNextTimelineTime) + <= continuityTolerance; + + // Never wait behind clip/edit/pitch publication. On contention, conceal + // only the missing playback contribution; sends and live input already in + // the destination remain untouched. const juce::ScopedTryLock sl(lock); if (!sl.isLocked()) { - const int tryLockMiss = tryLockFailureCount.fetch_add(1, std::memory_order_relaxed) + 1; + const int tryLockMiss = + tryLockFailureCount.fetch_add( + 1, std::memory_order_relaxed) + + 1; + trackContinuity.beginBlock( + false, + timelineContiguous, + playbackOutputChannels); + float concealedPeak = 0.0f; + for (int sample = 0; + sample < numSamples; + ++sample) + { + for (int channel = 0; + channel < playbackOutputChannels; + ++channel) + { + const float concealed = + trackContinuity.processSample( + channel, 0.0f, false); + buffer.addSample( + channel, sample, concealed); + concealedPeak = + juce::jmax( + concealedPeak, + std::abs(concealed)); + } + trackContinuity.advanceFrame(false); + } + trackContinuity.expectedNextTimelineTime = + currentTime + + static_cast<double>(numSamples) + / sampleRate; + trackContinuity.hasExpectedTimelineTime = + true; + outerLockContinuityConcealmentCount + .fetch_add( + 1, std::memory_order_relaxed); + outerLockContinuityConcealedSampleCount + .fetch_add( + static_cast<juce::int64>( + numSamples) + * static_cast<juce::int64>( + playbackOutputChannels), + std::memory_order_relaxed); + lastTrackPlaybackPeak.store( + concealedPeak, + std::memory_order_relaxed); if ((tryLockMiss % 20) == 1) - logAudioPlayback("fillTrackBuffer lock miss track=" + trackId + OPENSTUDIO_LOG_AUDIO_PLAYBACK("fillTrackBuffer lock miss track=" + trackId + " currentTime=" + juce::String(currentTime, 3) + " count=" + juce::String(tryLockMiss)); - buffer.clear(); return; } - buffer.clear(); + if (playbackOutputChannels <= 0 + || reusableTrackPlaybackBuffer + .getNumSamples() + < numSamples) + { + // The callback cannot resize this scratch safely. The normal device + // maximum is far below the 65536-frame prepared capacity. + fileBufferResizeCount.fetch_add( + 1, std::memory_order_relaxed); + return; + } + reusableTrackPlaybackBuffer.clear( + 0, numSamples); + auto& playbackMix = + reusableTrackPlaybackBuffer; + int overlappingClipCount = 0; int mixedClipCount = 0; static std::atomic<int> fillTrackBufferCallCounter { 0 }; const int fillCall = fillTrackBufferCallCounter.fetch_add(1, std::memory_order_relaxed) + 1; - const bool shouldLogDetailed = (fillCall % 50) == 1; + const bool shouldLogDetailed = kAudioPlaybackDebugLogs && (fillCall % 50) == 1; double windowEnd = currentTime + (numSamples / sampleRate); @@ -1244,30 +2295,51 @@ void PlaybackEngine::fillTrackBuffer(const juce::String& trackId, } auto mixChunk = [&] (int outputStart, int requestedOutputSamples, - const juce::File& playbackFile, double playbackOffset, + const juce::File& playbackFile, + const juce::String& readerKey, + double playbackOffset, bool usingRenderedPreviewSegment, bool usingCorrectedSource) { + juce::ignoreUnused(playbackFile); if (requestedOutputSamples <= 0) return false; - const auto cacheIt = audioDataCache.find(playbackFile.getFullPathName()); - const auto cachedAudio = cacheIt != audioDataCache.end() ? cacheIt->second : nullptr; - auto* reader = cachedAudio ? nullptr : getCachedReader (playbackFile); - if (cachedAudio == nullptr && reader == nullptr) + const auto* decodedSource = + getFullyDecodedSource(readerKey); + auto* reader = decodedSource == nullptr + ? getCachedReader(readerKey) + : nullptr; + StreamingContinuityState* + streamingContinuity = nullptr; + if (reader != nullptr) + { + auto continuity = + streamingContinuityStates.find( + readerKey); + if (continuity + != streamingContinuityStates.end()) + { + streamingContinuity = + &continuity->second; + } + } + if (decodedSource == nullptr + && reader == nullptr) { const int missingReaders = missingReaderCount.fetch_add (1, std::memory_order_relaxed) + 1; - logAudioPlayback ("fillTrackBuffer missingReader track=" + trackId + OPENSTUDIO_LOG_AUDIO_PLAYBACK("fillTrackBuffer missingStreamingReader track=" + trackId + " clipId=" + clip.clipId + " file=" + playbackFile.getFullPathName() + " currentTime=" + juce::String (currentTime, 3) + " missingReaderCount=" + juce::String (missingReaders)); + juce::ignoreUnused (missingReaders); return false; } - if (cachedAudio == nullptr) - audioDataCacheMissCount.fetch_add(1, std::memory_order_relaxed); - - const double fileSampleRate = cachedAudio ? cachedAudio->sampleRate : reader->sampleRate; + const double fileSampleRate = + decodedSource != nullptr + ? decodedSource->sampleRate + : reader->sampleRate; const double ratio = fileSampleRate / sampleRate; double exactFileStart = juce::jmax (0.0, playbackOffset) * fileSampleRate; const double roundedFileStart = std::round (exactFileStart); @@ -1281,7 +2353,10 @@ void PlaybackEngine::fillTrackBuffer(const juce::String& trackId, const double bufferStartPosition = static_cast<double> (readStartOffset) + fileStartFraction; int outputSamples = requestedOutputSamples; int fileSamplesToRead = static_cast<int> (std::ceil (bufferStartPosition + outputSamples * ratio)) + 3; - const juce::int64 sourceLengthInSamples = cachedAudio ? cachedAudio->lengthInSamples : reader->lengthInSamples; + const juce::int64 sourceLengthInSamples = + decodedSource != nullptr + ? decodedSource->lengthInSamples + : reader->lengthInSamples; const juce::int64 fileSamplesAvailable = sourceLengthInSamples - readStartSample; if (fileSamplesAvailable <= 0) return false; @@ -1294,7 +2369,10 @@ void PlaybackEngine::fillTrackBuffer(const juce::String& trackId, if (outputSamples <= 0 || fileSamplesToRead <= 0) return false; - const int readerChannels = cachedAudio ? cachedAudio->numChannels : static_cast<int> (reader->numChannels); + const int readerChannels = + decodedSource != nullptr + ? decodedSource->numChannels + : static_cast<int>(reader->numChannels); if (reusableFileBuffer.getNumChannels() < readerChannels || reusableFileBuffer.getNumSamples() < fileSamplesToRead) { @@ -1303,79 +2381,148 @@ void PlaybackEngine::fillTrackBuffer(const juce::String& trackId, fileBufferResizeCount.fetch_add (1, std::memory_order_relaxed); } reusableFileBuffer.clear (0, fileSamplesToRead); - if (cachedAudio) + bool allReadAheadReady = true; + if (decodedSource != nullptr) { - const int sourceStart = static_cast<int>(readStartSample); - for (int ch = 0; ch < readerChannels; ++ch) - reusableFileBuffer.copyFrom(ch, 0, cachedAudio->buffer, ch, sourceStart, fileSamplesToRead); + const int decodedStartSample = + static_cast<int>(readStartSample); + for (int channel = 0; + channel < readerChannels; + ++channel) + { + reusableFileBuffer.copyFrom( + channel, + 0, + decodedSource->samples, + channel, + decodedStartSample, + fileSamplesToRead); + } } else { - reader->read (&reusableFileBuffer, 0, fileSamplesToRead, readStartSample, true, true); + allReadAheadReady = reader->read( + &reusableFileBuffer, + 0, + fileSamplesToRead, + readStartSample, + true, + true); + } + const double outputTimelineStart = + currentTime + + static_cast<double>(outputStart) + / sampleRate; + if (streamingContinuity != nullptr) + { + const double continuityTolerance = + 2.0 / sampleRate; + const bool timelineContiguous = + streamingContinuity + ->hasExpectedTimelineTime + && std::abs( + outputTimelineStart + - streamingContinuity + ->expectedNextTimelineTime) + <= continuityTolerance; + const bool startedRecovery = + streamingContinuity->beginBlock( + allReadAheadReady, + timelineContiguous, + readerChannels); + if (startedRecovery) + { + streamingContinuityRecoveryCount + .fetch_add( + 1, + std::memory_order_relaxed); + } + } + if (! allReadAheadReady) + { + audioDataCacheMissCount.fetch_add(1, std::memory_order_relaxed); + streamingContinuityConcealmentCount + .fetch_add( + 1, + std::memory_order_relaxed); + streamingContinuityConcealedSampleCount + .fetch_add( + static_cast<juce::int64>( + outputSamples) + * static_cast<juce::int64>( + juce::jmin( + playbackOutputChannels, + readerChannels)), + std::memory_order_relaxed); } const bool allowLivePitchPreviewForChunk = ! usingRenderedPreviewSegment && ! usingCorrectedSource; const double chunkClipStart = currentTime + (static_cast<double> (outputStart) / sampleRate) - clip.startTime; - if (clip.clipId.isNotEmpty()) + if (allReadAheadReady + && clip.clipId.isNotEmpty()) { auto previewIt = clipPitchPreviews.find (clip.clipId); if (previewIt != clipPitchPreviews.end() && previewIt->second != nullptr) { - juce::ScopedLock clipSl (previewIt->second->clipLock); - auto& preview = *previewIt->second; - const auto& previewData = preview.previewData; - const double blockMidTime = chunkClipStart + (outputSamples * 0.5 / sampleRate); - const bool withinPreviewWindow = blockMidTime >= previewData.previewStartSec - && blockMidTime <= previewData.previewEndSec; - const float pitchRatio = lookupPitchRatio (previewData.pitchSegments, blockMidTime); - const bool pitchPreviewActive = allowLivePitchPreviewForChunk - && withinPreviewWindow - && std::abs (pitchRatio - 1.0f) > 0.001f; - - if (! pitchPreviewActive) + const juce::ScopedTryLock clipSl(previewIt->second->clipLock); + if (clipSl.isLocked()) { - preview.lastPlaybackTime = -1.0; - } - else - { - if (! preview.prepared) + auto& preview = *previewIt->second; + const auto& previewData = preview.previewData; + const double blockMidTime = chunkClipStart + (outputSamples * 0.5 / sampleRate); + const bool withinPreviewWindow = blockMidTime >= previewData.previewStartSec + && blockMidTime <= previewData.previewEndSec; + const float pitchRatio = lookupPitchRatio (previewData.pitchSegments, blockMidTime); + const bool pitchPreviewActive = allowLivePitchPreviewForChunk + && withinPreviewWindow + && std::abs (pitchRatio - 1.0f) > 0.001f; + + if (! pitchPreviewActive) { - preview.stretcher.presetCheaper (readerChannels, static_cast<float> (fileSampleRate)); - preview.prepared = true; + preview.lastPlaybackTime = -1.0; } - if (preview.lastPlaybackTime < 0.0 - || std::abs (chunkClipStart - preview.lastPlaybackTime) > 0.1) + else { - preview.stretcher.presetCheaper (readerChannels, static_cast<float> (fileSampleRate)); + if (! preview.prepared) + { + preview.stretcher.presetCheaper (readerChannels, static_cast<float> (fileSampleRate)); + preview.prepared = true; + } + if (preview.lastPlaybackTime < 0.0 + || std::abs (chunkClipStart - preview.lastPlaybackTime) > 0.1) + { + preview.stretcher.presetCheaper (readerChannels, static_cast<float> (fileSampleRate)); + } + preview.lastPlaybackTime = chunkClipStart + (outputSamples / sampleRate); + + const float tonalityLimitNorm = static_cast<float> ( + fileSampleRate > 0.0 + ? getPitchOnlyPreviewTonalityLimitHz (pitchRatio < 1.0f) / fileSampleRate + : 0.0); + preview.stretcher.setTransposeFactor (pitchRatio, tonalityLimitNorm); + preview.stretcher.setFormantFactor (1.0f, true); + + if (pitchShiftWorkBuffer.getNumSamples() < fileSamplesToRead) + { + pitchShiftWorkBuffer.setSize (readerChannels, fileSamplesToRead); + pitchShiftWorkBufferResizeCount.fetch_add (1, std::memory_order_relaxed); + } + for (int ch = 0; ch < readerChannels; ++ch) + { + pitchPreviewInPtrs[static_cast<size_t> (ch)] = reusableFileBuffer.getReadPointer (ch); + pitchPreviewOutPtrs[static_cast<size_t> (ch)] = pitchShiftWorkBuffer.getWritePointer (ch); + } + preview.stretcher.process (pitchPreviewInPtrs, fileSamplesToRead, pitchPreviewOutPtrs, fileSamplesToRead); + for (int ch = 0; ch < readerChannels; ++ch) + reusableFileBuffer.copyFrom (ch, 0, pitchShiftWorkBuffer, ch, 0, fileSamplesToRead); } - preview.lastPlaybackTime = chunkClipStart + (outputSamples / sampleRate); - - const float tonalityLimitNorm = static_cast<float> ( - fileSampleRate > 0.0 - ? getPitchOnlyPreviewTonalityLimitHz (pitchRatio < 1.0f) / fileSampleRate - : 0.0); - preview.stretcher.setTransposeFactor (pitchRatio, tonalityLimitNorm); - preview.stretcher.setFormantFactor (1.0f, true); - - if (pitchShiftWorkBuffer.getNumSamples() < fileSamplesToRead) - { - pitchShiftWorkBuffer.setSize (readerChannels, fileSamplesToRead); - pitchShiftWorkBufferResizeCount.fetch_add (1, std::memory_order_relaxed); - } - for (int ch = 0; ch < readerChannels; ++ch) - { - pitchPreviewInPtrs[static_cast<size_t> (ch)] = reusableFileBuffer.getReadPointer (ch); - pitchPreviewOutPtrs[static_cast<size_t> (ch)] = pitchShiftWorkBuffer.getWritePointer (ch); - } - preview.stretcher.process (pitchPreviewInPtrs, fileSamplesToRead, pitchPreviewOutPtrs, fileSamplesToRead); - for (int ch = 0; ch < readerChannels; ++ch) - reusableFileBuffer.copyFrom (ch, 0, pitchShiftWorkBuffer, ch, 0, fileSamplesToRead); } } } - const int outChannels = buffer.getNumChannels(); + const int outChannels = + playbackOutputChannels; const int channelsToProcess = std::min (outChannels, readerChannels); for (int i = 0; i < outputSamples; ++i) { @@ -1392,14 +2539,48 @@ void PlaybackEngine::fillTrackBuffer(const juce::String& trackId, for (int ch = 0; ch < channelsToProcess; ++ch) { - const float sourceSample = sampleBufferCubic (reusableFileBuffer, ch, fileSamplesToRead, filePos); - buffer.addSample (ch, outputStart + i, sourceSample * totalGain); + const float sourceSample = + allReadAheadReady + ? sampleBufferCubic( + reusableFileBuffer, + ch, + fileSamplesToRead, + filePos) + : 0.0f; + const float continuitySample = + streamingContinuity != nullptr + ? streamingContinuity + ->processSample( + ch, + sourceSample, + allReadAheadReady) + : sourceSample; + const float mixedSample = + continuitySample * totalGain; + playbackMix.addSample( + ch, + outputStart + i, + mixedSample); } + if (streamingContinuity != nullptr) + streamingContinuity->advanceFrame( + allReadAheadReady); + } + if (streamingContinuity != nullptr) + { + streamingContinuity + ->expectedNextTimelineTime = + outputTimelineStart + + static_cast<double>( + outputSamples) + / sampleRate; + streamingContinuity + ->hasExpectedTimelineTime = true; } if (shouldLogDetailed) { - logAudioPlayback ("fillTrackBuffer chunk track=" + trackId + OPENSTUDIO_LOG_AUDIO_PLAYBACK("fillTrackBuffer chunk track=" + trackId + " clipId=" + clip.clipId + " out=[" + juce::String (outputStart) + "," + juce::String (outputStart + outputSamples) + "]" + " clipStart=" + juce::String (chunkClipStart, 4) @@ -1440,12 +2621,14 @@ void PlaybackEngine::fillTrackBuffer(const juce::String& trackId, double playbackOffset = clip.offset + chunkClipStart; bool usingRenderedPreviewSegment = false; bool usingCorrectedSource = false; + const juce::String* readerKey = &clip.readerKey; if (activeSegment != nullptr) { playbackFile = activeSegment->audioFile; playbackOffset = activeSegment->fileOffsetSec + (chunkClipStart - activeSegment->startSec); usingRenderedPreviewSegment = true; + readerKey = &activeSegment->readerKey; } else if (clip.clipId.isNotEmpty()) { @@ -1455,316 +2638,64 @@ void PlaybackEngine::fillTrackBuffer(const juce::String& trackId, && playbackFile == correctedIt->second; } - mixedAnyChunk = mixChunk (chunkStart, chunkEnd - chunkStart, playbackFile, playbackOffset, + mixedAnyChunk = mixChunk (chunkStart, chunkEnd - chunkStart, playbackFile, + *readerKey, playbackOffset, usingRenderedPreviewSegment, usingCorrectedSource) || mixedAnyChunk; } if (mixedAnyChunk) ++mixedClipCount; } - continue; - - // Calculate read position within clip - double offsetInClip = currentTime - clip.startTime; - if (offsetInClip < 0) - { - // Clip starts partway through this buffer - offsetInClip = 0; - } - - // Get cached reader — never does disk I/O (readers pre-loaded in addClip) - juce::File playbackFile = clip.audioFile; - double playbackOffset = clip.offset + offsetInClip; - bool usingRenderedPreviewSegment = false; - if (clip.clipId.isNotEmpty()) - { - auto segmentIt = renderedPreviewSegments.find(clip.clipId); - if (segmentIt != renderedPreviewSegments.end()) - { - const double blockDurationSec = numSamples / sampleRate; - for (const auto& segment : segmentIt->second) - { - if (offsetInClip >= segment.startSec - 0.0005 - && offsetInClip < segment.endSec + 0.0005 - && (offsetInClip + blockDurationSec) > segment.startSec) - { - playbackFile = segment.audioFile; - usingRenderedPreviewSegment = true; - // Segment override files can either be local-zero window renders - // or full-clip renders carrying only a covered region. fileOffsetSec - // maps the clip-relative playhead back into the override file. - playbackOffset = juce::jmax(0.0, offsetInClip - segment.startSec + segment.fileOffsetSec); - break; - } - } - } - } - bool usingCorrectedSource = false; - if (!usingRenderedPreviewSegment && clip.clipId.isNotEmpty()) - { - auto correctedIt = pitchCorrectedFiles.find(clip.clipId); - if (correctedIt != pitchCorrectedFiles.end() - && correctedIt->second.existsAsFile() - && playbackFile == correctedIt->second) - { - usingCorrectedSource = true; - } - } - const bool allowLivePitchPreviewForBlock = !usingRenderedPreviewSegment && !usingCorrectedSource; - if (shouldLogDetailed) - { - logAudioPlayback("fillTrackBuffer overlap track=" + trackId - + " clipId=" + clip.clipId - + " window=[" + juce::String(currentTime, 3) + "," + juce::String(windowEnd, 3) + "]" - + " playbackFile=" + playbackFile.getFullPathName() - + " playbackOffset=" + juce::String(playbackOffset, 3) - + " sourceType=" + juce::String(usingRenderedPreviewSegment ? "preview_segment" - : (usingCorrectedSource ? "corrected" : "original")) - + " livePitchAllowed=" + juce::String(allowLivePitchPreviewForBlock ? "yes" : "no")); - } - - auto* reader = getCachedReader(playbackFile); - if (reader == nullptr) - { - const int missingReaders = missingReaderCount.fetch_add(1, std::memory_order_relaxed) + 1; - logAudioPlayback("fillTrackBuffer missingReader track=" + trackId - + " clipId=" + clip.clipId - + " file=" + playbackFile.getFullPathName() - + " currentTime=" + juce::String(currentTime, 3) - + " missingReaderCount=" + juce::String(missingReaders)); - continue; - } - - // Sample rate conversion ratio (file rate vs device rate) - double fileSampleRate = reader->sampleRate; - double ratio = fileSampleRate / sampleRate; // e.g. 48000/44100 = 1.0884 - - // Calculate file sample position using the FILE's sample rate - juce::int64 fileStartSample = (juce::int64)(playbackOffset * fileSampleRate); - - // How many output samples we can produce for this clip - int outputSamples = numSamples; - - // How many file samples we need to read (+2 for linear interpolation safety) - int fileSamplesToRead = (int)(outputSamples * ratio) + 2; - - // Adjust if we're near the end of the file - juce::int64 fileSamplesAvailable = reader->lengthInSamples - fileStartSample; - if (fileSamplesAvailable <= 0) - continue; - if (fileSamplesAvailable < fileSamplesToRead) - { - fileSamplesToRead = (int)fileSamplesAvailable; - // Reduce output samples accordingly - outputSamples = (int)((fileSamplesToRead - 1) / ratio); - } - - if (outputSamples <= 0 || fileSamplesToRead <= 0) - continue; - ++mixedClipCount; - if (shouldLogDetailed) - { - logAudioPlayback("fillTrackBuffer readReady track=" + trackId - + " clipId=" + clip.clipId - + " fileStartSample=" + juce::String(fileStartSample) - + " outputSamples=" + juce::String(outputSamples) - + " fileSamplesToRead=" + juce::String(fileSamplesToRead)); - } - - // Use pre-allocated buffer (resize only if needed — rare fallback) - int readerChannels = static_cast<int>(reader->numChannels); - if (reusableFileBuffer.getNumChannels() < readerChannels || - reusableFileBuffer.getNumSamples() < fileSamplesToRead) - { - reusableFileBuffer.setSize(juce::jmax(readerChannels, reusableFileBuffer.getNumChannels()), - juce::jmax(fileSamplesToRead, reusableFileBuffer.getNumSamples())); - } - reusableFileBuffer.clear(0, fileSamplesToRead); - - reader->read(&reusableFileBuffer, 0, fileSamplesToRead, fileStartSample, true, true); - - // ---- Real-time pitch preview: apply PitchShifter if active ---- - if (clip.clipId.isNotEmpty()) - { - auto previewIt = clipPitchPreviews.find (clip.clipId); - if (previewIt != clipPitchPreviews.end() && previewIt->second != nullptr) - { - juce::ScopedLock clipSl (previewIt->second->clipLock); - auto& preview = *previewIt->second; - const auto& previewData = preview.previewData; - const double clipTime = offsetInClip; - const double blockMidTime = offsetInClip + (fileSamplesToRead * 0.5 / fileSampleRate); - const bool withinPreviewWindow = blockMidTime >= previewData.previewStartSec - && blockMidTime <= previewData.previewEndSec; - const float pitchRatio = lookupPitchRatio (previewData.pitchSegments, blockMidTime); - const bool pitchPreviewActive = allowLivePitchPreviewForBlock - && withinPreviewWindow - && std::abs (pitchRatio - 1.0f) > 0.001f; - - if (! pitchPreviewActive) - { - preview.lastPlaybackTime = -1.0; - } - else - { - // Prepare stretcher on first use (or after reset) - if (! preview.prepared) - { - preview.stretcher.presetCheaper (readerChannels, static_cast<float> (fileSampleRate)); - preview.prepared = true; - } - - // Re-entering the preview window after a gap (lastPlaybackTime == -1): - // Reset the stretcher so its internal phases align with the current - // audio position. Without this, stale phases from a prior streaming - // position cause phase artifacts that sound "faster" or mis-timed at - // note boundaries. The ~30ms of latency fill that follows the reset is - // brief and far less jarring than the phase-misalignment artifact. - if (preview.lastPlaybackTime < 0.0) - { - preview.stretcher.presetCheaper (readerChannels, static_cast<float> (fileSampleRate)); - } - // Detect seeking: if playback time jumped, reinitialize - else if (std::abs (clipTime - preview.lastPlaybackTime) > 0.1) - { - preview.stretcher.presetCheaper (readerChannels, static_cast<float> (fileSampleRate)); - } - preview.lastPlaybackTime = clipTime + (fileSamplesToRead / fileSampleRate); - - const float tonalityLimitNorm = static_cast<float> ( - fileSampleRate > 0.0 - ? getPitchOnlyPreviewTonalityLimitHz (pitchRatio < 1.0f) / fileSampleRate - : 0.0); - preview.stretcher.setTransposeFactor (pitchRatio, tonalityLimitNorm); - // Keep the legacy live fallback in the same timbre family as the - // note-local renderer: preserve formants directly instead of using - // pitch-ratio compensation, which brightens upward edits and darkens - // downward edits by construction. - preview.stretcher.setFormantFactor (1.0f, true); - - // Ensure pitch shift work buffer is large enough - if (pitchShiftWorkBuffer.getNumSamples() < fileSamplesToRead) - pitchShiftWorkBuffer.setSize (readerChannels, fileSamplesToRead); - - // Use pre-allocated pointer vectors — avoids heap alloc per clip per callback. - // readerChannels is always 1 or 2; pitchPreviewInPtrs/OutPtrs are sized to 2. - for (int ch = 0; ch < readerChannels; ++ch) - { - pitchPreviewInPtrs[static_cast<size_t> (ch)] = reusableFileBuffer.getReadPointer (ch); - pitchPreviewOutPtrs[static_cast<size_t> (ch)] = pitchShiftWorkBuffer.getWritePointer (ch); - } - - preview.stretcher.process (pitchPreviewInPtrs, fileSamplesToRead, pitchPreviewOutPtrs, fileSamplesToRead); - - for (int ch = 0; ch < readerChannels; ++ch) - reusableFileBuffer.copyFrom (ch, 0, pitchShiftWorkBuffer, ch, 0, fileSamplesToRead); - } - } - } - - // Apply per-clip gain (convert dB to linear) - float clipGain = juce::Decibels::decibelsToGain(static_cast<float>(clip.volumeDB)); - int fileChannels = readerChannels; - int outChannels = buffer.getNumChannels(); - - // Look up gain envelope for this clip - const std::vector<GainEnvelopePoint>* envPoints = nullptr; - if (clip.clipId.isNotEmpty()) - { - auto envIt = gainEnvelopes.find(clip.envelopeKey); - if (envIt != gainEnvelopes.end() && !envIt->second.empty()) - envPoints = &envIt->second; - } - - // Render mode with sample rate conversion: use Lagrange interpolation - if (renderMode && ratio != 1.0) - { - // Use a temporary buffer for Lagrange-resampled output per channel - // Process each channel independently - int channelsToProcess = std::min(outChannels, fileChannels); - for (int ch = 0; ch < channelsToProcess; ++ch) - { - auto& interpolator = (ch == 0) ? lagrangeInterpolatorL : lagrangeInterpolatorR; - const float* inputData = reusableFileBuffer.getReadPointer(ch); - - // Create a temporary output buffer for this channel - // We write directly into the output by accumulating sample by sample - // Use a small stack buffer for the resampled data - std::vector<float> resampledData(static_cast<size_t>(outputSamples)); - interpolator.process(ratio, inputData, resampledData.data(), outputSamples); - - // Apply fades, gain envelope, and clip gain, then mix into output buffer - for (int i = 0; i < outputSamples; ++i) - { - float fadeGain = 1.0f; - double sampleTimeInClip = offsetInClip + (i / sampleRate); - - if (clip.fadeIn > 0.0 && sampleTimeInClip < clip.fadeIn) - { - float t = static_cast<float>(sampleTimeInClip / clip.fadeIn); - fadeGain *= applyFadeCurve(t, clip.fadeInCurve); - } - - double timeFromEnd = clip.duration - sampleTimeInClip; - if (clip.fadeOut > 0.0 && timeFromEnd < clip.fadeOut) - { - float t = static_cast<float>(timeFromEnd / clip.fadeOut); - fadeGain *= applyFadeCurve(t, clip.fadeOutCurve); - } - - float envGain = envPoints ? interpolateGainEnvelope(*envPoints, sampleTimeInClip) : 1.0f; + } - buffer.addSample(ch, i, resampledData[static_cast<size_t>(i)] * clipGain * fadeGain * envGain); - } - } - } - else - { - // Real-time path: Resample (linear interpolation) + apply gain/fades in one pass - for (int i = 0; i < outputSamples; ++i) + const bool startedOuterRecovery = + trackContinuity.beginBlock( + true, + timelineContiguous, + playbackOutputChannels); + if (startedOuterRecovery) + { + outerLockContinuityRecoveryCount.fetch_add( + 1, std::memory_order_relaxed); + } + for (int sample = 0; + sample < numSamples; + ++sample) + { + for (int channel = 0; + channel < playbackOutputChannels; + ++channel) { - // Fractional position in the file buffer for this output sample - double filePos = i * ratio; - int idx = (int)filePos; - float frac = (float)(filePos - idx); - - // Fade calculation (with curve support) - float fadeGain = 1.0f; - double sampleTimeInClip = offsetInClip + (i / sampleRate); - - if (clip.fadeIn > 0.0 && sampleTimeInClip < clip.fadeIn) - { - float t = static_cast<float>(sampleTimeInClip / clip.fadeIn); - fadeGain *= applyFadeCurve(t, clip.fadeInCurve); - } - - double timeFromEnd = clip.duration - sampleTimeInClip; - if (clip.fadeOut > 0.0 && timeFromEnd < clip.fadeOut) - { - float t = static_cast<float>(timeFromEnd / clip.fadeOut); - fadeGain *= applyFadeCurve(t, clip.fadeOutCurve); - } - - float envGain = envPoints ? interpolateGainEnvelope(*envPoints, sampleTimeInClip) : 1.0f; - float totalGain = clipGain * fadeGain * envGain; - - // Linear interpolation + gain for each channel - for (int ch = 0; ch < std::min(outChannels, fileChannels); ++ch) - { - float s0 = reusableFileBuffer.getSample(ch, idx); - float s1 = (idx + 1 < fileSamplesToRead) ? reusableFileBuffer.getSample(ch, idx + 1) : s0; - float sample = s0 + frac * (s1 - s0); // lerp - buffer.addSample(ch, i, sample * totalGain); - } + const float continuousSample = + trackContinuity.processSample( + channel, + playbackMix.getSample( + channel, sample), + true); + playbackMix.setSample( + channel, + sample, + continuousSample); + buffer.addSample( + channel, + sample, + continuousSample); } - } // end real-time path + trackContinuity.advanceFrame(true); } + trackContinuity.expectedNextTimelineTime = + currentTime + + static_cast<double>(numSamples) + / sampleRate; + trackContinuity.hasExpectedTimelineTime = + true; const bool shouldUpdatePlaybackPeak = mixedClipCount > 0 && ((fillCall & 15) == 0 || shouldLogDetailed); const float playbackPeak = mixedClipCount == 0 ? 0.0f : (shouldUpdatePlaybackPeak - ? peakForBuffer(buffer, numSamples) + ? peakForBuffer( + playbackMix, numSamples) : lastTrackPlaybackPeak.load(std::memory_order_relaxed)); lastOverlappingClipCount.store(overlappingClipCount, std::memory_order_relaxed); lastMixedClipCount.store(mixedClipCount, std::memory_order_relaxed); @@ -1772,7 +2703,7 @@ void PlaybackEngine::fillTrackBuffer(const juce::String& trackId, lastTrackPlaybackPeak.store(playbackPeak, std::memory_order_relaxed); if (shouldLogDetailed || (overlappingClipCount > 0 && mixedClipCount == 0)) { - logAudioPlayback("fillTrackBuffer summary track=" + trackId + OPENSTUDIO_LOG_AUDIO_PLAYBACK("fillTrackBuffer summary track=" + trackId + " overlapping=" + juce::String(overlappingClipCount) + " mixed=" + juce::String(mixedClipCount) + " peak=" + juce::String(playbackPeak, 4) @@ -1783,3 +2714,4 @@ void PlaybackEngine::fillTrackBuffer(const juce::String& trackId, #if defined(_MSC_VER) #pragma warning(pop) #endif +#undef OPENSTUDIO_LOG_AUDIO_PLAYBACK diff --git a/Source/PlaybackEngine.h b/Source/PlaybackEngine.h index 1b163c7..1a3da26 100644 --- a/Source/PlaybackEngine.h +++ b/Source/PlaybackEngine.h @@ -15,6 +15,7 @@ #include <vector> #include <map> #include <limits> +#include <array> /** * PlaybackEngine manages audio clip playback for the DAW. @@ -51,6 +52,7 @@ class PlaybackEngine juce::String trackId; // Which track this clip belongs to juce::String clipId; // Unique clip ID for envelope lookup juce::String envelopeKey; // Pre-computed "trackId::clipId" key — avoids string alloc in audio thread + juce::String readerKey; // Stable read-ahead stream for this logical clip bool isActive; // Whether clip is currently loaded ClipInfo(const juce::File& file, double start, double dur, const juce::String& track, double off = 0.0, @@ -66,12 +68,14 @@ class PlaybackEngine const juce::String& clipId = juce::String(), const juce::File& sourceAudioFile = juce::File(), double sourceOffset = -1.0); void removeClip(const juce::String& trackId, const juce::String& filePath); + void removeClipById(const juce::String& trackId, const juce::String& clipId); void clearAllClips(); void clearTrackClips(const juce::String& trackId); // Hot-swap a clip's audio file (used after pitch correction writes a new file) void replaceClipAudioFile(const juce::String& clipId, const juce::File& newFile); void queueDeferredClipAudioFile(const juce::String& clipId, const juce::File& newFile, bool restoringOriginal = false); + void cancelDeferredClipAudioFile(const juce::String& clipId); bool commitDeferredClipAudioFile(const juce::String& clipId); int commitAllDeferredClipAudioFiles(); @@ -84,6 +88,7 @@ class PlaybackEngine double startSec = 0.0; double endSec = 0.0; double fileOffsetSec = 0.0; + juce::String readerKey; }; struct ClipPlaybackSourceStatus @@ -202,6 +207,14 @@ class PlaybackEngine juce::String monitorMode; }; + struct PitchPreviewRoutingDiagnosticStatus + { + bool scrubPreviewActive = false; + bool clipLivePreviewActive = false; + bool renderedSegmentActive = false; + bool correctedSourceActive = false; + }; + // Set a pitch correction map for a clip (enables real-time preview) void setClipPitchPreview (const juce::String& clipId, const ClipPitchPreviewData& preview); @@ -218,9 +231,16 @@ class PlaybackEngine bool updatePitchScrubPreview (const juce::String& clipId, float pitchRatio); void clearPitchScrubPreview (const juce::String& clipId); bool hasPitchScrubPreview (const juce::String& clipId) const; + bool mayRenderPitchScrubPreview() const noexcept + { + return pitchScrubPreviewMayRender.load(std::memory_order_acquire); + } void renderPitchScrubPreview (juce::AudioBuffer<float>& buffer, double sampleRate); PitchScrubPreviewStatus getPitchScrubPreviewStatus (const juce::String& clipId = {}) const; PitchPreviewRoutingStatus getPitchPreviewRoutingStatus (const juce::String& clipId = {}) const; + // Lock-free aggregate route snapshot for diagnostics. Per-clip queries use + // getPitchPreviewRoutingStatus(clipId) and retain their detailed locked path. + PitchPreviewRoutingDiagnosticStatus getPitchPreviewRoutingDiagnosticStatus() const noexcept; // Utility int getNumClips() const { return (int)clips.size(); } @@ -235,7 +255,57 @@ class PlaybackEngine int getRenderResampleScratchResizeCount() const { return renderResampleScratchResizeCount.load(std::memory_order_relaxed); } int getChunkBoundaryReserveCount() const { return chunkBoundaryReserveCount.load(std::memory_order_relaxed); } int getAudioDataCacheMissCount() const { return audioDataCacheMissCount.load(std::memory_order_relaxed); } - int getAudioDataCachedFileCount() const { const juce::ScopedLock sl(lock); return static_cast<int>(audioDataCache.size()); } + int getAudioDataCachedFileCount() const { return cachedReaderCount.load(std::memory_order_acquire); } + juce::int64 getStreamingReadAheadCapacityBytes() const; + int getStreamingReaderEvictionCount() const { return streamingReaderEvictionCount.load(std::memory_order_relaxed); } + int getStreamingReaderBudgetOvercommitCount() const { return streamingReaderBudgetOvercommitCount.load(std::memory_order_relaxed); } + int getFullyDecodedSourceCount() const { return fullyDecodedSourceCount.load(std::memory_order_acquire); } + juce::int64 getFullyDecodedSourceBytes() const { return fullyDecodedSourceBytes.load(std::memory_order_acquire); } + int getFullyDecodedSourceEvictionCount() const { return fullyDecodedSourceEvictionCount.load(std::memory_order_relaxed); } + int getFullyDecodedSourceBudgetFallbackCount() const { return fullyDecodedSourceBudgetFallbackCount.load(std::memory_order_relaxed); } + int getStreamingContinuityConcealmentCount() const { return streamingContinuityConcealmentCount.load(std::memory_order_relaxed); } + juce::int64 getStreamingContinuityConcealedSampleCount() const { return streamingContinuityConcealedSampleCount.load(std::memory_order_relaxed); } + int getStreamingContinuityRecoveryCount() const { return streamingContinuityRecoveryCount.load(std::memory_order_relaxed); } + int getOuterLockContinuityConcealmentCount() const { return outerLockContinuityConcealmentCount.load(std::memory_order_relaxed); } + juce::int64 getOuterLockContinuityConcealedSampleCount() const { return outerLockContinuityConcealedSampleCount.load(std::memory_order_relaxed); } + int getOuterLockContinuityRecoveryCount() const { return outerLockContinuityRecoveryCount.load(std::memory_order_relaxed); } + + struct StreamingContinuityRegressionResult + { + bool passed = false; + float concealmentEntryStep = 0.0f; + float recoveryMaximumStep = 0.0f; + float partitionMaximumDifference = 0.0f; + float recoveredSample = 0.0f; + float fadeToZeroFinalSample = 0.0f; + }; + + // Deterministic coverage of the same bounded conceal/recovery state used by + // the callback when a large streaming source misses its read-ahead window. + static StreamingContinuityRegressionResult + runStreamingContinuityRegression() noexcept; + + struct OuterLockContinuityRegressionResult + { + bool passed = false; + int tryLockMisses = 0; + int concealmentEvents = 0; + int recoveryEvents = 0; + float concealmentEntryStep = 0.0f; + float recoveryEntryStep = 0.0f; + float recoveredSample = 0.0f; + }; + + // Forces the publication lock to be owned by another thread and verifies + // that fillTrackBuffer emits bounded continuity rather than dropping the + // complete playback contribution. + static OuterLockContinuityRegressionResult + runOuterLockContinuityRegression(); + + // Control-thread hint used before starts/seeks. It only requests/optionally + // waits for JUCE's background buffering thread; source decoding never runs + // on the realtime callback. + void requestReadAheadAtTime(double timelineTimeSeconds); // Thread-safe snapshot of all clips (for offline rendering) std::vector<ClipInfo> getClipSnapshot() const; @@ -243,20 +313,76 @@ class PlaybackEngine // Render mode: uses Lagrange interpolation for higher quality resampling void setRenderMode(bool isRendering) { renderMode = isRendering; } - // Max cached readers before eviction + // Each streaming reader holds two 32768-frame blocks and source readers are + // capped to two channels. The normal cache target is therefore 128 MiB. + // Readers referenced by active clips are never evicted into permanent + // silence; an exceptional overcommit is surfaced by telemetry. static constexpr int MAX_CACHED_READERS = 256; + static constexpr int STREAMING_READ_AHEAD_SAMPLES = 32768; + static constexpr juce::int64 MAX_FULLY_DECODED_SOURCE_BYTES = + 64LL * 1024LL * 1024LL; + static constexpr juce::int64 MAX_FULLY_DECODED_CACHE_BYTES = + 256LL * 1024LL * 1024LL; private: - std::vector<ClipInfo> clips; - std::map<juce::String, std::unique_ptr<juce::AudioFormatReader>> readers; - struct CachedAudioData + static constexpr int STREAMING_RECOVERY_SAMPLES = 64; + static constexpr float STREAMING_CONCEALMENT_DECAY = 0.9995f; + + struct FullyDecodedSource { - juce::AudioBuffer<float> buffer; + juce::AudioBuffer<float> samples; double sampleRate = 0.0; juce::int64 lengthInSamples = 0; int numChannels = 0; + juce::int64 decodedBytes = 0; + }; + + struct StreamingContinuityState + { + std::array<float, 2> lastOutput {}; + std::array<float, 2> concealedOutput {}; + double expectedNextTimelineTime = 0.0; + int recoverySamplesRemaining = 0; + int activeChannels = 0; + bool hasOutputHistory = false; + bool hasExpectedTimelineTime = false; + bool concealing = false; + + void reset(int channels) noexcept; + bool beginBlock(bool sourceReady, + bool timelineContiguous, + int channels) noexcept; + float processSample(int channel, + float sourceSample, + bool sourceReady) noexcept; + void advanceFrame(bool sourceReady) noexcept; }; - std::map<juce::String, std::shared_ptr<CachedAudioData>> audioDataCache; + + struct TrackPlaybackContinuitySlot + { + juce::int64 trackKey = 0; + juce::uint64 lastUseCounter = 0; + StreamingContinuityState continuity; + }; + + std::vector<ClipInfo> clips; + // Declared before readers so it outlives them during reverse-order member + // destruction. BufferingAudioReader registers itself as a time-slice client. + juce::TimeSliceThread streamingReadAheadThread { "PlaybackEngine-ReadAhead" }; + std::map<juce::String, std::shared_ptr<juce::BufferingAudioReader>> readers; + // One fixed-size state per streaming reader. Entries are created and + // retired on the control thread while the existing publication lock is + // held; the callback only performs a lookup and updates scalar state. + std::map<juce::String, StreamingContinuityState> + streamingContinuityStates; + // Eligible sources are decoded completely before publication. The callback + // reads them through raw const pointers and never changes ownership or + // waits on a decoder/read-ahead lock. + std::map<juce::String, std::unique_ptr<FullyDecodedSource>> + fullyDecodedSources; + std::map<juce::String, juce::int64> + fullyDecodedSourceAccessTimes; + juce::int64 fullyDecodedBytesInUse = 0; juce::AudioFormatManager formatManager; mutable juce::CriticalSection lock; @@ -268,18 +394,34 @@ class PlaybackEngine // Pre-allocated file read buffer (avoids heap alloc on audio thread) juce::AudioBuffer<float> reusableFileBuffer; + // Playback is accumulated separately from sends/live input so an outer + // publication-lock miss can conceal only the missing clip contribution. + juce::AudioBuffer<float> reusableTrackPlaybackBuffer; juce::AudioBuffer<float> renderResampleScratch; std::vector<int> reusableChunkBoundaries; + static constexpr size_t TRACK_PLAYBACK_CONTINUITY_SLOT_COUNT = 128; + std::array<TrackPlaybackContinuitySlot, + TRACK_PLAYBACK_CONTINUITY_SLOT_COUNT> + trackPlaybackContinuitySlots {}; + juce::uint64 trackPlaybackContinuityUseCounter = 0; + StreamingContinuityState& + getTrackPlaybackContinuityState( + const juce::String& trackId) noexcept; + // Get cached audio format reader (audio-thread safe — never creates readers) - juce::AudioFormatReader* getCachedReader(const juce::File& file); + juce::BufferingAudioReader* getCachedReader(const juce::String& readerKey); + const FullyDecodedSource* getFullyDecodedSource( + const juce::String& readerKey) const noexcept; // Pre-load reader on message thread so it's ready for audio thread - void preloadReader(const juce::File& file); - void preloadAudioData(const juce::File& file, juce::AudioFormatReader& reader); - - // Legacy: get or create reader (only called from message thread now) - juce::AudioFormatReader* getReader(const juce::File& file); + void preloadReader(const juce::File& file, + const juce::String& readerKey, + double initialOffsetSeconds = 0.0, + int maxWaitMilliseconds = 50); + static bool primeStreamingReader(juce::BufferingAudioReader& reader, + double offsetSeconds, + int maxWaitMilliseconds); // Apply a fade curve to a normalized t value (0.0 to 1.0) // curveType: 0=linear, 1=equal_power, 2=s_curve, 3=log, 4=exp @@ -294,7 +436,14 @@ class PlaybackEngine std::map<juce::String, juce::int64> readerAccessTimes; // Evict oldest readers when cache exceeds limit - void evictOldReaders(); + void evictOldReaders(const juce::String& protectedKey = {}); + bool evictFullyDecodedSourcesToFitLocked( + juce::int64 requiredBytes, + const juce::String& protectedKey, + std::vector<std::unique_ptr<FullyDecodedSource>>& retiredSources); + void refreshStreamingReaderDiagnosticsLocked() noexcept; + void refreshFullyDecodedSourceDiagnosticsLocked() noexcept; + void refreshPitchPreviewRoutingDiagnosticsLocked() noexcept; // ---- Real-time pitch preview state ---- @@ -309,6 +458,7 @@ class PlaybackEngine // Keyed by clipId — only clips with active pitch preview have entries std::map<juce::String, std::unique_ptr<ClipPitchPreviewState>> clipPitchPreviews; + std::atomic<bool> pitchScrubPreviewMayRender { false }; PitchScrubPreviewData pitchScrubPreview; PitchScrubPreviewStatus pitchScrubPreviewStatus; signalsmith::stretch::SignalsmithStretch<float> pitchScrubStretcher; @@ -352,6 +502,25 @@ class PlaybackEngine std::atomic<int> renderResampleScratchResizeCount { 0 }; std::atomic<int> chunkBoundaryReserveCount { 0 }; std::atomic<int> audioDataCacheMissCount { 0 }; + std::atomic<int> cachedReaderCount { 0 }; + std::atomic<juce::int64> cachedStreamingReadAheadCapacityBytes { 0 }; + std::atomic<unsigned int> pitchPreviewRoutingDiagnosticFlags { 0 }; + std::atomic<int> streamingReaderEvictionCount { 0 }; + std::atomic<int> streamingReaderBudgetOvercommitCount { 0 }; + std::atomic<int> fullyDecodedSourceCount { 0 }; + std::atomic<juce::int64> fullyDecodedSourceBytes { 0 }; + std::atomic<int> fullyDecodedSourceEvictionCount { 0 }; + std::atomic<int> fullyDecodedSourceBudgetFallbackCount { 0 }; + std::atomic<int> streamingContinuityConcealmentCount { 0 }; + std::atomic<juce::int64> streamingContinuityConcealedSampleCount { 0 }; + std::atomic<int> streamingContinuityRecoveryCount { 0 }; + std::atomic<int> outerLockContinuityConcealmentCount { 0 }; + std::atomic<juce::int64> outerLockContinuityConcealedSampleCount { 0 }; + std::atomic<int> outerLockContinuityRecoveryCount { 0 }; + + static_assert(std::atomic<int>::is_always_lock_free); + static_assert(std::atomic<juce::int64>::is_always_lock_free); + static_assert(std::atomic<unsigned int>::is_always_lock_free); JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(PlaybackEngine) }; diff --git a/Source/PluginManager.cpp b/Source/PluginManager.cpp index 06e66f3..7a79a4f 100644 --- a/Source/PluginManager.cpp +++ b/Source/PluginManager.cpp @@ -15,15 +15,599 @@ juce::File getLegacyStudio13DocumentsDirectory() auto documentsDir = juce::File::getSpecialLocation(juce::File::userDocumentsDirectory); return documentsDir.getChildFile("Studio13"); } + +constexpr bool shouldIgnorePathCase() +{ + #if JUCE_WINDOWS + return true; + #else + return false; + #endif +} + +juce::String normalisePath(const juce::String& path) +{ + auto cleanedPath = path.trim().unquoted(); + if (cleanedPath.isEmpty()) + return {}; + + if (cleanedPath == "~" || cleanedPath.startsWith("~/") || cleanedPath.startsWith("~\\")) + { + cleanedPath = juce::File::getSpecialLocation(juce::File::userHomeDirectory).getFullPathName() + + cleanedPath.substring(1); + } + + #if JUCE_WINDOWS + int variableStart = cleanedPath.indexOfChar('%'); + while (variableStart >= 0) + { + const int variableEnd = cleanedPath.indexOfChar(variableStart + 1, '%'); + if (variableEnd < 0) + break; + + const auto variableName = cleanedPath.substring(variableStart + 1, variableEnd); + const auto variableValue = juce::SystemStats::getEnvironmentVariable(variableName, {}); + if (variableValue.isEmpty()) + return {}; + + cleanedPath = cleanedPath.replaceSection(variableStart, + variableEnd - variableStart + 1, + variableValue); + variableStart = cleanedPath.indexOfChar(variableStart + variableValue.length(), '%'); + } + #endif + + auto file = juce::File(cleanedPath); + if (file.isSymbolicLink()) + file = file.getLinkedTarget(); + + return file.getFullPathName(); +} + +juce::String normaliseCandidateIdentifier(const juce::String& identifier) +{ + auto cleanedIdentifier = identifier.trim().unquoted(); + if (cleanedIdentifier.isEmpty()) + return {}; + + if (juce::File::isAbsolutePath(cleanedIdentifier)) + return juce::File(cleanedIdentifier).getFullPathName(); + + return cleanedIdentifier; +} + +bool containsNormalisedPath(const juce::StringArray& values, const juce::String& value) +{ + return values.contains(value, shouldIgnorePathCase()); +} + +bool candidateIdentifiersEqual(const juce::String& first, const juce::String& second) +{ + const auto normalisedFirst = normaliseCandidateIdentifier(first); + const auto normalisedSecond = normaliseCandidateIdentifier(second); + const bool bothAreFilePaths = juce::File::isAbsolutePath(normalisedFirst) + && juce::File::isAbsolutePath(normalisedSecond); + + if (bothAreFilePaths && shouldIgnorePathCase()) + return normalisedFirst.equalsIgnoreCase(normalisedSecond); + + // Non-filesystem identifiers such as LV2 URIs are case-sensitive on every + // platform, including Windows. + return normalisedFirst == normalisedSecond; +} + +int indexOfCandidateIdentifier(const juce::StringArray& values, const juce::String& value) +{ + for (int i = 0; i < values.size(); ++i) + if (candidateIdentifiersEqual(values[i], value)) + return i; + return -1; +} + +bool containsCandidateIdentifier(const juce::StringArray& values, const juce::String& value) +{ + return indexOfCandidateIdentifier(values, value) >= 0; +} + +void addUniqueCandidateIdentifier(juce::StringArray& values, const juce::String& value) +{ + if (!containsCandidateIdentifier(values, value)) + values.add(value); +} + +void addUniquePath(juce::StringArray& paths, const juce::String& path) +{ + auto normalised = normalisePath(path); + if (normalised.isNotEmpty()) + paths.addIfNotAlreadyThere(normalised, shouldIgnorePathCase()); +} + +void addUniquePath(juce::StringArray& paths, const juce::File& path) +{ + addUniquePath(paths, path.getFullPathName()); +} + +void addSearchPath(juce::StringArray& paths, const juce::FileSearchPath& searchPath) +{ + for (int i = 0; i < searchPath.getNumPaths(); ++i) + addUniquePath(paths, searchPath.getRawString(i)); +} + +void addEnvironmentSearchPath(juce::StringArray& paths, const juce::String& variableName) +{ + auto value = juce::SystemStats::getEnvironmentVariable(variableName, {}); + if (value.isEmpty()) + return; + + juce::StringArray entries; + #if JUCE_WINDOWS + entries.addTokens(value, ";", "\""); + #else + entries.addTokens(value, ":", "\""); + #endif + entries.trim(); + entries.removeEmptyStrings(); + + for (const auto& entry : entries) + addUniquePath(paths, entry); +} + +juce::StringArray getSearchPathsForFormat(juce::AudioPluginFormat& format, + const juce::StringArray& customPaths) +{ + juce::StringArray paths; + addSearchPath(paths, format.getDefaultLocationsToSearch()); + + const auto formatName = format.getName(); + const auto executableDirectory = juce::File::getSpecialLocation(juce::File::currentExecutableFile) + .getParentDirectory(); + + #if JUCE_WINDOWS + const auto programFiles = juce::File::getSpecialLocation(juce::File::globalApplicationsDirectory); + const auto localAppData = juce::File::getSpecialLocation(juce::File::windowsLocalAppData); + const auto roamingAppData = juce::File::getSpecialLocation(juce::File::userApplicationDataDirectory); + + if (formatName.containsIgnoreCase("VST3")) + { + addUniquePath(paths, programFiles.getChildFile("Common Files").getChildFile("VST3")); + addUniquePath(paths, localAppData.getChildFile("Programs").getChildFile("Common").getChildFile("VST3")); + addUniquePath(paths, executableDirectory.getChildFile("VST3")); + addEnvironmentSearchPath(paths, "VST3_PATH"); + } + else if (formatName.containsIgnoreCase("LV2")) + { + addUniquePath(paths, programFiles.getChildFile("Common Files").getChildFile("LV2")); + addUniquePath(paths, roamingAppData.getChildFile("LV2")); + addUniquePath(paths, juce::File::getSpecialLocation(juce::File::userHomeDirectory).getChildFile(".lv2")); + addEnvironmentSearchPath(paths, "LV2_PATH"); + } + else if (formatName.equalsIgnoreCase("CLAP")) + { + addUniquePath(paths, programFiles.getChildFile("Common Files").getChildFile("CLAP")); + addUniquePath(paths, localAppData.getChildFile("Programs").getChildFile("Common").getChildFile("CLAP")); + addEnvironmentSearchPath(paths, "CLAP_PATH"); + } + #elif JUCE_MAC + const auto userHome = juce::File::getSpecialLocation(juce::File::userHomeDirectory); + + if (formatName.containsIgnoreCase("VST3")) + { + addUniquePath(paths, juce::File("/Library/Audio/Plug-Ins/VST3")); + addUniquePath(paths, userHome.getChildFile("Library/Audio/Plug-Ins/VST3")); + addUniquePath(paths, executableDirectory.getChildFile("VST3")); + addEnvironmentSearchPath(paths, "VST3_PATH"); + } + else if (formatName.containsIgnoreCase("LV2")) + { + addUniquePath(paths, juce::File("/Library/Audio/Plug-Ins/LV2")); + addUniquePath(paths, userHome.getChildFile("Library/Audio/Plug-Ins/LV2")); + addUniquePath(paths, userHome.getChildFile(".lv2")); + addEnvironmentSearchPath(paths, "LV2_PATH"); + } + else if (formatName.equalsIgnoreCase("CLAP")) + { + addUniquePath(paths, juce::File("/Library/Audio/Plug-Ins/CLAP")); + addUniquePath(paths, userHome.getChildFile("Library/Audio/Plug-Ins/CLAP")); + addEnvironmentSearchPath(paths, "CLAP_PATH"); + } + #else + const auto userHome = juce::File::getSpecialLocation(juce::File::userHomeDirectory); + + if (formatName.containsIgnoreCase("VST3")) + { + addUniquePath(paths, juce::File("/usr/lib/vst3")); + addUniquePath(paths, juce::File("/usr/local/lib/vst3")); + addUniquePath(paths, userHome.getChildFile(".vst3")); + addUniquePath(paths, executableDirectory.getChildFile("VST3")); + addEnvironmentSearchPath(paths, "VST3_PATH"); + } + else if (formatName.containsIgnoreCase("LV2")) + { + addUniquePath(paths, juce::File("/usr/lib/lv2")); + addUniquePath(paths, juce::File("/usr/local/lib/lv2")); + addUniquePath(paths, userHome.getChildFile(".lv2")); + addEnvironmentSearchPath(paths, "LV2_PATH"); + } + else if (formatName.equalsIgnoreCase("CLAP")) + { + addUniquePath(paths, juce::File("/usr/lib/clap")); + addUniquePath(paths, juce::File("/usr/local/lib/clap")); + addUniquePath(paths, userHome.getChildFile(".clap")); + addEnvironmentSearchPath(paths, "CLAP_PATH"); + } + #endif + + for (const auto& customPath : customPaths) + addUniquePath(paths, customPath); + + return paths; +} + +juce::FileSearchPath makeFileSearchPath(const juce::StringArray& paths) +{ + juce::FileSearchPath result; + for (const auto& path : paths) + result.add(juce::File(path)); + return result; +} + +juce::StringArray getDeduplicatedCandidates(juce::AudioPluginFormat& format, + const juce::StringArray& paths) +{ + auto discovered = format.searchPathsForPlugins(makeFileSearchPath(paths), true, false); + juce::StringArray result; + + for (const auto& candidate : discovered) + { + auto normalised = normaliseCandidateIdentifier(candidate); + if (normalised.isNotEmpty()) + addUniqueCandidateIdentifier(result, normalised); + } + + return result; +} + +juce::var makeStringArrayVar(const juce::StringArray& values) +{ + juce::Array<juce::var> result; + result.ensureStorageAllocated(values.size()); + for (const auto& value : values) + result.add(value); + return juce::var(std::move(result)); +} + +void migrateLegacyFile(const juce::File& legacyFile, const juce::File& destinationFile) +{ + if (destinationFile.existsAsFile() || !legacyFile.existsAsFile()) + return; + + destinationFile.getParentDirectory().createDirectory(); + if (legacyFile.copyFileTo(destinationFile)) + { + juce::Logger::writeToLog("PluginManager: Migrated " + legacyFile.getFullPathName() + + " to " + destinationFile.getFullPathName()); + } + else + { + juce::Logger::writeToLog("PluginManager: Failed to migrate " + legacyFile.getFullPathName() + + " to " + destinationFile.getFullPathName()); + } +} + +juce::String getCanonicalPluginIdentifier(const juce::String& identifier) +{ + auto normalised = normaliseCandidateIdentifier(identifier); + if (!juce::File::isAbsolutePath(normalised)) + return normalised; + + auto current = juce::File(normalised); + auto canonicalBundle = current; + bool foundBundle = false; + + for (;;) + { + const auto extension = current.getFileExtension(); + if (extension.equalsIgnoreCase(".vst3") + || extension.equalsIgnoreCase(".lv2") + || extension.equalsIgnoreCase(".clap")) + { + canonicalBundle = current; + foundBundle = true; + } + + const auto parent = current.getParentDirectory(); + if (parent == current) + break; + current = parent; + } + + return foundBundle ? canonicalBundle.getFullPathName() : normalised; +} + +bool identifiersMatch(const juce::String& first, const juce::String& second) +{ + const auto normalisedFirst = getCanonicalPluginIdentifier(first); + const auto normalisedSecond = getCanonicalPluginIdentifier(second); + return candidateIdentifiersEqual(normalisedFirst, normalisedSecond); +} + +int indexOfPluginIdentifier(const juce::StringArray& values, + const juce::String& value) +{ + for (int i = 0; i < values.size(); ++i) + if (identifiersMatch(values[i], value)) + return i; + return -1; +} + +bool containsPluginIdentifier(const juce::StringArray& values, + const juce::String& value) +{ + return indexOfPluginIdentifier(values, value) >= 0; +} + +bool descriptionMatchesCandidate(const juce::PluginDescription& description, + const juce::String& formatName, + const juce::String& candidate) +{ + return description.pluginFormatName.equalsIgnoreCase(formatName) + && identifiersMatch(description.fileOrIdentifier, candidate); +} + +void removeDescriptionsForCandidate(juce::KnownPluginList& list, + const juce::String& formatName, + const juce::String& candidate) +{ + const auto descriptions = list.getTypes(); + for (const auto& description : descriptions) + if (descriptionMatchesCandidate(description, formatName, candidate)) + list.removeType(description); +} + +class PluginProbeState final +{ +public: + void setFailure(const juce::String& identifier, const juce::String& reason) + { + const auto existingIndex = indexOfCandidateIdentifier(identifiers, identifier); + if (existingIndex >= 0) + { + reasons.set(existingIndex, reason); + return; + } + + identifiers.add(identifier); + reasons.add(reason); + } + + juce::String getFailure(const juce::String& identifier) const + { + const auto index = indexOfCandidateIdentifier(identifiers, identifier); + return index >= 0 ? reasons[index] : juce::String(); + } + + const juce::StringArray& getIdentifiers() const noexcept + { + return identifiers; + } + + void setInfrastructureFailure(const juce::String& reason) + { + if (infrastructureFailure.isEmpty()) + infrastructureFailure = reason; + } + + bool hadInfrastructureFailure() const noexcept + { + return infrastructureFailure.isNotEmpty(); + } + + const juce::String& getInfrastructureFailure() const noexcept + { + return infrastructureFailure; + } + +private: + juce::StringArray identifiers; + juce::StringArray reasons; + juce::String infrastructureFailure; +}; + +class ScopedPluginProbeArtifacts final +{ +public: + ScopedPluginProbeArtifacts() + : reportFile(juce::File::createTempFile(".openstudio-plugin-scan.xml")), + logFile(reportFile.withFileExtension("log")) + { + reportFile.deleteFile(); + logFile.deleteFile(); + } + + ~ScopedPluginProbeArtifacts() + { + reportFile.deleteFile(); + logFile.deleteFile(); + } + + juce::String appendLogTail(const juce::String& reason) const + { + auto input = logFile.createInputStream(); + if (input == nullptr) + return reason; + + constexpr juce::int64 maximumTailBytes = 2048; + const auto streamLength = input->getTotalLength(); + if (streamLength > maximumTailBytes) + input->setPosition(streamLength - maximumTailBytes); + + const auto tail = input->readEntireStreamAsString().trim(); + return tail.isEmpty() ? reason : reason + " Probe log tail:\n" + tail; + } + + juce::File reportFile; + juce::File logFile; +}; + +class OutOfProcessPluginScanner final : public juce::KnownPluginList::CustomScanner +{ +public: + OutOfProcessPluginScanner(std::shared_ptr<PluginProbeState> stateToUse, + const juce::StringArray& effectiveSearchPaths) + : state(std::move(stateToUse)), + searchPathsFile(juce::File::createTempFile(".openstudio-plugin-paths.xml")) + { + searchPathsFile.deleteFile(); + + juce::XmlElement root("PLUGIN_SEARCH_PATHS"); + for (const auto& path : effectiveSearchPaths) + root.createNewChildElement("PATH")->setAttribute("value", path); + + if (!root.writeTo(searchPathsFile)) + state->setInfrastructureFailure("The isolated scanner search-path manifest could not be created."); + } + + ~OutOfProcessPluginScanner() override + { + searchPathsFile.deleteFile(); + } + + bool findPluginTypesFor(juce::AudioPluginFormat& format, + juce::OwnedArray<juce::PluginDescription>& result, + const juce::String& fileOrIdentifier) override + { + constexpr int timeoutMs = 20000; + constexpr int pollIntervalMs = 10; + + if (state->hadInfrastructureFailure()) + { + state->setFailure(fileOrIdentifier, state->getInfrastructureFailure()); + return false; + } + + ScopedPluginProbeArtifacts artifacts; + + juce::StringArray arguments; + arguments.add(juce::File::getSpecialLocation(juce::File::currentExecutableFile).getFullPathName()); + arguments.add("--plugin-scan-probe-headless"); + arguments.add(fileOrIdentifier); + arguments.add("--plugin-format"); + arguments.add(format.getName()); + arguments.add("--plugin-search-paths-file"); + arguments.add(searchPathsFile.getFullPathName()); + arguments.add("--report"); + arguments.add(artifacts.reportFile.getFullPathName()); + + juce::ChildProcess process; + if (!process.start(arguments, 0)) + { + const auto reason = artifacts.appendLogTail( + "The isolated plugin scanner process could not be started."); + state->setFailure(fileOrIdentifier, reason); + state->setInfrastructureFailure(reason); + return false; + } + + int elapsedMs = 0; + while (process.isRunning() && elapsedMs < timeoutMs && !shouldExit()) + { + juce::Thread::sleep(pollIntervalMs); + elapsedMs += pollIntervalMs; + } + + if (process.isRunning()) + { + const bool cancelled = shouldExit(); + process.kill(); + process.waitForProcessToFinish(500); + const auto reason = cancelled + ? juce::String("The plugin scan was cancelled.") + : juce::String("The isolated plugin scanner timed out after 20 seconds and was terminated."); + state->setFailure(fileOrIdentifier, artifacts.appendLogTail(reason)); + return false; + } + + const auto exitCode = process.getExitCode(); + auto report = juce::parseXML(artifacts.reportFile); + + if (report == nullptr || !report->hasTagName("PLUGIN_SCAN_RESULT")) + { + state->setFailure( + fileOrIdentifier, + artifacts.appendLogTail( + "The isolated plugin scanner exited without a valid report (exit code " + + juce::String(static_cast<juce::int64>(exitCode)) + ").")); + return false; + } + + const auto status = report->getStringAttribute("status"); + const auto reportedError = report->getStringAttribute("error"); + if (status != "ok") + { + const auto reason = reportedError.isNotEmpty() + ? reportedError + : "The isolated scanner returned status '" + status + "'."; + state->setFailure(fileOrIdentifier, artifacts.appendLogTail(reason)); + // The helper completed and returned a valid diagnostic. Treat this + // as a normal scan failure, rather than a scanner crash blacklist. + return true; + } + + if (exitCode != 0) + { + state->setFailure( + fileOrIdentifier, + artifacts.appendLogTail( + "The isolated scanner returned a successful report but exited with code " + + juce::String(static_cast<juce::int64>(exitCode)) + ".")); + return false; + } + + int descriptionCount = 0; + for (auto* child : report->getChildIterator()) + { + juce::PluginDescription description; + if (!description.loadFromXml(*child)) + { + state->setFailure( + fileOrIdentifier, + artifacts.appendLogTail( + "The isolated scanner returned malformed plugin-description data.")); + result.clear(); + return false; + } + + result.add(new juce::PluginDescription(description)); + ++descriptionCount; + } + + if (descriptionCount <= 0 + || descriptionCount != report->getIntAttribute("pluginCount", descriptionCount)) + { + state->setFailure( + fileOrIdentifier, + artifacts.appendLogTail( + "The isolated scanner report contained an inconsistent plugin count.")); + result.clear(); + return false; + } + + return true; + } + +private: + std::shared_ptr<PluginProbeState> state; + juce::File searchPathsFile; +}; } PluginManager::PluginManager() { // Add default formats (VST3, LV2, AU, etc.) - formatManager.addDefaultFormats(); + juce::addDefaultFormatsToManager(formatManager); // Add CLAP hosting (not built into JUCE — custom format) - formatManager.addFormat(new CLAPPluginFormat()); + formatManager.addFormat(std::make_unique<CLAPPluginFormat>()); // Debug: Log how many formats were added juce::Logger::writeToLog("PluginManager: Constructor - formatManager has " + @@ -35,18 +619,33 @@ PluginManager::PluginManager() juce::Logger::writeToLog("PluginManager: Format " + juce::String(i) + ": " + format->getName()); } - pluginListFile = getOpenStudioDocumentsDirectory().getChildFile("PluginList.xml"); - auto legacyPluginListFile = getLegacyStudio13DocumentsDirectory().getChildFile("PluginList.xml"); - if (!pluginListFile.existsAsFile() && legacyPluginListFile.existsAsFile()) - pluginListFile = legacyPluginListFile; + const auto openStudioDirectory = getOpenStudioDocumentsDirectory(); + const auto legacyStudio13Directory = getLegacyStudio13DocumentsDirectory(); + openStudioDirectory.createDirectory(); + + pluginListFile = openStudioDirectory.getChildFile("PluginList.xml"); + blacklistFile = openStudioDirectory.getChildFile("PluginBlacklist.txt"); + pluginSearchPathsFile = openStudioDirectory.getChildFile("PluginSearchPaths.xml"); + pluginScanDeadMansPedalFile = openStudioDirectory.getChildFile("PluginScanDeadMansPedal.txt"); - blacklistFile = getOpenStudioDocumentsDirectory().getChildFile("PluginBlacklist.txt"); - auto legacyBlacklistFile = getLegacyStudio13DocumentsDirectory().getChildFile("PluginBlacklist.txt"); - if (!blacklistFile.existsAsFile() && legacyBlacklistFile.existsAsFile()) - blacklistFile = legacyBlacklistFile; + // Copy legacy state once, but never continue reading or writing the legacy + // files. This prevents the old Studio13 location from remaining sticky. + migrateLegacyFile(legacyStudio13Directory.getChildFile("PluginList.xml"), pluginListFile); + migrateLegacyFile(legacyStudio13Directory.getChildFile("PluginBlacklist.txt"), blacklistFile); if (blacklistFile.existsAsFile()) + { blacklistFile.readLines(blacklistedPlugins); + blacklistedPlugins.trim(); + blacklistedPlugins.removeEmptyStrings(); + juce::StringArray deduplicatedBlacklist; + for (const auto& pluginId : blacklistedPlugins) + if (!containsPluginIdentifier(deduplicatedBlacklist, pluginId)) + deduplicatedBlacklist.add(pluginId); + blacklistedPlugins = std::move(deduplicatedBlacklist); + } + + loadPluginSearchPaths(); // Load existing plugin list if available loadPluginList(); @@ -60,126 +659,351 @@ PluginManager::~PluginManager() savePluginList(); } -void PluginManager::scanForPlugins() +juce::var PluginManager::scanForPlugins(bool forceRescan) { - // Create debug log file - juce::File debugLog = getOpenStudioDocumentsDirectory().getChildFile("plugin_scan_debug.txt"); + // Only one background scan may run at a time. The main manager lock is + // deliberately held only for short snapshots and the final commit so UI + // calls never wait behind third-party probe timeouts. + const juce::ScopedLock serialisedScanLock(pluginScanLock); + + juce::StringArray customPathsSnapshot; + juce::StringArray blacklistSnapshot; + std::unique_ptr<juce::XmlElement> currentCatalog; + juce::uint64 stateRevisionAtStart = 0; + { + const juce::ScopedLock managerLock(pluginManagerLock); + customPathsSnapshot = customPluginSearchPaths; + blacklistSnapshot = blacklistedPlugins; + currentCatalog = knownPluginList.createXml(); + stateRevisionAtStart = pluginStateRevision; + } + + juce::AudioPluginFormatManager scanFormatManager; + juce::addDefaultFormatsToManager(scanFormatManager); + scanFormatManager.addFormat(std::make_unique<CLAPPluginFormat>()); + + const auto debugLog = getOpenStudioDocumentsDirectory().getChildFile("plugin_scan_debug.txt"); debugLog.getParentDirectory().createDirectory(); debugLog.deleteFile(); debugLog.create(); - - auto writeLog = [&debugLog](const juce::String& message) { + + const auto writeLog = [&debugLog](const juce::String& message) + { juce::Logger::writeToLog(message); debugLog.appendText(message + "\n"); }; - - writeLog("PluginManager: Starting plugin scan..."); - writeLog("PluginManager: Number of formats available: " + juce::String(formatManager.getNumFormats())); - - // Clear existing list - knownPluginList.clear(); - - // Scan for each plugin format - for (int i = 0; i < formatManager.getNumFormats(); ++i) + + writeLog("PluginManager: Starting transactional, isolated plugin scan [mode=" + + juce::String(forceRescan ? "deep" : "cached") + "]"); + writeLog("PluginManager: Supported format count: " + juce::String(scanFormatManager.getNumFormats())); + + juce::KnownPluginList scannedPluginList; + if (currentCatalog != nullptr) + scannedPluginList.recreateFromXml(*currentCatalog); + scannedPluginList.clearBlacklistedFiles(); + + struct ActiveCandidate { - auto* format = formatManager.getFormat(i); - writeLog("PluginManager: Scanning " + format->getName() + " plugins..."); - - // Get default plugin search paths for this format - juce::FileSearchPath searchPaths = format->getDefaultLocationsToSearch(); - - // Add additional common plugin locations manually - if (format->getName().contains("VST3")) - { - // Common VST3 locations on Windows - searchPaths.add(juce::File("C:\\Program Files\\Common Files\\VST3")); - searchPaths.add(juce::File("C:\\Program Files\\Steinberg\\VstPlugins")); - searchPaths.add(juce::File("C:\\Program Files\\VSTPlugins")); - searchPaths.add(juce::File::getSpecialLocation(juce::File::userApplicationDataDirectory) - .getChildFile("VST3")); - } - else if (format->getName().contains("LV2")) - { - // Common LV2 locations on Windows - searchPaths.add(juce::File("C:\\Program Files\\Common Files\\LV2")); - searchPaths.add(juce::File("C:\\Program Files\\LV2")); - searchPaths.add(juce::File::getSpecialLocation(juce::File::userApplicationDataDirectory) - .getChildFile("LV2")); - // User home .lv2 - searchPaths.add(juce::File::getSpecialLocation(juce::File::userHomeDirectory) - .getChildFile(".lv2")); - } - else if (format->getName() == "CLAP") - { - // Common CLAP locations on Windows - searchPaths.add(juce::File("C:\\Program Files\\Common Files\\CLAP")); - } - - writeLog("PluginManager: Search paths: " + searchPaths.toString()); - writeLog("PluginManager: Number of search paths: " + juce::String(searchPaths.getNumPaths())); - - // Log each individual path - for (int p = 0; p < searchPaths.getNumPaths(); ++p) - { - auto path = searchPaths[p]; - writeLog("PluginManager: Path " + juce::String(p) + ": " + path.getFullPathName()); - writeLog("PluginManager: Path exists: " + juce::String(path.exists() ? "YES" : "NO")); - if (path.exists()) + juce::String format; + juce::String identifier; + }; + + std::vector<ActiveCandidate> activeCandidates; + juce::Array<juce::var> formatReports; + juce::Array<juce::var> failures; + juce::Array<juce::var> skipped; + juce::StringArray allSearchPaths; + int totalCandidateCount = 0; + int totalFailedCount = 0; + int totalSkippedCount = 0; + bool scanInfrastructureHealthy = true; + juce::String infrastructureError; + + for (int i = 0; i < scanFormatManager.getNumFormats(); ++i) + { + auto* format = scanFormatManager.getFormat(i); + if (format == nullptr) + continue; + + const auto formatName = format->getName(); + const auto searchPaths = getSearchPathsForFormat(*format, customPathsSnapshot); + for (const auto& path : searchPaths) + allSearchPaths.addIfNotAlreadyThere(path, shouldIgnorePathCase()); + + writeLog({}); + writeLog("PluginManager: Format: " + formatName); + for (const auto& path : searchPaths) + { + const auto directory = juce::File(path); + writeLog("PluginManager: Path: " + path + + " [" + (directory.isDirectory() ? "available" : "not found") + "]"); + } + + const auto candidates = getDeduplicatedCandidates(*format, searchPaths); + juce::StringArray allowedCandidates; + juce::Array<juce::var> formatSkipped; + for (const auto& candidate : candidates) + { + if (containsPluginIdentifier(blacklistSnapshot, candidate)) { - writeLog("PluginManager: Path is directory: " + juce::String(path.isDirectory() ? "YES" : "NO")); - - // List files in this directory - juce::Array<juce::File> files; - path.findChildFiles(files, juce::File::findFilesAndDirectories, true, "*.vst3;*.lv2"); - writeLog("PluginManager: Found " + juce::String(files.size()) + " plugin files in this path"); + const auto reason = "Skipped because this candidate is in the persisted user or legacy plug-in blacklist."; + auto* skippedCandidate = new juce::DynamicObject(); + skippedCandidate->setProperty("format", formatName); + skippedCandidate->setProperty("path", candidate); + skippedCandidate->setProperty("reason", reason); + const juce::var skippedValue(skippedCandidate); + formatSkipped.add(skippedValue); + skipped.add(skippedValue); + ++totalSkippedCount; + writeLog("PluginManager: Skipped blacklisted candidate: " + candidate + " - " + reason); + removeDescriptionsForCandidate(scannedPluginList, formatName, candidate); + continue; } + + allowedCandidates.add(candidate); + activeCandidates.push_back({ formatName, candidate }); } - - // Get all plugin files in these locations - auto fileOrIdentifiers = format->searchPathsForPlugins(searchPaths, true, false); - - writeLog("PluginManager: Found " + juce::String(fileOrIdentifiers.size()) + " potential plugin files"); - - // Scan each plugin - int foundCount = 0; - for (const auto& fileOrIdentifier : fileOrIdentifiers) - { - writeLog("PluginManager: Checking: " + fileOrIdentifier); - - if (format->fileMightContainThisPluginType(fileOrIdentifier)) + + totalCandidateCount += candidates.size(); + writeLog("PluginManager: Candidate count (deduplicated): " + juce::String(candidates.size())); + + juce::StringArray candidatesNeedingProbe; + const auto cachedDescriptions = scannedPluginList.getTypes(); + for (const auto& candidate : allowedCandidates) + { + bool hasCachedDescription = false; + bool needsRescan = false; + + for (const auto& description : cachedDescriptions) { - juce::OwnedArray<juce::PluginDescription> foundDescriptions; - format->findAllTypesForFile(foundDescriptions, fileOrIdentifier); - - for (auto* desc : foundDescriptions) + if (!descriptionMatchesCandidate(description, formatName, candidate)) + continue; + + hasCachedDescription = true; + if (format->pluginNeedsRescanning(description)) + needsRescan = true; + } + + if (forceRescan || !hasCachedDescription || needsRescan) + { + removeDescriptionsForCandidate(scannedPluginList, formatName, candidate); + candidatesNeedingProbe.add(candidate); + } + } + + writeLog("PluginManager: Reused unchanged candidates: " + + juce::String(allowedCandidates.size() - candidatesNeedingProbe.size())); + writeLog("PluginManager: Candidates requiring isolated probe: " + + juce::String(candidatesNeedingProbe.size())); + + auto probeState = std::make_shared<PluginProbeState>(); + scannedPluginList.setCustomScanner( + std::make_unique<OutOfProcessPluginScanner>(probeState, searchPaths)); + + juce::StringArray scannerFailures; + { + // Candidate enumeration was already performed above. Start the JUCE + // scanner with an empty path and provide the exact canonical list. + juce::PluginDirectoryScanner scanner(scannedPluginList, + *format, + juce::FileSearchPath(), + true, + pluginScanDeadMansPedalFile, + false); + scanner.setFilesOrIdentifiersToScan(candidatesNeedingProbe); + + if (!candidatesNeedingProbe.isEmpty()) + { + bool hasMoreFiles = true; + while (hasMoreFiles) + { + juce::String pluginBeingScanned; + hasMoreFiles = scanner.scanNextFile(true, pluginBeingScanned); + if (pluginBeingScanned.isNotEmpty()) + writeLog("PluginManager: Isolated probe completed: " + pluginBeingScanned); + } + } + + scannerFailures.addArray(scanner.getFailedFiles()); + } + + juce::StringArray failedCandidates; + for (const auto& failed : scannerFailures) + addUniqueCandidateIdentifier(failedCandidates, failed); + for (const auto& failed : probeState->getIdentifiers()) + addUniqueCandidateIdentifier(failedCandidates, failed); + for (const auto& candidate : candidatesNeedingProbe) + { + if (containsCandidateIdentifier(scannedPluginList.getBlacklistedFiles(), candidate)) + addUniqueCandidateIdentifier(failedCandidates, candidate); + } + + for (const auto& failedCandidate : failedCandidates) + { + removeDescriptionsForCandidate(scannedPluginList, formatName, failedCandidate); + + auto reason = probeState->getFailure(failedCandidate); + if (reason.isEmpty()) + reason = "A previous scan was interrupted while inspecting this plugin."; + + auto* failure = new juce::DynamicObject(); + failure->setProperty("format", formatName); + failure->setProperty("path", failedCandidate); + failure->setProperty("reason", reason); + failures.add(juce::var(failure)); + writeLog("PluginManager: Failed: " + failedCandidate + " - " + reason); + } + + int formatPluginCount = 0; + for (const auto& description : scannedPluginList.getTypes()) + { + if (!description.pluginFormatName.equalsIgnoreCase(formatName)) + continue; + + for (const auto& candidate : allowedCandidates) + { + if (descriptionMatchesCandidate(description, formatName, candidate)) { - knownPluginList.addType(*desc); - foundCount++; - writeLog("PluginManager: ✓ Found plugin: " + desc->name + " by " + desc->manufacturerName); + ++formatPluginCount; + writeLog("PluginManager: Found: " + description.name + " by " + + description.manufacturerName + " [" + description.fileOrIdentifier + "]"); + break; } } - else + } + + const int failedCount = failedCandidates.size(); + const int formatSkippedCount = formatSkipped.size(); + totalFailedCount += failedCount; + + auto* formatReport = new juce::DynamicObject(); + formatReport->setProperty("format", formatName); + formatReport->setProperty("candidateCount", candidates.size()); + formatReport->setProperty("pluginCount", formatPluginCount); + formatReport->setProperty("failedCount", failedCount); + formatReport->setProperty("skippedCount", formatSkippedCount); + formatReport->setProperty("skipped", juce::var(std::move(formatSkipped))); + formatReport->setProperty("paths", makeStringArrayVar(searchPaths)); + formatReports.add(juce::var(formatReport)); + + writeLog("PluginManager: Format result: " + juce::String(formatPluginCount) + + " plugin descriptions, " + juce::String(failedCount) + " failures, " + + juce::String(formatSkippedCount) + " skipped"); + + // Failure to launch the helper is an infrastructure failure, not a bad + // plugin. Preserve the existing catalog instead of committing an empty + // or partial replacement. + if (probeState->hadInfrastructureFailure()) + { + scanInfrastructureHealthy = false; + if (infrastructureError.isEmpty()) + infrastructureError = probeState->getInfrastructureFailure(); + } + } + + scannedPluginList.setCustomScanner(std::unique_ptr<juce::KnownPluginList::CustomScanner>()); + + // Remove stale entries for uninstalled plugins, paths that are no longer + // configured, unsupported formats, and user-blacklisted candidates. + const auto scannedDescriptions = scannedPluginList.getTypes(); + for (const auto& description : scannedDescriptions) + { + bool isActive = false; + for (const auto& candidate : activeCandidates) + { + if (descriptionMatchesCandidate(description, candidate.format, candidate.identifier)) { - writeLog("PluginManager: ✗ File does not contain this plugin type"); + isActive = true; + break; } } - - writeLog("PluginManager: Format " + format->getName() + " scan complete. Found " + juce::String(foundCount) + " plugins"); + + if (!isActive) + { + writeLog("PluginManager: Pruned stale catalog entry: " + description.name + + " [" + description.fileOrIdentifier + + "] because its candidate is no longer present in the effective search paths or is blacklisted."); + scannedPluginList.removeType(description); + } + } + scannedPluginList.clearBlacklistedFiles(); + + bool committed = false; + if (scanInfrastructureHealthy) + { + if (auto scannedXml = scannedPluginList.createXml()) + { + { + const juce::ScopedLock managerLock(pluginManagerLock); + if (pluginStateRevision != stateRevisionAtStart) + { + infrastructureError = "Plugin paths, blacklist, or catalog changed while the scan was running; the stale scan was not committed."; + } + else + { + auto previousCatalog = knownPluginList.createXml(); + knownPluginList.recreateFromXml(*scannedXml); + if (savePluginList()) + { + ++pluginStateRevision; + committed = true; + } + else + { + if (previousCatalog != nullptr) + knownPluginList.recreateFromXml(*previousCatalog); + infrastructureError = "The completed plugin catalog could not be saved."; + } + } + } + } + else + { + infrastructureError = "The completed plugin catalog could not be serialised."; + } } - - writeLog("PluginManager: ========================================"); - writeLog("PluginManager: SCAN COMPLETE. Total plugins found: " + - juce::String(knownPluginList.getNumTypes())); - writeLog("PluginManager: ========================================"); - writeLog("PluginManager: Debug log saved to: " + debugLog.getFullPathName()); - savePluginList(); - // Also scan for S13FX/JSFX scripts scanForS13FX(); + + int pluginCount = scannedPluginList.getNumTypes(); + if (!committed) + { + const juce::ScopedLock managerLock(pluginManagerLock); + pluginCount = knownPluginList.getNumTypes(); + } + writeLog({}); + writeLog("PluginManager: Scan " + juce::String(committed ? "committed" : "not committed")); + writeLog("PluginManager: Plugin descriptions: " + juce::String(pluginCount)); + writeLog("PluginManager: Candidates: " + juce::String(totalCandidateCount)); + writeLog("PluginManager: Failures: " + juce::String(totalFailedCount)); + writeLog("PluginManager: Skipped blacklisted candidates: " + juce::String(totalSkippedCount)); + writeLog("PluginManager: Debug log: " + debugLog.getFullPathName()); + + auto* report = new juce::DynamicObject(); + report->setProperty("success", committed); + report->setProperty("forceRescan", forceRescan); + if (!committed) + { + report->setProperty("error", + infrastructureError.isNotEmpty() + ? infrastructureError + : "The plugin scan could not be committed."); + } + report->setProperty("pluginCount", pluginCount); + report->setProperty("candidateCount", totalCandidateCount); + report->setProperty("failedCount", totalFailedCount); + report->setProperty("skippedCount", totalSkippedCount); + report->setProperty("paths", makeStringArrayVar(allSearchPaths)); + report->setProperty("failures", juce::var(std::move(failures))); + report->setProperty("skipped", juce::var(std::move(skipped))); + report->setProperty("formats", juce::var(std::move(formatReports))); + report->setProperty("debugLogPath", debugLog.getFullPathName()); + return juce::var(report); } juce::Array<juce::PluginDescription> PluginManager::getAvailablePlugins() const { + const juce::ScopedLock managerLock(pluginManagerLock); juce::Array<juce::PluginDescription> plugins; for (const auto& type : knownPluginList.getTypes()) @@ -190,9 +1014,17 @@ juce::Array<juce::PluginDescription> PluginManager::getAvailablePlugins() const return plugins; } +std::vector<S13FXInfo> PluginManager::getAvailableS13FX() const +{ + const juce::ScopedLock managerLock(pluginManagerLock); + return s13fxList; +} + std::unique_ptr<juce::AudioProcessor> PluginManager::loadPlugin(const juce::PluginDescription& description, double sampleRate, int blockSize) { + const juce::ScopedLock managerLock(pluginManagerLock); + // Refuse to load blacklisted plugins (previously crashed) if (isPluginBlacklisted(description.fileOrIdentifier)) { @@ -200,6 +1032,21 @@ std::unique_ptr<juce::AudioProcessor> PluginManager::loadPlugin(const juce::Plug return nullptr; } + if (liveLv2PathsNeedPriming && description.pluginFormatName.containsIgnoreCase("LV2")) + { + for (int i = 0; i < formatManager.getNumFormats(); ++i) + { + auto* format = formatManager.getFormat(i); + if (format != nullptr && format->getName().equalsIgnoreCase(description.pluginFormatName)) + { + const auto lv2Paths = getSearchPathsForFormat(*format, customPluginSearchPaths); + format->searchPathsForPlugins(makeFileSearchPath(lv2Paths), true, false); + liveLv2PathsNeedPriming = false; + break; + } + } + } + juce::String errorMessage; // Clamp block size to at least 512 — ASIO buffers can be as small as 32 samples, @@ -227,57 +1074,84 @@ std::unique_ptr<juce::AudioProcessor> PluginManager::loadPlugin(const juce::Plug std::unique_ptr<juce::AudioProcessor> PluginManager::loadPluginFromFile(const juce::String& filePath, double sampleRate, int blockSize) { + const juce::ScopedLock managerLock(pluginManagerLock); juce::Logger::writeToLog("PluginManager: Loading plugin from: " + filePath); - // 1. Exact match in known list + // A JUCE identifier string selects an exact class, including bundles that + // expose multiple plugin classes from one filesystem module. + if (auto exactDescription = knownPluginList.getTypeForIdentifierString(filePath)) + { + juce::Logger::writeToLog("PluginManager: Exact catalog identifier found"); + return loadPlugin(*exactDescription, sampleRate, blockSize); + } + + // Retain backwards compatibility with projects that stored a module path. for (const auto& desc : knownPluginList.getTypes()) { - if (desc.fileOrIdentifier == filePath) + const bool isExactPath = shouldIgnorePathCase() + ? desc.fileOrIdentifier.equalsIgnoreCase(filePath) + : desc.fileOrIdentifier == filePath; + if (isExactPath) { juce::Logger::writeToLog("PluginManager: Exact match found in known list"); return loadPlugin(desc, sampleRate, blockSize); } } - // 2. Partial match — the saved fileOrIdentifier from a loaded plugin instance - // may be the inner module path (e.g. .../Contents/x86_64-win/Plugin.vst3) - // while the known list stores the bundle path (e.g. .../Plugin.vst3). - // Try matching if one path contains the other. + // Older projects may contain the inner binary path while the catalog stores + // the outer bundle. Compare canonical bundle boundaries, not substrings. for (const auto& desc : knownPluginList.getTypes()) { - if (filePath.contains(desc.fileOrIdentifier) || desc.fileOrIdentifier.contains(filePath)) + if (identifiersMatch(filePath, desc.fileOrIdentifier)) { - juce::Logger::writeToLog("PluginManager: Partial match found: " + desc.fileOrIdentifier); + juce::Logger::writeToLog("PluginManager: Canonical bundle match found: " + desc.fileOrIdentifier); return loadPlugin(desc, sampleRate, blockSize); } } - // 3. Direct scan — try to load from the file path directly - juce::File pluginFile(filePath); - // Walk up to find the plugin bundle directory if we have an inner path - juce::File bundleFile = pluginFile; - while (bundleFile.getParentDirectory() != bundleFile && - bundleFile.getFileExtension() != ".vst3" && - bundleFile.getFileExtension() != ".lv2" && - bundleFile.getFileExtension() != ".clap") - { - bundleFile = bundleFile.getParentDirectory(); - } + // Unknown paths are metadata-scanned in a disposable helper process. + const auto candidate = getCanonicalPluginIdentifier(filePath); for (int i = 0; i < formatManager.getNumFormats(); ++i) { auto* format = formatManager.getFormat(i); - juce::String candidate = bundleFile.getFullPathName(); if (format->fileMightContainThisPluginType(candidate)) { + auto probeState = std::make_shared<PluginProbeState>(); + OutOfProcessPluginScanner scanner( + probeState, + getSearchPathsForFormat(*format, customPluginSearchPaths)); juce::OwnedArray<juce::PluginDescription> descriptions; - format->findAllTypesForFile(descriptions, candidate); + const bool probeCompleted = scanner.findPluginTypesFor(*format, descriptions, candidate); + if (!probeCompleted) + { + juce::Logger::writeToLog("PluginManager: Isolated direct scan failed: " + + probeState->getFailure(candidate)); + return nullptr; + } + if (descriptions.size() > 0) { juce::Logger::writeToLog("PluginManager: Direct scan found: " + descriptions[0]->name); - knownPluginList.addType(*descriptions[0]); + auto previousCatalog = knownPluginList.createXml(); + for (const auto* description : descriptions) + if (description != nullptr) + knownPluginList.addType(*description); + + if (savePluginList()) + { + ++pluginStateRevision; + } + else if (previousCatalog != nullptr) + { + knownPluginList.recreateFromXml(*previousCatalog); + } return loadPlugin(*descriptions[0], sampleRate, blockSize); } + + const auto reason = probeState->getFailure(candidate); + if (reason.isNotEmpty()) + juce::Logger::writeToLog("PluginManager: Isolated direct scan rejected the candidate: " + reason); } } @@ -285,18 +1159,28 @@ std::unique_ptr<juce::AudioProcessor> PluginManager::loadPluginFromFile(const ju return nullptr; } -void PluginManager::savePluginList() +bool PluginManager::savePluginList() { + const juce::ScopedLock managerLock(pluginManagerLock); if (auto xml = knownPluginList.createXml()) { - // Create parent directory if needed pluginListFile.getParentDirectory().createDirectory(); - - if (xml->writeTo(pluginListFile)) + juce::TemporaryFile temporaryFile(pluginListFile); + + if (xml->writeTo(temporaryFile.getFile()) + && temporaryFile.overwriteTargetFileWithTemporary()) { juce::Logger::writeToLog("PluginManager: Saved plugin list to " + pluginListFile.getFullPathName()); + return true; + } + else + { + juce::Logger::writeToLog("PluginManager: Failed to save plugin list to " + + pluginListFile.getFullPathName()); } } + + return false; } void PluginManager::loadPluginList() @@ -316,6 +1200,141 @@ void PluginManager::loadPluginList() } } +bool PluginManager::savePluginSearchPaths() const +{ + pluginSearchPathsFile.getParentDirectory().createDirectory(); + + juce::XmlElement root("PLUGIN_SEARCH_PATHS"); + root.setAttribute("version", 1); + for (const auto& path : customPluginSearchPaths) + { + auto* child = root.createNewChildElement("PATH"); + child->setAttribute("value", path); + } + + juce::TemporaryFile temporaryFile(pluginSearchPathsFile); + if (!root.writeTo(temporaryFile.getFile())) + return false; + + return temporaryFile.overwriteTargetFileWithTemporary(); +} + +void PluginManager::loadPluginSearchPaths() +{ + customPluginSearchPaths.clear(); + if (!pluginSearchPathsFile.existsAsFile()) + return; + + auto xml = juce::parseXML(pluginSearchPathsFile); + if (xml == nullptr || !xml->hasTagName("PLUGIN_SEARCH_PATHS")) + { + juce::Logger::writeToLog("PluginManager: Ignoring malformed plugin search-path file: " + + pluginSearchPathsFile.getFullPathName()); + return; + } + + for (auto* child : xml->getChildIterator()) + { + if (!child->hasTagName("PATH")) + continue; + + addUniquePath(customPluginSearchPaths, child->getStringAttribute("value")); + } +} + +juce::var PluginManager::getPluginScanConfiguration() const +{ + const juce::ScopedLock managerLock(pluginManagerLock); + + juce::StringArray supportedFormats; + juce::Array<juce::var> effectivePaths; + + for (int i = 0; i < formatManager.getNumFormats(); ++i) + { + auto* format = formatManager.getFormat(i); + if (format == nullptr) + continue; + + const auto formatName = format->getName(); + supportedFormats.addIfNotAlreadyThere(formatName, true); + const auto paths = getSearchPathsForFormat(*format, customPluginSearchPaths); + for (const auto& path : paths) + { + auto* pathInfo = new juce::DynamicObject(); + pathInfo->setProperty("format", formatName); + pathInfo->setProperty("path", path); + pathInfo->setProperty("exists", juce::File(path).isDirectory()); + pathInfo->setProperty("custom", containsNormalisedPath(customPluginSearchPaths, normalisePath(path))); + effectivePaths.add(juce::var(pathInfo)); + } + } + + juce::StringArray unsupportedFormats; + unsupportedFormats.add("VST2"); + unsupportedFormats.add("AAX"); + unsupportedFormats.add("32-bit plug-ins in this 64-bit build"); + unsupportedFormats.add("Standalone applications"); + #if !JUCE_MAC + unsupportedFormats.add("Audio Unit (AU/AUv3)"); + #endif + + auto* configuration = new juce::DynamicObject(); + configuration->setProperty("customPaths", makeStringArrayVar(customPluginSearchPaths)); + configuration->setProperty("blacklistedPlugins", makeStringArrayVar(blacklistedPlugins)); + configuration->setProperty("effectivePaths", juce::var(std::move(effectivePaths))); + configuration->setProperty("supportedFormats", makeStringArrayVar(supportedFormats)); + configuration->setProperty("unsupportedFormats", makeStringArrayVar(unsupportedFormats)); + configuration->setProperty( + "contentLibraryNote", + "Kontakt, Reaktor, and NKS sound libraries or presets load inside their host plug-in and are not scanned as separate plug-ins. S13FX/JSFX scripts use the separate OpenStudio Effects content library."); + return juce::var(configuration); +} + +bool PluginManager::addPluginSearchPath(const juce::String& directoryPath) +{ + const juce::ScopedLock managerLock(pluginManagerLock); + + const auto path = normalisePath(directoryPath); + if (path.isEmpty() || !juce::File(path).isDirectory()) + return false; + + if (containsNormalisedPath(customPluginSearchPaths, path)) + return true; + + customPluginSearchPaths.add(path); + if (savePluginSearchPaths()) + { + liveLv2PathsNeedPriming = true; + ++pluginStateRevision; + return true; + } + + customPluginSearchPaths.removeString(path, shouldIgnorePathCase()); + return false; +} + +bool PluginManager::removePluginSearchPath(const juce::String& directoryPath) +{ + const juce::ScopedLock managerLock(pluginManagerLock); + + const auto path = normalisePath(directoryPath); + const int index = customPluginSearchPaths.indexOf(path, shouldIgnorePathCase()); + if (index < 0) + return false; + + const auto removedPath = customPluginSearchPaths[index]; + customPluginSearchPaths.remove(index); + if (savePluginSearchPaths()) + { + liveLv2PathsNeedPriming = true; + ++pluginStateRevision; + return true; + } + + customPluginSearchPaths.insert(index, removedPath); + return false; +} + // ---- S13FX / JSFX scanning ---- juce::File PluginManager::getUserEffectsDirectory() @@ -345,22 +1364,30 @@ juce::File PluginManager::getStockEffectsDirectory() void PluginManager::scanForS13FX() { - s13fxList.clear(); + std::vector<S13FXInfo> discoveredEffects; // Scan stock effects (bundled with app) auto stockDir = getStockEffectsDirectory(); if (stockDir.isDirectory()) - scanDirectory(stockDir, true); + scanDirectory(stockDir, true, discoveredEffects); // Scan user effects auto userDir = getUserEffectsDirectory(); if (userDir.isDirectory()) - scanDirectory(userDir, false); + scanDirectory(userDir, false, discoveredEffects); + + const auto discoveredCount = discoveredEffects.size(); + { + const juce::ScopedLock managerLock(pluginManagerLock); + s13fxList = std::move(discoveredEffects); + } - juce::Logger::writeToLog("PluginManager: Found " + juce::String(s13fxList.size()) + " S13FX/JSFX scripts"); + juce::Logger::writeToLog("PluginManager: Found " + juce::String(discoveredCount) + " S13FX/JSFX scripts"); } -void PluginManager::scanDirectory(const juce::File& dir, bool isStock) +void PluginManager::scanDirectory(const juce::File& dir, + bool isStock, + std::vector<S13FXInfo>& destination) { juce::Array<juce::File> files; dir.findChildFiles(files, juce::File::findFiles, true, "*.jsfx;*.s13fx"); @@ -392,9 +1419,9 @@ void PluginManager::scanDirectory(const juce::File& dir, bool isStock) } } - s13fxList.push_back(std::move(info)); juce::Logger::writeToLog("PluginManager: Found S13FX: " + info.name + (isStock ? " (stock)" : " (user)")); + destination.push_back(std::move(info)); } } @@ -402,33 +1429,50 @@ void PluginManager::scanDirectory(const juce::File& dir, bool isStock) bool PluginManager::isPluginBlacklisted(const juce::String& pluginId) const { - return blacklistedPlugins.contains(pluginId); + const juce::ScopedLock managerLock(pluginManagerLock); + return containsPluginIdentifier(blacklistedPlugins, pluginId); } void PluginManager::blacklistPlugin(const juce::String& pluginId) { - if (!blacklistedPlugins.contains(pluginId)) + const juce::ScopedLock managerLock(pluginManagerLock); + const auto normalisedPluginId = normaliseCandidateIdentifier(pluginId); + if (normalisedPluginId.isNotEmpty() + && !containsPluginIdentifier(blacklistedPlugins, normalisedPluginId)) { - blacklistedPlugins.add(pluginId); + blacklistedPlugins.add(normalisedPluginId); blacklistFile.getParentDirectory().createDirectory(); blacklistFile.replaceWithText(blacklistedPlugins.joinIntoString("\n")); - juce::Logger::writeToLog("PluginManager: Blacklisted plugin: " + pluginId); + ++pluginStateRevision; + juce::Logger::writeToLog("PluginManager: Blacklisted plugin: " + normalisedPluginId); } } -void PluginManager::removeFromBlacklist(const juce::String& pluginId) +bool PluginManager::removeFromBlacklist(const juce::String& pluginId) { - int idx = blacklistedPlugins.indexOf(pluginId); + const juce::ScopedLock managerLock(pluginManagerLock); + const auto normalisedPluginId = normaliseCandidateIdentifier(pluginId); + int idx = indexOfPluginIdentifier(blacklistedPlugins, normalisedPluginId); if (idx >= 0) { + const auto removedPluginId = blacklistedPlugins[idx]; blacklistedPlugins.remove(idx); - blacklistFile.replaceWithText(blacklistedPlugins.joinIntoString("\n")); - juce::Logger::writeToLog("PluginManager: Removed from blacklist: " + pluginId); + if (blacklistFile.replaceWithText(blacklistedPlugins.joinIntoString("\n"))) + { + ++pluginStateRevision; + juce::Logger::writeToLog("PluginManager: Removed from blacklist for retry: " + pluginId); + return true; + } + + blacklistedPlugins.insert(idx, removedPluginId); } + + return false; } juce::StringArray PluginManager::getBlacklistedPlugins() const { + const juce::ScopedLock managerLock(pluginManagerLock); return blacklistedPlugins; } @@ -443,6 +1487,7 @@ bool PluginManager::isARAPlugin(const juce::PluginDescription& description) cons juce::Array<juce::PluginDescription> PluginManager::getARAPlugins() const { + const juce::ScopedLock managerLock(pluginManagerLock); juce::Array<juce::PluginDescription> araPlugins; for (const auto& desc : knownPluginList.getTypes()) { diff --git a/Source/PluginManager.h b/Source/PluginManager.h index 2341361..3d98376 100644 --- a/Source/PluginManager.h +++ b/Source/PluginManager.h @@ -14,21 +14,28 @@ struct S13FXInfo bool isStock = false; // true = shipped with app (read-only) }; -// Manages VST3 plugin scanning and S13FX/JSFX script discovery +// Manages external plugin scanning and S13FX/JSFX script discovery class PluginManager { public: PluginManager(); ~PluginManager(); - // Scan for available plugins (VST3 + S13FX/JSFX) - void scanForPlugins(); + // Scan for available external plugins. The returned object contains a + // per-format discovery report suitable for presenting in the UI. + juce::var scanForPlugins(bool forceRescan = false); - // Get list of available VST3 plugins + // Persistent folders supplied by the user are searched by every supported + // external plugin format, in addition to that format's standard locations. + juce::var getPluginScanConfiguration() const; + bool addPluginSearchPath(const juce::String& directoryPath); + bool removePluginSearchPath(const juce::String& directoryPath); + + // Get all discovered external plugins juce::Array<juce::PluginDescription> getAvailablePlugins() const; // Get list of available S13FX/JSFX scripts - const std::vector<S13FXInfo>& getAvailableS13FX() const { return s13fxList; } + std::vector<S13FXInfo> getAvailableS13FX() const; // Scan for S13FX/JSFX scripts only void scanForS13FX(); @@ -54,7 +61,7 @@ class PluginManager // Plugin crash isolation: check if a plugin previously crashed bool isPluginBlacklisted(const juce::String& pluginId) const; void blacklistPlugin(const juce::String& pluginId); - void removeFromBlacklist(const juce::String& pluginId); + bool removeFromBlacklist(const juce::String& pluginId); juce::StringArray getBlacklistedPlugins() const; private: @@ -62,12 +69,23 @@ class PluginManager juce::KnownPluginList knownPluginList; juce::File pluginListFile; juce::File blacklistFile; + juce::File pluginSearchPathsFile; + juce::File pluginScanDeadMansPedalFile; juce::StringArray blacklistedPlugins; + juce::StringArray customPluginSearchPaths; std::vector<S13FXInfo> s13fxList; + mutable juce::CriticalSection pluginManagerLock; + juce::CriticalSection pluginScanLock; + bool liveLv2PathsNeedPriming = true; + juce::uint64 pluginStateRevision = 0; - void savePluginList(); + bool savePluginList(); void loadPluginList(); - void scanDirectory(const juce::File& dir, bool isStock); + bool savePluginSearchPaths() const; + void loadPluginSearchPaths(); + static void scanDirectory(const juce::File& dir, + bool isStock, + std::vector<S13FXInfo>& destination); JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(PluginManager) }; diff --git a/Source/PluginWindowManager.cpp b/Source/PluginWindowManager.cpp index 55b10e2..512b68a 100644 --- a/Source/PluginWindowManager.cpp +++ b/Source/PluginWindowManager.cpp @@ -36,6 +36,51 @@ std::optional<PluginWindowManager::PluginEditorTarget::Scope> stringToScope(cons return std::nullopt; } +juce::String functionKeyForDom(int keyCode) +{ + if (keyCode == juce::KeyPress::F1Key) return "F1"; + if (keyCode == juce::KeyPress::F2Key) return "F2"; + if (keyCode == juce::KeyPress::F3Key) return "F3"; + if (keyCode == juce::KeyPress::F4Key) return "F4"; + if (keyCode == juce::KeyPress::F5Key) return "F5"; + if (keyCode == juce::KeyPress::F6Key) return "F6"; + if (keyCode == juce::KeyPress::F7Key) return "F7"; + if (keyCode == juce::KeyPress::F8Key) return "F8"; + if (keyCode == juce::KeyPress::F9Key) return "F9"; + if (keyCode == juce::KeyPress::F10Key) return "F10"; + if (keyCode == juce::KeyPress::F11Key) return "F11"; + if (keyCode == juce::KeyPress::F12Key) return "F12"; + return {}; +} + +juce::String numberPadKeyForDom(int keyCode, bool code) +{ + const auto digit = [keyCode, code](int candidate, const char* value, const char* domCode) + { + return keyCode == candidate ? juce::String(code ? domCode : value) : juce::String(); + }; + + if (auto value = digit(juce::KeyPress::numberPad0, "0", "Numpad0"); value.isNotEmpty()) return value; + if (auto value = digit(juce::KeyPress::numberPad1, "1", "Numpad1"); value.isNotEmpty()) return value; + if (auto value = digit(juce::KeyPress::numberPad2, "2", "Numpad2"); value.isNotEmpty()) return value; + if (auto value = digit(juce::KeyPress::numberPad3, "3", "Numpad3"); value.isNotEmpty()) return value; + if (auto value = digit(juce::KeyPress::numberPad4, "4", "Numpad4"); value.isNotEmpty()) return value; + if (auto value = digit(juce::KeyPress::numberPad5, "5", "Numpad5"); value.isNotEmpty()) return value; + if (auto value = digit(juce::KeyPress::numberPad6, "6", "Numpad6"); value.isNotEmpty()) return value; + if (auto value = digit(juce::KeyPress::numberPad7, "7", "Numpad7"); value.isNotEmpty()) return value; + if (auto value = digit(juce::KeyPress::numberPad8, "8", "Numpad8"); value.isNotEmpty()) return value; + if (auto value = digit(juce::KeyPress::numberPad9, "9", "Numpad9"); value.isNotEmpty()) return value; + if (auto value = digit(juce::KeyPress::numberPadAdd, "+", "NumpadAdd"); value.isNotEmpty()) return value; + if (auto value = digit(juce::KeyPress::numberPadSubtract, "-", "NumpadSubtract"); value.isNotEmpty()) return value; + if (auto value = digit(juce::KeyPress::numberPadMultiply, "*", "NumpadMultiply"); value.isNotEmpty()) return value; + if (auto value = digit(juce::KeyPress::numberPadDivide, "/", "NumpadDivide"); value.isNotEmpty()) return value; + if (auto value = digit(juce::KeyPress::numberPadSeparator, ",", "NumpadComma"); value.isNotEmpty()) return value; + if (auto value = digit(juce::KeyPress::numberPadDecimalPoint, ".", "NumpadDecimal"); value.isNotEmpty()) return value; + if (auto value = digit(juce::KeyPress::numberPadEquals, "=", "NumpadEqual"); value.isNotEmpty()) return value; + if (auto value = digit(juce::KeyPress::numberPadDelete, "Delete", "NumpadDecimal"); value.isNotEmpty()) return value; + return {}; +} + juce::String normaliseKeyForDom(const juce::KeyPress& key) { const auto keyCode = key.getKeyCode(); @@ -53,15 +98,21 @@ juce::String normaliseKeyForDom(const juce::KeyPress& key) if (keyCode == juce::KeyPress::spaceKey) return " "; if (keyCode == juce::KeyPress::returnKey) return "Enter"; + if (keyCode == juce::KeyPress::tabKey) return "Tab"; if (keyCode == juce::KeyPress::escapeKey) return "Escape"; - if (keyCode == juce::KeyPress::deleteKey || keyCode == juce::KeyPress::backspaceKey) return "Delete"; + if (keyCode == juce::KeyPress::deleteKey) return "Delete"; + if (keyCode == juce::KeyPress::backspaceKey) return "Backspace"; if (keyCode == juce::KeyPress::leftKey) return "ArrowLeft"; if (keyCode == juce::KeyPress::rightKey) return "ArrowRight"; if (keyCode == juce::KeyPress::upKey) return "ArrowUp"; if (keyCode == juce::KeyPress::downKey) return "ArrowDown"; if (keyCode == juce::KeyPress::insertKey) return "Insert"; - if (keyCode == juce::KeyPress::F1Key) return "F1"; - if (keyCode == juce::KeyPress::F2Key) return "F2"; + if (keyCode == juce::KeyPress::pageUpKey) return "PageUp"; + if (keyCode == juce::KeyPress::pageDownKey) return "PageDown"; + if (keyCode == juce::KeyPress::homeKey) return "Home"; + if (keyCode == juce::KeyPress::endKey) return "End"; + if (const auto functionKey = functionKeyForDom(keyCode); functionKey.isNotEmpty()) return functionKey; + if (const auto numberPadKey = numberPadKeyForDom(keyCode, false); numberPadKey.isNotEmpty()) return numberPadKey; if (keyCode == ',') return ","; if (const auto textChar = key.getTextCharacter(); textChar != 0) @@ -85,15 +136,21 @@ juce::String normaliseCodeForDom(const juce::KeyPress& key) if (keyCode == juce::KeyPress::spaceKey) return "Space"; if (keyCode == juce::KeyPress::returnKey) return "Enter"; + if (keyCode == juce::KeyPress::tabKey) return "Tab"; if (keyCode == juce::KeyPress::escapeKey) return "Escape"; - if (keyCode == juce::KeyPress::deleteKey || keyCode == juce::KeyPress::backspaceKey) return "Delete"; + if (keyCode == juce::KeyPress::deleteKey) return "Delete"; + if (keyCode == juce::KeyPress::backspaceKey) return "Backspace"; if (keyCode == juce::KeyPress::leftKey) return "ArrowLeft"; if (keyCode == juce::KeyPress::rightKey) return "ArrowRight"; if (keyCode == juce::KeyPress::upKey) return "ArrowUp"; if (keyCode == juce::KeyPress::downKey) return "ArrowDown"; if (keyCode == juce::KeyPress::insertKey) return "Insert"; - if (keyCode == juce::KeyPress::F1Key) return "F1"; - if (keyCode == juce::KeyPress::F2Key) return "F2"; + if (keyCode == juce::KeyPress::pageUpKey) return "PageUp"; + if (keyCode == juce::KeyPress::pageDownKey) return "PageDown"; + if (keyCode == juce::KeyPress::homeKey) return "Home"; + if (keyCode == juce::KeyPress::endKey) return "End"; + if (const auto functionKey = functionKeyForDom(keyCode); functionKey.isNotEmpty()) return functionKey; + if (const auto numberPadKey = numberPadKeyForDom(keyCode, true); numberPadKey.isNotEmpty()) return numberPadKey; if (keyCode == ',') return "Comma"; return {}; @@ -106,10 +163,15 @@ juce::var keyPressToVar(const juce::KeyPress& key) obj->setProperty("key", normaliseKeyForDom(key)); obj->setProperty("code", normaliseCodeForDom(key)); - obj->setProperty("ctrlKey", modifiers.isCtrlDown() || modifiers.isCommandDown()); + #if JUCE_MAC + obj->setProperty("ctrlKey", modifiers.isCtrlDown()); + obj->setProperty("metaKey", modifiers.isCommandDown()); + #else + obj->setProperty("ctrlKey", modifiers.isCtrlDown()); + obj->setProperty("metaKey", false); + #endif obj->setProperty("shiftKey", modifiers.isShiftDown()); obj->setProperty("altKey", modifiers.isAltDown()); - obj->setProperty("metaKey", modifiers.isCommandDown() && !modifiers.isCtrlDown()); obj->setProperty("repeat", false); obj->setProperty("source", "pluginWindow"); return juce::var(obj); @@ -178,7 +240,7 @@ PluginWindowManager::PluginWindow::PluginWindow(PluginWindowManager& ownerIn, setUsingNativeTitleBar(true); setResizable(true, false); - if (auto* editor = processor.createEditor()) + if (auto* editor = processor.createEditorAndMakeActive()) { setContentOwned(editor, true); @@ -461,7 +523,8 @@ bool PluginWindowManager::shouldSuppressDuplicateForward(const juce::KeyPress& k void PluginWindowManager::positionWindow(PluginWindow& window) const { auto bounds = window.getBounds(); - auto displayArea = juce::Desktop::getInstance().getDisplays().getPrimaryDisplay()->userArea; + auto displayArea = juce::Desktop::getInstance().getDisplays().getPrimaryDisplay()->userBounds + .getSmallestIntegerContainer(); if (mainWindowComponent != nullptr) { @@ -470,7 +533,7 @@ void PluginWindowManager::positionWindow(PluginWindow& window) const : mainWindowComponent->getScreenBounds(); if (auto* display = juce::Desktop::getInstance().getDisplays().getDisplayForRect(ownerBounds)) - displayArea = display->userArea; + displayArea = display->userBounds.getSmallestIntegerContainer(); } bounds.setSize(juce::jmin(bounds.getWidth(), displayArea.getWidth() - 16), diff --git a/Source/PolyResynthesizer.h b/Source/PolyResynthesizer.h index f81a1be..7b5db54 100644 --- a/Source/PolyResynthesizer.h +++ b/Source/PolyResynthesizer.h @@ -9,8 +9,8 @@ * * The old SMS-based polyphonic resynthesis has been removed. * This stub provides the API surface that AudioEngine uses so it compiles. - * Polyphonic pitch correction will be re-implemented as a future improvement - * (per pitch_corrector_feat_plan.md). + * Polyphonic note detection and MIDI extraction remain supported; the current + * audio-resynthesis limitation is documented in docs/implemented_features.md. */ class PolyResynthesizer { diff --git a/Source/S13FXGfxEditor.cpp b/Source/S13FXGfxEditor.cpp index 9129191..ce0f5a6 100644 --- a/Source/S13FXGfxEditor.cpp +++ b/Source/S13FXGfxEditor.cpp @@ -150,7 +150,7 @@ void S13FXGfxEditor::timerCallback() if (ysfx_gfx_wants_retina(effect)) { auto* display = juce::Desktop::getInstance().getDisplays() - .getDisplayForPoint(getScreenPosition()); + .getDisplayForPoint(getScreenPosition().toFloat()); if (display) scaleFactor = static_cast<float>(display->scale); } diff --git a/Source/S13PluginEditors.cpp b/Source/S13PluginEditors.cpp index bbbaa21..e4c3c22 100644 --- a/Source/S13PluginEditors.cpp +++ b/Source/S13PluginEditors.cpp @@ -2087,7 +2087,6 @@ S13ReverbEditor::S13ReverbEditor(S13Reverb& p) algorithmBox.addItem("Hall", 2); algorithmBox.addItem("Plate", 3); algorithmBox.addItem("Chamber", 4); - algorithmBox.addItem("Shimmer", 5); algorithmBox.onChange = [this]() { proc.algorithm = static_cast<float>(algorithmBox.getSelectedId() - 1); }; addAndMakeVisible(freezeBtn); diff --git a/Source/S13ScriptWindow.cpp b/Source/S13ScriptWindow.cpp index 46b21f7..cb53b43 100644 --- a/Source/S13ScriptWindow.cpp +++ b/Source/S13ScriptWindow.cpp @@ -196,7 +196,7 @@ void S13ScriptWindow::drawString(const juce::String& text, int drawFlags) fbGraphics->setFont(currentFont); fbGraphics->drawText(text, drawX, drawY, 1000, static_cast<int>(currentFont.getHeight()) + 2, juce::Justification::topLeft, false); - drawX += static_cast<int>(currentFont.getStringWidthFloat(text)); + drawX += juce::GlyphArrangement::getStringWidthInt(currentFont, text); } void S13ScriptWindow::setFont(int size, const juce::String& face, int style) @@ -213,7 +213,7 @@ void S13ScriptWindow::setFont(int size, const juce::String& face, int style) std::pair<int, int> S13ScriptWindow::measureString(const juce::String& text) const { - int w = static_cast<int>(currentFont.getStringWidthFloat(text)); + int w = juce::GlyphArrangement::getStringWidthInt(currentFont, text); int h = static_cast<int>(currentFont.getHeight()); return { w, h }; } diff --git a/Source/ScriptEngine.cpp b/Source/ScriptEngine.cpp index a9751ea..bef23c2 100644 --- a/Source/ScriptEngine.cpp +++ b/Source/ScriptEngine.cpp @@ -795,7 +795,7 @@ static int l_renderProject(lua_State* L) } // --- File dialog (returns a temp file path for script I/O) --- -// JUCE 8 removed synchronous file dialogs; Lua scripts run on message thread +// Current JUCE APIs use asynchronous file dialogs; Lua scripts run on the message thread. // so we can't use async+WaitableEvent without deadlocking. Scripts should use // explicit file paths passed as arguments instead. static int l_fileDialog(lua_State* L) diff --git a/Source/TimecodeSync.cpp b/Source/TimecodeSync.cpp index 3264296..6d9321c 100644 --- a/Source/TimecodeSync.cpp +++ b/Source/TimecodeSync.cpp @@ -1,9 +1,223 @@ #include "TimecodeSync.h" +#include <array> +#include <cstdint> + +static_assert(std::atomic<SMPTEFrameRate>::is_always_lock_free); + +//============================================================================== +// Realtime MIDI output handoff +//============================================================================== + +class TimecodeMIDIOutputDispatcher final : private juce::Thread +{ +public: + TimecodeMIDIOutputDispatcher() + : juce::Thread("OpenStudio Timecode MIDI Sender") + { + } + + ~TimecodeMIDIOutputDispatcher() override + { + realtimeEnabled.store(false, std::memory_order_release); + connected.store(false, std::memory_order_release); + generation.fetch_add(1, std::memory_order_acq_rel); + signalThreadShouldExit(); + stopThread(2000); + + const juce::ScopedLock sl(outputLock); + output.reset(); + } + + bool connect(const juce::String& midiOutputName) + { + disconnect(); + + std::unique_ptr<juce::MidiOutput> newOutput; + for (const auto& device : juce::MidiOutput::getAvailableDevices()) + { + if (device.name == midiOutputName) + { + newOutput = juce::MidiOutput::openDevice(device.identifier); + break; + } + } + + if (newOutput == nullptr) + return false; + + { + const juce::ScopedLock sl(outputLock); + output = std::move(newOutput); + generation.fetch_add(1, std::memory_order_acq_rel); + connected.store(true, std::memory_order_release); + } + + if (!isThreadRunning() + && !startThread(juce::Thread::Priority::normal)) + { + disconnect(); + return false; + } + return true; + } + + void disconnect() + { + connected.store(false, std::memory_order_release); + generation.fetch_add(1, std::memory_order_acq_rel); + notify(); + + const juce::ScopedLock sl(outputLock); + output.reset(); + } + + bool isConnected() const noexcept + { + return connected.load(std::memory_order_acquire); + } + + void setRealtimeEnabled(bool shouldEnable) noexcept + { + if (shouldEnable) + { + generation.fetch_add(1, std::memory_order_acq_rel); + realtimeEnabled.store(true, std::memory_order_release); + } + else + { + realtimeEnabled.store(false, std::memory_order_release); + generation.fetch_add(1, std::memory_order_acq_rel); + } + notify(); + } + + bool enqueueRealtimeByte(std::uint8_t byte) noexcept + { + return enqueueRealtimeMessage(&byte, 1); + } + + bool enqueueRealtimeMessage(const std::uint8_t* bytes, int size) noexcept + { + if (!realtimeEnabled.load(std::memory_order_acquire) + || !connected.load(std::memory_order_acquire) + || bytes == nullptr + || size <= 0 + || size > kMaxRealtimeMessageBytes) + { + return false; + } + + const auto write = writePosition.load(std::memory_order_relaxed); + const auto read = readPosition.load(std::memory_order_acquire); + if (write - read >= kQueueCapacity) + { + droppedMessageCount.fetch_add(1, std::memory_order_relaxed); + return false; + } + + auto& packet = queue[write & (kQueueCapacity - 1)]; + packet.generation = generation.load(std::memory_order_acquire); + packet.size = static_cast<std::uint8_t>(size); + for (int index = 0; index < size; ++index) + packet.bytes[static_cast<std::size_t>(index)] = bytes[index]; + + writePosition.store(write + 1, std::memory_order_release); + return true; + } + + void sendControlMessage(const std::uint8_t* bytes, int size) + { + if (bytes == nullptr || size <= 0) + return; + + const juce::ScopedLock sl(outputLock); + if (output != nullptr && connected.load(std::memory_order_acquire)) + output->sendMessageNow(juce::MidiMessage(bytes, size)); + } + +private: + struct Packet + { + std::array<std::uint8_t, 3> bytes {}; + std::uint32_t generation = 0; + std::uint8_t size = 0; + }; + + static constexpr std::uint32_t kQueueCapacity = 1024; + static constexpr int kMaxRealtimeMessageBytes = 3; + static_assert((kQueueCapacity & (kQueueCapacity - 1)) == 0); + static_assert(std::atomic<bool>::is_always_lock_free); + static_assert(std::atomic<std::uint32_t>::is_always_lock_free); + + bool dequeue(Packet& packet) noexcept + { + const auto read = readPosition.load(std::memory_order_relaxed); + if (read == writePosition.load(std::memory_order_acquire)) + return false; + + packet = queue[read & (kQueueCapacity - 1)]; + readPosition.store(read + 1, std::memory_order_release); + return true; + } + + void run() override + { + while (!threadShouldExit()) + { + bool consumedPacket = false; + Packet packet; + while (dequeue(packet)) + { + consumedPacket = true; + const auto currentGeneration = generation.load(std::memory_order_acquire); + if (packet.generation != currentGeneration + || !connected.load(std::memory_order_acquire) + || !realtimeEnabled.load(std::memory_order_acquire)) + { + continue; + } + + const juce::ScopedLock sl(outputLock); + if (output != nullptr + && connected.load(std::memory_order_acquire) + && realtimeEnabled.load(std::memory_order_acquire) + && packet.generation == generation.load(std::memory_order_acquire)) + { + output->sendMessageNow( + juce::MidiMessage(packet.bytes.data(), static_cast<int>(packet.size))); + } + } + + if (!consumedPacket) + { + const bool active = connected.load(std::memory_order_relaxed) + && realtimeEnabled.load(std::memory_order_relaxed); + wait(active ? 1 : 20); + } + } + } + + std::array<Packet, kQueueCapacity> queue {}; + std::atomic<std::uint32_t> writePosition { 0 }; + std::atomic<std::uint32_t> readPosition { 0 }; + std::atomic<std::uint32_t> generation { 1 }; + std::atomic<std::uint32_t> droppedMessageCount { 0 }; + std::atomic<bool> connected { false }; + std::atomic<bool> realtimeEnabled { false }; + juce::CriticalSection outputLock; + std::unique_ptr<juce::MidiOutput> output; +}; + //============================================================================== // MIDIClockOutput //============================================================================== +MIDIClockOutput::MIDIClockOutput() + : outputDispatcher(std::make_unique<TimecodeMIDIOutputDispatcher>()) +{ +} + MIDIClockOutput::~MIDIClockOutput() { disconnect(); @@ -12,33 +226,46 @@ MIDIClockOutput::~MIDIClockOutput() bool MIDIClockOutput::connect(const juce::String& midiOutputName) { disconnect(); - auto devices = juce::MidiOutput::getAvailableDevices(); - for (const auto& d : devices) - { - if (d.name == midiOutputName) - { - output = juce::MidiOutput::openDevice(d.identifier); - if (output) - juce::Logger::writeToLog("MIDIClockOutput: Connected to " + midiOutputName); - break; - } - } - return output != nullptr; + const bool connected = outputDispatcher->connect(midiOutputName); + outputDispatcher->setRealtimeEnabled(isEnabled.load(std::memory_order_acquire)); + resetClockAccumulatorRequested.store(true, std::memory_order_release); + if (connected) + juce::Logger::writeToLog("MIDIClockOutput: Connected to " + midiOutputName); + return connected; } void MIDIClockOutput::disconnect() { - if (output) - { + const bool wasConnected = outputDispatcher->isConnected(); + outputDispatcher->setRealtimeEnabled(false); + if (wasConnected) sendStop(); - output.reset(); - } - clockAccumulator = 0.0; + outputDispatcher->disconnect(); + resetClockAccumulatorRequested.store(true, std::memory_order_release); +} + +bool MIDIClockOutput::isConnected() const noexcept +{ + return outputDispatcher->isConnected(); +} + +void MIDIClockOutput::setEnabled(bool enabled) noexcept +{ + isEnabled.store(enabled, std::memory_order_release); + outputDispatcher->setRealtimeEnabled(enabled); + if (!enabled) + resetClockAccumulatorRequested.store(true, std::memory_order_release); } void MIDIClockOutput::processBlock(int numSamples, double sampleRate, double bpm, bool playing) { - if (!output || !isEnabled || !playing || bpm <= 0.0 || sampleRate <= 0.0) + if (!isEnabled.load(std::memory_order_relaxed)) + return; + + if (resetClockAccumulatorRequested.exchange(false, std::memory_order_acq_rel)) + clockAccumulator = 0.0; + + if (!playing || bpm <= 0.0 || sampleRate <= 0.0 || !outputDispatcher->isConnected()) return; // MIDI Clock: 24 pulses per quarter note @@ -48,30 +275,37 @@ void MIDIClockOutput::processBlock(int numSamples, double sampleRate, double bpm while (clockAccumulator >= samplesPerClock) { - output->sendMessageNow(juce::MidiMessage(0xF8)); // Timing Clock + outputDispatcher->enqueueRealtimeByte(0xF8); // Timing Clock clockAccumulator -= samplesPerClock; } } void MIDIClockOutput::sendStart() { - if (output && isEnabled) + if (isEnabled.load(std::memory_order_acquire) && outputDispatcher->isConnected()) { - clockAccumulator = 0.0; - output->sendMessageNow(juce::MidiMessage(0xFA)); // Start + resetClockAccumulatorRequested.store(true, std::memory_order_release); + const std::uint8_t start = 0xFA; + outputDispatcher->sendControlMessage(&start, 1); } } void MIDIClockOutput::sendStop() { - if (output && isEnabled) - output->sendMessageNow(juce::MidiMessage(0xFC)); // Stop + if (isEnabled.load(std::memory_order_acquire) && outputDispatcher->isConnected()) + { + const std::uint8_t stop = 0xFC; + outputDispatcher->sendControlMessage(&stop, 1); + } } void MIDIClockOutput::sendContinue() { - if (output && isEnabled) - output->sendMessageNow(juce::MidiMessage(0xFB)); // Continue + if (isEnabled.load(std::memory_order_acquire) && outputDispatcher->isConnected()) + { + const std::uint8_t resume = 0xFB; + outputDispatcher->sendControlMessage(&resume, 1); + } } //============================================================================== @@ -174,6 +408,11 @@ void MIDIClockInput::handleIncomingMidiMessage(juce::MidiInput* source, const ju // MTCGenerator //============================================================================== +MTCGenerator::MTCGenerator() + : outputDispatcher(std::make_unique<TimecodeMIDIOutputDispatcher>()) +{ +} + MTCGenerator::~MTCGenerator() { disconnect(); @@ -182,30 +421,43 @@ MTCGenerator::~MTCGenerator() bool MTCGenerator::connect(const juce::String& midiOutputName) { disconnect(); - auto devices = juce::MidiOutput::getAvailableDevices(); - for (const auto& d : devices) - { - if (d.name == midiOutputName) - { - output = juce::MidiOutput::openDevice(d.identifier); - if (output) - juce::Logger::writeToLog("MTCGenerator: Connected to " + midiOutputName); - break; - } - } - return output != nullptr; + const bool connected = outputDispatcher->connect(midiOutputName); + outputDispatcher->setRealtimeEnabled(isEnabled.load(std::memory_order_acquire)); + resetGeneratorStateRequested.store(true, std::memory_order_release); + if (connected) + juce::Logger::writeToLog("MTCGenerator: Connected to " + midiOutputName); + return connected; } void MTCGenerator::disconnect() { - output.reset(); - qfCounter = 0; - qfAccumulator = 0.0; + outputDispatcher->setRealtimeEnabled(false); + outputDispatcher->disconnect(); + resetGeneratorStateRequested.store(true, std::memory_order_release); +} + +bool MTCGenerator::isConnected() const noexcept +{ + return outputDispatcher->isConnected(); +} + +void MTCGenerator::setEnabled(bool enabled) noexcept +{ + isEnabled.store(enabled, std::memory_order_release); + outputDispatcher->setRealtimeEnabled(enabled); + if (!enabled) + resetGeneratorStateRequested.store(true, std::memory_order_release); +} + +void MTCGenerator::setFrameRate(SMPTEFrameRate rate) noexcept +{ + frameRate.store(rate, std::memory_order_release); + resetGeneratorStateRequested.store(true, std::memory_order_release); } -double MTCGenerator::getActualFrameRate() const +double MTCGenerator::getActualFrameRate(SMPTEFrameRate rate) noexcept { - switch (frameRate) + switch (rate) { case SMPTEFrameRate::fps24: return 24.0; case SMPTEFrameRate::fps25: return 25.0; @@ -215,15 +467,15 @@ double MTCGenerator::getActualFrameRate() const return 25.0; } -MTCGenerator::SMPTETime MTCGenerator::positionToSMPTE(double seconds) const +MTCGenerator::SMPTETime MTCGenerator::positionToSMPTE(double seconds, SMPTEFrameRate rate) { SMPTETime t; - double fps = getActualFrameRate(); + const double fps = getActualFrameRate(rate); int totalFrames = (int)(seconds * fps); // Drop frame compensation for 29.97 - if (frameRate == SMPTEFrameRate::fps2997df) + if (rate == SMPTEFrameRate::fps2997df) { // Drop frame: skip frame 0 and 1 at the start of each minute // except every 10th minute @@ -256,20 +508,30 @@ MTCGenerator::SMPTETime MTCGenerator::positionToSMPTE(double seconds) const void MTCGenerator::processBlock(int numSamples, double sampleRate, double positionSeconds, bool playing) { - if (!output || !isEnabled || !playing || sampleRate <= 0.0) + if (!isEnabled.load(std::memory_order_relaxed)) + return; + + if (resetGeneratorStateRequested.exchange(false, std::memory_order_acq_rel)) + { + qfCounter = 0; + qfAccumulator = 0.0; + } + + if (!playing || sampleRate <= 0.0 || !outputDispatcher->isConnected()) return; // MTC quarter-frame rate: 2 per frame × fps / 4 = fps/2 quarter-frames per second // But the standard says: 4 quarter-frames per frame, so 4 * fps QF per second // Each QF is sent at fps * 4 rate (e.g., at 25fps = 100 QF/sec) - double fps = getActualFrameRate(); - double samplesPerQF = sampleRate / (fps * 4.0); + const auto currentFrameRate = frameRate.load(std::memory_order_acquire); + const double fps = getActualFrameRate(currentFrameRate); + const double samplesPerQF = sampleRate / (fps * 4.0); qfAccumulator += numSamples; while (qfAccumulator >= samplesPerQF) { - SMPTETime t = positionToSMPTE(positionSeconds); + const SMPTETime t = positionToSMPTE(positionSeconds, currentFrameRate); int data = 0; switch (qfCounter) @@ -281,11 +543,16 @@ void MTCGenerator::processBlock(int numSamples, double sampleRate, double positi case 4: data = (0x40) | (t.minutes & 0x0F); break; case 5: data = (0x50) | ((t.minutes >> 4) & 0x03); break; case 6: data = (0x60) | (t.hours & 0x0F); break; - case 7: data = (0x70) | ((t.hours >> 4) & 0x01) | ((int)frameRate << 1); break; + case 7: data = (0x70) | ((t.hours >> 4) & 0x01) + | (static_cast<int>(currentFrameRate) << 1); break; } // Quarter-frame message: F1 <data> - output->sendMessageNow(juce::MidiMessage(0xF1, data)); + const std::uint8_t message[2] { + 0xF1, + static_cast<std::uint8_t>(data) + }; + outputDispatcher->enqueueRealtimeMessage(message, 2); qfCounter = (qfCounter + 1) & 7; qfAccumulator -= samplesPerQF; @@ -294,24 +561,27 @@ void MTCGenerator::processBlock(int numSamples, double sampleRate, double positi void MTCGenerator::sendFullFrame(double positionSeconds) { - if (!output || !isEnabled) return; + if (!isEnabled.load(std::memory_order_acquire) || !outputDispatcher->isConnected()) + return; - SMPTETime t = positionToSMPTE(positionSeconds); + const auto currentFrameRate = frameRate.load(std::memory_order_acquire); + const SMPTETime t = positionToSMPTE(positionSeconds, currentFrameRate); // Full frame SysEx: F0 7F 7F 01 01 hr mn sc fr F7 - uint8_t sysex[10]; + std::uint8_t sysex[10]; sysex[0] = 0xF0; sysex[1] = 0x7F; // Universal real-time sysex[2] = 0x7F; // All devices sysex[3] = 0x01; // MTC sysex[4] = 0x01; // Full frame - sysex[5] = (uint8_t)(((int)frameRate << 5) | (t.hours & 0x1F)); - sysex[6] = (uint8_t)(t.minutes & 0x3F); - sysex[7] = (uint8_t)(t.seconds & 0x3F); - sysex[8] = (uint8_t)(t.frames & 0x1F); + sysex[5] = static_cast<std::uint8_t>( + (static_cast<int>(currentFrameRate) << 5) | (t.hours & 0x1F)); + sysex[6] = static_cast<std::uint8_t>(t.minutes & 0x3F); + sysex[7] = static_cast<std::uint8_t>(t.seconds & 0x3F); + sysex[8] = static_cast<std::uint8_t>(t.frames & 0x1F); sysex[9] = 0xF7; - output->sendMessageNow(juce::MidiMessage(sysex, 10)); + outputDispatcher->sendControlMessage(sysex, 10); } //============================================================================== diff --git a/Source/TimecodeSync.h b/Source/TimecodeSync.h index d531989..388e4f6 100644 --- a/Source/TimecodeSync.h +++ b/Source/TimecodeSync.h @@ -4,6 +4,8 @@ #include <atomic> #include <memory> +class TimecodeMIDIOutputDispatcher; + //============================================================================== // SMPTE Frame Rates //============================================================================== @@ -23,27 +25,29 @@ enum class SMPTEFrameRate class MIDIClockOutput { public: - MIDIClockOutput() = default; + MIDIClockOutput(); ~MIDIClockOutput(); bool connect(const juce::String& midiOutputName); void disconnect(); - bool isConnected() const { return output != nullptr; } + bool isConnected() const noexcept; - void setEnabled(bool enabled) { isEnabled = enabled; } - bool getEnabled() const { return isEnabled; } + void setEnabled(bool enabled) noexcept; + bool getEnabled() const noexcept { return isEnabled.load(std::memory_order_acquire); } // Call from audio callback void processBlock(int numSamples, double sampleRate, double bpm, bool playing); - // Call on transport start/stop/continue + // Call from a non-audio transport/control thread. These messages may block + // in the operating-system MIDI driver, but never contend with processBlock(). void sendStart(); void sendStop(); void sendContinue(); private: - std::unique_ptr<juce::MidiOutput> output; + std::unique_ptr<TimecodeMIDIOutputDispatcher> outputDispatcher; std::atomic<bool> isEnabled { false }; + std::atomic<bool> resetClockAccumulatorRequested { false }; double clockAccumulator = 0.0; // Fractional clock tick accumulator JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(MIDIClockOutput) @@ -103,36 +107,38 @@ class MIDIClockInput : public juce::MidiInputCallback class MTCGenerator { public: - MTCGenerator() = default; + MTCGenerator(); ~MTCGenerator(); bool connect(const juce::String& midiOutputName); void disconnect(); - bool isConnected() const { return output != nullptr; } + bool isConnected() const noexcept; - void setEnabled(bool enabled) { isEnabled = enabled; } - bool getEnabled() const { return isEnabled; } + void setEnabled(bool enabled) noexcept; + bool getEnabled() const noexcept { return isEnabled.load(std::memory_order_acquire); } - void setFrameRate(SMPTEFrameRate rate) { frameRate = rate; } - SMPTEFrameRate getFrameRate() const { return frameRate; } + void setFrameRate(SMPTEFrameRate rate) noexcept; + SMPTEFrameRate getFrameRate() const noexcept { return frameRate.load(std::memory_order_acquire); } // Call from audio callback to send quarter-frame messages void processBlock(int numSamples, double sampleRate, double positionSeconds, bool playing); - // Send a full-frame MTC message (for locate/scrub) + // Send a full-frame MTC message from a non-audio control thread + // (for locate/scrub). void sendFullFrame(double positionSeconds); private: - std::unique_ptr<juce::MidiOutput> output; + std::unique_ptr<TimecodeMIDIOutputDispatcher> outputDispatcher; std::atomic<bool> isEnabled { false }; - SMPTEFrameRate frameRate = SMPTEFrameRate::fps25; + std::atomic<SMPTEFrameRate> frameRate { SMPTEFrameRate::fps25 }; + std::atomic<bool> resetGeneratorStateRequested { false }; int qfCounter = 0; // Quarter-frame counter (0-7) double qfAccumulator = 0.0; struct SMPTETime { int hours; int minutes; int seconds; int frames; }; - SMPTETime positionToSMPTE(double seconds) const; - double getActualFrameRate() const; + static SMPTETime positionToSMPTE(double seconds, SMPTEFrameRate rate); + static double getActualFrameRate(SMPTEFrameRate rate) noexcept; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(MTCGenerator) }; diff --git a/Source/TrackProcessor.cpp b/Source/TrackProcessor.cpp index 778891d..6a09f43 100644 --- a/Source/TrackProcessor.cpp +++ b/Source/TrackProcessor.cpp @@ -1,11 +1,384 @@ #include "TrackProcessor.h" +#include "BuiltInParameterSupport.h" +#include "BuiltInEffects2.h" #include <algorithm> +#include <cmath> +#include <cstdint> +#include <limits> // Maximum channel count for the pre-allocated FX processing buffer. // Must be large enough for multi-output instruments (e.g. Komplete Kontrol = 32 out). static constexpr int kMaxFXChannels = 64; static constexpr int kMinimumHostedPluginBlockSize = 512; +static constexpr int kHostBypassLatencyHeadroomSamples = 4096; +static constexpr int kRealtimeFXTailTimerMilliseconds = 250; +static constexpr double kRealtimeFXTailSafetySeconds = 1.0; +static constexpr double kRealtimeFXTailQuietWindowSeconds = 0.65; +static constexpr float kRealtimeFXTailQuietPeak = 3.1622776601683795e-5f; // -90 dBFS +static constexpr juce::uint32 kMIDIActivityHoldMilliseconds = 90; +static constexpr juce::uint32 kMIDIActivityDecayMilliseconds = 360; + +namespace +{ +float decayMIDIActivity(float level, juce::uint32 ageMilliseconds) noexcept +{ + if (ageMilliseconds <= kMIDIActivityHoldMilliseconds) + return level; + + const auto decayAge = ageMilliseconds - kMIDIActivityHoldMilliseconds; + if (decayAge >= kMIDIActivityDecayMilliseconds) + return 0.0f; + + return level * (1.0f - static_cast<float>(decayAge) + / static_cast<float>(kMIDIActivityDecayMilliseconds)); +} + +float getMIDIMessageActivity(const juce::MidiMessage& message) noexcept +{ + if (message.isNoteOn()) + return juce::jlimit(0.0f, 1.0f, message.getFloatVelocity()); + if (message.isController()) + return juce::jmax(0.12f, juce::jlimit(0.0f, 1.0f, + static_cast<float>(message.getControllerValue()) / 127.0f)); + if (message.isAftertouch()) + return juce::jmax(0.12f, juce::jlimit(0.0f, 1.0f, + static_cast<float>(message.getAfterTouchValue()) / 127.0f)); + if (message.isChannelPressure()) + return juce::jmax(0.12f, juce::jlimit(0.0f, 1.0f, + static_cast<float>(message.getChannelPressureValue()) / 127.0f)); + if (message.isPitchWheel()) + return juce::jmax(0.12f, juce::jlimit(0.0f, 1.0f, + static_cast<float>(message.getPitchWheelValue()) / 16383.0f)); + if (message.isProgramChange()) + return 0.5f; + + // Note-off and transport/clock/active-sensing messages must not keep an + // armed track's input meter illuminated. + return 0.0f; +} + +class ScopedTrackRealtimeReader final +{ +public: + explicit ScopedTrackRealtimeReader( + std::atomic<std::uint32_t>& readersToUse, + bool active = true) noexcept + : readers(active ? &readersToUse : nullptr) + { + if (readers != nullptr) + readers->fetch_add(1, std::memory_order_seq_cst); + } + + ~ScopedTrackRealtimeReader() + { + if (readers != nullptr) + readers->fetch_sub(1, std::memory_order_seq_cst); + } + + ScopedTrackRealtimeReader( + const ScopedTrackRealtimeReader&) = delete; + ScopedTrackRealtimeReader& operator=( + const ScopedTrackRealtimeReader&) = delete; + +private: + std::atomic<std::uint32_t>* readers = nullptr; +}; +} + +// juce::MidiOutput::sendBlockOfMessages() allocates one PendingMessage and +// takes an internal CriticalSection for every event. Keep that entire code +// path, along with device lifetime changes, off the audio callback. +class TrackMIDIOutputDispatcher final : private juce::Thread +{ +public: + TrackMIDIOutputDispatcher() + : juce::Thread("OpenStudio Track MIDI Sender") + { + } + + ~TrackMIDIOutputDispatcher() override + { + connected.store(false, std::memory_order_release); + generation.fetch_add(1, std::memory_order_acq_rel); + signalThreadShouldExit(); + stopThread(2000); + + const juce::ScopedLock sl(outputLock); + output.reset(); + outputDeviceName.clear(); + } + + bool connect(const juce::String& deviceName) + { + disconnect(); + + std::unique_ptr<juce::MidiOutput> newOutput; + for (const auto& device : juce::MidiOutput::getAvailableDevices()) + { + if (device.name == deviceName) + { + newOutput = juce::MidiOutput::openDevice(device.identifier); + break; + } + } + + if (newOutput == nullptr) + return false; + + { + const juce::ScopedLock sl(outputLock); + output = std::move(newOutput); + outputDeviceName = deviceName; + generation.fetch_add(1, std::memory_order_acq_rel); + connected.store(true, std::memory_order_release); + } + + if (!isThreadRunning() + && !startThread(juce::Thread::Priority::high)) + { + disconnect(); + return false; + } + + notify(); + return true; + } + + void disconnect() + { + connected.store(false, std::memory_order_release); + generation.fetch_add(1, std::memory_order_acq_rel); + notify(); + + const juce::ScopedLock sl(outputLock); + output.reset(); + outputDeviceName.clear(); + } + + bool isConnected() const noexcept + { + return connected.load(std::memory_order_acquire); + } + + juce::String getDeviceName() const + { + const juce::ScopedLock sl(outputLock); + return outputDeviceName; + } + + void enqueueBuffer(const juce::MidiBuffer& buffer, + double sampleRate, + bool resetMessagesOnly) noexcept + { + if (!connected.load(std::memory_order_acquire) || buffer.isEmpty()) + return; + + const double safeSampleRate = + sampleRate > 0.0 ? sampleRate : 44100.0; + const double blockStartMs = + juce::Time::getMillisecondCounterHiRes(); + const double millisecondsPerSample = 1000.0 / safeSampleRate; + + for (const auto metadata : buffer) + { + if (resetMessagesOnly + && !isResetMessage( + metadata.data, + metadata.numBytes)) + { + continue; + } + + const double eventTimeMs = + blockStartMs + + static_cast<double>( + juce::jmax(0, metadata.samplePosition)) + * millisecondsPerSample; + enqueueMessage( + metadata.data, + metadata.numBytes, + eventTimeMs); + } + } + +private: + static constexpr int kMaxMessageBytes = 256; + + struct Packet + { + std::array<std::uint8_t, kMaxMessageBytes> bytes {}; + double eventTimeMs = 0.0; + std::uint32_t generation = 0; + std::uint16_t size = 0; + }; + + static constexpr std::uint32_t kQueueCapacity = 512; + static_assert( + (kQueueCapacity & (kQueueCapacity - 1)) == 0); + static_assert(std::atomic<bool>::is_always_lock_free); + static_assert( + std::atomic<std::uint32_t>::is_always_lock_free); + + static bool isResetMessage(const std::uint8_t* bytes, + int size) noexcept + { + if (bytes == nullptr || size < 1) + return false; + + const auto status = + static_cast<std::uint8_t>(bytes[0] & 0xf0u); + if (status == 0xb0u && size >= 3) + { + const auto controller = bytes[1]; + return controller == 64u + || controller == 120u + || controller == 121u + || controller == 123u; + } + + if (status == 0xe0u && size >= 3) + { + const int pitchWheel = + static_cast<int>(bytes[1]) + | (static_cast<int>(bytes[2]) << 7); + return pitchWheel == 8192; + } + + return false; + } + + bool enqueueMessage(const std::uint8_t* bytes, + int size, + double eventTimeMs) noexcept + { + if (bytes == nullptr + || size <= 0 + || size > kMaxMessageBytes + || !connected.load(std::memory_order_acquire)) + { + if (size > kMaxMessageBytes) + oversizedMessageCount.fetch_add( + 1, std::memory_order_relaxed); + return false; + } + + const auto write = + writePosition.load(std::memory_order_relaxed); + const auto read = + readPosition.load(std::memory_order_acquire); + if (write - read >= kQueueCapacity) + { + droppedMessageCount.fetch_add( + 1, std::memory_order_relaxed); + return false; + } + + auto& packet = + queue[write & (kQueueCapacity - 1)]; + packet.eventTimeMs = eventTimeMs; + packet.generation = + generation.load(std::memory_order_acquire); + packet.size = static_cast<std::uint16_t>(size); + for (int index = 0; index < size; ++index) + { + packet.bytes[static_cast<std::size_t>(index)] = + bytes[index]; + } + + writePosition.store( + write + 1, std::memory_order_release); + return true; + } + + bool dequeue(Packet& packet) noexcept + { + const auto read = + readPosition.load(std::memory_order_relaxed); + if (read == writePosition.load( + std::memory_order_acquire)) + { + return false; + } + + packet = queue[read & (kQueueCapacity - 1)]; + readPosition.store( + read + 1, std::memory_order_release); + return true; + } + + void run() override + { + Packet packet; + bool hasPacket = false; + + while (!threadShouldExit()) + { + if (!hasPacket) + hasPacket = dequeue(packet); + + if (!hasPacket) + { + const bool active = + connected.load(std::memory_order_relaxed); + wait(active ? 1 : 20); + continue; + } + + const auto currentGeneration = + generation.load(std::memory_order_acquire); + if (!connected.load(std::memory_order_acquire) + || packet.generation != currentGeneration) + { + hasPacket = false; + continue; + } + + const double nowMs = + juce::Time::getMillisecondCounterHiRes(); + const double remainingMs = + packet.eventTimeMs - nowMs; + if (remainingMs > 0.75) + { + wait(juce::jlimit( + 1, + 20, + static_cast<int>( + std::floor(remainingMs)))); + continue; + } + + { + const juce::ScopedLock sl(outputLock); + if (output != nullptr + && connected.load( + std::memory_order_acquire) + && packet.generation + == generation.load( + std::memory_order_acquire)) + { + output->sendMessageNow( + juce::MidiMessage( + packet.bytes.data(), + static_cast<int>(packet.size))); + } + } + + hasPacket = false; + } + } + + std::array<Packet, kQueueCapacity> queue {}; + std::atomic<std::uint32_t> writePosition { 0 }; + std::atomic<std::uint32_t> readPosition { 0 }; + std::atomic<std::uint32_t> generation { 1 }; + std::atomic<std::uint32_t> droppedMessageCount { 0 }; + std::atomic<std::uint32_t> oversizedMessageCount { 0 }; + std::atomic<bool> connected { false }; + mutable juce::CriticalSection outputLock; + std::unique_ptr<juce::MidiOutput> output; + juce::String outputDeviceName; +}; static bool isBuiltInInstrumentProcessor(const juce::AudioProcessor* processor) { @@ -16,9 +389,27 @@ static bool isBuiltInInstrumentProcessor(const juce::AudioProcessor* processor) return name == "OpenStudio Piano" || name == "OpenStudio Drums" || name == "OpenStudio Basic Synth" + || name == "OpenStudio Clean Guitar" || name == "Studio13 Piano" || name == "Studio13 Drums" - || name == "Studio13 Basic Synth"; + || name == "Studio13 Basic Synth" + || name == "Studio13 Clean Guitar"; +} + +static bool hasInternalAuditionSourceActive( + const std::vector<std::shared_ptr<juce::AudioProcessor>>* processors) +{ + if (processors == nullptr) + return false; + + for (const auto& processor : *processors) + { + if (auto* rack = dynamic_cast<S13NAMRack*>(processor.get())) + if (rack->hasAuditionSourceActive()) + return true; + } + + return false; } // Debug logging — always active for FX diagnostics @@ -247,11 +638,83 @@ static void applyStereoWidthToBuffer(juce::AudioBuffer<float>& buffer, } } +void TrackProcessor::registerMIDIInputActivity( + const juce::MidiMessage& message) noexcept +{ + const auto activity = getMIDIMessageActivity(message); + if (activity <= 0.0f) + return; + + const auto now = juce::Time::getMillisecondCounter(); + const auto previousTimestamp = midiInputActivityTimestampMs.load( + std::memory_order_acquire); + const auto previousLevel = midiInputActivityLevel.load( + std::memory_order_acquire); + const auto decayedPrevious = previousTimestamp == 0 + ? 0.0f + : decayMIDIActivity(previousLevel, now - previousTimestamp); + + midiInputActivityLevel.store( + juce::jmax(activity, decayedPrevious), + std::memory_order_release); + midiInputActivityTimestampMs.store(now, std::memory_order_release); +} + +float TrackProcessor::getMIDIInputActivityLevel() const noexcept +{ + const auto timestamp = midiInputActivityTimestampMs.load( + std::memory_order_acquire); + if (timestamp == 0) + return 0.0f; + + const auto level = midiInputActivityLevel.load(std::memory_order_acquire); + return decayMIDIActivity( + level, + juce::Time::getMillisecondCounter() - timestamp); +} + TrackProcessor::TrackProcessor() : AudioProcessor (BusesProperties() .withInput ("Input", juce::AudioChannelSet::stereo(), true) - .withOutput ("Output", juce::AudioChannelSet::stereo(), true)) -{ + .withOutput ("Output", juce::AudioChannelSet::stereo(), true)), + midiOutputDispatcher( + std::make_unique<TrackMIDIOutputDispatcher>()) +{ + // Give the inline Channel Strip EQ its own explicit six-band contract. + // S13EQ's plug-in defaults are an eight-band layout, so relying on them + // made the strip's HPF/LPF labels disagree with the filters that actually + // ran until a user moved each control at least once. + static constexpr std::array<float, channelStripEQBandCount> stripFrequencies { + 80.0f, 200.0f, 1000.0f, 3000.0f, 8000.0f, 18000.0f + }; + static constexpr std::array<float, channelStripEQBandCount> stripQ { + 0.707f, 0.707f, 1.0f, 1.0f, 0.707f, 0.707f + }; + for (int bandIndex = 0; bandIndex < channelStripEQBandCount; ++bandIndex) + { + auto& band = channelStripEQ.bands[static_cast<size_t>(bandIndex)]; + band.type.store( + static_cast<float>( + bandIndex == 0 + ? S13EQ::FilterType::LowCut + : bandIndex == channelStripEQBandCount - 1 + ? S13EQ::FilterType::HighCut + : S13EQ::FilterType::Bell), + std::memory_order_relaxed); + band.freq.store(stripFrequencies[static_cast<size_t>(bandIndex)], + std::memory_order_relaxed); + band.gain.store(0.0f, std::memory_order_relaxed); + band.q.store(stripQ[static_cast<size_t>(bandIndex)], + std::memory_order_relaxed); + band.enabled.store(0.0f, std::memory_order_relaxed); + } + for (int bandIndex = channelStripEQBandCount; + bandIndex < S13EQ::numBands; + ++bandIndex) + { + channelStripEQ.bands[static_cast<size_t>(bandIndex)].enabled.store( + 0.0f, std::memory_order_relaxed); + } widthAutomation.setDefaultValue(widthPercentToBackend(stereoWidth.load(std::memory_order_relaxed))); preFXVolumeAutomation.setDefaultValue(0.0f); preFXPanAutomation.setDefaultValue(0.0f); @@ -261,13 +724,10 @@ TrackProcessor::TrackProcessor() midiVelocityScaleAutomation.setDefaultValue(1.0f); midiPitchBendAutomation.setDefaultValue(0.0f); midiChannelPressureAutomation.setDefaultValue(0.0f); - std::atomic_store_explicit(&pluginAutomationSnapshot, - std::make_shared<const PluginAutomationRouteSnapshot>(), - std::memory_order_release); - std::atomic_store_explicit(&midiCCAutomationSnapshot, - std::make_shared<const MIDICCAutomationRouteSnapshot>(), - std::memory_order_release); - midiOutputResetBuffer.ensureSize(512); + publishPluginAutomationRoutes( + std::make_shared<const PluginAutomationRouteSnapshot>()); + publishMIDICCAutomationRoutes( + std::make_shared<const MIDICCAutomationRouteSnapshot>()); for (size_t channel = 0; channel < midiNoteCurrentlyActive.size(); ++channel) { for (size_t note = 0; note < midiNoteCurrentlyActive[channel].size(); ++note) @@ -279,14 +739,61 @@ TrackProcessor::TrackProcessor() } } publishRealtimeStateSnapshots(); + startTimer(kRealtimeFXTailTimerMilliseconds); } TrackProcessor::~TrackProcessor() { + stopTimer(); + hasScheduledMIDIClipsForAudio.store( + false, std::memory_order_release); + scheduledMIDIClipsForAudio.store( + nullptr, std::memory_order_seq_cst); + realtimeGraphSnapshotForAudio.store( + nullptr, std::memory_order_seq_cst); + pluginAutomationSnapshotForAudio.store( + nullptr, std::memory_order_seq_cst); + midiCCAutomationSnapshotForAudio.store( + nullptr, std::memory_order_seq_cst); + fallbackSamplerSampleForAudio.store( + nullptr, std::memory_order_seq_cst); + jassert( + scheduledMIDIAudioReaders.load( + std::memory_order_seq_cst) == 0); + jassert( + realtimeGraphAudioReaders.load( + std::memory_order_seq_cst) == 0); + jassert( + realtimeAuxAudioReaders.load( + std::memory_order_seq_cst) == 0); + reclaimRetiredScheduledMIDISnapshots(); + reclaimRetiredRealtimeGraphSnapshots(); + reclaimRetiredRealtimeAuxOwners(); } std::optional<TrackProcessor::PluginAutomationParameterRef> TrackProcessor::parsePluginAutomationParameterId(const juce::String& parameterId) const { + if (parameterId.startsWith("builtin_")) + { + const auto suffix = parameterId.substring(8); + const int firstSeparator = suffix.indexOfChar('_'); + const int secondSeparator = suffix.indexOfChar(firstSeparator + 1, '_'); + if (firstSeparator <= 0 || secondSeparator <= firstSeparator + 1) + return std::nullopt; + + const auto chain = suffix.substring(0, firstSeparator); + PluginAutomationParameterRef ref; + if (chain != "input" && chain != "track") + return std::nullopt; + + ref.isInputFX = chain == "input"; + ref.fxIndex = suffix.substring(firstSeparator + 1, secondSeparator).getIntValue(); + ref.builtInParamId = juce::URL::removeEscapeChars(suffix.substring(secondSeparator + 1)); + if (ref.fxIndex < 0 || ref.builtInParamId.isEmpty()) + return std::nullopt; + return ref; + } + if (!parameterId.startsWith("plugin_")) return std::nullopt; @@ -337,6 +844,162 @@ std::shared_ptr<TrackProcessor::PluginAutomationRoute> TrackProcessor::findPlugi return nullptr; } +std::shared_ptr<TrackProcessor::PluginAutomationRoute> +TrackProcessor::clonePluginAutomationRoute( + const PluginAutomationRoute& source) +{ + auto clone = std::make_shared<PluginAutomationRoute>(); + clone->parameterId = source.parameterId; + clone->isInputFX = source.isInputFX; + clone->fxIndex = source.fxIndex; + clone->targetProcessor = source.targetProcessor; + clone->paramIndex = source.paramIndex; + clone->builtInParamId = source.builtInParamId; + clone->builtInMinimum = source.builtInMinimum; + clone->builtInMaximum = source.builtInMaximum; + clone->builtInDiscrete = source.builtInDiscrete; + clone->builtInCurve = source.builtInCurve; + clone->automation = source.automation; + clone->lastAppliedValue.store( + source.lastAppliedValue.load(std::memory_order_acquire), + std::memory_order_relaxed); + return clone; +} + +void TrackProcessor::publishPluginAutomationRoutes( + std::shared_ptr<const PluginAutomationRouteSnapshot> snapshot) +{ + const bool hasRoutes = snapshot != nullptr && !snapshot->empty(); + const juce::ScopedLock publicationGuard( + realtimeAuxPublicationLock); + reclaimRetiredRealtimeAuxOwners(); + const auto previous = std::atomic_load_explicit( + &pluginAutomationSnapshot, + std::memory_order_acquire); + { + const juce::ScopedLock retirementGuard( + realtimeAuxRetirementLock); + if (previous != nullptr + && previous.get() != snapshot.get()) + { + retiredRealtimeAuxOwners.push_back( + std::static_pointer_cast<const void>( + previous)); + } + std::atomic_store_explicit( + &pluginAutomationSnapshot, + snapshot, + std::memory_order_release); + pluginAutomationSnapshotForAudio.store( + snapshot.get(), + std::memory_order_seq_cst); + } + hasPublishedPluginAutomationRoutes.store(hasRoutes, std::memory_order_release); +} + +void TrackProcessor::remapPluginAutomationRoutesForReorder( + bool isInputFX, int fromIndex, int toIndex) +{ + const juce::ScopedLock routeGuard(pluginAutomationRouteLock); + const auto snapshot = std::atomic_load_explicit( + &pluginAutomationSnapshot, std::memory_order_acquire); + if (snapshot == nullptr || snapshot->empty()) + return; + + auto nextSnapshot = std::make_shared<PluginAutomationRouteSnapshot>(); + nextSnapshot->reserve(snapshot->size()); + for (const auto& route : *snapshot) + { + if (route == nullptr) + { + nextSnapshot->push_back(route); + continue; + } + + // Route objects already visible to the callback are immutable. Clone + // before changing Strings or indices so the old reader epoch remains + // race-free until retirement. + auto nextRoute = clonePluginAutomationRoute(*route); + if (route->isInputFX != isInputFX) + { + nextSnapshot->push_back(std::move(nextRoute)); + continue; + } + + int mappedIndex = route->fxIndex; + if (mappedIndex == fromIndex) + mappedIndex = toIndex; + else if (fromIndex < toIndex + && mappedIndex > fromIndex + && mappedIndex <= toIndex) + --mappedIndex; + else if (fromIndex > toIndex + && mappedIndex >= toIndex + && mappedIndex < fromIndex) + ++mappedIndex; + + nextRoute->fxIndex = mappedIndex; + const auto chain = isInputFX ? "input" : "track"; + nextRoute->parameterId = nextRoute->builtInParamId.isNotEmpty() + ? "builtin_" + juce::String(chain) + "_" + juce::String(mappedIndex) + + "_" + juce::URL::addEscapeChars(nextRoute->builtInParamId, true) + : "plugin_" + juce::String(chain) + "_" + juce::String(mappedIndex) + + "_" + juce::String(nextRoute->paramIndex); + nextRoute->lastAppliedValue.store( + std::numeric_limits<float>::quiet_NaN(), + std::memory_order_release); + nextSnapshot->push_back(std::move(nextRoute)); + } + + publishPluginAutomationRoutes( + std::static_pointer_cast<const PluginAutomationRouteSnapshot>(nextSnapshot)); +} + +void TrackProcessor::remapPluginAutomationRoutesForRemoval( + bool isInputFX, int removedIndex) +{ + const juce::ScopedLock routeGuard(pluginAutomationRouteLock); + const auto snapshot = std::atomic_load_explicit( + &pluginAutomationSnapshot, std::memory_order_acquire); + if (snapshot == nullptr || snapshot->empty()) + return; + + auto nextSnapshot = std::make_shared<PluginAutomationRouteSnapshot>(); + nextSnapshot->reserve(snapshot->size()); + for (const auto& route : *snapshot) + { + if (route == nullptr) + { + nextSnapshot->push_back(route); + continue; + } + if (route->isInputFX == isInputFX + && route->fxIndex == removedIndex) + continue; + + auto nextRoute = clonePluginAutomationRoute(*route); + + if (route->isInputFX == isInputFX + && route->fxIndex > removedIndex) + { + --nextRoute->fxIndex; + const auto chain = isInputFX ? "input" : "track"; + nextRoute->parameterId = nextRoute->builtInParamId.isNotEmpty() + ? "builtin_" + juce::String(chain) + "_" + juce::String(nextRoute->fxIndex) + + "_" + juce::URL::addEscapeChars(nextRoute->builtInParamId, true) + : "plugin_" + juce::String(chain) + "_" + juce::String(nextRoute->fxIndex) + + "_" + juce::String(nextRoute->paramIndex); + nextRoute->lastAppliedValue.store( + std::numeric_limits<float>::quiet_NaN(), + std::memory_order_release); + } + nextSnapshot->push_back(std::move(nextRoute)); + } + + publishPluginAutomationRoutes( + std::static_pointer_cast<const PluginAutomationRouteSnapshot>(nextSnapshot)); +} + std::shared_ptr<TrackProcessor::PluginAutomationRoute> TrackProcessor::getOrCreatePluginAutomationRoute(const juce::String& parameterId) { if (auto existing = findPluginAutomationRoute(parameterId)) @@ -352,6 +1015,7 @@ std::shared_ptr<TrackProcessor::PluginAutomationRoute> TrackProcessor::getOrCrea route->isInputFX = parsedRef.isInputFX; route->fxIndex = parsedRef.fxIndex; route->paramIndex = parsedRef.paramIndex; + route->builtInParamId = parsedRef.builtInParamId; const bool validRoute = route->isInputFX ? route->fxIndex < getNumInputFX() @@ -359,6 +1023,24 @@ std::shared_ptr<TrackProcessor::PluginAutomationRoute> TrackProcessor::getOrCrea if (!validRoute) return nullptr; + auto* processor = route->isInputFX + ? getInputFXProcessor(route->fxIndex) + : getTrackFXProcessor(route->fxIndex); + route->targetProcessor = processor; + if (route->builtInParamId.isNotEmpty()) + { + OpenStudioBuiltInAutomationDescriptor descriptor; + if (! getOpenStudioBuiltInAutomationDescriptor(processor, route->builtInParamId, descriptor)) + return nullptr; + route->builtInMinimum = descriptor.minimum; + route->builtInMaximum = descriptor.maximum; + route->builtInDiscrete = descriptor.discrete; + route->builtInCurve = descriptor.curve; + route->automation->setDefaultValue( + openStudioBuiltInValueToNormalized( + descriptor, descriptor.currentValue)); + } + const juce::ScopedLock sl(pluginAutomationRouteLock); if (auto existing = findPluginAutomationRoute(parameterId)) return existing; @@ -368,9 +1050,8 @@ std::shared_ptr<TrackProcessor::PluginAutomationRoute> TrackProcessor::getOrCrea if (snapshot) *nextSnapshot = *snapshot; nextSnapshot->push_back(route); - std::atomic_store_explicit(&pluginAutomationSnapshot, - std::static_pointer_cast<const PluginAutomationRouteSnapshot>(nextSnapshot), - std::memory_order_release); + publishPluginAutomationRoutes( + std::static_pointer_cast<const PluginAutomationRouteSnapshot>(nextSnapshot)); return route; } @@ -398,6 +1079,37 @@ std::shared_ptr<TrackProcessor::MIDICCAutomationRoute> TrackProcessor::findMIDIC return nullptr; } +void TrackProcessor::publishMIDICCAutomationRoutes( + std::shared_ptr<const MIDICCAutomationRouteSnapshot> snapshot) +{ + const bool hasRoutes = snapshot != nullptr && !snapshot->empty(); + const juce::ScopedLock publicationGuard( + realtimeAuxPublicationLock); + reclaimRetiredRealtimeAuxOwners(); + const auto previous = std::atomic_load_explicit( + &midiCCAutomationSnapshot, + std::memory_order_acquire); + { + const juce::ScopedLock retirementGuard( + realtimeAuxRetirementLock); + if (previous != nullptr + && previous.get() != snapshot.get()) + { + retiredRealtimeAuxOwners.push_back( + std::static_pointer_cast<const void>( + previous)); + } + std::atomic_store_explicit( + &midiCCAutomationSnapshot, + snapshot, + std::memory_order_release); + midiCCAutomationSnapshotForAudio.store( + snapshot.get(), + std::memory_order_seq_cst); + } + hasPublishedMIDICCAutomationRoutes.store(hasRoutes, std::memory_order_release); +} + std::shared_ptr<TrackProcessor::MIDICCAutomationRoute> TrackProcessor::getOrCreateMIDICCAutomationRoute(const juce::String& parameterId) { if (auto existing = findMIDICCAutomationRoute(parameterId)) @@ -421,9 +1133,8 @@ std::shared_ptr<TrackProcessor::MIDICCAutomationRoute> TrackProcessor::getOrCrea if (snapshot) *nextSnapshot = *snapshot; nextSnapshot->push_back(route); - std::atomic_store_explicit(&midiCCAutomationSnapshot, - std::static_pointer_cast<const MIDICCAutomationRouteSnapshot>(nextSnapshot), - std::memory_order_release); + publishMIDICCAutomationRoutes( + std::static_pointer_cast<const MIDICCAutomationRouteSnapshot>(nextSnapshot)); return route; } @@ -516,6 +1227,7 @@ std::optional<TrackProcessor::AutomationTarget> TrackProcessor::resolveAutomatio target.isInputFX = route->isInputFX; target.fxIndex = route->fxIndex; target.paramIndex = route->paramIndex; + target.builtInParamId = route->builtInParamId; return target; } @@ -559,6 +1271,20 @@ float TrackProcessor::getAutomationDefaultValue(const AutomationTarget& target) if (processor == nullptr) return 0.0f; + if (target.builtInParamId.isNotEmpty()) + { + OpenStudioBuiltInAutomationDescriptor descriptor; + if (! getOpenStudioBuiltInAutomationDescriptor( + const_cast<juce::AudioProcessor*>(processor), + target.builtInParamId, + descriptor)) + { + return 0.0f; + } + return openStudioBuiltInValueToNormalized( + descriptor, descriptor.currentValue); + } + const auto& params = processor->getParameters(); if (target.paramIndex < 0 || target.paramIndex >= params.size() || params[target.paramIndex] == nullptr) return 0.0f; @@ -572,8 +1298,15 @@ float TrackProcessor::getAutomationDefaultValue(const AutomationTarget& target) bool TrackProcessor::hasPluginAutomation() const { - auto snapshot = std::atomic_load_explicit(&pluginAutomationSnapshot, std::memory_order_acquire); - if (!snapshot) + if (!hasPublishedPluginAutomationRoutes.load(std::memory_order_acquire)) + return false; + + const ScopedTrackRealtimeReader readGuard( + realtimeAuxAudioReaders); + const auto* const snapshot = + pluginAutomationSnapshotForAudio.load( + std::memory_order_seq_cst); + if (snapshot == nullptr) return false; for (const auto& route : *snapshot) @@ -593,8 +1326,15 @@ bool TrackProcessor::hasMIDIAutomation() const if (midiChannelPressureAutomation.shouldPlaybackForRead() && midiChannelPressureAutomation.getNumPoints() > 0) return true; - auto snapshot = std::atomic_load_explicit(&midiCCAutomationSnapshot, std::memory_order_acquire); - if (!snapshot) + if (!hasPublishedMIDICCAutomationRoutes.load(std::memory_order_acquire)) + return false; + + const ScopedTrackRealtimeReader readGuard( + realtimeAuxAudioReaders); + const auto* const snapshot = + midiCCAutomationSnapshotForAudio.load( + std::memory_order_seq_cst); + if (snapshot == nullptr) return false; for (const auto& route : *snapshot) @@ -626,83 +1366,399 @@ void TrackProcessor::resetAutomationTouchState() midiPitchBendAutomation.resetTouchAndLatch(); midiChannelPressureAutomation.resetTouchAndLatch(); - auto pluginSnapshot = std::atomic_load_explicit(&pluginAutomationSnapshot, std::memory_order_acquire); - if (pluginSnapshot) - for (const auto& route : *pluginSnapshot) - if (route && route->automation) - route->automation->resetTouchAndLatch(); + if (hasPublishedPluginAutomationRoutes.load(std::memory_order_acquire)) + { + auto pluginSnapshot = std::atomic_load_explicit( + &pluginAutomationSnapshot, std::memory_order_acquire); + if (pluginSnapshot) + for (const auto& route : *pluginSnapshot) + if (route && route->automation) + route->automation->resetTouchAndLatch(); + } + + if (hasPublishedMIDICCAutomationRoutes.load(std::memory_order_acquire)) + { + auto midiSnapshot = std::atomic_load_explicit( + &midiCCAutomationSnapshot, std::memory_order_acquire); + if (midiSnapshot) + for (const auto& route : *midiSnapshot) + if (route && route->automation) + route->automation->resetTouchAndLatch(); + } +} + +void TrackProcessor::reclaimRetiredRealtimeGraphSnapshots() +{ + std::vector<std::shared_ptr<const RealtimeGraphSnapshot>> + reclaim; + { + const juce::ScopedLock retirementGuard( + realtimeGraphRetirementLock); + if (realtimeGraphAudioReaders.load( + std::memory_order_seq_cst) == 0) + { + reclaim.swap( + retiredRealtimeGraphSnapshots); + } + } +} + +void TrackProcessor::reclaimRetiredRealtimeAuxOwners() +{ + std::vector<std::shared_ptr<const void>> reclaim; + { + const juce::ScopedLock retirementGuard( + realtimeAuxRetirementLock); + if (realtimeAuxAudioReaders.load( + std::memory_order_seq_cst) == 0) + { + reclaim.swap( + retiredRealtimeAuxOwners); + } + } +} + +void TrackProcessor::reclaimRetiredScheduledMIDISnapshots() +{ + std::vector<std::shared_ptr<const std::vector<ScheduledMIDIClip>>> + reclaim; + { + const juce::ScopedLock retirementGuard( + scheduledMIDIRetirementLock); + if (scheduledMIDIAudioReaders.load( + std::memory_order_seq_cst) == 0) + { + reclaim.swap( + retiredScheduledMIDISnapshots); + } + } +} - auto midiSnapshot = std::atomic_load_explicit(&midiCCAutomationSnapshot, std::memory_order_acquire); - if (midiSnapshot) - for (const auto& route : *midiSnapshot) - if (route && route->automation) - route->automation->resetTouchAndLatch(); +void TrackProcessor::publishScheduledMIDIClips( + std::shared_ptr<const std::vector<ScheduledMIDIClip>> snapshot) +{ + const juce::ScopedLock publicationGuard( + scheduledMIDIPublicationLock); + reclaimRetiredScheduledMIDISnapshots(); + const auto previous = std::atomic_load_explicit( + &scheduledMIDIClips, std::memory_order_acquire); + { + const juce::ScopedLock retirementGuard( + scheduledMIDIRetirementLock); + if (previous != nullptr + && previous.get() != snapshot.get()) + { + retiredScheduledMIDISnapshots.push_back( + previous); + } + std::atomic_store_explicit( + &scheduledMIDIClips, + snapshot, + std::memory_order_release); + const bool hasScheduledClips = + snapshot != nullptr + && ! snapshot->empty(); + scheduledMIDIClipsForAudio.store( + hasScheduledClips + ? snapshot.get() + : nullptr, + std::memory_order_seq_cst); + hasScheduledMIDIClipsForAudio.store( + hasScheduledClips, + std::memory_order_release); + } } void TrackProcessor::publishRealtimeStateSnapshots() { - auto inputSnapshot = std::make_shared<const ProcessorSnapshot>(inputFXPlugins.begin(), inputFXPlugins.end()); - auto trackSnapshot = std::make_shared<const ProcessorSnapshot>(trackFXPlugins.begin(), trackFXPlugins.end()); - auto sidechainSnapshot = std::make_shared<const SidechainSourceSnapshot>(sidechainSources.begin(), sidechainSources.end()); - auto sendSnapshot = std::make_shared<const SendSnapshot>(sends.begin(), sends.end()); - auto inputBypassSnapshot = std::make_shared<const BypassSnapshot>(inputFXBypassedState.begin(), inputFXBypassedState.end()); - auto trackBypassSnapshot = std::make_shared<const BypassSnapshot>(trackFXBypassedState.begin(), trackFXBypassedState.end()); - auto inputPrecisionSnapshot = std::make_shared<const PrecisionOverrideSnapshot>(inputFXForceFloatOverrides.begin(), inputFXForceFloatOverrides.end()); - auto trackPrecisionSnapshot = std::make_shared<const PrecisionOverrideSnapshot>(trackFXForceFloatOverrides.begin(), trackFXForceFloatOverrides.end()); - std::shared_ptr<juce::AudioProcessor> instrumentSnapshot = instrumentPlugin; - - std::atomic_store_explicit(&realtimeInputFXSnapshot, inputSnapshot, std::memory_order_release); - std::atomic_store_explicit(&realtimeTrackFXSnapshot, trackSnapshot, std::memory_order_release); - std::atomic_store_explicit(&realtimeInputFXBypassSnapshot, inputBypassSnapshot, std::memory_order_release); - std::atomic_store_explicit(&realtimeTrackFXBypassSnapshot, trackBypassSnapshot, std::memory_order_release); - std::atomic_store_explicit(&realtimeInputFXPrecisionOverrideSnapshot, inputPrecisionSnapshot, std::memory_order_release); - std::atomic_store_explicit(&realtimeTrackFXPrecisionOverrideSnapshot, trackPrecisionSnapshot, std::memory_order_release); - std::atomic_store_explicit(&realtimeSidechainSnapshot, sidechainSnapshot, std::memory_order_release); - std::atomic_store_explicit(&realtimeSendSnapshot, sendSnapshot, std::memory_order_release); - std::atomic_store_explicit(&realtimeInstrumentSnapshot, instrumentSnapshot, std::memory_order_release); + // Serialise control-side publishers. The callback never acquires this lock. + const juce::ScopedLock publicationGuard( + realtimeGraphPublicationLock); + // Reclaim only owners retired by an earlier publication. The owner replaced + // below must survive at least one publication boundary so a reader that + // starts concurrently can still observe it safely. + reclaimRetiredRealtimeGraphSnapshots(); + const auto previous = std::atomic_load_explicit( + &realtimeGraphSnapshot, std::memory_order_acquire); + auto next = std::make_shared<RealtimeGraphSnapshot>(); + next->generation = + realtimeGraphGeneration.fetch_add(1, std::memory_order_relaxed) + 1; + next->inputFX.assign(inputFXPlugins.begin(), inputFXPlugins.end()); + next->trackFX.assign(trackFXPlugins.begin(), trackFXPlugins.end()); + next->inputFXBypass = inputFXBypassedState; + next->trackFXBypass = trackFXBypassedState; + next->inputFXPrecisionOverrides = inputFXForceFloatOverrides; + next->trackFXPrecisionOverrides = trackFXForceFloatOverrides; + next->instrument = instrumentPlugin; + next->sidechainSources = sidechainSources; + next->sends = sends; + + const int preparedBlockSize = juce::jmax( + 1, + fxBypassDryBuffer.getNumSamples() > 0 + ? fxBypassDryBuffer.getNumSamples() + : kMinimumHostedPluginBlockSize); + const auto prepareDelayStorage = + [preparedBlockSize] ( + const ProcessorPtr& processor, + const FXBypassDelayStoragePtr& reusable) + -> FXBypassDelayStoragePtr + { + if (processor == nullptr) + return {}; + + const int reportedLatency = + juce::jmax(0, processor->getLatencySamples()); + const int requiredCapacity = + juce::jmax( + kHostBypassLatencyHeadroomSamples, + reportedLatency) + + preparedBlockSize + 1; + if (reusable != nullptr + && reusable->processor == processor.get() + && reusable->ring.getNumChannels() + >= hostBypassDryChannels + && reusable->ring.getNumSamples() + >= requiredCapacity) + { + reusable->publishedLatency.store( + reportedLatency, + std::memory_order_release); + return reusable; + } + + auto storage = + std::make_shared<FXBypassDelayStorage>(); + storage->processor = processor.get(); + storage->publishedLatency.store( + reportedLatency, + std::memory_order_relaxed); + storage->ring.setSize( + hostBypassDryChannels, + requiredCapacity, + false, + true, + false); + storage->ring.clear(); + return storage; + }; + + for (size_t index = 0; + index < maxRealtimeFXContinuitySlots; + ++index) + { + const auto previousInput = + previous != nullptr + ? previous->inputFXBypassDelay[index] + : FXBypassDelayStoragePtr {}; + const auto previousTrack = + previous != nullptr + ? previous->trackFXBypassDelay[index] + : FXBypassDelayStoragePtr {}; + if (index < next->inputFX.size()) + { + next->inputFXBypassDelay[index] = + prepareDelayStorage( + next->inputFX[index], + previousInput); + } + if (index < next->trackFX.size()) + { + next->trackFXBypassDelay[index] = + prepareDelayStorage( + next->trackFX[index], + previousTrack); + } + } + + const auto published = + std::static_pointer_cast<const RealtimeGraphSnapshot>( + next); + { + const juce::ScopedLock retirementGuard( + realtimeGraphRetirementLock); + if (previous != nullptr + && previous.get() != published.get()) + { + retiredRealtimeGraphSnapshots.push_back( + previous); + } + std::atomic_store_explicit( + &realtimeGraphSnapshot, + published, + std::memory_order_release); + realtimeGraphSnapshotForAudio.store( + published.get(), + std::memory_order_seq_cst); + } +} + +void TrackProcessor::resetFXContinuityStates() noexcept +{ + inputFXContinuity.fill({}); + trackFXContinuity.fill({}); + instrumentContinuity = {}; +} + +void TrackProcessor::refreshHostBypassDelayStorage() +{ + const auto snapshot = + std::atomic_load_explicit( + &realtimeGraphSnapshot, + std::memory_order_acquire); + if (snapshot == nullptr) + return; + + const int preparedBlockSize = + juce::jmax( + 1, + fxBypassDryBuffer.getNumSamples() + > 0 + ? fxBypassDryBuffer + .getNumSamples() + : kMinimumHostedPluginBlockSize); + const auto publishLatencyInPlace = + [preparedBlockSize] ( + const ProcessorSnapshot& processors, + const auto& storageArray) + { + if (processors.size() + > storageArray.size()) + return false; + + for (size_t index = 0; + index < processors.size(); + ++index) + { + const auto& processor = + processors[index]; + const auto& storage = + storageArray[index]; + if (processor == nullptr) + continue; + + const int reportedLatency = + juce::jmax( + 0, + processor + ->getLatencySamples()); + const int requiredCapacity = + juce::jmax( + kHostBypassLatencyHeadroomSamples, + reportedLatency) + + preparedBlockSize + 1; + if (storage == nullptr + || storage->processor + != processor.get() + || storage->ring + .getNumChannels() + < hostBypassDryChannels + || storage->ring + .getNumSamples() + < requiredCapacity) + { + return false; + } + + storage->publishedLatency.store( + reportedLatency, + std::memory_order_release); + } + return true; + }; + + // NAM sample-rate conversion changes the reported latency by only a few + // dozen samples, well inside the existing 4096-sample headroom. Updating + // these atomics avoids allocating and publishing a replacement graph + // snapshot, whose final shared_ptr release could otherwise occur on a + // 16-sample callback. + if (publishLatencyInPlace( + snapshot->inputFX, + snapshot->inputFXBypassDelay) + && publishLatencyInPlace( + snapshot->trackFX, + snapshot->trackFXBypassDelay)) + { + return; + } + + // Only genuinely larger plugin latency requires new delay storage. + const juce::ScopedLock processorCallbackGuard( + getCallbackLock()); + publishRealtimeStateSnapshots(); } void TrackProcessor::applyPluginAutomationForProcessor(juce::AudioProcessor* proc, bool isInputFX, int fxIndex, - double blockTimeSeconds) + double blockTimeSeconds, + const PluginAutomationRouteSnapshot* routes) { - if (proc == nullptr) - return; - - auto snapshot = std::atomic_load_explicit(&pluginAutomationSnapshot, std::memory_order_acquire); - if (!snapshot || snapshot->empty()) + if (proc == nullptr + || routes == nullptr + || routes->empty()) return; auto& params = proc->getParameters(); - if (params.isEmpty()) - return; - for (const auto& route : *snapshot) + for (const auto& route : *routes) { + const bool processorMatches = route != nullptr + && (route->targetProcessor != nullptr + ? route->targetProcessor == proc + : (route->isInputFX == isInputFX + && route->fxIndex == fxIndex)); if (!route - || route->isInputFX != isInputFX - || route->fxIndex != fxIndex - || route->automation == nullptr - || route->paramIndex < 0 - || route->paramIndex >= params.size()) + || ! processorMatches + || route->automation == nullptr) { continue; } - auto* param = params[route->paramIndex]; - if (param == nullptr) + // Legacy projects may still contain automation lanes for retired NAM + // controls. Ignore them permanently so old sessions cannot reactivate + // or repeatedly publish unsupported topology/state choices. + if (dynamic_cast<S13NAMRack*>(proc) != nullptr + && (route->builtInParamId == "transposeSemitones" + || route->builtInParamId == "inputMode")) + { continue; + } const float automatedValue = shouldApplyAutomation(*route->automation) ? route->automation->eval(blockTimeSeconds) : route->automation->getDefaultValue(); + if (! std::isfinite(automatedValue)) + continue; + const float clampedValue = juce::jlimit(0.0f, 1.0f, automatedValue); const float lastValue = route->lastAppliedValue.load(std::memory_order_relaxed); if (std::isfinite(lastValue) && std::abs(lastValue - clampedValue) <= 1.0e-6f) continue; - param->setValue(clampedValue); + if (route->builtInParamId.isNotEmpty()) + { + OpenStudioBuiltInAutomationDescriptor descriptor; + descriptor.minimum = route->builtInMinimum; + descriptor.maximum = route->builtInMaximum; + descriptor.discrete = route->builtInDiscrete; + descriptor.curve = route->builtInCurve; + auto rawValue = openStudioBuiltInNormalizedToValue( + descriptor, clampedValue); + if (route->builtInDiscrete) + rawValue = std::round(rawValue); + if (! setOpenStudioBuiltInParameterValue(proc, route->builtInParamId, rawValue)) + continue; + } + else + { + if (route->paramIndex < 0 || route->paramIndex >= params.size()) + continue; + auto* param = params[route->paramIndex]; + if (param == nullptr) + continue; + param->setValue(clampedValue); + } route->lastAppliedValue.store(clampedValue, std::memory_order_relaxed); } } @@ -731,7 +1787,125 @@ bool TrackProcessor::isMidiEffect() const double TrackProcessor::getTailLengthSeconds() const { - return 0.0; + double serialTailSeconds = 0.0; + const auto addProcessorTail = [&serialTailSeconds] (const juce::AudioProcessor* processor) + { + if (processor == nullptr) + return; + + const double processorTail = processor->getTailLengthSeconds(); + if (std::isfinite(processorTail) && processorTail > 0.0) + serialTailSeconds += processorTail; + }; + + for (int index = 0; index < static_cast<int>(inputFXPlugins.size()); ++index) + { + const auto& plugin = inputFXPlugins[static_cast<size_t>(index)]; + if (plugin && ! getInputFXBypassed(index)) + addProcessorTail(plugin.get()); + } + + addProcessorTail(instrumentPlugin.get()); + + for (int index = 0; index < static_cast<int>(trackFXPlugins.size()); ++index) + { + const auto& plugin = trackFXPlugins[static_cast<size_t>(index)]; + if (plugin && ! getTrackFXBypassed(index)) + addProcessorTail(plugin.get()); + } + + return serialTailSeconds; +} + +double TrackProcessor::getOfflineRenderTailLengthSeconds() const +{ + double serialTailSeconds = 0.0; + const auto automationSnapshot = std::atomic_load_explicit( + &pluginAutomationSnapshot, std::memory_order_acquire); + const auto getNAMTailAutomationModule = [] (const juce::String& parameterId) + { + if (parameterId == "delayEnabled" || parameterId == "delayMix" + || parameterId == "delayTimeMs" || parameterId == "delayFeedback" + || parameterId == "delayMod" || parameterId == "delayMode" + || parameterId == "delayPingPong" || parameterId == "delayTempoSync") + return static_cast<std::uint32_t>(S13NAMRack::tailAutomationDelay); + if (parameterId == "reverbEnabled" || parameterId == "reverbMix" + || parameterId == "reverbDecaySec" || parameterId == "reverbPreDelayMs" + || parameterId == "reverbTone" || parameterId == "reverbLowCutHz" + || parameterId == "reverbShimmer" || parameterId == "reverbVoice" + || parameterId == "reverbPad") + return static_cast<std::uint32_t>(S13NAMRack::tailAutomationReverb); + if (parameterId == "modulatorEnabled" || parameterId == "chorusMix" + || parameterId == "modulatorMode" || parameterId == "modulatorFeedback") + return static_cast<std::uint32_t>(S13NAMRack::tailAutomationModulator); + if (parameterId == "cabEnabled" + || parameterId == "cabRoomEnabled" + || parameterId == "cabRoomAmount" + || parameterId == "cabRoomWidth" + || parameterId == "cabDoublerEnabled" + || parameterId == "cabDoublerMix" + || parameterId == "cabDoublerDelayMs" + || parameterId == "cabDoublerSpread") + return static_cast<std::uint32_t>(S13NAMRack::tailAutomationCab); + return static_cast<std::uint32_t>(S13NAMRack::tailAutomationNone); + }; + const auto getTailAutomationMask = [&] (bool isInputFX, int fxIndex) + { + std::uint32_t mask = S13NAMRack::tailAutomationNone; + if (! automationSnapshot) + return mask; + for (const auto& route : *automationSnapshot) + { + if (route && route->isInputFX == isInputFX && route->fxIndex == fxIndex + && route->automation + && route->automation->shouldPlaybackForRead()) + { + const auto module = + getNAMTailAutomationModule(route->builtInParamId); + const bool hasRelevantPoints = + route->automation->getNumPoints() > 0; + if (hasRelevantPoints) + { + mask |= module; + } + } + } + return mask; + }; + const auto addProcessorTail = [&serialTailSeconds, &getTailAutomationMask] + (const juce::AudioProcessor* processor, bool isInputFX, int fxIndex) + { + if (processor == nullptr) + return; + + double processorTail = processor->getTailLengthSeconds(); + if (const auto* rack = dynamic_cast<const S13NAMRack*>(processor)) + processorTail = rack->getAutomatedTailLengthSeconds( + getTailAutomationMask(isInputFX, fxIndex)); + if (std::isfinite(processorTail) && processorTail > 0.0) + serialTailSeconds += processorTail; + }; + + for (int index = 0; index < static_cast<int>(inputFXPlugins.size()); ++index) + { + const auto& plugin = inputFXPlugins[static_cast<size_t>(index)]; + if (plugin && ! getInputFXBypassed(index)) + addProcessorTail(plugin.get(), true, index); + } + // Instruments do not use track/input FX automation route identities. + if (instrumentPlugin) + { + const double instrumentTail = instrumentPlugin->getTailLengthSeconds(); + if (std::isfinite(instrumentTail) && instrumentTail > 0.0) + serialTailSeconds += instrumentTail; + } + for (int index = 0; index < static_cast<int>(trackFXPlugins.size()); ++index) + { + const auto& plugin = trackFXPlugins[static_cast<size_t>(index)]; + if (plugin && ! getTrackFXBypassed(index)) + addProcessorTail(plugin.get(), false, index); + } + return serialTailSeconds; } int TrackProcessor::getNumPrograms() @@ -762,7 +1936,12 @@ void TrackProcessor::recomputePanGains() const float volumeGain = juce::Decibels::decibelsToGain(currentVolumeDb); float lGain = 1.0f; float rGain = 1.0f; - computePanLawGains(panLaw, currentPan, volumeGain, lGain, rGain); + computePanLawGains( + panLaw.load(std::memory_order_acquire), + currentPan, + volumeGain, + lGain, + rGain); cachedPanL.store(lGain, std::memory_order_relaxed); cachedPanR.store(rGain, std::memory_order_relaxed); @@ -807,11 +1986,18 @@ void TrackProcessor::changeProgramName (int index, const juce::String& newName) // empty, so getSampleRate()/getBlockSize() returned 0/0 and plugins ignored the call. // Now that we call prepareToPlay with valid values, we must restore the layout. static void preparePluginPreservingLayout(juce::AudioProcessor* plugin, double sampleRate, - int maxBlock, ProcessingPrecisionMode precisionMode) + int maxBlock, ProcessingPrecisionMode precisionMode, + int routedInputChannels = 2) { const juce::ScopedLock pluginCallbackGuard(plugin->getCallbackLock()); const int safeMaxBlock = getSafeHostedPluginBlockSize(maxBlock); + // NAM graph topology depends on the host route width. Publish it before + // prepare/reset so a newly inserted mono guitar Rack cannot begin in its + // default stereo topology and perform an avoidable first-callback handoff. + if (auto* const rack = dynamic_cast<S13NAMRack*>(plugin)) + rack->setRoutedInputChannelCount(routedInputChannels); + if (plugin->supportsDoublePrecisionProcessing()) { plugin->setProcessingPrecision( @@ -848,10 +2034,28 @@ static ProcessingPrecisionMode resolvePluginPrecisionMode(ProcessingPrecisionMod void TrackProcessor::prepareToPlay (double sampleRate, int samplesPerBlock) { + realtimeFXTailSampleRateHz.store( + juce::roundToInt(juce::jlimit(8000.0, 384000.0, + sampleRate > 0.0 ? sampleRate : 44100.0)), + std::memory_order_release); // Pre-allocate FX processing buffer with enough channels for complex plugins. // Use the actual device block size here — the buffer just needs to hold one callback. fxProcessBuffer.setSize(kMaxFXChannels, samplesPerBlock); fxProcessBufferDouble.setSize(kMaxFXChannels, samplesPerBlock); + fxBypassDryBuffer.setSize(kMaxFXChannels, samplesPerBlock); + constexpr double hostBypassRampSeconds = 0.020; + fxBypassRampStep = 1.0f + / static_cast<float>(juce::jmax( + 1, + juce::roundToInt( + juce::jmax(1.0, sampleRate) + * hostBypassRampSeconds))); + constexpr double continuityRampSeconds = 0.008; + fxContinuityRampSamples = juce::jmax( + 1, + juce::roundToInt( + juce::jmax(1.0, sampleRate) + * continuityRampSeconds)); // Prepare PDC delay line { @@ -860,9 +2064,25 @@ void TrackProcessor::prepareToPlay (double sampleRate, int samplesPerBlock) spec.maximumBlockSize = static_cast<juce::uint32>(samplesPerBlock); spec.numChannels = 2; pdcDelayLine.prepare(spec); - const int preparedPdcDelaySamples = pdcDelaySamples.load(std::memory_order_relaxed); - if (preparedPdcDelaySamples > 0) - pdcDelayLine.setDelay(static_cast<float>(preparedPdcDelaySamples)); + pdcCurrentDelaySamples = + juce::jmax( + 0, + pdcDelaySamples.load( + std::memory_order_relaxed)); + pdcTargetDelaySamples = + pdcCurrentDelaySamples; + pdcPendingDelaySamples = + pdcCurrentDelaySamples; + pdcTransitionSamplesRemaining = 0; + pdcTransitionSamplesTotal = + juce::jmax( + 1, + juce::roundToInt( + juce::jmax(1.0, sampleRate) + * 0.020)); + pdcDelayLine.setDelay( + static_cast<float>( + pdcCurrentDelaySamples)); } // Prepare plugins with the actual device block size so realtime hosting @@ -878,7 +2098,8 @@ void TrackProcessor::prepareToPlay (double sampleRate, int samplesPerBlock) { preparePluginPreservingLayout(plugin.get(), sampleRate, pluginMaxBlock, resolvePluginPrecisionMode(processingPrecisionMode, - getInputFXPrecisionOverride(index))); + getInputFXPrecisionOverride(index)), + inputChannelCount.load(std::memory_order_acquire)); plugin->reset(); } } @@ -892,7 +2113,8 @@ void TrackProcessor::prepareToPlay (double sampleRate, int samplesPerBlock) const int pluginBlockSize = pluginMaxBlock; preparePluginPreservingLayout(plugin.get(), sampleRate, pluginBlockSize, resolvePluginPrecisionMode(processingPrecisionMode, - getTrackFXPrecisionOverride(index))); + getTrackFXPrecisionOverride(index)), + inputChannelCount.load(std::memory_order_acquire)); plugin->reset(); } } @@ -907,19 +2129,147 @@ void TrackProcessor::prepareToPlay (double sampleRate, int samplesPerBlock) } // Prepare channel strip EQ + channelStripEQ.setPowerEnabled( + channelStripEQEnabled.load(std::memory_order_acquire)); channelStripEQ.prepareToPlay(sampleRate, samplesPerBlock); // Pre-allocate pre-fader buffer for send routing (2-channel stereo) preFaderBuffer.setSize(2, samplesPerBlock); automationGainBuffer.setSize(8, samplesPerBlock); realtimeFallbackBuffer.setSize(2, samplesPerBlock); - midiOutputResetBuffer.ensureSize(512); + publishRealtimeStateSnapshots(); + resetFXContinuityStates(); + invalidatePluginAutomationCache(); + refreshRealtimeFXTailBudgetOnControlThread(); + realtimeFXTailActive.store(false, std::memory_order_release); + realtimeFXTailResetPending.store(false, std::memory_order_release); + realtimeFXTailHardSamplesRemaining = 0; + realtimeFXTailMinimumSamplesRemaining = 0; + realtimeFXTailQuietSamples = 0; + realtimeFXTailLastPublishedBudgetSamples = 0; + realtimeFXPreviousBlockHadInput = false; } void TrackProcessor::releaseResources() { } +void TrackProcessor::refreshRealtimeFXTailBudgetOnControlThread() +{ + double reportedTailSeconds = 0.0; + try + { + reportedTailSeconds = getTailLengthSeconds(); + } + catch (...) + { + // A hosted plugin must not be able to disable bounded tail servicing. + // The conservative fallback below is long enough for the built-in rack. + reportedTailSeconds = 30.0; + } + + if (! std::isfinite(reportedTailSeconds) || reportedTailSeconds < 0.0) + reportedTailSeconds = 30.0; + + const double safeSampleRate = static_cast<double>( + realtimeFXTailSampleRateHz.load(std::memory_order_acquire)); + // Keep the service finite without imposing an arbitrary musical limit. + // The callback countdown is an int, so its representable duration at the + // current sample rate is the only hard cap. This covers the NAM Rack's + // sparse 10-BPM synced repeats (and long standalone built-in delays) while + // still protecting the realtime path from a malformed hosted tail report. + const double maximumCountdownSeconds = + static_cast<double>(std::numeric_limits<int>::max() - 1) + / juce::jmax(1.0, safeSampleRate); + const double boundedTailSeconds = juce::jlimit( + 0.0, + juce::jmax(0.0, + maximumCountdownSeconds - kRealtimeFXTailSafetySeconds), + reportedTailSeconds); + const double budgetSeconds = juce::jlimit( + kRealtimeFXTailQuietWindowSeconds, + maximumCountdownSeconds, + boundedTailSeconds + kRealtimeFXTailSafetySeconds); + // A quiet window is not proof that a sparse delay has ended. Do not allow + // the quiet detector to finish servicing until the processor's complete + // declared tail horizon has elapsed. + const double minimumDrainSeconds = boundedTailSeconds; + + realtimeFXTailBudgetSamples.store( + juce::jmax(1, juce::roundToInt(budgetSeconds * safeSampleRate)), + std::memory_order_release); + realtimeFXTailMinimumDrainSamples.store( + juce::jmax(0, juce::roundToInt(minimumDrainSeconds * safeSampleRate)), + std::memory_order_release); +} + +void TrackProcessor::resetExpiredRealtimeFXTailOnControlThread() +{ + if (! realtimeFXTailResetPending.load(std::memory_order_acquire)) + return; + + const auto requestedGeneration = + realtimeFXTailResetGeneration.load(std::memory_order_acquire); + if (realtimeFXTailActivityGeneration.load(std::memory_order_acquire) + != requestedGeneration) + { + realtimeFXTailResetPending.store(false, std::memory_order_release); + return; + } + + const auto graph = std::atomic_load_explicit( + &realtimeGraphSnapshot, std::memory_order_acquire); + const auto resetProcessor = [&] (const ProcessorPtr& processor) + { + if (processor == nullptr + || realtimeFXTailActivityGeneration.load(std::memory_order_acquire) + != requestedGeneration) + { + return; + } + + // Arbitrary hosted reset() implementations stay off the callback. Each + // FX callback uses ScopedTryLock, so it falls back to latency-aligned + // dry audio instead of ever waiting for this control-thread reset. + const juce::ScopedLock processorGuard(processor->getCallbackLock()); + if (realtimeFXTailActivityGeneration.load(std::memory_order_acquire) + == requestedGeneration) + { + processor->reset(); + } + }; + + if (graph != nullptr) + { + for (const auto& processor : graph->inputFX) + resetProcessor(processor); + resetProcessor(graph->instrument); + for (const auto& processor : graph->trackFX) + resetProcessor(processor); + } + + if (realtimeFXTailActivityGeneration.load(std::memory_order_acquire) + == requestedGeneration) + { + realtimeFXTailActive.store(false, std::memory_order_release); + realtimeFXTailResetPending.store(false, std::memory_order_release); + } +} + +void TrackProcessor::timerCallback() +{ + if (realtimeFXTailActive.load(std::memory_order_acquire) + && ! realtimeFXTailResetPending.load(std::memory_order_acquire)) + { + // Tail controls (especially NAM Rack decay/delay) can change without a + // graph publication. Query them on the control thread, never in the + // 8/16-sample callback. + refreshRealtimeFXTailBudgetOnControlThread(); + } + + resetExpiredRealtimeFXTailOnControlThread(); +} + bool TrackProcessor::isBusesLayoutSupported (const BusesLayout& layouts) const { juce::ignoreUnused (layouts); @@ -939,30 +2289,226 @@ bool TrackProcessor::tryProcessBlock(juce::AudioBuffer<float>& buffer, juce::Mid void TrackProcessor::processBlockInternal (juce::AudioBuffer<float>& buffer, juce::MidiBuffer& midiMessages) { + const int activeARAFXIndexForBlock = + araFXIndexForRealtime.load( + std::memory_order_acquire); + auto* const activeARAControllerForBlock = + activeARAFXIndexForBlock >= 0 + ? araController.get() + : nullptr; // Only time the track when ARA diagnostics are enabled and an ARA plugin is active. // QueryPerformanceCounter is cheap but not free — at 32-sample blocks this fires // 1500×/sec, so we avoid it for non-ARA tracks (e.g. Amplitube, S13 FX). const bool isARATrack = kEnableARADebugDiagnostics - && araController != nullptr - && araController->isActive(); + && activeARAControllerForBlock != nullptr; const double trackProcessStartMs = isARATrack ? juce::Time::getMillisecondCounterHiRes() : 0.0; juce::ScopedNoDenormals noDenormals; auto totalNumInputChannels = getTotalNumInputChannels(); auto totalNumOutputChannels = getTotalNumOutputChannels(); const auto currentTrackType = trackType.load(std::memory_order_acquire); - auto inputFXSnapshot = std::atomic_load_explicit(&realtimeInputFXSnapshot, std::memory_order_acquire); - auto trackFXSnapshot = std::atomic_load_explicit(&realtimeTrackFXSnapshot, std::memory_order_acquire); - auto inputFXBypassSnapshot = std::atomic_load_explicit(&realtimeInputFXBypassSnapshot, std::memory_order_acquire); - auto trackFXBypassSnapshot = std::atomic_load_explicit(&realtimeTrackFXBypassSnapshot, std::memory_order_acquire); - auto inputFXPrecisionOverrideSnapshot = std::atomic_load_explicit(&realtimeInputFXPrecisionOverrideSnapshot, std::memory_order_acquire); - auto trackFXPrecisionOverrideSnapshot = std::atomic_load_explicit(&realtimeTrackFXPrecisionOverrideSnapshot, std::memory_order_acquire); - auto instrumentSnapshot = std::atomic_load_explicit(&realtimeInstrumentSnapshot, std::memory_order_acquire); - auto sidechainSnapshot = std::atomic_load_explicit(&realtimeSidechainSnapshot, std::memory_order_acquire); - auto sendSnapshot = std::atomic_load_explicit(&realtimeSendSnapshot, std::memory_order_acquire); + // Avoid MSVC's process-wide atomic<shared_ptr> spin lock in the audio + // callback. Control-side publication retains replaced immutable graphs + // until this reader epoch has drained. + const ScopedTrackRealtimeReader graphReadGuard( + realtimeGraphAudioReaders); + const auto* const graphSnapshot = + realtimeGraphSnapshotForAudio.load( + std::memory_order_seq_cst); + const uint64 graphGeneration = + graphSnapshot != nullptr ? graphSnapshot->generation : 0; + const auto* const inputFXSnapshot = + graphSnapshot != nullptr ? &graphSnapshot->inputFX : nullptr; + const auto* const trackFXSnapshot = + graphSnapshot != nullptr ? &graphSnapshot->trackFX : nullptr; + const auto* const inputFXBypassSnapshot = + graphSnapshot != nullptr ? &graphSnapshot->inputFXBypass : nullptr; + const auto* const trackFXBypassSnapshot = + graphSnapshot != nullptr ? &graphSnapshot->trackFXBypass : nullptr; + const auto* const inputFXPrecisionOverrideSnapshot = + graphSnapshot != nullptr + ? &graphSnapshot->inputFXPrecisionOverrides + : nullptr; + const auto* const trackFXPrecisionOverrideSnapshot = + graphSnapshot != nullptr + ? &graphSnapshot->trackFXPrecisionOverrides + : nullptr; + auto* const instrumentSnapshot = + graphSnapshot != nullptr ? graphSnapshot->instrument.get() : nullptr; + const bool hasPluginAutomationRoutesForBlock = + hasPublishedPluginAutomationRoutes.load( + std::memory_order_acquire); + const ScopedTrackRealtimeReader auxReadGuard( + realtimeAuxAudioReaders, + hasPluginAutomationRoutesForBlock + || currentTrackType == TrackType::Instrument); + const auto* const pluginAutomationRoutesForBlock = + hasPluginAutomationRoutesForBlock + ? pluginAutomationSnapshotForAudio.load( + std::memory_order_seq_cst) + : nullptr; + const auto* const sidechainSnapshot = + graphSnapshot != nullptr ? &graphSnapshot->sidechainSources : nullptr; + const auto* const sendSnapshot = + graphSnapshot != nullptr ? &graphSnapshot->sends : nullptr; + const auto* const inputFXBypassDelaySnapshot = + graphSnapshot != nullptr + ? &graphSnapshot->inputFXBypassDelay + : nullptr; + const auto* const trackFXBypassDelaySnapshot = + graphSnapshot != nullptr + ? &graphSnapshot->trackFXBypassDelay + : nullptr; const bool instrumentForceFloat = instrumentForceFloatOverride.load(std::memory_order_acquire); const double blockTimeSeconds = this->blockStartTimeSeconds; + const auto hasEnabledProcessor = [] ( + const ProcessorSnapshot* processors, + const BypassSnapshot* bypassState) noexcept + { + if (processors == nullptr) + return false; + + for (int index = 0; + index < static_cast<int>(processors->size()); + ++index) + { + if ((*processors)[static_cast<size_t>(index)] == nullptr) + continue; + const auto bypassIt = bypassState != nullptr + ? bypassState->find(index) + : BypassSnapshot::const_iterator {}; + if (bypassState == nullptr + || bypassIt == bypassState->end() + || ! bypassIt->second) + { + return true; + } + } + return false; + }; + const bool hasEnabledRealtimeFX = + currentTrackType == TrackType::Audio + && (hasEnabledProcessor(inputFXSnapshot, inputFXBypassSnapshot) + || hasEnabledProcessor(trackFXSnapshot, trackFXBypassSnapshot)); + bool hasExternalAudioInput = false; + if (hasEnabledRealtimeFX) + { + for (int channel = 0; channel < buffer.getNumChannels(); ++channel) + { + const float inputPeak = buffer.getMagnitude( + channel, 0, buffer.getNumSamples()); + if (std::isfinite(inputPeak) && inputPeak > 0.0f) + { + hasExternalAudioInput = true; + break; + } + } + } + + if (! hasEnabledRealtimeFX) + { + realtimeFXTailActive.store(false, std::memory_order_release); + realtimeFXTailResetPending.store(false, std::memory_order_release); + realtimeFXTailHardSamplesRemaining = 0; + realtimeFXTailMinimumSamplesRemaining = 0; + realtimeFXTailQuietSamples = 0; + realtimeFXTailLastPublishedBudgetSamples = 0; + realtimeFXPreviousBlockHadInput = false; + } + else if (hasExternalAudioInput) + { + if (! realtimeFXPreviousBlockHadInput) + { + realtimeFXTailActivityGeneration.fetch_add( + 1, std::memory_order_acq_rel); + } + realtimeFXPreviousBlockHadInput = true; + realtimeFXTailActive.store(true, std::memory_order_release); + realtimeFXTailResetPending.store(false, std::memory_order_release); + const int publishedBudget = + realtimeFXTailBudgetSamples.load(std::memory_order_acquire); + realtimeFXTailHardSamplesRemaining = juce::jmax( + buffer.getNumSamples(), + publishedBudget); + realtimeFXTailMinimumSamplesRemaining = juce::jlimit( + 0, + realtimeFXTailHardSamplesRemaining, + realtimeFXTailMinimumDrainSamples.load(std::memory_order_acquire)); + realtimeFXTailQuietSamples = 0; + realtimeFXTailLastPublishedBudgetSamples = publishedBudget; + } + else + { + realtimeFXPreviousBlockHadInput = false; + } + + const bool isRealtimeFXTailDrainBlock = + hasEnabledRealtimeFX + && ! hasExternalAudioInput + && realtimeFXTailActive.load(std::memory_order_acquire) + && ! realtimeFXTailResetPending.load(std::memory_order_acquire); + const auto finishRealtimeFXTailDrain = [&] (float outputPeak) noexcept + { + if (! isRealtimeFXTailDrainBlock) + return; + + const int blockSamples = juce::jmax(0, buffer.getNumSamples()); + const int publishedBudget = + realtimeFXTailBudgetSamples.load(std::memory_order_acquire); + if (publishedBudget > realtimeFXTailLastPublishedBudgetSamples) + { + // A built-in processor can publish a longer live/frozen tail after + // the external input has stopped. Adopt that increase once; an + // unchanged fixed plugin report must not refresh the countdown on + // every timer tick. + realtimeFXTailHardSamplesRemaining = juce::jmax( + realtimeFXTailHardSamplesRemaining, publishedBudget); + realtimeFXTailMinimumSamplesRemaining = juce::jmax( + realtimeFXTailMinimumSamplesRemaining, + realtimeFXTailMinimumDrainSamples.load( + std::memory_order_acquire)); + } + realtimeFXTailLastPublishedBudgetSamples = publishedBudget; + realtimeFXTailHardSamplesRemaining = juce::jmax( + 0, realtimeFXTailHardSamplesRemaining - blockSamples); + realtimeFXTailMinimumSamplesRemaining = juce::jmax( + 0, realtimeFXTailMinimumSamplesRemaining - blockSamples); + + if (realtimeFXTailMinimumSamplesRemaining <= 0) + { + if (std::isfinite(outputPeak) + && outputPeak < kRealtimeFXTailQuietPeak) + { + realtimeFXTailQuietSamples = juce::jmin( + std::numeric_limits<int>::max() - blockSamples, + realtimeFXTailQuietSamples) + blockSamples; + } + else + { + realtimeFXTailQuietSamples = 0; + } + } + + const int quietWindowSamples = juce::jmax( + 1, + juce::roundToInt( + static_cast<double>(realtimeFXTailSampleRateHz.load( + std::memory_order_relaxed)) + * kRealtimeFXTailQuietWindowSeconds)); + if (realtimeFXTailHardSamplesRemaining <= 0 + || realtimeFXTailQuietSamples >= quietWindowSamples) + { + const auto generation = + realtimeFXTailActivityGeneration.load(std::memory_order_acquire); + realtimeFXTailResetGeneration.store( + generation, std::memory_order_release); + realtimeFXTailResetPending.store(true, std::memory_order_release); + } + }; bool hasTrackBuiltInInstrument = false; - if (trackFXSnapshot) + // Audio tracks cannot host OpenStudio's built-in instrument fallback. + // Avoid calling getName() on every FX here: JUCE returns String by value, + // which can allocate on the realtime thread even for a literal name. + if (currentTrackType == TrackType::Instrument && trackFXSnapshot) { for (const auto& plugin : *trackFXSnapshot) { @@ -974,9 +2520,11 @@ void TrackProcessor::processBlockInternal (juce::AudioBuffer<float>& buffer, juc } } - if (araController != nullptr && araController->isActive()) - araController->updateTransportDebugState(araTransportPlayingDebugState.load(std::memory_order_acquire), - blockTimeSeconds); + if (activeARAControllerForBlock != nullptr) + activeARAControllerForBlock->updateTransportDebugState( + araTransportPlayingDebugState.load( + std::memory_order_acquire), + blockTimeSeconds); // Safety: only clear channels that actually exist in the buffer int bufferChannels = buffer.getNumChannels(); @@ -991,18 +2539,119 @@ void TrackProcessor::processBlockInternal (juce::AudioBuffer<float>& buffer, juc { buffer.clear(); currentRMS = 0.0f; + finishRealtimeFXTailDrain(0.0f); return; } - // Apply Plugin Delay Compensation (PDC) before FX chains + // Apply Plugin Delay Compensation (PDC) before FX chains. A model-rate + // change can alter another track's compensation by tens of samples. A + // hard DelayLine::setDelay() repeats or drops that history at one sample + // and sounds like a click, so crossfade the two already-warm integer taps. if (pdcDelayDirty.exchange(false, std::memory_order_acq_rel)) - pdcDelayLine.setDelay(static_cast<float>(pdcDelaySamples.load(std::memory_order_relaxed))); + { + pdcPendingDelaySamples = + juce::jlimit( + 0, + pdcDelayLine + .getMaximumDelayInSamples(), + pdcDelaySamples.load( + std::memory_order_relaxed)); + } - if (pdcDelaySamples.load(std::memory_order_relaxed) > 0) + // Process even at zero delay so the ring buffer always contains current + // audio. A later 0 -> positive PDC change then cannot replay stale samples. + const auto beginPendingPDCTransition = + [this] () noexcept { - juce::dsp::AudioBlock<float> block(buffer); - juce::dsp::ProcessContextReplacing<float> context(block); - pdcDelayLine.process(context); + if (pdcTransitionSamplesRemaining <= 0 + && pdcPendingDelaySamples + != pdcCurrentDelaySamples) + { + pdcTargetDelaySamples = + pdcPendingDelaySamples; + pdcTransitionSamplesRemaining = + pdcTransitionSamplesTotal; + } + }; + beginPendingPDCTransition(); + for (int sample = 0; + sample < buffer.getNumSamples(); + ++sample) + { + float transitionMix = 0.0f; + const bool transitioning = + pdcTransitionSamplesRemaining > 0; + if (transitioning) + { + const float linearProgress = + 1.0f + - static_cast<float>( + pdcTransitionSamplesRemaining + - 1) + / static_cast<float>( + pdcTransitionSamplesTotal); + transitionMix = + linearProgress + * linearProgress + * (3.0f + - 2.0f + * linearProgress); + } + + for (int channel = 0; + channel < bufferChannels; + ++channel) + { + const float input = + buffer.getSample( + channel, sample); + pdcDelayLine.pushSample( + channel, input); + if (transitioning) + { + const float previousTap = + pdcDelayLine.popSample( + channel, + static_cast<float>( + pdcCurrentDelaySamples), + false); + const float nextTap = + pdcDelayLine.popSample( + channel, + static_cast<float>( + pdcTargetDelaySamples), + true); + buffer.setSample( + channel, + sample, + previousTap + + (nextTap - previousTap) + * transitionMix); + } + else + { + buffer.setSample( + channel, + sample, + pdcDelayLine.popSample( + channel)); + } + } + + if (transitioning) + { + --pdcTransitionSamplesRemaining; + if (pdcTransitionSamplesRemaining + <= 0) + { + pdcCurrentDelaySamples = + pdcTargetDelaySamples; + pdcDelayLine.setDelay( + static_cast<float>( + pdcCurrentDelaySamples)); + beginPendingPDCTransition(); + } + } } bool hasAnyFX = (inputFXSnapshot && !inputFXSnapshot->empty()) @@ -1063,30 +2712,185 @@ void TrackProcessor::processBlockInternal (juce::AudioBuffer<float>& buffer, juc " bufferChannels=" + juce::String(bufferChannels) + " path=" + juce::String(pluginChannels == bufferChannels ? "DIRECT" : "EXPANDED")); } - } + } + + const auto resolveFXContinuity = + [&] (juce::AudioProcessor* proc, + bool isInputFXChain, + int fxIndex, + bool bypassed) -> FXContinuityState* + { + FXContinuityState* continuity = nullptr; + if (fxIndex < 0) + { + continuity = &instrumentContinuity; + } + else if (static_cast<size_t>(fxIndex) < maxRealtimeFXContinuitySlots) + { + continuity = isInputFXChain + ? &inputFXContinuity[static_cast<size_t>(fxIndex)] + : &trackFXContinuity[static_cast<size_t>(fxIndex)]; + } + + if (continuity == nullptr) + return nullptr; + + if (continuity->processor != proc) + { + *continuity = {}; + continuity->processor = proc; + continuity->hostBypassWetMix = + bypassed ? 0.0f : 1.0f; + continuity->targetBypassed = bypassed; + } + else if (continuity->targetBypassed != bypassed) + { + // Re-enabling follows a message-thread reset of the frozen + // processor. Bridge the first fresh block from the last audible + // endpoint even when the user reverses direction mid-fade. + if (! bypassed) + continuity->skippedLastBlock = true; + continuity->targetBypassed = bypassed; + } + continuity->graphGeneration = graphGeneration; + return continuity; + }; + + const auto scheduleEndpointCorrection = + [&] (FXContinuityState* continuity) + { + if (continuity == nullptr + || !continuity->valid + || buffer.getNumSamples() <= 0) + { + return; + } + + const int channels = juce::jmin(2, buffer.getNumChannels()); + for (int channel = 0; channel < channels; ++channel) + { + const float correction = + continuity->lastOutput[static_cast<size_t>(channel)] + - buffer.getSample(channel, 0); + continuity->endpointCorrection[ + static_cast<size_t>(channel)] = correction; + continuity->endpointCorrectionStep[ + static_cast<size_t>(channel)] = + correction + / static_cast<float>( + fxContinuityRampSamples); + } + continuity->endpointCorrectionSamplesRemaining = + fxContinuityRampSamples; + }; + + const auto applyEndpointCorrection = + [&] (FXContinuityState* continuity) + { + if (continuity == nullptr + || continuity + ->endpointCorrectionSamplesRemaining <= 0) + return; + + const int channels = juce::jmin( + 2, buffer.getNumChannels()); + const int samples = buffer.getNumSamples(); + for (int sample = 0; + sample < samples + && continuity + ->endpointCorrectionSamplesRemaining > 0; + ++sample) + { + for (int channel = 0; + channel < channels; + ++channel) + { + const auto index = + static_cast<size_t>(channel); + buffer.addSample( + channel, + sample, + continuity->endpointCorrection[index]); + continuity->endpointCorrection[index] -= + continuity->endpointCorrectionStep[index]; + } + --continuity + ->endpointCorrectionSamplesRemaining; + } + + if (continuity + ->endpointCorrectionSamplesRemaining <= 0) + { + continuity->endpointCorrection = { + 0.0f, 0.0f + }; + continuity->endpointCorrectionStep = { + 0.0f, 0.0f + }; + } + }; + + const auto rememberOutputEndpoint = + [&] (FXContinuityState* continuity) + { + if (continuity == nullptr || buffer.getNumSamples() <= 0) + return; + + const int lastSample = buffer.getNumSamples() - 1; + const int channels = juce::jmin(2, buffer.getNumChannels()); + for (int channel = 0; channel < channels; ++channel) + { + continuity->lastOutput[static_cast<size_t>(channel)] = + buffer.getSample(channel, lastSample); + } + continuity->valid = channels > 0; + }; - // Channel-safe FX processing helper - auto safeProcessFX = [&](juce::AudioProcessor* proc, bool forceFloat, bool isInputFXChain, int fxIndex) + // Channel-safe raw FX processing helper. Host-bypass mixing and endpoint + // bookkeeping are deliberately outside this function so the sidechain and + // ordinary paths share exactly the same transition behaviour. + auto safeProcessFX = + [&] (juce::AudioProcessor* proc, + bool forceFloat, + bool isInputFXChain, + int fxIndex) -> bool { juce::ScopedTryLock pluginProcessLock(proc->getCallbackLock()); if (!pluginProcessLock.isLocked()) { pluginBusySkipCount.fetch_add(1, std::memory_order_relaxed); - return; + return false; + } + + if (auto* const rack = + dynamic_cast<S13NAMRack*>(proc)) + { + rack->setRoutedInputChannelCount( + inputChannelCount.load( + std::memory_order_acquire)); } - applyPluginAutomationForProcessor(proc, isInputFXChain, fxIndex, blockTimeSeconds); + applyPluginAutomationForProcessor( + proc, + isInputFXChain, + fxIndex, + blockTimeSeconds, + pluginAutomationRoutesForBlock); // Compute isARAProcessor first so we can gate expensive QPC calls on it. // For non-ARA plugins (Amplitube, S13 FX, etc.) all timing overhead is skipped. int pluginChannels = juce::jmax(proc->getTotalNumInputChannels(), proc->getTotalNumOutputChannels()); - const bool isARAProcessor = araController != nullptr - && araController->isActive() - && araFXIndex >= 0 - && trackFXSnapshot - && araFXIndex < static_cast<int>(trackFXSnapshot->size()) - && (*trackFXSnapshot)[static_cast<size_t>(araFXIndex)].get() == proc; + const bool isARAProcessor = + activeARAControllerForBlock != nullptr + && trackFXSnapshot + && activeARAFXIndexForBlock + < static_cast<int>( + trackFXSnapshot->size()) + && (*trackFXSnapshot)[ + static_cast<size_t>( + activeARAFXIndexForBlock)] + .get() == proc; const double envelopeStartMs = isARAProcessor ? juce::Time::getMillisecondCounterHiRes() : 0.0; const bool useDoublePrecision = processingPrecisionMode == ProcessingPrecisionMode::Hybrid64 @@ -1111,9 +2915,12 @@ void TrackProcessor::processBlockInternal (juce::AudioBuffer<float>& buffer, juc if (lastSlowRun != playbackRun) { araLastSlowLogPlaybackRun.store(playbackRun, std::memory_order_release); - const auto snapshot = araController->getDebugSnapshot(); + const auto snapshot = + activeARAControllerForBlock + ->getDebugSnapshot(); logToDisk("ARA session slow-block: trackId=" + araDebugTrackId - + " fxIndex=" + juce::String(araFXIndex) + + " fxIndex=" + juce::String( + activeARAFXIndexForBlock) + " plugin=" + proc->getName() + " callback=" + juce::String(static_cast<juce::int64>(currentARAProcessDebugInfo.callbackCounter)) + " firstCallbackAfterTransportStart=" + juce::String(currentARAProcessDebugInfo.firstCallbackAfterTransportStart ? "true" : "false") @@ -1265,11 +3072,383 @@ void TrackProcessor::processBlockInternal (juce::AudioBuffer<float>& buffer, juc } for (const auto metadata : midiMessages) markActiveMIDINoteState(metadata.getMessage()); + return true; + }; + + const auto canUseBypassDryBuffer = [&] + { + return buffer.getNumChannels() + <= fxBypassDryBuffer.getNumChannels() + && buffer.getNumSamples() + <= fxBypassDryBuffer.getNumSamples(); + }; + + const auto resolveBypassDelayStorage = + [&] (bool isInputFXChain, + int fxIndex) -> FXBypassDelayStorage* + { + if (fxIndex < 0 + || static_cast<size_t>(fxIndex) + >= maxRealtimeFXContinuitySlots) + return nullptr; + + const auto* snapshot = isInputFXChain + ? inputFXBypassDelaySnapshot + : trackFXBypassDelaySnapshot; + if (snapshot == nullptr) + return nullptr; + return (*snapshot)[static_cast<size_t>(fxIndex)].get(); + }; + + const auto prepareLatencyAlignedDry = + [&] (FXBypassDelayStorage* storage, + const juce::AudioProcessor& processor, + bool writeDryOutput, + bool advanceHistory) + { + const int channels = buffer.getNumChannels(); + const int samples = buffer.getNumSamples(); + if (storage == nullptr + || storage->processor != &processor + || storage->ring.getNumChannels() < channels + || storage->ring.getNumSamples() <= 0) + { + if (writeDryOutput) + { + for (int channel = 0; + channel < channels; + ++channel) + { + fxBypassDryBuffer.copyFrom( + channel, + 0, + buffer, + channel, + 0, + samples); + } + } + return false; + } + + const int capacity = + storage->ring.getNumSamples(); + const int reportedLatency = juce::jlimit( + 0, + capacity - 1, + storage->publishedLatency.load( + std::memory_order_acquire)); + if (! storage->latencyInitialised) + { + storage->currentLatency = reportedLatency; + storage->targetLatency = reportedLatency; + storage->latencyRampRemaining = 0; + storage->latencyRampLength = 0; + storage->latencyInitialised = true; + } + else if (reportedLatency + != storage->targetLatency) + { + storage->targetLatency = reportedLatency; + if (writeDryOutput + && storage->currentLatency + != storage->targetLatency) + { + storage->latencyRampLength = + fxContinuityRampSamples; + storage->latencyRampRemaining = + fxContinuityRampSamples; + } + else + { + storage->currentLatency = + storage->targetLatency; + storage->latencyRampRemaining = 0; + storage->latencyRampLength = 0; + } + } + else if (! writeDryOutput + && storage->latencyRampRemaining > 0) + { + // No dry signal is currently audible, so adopt a latency update + // immediately while continuing to keep the history ring warm. + storage->currentLatency = + storage->targetLatency; + storage->latencyRampRemaining = 0; + storage->latencyRampLength = 0; + } + + auto writePosition = storage->writePosition; + if (! advanceHistory) + { + writePosition -= samples % capacity; + if (writePosition < 0) + writePosition += capacity; + } + for (int sample = 0; sample < samples; ++sample) + { + if (advanceHistory) + { + for (int channel = 0; + channel < channels; + ++channel) + { + storage->ring.setSample( + channel, + writePosition, + buffer.getSample(channel, sample)); + } + } + + if (writeDryOutput) + { + int currentRead = + writePosition + - storage->currentLatency; + if (currentRead < 0) + currentRead += capacity; + int targetRead = + writePosition + - storage->targetLatency; + if (targetRead < 0) + targetRead += capacity; + const float latencyMix = + storage->latencyRampRemaining > 0 + && storage->latencyRampLength > 0 + ? 1.0f + - static_cast<float>( + storage + ->latencyRampRemaining) + / static_cast<float>( + storage + ->latencyRampLength) + : 1.0f; + for (int channel = 0; + channel < channels; + ++channel) + { + const float currentDry = + storage->ring.getSample( + channel, currentRead); + const float targetDry = + storage->ring.getSample( + channel, targetRead); + fxBypassDryBuffer.setSample( + channel, + sample, + currentDry + + (targetDry - currentDry) + * latencyMix); + } + } + + ++writePosition; + if (writePosition >= capacity) + writePosition = 0; + if (writeDryOutput + && storage->latencyRampRemaining > 0) + { + --storage->latencyRampRemaining; + if (storage->latencyRampRemaining == 0) + { + storage->currentLatency = + storage->targetLatency; + storage->latencyRampLength = 0; + } + } + } + if (advanceHistory) + storage->writePosition = writePosition; + return true; + }; + + const auto applyHostBypassCrossfade = + [&] (FXContinuityState& continuity, + bool bypassed) + { + const float target = bypassed ? 0.0f : 1.0f; + const int channels = buffer.getNumChannels(); + const int samples = buffer.getNumSamples(); + auto wetMix = continuity.hostBypassWetMix; + for (int sample = 0; sample < samples; ++sample) + { + wetMix = target < wetMix + ? juce::jmax(target, wetMix - fxBypassRampStep) + : juce::jmin(target, wetMix + fxBypassRampStep); + for (int channel = 0; channel < channels; ++channel) + { + const float dry = + fxBypassDryBuffer.getSample(channel, sample); + const float wet = buffer.getSample(channel, sample); + buffer.setSample( + channel, + sample, + dry + (wet - dry) * wetMix); + } + } + continuity.hostBypassWetMix = wetMix; + }; + + const auto finishFXSlot = + [&] (FXContinuityState* continuity, + bool bypassed, + bool processed, + bool dryInputCaptured) + { + if (continuity == nullptr) + return; + + if (processed && dryInputCaptured) + applyHostBypassCrossfade(*continuity, bypassed); + else if (! processed && bypassed) + { + // A busy processor already leaves the dry input in place. Still + // advance a bypass request so it reaches the zero-CPU steady state. + continuity->hostBypassWetMix = juce::jmax( + 0.0f, + continuity->hostBypassWetMix + - fxBypassRampStep + * static_cast<float>( + buffer.getNumSamples())); + } + + if (processed) + { + if (continuity->skippedLastBlock) + scheduleEndpointCorrection(continuity); + applyEndpointCorrection(continuity); + rememberOutputEndpoint(continuity); + continuity->skippedLastBlock = false; + } + else + { + if (! continuity->skippedLastBlock) + scheduleEndpointCorrection(continuity); + applyEndpointCorrection(continuity); + rememberOutputEndpoint(continuity); + continuity->skippedLastBlock = true; + } + }; + + const auto processFXWithHostBypass = + [&] (juce::AudioProcessor* proc, + bool forceFloat, + bool isInputFXChain, + int fxIndex, + bool bypassed) + { + auto* continuity = resolveFXContinuity( + proc, isInputFXChain, fxIndex, bypassed); + if (continuity == nullptr && bypassed) + return; + + const bool transitioning = + continuity != nullptr + && std::abs( + continuity->hostBypassWetMix + - (bypassed ? 0.0f : 1.0f)) > 1.0e-6f; + auto* bypassDelay = resolveBypassDelayStorage( + isInputFXChain, fxIndex); + const bool canWriteDry = + canUseBypassDryBuffer(); + const bool writeDryOutput = + canWriteDry + && fxIndex >= 0 + && (transitioning || bypassed); + if (fxIndex >= 0) + { + prepareLatencyAlignedDry( + bypassDelay, + *proc, + writeDryOutput, + true); + } + + if (continuity != nullptr + && bypassed + && continuity->hostBypassWetMix <= 0.0f) + { + if (writeDryOutput) + { + for (int channel = 0; + channel < buffer.getNumChannels(); + ++channel) + { + buffer.copyFrom( + channel, + 0, + fxBypassDryBuffer, + channel, + 0, + buffer.getNumSamples()); + } + } + applyEndpointCorrection(continuity); + rememberOutputEndpoint(continuity); + continuity->skippedLastBlock = true; + return; + } + + const bool dryInputCaptured = + transitioning && writeDryOutput; + if (transitioning && ! dryInputCaptured) + { + // The normal realtime layout is bounded by kMaxFXChannels. If a + // hostile/invalid layout exceeds it, retain memory safety and fall + // back to the requested hard state instead of allocating here. + continuity->hostBypassWetMix = + bypassed ? 0.0f : 1.0f; + if (bypassed) + { + rememberOutputEndpoint(continuity); + continuity->skippedLastBlock = true; + return; + } + } + const bool processed = safeProcessFX( + proc, forceFloat, isInputFXChain, fxIndex); + bool fallbackDryAvailable = writeDryOutput; + if (! processed + && ! fallbackDryAvailable + && canWriteDry + && fxIndex >= 0) + { + prepareLatencyAlignedDry( + bypassDelay, + *proc, + true, + false); + fallbackDryAvailable = true; + } + if (! processed && fallbackDryAvailable) + { + realtimeFallbackReuseCount.fetch_add( + 1, std::memory_order_relaxed); + for (int channel = 0; + channel < buffer.getNumChannels(); + ++channel) + { + buffer.copyFrom( + channel, + 0, + fxBypassDryBuffer, + channel, + 0, + buffer.getNumSamples()); + } + } + finishFXSlot( + continuity, + bypassed, + processed, + dryInputCaptured); }; // ===== PRE-FX AUTOMATION ===== const int numSamps = buffer.getNumSamples(); const double processingSampleRate = juce::jmax(1.0, getSampleRate()); + const auto blockPanLaw = + panLaw.load(std::memory_order_acquire); if (automationGainBuffer.getNumChannels() < 8 || automationGainBuffer.getNumSamples() < numSamps) automationGainBuffer.setSize(8, numSamps, false, false, true); const float staticPreFXVolDb = 0.0f; @@ -1297,7 +3476,12 @@ void TrackProcessor::processBlockInternal (juce::AudioBuffer<float>& buffer, juc float leftGain = 1.0f; float rightGain = 1.0f; - computePanLawGains(panLaw, pan, juce::Decibels::decibelsToGain(volDb), leftGain, rightGain); + computePanLawGains( + blockPanLaw, + pan, + juce::Decibels::decibelsToGain(volDb), + leftGain, + rightGain); if (bufferChannels >= 1) buffer.setSample(0, i, buffer.getSample(0, i) * leftGain); @@ -1330,11 +3514,10 @@ void TrackProcessor::processBlockInternal (juce::AudioBuffer<float>& buffer, juc } } - // Channel strip EQ (processed before plugin FX chains) - if (channelStripEQEnabled) - { - channelStripEQ.processBlock(buffer, midiMessages); - } + // Channel strip EQ (processed before plugin FX chains). It stays in the + // callback so its internal dry/wet ramp can make power changes click-free; + // the steady disabled path returns immediately. + channelStripEQ.processBlock(buffer, midiMessages); // Process through input FX chain if (inputFXSnapshot) @@ -1348,8 +3531,13 @@ void TrackProcessor::processBlockInternal (juce::AudioBuffer<float>& buffer, juc const bool forceFloat = inputFXPrecisionOverrideSnapshot != nullptr && inputFXPrecisionOverrideSnapshot->count(pluginIndex) > 0 && inputFXPrecisionOverrideSnapshot->at(pluginIndex); - if (plugin && !bypassed) - safeProcessFX(plugin.get(), forceFloat, true, pluginIndex); + if (plugin) + processFXWithHostBypass( + plugin.get(), + forceFloat, + true, + pluginIndex, + bypassed); } } @@ -1357,7 +3545,12 @@ void TrackProcessor::processBlockInternal (juce::AudioBuffer<float>& buffer, juc // instrument output can be post-processed by normal track FX. if (currentTrackType == TrackType::Instrument && instrumentSnapshot) { - safeProcessFX(instrumentSnapshot.get(), instrumentForceFloat, false, -1); + processFXWithHostBypass( + instrumentSnapshot, + instrumentForceFloat, + false, + -1, + false); } else if (currentTrackType == TrackType::Instrument && !hasTrackBuiltInInstrument) { @@ -1369,11 +3562,12 @@ void TrackProcessor::processBlockInternal (juce::AudioBuffer<float>& buffer, juc { auto* proc = (*trackFXSnapshot)[fxIdx].get(); if (!proc) continue; + bool bypassed = false; if (trackFXBypassSnapshot != nullptr) { auto bypassIt = trackFXBypassSnapshot->find(fxIdx); if (bypassIt != trackFXBypassSnapshot->end() && bypassIt->second) - continue; + bypassed = true; } const bool forceFloat = trackFXPrecisionOverrideSnapshot != nullptr && trackFXPrecisionOverrideSnapshot->count(fxIdx) > 0 @@ -1394,14 +3588,109 @@ void TrackProcessor::processBlockInternal (juce::AudioBuffer<float>& buffer, juc if (hasSidechain) { + auto* continuity = resolveFXContinuity( + proc, false, fxIdx, bypassed); + if (continuity == nullptr && bypassed) + continue; + const bool transitioning = + continuity != nullptr + && std::abs( + continuity->hostBypassWetMix + - (bypassed ? 0.0f : 1.0f)) + > 1.0e-6f; + const bool canWriteDry = + canUseBypassDryBuffer(); + auto* bypassDelay = + resolveBypassDelayStorage(false, fxIdx); + prepareLatencyAlignedDry( + bypassDelay, + *proc, + canWriteDry + && (transitioning || bypassed), + true); + + if (continuity != nullptr + && bypassed + && continuity->hostBypassWetMix <= 0.0f) + { + if (canWriteDry) + { + for (int channel = 0; + channel < buffer.getNumChannels(); + ++channel) + { + buffer.copyFrom( + channel, + 0, + fxBypassDryBuffer, + channel, + 0, + buffer.getNumSamples()); + } + } + applyEndpointCorrection(continuity); + rememberOutputEndpoint(continuity); + continuity->skippedLastBlock = true; + continue; + } + + const bool dryInputCaptured = + transitioning && canWriteDry; + if (transitioning && ! dryInputCaptured) + { + continuity->hostBypassWetMix = + bypassed ? 0.0f : 1.0f; + if (bypassed) + { + rememberOutputEndpoint(continuity); + continuity->skippedLastBlock = true; + continue; + } + } juce::ScopedTryLock pluginProcessLock(proc->getCallbackLock()); if (!pluginProcessLock.isLocked()) { pluginBusySkipCount.fetch_add(1, std::memory_order_relaxed); + if (canWriteDry + && ! (transitioning || bypassed)) + { + prepareLatencyAlignedDry( + bypassDelay, + *proc, + true, + false); + } + if (canWriteDry) + { + realtimeFallbackReuseCount.fetch_add( + 1, std::memory_order_relaxed); + for (int channel = 0; + channel < buffer.getNumChannels(); + ++channel) + { + buffer.copyFrom( + channel, + 0, + fxBypassDryBuffer, + channel, + 0, + buffer.getNumSamples()); + } + } + finishFXSlot( + continuity, + bypassed, + false, + dryInputCaptured); continue; } - applyPluginAutomationForProcessor(proc, false, fxIdx, blockTimeSeconds); + applyPluginAutomationForProcessor( + proc, + false, + fxIdx, + blockTimeSeconds, + pluginAutomationRoutesForBlock); // Sidechain path: expand buffer to include sidechain channels after // the main stereo channels. The plugin's second input bus receives @@ -1511,19 +3800,29 @@ void TrackProcessor::processBlockInternal (juce::AudioBuffer<float>& buffer, juc for (int ch = 0; ch < bufferChannels; ++ch) buffer.copyFrom(ch, 0, pluginBuffer, ch, 0, numSamps2); } + + finishFXSlot( + continuity, + bypassed, + true, + dryInputCaptured); } else { // No sidechain — use normal channel-safe processing - safeProcessFX(proc, forceFloat, false, fxIdx); + processFXWithHostBypass( + proc, + forceFloat, + false, + fxIdx, + bypassed); } } const double trackProcessDurationMs = isARATrack ? (juce::Time::getMillisecondCounterHiRes() - trackProcessStartMs) : 0.0; if (kEnableARADebugDiagnostics && trackProcessDurationMs > 10.0 - && araController != nullptr - && araController->isActive()) + && activeARAControllerForBlock != nullptr) { logToDisk("ARA track envelope slow: trackId=" + araDebugTrackId + " callback=" + juce::String(static_cast<juce::int64>(currentARAProcessDebugInfo.callbackCounter)) @@ -1534,7 +3833,8 @@ void TrackProcessor::processBlockInternal (juce::AudioBuffer<float>& buffer, juc } // ===== DC OFFSET REMOVAL (after FX, before gain) ===== - if (dcOffsetRemoval && bufferChannels >= 1) + if (dcOffsetRemoval.load(std::memory_order_acquire) + && bufferChannels >= 1) { double sr = getSampleRate(); if (sr <= 0) sr = 44100.0; @@ -1653,7 +3953,12 @@ void TrackProcessor::processBlockInternal (juce::AudioBuffer<float>& buffer, juc float volumeGain = juce::Decibels::decibelsToGain(volDB); float lGain = 1.0f; float rGain = 1.0f; - computePanLawGains(panLaw, pan, volumeGain, lGain, rGain); + computePanLawGains( + blockPanLaw, + pan, + volumeGain, + lGain, + rGain); // Apply per-sample gain if (bufferChannels >= 1) @@ -1724,6 +4029,8 @@ void TrackProcessor::processBlockInternal (juce::AudioBuffer<float>& buffer, juc meterSampleCount = 0; } + finishRealtimeFXTailDrain(peak); + } bool TrackProcessor::hasEditor() const @@ -1791,7 +4098,8 @@ bool TrackProcessor::addInputFX(std::unique_ptr<juce::AudioProcessor> plugin, do // Prepare while preserving bus layout (see preparePluginPreservingLayout). preparePluginPreservingLayout(plugin.get(), sr, bs, - resolvePluginPrecisionMode(processingPrecisionMode, false)); + resolvePluginPrecisionMode(processingPrecisionMode, false), + inputChannelCount.load(std::memory_order_acquire)); juce::Logger::writeToLog("TrackProcessor: Added Input FX plugin (" + plugin->getName() + ") prepared at " + juce::String(sr) + "Hz / " + juce::String(bs) + " samples" + @@ -1829,7 +4137,8 @@ bool TrackProcessor::addTrackFX(std::unique_ptr<juce::AudioProcessor> plugin, do // Prepare while preserving bus layout (see preparePluginPreservingLayout). preparePluginPreservingLayout(plugin.get(), sr, bs, - resolvePluginPrecisionMode(processingPrecisionMode, false)); + resolvePluginPrecisionMode(processingPrecisionMode, false), + inputChannelCount.load(std::memory_order_acquire)); juce::Logger::writeToLog("TrackProcessor: Added Track FX plugin (" + plugin->getName() + ") prepared at " + juce::String(sr) + "Hz / " + juce::String(bs) + " samples" + @@ -1863,6 +4172,7 @@ void TrackProcessor::removeInputFX(int index) } inputFXForceFloatOverrides = std::move(updatedOverrides); inputFXBypassedState = std::move(updatedBypass); + remapPluginAutomationRoutesForRemoval(true, index); publishRealtimeStateSnapshots(); juce::Logger::writeToLog("TrackProcessor: Removed Input FX at index " + juce::String(index)); } @@ -1884,7 +4194,16 @@ void TrackProcessor::removeTrackFX(int index) shutdownARA(); } else if (index < araFXIndex) + { --araFXIndex; + if (araFXIndexForRealtime.load( + std::memory_order_acquire) >= 0) + { + araFXIndexForRealtime.store( + araFXIndex, + std::memory_order_release); + } + } trackFXPlugins.erase(trackFXPlugins.begin() + index); std::map<int, bool> updatedOverrides; @@ -1903,6 +4222,7 @@ void TrackProcessor::removeTrackFX(int index) } trackFXForceFloatOverrides = std::move(updatedOverrides); trackFXBypassedState = std::move(updatedBypass); + remapPluginAutomationRoutesForRemoval(false, index); publishRealtimeStateSnapshots(); juce::Logger::writeToLog("TrackProcessor: Removed Track FX at index " + juce::String(index)); } @@ -1913,6 +4233,23 @@ void TrackProcessor::bypassInputFX(int index, bool bypassed) const juce::ScopedLock processorCallbackGuard(getCallbackLock()); if (index >= 0 && index < (int)inputFXPlugins.size()) { + const bool wasBypassed = + inputFXBypassedState.count(index) > 0 + && inputFXBypassedState.at(index); + if (wasBypassed && ! bypassed) + { + if (auto& processor = + inputFXPlugins[static_cast<size_t>(index)]) + { + // reset() is intentionally performed on the control thread + // under the processor lock. The callback uses a try-lock, so + // an arbitrary hosted plugin can never block the audio thread + // or resume with a frozen delay/detector endpoint. + const juce::ScopedLock pluginGuard( + processor->getCallbackLock()); + processor->reset(); + } + } if (bypassed) inputFXBypassedState[index] = true; else @@ -1927,6 +4264,19 @@ void TrackProcessor::bypassTrackFX(int index, bool bypassed) const juce::ScopedLock processorCallbackGuard(getCallbackLock()); if (index >= 0 && index < (int)trackFXPlugins.size()) { + const bool wasBypassed = + trackFXBypassedState.count(index) > 0 + && trackFXBypassedState.at(index); + if (wasBypassed && ! bypassed) + { + if (auto& processor = + trackFXPlugins[static_cast<size_t>(index)]) + { + const juce::ScopedLock pluginGuard( + processor->getCallbackLock()); + processor->reset(); + } + } if (bypassed) trackFXBypassedState[index] = true; else @@ -1948,8 +4298,9 @@ int TrackProcessor::getNumTrackFX() const int TrackProcessor::getNumSends() const { - auto snapshot = std::atomic_load_explicit(&realtimeSendSnapshot, std::memory_order_acquire); - return snapshot != nullptr ? static_cast<int>(snapshot->size()) : 0; + const auto graph = std::atomic_load_explicit( + &realtimeGraphSnapshot, std::memory_order_acquire); + return graph != nullptr ? static_cast<int>(graph->sends.size()) : 0; } juce::AudioProcessor* TrackProcessor::getInputFXProcessor(int index) @@ -1996,32 +4347,58 @@ std::shared_ptr<juce::AudioProcessor> TrackProcessor::getTrackFXProcessorShared( std::shared_ptr<const std::vector<std::shared_ptr<juce::AudioProcessor>>> TrackProcessor::getInputFXSnapshot() const { - return std::atomic_load_explicit(&realtimeInputFXSnapshot, std::memory_order_acquire); + const auto graph = std::atomic_load_explicit( + &realtimeGraphSnapshot, std::memory_order_acquire); + return graph != nullptr + ? std::shared_ptr<const ProcessorSnapshot>(graph, &graph->inputFX) + : std::shared_ptr<const ProcessorSnapshot>(); } std::shared_ptr<const std::vector<std::shared_ptr<juce::AudioProcessor>>> TrackProcessor::getTrackFXSnapshot() const { - return std::atomic_load_explicit(&realtimeTrackFXSnapshot, std::memory_order_acquire); + const auto graph = std::atomic_load_explicit( + &realtimeGraphSnapshot, std::memory_order_acquire); + return graph != nullptr + ? std::shared_ptr<const ProcessorSnapshot>(graph, &graph->trackFX) + : std::shared_ptr<const ProcessorSnapshot>(); } std::shared_ptr<const std::map<int, bool>> TrackProcessor::getInputFXBypassSnapshot() const { - return std::atomic_load_explicit(&realtimeInputFXBypassSnapshot, std::memory_order_acquire); + const auto graph = std::atomic_load_explicit( + &realtimeGraphSnapshot, std::memory_order_acquire); + return graph != nullptr + ? std::shared_ptr<const BypassSnapshot>(graph, &graph->inputFXBypass) + : std::shared_ptr<const BypassSnapshot>(); } std::shared_ptr<const std::map<int, bool>> TrackProcessor::getTrackFXBypassSnapshot() const { - return std::atomic_load_explicit(&realtimeTrackFXBypassSnapshot, std::memory_order_acquire); + const auto graph = std::atomic_load_explicit( + &realtimeGraphSnapshot, std::memory_order_acquire); + return graph != nullptr + ? std::shared_ptr<const BypassSnapshot>(graph, &graph->trackFXBypass) + : std::shared_ptr<const BypassSnapshot>(); } std::shared_ptr<const std::map<int, bool>> TrackProcessor::getInputFXPrecisionOverrideSnapshot() const { - return std::atomic_load_explicit(&realtimeInputFXPrecisionOverrideSnapshot, std::memory_order_acquire); + const auto graph = std::atomic_load_explicit( + &realtimeGraphSnapshot, std::memory_order_acquire); + return graph != nullptr + ? std::shared_ptr<const PrecisionOverrideSnapshot>( + graph, &graph->inputFXPrecisionOverrides) + : std::shared_ptr<const PrecisionOverrideSnapshot>(); } std::shared_ptr<const std::map<int, bool>> TrackProcessor::getTrackFXPrecisionOverrideSnapshot() const { - return std::atomic_load_explicit(&realtimeTrackFXPrecisionOverrideSnapshot, std::memory_order_acquire); + const auto graph = std::atomic_load_explicit( + &realtimeGraphSnapshot, std::memory_order_acquire); + return graph != nullptr + ? std::shared_ptr<const PrecisionOverrideSnapshot>( + graph, &graph->trackFXPrecisionOverrides) + : std::shared_ptr<const PrecisionOverrideSnapshot>(); } bool TrackProcessor::reorderInputFX(int fromIndex, int toIndex) @@ -2061,6 +4438,7 @@ bool TrackProcessor::reorderInputFX(int fromIndex, int toIndex) } inputFXForceFloatOverrides = std::move(updatedOverrides); inputFXBypassedState = std::move(updatedBypass); + remapPluginAutomationRoutesForReorder(true, fromIndex, toIndex); publishRealtimeStateSnapshots(); juce::Logger::writeToLog("TrackProcessor: Reordered input FX from " + @@ -2105,12 +4483,20 @@ bool TrackProcessor::reorderTrackFX(int fromIndex, int toIndex) } trackFXForceFloatOverrides = std::move(updatedOverrides); trackFXBypassedState = std::move(updatedBypass); + remapPluginAutomationRoutesForReorder(false, fromIndex, toIndex); if (araFXIndex == fromIndex) araFXIndex = toIndex; else if (fromIndex < toIndex && araFXIndex > fromIndex && araFXIndex <= toIndex) --araFXIndex; else if (fromIndex > toIndex && araFXIndex >= toIndex && araFXIndex < fromIndex) ++araFXIndex; + if (araFXIndexForRealtime.load( + std::memory_order_acquire) >= 0) + { + araFXIndexForRealtime.store( + araFXIndex, + std::memory_order_release); + } publishRealtimeStateSnapshots(); juce::Logger::writeToLog("TrackProcessor: Reordered track FX from " + @@ -2139,11 +4525,12 @@ void TrackProcessor::clearSidechainSource(int pluginIndex) juce::String TrackProcessor::getSidechainSource(int pluginIndex) const { - auto snapshot = std::atomic_load_explicit(&realtimeSidechainSnapshot, std::memory_order_acquire); - if (snapshot != nullptr) + const auto graph = std::atomic_load_explicit( + &realtimeGraphSnapshot, std::memory_order_acquire); + if (graph != nullptr) { - auto it = snapshot->find(pluginIndex); - if (it != snapshot->end()) + const auto it = graph->sidechainSources.find(pluginIndex); + if (it != graph->sidechainSources.end()) return it->second; } return {}; @@ -2156,8 +4543,9 @@ void TrackProcessor::setSidechainBuffer(const juce::AudioBuffer<float>* buffer) bool TrackProcessor::hasAnySidechainSources() const { - auto snapshot = std::atomic_load_explicit(&realtimeSidechainSnapshot, std::memory_order_acquire); - return snapshot != nullptr && !snapshot->empty(); + const auto graph = std::atomic_load_explicit( + &realtimeGraphSnapshot, std::memory_order_acquire); + return graph != nullptr && !graph->sidechainSources.empty(); } //============================================================================== @@ -2225,41 +4613,66 @@ void TrackProcessor::setSendPreFader(int sendIndex, bool preFader) juce::String TrackProcessor::getSendDestination(int sendIndex) const { - auto snapshot = std::atomic_load_explicit(&realtimeSendSnapshot, std::memory_order_acquire); - if (snapshot != nullptr && sendIndex >= 0 && sendIndex < (int)snapshot->size()) - return (*snapshot)[sendIndex].destTrackId; + const auto graph = std::atomic_load_explicit( + &realtimeGraphSnapshot, std::memory_order_acquire); + if (graph != nullptr + && sendIndex >= 0 + && sendIndex < static_cast<int>(graph->sends.size())) + { + return graph->sends[static_cast<size_t>(sendIndex)].destTrackId; + } return {}; } float TrackProcessor::getSendLevel(int sendIndex) const { - auto snapshot = std::atomic_load_explicit(&realtimeSendSnapshot, std::memory_order_acquire); - if (snapshot != nullptr && sendIndex >= 0 && sendIndex < (int)snapshot->size()) - return (*snapshot)[sendIndex].level; + const auto graph = std::atomic_load_explicit( + &realtimeGraphSnapshot, std::memory_order_acquire); + if (graph != nullptr + && sendIndex >= 0 + && sendIndex < static_cast<int>(graph->sends.size())) + { + return graph->sends[static_cast<size_t>(sendIndex)].level; + } return 0.0f; } float TrackProcessor::getSendPan(int sendIndex) const { - auto snapshot = std::atomic_load_explicit(&realtimeSendSnapshot, std::memory_order_acquire); - if (snapshot != nullptr && sendIndex >= 0 && sendIndex < (int)snapshot->size()) - return (*snapshot)[sendIndex].pan; + const auto graph = std::atomic_load_explicit( + &realtimeGraphSnapshot, std::memory_order_acquire); + if (graph != nullptr + && sendIndex >= 0 + && sendIndex < static_cast<int>(graph->sends.size())) + { + return graph->sends[static_cast<size_t>(sendIndex)].pan; + } return 0.0f; } bool TrackProcessor::getSendEnabled(int sendIndex) const { - auto snapshot = std::atomic_load_explicit(&realtimeSendSnapshot, std::memory_order_acquire); - if (snapshot != nullptr && sendIndex >= 0 && sendIndex < (int)snapshot->size()) - return (*snapshot)[sendIndex].enabled; + const auto graph = std::atomic_load_explicit( + &realtimeGraphSnapshot, std::memory_order_acquire); + if (graph != nullptr + && sendIndex >= 0 + && sendIndex < static_cast<int>(graph->sends.size())) + { + return graph->sends[static_cast<size_t>(sendIndex)].enabled; + } return false; } bool TrackProcessor::getSendPreFader(int sendIndex) const { - auto snapshot = std::atomic_load_explicit(&realtimeSendSnapshot, std::memory_order_acquire); - if (snapshot != nullptr && sendIndex >= 0 && sendIndex < (int)snapshot->size()) - return (*snapshot)[sendIndex].preFader; + const auto graph = std::atomic_load_explicit( + &realtimeGraphSnapshot, std::memory_order_acquire); + if (graph != nullptr + && sendIndex >= 0 + && sendIndex < static_cast<int>(graph->sends.size())) + { + return graph->sends[static_cast<size_t>(sendIndex)].preFader; + } return false; } @@ -2267,9 +4680,15 @@ void TrackProcessor::fillSendBuffer(int sendIndex, const juce::AudioBuffer<float const juce::AudioBuffer<float>& postFaderBuf, juce::AudioBuffer<float>& destBuffer, int numSamples) const { - auto snapshot = std::atomic_load_explicit(&realtimeSendSnapshot, std::memory_order_acquire); - if (snapshot == nullptr || sendIndex < 0 || sendIndex >= (int)snapshot->size()) return; - const auto& send = (*snapshot)[sendIndex]; + const auto graph = std::atomic_load_explicit( + &realtimeGraphSnapshot, std::memory_order_acquire); + if (graph == nullptr + || sendIndex < 0 + || sendIndex >= static_cast<int>(graph->sends.size())) + { + return; + } + const auto& send = graph->sends[static_cast<size_t>(sendIndex)]; if (!send.enabled || send.level <= 0.0f) return; const auto& srcBuf = send.preFader ? preFaderBuf : postFaderBuf; @@ -2334,6 +4753,43 @@ void TrackProcessor::clearInstrument() juce::Logger::writeToLog("TrackProcessor: Instrument plugin removed"); } +bool TrackProcessor::isUsingFallbackInstrument() const +{ + const auto graph = std::atomic_load_explicit( + &realtimeGraphSnapshot, std::memory_order_acquire); + return trackType.load(std::memory_order_acquire) == TrackType::Instrument + && (graph == nullptr || graph->instrument == nullptr); +} + +void TrackProcessor::publishFallbackSamplerSample( + std::shared_ptr<const FallbackSamplerSample> sample) +{ + const juce::ScopedLock publicationGuard( + realtimeAuxPublicationLock); + reclaimRetiredRealtimeAuxOwners(); + const auto previous = std::atomic_load_explicit( + &fallbackSamplerSample, + std::memory_order_acquire); + { + const juce::ScopedLock retirementGuard( + realtimeAuxRetirementLock); + if (previous != nullptr + && previous.get() != sample.get()) + { + retiredRealtimeAuxOwners.push_back( + std::static_pointer_cast<const void>( + previous)); + } + std::atomic_store_explicit( + &fallbackSamplerSample, + sample, + std::memory_order_release); + fallbackSamplerSampleForAudio.store( + sample.get(), + std::memory_order_seq_cst); + } +} + bool TrackProcessor::loadFallbackSamplerSample(const juce::String& filePath, int rootNote) { const juce::File sampleFile(filePath); @@ -2482,9 +4938,9 @@ bool TrackProcessor::loadFallbackSamplerSample(const juce::String& filePath, int } const juce::ScopedLock processorCallbackGuard(getCallbackLock()); - std::atomic_store_explicit(&fallbackSamplerSample, - std::static_pointer_cast<const FallbackSamplerSample>(sample), - std::memory_order_release); + publishFallbackSamplerSample( + std::static_pointer_cast<const FallbackSamplerSample>( + sample)); clearFallbackInstrumentState(); fallbackInstrumentResetRequested.store(true, std::memory_order_release); juce::Logger::writeToLog("TrackProcessor: Loaded fallback SoundFont sample " @@ -2515,9 +4971,9 @@ bool TrackProcessor::loadFallbackSamplerSample(const juce::String& filePath, int return false; const juce::ScopedLock processorCallbackGuard(getCallbackLock()); - std::atomic_store_explicit(&fallbackSamplerSample, - std::static_pointer_cast<const FallbackSamplerSample>(sample), - std::memory_order_release); + publishFallbackSamplerSample( + std::static_pointer_cast<const FallbackSamplerSample>( + sample)); clearFallbackInstrumentState(); fallbackInstrumentResetRequested.store(true, std::memory_order_release); juce::Logger::writeToLog("TrackProcessor: Loaded fallback sampler sample " + sampleFile.getFullPathName()); @@ -2527,9 +4983,7 @@ bool TrackProcessor::loadFallbackSamplerSample(const juce::String& filePath, int void TrackProcessor::clearFallbackSamplerSample() { const juce::ScopedLock processorCallbackGuard(getCallbackLock()); - std::atomic_store_explicit(&fallbackSamplerSample, - std::shared_ptr<const FallbackSamplerSample>(), - std::memory_order_release); + publishFallbackSamplerSample(nullptr); clearFallbackInstrumentState(); fallbackInstrumentResetRequested.store(true, std::memory_order_release); } @@ -2686,7 +5140,9 @@ void TrackProcessor::handleFallbackInstrumentMidi(const juce::MidiMessage& messa if (message.isNoteOn()) { - auto samplerSample = std::atomic_load_explicit(&fallbackSamplerSample, std::memory_order_acquire); + const auto* const samplerSample = + fallbackSamplerSampleForAudio.load( + std::memory_order_seq_cst); const int note = juce::jlimit(0, 127, message.getNoteNumber()); fallbackInstrumentNoteActive[static_cast<size_t>(channelIndex)][static_cast<size_t>(note)] = true; fallbackInstrumentNoteReleasing[static_cast<size_t>(channelIndex)][static_cast<size_t>(note)] = false; @@ -2764,7 +5220,9 @@ void TrackProcessor::renderFallbackInstrument(juce::AudioBuffer<float>& buffer, clearFallbackInstrumentState(); const int bufferChannels = buffer.getNumChannels(); - auto samplerSample = std::atomic_load_explicit(&fallbackSamplerSample, std::memory_order_acquire); + const auto* const samplerSample = + fallbackSamplerSampleForAudio.load( + std::memory_order_seq_cst); const int instrumentMode = juce::jlimit(0, 2, static_cast<int>(std::round(fallbackInstrumentMode.load(std::memory_order_relaxed)))); const bool useSampler = instrumentMode != 2 && samplerSample != nullptr @@ -3028,7 +5486,8 @@ bool TrackProcessor::enqueueMidiMessage(const juce::MidiMessage& message, int sa void TrackProcessor::setScheduledMIDIClips(std::vector<ScheduledMIDIClip> clips) { auto sharedClips = std::make_shared<const std::vector<ScheduledMIDIClip>>(std::move(clips)); - std::atomic_store_explicit(&scheduledMIDIClips, sharedClips, std::memory_order_release); + publishScheduledMIDIClips( + std::move(sharedClips)); requestMIDIChase(); } @@ -3103,11 +5562,11 @@ std::vector<TrackProcessor::MIDINoteActivity> TrackProcessor::getRecentMIDINoteA } void TrackProcessor::appendScheduledMIDIToBuffer(juce::MidiBuffer& destination, + const std::vector<ScheduledMIDIClip>* const clips, double blockTimeSeconds, int numSamples, double sampleRate) const { - auto clips = std::atomic_load_explicit(&scheduledMIDIClips, std::memory_order_acquire); - if (!clips || clips->empty() || sampleRate <= 0.0) + if (clips == nullptr || clips->empty() || sampleRate <= 0.0) return; const double blockEndTimeSeconds = blockTimeSeconds + (static_cast<double>(numSamples) / sampleRate); @@ -3135,11 +5594,11 @@ void TrackProcessor::appendScheduledMIDIToBuffer(juce::MidiBuffer& destination, } void TrackProcessor::appendScheduledMIDIChaseToBuffer(juce::MidiBuffer& destination, + const std::vector<ScheduledMIDIClip>* const clips, double blockTimeSeconds, double sampleRate) const { - auto clips = std::atomic_load_explicit(&scheduledMIDIClips, std::memory_order_acquire); - if (!clips || clips->empty() || sampleRate <= 0.0) + if (clips == nullptr || clips->empty() || sampleRate <= 0.0) return; std::array<std::array<const ScheduledMIDIEvent*, 128>, 16> activeNoteStarts {}; @@ -3255,7 +5714,8 @@ void TrackProcessor::appendQueuedMIDIToBuffer(juce::MidiBuffer& destination, int } void TrackProcessor::applyMIDIAutomationToBuffer(juce::MidiBuffer& destination, double blockTimeSeconds, - int numSamples, double sampleRate) + int numSamples, double sampleRate, + const MIDICCAutomationRouteSnapshot* ccRoutes) { if (numSamples <= 0 || sampleRate <= 0.0) return; @@ -3266,8 +5726,9 @@ void TrackProcessor::applyMIDIAutomationToBuffer(juce::MidiBuffer& destination, && midiPitchBendAutomation.getNumPoints() > 0; const bool channelPressureActive = shouldApplyAutomation(midiChannelPressureAutomation) && midiChannelPressureAutomation.getNumPoints() > 0; - auto ccSnapshot = std::atomic_load_explicit(&midiCCAutomationSnapshot, std::memory_order_acquire); - const bool hasCCRoutedAutomation = ccSnapshot != nullptr && !ccSnapshot->empty(); + const bool hasCCRoutedAutomation = + ccRoutes != nullptr + && ! ccRoutes->empty(); if (!velocityActive && !pitchBendActive && !channelPressureActive && !hasCCRoutedAutomation) return; @@ -3296,7 +5757,11 @@ void TrackProcessor::applyMIDIAutomationToBuffer(juce::MidiBuffer& destination, auto addForConfiguredChannels = [this, &transformed] (auto createMessage) { - const int configuredChannel = juce::jlimit(0, 16, midiChannel); + const int configuredChannel = juce::jlimit( + 0, + 16, + midiChannel.load( + std::memory_order_acquire)); if (configuredChannel > 0) { transformed.addEvent(createMessage(configuredChannel), 0); @@ -3320,9 +5785,9 @@ void TrackProcessor::applyMIDIAutomationToBuffer(juce::MidiBuffer& destination, addForConfiguredChannels([pressure] (int channel) { return juce::MidiMessage::channelPressureChange(channel, pressure); }); } - if (ccSnapshot) + if (hasCCRoutedAutomation) { - for (const auto& route : *ccSnapshot) + for (const auto& route : *ccRoutes) { if (!route || !route->automation || route->controller < 0 || route->controller > 127) continue; @@ -3343,7 +5808,12 @@ void TrackProcessor::applyMIDIAutomationToBuffer(juce::MidiBuffer& destination, bool TrackProcessor::hasQueuedMIDI() const { - return midiQueueReadIndex.load(std::memory_order_acquire) != midiQueueWriteIndex.load(std::memory_order_acquire); + return allNotesOffRequested.load( + std::memory_order_acquire) + || midiQueueReadIndex.load( + std::memory_order_acquire) + != midiQueueWriteIndex.load( + std::memory_order_acquire); } bool TrackProcessor::hasScheduledMIDIClips() const @@ -3376,10 +5846,13 @@ int TrackProcessor::getScheduledMIDIEventCount() const return count; } -bool TrackProcessor::hasScheduledMIDIInBlock(double blockTimeSeconds, int numSamples, double sampleRate) const +bool TrackProcessor::hasScheduledMIDIInBlock( + double blockTimeSeconds, + int numSamples, + double sampleRate, + const std::vector<ScheduledMIDIClip>* const clips) const { - auto clips = std::atomic_load_explicit(&scheduledMIDIClips, std::memory_order_acquire); - if (!clips || clips->empty() || sampleRate <= 0.0) + if (clips == nullptr || clips->empty() || sampleRate <= 0.0) return false; const double blockEndTimeSeconds = blockTimeSeconds + (static_cast<double>(numSamples) / sampleRate); @@ -3409,15 +5882,100 @@ void TrackProcessor::buildMidiBuffer(juce::MidiBuffer& destination, double block destination.clear(); appendQueuedMIDIToBuffer(destination, numSamples); - - if (playing) + if (allNotesOffRequested.exchange( + false, std::memory_order_acq_rel)) { - if (scheduledMIDIChaseRequested.exchange(false, std::memory_order_acq_rel)) - appendScheduledMIDIChaseToBuffer(destination, blockTimeSeconds, sampleRate); - appendScheduledMIDIToBuffer(destination, blockTimeSeconds, numSamples, sampleRate); + for (size_t channel = 0; + channel < activeMIDINotes.size(); + ++channel) + { + for (size_t note = 0; + note < activeMIDINotes[channel].size(); + ++note) + { + if (! activeMIDINotes[channel][note]) + continue; + + destination.addEvent( + juce::MidiMessage::noteOff( + static_cast<int>(channel) + 1, + static_cast<int>(note)), + 0); + activeMIDINotes[channel][note] = + false; + } + + const int midiChannelNumber = + static_cast<int>(channel) + 1; + destination.addEvent( + juce::MidiMessage::allNotesOff( + midiChannelNumber), + 0); + destination.addEvent( + juce::MidiMessage::controllerEvent( + midiChannelNumber, 64, 0), + 0); + destination.addEvent( + juce::MidiMessage::controllerEvent( + midiChannelNumber, 120, 0), + 0); + destination.addEvent( + juce::MidiMessage::controllerEvent( + midiChannelNumber, 121, 0), + 0); + destination.addEvent( + juce::MidiMessage::controllerEvent( + midiChannelNumber, 123, 0), + 0); + destination.addEvent( + juce::MidiMessage::pitchWheel( + midiChannelNumber, 8192), + 0); + } } - applyMIDIAutomationToBuffer(destination, blockTimeSeconds, numSamples, sampleRate); + if (playing + && hasScheduledMIDIClipsForAudio.load( + std::memory_order_acquire)) + { + const ScopedTrackRealtimeReader scheduledMIDIReadGuard( + scheduledMIDIAudioReaders); + const auto* const scheduledClips = + scheduledMIDIClipsForAudio.load( + std::memory_order_seq_cst); + if (scheduledMIDIChaseRequested.exchange(false, std::memory_order_acq_rel)) + { + appendScheduledMIDIChaseToBuffer( + destination, + scheduledClips, + blockTimeSeconds, + sampleRate); + } + appendScheduledMIDIToBuffer( + destination, + scheduledClips, + blockTimeSeconds, + numSamples, + sampleRate); + } + + const bool hasMIDIAutomationRoutesForBlock = + hasPublishedMIDICCAutomationRoutes.load( + std::memory_order_acquire); + const ScopedTrackRealtimeReader midiAutomationReadGuard( + realtimeAuxAudioReaders, + hasMIDIAutomationRoutesForBlock); + const auto* const midiAutomationRoutesForBlock = + hasMIDIAutomationRoutesForBlock + ? midiCCAutomationSnapshotForAudio.load( + std::memory_order_seq_cst) + : nullptr; + applyMIDIAutomationToBuffer( + destination, + blockTimeSeconds, + numSamples, + sampleRate, + midiAutomationRoutesForBlock); lastBuiltMidiEventCount.store(destination.getNumEvents(), std::memory_order_relaxed); int prevMax = maxBuiltMidiEventCount.load(std::memory_order_relaxed); @@ -3434,14 +5992,33 @@ void TrackProcessor::buildMidiBuffer(juce::MidiBuffer& destination, double block bool TrackProcessor::needsProcessing(double blockTimeSeconds, int numSamples, double sampleRate, bool playing) const { + if (realtimeFXTailActive.load(std::memory_order_acquire) + || realtimeFXTailResetPending.load(std::memory_order_acquire)) + { + return true; + } + + const ScopedTrackRealtimeReader graphReadGuard( + realtimeGraphAudioReaders); + const auto* const graph = + realtimeGraphSnapshotForAudio.load( + std::memory_order_seq_cst); + const auto* const trackFXSnapshot = + graph != nullptr ? &graph->trackFX : nullptr; + const auto* const inputFXSnapshot = + graph != nullptr ? &graph->inputFX : nullptr; + + if (hasInternalAuditionSourceActive(trackFXSnapshot) + || hasInternalAuditionSourceActive(inputFXSnapshot)) + return true; + // Instrument tracks must always be processed so they can respond to // live MIDI input and produce sustain / reverb tails after note-off. if (trackType.load(std::memory_order_acquire) == TrackType::Instrument) { - if (std::atomic_load_explicit(&realtimeInstrumentSnapshot, std::memory_order_acquire) != nullptr) + if (graph != nullptr && graph->instrument != nullptr) return true; - auto trackFXSnapshot = std::atomic_load_explicit(&realtimeTrackFXSnapshot, std::memory_order_acquire); if (trackFXSnapshot) { for (const auto& plugin : *trackFXSnapshot) @@ -3459,11 +6036,31 @@ bool TrackProcessor::needsProcessing(double blockTimeSeconds, int numSamples, if (hasQueuedMIDI()) return true; - if (playing && scheduledMIDIChaseRequested.load(std::memory_order_acquire) && hasScheduledMIDIClips()) - return true; + if (playing + && hasScheduledMIDIClipsForAudio.load( + std::memory_order_acquire)) + { + const ScopedTrackRealtimeReader scheduledMIDIReadGuard( + scheduledMIDIAudioReaders); + const auto* const scheduledClips = + scheduledMIDIClipsForAudio.load( + std::memory_order_seq_cst); + if (scheduledClips != nullptr + && scheduledMIDIChaseRequested.load( + std::memory_order_acquire)) + { + return true; + } - if (playing && hasScheduledMIDIInBlock(blockTimeSeconds, numSamples, sampleRate)) - return true; + if (hasScheduledMIDIInBlock( + blockTimeSeconds, + numSamples, + sampleRate, + scheduledClips)) + { + return true; + } + } if (playing && hasMIDIAutomation()) return true; @@ -3476,36 +6073,20 @@ void TrackProcessor::queueAllNotesOff(bool requestChase) if (requestChase) requestMIDIChase(); fallbackInstrumentResetRequested.store(true, std::memory_order_release); - for (size_t channel = 0; channel < activeMIDINotes.size(); ++channel) - { - for (size_t note = 0; note < activeMIDINotes[channel].size(); ++note) - { - if (!activeMIDINotes[channel][note]) - continue; - - enqueueMidiMessage(juce::MidiMessage::noteOff(static_cast<int>(channel) + 1, - static_cast<int>(note))); - activeMIDINotes[channel][note] = false; - } - - enqueueMidiMessage(juce::MidiMessage::allNotesOff(static_cast<int>(channel) + 1)); - enqueueMidiMessage(juce::MidiMessage::controllerEvent(static_cast<int>(channel) + 1, 64, 0)); - enqueueMidiMessage(juce::MidiMessage::controllerEvent(static_cast<int>(channel) + 1, 120, 0)); - enqueueMidiMessage(juce::MidiMessage::controllerEvent(static_cast<int>(channel) + 1, 121, 0)); - enqueueMidiMessage(juce::MidiMessage::controllerEvent(static_cast<int>(channel) + 1, 123, 0)); - enqueueMidiMessage(juce::MidiMessage::pitchWheel(static_cast<int>(channel) + 1, 8192)); - } + allNotesOffRequested.store( + true, std::memory_order_release); } std::vector<juce::String> TrackProcessor::getSidechainSourceSnapshot() const { - auto snapshot = std::atomic_load_explicit(&realtimeSidechainSnapshot, std::memory_order_acquire); + const auto graph = std::atomic_load_explicit( + &realtimeGraphSnapshot, std::memory_order_acquire); std::vector<juce::String> sourceIds; - if (snapshot == nullptr) + if (graph == nullptr) return sourceIds; - sourceIds.reserve(snapshot->size()); - for (const auto& entry : *snapshot) + sourceIds.reserve(graph->sidechainSources.size()); + for (const auto& entry : graph->sidechainSources) { if (entry.second.isNotEmpty()) sourceIds.push_back(entry.second); @@ -3515,18 +6096,26 @@ std::vector<juce::String> TrackProcessor::getSidechainSourceSnapshot() const std::vector<TrackProcessor::RealtimeSendInfo> TrackProcessor::getRealtimeSendSnapshot() const { - auto snapshotData = std::atomic_load_explicit(&realtimeSendSnapshot, std::memory_order_acquire); + const auto graph = std::atomic_load_explicit( + &realtimeGraphSnapshot, std::memory_order_acquire); std::vector<RealtimeSendInfo> snapshot; - if (snapshotData == nullptr) + if (graph == nullptr) return snapshot; - snapshot.reserve(snapshotData->size()); - for (const auto& send : *snapshotData) + snapshot.reserve(graph->sends.size()); + for (const auto& send : graph->sends) { RealtimeSendInfo info; info.destTrackId = send.destTrackId; info.level = send.level; info.pan = send.pan; + const float phaseMultiplier = send.phaseInvert ? -1.0f : 1.0f; + const float panAngle = + (send.pan + 1.0f) * juce::MathConstants<float>::pi / 4.0f; + info.leftGain = + std::cos(panAngle) * send.level * phaseMultiplier; + info.rightGain = + std::sin(panAngle) * send.level * phaseMultiplier; info.enabled = send.enabled; info.preFader = send.preFader; info.phaseInvert = send.phaseInvert; @@ -3547,7 +6136,8 @@ void TrackProcessor::setInputFXPrecisionOverride(int index, bool forceFloat) double sr = getSampleRate() > 0 ? getSampleRate() : 44100.0; int bs = getSafeHostedPluginBlockSize(getBlockSize()); preparePluginPreservingLayout(plugin, sr, bs, - resolvePluginPrecisionMode(processingPrecisionMode, forceFloat)); + resolvePluginPrecisionMode(processingPrecisionMode, forceFloat), + inputChannelCount.load(std::memory_order_acquire)); } publishRealtimeStateSnapshots(); } @@ -3564,7 +6154,8 @@ void TrackProcessor::setTrackFXPrecisionOverride(int index, bool forceFloat) double sr = getSampleRate() > 0 ? getSampleRate() : 44100.0; int bs = getSafeHostedPluginBlockSize(getBlockSize()); preparePluginPreservingLayout(plugin, sr, bs, - resolvePluginPrecisionMode(processingPrecisionMode, forceFloat)); + resolvePluginPrecisionMode(processingPrecisionMode, forceFloat), + inputChannelCount.load(std::memory_order_acquire)); } publishRealtimeStateSnapshots(); } @@ -3621,13 +6212,15 @@ void TrackProcessor::setProcessingPrecisionMode(ProcessingPrecisionMode mode) if (auto* plugin = inputFXPlugins[static_cast<size_t>(index)].get()) preparePluginPreservingLayout(plugin, sr, bs, resolvePluginPrecisionMode(processingPrecisionMode, - getInputFXPrecisionOverride(index))); + getInputFXPrecisionOverride(index)), + inputChannelCount.load(std::memory_order_acquire)); for (int index = 0; index < static_cast<int>(trackFXPlugins.size()); ++index) if (auto* plugin = trackFXPlugins[static_cast<size_t>(index)].get()) preparePluginPreservingLayout(plugin, sr, bs, resolvePluginPrecisionMode(processingPrecisionMode, - getTrackFXPrecisionOverride(index))); + getTrackFXPrecisionOverride(index)), + inputChannelCount.load(std::memory_order_acquire)); if (instrumentPlugin) preparePluginPreservingLayout(instrumentPlugin.get(), sr, bs, @@ -3640,49 +6233,162 @@ void TrackProcessor::setProcessingPrecisionMode(ProcessingPrecisionMode mode) int TrackProcessor::getChainLatency() const { - int totalLatency = 0; + juce::int64 totalLatency = 0; + const auto addProcessorLatency = [&totalLatency] (const juce::AudioProcessor* processor) + { + if (processor != nullptr) + totalLatency += juce::jmax(0, processor->getLatencySamples()); + }; + for (int index = 0; index < static_cast<int>(inputFXPlugins.size()); ++index) { const auto& plugin = inputFXPlugins[static_cast<size_t>(index)]; - if (plugin && !getInputFXBypassed(index)) - totalLatency += plugin->getLatencySamples(); + if (plugin) + addProcessorLatency(plugin.get()); } + addProcessorLatency(instrumentPlugin.get()); for (int index = 0; index < static_cast<int>(trackFXPlugins.size()); ++index) { const auto& plugin = trackFXPlugins[static_cast<size_t>(index)]; - if (plugin && !getTrackFXBypassed(index)) - totalLatency += plugin->getLatencySamples(); + if (plugin) + addProcessorLatency(plugin.get()); } - return totalLatency; + return static_cast<int>(std::min<juce::int64>(totalLatency, + std::numeric_limits<int>::max())); } void TrackProcessor::setPDCDelay(int delaySamples) { - pdcDelaySamples.store(delaySamples, std::memory_order_relaxed); - pdcDelayDirty.store(true, std::memory_order_release); + const int safeDelaySamples = + juce::jmax(0, delaySamples); + if (pdcDelaySamples.exchange( + safeDelaySamples, + std::memory_order_acq_rel) + != safeDelaySamples) + { + pdcDelayDirty.store( + true, std::memory_order_release); + } +} + +void TrackProcessor::resetPDCDelayState() +{ + pdcDelayLine.reset(); + pdcCurrentDelaySamples = + juce::jlimit( + 0, + pdcDelayLine + .getMaximumDelayInSamples(), + pdcDelaySamples.load( + std::memory_order_relaxed)); + pdcTargetDelaySamples = + pdcCurrentDelaySamples; + pdcPendingDelaySamples = + pdcCurrentDelaySamples; + pdcTransitionSamplesRemaining = 0; + pdcDelayLine.setDelay( + static_cast<float>( + pdcCurrentDelaySamples)); + pdcDelayDirty.store(false, std::memory_order_release); +} + +void TrackProcessor::resetOfflineRenderState() +{ + resetPDCDelayState(); + channelStripEQ.reset(); + dcFilterStateL = 0.0f; + dcFilterStateR = 0.0f; + dcPrevInputL = 0.0f; + dcPrevInputR = 0.0f; + clearFallbackInstrumentState(); + for (auto& channelNotes : activeMIDINotes) + channelNotes.fill(false); + fallbackInstrumentResetRequested.store(false, std::memory_order_release); + preFaderBuffer.clear(); + automationGainBuffer.clear(); + realtimeFallbackBuffer.clear(); + + // State/preset restoration can change a parameter without changing its + // automation lane value. Force the first block of every offline pass to + // re-apply that value instead of trusting a cache from realtime/pass 1. + invalidatePluginAutomationCache(); +} + +void TrackProcessor::invalidatePluginAutomationCache() noexcept +{ + if (!hasPublishedPluginAutomationRoutes.load(std::memory_order_acquire)) + return; + + auto snapshot = std::atomic_load_explicit(&pluginAutomationSnapshot, std::memory_order_acquire); + if (snapshot) + for (const auto& route : *snapshot) + if (route) + route->lastAppliedValue.store(std::numeric_limits<float>::quiet_NaN(), + std::memory_order_relaxed); } void TrackProcessor::setChannelStripEQParam(int paramIndex, float value) { - const auto& params = channelStripEQ.getParameters(); - if (paramIndex >= 0 && paramIndex < params.size()) + if (paramIndex < 0 + || paramIndex >= channelStripEQBandCount * channelStripEQValuesPerBand) + return; + + const int surfaceBand = paramIndex / channelStripEQValuesPerBand; + const int field = paramIndex % channelStripEQValuesPerBand; + // The compact strip exposes HPF, four bells, and LPF. Map those onto the + // first six S13EQ bands while setting the two edge filter types explicitly. + auto& band = channelStripEQ.bands[static_cast<size_t>(surfaceBand)]; + if (surfaceBand == 0) + band.type.store(static_cast<float>(S13EQ::FilterType::LowCut), + std::memory_order_relaxed); + else if (surfaceBand == channelStripEQBandCount - 1) + band.type.store(static_cast<float>(S13EQ::FilterType::HighCut), + std::memory_order_relaxed); + else + band.type.store(static_cast<float>(S13EQ::FilterType::Bell), + std::memory_order_relaxed); + + switch (field) { - auto* p = dynamic_cast<juce::RangedAudioParameter*>(params[paramIndex]); - if (p != nullptr) - p->setValueNotifyingHost(p->convertTo0to1(value)); + case 0: + band.freq.store(juce::jlimit(20.0f, 20000.0f, value), + std::memory_order_relaxed); + break; + case 1: + band.gain.store(juce::jlimit(-18.0f, 18.0f, value), + std::memory_order_relaxed); + break; + case 2: + band.q.store(juce::jlimit(0.1f, 10.0f, value), + std::memory_order_relaxed); + break; + case 3: + band.enabled.store(value >= 0.5f ? 1.0f : 0.0f, + std::memory_order_relaxed); + break; + default: + break; } } float TrackProcessor::getChannelStripEQParam(int paramIndex) const { - const auto& params = channelStripEQ.getParameters(); - if (paramIndex >= 0 && paramIndex < params.size()) + if (paramIndex < 0 + || paramIndex >= channelStripEQBandCount * channelStripEQValuesPerBand) + return 0.0f; + + const int surfaceBand = paramIndex / channelStripEQValuesPerBand; + const int field = paramIndex % channelStripEQValuesPerBand; + const auto& band = + channelStripEQ.bands[static_cast<size_t>(surfaceBand)]; + switch (field) { - auto* p = dynamic_cast<juce::RangedAudioParameter*>(params[paramIndex]); - if (p != nullptr) - return p->convertFrom0to1(p->getValue()); + case 0: return band.freq.load(std::memory_order_relaxed); + case 1: return band.gain.load(std::memory_order_relaxed); + case 2: return band.q.load(std::memory_order_relaxed); + case 3: return band.enabled.load(std::memory_order_relaxed); + default: return 0.0f; } - return 0.0f; } //============================================================================== @@ -3699,9 +6405,14 @@ void TrackProcessor::setSendPhaseInvert(int sendIndex, bool invert) bool TrackProcessor::getSendPhaseInvert(int sendIndex) const { - auto snapshot = std::atomic_load_explicit(&realtimeSendSnapshot, std::memory_order_acquire); - if (snapshot != nullptr && sendIndex >= 0 && sendIndex < (int)snapshot->size()) - return (*snapshot)[sendIndex].phaseInvert; + const auto graph = std::atomic_load_explicit( + &realtimeGraphSnapshot, std::memory_order_acquire); + if (graph != nullptr + && sendIndex >= 0 + && sendIndex < static_cast<int>(graph->sends.size())) + { + return graph->sends[static_cast<size_t>(sendIndex)].phaseInvert; + } return false; } @@ -3719,60 +6430,45 @@ void TrackProcessor::setOutputChannels(int startChannel, int numChannels) void TrackProcessor::setMIDIOutputDevice(const juce::String& deviceName) { - const juce::ScopedLock processorCallbackGuard(getCallbackLock()); - if (deviceName == midiOutputDeviceName) + if (midiOutputDispatcher == nullptr + || deviceName == midiOutputDispatcher->getDeviceName()) return; - midiOutputDeviceName = deviceName; - midiOutputDevice.reset(); - - if (deviceName.isNotEmpty()) + if (deviceName.isEmpty()) { - for (const auto& d : juce::MidiOutput::getAvailableDevices()) - { - if (d.name == deviceName) - { - midiOutputDevice = juce::MidiOutput::openDevice(d.identifier); - if (midiOutputDevice) - juce::Logger::writeToLog("TrackProcessor: MIDI output connected: " + deviceName); - break; - } - } + midiOutputDispatcher->disconnect(); + return; } + + if (midiOutputDispatcher->connect(deviceName)) + juce::Logger::writeToLog( + "TrackProcessor: MIDI output connected: " + + deviceName); +} + +juce::String TrackProcessor::getMIDIOutputDeviceName() const +{ + return midiOutputDispatcher != nullptr + ? midiOutputDispatcher->getDeviceName() + : juce::String(); +} + +bool TrackProcessor::hasMIDIOutputDevice() const noexcept +{ + return midiOutputDispatcher != nullptr + && midiOutputDispatcher->isConnected(); } void TrackProcessor::sendMIDIToOutput(const juce::MidiBuffer& buffer, double sampleRate, bool resetMessagesOnly) { - if (midiOutputDevice == nullptr || buffer.isEmpty()) + if (midiOutputDispatcher == nullptr || buffer.isEmpty()) return; if (sampleRate <= 0.0) sampleRate = getSampleRate() > 0.0 ? getSampleRate() : 44100.0; - if (resetMessagesOnly) - { - midiOutputResetBuffer.clear(); - for (const auto metadata : buffer) - { - const auto message = metadata.getMessage(); - const bool isReset = message.isAllNotesOff() - || message.isAllSoundOff() - || (message.isController() - && (message.getControllerNumber() == 64 - || message.getControllerNumber() == 120 - || message.getControllerNumber() == 121 - || message.getControllerNumber() == 123)) - || (message.isPitchWheel() && message.getPitchWheelValue() == 8192); - if (isReset) - midiOutputResetBuffer.addEvent(message, metadata.samplePosition); - } - - if (!midiOutputResetBuffer.isEmpty()) - midiOutputDevice->sendBlockOfMessages(midiOutputResetBuffer, juce::Time::getMillisecondCounterHiRes(), sampleRate); - return; - } - - midiOutputDevice->sendBlockOfMessages(buffer, juce::Time::getMillisecondCounterHiRes(), sampleRate); + midiOutputDispatcher->enqueueBuffer( + buffer, sampleRate, resetMessagesOnly); } // ============================================================================= @@ -3806,6 +6502,9 @@ bool TrackProcessor::initializeARA(int fxIndex, double sampleRate, int araBlockS { if (araFXIndex == fxIndex) { + araFXIndexForRealtime.store( + araFXIndex, + std::memory_order_release); updateARAAttemptStatus(fxIndex, true, true, true, {}); if (onComplete) onComplete(true, true, {}); return true; @@ -3837,12 +6536,18 @@ bool TrackProcessor::initializeARA(int fxIndex, double sampleRate, int araBlockS [this, fxIndex, onComplete] (bool success, bool pluginSupportsARA, const juce::String& errorMessage) { if (success) { + araFXIndexForRealtime.store( + araFXIndex, + std::memory_order_release); juce::Logger::writeToLog("TrackProcessor::initializeARA: ARA initialized at FX index " + juce::String(fxIndex)); updateARAAttemptStatus(fxIndex, true, true, true, {}); } else { + araFXIndexForRealtime.store( + -1, + std::memory_order_release); juce::Logger::writeToLog("TrackProcessor::initializeARA: ARA initialization failed for FX index " + juce::String(fxIndex)); updateARAAttemptStatus(fxIndex, true, pluginSupportsARA, false, errorMessage); @@ -3947,6 +6652,8 @@ juce::String TrackProcessor::getARALastAttemptError() const void TrackProcessor::shutdownARA() { + araFXIndexForRealtime.store( + -1, std::memory_order_release); #if S13_HAS_ARA if (araController) { diff --git a/Source/TrackProcessor.h b/Source/TrackProcessor.h index fa46c32..2b99336 100644 --- a/Source/TrackProcessor.h +++ b/Source/TrackProcessor.h @@ -2,6 +2,7 @@ #include <JuceHeader.h> #include "AutomationList.h" +#include "BuiltInParameterSupport.h" #include "BuiltInEffects.h" #include "ARAHostController.h" #include <map> @@ -32,7 +33,10 @@ enum class ProcessingPrecisionMode Hybrid64 }; -class TrackProcessor : public juce::AudioProcessor +class TrackMIDIOutputDispatcher; + +class TrackProcessor : public juce::AudioProcessor, + private juce::Timer { public: struct ARAProcessDebugInfo @@ -61,6 +65,8 @@ class TrackProcessor : public juce::AudioProcessor juce::String destTrackId; float level = 0.0f; float pan = 0.0f; + float leftGain = 0.0f; + float rightGain = 0.0f; bool enabled = false; bool preFader = false; bool phaseInvert = false; @@ -90,6 +96,7 @@ class TrackProcessor : public juce::AudioProcessor bool isInputFX = false; int fxIndex = -1; int paramIndex = -1; + juce::String builtInParamId; int midiCC = -1; }; @@ -111,6 +118,7 @@ class TrackProcessor : public juce::AudioProcessor bool producesMidi() const override; bool isMidiEffect() const override; double getTailLengthSeconds() const override; + double getOfflineRenderTailLengthSeconds() const; int getNumPrograms() override; int getCurrentProgram() override; @@ -126,13 +134,30 @@ class TrackProcessor : public juce::AudioProcessor void resetRMS() { currentRMS.store (0.0f, std::memory_order_relaxed); meterPeakAccum = 0.0f; meterSampleCount = 0; } bool isClipLatched() const { return clipLatched.load(std::memory_order_relaxed); } void resetClipLatch() { clipLatched.store(false, std::memory_order_relaxed); } + void registerMIDIInputActivity(const juce::MidiMessage& message) noexcept; + float getMIDIInputActivityLevel() const noexcept; // Recording & Monitoring (Phase 1) - void setRecordArmed(bool armed) { if (!isRecordSafe) isRecordArmed = armed; } - bool getRecordArmed() const { return isRecordArmed; } + void setRecordArmed(bool armed) + { + if (! isRecordSafe.load(std::memory_order_acquire)) + isRecordArmed.store(armed, std::memory_order_release); + } + bool getRecordArmed() const + { + return isRecordArmed.load(std::memory_order_acquire); + } - void setRecordSafe(bool safe) { isRecordSafe = safe; if (safe) isRecordArmed = false; } - bool getRecordSafe() const { return isRecordSafe; } + void setRecordSafe(bool safe) + { + isRecordSafe.store(safe, std::memory_order_release); + if (safe) + isRecordArmed.store(false, std::memory_order_release); + } + bool getRecordSafe() const + { + return isRecordSafe.load(std::memory_order_acquire); + } void setInputMonitoring(bool enabled) { isInputMonitoringEnabled.store(enabled, std::memory_order_release); } bool getInputMonitoring() const { return isInputMonitoringEnabled.load(std::memory_order_acquire); } @@ -167,6 +192,10 @@ class TrackProcessor : public juce::AudioProcessor std::shared_ptr<const std::map<int, bool>> getTrackFXBypassSnapshot() const; std::shared_ptr<const std::map<int, bool>> getInputFXPrecisionOverrideSnapshot() const; std::shared_ptr<const std::map<int, bool>> getTrackFXPrecisionOverrideSnapshot() const; + // Called from the control thread when hosted latency may have changed. + // Publishes resized immutable delay storage without touching callback-owned + // ring positions. + void refreshHostBypassDelayStorage(); // Sidechain Routing (Phase 4.4) void setSidechainSource(int pluginIndex, const juce::String& sourceTrackId); @@ -207,8 +236,15 @@ class TrackProcessor : public juce::AudioProcessor float getPan() const { return trackPan.load(std::memory_order_relaxed); } // Pan Law - void setPanLaw(PanLaw law) { panLaw = law; recomputePanGains(); } - PanLaw getPanLaw() const { return panLaw; } + void setPanLaw(PanLaw law) + { + panLaw.store(law, std::memory_order_release); + recomputePanGains(); + } + PanLaw getPanLaw() const + { + return panLaw.load(std::memory_order_acquire); + } // Mute/Solo void setMute(bool shouldMute); @@ -230,19 +266,23 @@ class TrackProcessor : public juce::AudioProcessor void setMIDIInputDevice(const juce::String& device) { midiInputDevice = device; } juce::String getMIDIInputDevice() const { return midiInputDevice; } - void setMIDIChannel(int channel) { midiChannel = juce::jlimit(0, 16, channel); } // 0 = all, 1-16 = specific - int getMIDIChannel() const { return midiChannel; } + void setMIDIChannel(int channel) + { + midiChannel.store( + juce::jlimit(0, 16, channel), + std::memory_order_release); + } // 0 = all, 1-16 = specific + int getMIDIChannel() const + { + return midiChannel.load(std::memory_order_acquire); + } // Instrument plugin (Phase 2) void setInstrument(std::unique_ptr<juce::AudioPluginInstance> plugin, double callerSampleRate = 0.0, int callerBlockSize = 0); void clearInstrument(); juce::AudioPluginInstance* getInstrument() const { return instrumentPlugin.get(); } std::shared_ptr<juce::AudioPluginInstance> getInstrumentShared() const { return instrumentPlugin; } - bool isUsingFallbackInstrument() const - { - return trackType.load(std::memory_order_acquire) == TrackType::Instrument - && std::atomic_load_explicit(&realtimeInstrumentSnapshot, std::memory_order_acquire) == nullptr; - } + bool isUsingFallbackInstrument() const; bool loadFallbackSamplerSample(const juce::String& filePath, int rootNote); void clearFallbackSamplerSample(); bool hasFallbackSamplerSample() const; @@ -293,18 +333,41 @@ class TrackProcessor : public juce::AudioProcessor int getChainLatency() const; void setPDCDelay(int delaySamples); int getPDCDelay() const { return pdcDelaySamples; } + void resetPDCDelayState(); + void resetOfflineRenderState(); + void invalidatePluginAutomationCache() noexcept; // DC Offset Removal - void setDCOffsetRemoval(bool enabled) { dcOffsetRemoval = enabled; } - bool getDCOffsetRemoval() const { return dcOffsetRemoval; } + void setDCOffsetRemoval(bool enabled) + { + dcOffsetRemoval.store(enabled, std::memory_order_release); + } + bool getDCOffsetRemoval() const + { + return dcOffsetRemoval.load(std::memory_order_acquire); + } // Channel Strip EQ — always-available inline parametric EQ (not a plugin slot) - void setChannelStripEQEnabled(bool enabled) { channelStripEQEnabled = enabled; } - bool getChannelStripEQEnabled() const { return channelStripEQEnabled; } + void setChannelStripEQEnabled(bool enabled) + { + channelStripEQEnabled.store(enabled, std::memory_order_release); + channelStripEQ.setPowerEnabled(enabled); + } + bool getChannelStripEQEnabled() const + { + return channelStripEQEnabled.load(std::memory_order_acquire); + } S13EQ* getChannelStripEQ() { return &channelStripEQ; } void setChannelStripEQParam(int paramIndex, float value); float getChannelStripEQParam(int paramIndex) const; + // Stable bridge indices used by the six-control Channel Strip EQ surface. + // These are deliberately independent of AudioProcessor's parameter list so + // the inline strip cannot silently become a no-op when S13EQ is hosted + // directly rather than as a plug-in instance. + static constexpr int channelStripEQBandCount = 6; + static constexpr int channelStripEQValuesPerBand = 4; + // Phase Invert (polarity flip) void setPhaseInvert(bool invert) { phaseInverted.store(invert); } bool getPhaseInvert() const { return phaseInverted.load(); } @@ -332,7 +395,8 @@ class TrackProcessor : public juce::AudioProcessor // Per-track MIDI Output void setMIDIOutputDevice(const juce::String& deviceName); - juce::String getMIDIOutputDeviceName() const { return midiOutputDeviceName; } + juce::String getMIDIOutputDeviceName() const; + bool hasMIDIOutputDevice() const noexcept; void sendMIDIToOutput(const juce::MidiBuffer& buffer, double sampleRate, bool resetMessagesOnly = false); // Automation @@ -380,7 +444,12 @@ class TrackProcessor : public juce::AudioProcessor bool initializeARA(int fxIndex, double sampleRate, int blockSize, std::function<void(bool, bool, const juce::String&)> onComplete = nullptr); // Check if this track has an active ARA session - bool hasActiveARA() const { return araController != nullptr && araController->isActive(); } + bool hasActiveARA() const + { + return araFXIndexForRealtime.load( + std::memory_order_acquire) + >= 0; + } // Get the ARA controller (for adding sources, etc.) ARAHostController* getARAController() { return araController.get(); } int getARAFXIndex() const { return araFXIndex; } @@ -400,12 +469,30 @@ class TrackProcessor : public juce::AudioProcessor void shutdownARA(); private: + // Native deterministic regressions exercise the realtime tail-service + // state machine, including its control-thread timer handoff. + friend class AudioEngine; + friend class NAMDelayRegression; + + struct FallbackSamplerSample; + struct PluginAutomationRoute { juce::String parameterId; bool isInputFX = false; int fxIndex = -1; + // Stable instance identity keeps automation attached to the intended + // processor while graph and route snapshots cross a publication + // boundary during reorder/removal. The callback compares this pointer + // only; the graph snapshot owns the processor for the reader epoch. + const juce::AudioProcessor* targetProcessor = nullptr; int paramIndex = -1; + juce::String builtInParamId; + float builtInMinimum = 0.0f; + float builtInMaximum = 1.0f; + bool builtInDiscrete = false; + OpenStudioBuiltInParameterCurve builtInCurve = + OpenStudioBuiltInParameterCurve::linear; std::shared_ptr<AutomationList> automation = std::make_shared<AutomationList>(); std::atomic<float> lastAppliedValue { std::numeric_limits<float>::quiet_NaN() }; }; @@ -426,19 +513,50 @@ class TrackProcessor : public juce::AudioProcessor bool isInputFX = false; int fxIndex = -1; int paramIndex = -1; + juce::String builtInParamId; }; void processBlockInternal(juce::AudioBuffer<float>&, juce::MidiBuffer&); + void timerCallback() override; + void refreshRealtimeFXTailBudgetOnControlThread(); + void resetExpiredRealtimeFXTailOnControlThread(); void publishRealtimeStateSnapshots(); + void reclaimRetiredRealtimeGraphSnapshots(); + void reclaimRetiredRealtimeAuxOwners(); + void publishFallbackSamplerSample( + std::shared_ptr<const FallbackSamplerSample> sample); + void publishScheduledMIDIClips( + std::shared_ptr<const std::vector<ScheduledMIDIClip>> snapshot); + void reclaimRetiredScheduledMIDISnapshots(); + void resetFXContinuityStates() noexcept; + void publishPluginAutomationRoutes( + std::shared_ptr<const PluginAutomationRouteSnapshot> snapshot); + static std::shared_ptr<PluginAutomationRoute> + clonePluginAutomationRoute(const PluginAutomationRoute& source); + void remapPluginAutomationRoutesForReorder( + bool isInputFX, int fromIndex, int toIndex); + void remapPluginAutomationRoutesForRemoval( + bool isInputFX, int removedIndex); + void publishMIDICCAutomationRoutes( + std::shared_ptr<const MIDICCAutomationRouteSnapshot> snapshot); std::shared_ptr<PluginAutomationRoute> getOrCreatePluginAutomationRoute(const juce::String& parameterId); std::shared_ptr<PluginAutomationRoute> findPluginAutomationRoute(const juce::String& parameterId) const; std::optional<PluginAutomationParameterRef> parsePluginAutomationParameterId(const juce::String& parameterId) const; - void applyPluginAutomationForProcessor(juce::AudioProcessor* proc, bool isInputFX, int fxIndex, double blockTimeSeconds); + void applyPluginAutomationForProcessor( + juce::AudioProcessor* proc, + bool isInputFX, + int fxIndex, + double blockTimeSeconds, + const PluginAutomationRouteSnapshot* routes); std::shared_ptr<MIDICCAutomationRoute> getOrCreateMIDICCAutomationRoute(const juce::String& parameterId); std::shared_ptr<MIDICCAutomationRoute> findMIDICCAutomationRoute(const juce::String& parameterId) const; static std::optional<int> parseMIDICCAutomationParameterId(const juce::String& parameterId); - void applyMIDIAutomationToBuffer(juce::MidiBuffer& destination, double blockTimeSeconds, - int numSamples, double sampleRate); + void applyMIDIAutomationToBuffer( + juce::MidiBuffer& destination, + double blockTimeSeconds, + int numSamples, + double sampleRate, + const MIDICCAutomationRouteSnapshot* ccRoutes); bool shouldApplyAutomation(const AutomationList& automation) const; // Current peak level (was named currentRMS but now holds peak — kept as-is @@ -455,10 +573,14 @@ class TrackProcessor : public juce::AudioProcessor int meterSampleCount { 0 }; float meterPeakAccum { 0.0f }; std::atomic<bool> clipLatched { false }; + // Raw MIDI input activity is deliberately separate from the audio meter. + // It is written by the MIDI input callback and sampled by the UI meter timer. + std::atomic<float> midiInputActivityLevel { 0.0f }; + std::atomic<juce::uint32> midiInputActivityTimestampMs { 0 }; // Recording state (Phase 1) - bool isRecordArmed = false; - bool isRecordSafe = false; // Phase 3.3 — prevents arming + std::atomic<bool> isRecordArmed { false }; + std::atomic<bool> isRecordSafe { false }; // Phase 3.3 — prevents arming std::atomic<bool> isInputMonitoringEnabled { false }; std::atomic<int> inputStartChannel { 0 }; // Hardware input start (0-based) std::atomic<int> inputChannelCount { 2 }; // Stereo by default @@ -473,6 +595,8 @@ class TrackProcessor : public juce::AudioProcessor using SidechainSourceSnapshot = std::map<int, juce::String>; using BypassSnapshot = std::map<int, bool>; using PrecisionOverrideSnapshot = std::map<int, bool>; + static constexpr size_t maxRealtimeFXContinuitySlots = 64; + static constexpr int hostBypassDryChannels = 2; std::vector<ProcessorPtr> inputFXPlugins; // Pre-recording FX std::vector<ProcessorPtr> trackFXPlugins; // Playback FX @@ -488,6 +612,42 @@ class TrackProcessor : public juce::AudioProcessor bool phaseInvert = false; }; using SendSnapshot = std::vector<SendConfig>; + struct FXBypassDelayStorage + { + const juce::AudioProcessor* processor = nullptr; + juce::AudioBuffer<float> ring; + // AudioProcessor::getLatencySamples() reads JUCE's non-atomic latency + // member. Publish the control-thread value explicitly so a NAM model + // load cannot race this realtime dry-history path. + std::atomic<int> publishedLatency { 0 }; + int writePosition = 0; + int currentLatency = 0; + int targetLatency = 0; + int latencyRampRemaining = 0; + int latencyRampLength = 0; + bool latencyInitialised = false; + }; + using FXBypassDelayStoragePtr = + std::shared_ptr<FXBypassDelayStorage>; + struct RealtimeGraphSnapshot + { + uint64 generation = 0; + ProcessorSnapshot inputFX; + ProcessorSnapshot trackFX; + BypassSnapshot inputFXBypass; + BypassSnapshot trackFXBypass; + PrecisionOverrideSnapshot inputFXPrecisionOverrides; + PrecisionOverrideSnapshot trackFXPrecisionOverrides; + ProcessorPtr instrument; + SidechainSourceSnapshot sidechainSources; + SendSnapshot sends; + std::array<FXBypassDelayStoragePtr, + maxRealtimeFXContinuitySlots> + inputFXBypassDelay; + std::array<FXBypassDelayStoragePtr, + maxRealtimeFXContinuitySlots> + trackFXBypassDelay; + }; std::vector<SendConfig> sends; std::map<int, bool> inputFXForceFloatOverrides; std::map<int, bool> trackFXForceFloatOverrides; @@ -499,6 +659,35 @@ class TrackProcessor : public juce::AudioProcessor // than our 2-channel track buffer (avoids heap allocation on audio thread) juce::AudioBuffer<float> fxProcessBuffer; juce::AudioBuffer<double> fxProcessBufferDouble; + struct FXContinuityState + { + const juce::AudioProcessor* processor = nullptr; + uint64 graphGeneration = 0; + std::array<float, 2> lastOutput { 0.0f, 0.0f }; + bool valid = false; + bool skippedLastBlock = false; + float hostBypassWetMix = 1.0f; + bool targetBypassed = false; + std::array<float, 2> endpointCorrection { + 0.0f, 0.0f + }; + std::array<float, 2> endpointCorrectionStep { + 0.0f, 0.0f + }; + int endpointCorrectionSamplesRemaining = 0; + }; + std::array<FXContinuityState, maxRealtimeFXContinuitySlots> + inputFXContinuity {}; + std::array<FXContinuityState, maxRealtimeFXContinuitySlots> + trackFXContinuity {}; + FXContinuityState instrumentContinuity; + // Every loaded slot feeds its latency-aligned dry history continuously so + // an eventual bypass transition starts from valid delayed audio. This + // buffer is separate from fxProcessBuffer because expanded/sidechain + // processing overwrites that buffer before the dry/wet crossfade. + juce::AudioBuffer<float> fxBypassDryBuffer; + float fxBypassRampStep = 1.0f / 882.0f; + int fxContinuityRampSamples = 353; // Sidechain Routing (Phase 4.4) // Maps trackFX plugin index -> source track ID that provides sidechain audio. @@ -514,7 +703,7 @@ class TrackProcessor : public juce::AudioProcessor std::atomic<float> trackPan { 0.0f }; // -1.0 (L) to +1.0 (R) // Pan Law - PanLaw panLaw { PanLaw::Linear }; + std::atomic<PanLaw> panLaw { PanLaw::Linear }; // Cached pan gains — pre-computed in setPan()/setVolume(), avoids trig on audio thread std::atomic<float> cachedPanL { 1.0f }; @@ -524,7 +713,7 @@ class TrackProcessor : public juce::AudioProcessor // Track Type & MIDI (Phase 2) std::atomic<TrackType> trackType { TrackType::Audio }; juce::String midiInputDevice; - int midiChannel = 0; // 0 = all channels, 1-16 = specific channel + std::atomic<int> midiChannel { 0 }; // 0 = all channels, 1-16 = specific channel std::shared_ptr<juce::AudioPluginInstance> instrumentPlugin; juce::MidiBuffer midiBuffer; // For MIDI event storage @@ -548,16 +737,39 @@ class TrackProcessor : public juce::AudioProcessor juce::AudioBuffer<float> automationGainBuffer; juce::CriticalSection pluginAutomationRouteLock; std::shared_ptr<const PluginAutomationRouteSnapshot> pluginAutomationSnapshot; + std::atomic<const PluginAutomationRouteSnapshot*> + pluginAutomationSnapshotForAudio { nullptr }; + // These flags are published after their corresponding immutable snapshot. + // Empty tracks can therefore avoid MSVC's process-wide atomic<shared_ptr> + // lock in the callback; an observed true flag guarantees a visible snapshot. + std::atomic<bool> hasPublishedPluginAutomationRoutes { false }; juce::CriticalSection midiAutomationRouteLock; std::shared_ptr<const MIDICCAutomationRouteSnapshot> midiCCAutomationSnapshot; + std::atomic<const MIDICCAutomationRouteSnapshot*> + midiCCAutomationSnapshotForAudio { nullptr }; + std::atomic<bool> hasPublishedMIDICCAutomationRoutes { false }; + // Automation routes and the fallback sampler are immutable publications. + // A single callback-reader epoch lets their realtime paths load raw + // pointers without entering MSVC's process-wide atomic<shared_ptr> lock. + mutable std::atomic<std::uint32_t> + realtimeAuxAudioReaders { 0 }; + juce::CriticalSection realtimeAuxPublicationLock; + juce::CriticalSection realtimeAuxRetirementLock; + std::vector<std::shared_ptr<const void>> + retiredRealtimeAuxOwners; // Plugin Delay Compensation (PDC) juce::dsp::DelayLine<float> pdcDelayLine { 96000 }; // max 2 seconds at 48kHz std::atomic<int> pdcDelaySamples { 0 }; std::atomic<bool> pdcDelayDirty { false }; + int pdcCurrentDelaySamples = 0; + int pdcTargetDelaySamples = 0; + int pdcPendingDelaySamples = 0; + int pdcTransitionSamplesRemaining = 0; + int pdcTransitionSamplesTotal = 1; // DC Offset Removal - bool dcOffsetRemoval { false }; + std::atomic<bool> dcOffsetRemoval { false }; float dcFilterStateL { 0.0f }; float dcFilterStateR { 0.0f }; float dcPrevInputL { 0.0f }; @@ -565,7 +777,7 @@ class TrackProcessor : public juce::AudioProcessor // Channel Strip EQ S13EQ channelStripEQ; - bool channelStripEQEnabled { false }; + std::atomic<bool> channelStripEQEnabled { false }; // Phase Invert std::atomic<bool> phaseInverted { false }; @@ -590,9 +802,11 @@ class TrackProcessor : public juce::AudioProcessor juce::AudioBuffer<float> preFaderBuffer; // Per-track MIDI Output - juce::String midiOutputDeviceName; - std::unique_ptr<juce::MidiOutput> midiOutputDevice; - juce::MidiBuffer midiOutputResetBuffer; + // The dispatcher object itself is immutable for the TrackProcessor + // lifetime. The callback only writes to its pre-allocated SPSC queue; + // device ownership and operating-system MIDI calls stay on control/sender + // threads. + std::unique_ptr<TrackMIDIOutputDispatcher> midiOutputDispatcher; juce::AudioBuffer<float> realtimeFallbackBuffer; std::atomic<int> realtimeFallbackReuseCount { 0 }; std::atomic<int> pluginBusySkipCount { 0 }; @@ -611,35 +825,54 @@ class TrackProcessor : public juce::AudioProcessor std::atomic<int> lastBuiltMidiEventCount { 0 }; std::atomic<int> maxBuiltMidiEventCount { 0 }; std::atomic<bool> scheduledMIDIChaseRequested { true }; + // Control threads publish only a request. The callback owns + // activeMIDINotes and emits the actual reset messages in-order. + std::atomic<bool> allNotesOffRequested { false }; std::shared_ptr<const std::vector<ScheduledMIDIClip>> scheduledMIDIClips { std::make_shared<const std::vector<ScheduledMIDIClip>>() }; - std::shared_ptr<const ProcessorSnapshot> realtimeInputFXSnapshot { - std::make_shared<const ProcessorSnapshot>() - }; - std::shared_ptr<const ProcessorSnapshot> realtimeTrackFXSnapshot { - std::make_shared<const ProcessorSnapshot>() - }; - std::shared_ptr<const BypassSnapshot> realtimeInputFXBypassSnapshot { - std::make_shared<const BypassSnapshot>() - }; - std::shared_ptr<const BypassSnapshot> realtimeTrackFXBypassSnapshot { - std::make_shared<const BypassSnapshot>() - }; - std::shared_ptr<const PrecisionOverrideSnapshot> realtimeInputFXPrecisionOverrideSnapshot { - std::make_shared<const PrecisionOverrideSnapshot>() - }; - std::shared_ptr<const PrecisionOverrideSnapshot> realtimeTrackFXPrecisionOverrideSnapshot { - std::make_shared<const PrecisionOverrideSnapshot>() - }; - std::shared_ptr<juce::AudioProcessor> realtimeInstrumentSnapshot; - std::shared_ptr<const SidechainSourceSnapshot> realtimeSidechainSnapshot { - std::make_shared<const SidechainSourceSnapshot>() - }; - std::shared_ptr<const SendSnapshot> realtimeSendSnapshot { - std::make_shared<const SendSnapshot>() + std::atomic<const std::vector<ScheduledMIDIClip>*> + scheduledMIDIClipsForAudio { nullptr }; + std::atomic<bool> hasScheduledMIDIClipsForAudio { false }; + mutable std::atomic<std::uint32_t> + scheduledMIDIAudioReaders { 0 }; + juce::CriticalSection scheduledMIDIPublicationLock; + juce::CriticalSection scheduledMIDIRetirementLock; + std::vector<std::shared_ptr<const std::vector<ScheduledMIDIClip>>> + retiredScheduledMIDISnapshots; + // One immutable publication replaces nine independent atomic<shared_ptr> + // loads on every track callback. On MSVC those free-function atomics share + // a process-wide spin lock, so consolidating them materially reduces + // contention at 16/32-sample buffers. + std::shared_ptr<const RealtimeGraphSnapshot> realtimeGraphSnapshot { + std::make_shared<const RealtimeGraphSnapshot>() }; + std::atomic<const RealtimeGraphSnapshot*> + realtimeGraphSnapshotForAudio { nullptr }; + mutable std::atomic<std::uint32_t> + realtimeGraphAudioReaders { 0 }; + juce::CriticalSection realtimeGraphPublicationLock; + juce::CriticalSection realtimeGraphRetirementLock; + std::vector<std::shared_ptr<const RealtimeGraphSnapshot>> + retiredRealtimeGraphSnapshots; + std::atomic<uint64> realtimeGraphGeneration { 0 }; + // Audio tracks that lose their live/playback input still need bounded + // zero-input processing so delays and reverbs drain instead of freezing in + // memory. The callback owns the integer countdowns below; only the small + // publication/request fields are shared with the control-thread timer. + std::atomic<bool> realtimeFXTailActive { false }; + std::atomic<bool> realtimeFXTailResetPending { false }; + std::atomic<uint64> realtimeFXTailActivityGeneration { 0 }; + std::atomic<uint64> realtimeFXTailResetGeneration { 0 }; + std::atomic<int> realtimeFXTailSampleRateHz { 44100 }; + std::atomic<int> realtimeFXTailBudgetSamples { 1367100 }; // 31 s at 44.1 kHz until prepared + std::atomic<int> realtimeFXTailMinimumDrainSamples { 1323000 }; // 30 s at 44.1 kHz + int realtimeFXTailHardSamplesRemaining = 0; + int realtimeFXTailMinimumSamplesRemaining = 0; + int realtimeFXTailQuietSamples = 0; + int realtimeFXTailLastPublishedBudgetSamples = 0; + bool realtimeFXPreviousBlockHadInput = false; std::array<std::array<bool, 128>, 16> activeMIDINotes {}; std::array<std::array<bool, 128>, 16> fallbackInstrumentNoteActive {}; std::array<std::array<bool, 128>, 16> fallbackInstrumentNoteReleasing {}; @@ -681,6 +914,8 @@ class TrackProcessor : public juce::AudioProcessor juce::String filePath; }; std::shared_ptr<const FallbackSamplerSample> fallbackSamplerSample; + std::atomic<const FallbackSamplerSample*> + fallbackSamplerSampleForAudio { nullptr }; ProcessingPrecisionMode processingPrecisionMode { ProcessingPrecisionMode::Float32 }; void markActiveMIDINoteState(const juce::MidiMessage& message); @@ -691,20 +926,35 @@ class TrackProcessor : public juce::AudioProcessor const juce::MidiBuffer& midiMessages, int numSamples, double sampleRate); - void appendScheduledMIDIChaseToBuffer(juce::MidiBuffer& destination, double blockTimeSeconds, - double sampleRate) const; - void appendScheduledMIDIToBuffer(juce::MidiBuffer& destination, double blockTimeSeconds, - int numSamples, double sampleRate) const; + void appendScheduledMIDIChaseToBuffer( + juce::MidiBuffer& destination, + const std::vector<ScheduledMIDIClip>* clips, + double blockTimeSeconds, + double sampleRate) const; + void appendScheduledMIDIToBuffer( + juce::MidiBuffer& destination, + const std::vector<ScheduledMIDIClip>* clips, + double blockTimeSeconds, + int numSamples, + double sampleRate) const; void appendQueuedMIDIToBuffer(juce::MidiBuffer& destination, int numSamples); bool hasQueuedMIDI() const; bool hasScheduledMIDIClips() const; - bool hasScheduledMIDIInBlock(double blockTimeSeconds, int numSamples, double sampleRate) const; + bool hasScheduledMIDIInBlock( + double blockTimeSeconds, + int numSamples, + double sampleRate, + const std::vector<ScheduledMIDIClip>* clips) const; // ARA Plugin Hosting (Phase 9) mutable juce::CriticalSection araStatusLock; std::unique_ptr<ARAHostController> araController; ARAHostController::PlaybackRequestHandlers araPlaybackRequestHandlers; int araFXIndex = -1; // Which FX slot has ARA active (-1 = none) + // The callback must not inspect the control-owned unique_ptr merely to + // discover that ARA is absent. Publish the active slot only after ARA + // initialization completes, and withdraw it before a quiesced shutdown. + std::atomic<int> araFXIndexForRealtime { -1 }; std::atomic<int> araLastAttemptFXIndex { -1 }; std::atomic<bool> araLastAttemptComplete { false }; std::atomic<bool> araLastAttemptWasARAPlugin { false }; diff --git a/Source/TunerPitchTracker.cpp b/Source/TunerPitchTracker.cpp new file mode 100644 index 0000000..58f7efc --- /dev/null +++ b/Source/TunerPitchTracker.cpp @@ -0,0 +1,1567 @@ +#include "TunerPitchTracker.h" + +#include <algorithm> +#include <array> +#include <cmath> +#include <limits> + +namespace +{ +constexpr double kMinimumFrequencyHz = 27.5; +constexpr double kMaximumFrequencyHz = 1320.0; +constexpr double kTargetAnalysisRate = 12000.0; +constexpr int kAnalysisFrameSize = 2048; +constexpr int kAnalysisHopSize = 384; +constexpr int kAcquisitionFrames = 3; +constexpr int kMaximumLagStorage = 1024; +constexpr int kPitchMedianSize = 5; +constexpr float kSignalThresholdDb = -88.0f; +constexpr float kMinimumClarity = 0.68f; +constexpr double kAverageTimeConstantSeconds = 0.16; +constexpr double kSteadyHoldSeconds = 0.45; +constexpr double kReleaseSeconds = 1.20; +constexpr double kTransitionThresholdCents = 80.0; +constexpr double kCandidateConsistencyCents = 32.0; +constexpr double kMaximumWorkerQueueSeconds = 0.25; +constexpr double kFirstAcquisitionWeight = 0.35; + +float safeDecibels(double meanSquare) noexcept +{ + if (! std::isfinite(meanSquare) || meanSquare <= 1.0e-18) + return -120.0f; + + return static_cast<float>( + juce::jlimit(-120.0, 6.0, 10.0 * std::log10(meanSquare))); +} + +double frequencyToAbsoluteCents(double frequencyHz) noexcept +{ + if (! std::isfinite(frequencyHz) || frequencyHz <= 0.0) + return 0.0; + + return 6900.0 + 1200.0 * std::log2(frequencyHz / 440.0); +} + +float absoluteCentsToFrequency(double absoluteCents) noexcept +{ + return static_cast<float>( + 440.0 * std::exp2((absoluteCents - 6900.0) / 1200.0)); +} + +int roundedMidiNote(double absoluteCents) noexcept +{ + return juce::jlimit( + 0, 127, juce::roundToInt(absoluteCents / 100.0)); +} + +double confidenceInfluence(float confidence) noexcept +{ + const double normalized = juce::jlimit( + 0.0, + 1.0, + (static_cast<double>(confidence) + - static_cast<double>(kMinimumClarity)) + / (1.0 - static_cast<double>(kMinimumClarity))); + return 0.20 + 0.80 * normalized * normalized; +} +} + +class TunerPitchTracker::AnalysisCore +{ +public: + explicit AnalysisCore(double newSourceSampleRate) + { + prepare(newSourceSampleRate); + } + + void prepare(double newSourceSampleRate) noexcept + { + sourceSampleRate = std::isfinite(newSourceSampleRate) + && newSourceSampleRate >= 8000.0 + ? newSourceSampleRate + : 48000.0; + + decimationFactor = juce::jlimit( + 1, + 64, + juce::roundToInt(sourceSampleRate / kTargetAnalysisRate)); + analysisSampleRate = + sourceSampleRate / static_cast<double>(decimationFactor); + + const double lowPassCutoffHz = juce::jmin( + 3200.0, analysisSampleRate * 0.38); + lowPassAlpha = static_cast<float>( + 1.0 - std::exp( + -juce::MathConstants<double>::twoPi + * lowPassCutoffHz / sourceSampleRate)); + highPassCoefficient = static_cast<float>( + std::exp( + -juce::MathConstants<double>::twoPi + * 10.0 / sourceSampleRate)); + + reset(); + } + + void reset() noexcept + { + analysisRing.fill(0.0f); + analysisFrame.fill(0.0f); + nsdf.fill(0.0f); + energyPrefix.fill(0.0); + lowPassStates.fill(0.0f); + pitchHistory.fill(0.0); + + ringWriteIndex = 0; + validRingSamples = 0; + samplesSinceAnalysis = 0; + decimationPhase = 0; + inputHighPassX1 = 0.0f; + inputHighPassY1 = 0.0f; + levelSquareSum = 0.0; + levelSampleCount = 0; + totalAnalysisSamples = 0; + lastAcceptedAnalysisSample = 0; + hasAcceptedPitch = false; + acquisitionCount = 0; + acquisitionCandidateCents = 0.0; + acquisitionCandidateWeight = 0.0; + transitionCount = 0; + transitionCandidateCents = 0.0; + pitchHistoryCount = 0; + pitchHistoryWriteIndex = 0; + averagedAbsoluteCents = 0.0; + instantaneousAbsoluteCents = 0.0; + stableMidiNote = -1; + pendingMidiNote = -1; + pendingMidiCount = 0; + lastConfidence = 0.0f; + snapshot = {}; + } + + void process(const float* samples, int numSamples) noexcept + { + if (samples == nullptr || numSamples <= 0) + return; + + for (int sampleIndex = 0; sampleIndex < numSamples; ++sampleIndex) + { + float input = samples[sampleIndex]; + if (! std::isfinite(input)) + input = 0.0f; + + const float highPassed = + input - inputHighPassX1 + + highPassCoefficient * inputHighPassY1; + inputHighPassX1 = input; + inputHighPassY1 = highPassed; + + levelSquareSum += + static_cast<double>(input) + * static_cast<double>(input); + ++levelSampleCount; + + float filtered = highPassed; + for (auto& filterState : lowPassStates) + { + filterState += lowPassAlpha * (filtered - filterState); + filtered = filterState; + } + + ++decimationPhase; + if (decimationPhase < decimationFactor) + continue; + + decimationPhase = 0; + analysisRing[static_cast<size_t>(ringWriteIndex)] = filtered; + ringWriteIndex = + (ringWriteIndex + 1) % kAnalysisFrameSize; + validRingSamples = juce::jmin( + kAnalysisFrameSize, validRingSamples + 1); + ++samplesSinceAnalysis; + ++totalAnalysisSamples; + + if (samplesSinceAnalysis >= kAnalysisHopSize) + { + samplesSinceAnalysis -= kAnalysisHopSize; + analyseCurrentFrame(); + } + } + } + + [[nodiscard]] Snapshot getSnapshot() const noexcept + { + return snapshot; + } + +private: + struct PitchCandidate + { + bool valid = false; + float frequencyHz = 0.0f; + float clarity = 0.0f; + }; + + struct Peak + { + int lag = 0; + float clarity = 0.0f; + }; + + PitchCandidate detectPitch() noexcept + { + PitchCandidate result; + + for (int sample = 0; sample < kAnalysisFrameSize; ++sample) + { + const int sourceIndex = + (ringWriteIndex + sample) % kAnalysisFrameSize; + analysisFrame[static_cast<size_t>(sample)] = + analysisRing[static_cast<size_t>(sourceIndex)]; + } + + energyPrefix[0] = 0.0; + for (int sample = 0; sample < kAnalysisFrameSize; ++sample) + { + const double value = + static_cast<double>( + analysisFrame[static_cast<size_t>(sample)]); + energyPrefix[static_cast<size_t>(sample + 1)] = + energyPrefix[static_cast<size_t>(sample)] + + value * value; + } + + const int minimumLag = juce::jmax( + 2, + static_cast<int>( + std::floor( + analysisSampleRate / kMaximumFrequencyHz))); + const int maximumLag = juce::jlimit( + minimumLag + 2, + kMaximumLagStorage - 2, + static_cast<int>( + std::ceil( + analysisSampleRate / kMinimumFrequencyHz))); + + nsdf.fill(0.0f); + for (int lag = 2; lag <= maximumLag + 1; ++lag) + { + const int comparedSamples = kAnalysisFrameSize - lag; + double cross0 = 0.0; + double cross1 = 0.0; + double cross2 = 0.0; + double cross3 = 0.0; + int sample = 0; + for (; + sample + 3 < comparedSamples; + sample += 4) + { + cross0 += static_cast<double>( + analysisFrame[static_cast<size_t>(sample)]) + * static_cast<double>( + analysisFrame[static_cast<size_t>( + sample + lag)]); + cross1 += static_cast<double>( + analysisFrame[static_cast<size_t>(sample + 1)]) + * static_cast<double>( + analysisFrame[static_cast<size_t>( + sample + lag + 1)]); + cross2 += static_cast<double>( + analysisFrame[static_cast<size_t>(sample + 2)]) + * static_cast<double>( + analysisFrame[static_cast<size_t>( + sample + lag + 2)]); + cross3 += static_cast<double>( + analysisFrame[static_cast<size_t>(sample + 3)]) + * static_cast<double>( + analysisFrame[static_cast<size_t>( + sample + lag + 3)]); + } + double cross = + cross0 + cross1 + cross2 + cross3; + for (; sample < comparedSamples; ++sample) + { + cross += static_cast<double>( + analysisFrame[static_cast<size_t>(sample)]) + * static_cast<double>( + analysisFrame[static_cast<size_t>( + sample + lag)]); + } + + const double energyA = + energyPrefix[static_cast<size_t>(comparedSamples)]; + const double energyB = + energyPrefix[static_cast<size_t>( + comparedSamples + lag)] + - energyPrefix[static_cast<size_t>(lag)]; + const double denominator = energyA + energyB; + if (denominator > 1.0e-18) + { + nsdf[static_cast<size_t>(lag)] = + static_cast<float>( + juce::jlimit( + -1.0, + 1.0, + 2.0 * cross / denominator)); + } + } + + std::array<Peak, kMaximumLagStorage / 2> peaks {}; + int peakCount = 0; + bool crossedNegative = false; + for (int lag = 2; lag <= maximumLag; ++lag) + { + if (nsdf[static_cast<size_t>(lag)] < 0.0f) + crossedNegative = true; + + if (! crossedNegative + || nsdf[static_cast<size_t>(lag)] + <= nsdf[static_cast<size_t>(lag - 1)] + || nsdf[static_cast<size_t>(lag)] + < nsdf[static_cast<size_t>(lag + 1)]) + { + continue; + } + + if (peakCount < static_cast<int>(peaks.size())) + { + peaks[static_cast<size_t>(peakCount)] = { + lag, nsdf[static_cast<size_t>(lag)] + }; + ++peakCount; + } + } + + if (peakCount <= 0) + return result; + + const auto& firstPeak = peaks[0]; + if (firstPeak.lag < minimumLag + && firstPeak.clarity >= 0.92f) + { + return result; + } + + float strongestAllowedPeak = -1.0f; + for (int peakIndex = 0; peakIndex < peakCount; ++peakIndex) + { + const auto& peak = peaks[static_cast<size_t>(peakIndex)]; + if (peak.lag >= minimumLag + && peak.lag <= maximumLag) + { + strongestAllowedPeak = juce::jmax( + strongestAllowedPeak, peak.clarity); + } + } + + if (strongestAllowedPeak < kMinimumClarity) + return result; + + const float relativeThreshold = juce::jmax( + kMinimumClarity, strongestAllowedPeak * 0.90f); + int selectedPeakIndex = -1; + for (int peakIndex = 0; peakIndex < peakCount; ++peakIndex) + { + const auto& peak = peaks[static_cast<size_t>(peakIndex)]; + if (peak.lag >= minimumLag + && peak.lag <= maximumLag + && peak.clarity >= relativeThreshold) + { + selectedPeakIndex = peakIndex; + break; + } + } + + if (selectedPeakIndex < 0) + return result; + + // If a stronger peak at twice the selected period exists, the first + // peak was probably a dominant second/fourth harmonic. Requiring a + // real clarity improvement avoids turning an actual octave change + // into a stale lower-octave lock. + for (int correction = 0; correction < 2; ++correction) + { + const auto selected = + peaks[static_cast<size_t>(selectedPeakIndex)]; + const int doubledLag = selected.lag * 2; + int improvedPeakIndex = -1; + for (int peakIndex = selectedPeakIndex + 1; + peakIndex < peakCount; + ++peakIndex) + { + const auto& peak = + peaks[static_cast<size_t>(peakIndex)]; + if (peak.lag > doubledLag + 2) + break; + if (std::abs(peak.lag - doubledLag) <= 2 + && peak.clarity >= selected.clarity + 0.025f) + { + improvedPeakIndex = peakIndex; + break; + } + } + + if (improvedPeakIndex < 0) + break; + selectedPeakIndex = improvedPeakIndex; + } + + const auto selected = + peaks[static_cast<size_t>(selectedPeakIndex)]; + const float left = + nsdf[static_cast<size_t>(selected.lag - 1)]; + const float centre = + nsdf[static_cast<size_t>(selected.lag)]; + const float right = + nsdf[static_cast<size_t>(selected.lag + 1)]; + const float denominator = + left - 2.0f * centre + right; + float offset = 0.0f; + if (std::abs(denominator) > 1.0e-9f) + { + offset = 0.5f * (left - right) / denominator; + offset = juce::jlimit(-0.5f, 0.5f, offset); + } + + const double refinedLag = + static_cast<double>(selected.lag) + + static_cast<double>(offset); + if (! std::isfinite(refinedLag) || refinedLag <= 0.0) + return result; + + const double frequencyHz = + analysisSampleRate / refinedLag; + if (! std::isfinite(frequencyHz) + || frequencyHz < kMinimumFrequencyHz * 0.995 + || frequencyHz > kMaximumFrequencyHz * 1.005) + { + return result; + } + + result.valid = true; + result.frequencyHz = static_cast<float>(frequencyHz); + result.clarity = juce::jlimit(0.0f, 1.0f, centre); + return result; + } + + void analyseCurrentFrame() noexcept + { + ++snapshot.analysisFrameCounter; + + const double meanSquare = levelSampleCount > 0 + ? levelSquareSum + / static_cast<double>(levelSampleCount) + : 0.0; + snapshot.inputLevelDb = safeDecibels(meanSquare); + snapshot.signalPresent = + snapshot.inputLevelDb >= kSignalThresholdDb; + levelSquareSum = 0.0; + levelSampleCount = 0; + + PitchCandidate candidate; + if (snapshot.signalPresent + && validRingSamples >= kAnalysisFrameSize) + { + candidate = detectPitch(); + } + + if (candidate.valid) + { + handleCandidate(candidate); + } + else + { + handleMissingCandidate(); + } + + updateSnapshotPitchFields(); + } + + void handleCandidate(const PitchCandidate& candidate) noexcept + { + const double candidateCents = + frequencyToAbsoluteCents(candidate.frequencyHz); + if (! std::isfinite(candidateCents)) + { + handleMissingCandidate(); + return; + } + + if (! hasAcceptedPitch) + { + const double candidateWeight = + confidenceInfluence(candidate.clarity); + if (acquisitionCount > 0 + && std::abs( + candidateCents - acquisitionCandidateCents) + <= kCandidateConsistencyCents) + { + const double combinedWeight = + acquisitionCandidateWeight + + candidateWeight; + if (combinedWeight > 0.0) + { + acquisitionCandidateCents += + (candidateCents + - acquisitionCandidateCents) + * candidateWeight + / combinedWeight; + } + acquisitionCandidateWeight = + combinedWeight; + ++acquisitionCount; + } + else + { + // The first usable analysis window can still contain some + // pick energy. Let later consistent windows dominate the + // seed while limiting the extra acquisition cost to one + // analysis hop. + acquisitionCandidateCents = candidateCents; + acquisitionCandidateWeight = + candidateWeight + * kFirstAcquisitionWeight; + acquisitionCount = 1; + } + + snapshot.state = State::acquiring; + snapshot.confidence = candidate.clarity; + if (acquisitionCount >= kAcquisitionFrames) + { + seedAcceptedPitch( + acquisitionCandidateCents, + absoluteCentsToFrequency( + acquisitionCandidateCents), + candidate.clarity); + } + return; + } + + const double distanceFromAverage = + std::abs(candidateCents - averagedAbsoluteCents); + if (distanceFromAverage > kTransitionThresholdCents) + { + if (transitionCount > 0 + && std::abs( + candidateCents - transitionCandidateCents) + <= kCandidateConsistencyCents) + { + transitionCandidateCents = + 0.5 * (transitionCandidateCents + + candidateCents); + ++transitionCount; + } + else + { + transitionCandidateCents = candidateCents; + transitionCount = 1; + } + + const int requiredFrames = + distanceFromAverage >= 700.0 ? 3 : 2; + if (transitionCount >= requiredFrames) + { + seedAcceptedPitch( + transitionCandidateCents, + candidate.frequencyHz, + candidate.clarity); + } + return; + } + + transitionCount = 0; + acceptTrackedPitch( + candidateCents, + candidate.frequencyHz, + candidate.clarity); + } + + void seedAcceptedPitch(double candidateCents, + float frequencyHz, + float confidence) noexcept + { + pitchHistory.fill(candidateCents); + pitchHistoryCount = 1; + pitchHistoryWriteIndex = 1; + averagedAbsoluteCents = candidateCents; + instantaneousAbsoluteCents = candidateCents; + stableMidiNote = roundedMidiNote(candidateCents); + pendingMidiNote = -1; + pendingMidiCount = 0; + acquisitionCount = 0; + acquisitionCandidateWeight = 0.0; + transitionCount = 0; + hasAcceptedPitch = true; + lastAcceptedAnalysisSample = totalAnalysisSamples; + lastConfidence = confidence; + + snapshot.state = State::tracking; + snapshot.pitchLocked = true; + snapshot.instantaneousFrequencyHz = frequencyHz; + snapshot.confidence = confidence; + ++snapshot.pitchUpdateCounter; + } + + void acceptTrackedPitch(double candidateCents, + float frequencyHz, + float confidence) noexcept + { + pitchHistory[ + static_cast<size_t>(pitchHistoryWriteIndex)] = + candidateCents; + pitchHistoryWriteIndex = + (pitchHistoryWriteIndex + 1) % kPitchMedianSize; + pitchHistoryCount = juce::jmin( + kPitchMedianSize, pitchHistoryCount + 1); + + std::array<double, kPitchMedianSize> sorted {}; + for (int index = 0; index < pitchHistoryCount; ++index) + sorted[static_cast<size_t>(index)] = + pitchHistory[static_cast<size_t>(index)]; + std::sort( + sorted.begin(), + sorted.begin() + pitchHistoryCount); + const double medianCents = + sorted[static_cast<size_t>(pitchHistoryCount / 2)]; + + const double hopSeconds = + static_cast<double>(kAnalysisHopSize) + / analysisSampleRate; + const double alpha = juce::jlimit( + 0.02, + 1.0, + 1.0 - std::exp( + -hopSeconds + * confidenceInfluence(confidence) + / kAverageTimeConstantSeconds)); + averagedAbsoluteCents += + (medianCents - averagedAbsoluteCents) * alpha; + instantaneousAbsoluteCents = candidateCents; + updateMidiHysteresis(); + + lastAcceptedAnalysisSample = totalAnalysisSamples; + lastConfidence = confidence; + snapshot.state = State::tracking; + snapshot.pitchLocked = true; + snapshot.instantaneousFrequencyHz = frequencyHz; + snapshot.confidence = confidence; + ++snapshot.pitchUpdateCounter; + } + + void updateMidiHysteresis() noexcept + { + if (stableMidiNote < 0) + { + stableMidiNote = + roundedMidiNote(averagedAbsoluteCents); + return; + } + + const int targetMidi = + roundedMidiNote(averagedAbsoluteCents); + if (targetMidi == stableMidiNote) + { + pendingMidiNote = -1; + pendingMidiCount = 0; + return; + } + + const double centsFromStableCentre = + std::abs( + averagedAbsoluteCents + - static_cast<double>(stableMidiNote) * 100.0); + if (centsFromStableCentre < 58.0) + { + pendingMidiNote = -1; + pendingMidiCount = 0; + return; + } + + if (pendingMidiNote == targetMidi) + { + ++pendingMidiCount; + } + else + { + pendingMidiNote = targetMidi; + pendingMidiCount = 1; + } + + if (pendingMidiCount >= 2) + { + stableMidiNote = targetMidi; + pendingMidiNote = -1; + pendingMidiCount = 0; + } + } + + void handleMissingCandidate() noexcept + { + acquisitionCount = 0; + acquisitionCandidateWeight = 0.0; + transitionCount = 0; + + if (! hasAcceptedPitch) + { + snapshot.state = snapshot.signalPresent + ? State::acquiring + : State::idle; + snapshot.pitchLocked = false; + snapshot.confidence = 0.0f; + return; + } + + const double ageSeconds = + static_cast<double>( + totalAnalysisSamples + - lastAcceptedAnalysisSample) + / analysisSampleRate; + if (ageSeconds >= kReleaseSeconds) + { + clearAcceptedPitch(); + return; + } + + snapshot.state = State::holding; + snapshot.pitchLocked = true; + if (ageSeconds <= kSteadyHoldSeconds) + { + snapshot.confidence = lastConfidence; + } + else + { + const double fadeProgress = juce::jlimit( + 0.0, + 1.0, + (ageSeconds - kSteadyHoldSeconds) + / (kReleaseSeconds + - kSteadyHoldSeconds)); + snapshot.confidence = + lastConfidence + * static_cast<float>( + 1.0 - fadeProgress); + } + } + + void clearAcceptedPitch() noexcept + { + hasAcceptedPitch = false; + pitchHistoryCount = 0; + pitchHistoryWriteIndex = 0; + averagedAbsoluteCents = 0.0; + instantaneousAbsoluteCents = 0.0; + stableMidiNote = -1; + pendingMidiNote = -1; + pendingMidiCount = 0; + lastConfidence = 0.0f; + snapshot.state = State::idle; + snapshot.pitchLocked = false; + snapshot.instantaneousFrequencyHz = 0.0f; + snapshot.averageFrequencyHz = 0.0f; + snapshot.instantaneousCents = 0.0f; + snapshot.averageCents = 0.0f; + snapshot.varianceCents = 0.0f; + snapshot.confidence = 0.0f; + snapshot.midiNote = -1; + snapshot.ageMs = 0.0; + } + + void updateSnapshotPitchFields() noexcept + { + if (! hasAcceptedPitch) + return; + + snapshot.pitchLocked = + snapshot.state == State::tracking + || snapshot.state == State::holding; + snapshot.averageFrequencyHz = + absoluteCentsToFrequency( + averagedAbsoluteCents); + snapshot.midiNote = stableMidiNote; + snapshot.instantaneousCents = + static_cast<float>( + instantaneousAbsoluteCents + - static_cast<double>(stableMidiNote) * 100.0); + snapshot.averageCents = + static_cast<float>( + averagedAbsoluteCents + - static_cast<double>(stableMidiNote) * 100.0); + + double variance = 0.0; + if (pitchHistoryCount > 1) + { + double mean = 0.0; + for (int index = 0; + index < pitchHistoryCount; + ++index) + { + mean += pitchHistory[static_cast<size_t>(index)]; + } + mean /= static_cast<double>(pitchHistoryCount); + + for (int index = 0; + index < pitchHistoryCount; + ++index) + { + const double difference = + pitchHistory[static_cast<size_t>(index)] + - mean; + variance += difference * difference; + } + variance /= static_cast<double>(pitchHistoryCount); + } + snapshot.varianceCents = + static_cast<float>(std::sqrt(variance)); + snapshot.ageMs = + 1000.0 + * static_cast<double>( + totalAnalysisSamples + - lastAcceptedAnalysisSample) + / analysisSampleRate; + } + + double sourceSampleRate = 48000.0; + double analysisSampleRate = 12000.0; + int decimationFactor = 4; + int decimationPhase = 0; + float lowPassAlpha = 0.25f; + float highPassCoefficient = 0.998f; + float inputHighPassX1 = 0.0f; + float inputHighPassY1 = 0.0f; + std::array<float, 4> lowPassStates {}; + + std::array<float, kAnalysisFrameSize> analysisRing {}; + std::array<float, kAnalysisFrameSize> analysisFrame {}; + std::array<float, kMaximumLagStorage> nsdf {}; + std::array<double, kAnalysisFrameSize + 1> energyPrefix {}; + int ringWriteIndex = 0; + int validRingSamples = 0; + int samplesSinceAnalysis = 0; + std::uint64_t totalAnalysisSamples = 0; + + double levelSquareSum = 0.0; + int levelSampleCount = 0; + std::uint64_t lastAcceptedAnalysisSample = 0; + bool hasAcceptedPitch = false; + + int acquisitionCount = 0; + double acquisitionCandidateCents = 0.0; + double acquisitionCandidateWeight = 0.0; + int transitionCount = 0; + double transitionCandidateCents = 0.0; + + std::array<double, kPitchMedianSize> pitchHistory {}; + int pitchHistoryCount = 0; + int pitchHistoryWriteIndex = 0; + double averagedAbsoluteCents = 0.0; + double instantaneousAbsoluteCents = 0.0; + int stableMidiNote = -1; + int pendingMidiNote = -1; + int pendingMidiCount = 0; + float lastConfidence = 0.0f; + Snapshot snapshot; +}; + +TunerPitchTracker::TunerPitchTracker() + : juce::Thread("NAM tuner pitch analysis"), + fifo(std::make_unique< + std::array<FifoSample, fifoCapacity>>()) +{ +} + +TunerPitchTracker::~TunerPitchTracker() +{ + stopWorker(); +} + +void TunerPitchTracker::prepare(double sourceSampleRate, + int maximumBlockSize) +{ + const bool wasEnabled = + enabled.exchange(false, std::memory_order_acq_rel); + stopWorker(); + + testingMode.store(false, std::memory_order_release); + preparedSampleRate = + std::isfinite(sourceSampleRate) + && sourceSampleRate >= 8000.0 + ? sourceSampleRate + : 48000.0; + preparedMaximumBlockSize = + juce::jmax(1, maximumBlockSize); + juce::ignoreUnused(preparedMaximumBlockSize); + const int decimationFactor = juce::jlimit( + 1, + 64, + juce::roundToInt( + preparedSampleRate / kTargetAnalysisRate)); + const int firstCompleteAnalysisFrame = + ((kAnalysisFrameSize + kAnalysisHopSize - 1) + / kAnalysisHopSize) + * kAnalysisHopSize; + const auto minimumFreshWindowSamples = + static_cast<std::uint32_t>( + (firstCompleteAnalysisFrame + + (kAcquisitionFrames - 1) + * kAnalysisHopSize) + * decimationFactor); + const auto latencyWindowSamples = + static_cast<std::uint32_t>( + juce::roundToInt( + preparedSampleRate + * kMaximumWorkerQueueSeconds)); + maximumQueuedSamples = juce::jlimit( + 1u, + fifoCapacity, + juce::jmax( + minimumFreshWindowSamples, + latencyWindowSamples)); + analysisCore = + std::make_unique<AnalysisCore>(preparedSampleRate); + + fifoReadCounter.store(0, std::memory_order_relaxed); + fifoWriteCounter.store(0, std::memory_order_relaxed); + droppedFifoSamples.store(0, std::memory_order_relaxed); + producerOverflowed.store(false, std::memory_order_relaxed); + resetProducerSelection(); + const auto generation = + routeGeneration.fetch_add( + 1, std::memory_order_acq_rel) + 1; + publishSnapshot({}, generation); + + startThread(juce::Thread::Priority::low); + enabled.store(wasEnabled, std::memory_order_release); + if (wasEnabled) + notify(); +} + +void TunerPitchTracker::setEnabled(bool shouldBeEnabled) noexcept +{ + if (testingMode.load(std::memory_order_acquire)) + { + enabled.store(shouldBeEnabled, std::memory_order_release); + if (! shouldBeEnabled && analysisCore != nullptr) + { + analysisCore->reset(); + const auto generation = + routeGeneration.fetch_add( + 1, std::memory_order_acq_rel) + 1; + publishSnapshot({}, generation); + } + return; + } + + const bool previous = + enabled.exchange( + shouldBeEnabled, std::memory_order_acq_rel); + if (previous == shouldBeEnabled) + return; + + routeGeneration.fetch_add( + 1, std::memory_order_acq_rel); + notify(); +} + +bool TunerPitchTracker::isEnabled() const noexcept +{ + return enabled.load(std::memory_order_acquire); +} + +std::uint32_t +TunerPitchTracker::resetForRouteChange() noexcept +{ + selectedChannel.store(-1, std::memory_order_relaxed); + const auto generation = + routeGeneration.fetch_add( + 1, std::memory_order_acq_rel) + 1; + + if (testingMode.load(std::memory_order_acquire) + && analysisCore != nullptr) + { + analysisCore->reset(); + publishSnapshot({}, generation); + return generation; + } + + notify(); + return generation; +} + +std::uint32_t +TunerPitchTracker::getGenerationToken() const noexcept +{ + return routeGeneration.load(std::memory_order_acquire); +} + +void TunerPitchTracker::pushAudio(const float* const* channels, + int numChannels, + int numSamples, + std::uint32_t expectedGeneration) noexcept +{ + if (! enabled.load(std::memory_order_relaxed) + || testingMode.load(std::memory_order_relaxed) + || numSamples <= 0) + { + return; + } + + const auto currentGeneration = + routeGeneration.load(std::memory_order_acquire); + const auto generation = + expectedGeneration != 0 + ? expectedGeneration + : currentGeneration; + if (generation != currentGeneration) + return; + + if (producerGeneration != generation) + { + producerSelectedChannel = -1; + producerGeneration = generation; + } + + if (channels == nullptr || numChannels <= 0) + { + selectedChannel.store(-1, std::memory_order_relaxed); + writeToFifo(nullptr, numSamples, generation); + return; + } + + const int channel = + chooseStrongestChannel( + channels, numChannels, numSamples); + if (channel < 0 || channels[channel] == nullptr) + { + selectedChannel.store(-1, std::memory_order_relaxed); + writeToFifo(nullptr, numSamples, generation); + return; + } + + writeToFifo( + channels[channel], numSamples, generation); + if (routeGeneration.load(std::memory_order_relaxed) + == generation) + { + selectedChannel.store( + channel, std::memory_order_relaxed); + } +} + +void TunerPitchTracker::pushSilence( + int numSamples, + std::uint32_t expectedGeneration) noexcept +{ + if (! enabled.load(std::memory_order_relaxed) + || testingMode.load(std::memory_order_relaxed) + || numSamples <= 0) + { + return; + } + + const auto currentGeneration = + routeGeneration.load(std::memory_order_acquire); + const auto generation = + expectedGeneration != 0 + ? expectedGeneration + : currentGeneration; + if (generation != currentGeneration) + return; + + if (producerGeneration != generation) + { + producerSelectedChannel = -1; + producerGeneration = generation; + } + selectedChannel.store(-1, std::memory_order_relaxed); + writeToFifo(nullptr, numSamples, generation); +} + +void TunerPitchTracker::writeToFifo( + const float* source, + int numSamples, + std::uint32_t generation) noexcept +{ + const auto write = + fifoWriteCounter.load(std::memory_order_relaxed); + const auto read = + fifoReadCounter.load(std::memory_order_acquire); + const auto used = write - read; + const auto requested = + static_cast<std::uint32_t>(numSamples); + if (used > fifoCapacity + || requested > fifoCapacity - used) + { + droppedFifoSamples.fetch_add( + requested, std::memory_order_relaxed); + producerOverflowed.store( + true, std::memory_order_release); + return; + } + + for (std::uint32_t sample = 0; + sample < requested; + ++sample) + { + const float value = + source != nullptr ? source[sample] : 0.0f; + (*fifo)[static_cast<size_t>( + (write + sample) & fifoMask)] = { + std::isfinite(value) ? value : 0.0f, + generation + }; + } + + fifoWriteCounter.store( + write + requested, std::memory_order_release); +} + +TunerPitchTracker::Snapshot +TunerPitchTracker::getSnapshot() const noexcept +{ + Snapshot result; + result.enabled = + enabled.load(std::memory_order_acquire); + if (! result.enabled) + return result; + + std::uint32_t publishedGeneration = 0; + bool coherent = false; + for (int attempt = 0; attempt < 12; ++attempt) + { + const auto sequenceBefore = + published.sequence.load(std::memory_order_acquire); + if ((sequenceBefore & 1u) != 0u) + continue; + + publishedGeneration = + published.generation.load(std::memory_order_relaxed); + result.state = static_cast<State>( + published.state.load(std::memory_order_relaxed)); + result.signalPresent = + published.signalPresent.load(std::memory_order_relaxed); + result.pitchLocked = + published.pitchLocked.load(std::memory_order_relaxed); + result.instantaneousFrequencyHz = + published.instantaneousFrequencyHz.load( + std::memory_order_relaxed); + result.averageFrequencyHz = + published.averageFrequencyHz.load( + std::memory_order_relaxed); + result.instantaneousCents = + published.instantaneousCents.load( + std::memory_order_relaxed); + result.averageCents = + published.averageCents.load( + std::memory_order_relaxed); + result.varianceCents = + published.varianceCents.load( + std::memory_order_relaxed); + result.confidence = + published.confidence.load( + std::memory_order_relaxed); + result.inputLevelDb = + published.inputLevelDb.load( + std::memory_order_relaxed); + result.midiNote = + published.midiNote.load(std::memory_order_relaxed); + result.selectedChannel = + published.selectedChannel.load( + std::memory_order_relaxed); + result.pitchUpdateCounter = + published.pitchUpdateCounter.load( + std::memory_order_relaxed); + result.analysisFrameCounter = + published.analysisFrameCounter.load( + std::memory_order_relaxed); + result.droppedFifoSamples = + published.droppedFifoSamples.load( + std::memory_order_relaxed); + result.ageMs = + published.ageMs.load(std::memory_order_relaxed); + + const auto sequenceAfter = + published.sequence.load(std::memory_order_acquire); + if (sequenceBefore == sequenceAfter + && (sequenceAfter & 1u) == 0u) + { + coherent = true; + break; + } + } + + const auto currentGeneration = + routeGeneration.load(std::memory_order_acquire); + if (! coherent + || publishedGeneration != currentGeneration) + { + Snapshot idle; + idle.enabled = true; + idle.selectedChannel = + selectedChannel.load(std::memory_order_relaxed); + idle.droppedFifoSamples = + droppedFifoSamples.load(std::memory_order_relaxed); + return idle; + } + + return result; +} + +void TunerPitchTracker::prepareForTesting(double sourceSampleRate) +{ + enabled.store(false, std::memory_order_release); + stopWorker(); + + testingMode.store(true, std::memory_order_release); + preparedSampleRate = + std::isfinite(sourceSampleRate) + && sourceSampleRate >= 8000.0 + ? sourceSampleRate + : 48000.0; + analysisCore = + std::make_unique<AnalysisCore>(preparedSampleRate); + droppedFifoSamples.store(0, std::memory_order_relaxed); + producerOverflowed.store(false, std::memory_order_relaxed); + resetProducerSelection(); + const auto generation = + routeGeneration.fetch_add( + 1, std::memory_order_acq_rel) + 1; + enabled.store(true, std::memory_order_release); + publishSnapshot({}, generation); +} + +void TunerPitchTracker::processAudioForTesting( + const float* const* channels, + int numChannels, + int numSamples) noexcept +{ + if (! testingMode.load(std::memory_order_acquire) + || ! enabled.load(std::memory_order_acquire) + || analysisCore == nullptr + || channels == nullptr + || numChannels <= 0 + || numSamples <= 0) + { + return; + } + + const auto generation = + routeGeneration.load(std::memory_order_relaxed); + if (producerGeneration != generation) + { + producerSelectedChannel = -1; + producerGeneration = generation; + } + + const int channel = + chooseStrongestChannel( + channels, numChannels, numSamples); + if (channel < 0 || channels[channel] == nullptr) + return; + + selectedChannel.store( + channel, std::memory_order_relaxed); + analysisCore->process(channels[channel], numSamples); + auto result = analysisCore->getSnapshot(); + result.enabled = true; + result.selectedChannel = channel; + result.droppedFifoSamples = 0; + publishSnapshot( + result, + routeGeneration.load(std::memory_order_acquire)); +} + +void TunerPitchTracker::processMonoForTesting( + const float* samples, + int numSamples) noexcept +{ + const float* channels[] { samples }; + processAudioForTesting(channels, 1, numSamples); +} + +void TunerPitchTracker::run() +{ + std::uint32_t workerGeneration = 0; + + while (! threadShouldExit()) + { + if (! enabled.load(std::memory_order_acquire)) + { + wait(-1.0); + continue; + } + + const auto currentGeneration = + routeGeneration.load(std::memory_order_acquire); + if (workerGeneration != currentGeneration) + { + workerGeneration = currentGeneration; + const auto write = + fifoWriteCounter.load(std::memory_order_acquire); + fifoReadCounter.store(write, std::memory_order_release); + if (analysisCore != nullptr) + { + analysisCore->reset(); + auto resetSnapshot = + analysisCore->getSnapshot(); + resetSnapshot.enabled = true; + resetSnapshot.selectedChannel = + selectedChannel.load( + std::memory_order_relaxed); + resetSnapshot.droppedFifoSamples = + droppedFifoSamples.load( + std::memory_order_relaxed); + publishSnapshot( + resetSnapshot, workerGeneration); + } + } + + if (producerOverflowed.exchange( + false, std::memory_order_acq_rel)) + { + // Once incoming callbacks have been dropped, the remaining FIFO + // no longer represents the newest live audio. Discard it rather + // than displaying a pitch from several seconds in the past. + const auto write = + fifoWriteCounter.load(std::memory_order_acquire); + fifoReadCounter.store( + write, std::memory_order_release); + if (analysisCore != nullptr) + { + analysisCore->reset(); + auto resetSnapshot = + analysisCore->getSnapshot(); + resetSnapshot.enabled = true; + resetSnapshot.selectedChannel = + selectedChannel.load( + std::memory_order_relaxed); + resetSnapshot.droppedFifoSamples = + droppedFifoSamples.load( + std::memory_order_relaxed); + publishSnapshot( + resetSnapshot, workerGeneration); + } + continue; + } + + auto read = + fifoReadCounter.load(std::memory_order_relaxed); + const auto write = + fifoWriteCounter.load(std::memory_order_acquire); + auto available = write - read; + if (available == 0) + { + wait(4); + continue; + } + + if (available > maximumQueuedSamples) + { + const auto staleSamples = + available - maximumQueuedSamples; + read += staleSamples; + available -= staleSamples; + fifoReadCounter.store( + read, std::memory_order_release); + droppedFifoSamples.fetch_add( + staleSamples, std::memory_order_relaxed); + + // Keeping the old temporal state after fast-forwarding would + // combine a stale pitch with the newest audio. Reacquire from + // the retained recent window instead. + if (analysisCore != nullptr) + { + analysisCore->reset(); + auto resetSnapshot = + analysisCore->getSnapshot(); + resetSnapshot.enabled = true; + resetSnapshot.selectedChannel = + selectedChannel.load( + std::memory_order_relaxed); + resetSnapshot.droppedFifoSamples = + droppedFifoSamples.load( + std::memory_order_relaxed); + publishSnapshot( + resetSnapshot, workerGeneration); + } + } + + const auto toRead = juce::jmin( + available, + static_cast<std::uint32_t>( + workerScratchCapacity)); + int matchingSamples = 0; + for (std::uint32_t sample = 0; + sample < toRead; + ++sample) + { + const auto& fifoSample = + (*fifo)[static_cast<size_t>( + (read + sample) & fifoMask)]; + if (fifoSample.generation + == workerGeneration) + { + workerScratch[static_cast<size_t>( + matchingSamples)] = + fifoSample.value; + ++matchingSamples; + } + } + fifoReadCounter.store( + read + toRead, std::memory_order_release); + + if (analysisCore == nullptr + || matchingSamples <= 0) + continue; + + analysisCore->process( + workerScratch.data(), + matchingSamples); + + if (! enabled.load(std::memory_order_acquire) + || routeGeneration.load(std::memory_order_acquire) + != workerGeneration) + { + continue; + } + + auto result = analysisCore->getSnapshot(); + result.enabled = true; + result.selectedChannel = + selectedChannel.load(std::memory_order_relaxed); + result.droppedFifoSamples = + droppedFifoSamples.load(std::memory_order_relaxed); + publishSnapshot(result, workerGeneration); + } +} + +void TunerPitchTracker::stopWorker() noexcept +{ + if (! isThreadRunning()) + return; + + signalThreadShouldExit(); + notify(); + stopThread(2000); +} + +void TunerPitchTracker::publishSnapshot( + const Snapshot& snapshot, + std::uint32_t generation) noexcept +{ + published.sequence.fetch_add( + 1, std::memory_order_acq_rel); + published.generation.store( + generation, std::memory_order_relaxed); + published.state.store( + static_cast<int>(snapshot.state), + std::memory_order_relaxed); + published.signalPresent.store( + snapshot.signalPresent, std::memory_order_relaxed); + published.pitchLocked.store( + snapshot.pitchLocked, std::memory_order_relaxed); + published.instantaneousFrequencyHz.store( + snapshot.instantaneousFrequencyHz, + std::memory_order_relaxed); + published.averageFrequencyHz.store( + snapshot.averageFrequencyHz, + std::memory_order_relaxed); + published.instantaneousCents.store( + snapshot.instantaneousCents, + std::memory_order_relaxed); + published.averageCents.store( + snapshot.averageCents, + std::memory_order_relaxed); + published.varianceCents.store( + snapshot.varianceCents, + std::memory_order_relaxed); + published.confidence.store( + snapshot.confidence, std::memory_order_relaxed); + published.inputLevelDb.store( + snapshot.inputLevelDb, std::memory_order_relaxed); + published.midiNote.store( + snapshot.midiNote, std::memory_order_relaxed); + published.selectedChannel.store( + snapshot.selectedChannel, std::memory_order_relaxed); + published.pitchUpdateCounter.store( + snapshot.pitchUpdateCounter, + std::memory_order_relaxed); + published.analysisFrameCounter.store( + snapshot.analysisFrameCounter, + std::memory_order_relaxed); + published.droppedFifoSamples.store( + snapshot.droppedFifoSamples, + std::memory_order_relaxed); + published.ageMs.store( + snapshot.ageMs, std::memory_order_relaxed); + published.sequence.fetch_add( + 1, std::memory_order_release); +} + +void TunerPitchTracker::resetProducerSelection() noexcept +{ + producerSelectedChannel = -1; + producerGeneration = + routeGeneration.load(std::memory_order_relaxed); + selectedChannel.store(-1, std::memory_order_relaxed); +} + +int TunerPitchTracker::chooseStrongestChannel( + const float* const* channels, + int numChannels, + int numSamples) noexcept +{ + if (channels == nullptr + || numChannels <= 0 + || numSamples <= 0) + { + return -1; + } + + constexpr int maximumScannedChannels = 8; + const int scannedChannels = juce::jmin( + numChannels, maximumScannedChannels); + int strongestChannel = -1; + double strongestEnergy = -1.0; + double currentEnergy = -1.0; + + for (int channel = 0; + channel < scannedChannels; + ++channel) + { + const auto* source = channels[channel]; + if (source == nullptr) + continue; + + double energy = 0.0; + for (int sample = 0; sample < numSamples; ++sample) + { + const float value = source[sample]; + if (std::isfinite(value)) + { + energy += + static_cast<double>(value) + * static_cast<double>(value); + } + } + + if (channel == producerSelectedChannel) + currentEnergy = energy; + if (energy > strongestEnergy) + { + strongestEnergy = energy; + strongestChannel = channel; + } + } + + if (producerSelectedChannel >= 0 + && producerSelectedChannel < scannedChannels + && channels[producerSelectedChannel] != nullptr + && currentEnergy >= 0.0 + && (strongestEnergy <= 0.0 + || currentEnergy >= strongestEnergy * 0.65)) + { + strongestChannel = producerSelectedChannel; + } + + producerSelectedChannel = strongestChannel; + return strongestChannel; +} diff --git a/Source/TunerPitchTracker.h b/Source/TunerPitchTracker.h new file mode 100644 index 0000000..1d5aae7 --- /dev/null +++ b/Source/TunerPitchTracker.h @@ -0,0 +1,159 @@ +#pragma once + +#include <JuceHeader.h> + +#include <array> +#include <atomic> +#include <cstdint> +#include <memory> + +/** + * Real-time-safe input pitch tracker used by the NAM Rack tuner. + * + * The audio callback only selects one input channel and copies it into a + * preallocated SPSC FIFO. Downsampling, pitch detection, temporal tracking, + * and display averaging all run on the worker thread. + */ +class TunerPitchTracker final : private juce::Thread +{ +public: + enum class State : std::uint8_t + { + idle = 0, + acquiring, + tracking, + holding + }; + + struct Snapshot + { + bool enabled = false; + bool signalPresent = false; + bool pitchLocked = false; + State state = State::idle; + + float instantaneousFrequencyHz = 0.0f; + float averageFrequencyHz = 0.0f; + float instantaneousCents = 0.0f; + float averageCents = 0.0f; + float varianceCents = 0.0f; + float confidence = 0.0f; + float inputLevelDb = -120.0f; + + int midiNote = -1; + int selectedChannel = -1; + + std::uint64_t pitchUpdateCounter = 0; + std::uint64_t analysisFrameCounter = 0; + std::uint32_t droppedFifoSamples = 0; + double ageMs = 0.0; + }; + + TunerPitchTracker(); + ~TunerPitchTracker() override; + + void prepare(double sourceSampleRate, int maximumBlockSize); + void setEnabled(bool shouldBeEnabled) noexcept; + [[nodiscard]] bool isEnabled() const noexcept; + [[nodiscard]] std::uint32_t + resetForRouteChange() noexcept; + [[nodiscard]] std::uint32_t + getGenerationToken() const noexcept; + + /** + * Audio-thread producer entry point. This method does not allocate, lock, + * wait, log, or perform pitch analysis. + */ + void pushAudio(const float* const* channels, + int numChannels, + int numSamples, + std::uint32_t expectedGeneration = 0) noexcept; + void pushSilence( + int numSamples, + std::uint32_t expectedGeneration = 0) noexcept; + + [[nodiscard]] Snapshot getSnapshot() const noexcept; + + /** + * Deterministic synchronous mode for native regression probes. It drives + * the same downsampler, detector, state machine, and averaging code as the + * worker without sleeping or depending on wall-clock time. + */ + void prepareForTesting(double sourceSampleRate); + void processAudioForTesting(const float* const* channels, + int numChannels, + int numSamples) noexcept; + void processMonoForTesting(const float* samples, + int numSamples) noexcept; + +private: + class AnalysisCore; + + static constexpr std::uint32_t fifoCapacity = 1u << 18; + static constexpr std::uint32_t fifoMask = fifoCapacity - 1u; + static constexpr int workerScratchCapacity = 4096; + + struct FifoSample + { + float value = 0.0f; + std::uint32_t generation = 0; + }; + + struct PublishedState + { + std::atomic<std::uint32_t> sequence { 0 }; + std::atomic<std::uint32_t> generation { 0 }; + std::atomic<int> state { + static_cast<int>(State::idle) + }; + std::atomic<bool> signalPresent { false }; + std::atomic<bool> pitchLocked { false }; + std::atomic<float> instantaneousFrequencyHz { 0.0f }; + std::atomic<float> averageFrequencyHz { 0.0f }; + std::atomic<float> instantaneousCents { 0.0f }; + std::atomic<float> averageCents { 0.0f }; + std::atomic<float> varianceCents { 0.0f }; + std::atomic<float> confidence { 0.0f }; + std::atomic<float> inputLevelDb { -120.0f }; + std::atomic<int> midiNote { -1 }; + std::atomic<int> selectedChannel { -1 }; + std::atomic<std::uint64_t> pitchUpdateCounter { 0 }; + std::atomic<std::uint64_t> analysisFrameCounter { 0 }; + std::atomic<std::uint32_t> droppedFifoSamples { 0 }; + std::atomic<double> ageMs { 0.0 }; + }; + + void run() override; + void stopWorker() noexcept; + void publishSnapshot(const Snapshot& snapshot, + std::uint32_t generation) noexcept; + void resetProducerSelection() noexcept; + int chooseStrongestChannel(const float* const* channels, + int numChannels, + int numSamples) noexcept; + void writeToFifo(const float* source, + int numSamples, + std::uint32_t generation) noexcept; + + std::unique_ptr<std::array<FifoSample, fifoCapacity>> fifo; + std::array<float, workerScratchCapacity> workerScratch {}; + std::atomic<std::uint32_t> fifoReadCounter { 0 }; + std::atomic<std::uint32_t> fifoWriteCounter { 0 }; + std::atomic<std::uint32_t> droppedFifoSamples { 0 }; + std::atomic<bool> producerOverflowed { false }; + std::atomic<std::uint32_t> routeGeneration { 1 }; + std::atomic<bool> enabled { false }; + std::atomic<bool> testingMode { false }; + std::atomic<int> selectedChannel { -1 }; + + int producerSelectedChannel = -1; + std::uint32_t producerGeneration = 0; + double preparedSampleRate = 48000.0; + int preparedMaximumBlockSize = 512; + std::uint32_t maximumQueuedSamples = 12000; + + std::unique_ptr<AnalysisCore> analysisCore; + PublishedState published; + + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(TunerPitchTracker) +}; diff --git a/Source/VideoReader.cpp b/Source/VideoReader.cpp index edc86f3..82db013 100644 --- a/Source/VideoReader.cpp +++ b/Source/VideoReader.cpp @@ -1,4 +1,5 @@ #include "VideoReader.h" +#include "FFmpegLocator.h" VideoReader::VideoReader() { @@ -12,14 +13,7 @@ VideoReader::~VideoReader() juce::File VideoReader::findFFmpeg() const { - // Look next to the executable first - auto exeDir = juce::File::getSpecialLocation(juce::File::currentExecutableFile).getParentDirectory(); - auto ffmpeg = exeDir.getChildFile("ffmpeg.exe"); - if (ffmpeg.existsAsFile()) - return ffmpeg; - - // Try PATH - return juce::File("ffmpeg"); + return OpenStudioFFmpeg::findExecutable(); } bool VideoReader::openFile(const juce::String& filePath, const juce::File& audioOutputDir) @@ -58,18 +52,26 @@ void VideoReader::closeFile() bool VideoReader::parseMetadata(const juce::String& filePath) { - if (!ffmpegExe.existsAsFile() && ffmpegExe.getFullPathName() != "ffmpeg") + if (! ffmpegExe.existsAsFile()) return false; // Use ffmpeg -i to get metadata (writes to stderr) juce::ChildProcess proc; - juce::String cmd = "\"" + ffmpegExe.getFullPathName() + "\" -i \"" + filePath + "\" -hide_banner"; + juce::StringArray args; + args.add(ffmpegExe.getFullPathName()); + args.add("-i"); + args.add(filePath); + args.add("-hide_banner"); - if (!proc.start(cmd)) + if (! proc.start(args)) return false; // ffmpeg -i exits with error code 1 but writes metadata to stderr - proc.waitForProcessToFinish(10000); + if (! proc.waitForProcessToFinish(10000)) + { + proc.kill(); + return false; + } juce::String output = proc.readAllProcessOutput(); // Parse duration: "Duration: HH:MM:SS.ms" @@ -136,20 +138,33 @@ bool VideoReader::parseMetadata(const juce::String& filePath) bool VideoReader::extractAudio(const juce::String& videoPath, const juce::File& outputWav) { - if (!ffmpegExe.existsAsFile() && ffmpegExe.getFullPathName() != "ffmpeg") + if (! ffmpegExe.existsAsFile()) return false; if (outputWav.existsAsFile()) outputWav.deleteFile(); - juce::String cmd = "\"" + ffmpegExe.getFullPathName() + "\" -i \"" + videoPath + - "\" -vn -acodec pcm_s24le -ar 48000 -y \"" + outputWav.getFullPathName() + "\""; + juce::StringArray args; + args.add(ffmpegExe.getFullPathName()); + args.add("-i"); + args.add(videoPath); + args.add("-vn"); + args.add("-acodec"); + args.add("pcm_s24le"); + args.add("-ar"); + args.add("48000"); + args.add("-y"); + args.add(outputWav.getFullPathName()); juce::ChildProcess proc; - if (!proc.start(cmd)) + if (! proc.start(args)) return false; - proc.waitForProcessToFinish(60000); // Up to 60 seconds + if (! proc.waitForProcessToFinish(60000)) + { + proc.kill(); + return false; + } return outputWav.existsAsFile(); } @@ -158,7 +173,7 @@ juce::String VideoReader::getFrameAtTime(double timeSeconds, int outputWidth, in if (!fileOpen || info.filePath.isEmpty()) return {}; - if (!ffmpegExe.existsAsFile() && ffmpegExe.getFullPathName() != "ffmpeg") + if (! ffmpegExe.existsAsFile()) return {}; // Extract a single frame as JPEG to a temp file @@ -168,15 +183,30 @@ juce::String VideoReader::getFrameAtTime(double timeSeconds, int outputWidth, in juce::String timeStr = juce::String(timeSeconds, 3); juce::String scaleFilter = "scale=" + juce::String(outputWidth) + ":" + juce::String(outputHeight); - juce::String cmd = "\"" + ffmpegExe.getFullPathName() + "\" -ss " + timeStr + - " -i \"" + info.filePath + "\" -vf \"" + scaleFilter + - "\" -frames:v 1 -q:v 2 -y \"" + tempFile.getFullPathName() + "\""; + juce::StringArray args; + args.add(ffmpegExe.getFullPathName()); + args.add("-ss"); + args.add(timeStr); + args.add("-i"); + args.add(info.filePath); + args.add("-vf"); + args.add(scaleFilter); + args.add("-frames:v"); + args.add("1"); + args.add("-q:v"); + args.add("2"); + args.add("-y"); + args.add(tempFile.getFullPathName()); juce::ChildProcess proc; - if (!proc.start(cmd)) + if (! proc.start(args)) return {}; - proc.waitForProcessToFinish(5000); + if (! proc.waitForProcessToFinish(5000)) + { + proc.kill(); + return {}; + } if (!tempFile.existsAsFile()) return {}; diff --git a/Source/VideoReader.h b/Source/VideoReader.h index 136f1b2..6b0fc72 100644 --- a/Source/VideoReader.h +++ b/Source/VideoReader.h @@ -36,7 +36,7 @@ class VideoReader // Uses FFmpeg to seek and extract one frame juce::String getFrameAtTime(double timeSeconds, int outputWidth = 320, int outputHeight = 180); - // Set the FFmpeg executable path (defaults to adjacent ffmpeg.exe) + // Set the FFmpeg executable path (defaults to app candidates, then PATH) void setFFmpegPath(const juce::File& path) { ffmpegExe = path; } private: diff --git a/THIRD_PARTY_LICENSES.md b/THIRD_PARTY_LICENSES.md index 70df37b..f73d5dc 100644 --- a/THIRD_PARTY_LICENSES.md +++ b/THIRD_PARTY_LICENSES.md @@ -4,7 +4,7 @@ OpenStudio uses the following open-source libraries and dependencies. --- -## JUCE 8.0.0 +## JUCE 9.0.1 - **Website:** https://juce.com/ - **License:** AGPLv3 / Commercial @@ -26,14 +26,20 @@ OpenStudio is released under AGPLv3-compatible terms. Licensed under the Apache License, Version 2.0. You may obtain a copy at: http://www.apache.org/licenses/LICENSE-2.0 -YSFX bundles portions of WDL (Cockos) under the WTFPL license. +The exact upstream Apache-2.0 text is shipped in every application bundle as +`licenses/YSFX-LICENSE.txt`. + +YSFX bundles portions of WDL (Cockos) under WDL's zlib-style license and uses +dr_libs and stb under their upstream dual-license terms. Their exact notices +are shipped as `licenses/WDL-LICENSE.txt`, `licenses/dr_libs-LICENSE.txt`, and +`licenses/stb-LICENSE.txt`. --- ## WDL (Cockos) - **Website:** https://www.cockos.com/wdl/ -- **License:** WTFPL (Do What The F*** You Want To Public License) +- **License:** zlib-style WDL license - **Copyright:** (c) Cockos Incorporated - **Usage:** Bundled with YSFX for EEL2 compilation and DSP primitives @@ -74,13 +80,26 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. ## FFmpeg - **Website:** https://ffmpeg.org/ -- **License:** LGPLv2.1+ / GPLv2+ +- **Bundled Windows build:** FFmpeg 8.0.1 essentials build from Gyan Doshi +- **License for this build:** GPL-3.0-or-later - **Copyright:** (c) The FFmpeg developers - **Usage:** Audio format conversion (MP3, OGG, etc.) via external process -FFmpeg is distributed as a standalone executable and is not linked into -the OpenStudio binary. It is invoked as a child process for lossy format -encoding and sample rate conversion. +On Windows, FFmpeg is distributed as a standalone executable and is not linked +into the OpenStudio binary. It is invoked as a child process for lossy format +encoding and sample rate conversion. The exact binary checksum, build +configuration, provider, and upstream source archive are recorded in +`licenses/FFmpeg-PROVENANCE.json`; the applicable GPLv3 text is shipped as +`licenses/FFmpeg-COPYING.GPLv3.txt`. + +OpenStudio does not redistribute an FFmpeg binary in its macOS or Linux +packages. Those builds use an optional system `ffmpeg` on `PATH` when present. + +The bundled Windows executable is a static GPL build with GPL-enabled and +third-party libraries. Public binary distribution therefore also requires +complete corresponding source for the exact linked build under the applicable +licenses. The FFmpeg core source link alone does not cover every statically +linked dependency. --- @@ -110,8 +129,10 @@ The React frontend uses packages installed via npm. Key dependencies include: | Lucide React | ISC | Icon library | | @dnd-kit | MIT | Drag-and-drop toolkit | -For a complete list of frontend dependencies and their licenses, see -`frontend/package.json` and run `npx license-checker` in the frontend directory. +The complete deterministic production dependency inventory and exact installed +license/notice texts are generated from `frontend/package-lock.json` as +`frontend/THIRD_PARTY_NOTICES.txt`. Every application bundle ships that file as +`licenses/Frontend-THIRD_PARTY_NOTICES.txt`. --- @@ -122,6 +143,69 @@ For a complete list of frontend dependencies and their licenses, see - **Copyright:** (c) free-audio contributors - **Usage:** CLAP plugin format hosting headers +The exact upstream MIT text is shipped in every application bundle as +`licenses/CLAP-LICENSE.txt`. + +--- + +## NeuralAmpModelerCore + +- **Website:** https://github.com/sdatkinson/NeuralAmpModelerCore +- **Version:** 0.5.4 +- **License:** MIT License +- **Copyright:** NeuralAmpModelerCore contributors +- **Usage:** NAM/A1/A2 neural amp model loading and DSP processing + +The complete upstream MIT text is shipped with each application bundle as +`licenses/NeuralAmpModelerCore-LICENSE.txt`. + +OpenStudio preserves TONE3000 per-tone license metadata in saved NAM tones. +TONE3000 models and thumbnails are not redistributed by OpenStudio. + +--- + +## Eigen + +- **Website:** https://gitlab.com/libeigen/eigen +- **Version:** 5.0.1 (`bc3b39870ecb690a623a3f49149a358b95c5781d`) +- **License:** Mozilla Public License 2.0, with individual files under + compatible BSD, Apache-2.0, and MINPACK notices +- **Usage:** Header-only matrix operations used by NeuralAmpModelerCore + +Eigen is primarily licensed under the Mozilla Public License 2.0. The exact +source used by OpenStudio is available through NeuralAmpModelerCore's +`Dependencies/eigen` submodule at the commit above. The complete MPL-2.0, +BSD, Apache-2.0, MINPACK, and explanatory `COPYING.*` files are shipped in the +application bundle's `licenses/` directory. + +--- + +## JSON for Modern C++ (nlohmann/json) + +- **Website:** https://github.com/nlohmann/json +- **Version:** 3.12.0 +- **License:** MIT License +- **Copyright:** Copyright (c) 2013-2025 Niels Lohmann +- **Usage:** Header-only NAM model JSON parsing through NeuralAmpModelerCore + +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. + --- ## Signalsmith Stretch @@ -131,19 +215,57 @@ For a complete list of frontend dependencies and their licenses, see - **Copyright:** (c) Signalsmith Audio Ltd - **Usage:** Pitch shifting with formant preservation (header-only library) -Includes signalsmith-linear (FFT/STFT), also MIT licensed. +Includes signalsmith-linear (FFT/STFT), also MIT licensed. The exact +Signalsmith Stretch and Signalsmith Linear MIT texts are shipped in every +application bundle as `licenses/Signalsmith-Stretch-LICENSE.txt` and +`licenses/Signalsmith-Linear-LICENSE.txt`. + +--- + +## terrarium-poly-octave + +- **Website:** https://github.com/schult/terrarium-poly-octave +- **License:** MIT License +- **Copyright:** (c) 2024 Steven Schulteis +- **Usage:** Reference implementation and equations adapted for the NAM Rack's + stereo ERB phase-scaling octave generator + +OpenStudio retains the complete upstream MIT notice in +`Source/NAMPolyOctaver.cpp`. Its desktop implementation is sample-rate aware, +uses independent left/right state, and does not include the upstream Daisy, +Q, or GCEM dependencies. + +--- + +## Spotify Basic Pitch ICASSP 2022 model + +- **Website:** https://github.com/spotify/basic-pitch +- **Upstream version:** v0.4.0, commit + `9991303bba609a3b93089d13ec80d1d495083596` +- **Upstream file:** `basic_pitch/saved_models/icassp_2022/nmp.onnx` +- **SHA-256:** + `2c3c1d144bfa61ad236e92e169c13535c880469a12a047d4e73451f2c059a0ec` +- **License:** Apache License 2.0 +- **Copyright:** Copyright 2022 Spotify AB +- **Usage:** Polyphonic pitch detection and audio-to-MIDI transcription + +OpenStudio ships the unchanged official 230,444-byte ONNX model. Its pinned +provenance manifest is bundled beside the model, and the exact upstream +`LICENSE` and `NOTICE` files are shipped in the application's `licenses/` +directory. --- -## ONNX Runtime (Optional) +## ONNX Runtime 1.24.4 (Optional) - **Website:** https://onnxruntime.ai/ - **License:** MIT License - **Copyright:** (c) Microsoft Corporation - **Usage:** Neural network inference for polyphonic pitch detection (Basic-Pitch model) -Pre-built binary; not compiled from source. See `thirdparty/onnxruntime/ThirdPartyNotices.txt` -for full third-party notices. +Pre-built binary; not compiled from source. When ONNX Runtime is included, its +exact upstream `LICENSE` and `ThirdPartyNotices.txt` files are shipped in the +application bundle's `licenses/` directory. --- @@ -154,7 +276,13 @@ for full third-party notices. - **Copyright:** (c) Celemony Software GmbH - **Usage:** ARA 2 plugin hosting (Melodyne, SpectraLayers integration) -Includes nested dependencies: cpp-base64 (zlib), pugixml (MIT). +The vendored SDK notice also identifies dependencies used by its examples, +including cpp-base64 (zlib) and pugixml (MIT). OpenStudio compiles the ARA API +and ARA Library host support, not the SDK example applications. + +The exact vendored ARA notice plus the ARA API and ARA Library Apache-2.0 +license texts are shipped as `licenses/ARA-NOTICE.txt`, +`licenses/ARA-API-LICENSE.txt`, and `licenses/ARA-Library-LICENSE.txt`. --- @@ -165,6 +293,9 @@ Includes nested dependencies: cpp-base64 (zlib), pugixml (MIT). - **Copyright:** (c) David Reid - **Usage:** Audio format decoding (WAV, MP3, FLAC) — header-only +The exact upstream dual-license text used by the YSFX dependency is shipped as +`licenses/dr_libs-LICENSE.txt`. + --- ## stb @@ -173,3 +304,6 @@ Includes nested dependencies: cpp-base64 (zlib), pugixml (MIT). - **License:** MIT License / Public Domain (dual choice) - **Copyright:** (c) Sean Barrett - **Usage:** Image I/O utilities — header-only + +The exact upstream dual-license text used by the YSFX dependency is shipped as +`licenses/stb-LICENSE.txt`. diff --git a/WORKFLOWS.md b/WORKFLOWS.md index 17d8c5c..c62e75a 100644 --- a/WORKFLOWS.md +++ b/WORKFLOWS.md @@ -1,4 +1,4 @@ -# Studio13 Development Workflows +# OpenStudio Development Workflows ## ✨ NEW: Single Command Development @@ -10,7 +10,7 @@ python build.py dev --run 1. ✅ Installs npm dependencies 2. ✅ Builds C++ backend (if needed) 3. ✅ Starts Vite dev server (background) -4. ✅ Launches Studio13_v2.exe +4. ✅ Launches OpenStudio.exe 5. ✅ Auto-cleanup when you close the app **No more juggling terminals!** @@ -27,7 +27,7 @@ Before that handoff: - `cmake --build build --config Debug` must have completed after the latest changes. - The current frontend must be built/copied so packaged assets are not stale if fallback is ever used. - No pre-running Vite/npm/dev server should be required from the user. -- Any Codex-started Vite/npm/browser harness processes should be stopped first, and port `5173` should not be left occupied by a Codex-started process. +- Any Codex-started Vite/npm/browser harness processes should be stopped first, and port `5183` should not be left occupied by a Codex-started process. **Run this to rebuild the backend:** @@ -51,7 +51,7 @@ cd frontend npm run dev # Terminal 2 -./build/Studio13_v2_artefacts/Debug/Studio13.exe +./build/OpenStudio_artefacts/Debug/OpenStudio.exe ``` --- @@ -60,9 +60,10 @@ npm run dev ```bash python build.py prod +doppler run -- python build.py dev --run ``` -**Output:** Single executable at `build/Studio13_v2_artefacts/Release/Studio13.exe` +**Output:** Single executable at `build/OpenStudio_artefacts/Release/OpenStudio.exe` **No Vite needed!** Assets are embedded. --- @@ -82,15 +83,24 @@ git push origin ai-runtime-v0.0.31 ``` -## This command needs to be ran on macOS after installation through installer to un-quarantine the app and use it -## Otherwise the app would be shown as damaged or broken in macOS +## macOS first launch + +The normal first-launch path is: + +1. Verify the downloaded DMG against the published SHA-256 checksum. +2. Drag `OpenStudio.app` to `/Applications` and attempt to open it. +3. If macOS blocks the unsigned build, use **System Settings > Privacy & + Security > Open Anyway** for that app, then confirm the launch. + +## If that also doesn't work, then run this command to un-quarantine the app and use it +## Otherwise the app might be shown as damaged or broken in macOS ```bash xattr -dr com.apple.quarantine /Applications/OpenStudio.app ``` ## Comparison with REAPER -| Feature | Studio13 (Hybrid) | REAPER (Native) | +| Feature | OpenStudio (Hybrid) | REAPER (Native) | |---------|-------------------|-----------------| | **Dev Mode** | `python build.py dev --run` | Rebuild for every UI change | | **UI Tech** | React + CSS | Win32/Cocoa C++ | diff --git a/build.py b/build.py index ebf989c..d86a02b 100644 --- a/build.py +++ b/build.py @@ -13,7 +13,33 @@ vite_process = None cpp_process = None -VITE_DEV_URL = "http://127.0.0.1:5173" +VITE_DEV_HOST = "127.0.0.1" +VITE_DEV_PORT = 5183 +VITE_DEV_URL = f"http://{VITE_DEV_HOST}:{VITE_DEV_PORT}" +TONE3000_CLIENT_ID_ENV_NAMES = ( + "TONE3000_PUBLISHABLE_KEY", + "OPENSTUDIO_TONE3000_CLIENT_ID_VALUE", + "OPENSTUDIO_TONE3000_CLIENT_ID", +) + + +def get_first_env_value(names): + for name in names: + value = os.environ.get(name, "").strip() + if value: + return name, value + return "", "" + + +def mask_command_for_log(command): + if isinstance(command, (list, tuple)): + command = subprocess.list2cmdline([str(part) for part in command]) + else: + command = str(command) + _, tone3000_client_id = get_first_env_value(TONE3000_CLIENT_ID_ENV_NAMES) + if tone3000_client_id: + command = command.replace(tone3000_client_id, "<tone3000_publishable_key>") + return command def kill_process_tree(pid): """Kill a process and all its child processes (Windows: taskkill /T)""" @@ -67,12 +93,15 @@ def cleanup(): # Register cleanup handler atexit.register(cleanup) -def run_command(command, cwd=None, shell=True): - print(f"Running: {command}") +def run_command(command, cwd=None, shell=None): + if shell is None: + shell = isinstance(command, str) + print(f"Running: {mask_command_for_log(command)}") try: subprocess.check_call(command, cwd=cwd, shell=shell) - except subprocess.CalledProcessError as e: - print(f"Error running command: {command}") + except (OSError, subprocess.CalledProcessError) as error: + print(f"Error running command: {mask_command_for_log(command)}") + print(error) sys.exit(1) def get_npm_executable(): @@ -141,16 +170,20 @@ def build_backend(mode="debug"): # Configure CMake. On single-config generators (Linux/macOS Make/Ninja) # CMAKE_BUILD_TYPE must be set at configure time, not just at build time. - cmd = f"cmake -B \"{build_dir}\"" + cmd = ["cmake", "-B", build_dir] if platform.system() != "Windows": - cmd += f" -DCMAKE_BUILD_TYPE={config_type}" - if mode == "debug": - cmd += " -DJUCE_DEBUG=ON" + cmd.append(f"-DCMAKE_BUILD_TYPE={config_type}") + tone3000_env_name, tone3000_client_id = get_first_env_value(TONE3000_CLIENT_ID_ENV_NAMES) + if tone3000_client_id: + print(f"Using TONE3000 publishable client_id from ${tone3000_env_name}.") + cmd.append(f"-DOPENSTUDIO_TONE3000_CLIENT_ID_VALUE={tone3000_client_id}") + else: + print("No TONE3000 publishable client_id env var found; keeping the existing CMake cache value if one is set.") - run_command(cmd) + run_command(cmd, shell=False) # Build - run_command(f"cmake --build \"{build_dir}\" --config {config_type}") + run_command(["cmake", "--build", build_dir, "--config", config_type], shell=False) def start_vite_server(): """Start Vite dev server in background""" @@ -158,7 +191,17 @@ def start_vite_server(): frontend_dir = os.path.join(os.getcwd(), "frontend") print("\n--- Starting Vite Dev Server ---") vite_process = subprocess.Popen( - [get_npm_executable(), "run", "dev", "--", "--host", "127.0.0.1", "--strictPort"], + [ + get_npm_executable(), + "run", + "dev", + "--", + "--host", + VITE_DEV_HOST, + "--port", + str(VITE_DEV_PORT), + "--strictPort", + ], cwd=frontend_dir, shell=False ) diff --git a/built_in_plugin_upgrade_status.md b/built_in_plugin_upgrade_status.md deleted file mode 100644 index fbe0d32..0000000 --- a/built_in_plugin_upgrade_status.md +++ /dev/null @@ -1,154 +0,0 @@ -# Built-In Plugin Upgrade Status - -This file tracks the remaining work for the Studio13 built-in plugin suite. Items marked done are implemented in the current working tree, but subjective sound quality still needs user audition before it can be called final. - -## Completed - -- [x] Add a built-in plugin schema bridge for React editors. -- [x] Add bridge methods for built-in plugin schema, state, parameter set, and state set. -- [x] Add React schema-driven built-in plugin panel inside `FXChainPanel`. -- [x] Keep external VST/CLAP/LV2 editors native while built-ins use React panels. -- [x] Fix dev frontend fallback/HMR mismatch by using `127.0.0.1:5173` consistently. -- [x] Make dev mode rebuild packaged frontend fallback assets. -- [x] Add bundled built-in instrument plugins addable from the FX/plugin chain: - - [x] `Studio13 Basic Synth` - - [x] `Studio13 Piano` - - [x] `Studio13 Drums` -- [x] Set tracks to `instrument` when a built-in instrument plugin is added. -- [x] Prevent the old fallback instrument from double-rendering when a built-in instrument FX exists. -- [x] Preserve built-in FX/instrument save/load by storing/restoring built-in plugin names. -- [x] Preserve built-in FX/instrument duplication by restoring built-ins through the built-in FX bridge. -- [x] Improve Basic Synth from a simple fallback tone to a polyphonic subtractive synth with anti-aliased oscillators, sub, noise, brightness, detune, attack, release, and output gain. -- [x] Add Basic Synth pitch-bend and mod-wheel routing. -- [x] Add a playable synthesized piano instrument with tone, body, hammer, release, and output gain controls. -- [x] Improve piano toward hybrid-modeled behavior with model flavors, sustain pedal, resonance, and stereo width. -- [x] Add a playable synthesized drum instrument with kit, tuning, room, hi-hat tightness, output gain, GM notes, and CC4 hi-hat pedal behavior for e-drums. -- [x] Improve drums toward hybrid-modeled behavior with velocity curve, punch, and stereo kit placement controls. -- [x] Improve sampler fallback interpolation from linear to cubic. -- [x] Remove selected audio-thread temporary allocations in built-in reverb and saturator paths. -- [x] Make compressor auto makeup apply adaptive makeup gain from current gain reduction. -- [x] Make compressor auto release adapt release time from current gain reduction. -- [x] Replace limiter hard-clip end stage with a preallocated lookahead gain stage and soft safety ceiling. -- [x] Add intersample-aware peak estimation to limiter detection. -- [x] Add EQ auto-gain based on the actual filter response instead of a decorative toggle. -- [x] Add compressor Peak/RMS/Auto detector modes. -- [x] Add compressor stereo-link detector control. -- [x] Add 4x oversampled true-peak detection into limiter gain reduction. -- [x] Add gate Peak/RMS/Auto detector modes. -- [x] Avoid constant gate sidechain filter coefficient rebuilds when filter values have not changed. -- [x] Smooth delay-time changes to avoid abrupt delay jumps. -- [x] Correct delay tempo-sync note mapping to match the UI labels. -- [x] Add delay ducking control. -- [x] Add tape-style delay modulation in the feedback path. -- [x] Add reverb early reflection taps independent from late-tail level. -- [x] Cache reverb wet tone filter coefficients instead of rebuilding them every block. -- [x] Replace stock reverb late-tail processing with a native 8-line feedback delay network. -- [x] Add denser reverb late-tail diffusion with algorithm-specific delay spacing. -- [x] Add reverb late-tail modulation, width shaping, freeze feedback, and shimmer-style feedback coloration. -- [x] Expose EQ magnitude response and pre/post analyzer snapshots through the built-in schema. -- [x] Add draggable EQ response graph editing in the React built-in panel. -- [x] Add EQ band audition parameter with DSP/schema/state support. -- [x] Add EQ dynamic band parameters with detector-driven gain modulation and UI visualization. -- [x] Add EQ stereo/mid/side processing mode where stereo routing supports it. -- [x] Cache EQ band parameter state to avoid rebuilding unchanged filter coefficients every audio block. -- [x] Add built-in plugin offline DSP smoke fixture to the native automated regression suite. -- [x] Add compressor sidechain HPF regression fixture comparing low-frequency gain reduction at 20 Hz vs 500 Hz HPF. -- [x] Expose dynamics gain-reduction, input/output level, and gate-open metrics through the built-in schema. -- [x] Add live dynamics gain-reduction history and meters in the React built-in panel. -- [x] Expose pitch-correct live pitch telemetry/history through the built-in schema and React panel. -- [x] Make chorus tempo sync affect LFO rate. -- [x] Add chorus/flanger/phaser character modes for Clean, Ensemble, and BBD-style modulation. -- [x] Apply chorus/flanger/phaser wet low-cut and high-cut filters. -- [x] Preallocate separate saturator 2x and 4x oversamplers and choose quality mode without audio-thread allocation. -- [x] Add saturator drive output compensation. -- [x] Add Console, Transformer, and Foldback saturator models. -- [x] Add saturator post-drive low-cut tone filter. -- [x] Remove remaining reverb audio-thread dry/early scratch resizing by preallocating larger process buffers in `prepareToPlay`. -- [x] Replace raw built-in parameter rows with plugin-aware macro controls, grouped sections, and responsive editor grids. -- [x] Add built-in latency/tail and delay smoothing regression fixtures. -- [x] Remove per-sample phaser all-pass coefficient allocation and cache dynamic EQ detector coefficients. -- [x] Add frontend Vitest coverage for built-in schema classification, primary controls, and React control rendering. -- [x] Make existing `ParametricGraph` controls theme-aware with unique clip paths and reusable graph color tokens. -- [x] Add smoothing for saturator drive, mix, and compensated output gain. -- [x] Wire the built-in EQ editor to the reusable schema-driven `ParametricGraph` adapter with response and analyzer curves. -- [x] Add responsive layout guards for every built-in panel kind across desktop, tablet, and narrow CSS contracts. - -## Remaining DSP Work - -- [x] EQ: add analyzer pre/post display. -- [x] EQ: add draggable response graph editing. -- [x] EQ: add dynamic bands. -- [x] EQ: add band audition. -- [x] EQ: add stereo/mid-side modes where routing supports it. -- [x] EQ: implement real auto-gain or remove misleading auto-gain behavior. -- [x] Compressor: add peak/RMS/auto detector modes. -- [x] Compressor: add stereo link control. -- [x] Compressor: complete working auto release and auto makeup behavior. -- [x] Compressor: add sidechain HPF behavior that is audibly and measurably effective. -- [x] Compressor: add gain-reduction history for UI. -- [x] Gate: add detector mode and sidechain filter polish. -- [x] Gate: add gain-reduction/open-close history for UI. -- [x] Limiter: add lookahead ring buffer if current path is insufficient. -- [x] Limiter: add oversampled true-peak detection/limiting. -- [x] Limiter: avoid hard-clip distortion at ceiling. -- [x] Delay: smooth delay-time changes. -- [x] Delay: add dotted/triplet tempo sync polish. -- [x] Delay: add ducking. -- [x] Delay: improve modulation, width, tone, and saturation in feedback. -- [x] Reverb: replace current wrapper-level behavior with stronger native room/hall/plate algorithms. -- [x] Reverb: add early reflections. -- [x] Reverb: add denser late tail. -- [x] Reverb: improve damping, modulation, width, freeze, and shimmer behavior. -- [x] Chorus/flanger/phaser: add interpolated delay lines. -- [x] Chorus/flanger/phaser: add ensemble/BBD character modes. -- [x] Chorus/flanger/phaser: improve tone filters, tempo sync, stereo spread, and modulation quality. -- [x] Saturator: complete oversampling quality modes without realtime allocations. -- [x] Saturator: add more modeled curves, bias/asymmetry polish, tone filters, and output compensation. -- [x] Pitch Correct: finish unified built-in UI/schema polish and deterministic routing tests. -- [x] Piano: improve from synthesized decent to sample-library-grade or hybrid modeled/sample playback. -- [x] Drums: improve from synthesized decent to sample-library-grade or hybrid modeled/sample playback. -- [x] Drums: add named e-drum mapping presets, including Roland TD-style mappings. - -## Remaining UI Work - -- [x] Replace generic schema layout with polished plugin-specific React editors for each built-in. -- [x] Add professional DAW-style graph controls for EQ, dynamics, delay, reverb, modulation, and saturation. -- [x] Refactor existing `ParametricGraph` controls into fully schema-driven graph adapters. -- [x] Add meters/history visualizations for dynamics, limiter, and gate. -- [x] Add analyzer visualization for EQ. -- [x] Add instrument-specific visual polish for synth, piano, and drums. -- [x] Check responsive layouts at desktop and narrow widths for every built-in panel. - -## Remaining Realtime Safety Work - -- [x] Audit all built-ins for audio-thread heap allocations. -- [x] Preallocate analyzer, delay, oversampling, scratch, and tail buffers in `prepareToPlay`. -- [x] Add parameter smoothing where zipper noise can occur. -- [x] Add denormal, NaN, and bounded-output guards across all built-ins. -- [x] Avoid expensive coefficient rebuilds inside audio callbacks where possible. - -## Remaining Tests - -- [x] Add offline C++ DSP harnesses for built-ins. -- [x] Test bypass parity. -- [x] Test finite output and no NaN/Inf. -- [x] Test bounded gain. -- [x] Test latency and tail behavior. -- [x] Test parameter smoothing and zipper-spike avoidance. -- [x] Test EQ curves. -- [x] Test compressor, gate, and limiter gain behavior. -- [x] Test limiter true-peak handling. -- [x] Test delay tempo timing. -- [x] Test reverb tail decay. -- [x] Test synth tuning, MIDI note handling, voice stealing, pitch bend, and mod behavior. -- [x] Test piano MIDI behavior and voice cleanup. -- [x] Test drum GM/Roland-style note mapping and CC4 hi-hat behavior. -- [x] Add frontend tests for built-in schema mapping and React controls. -- [x] Verify all new `useDAWStore` consumers use `useShallow`. - -## Acceptance Status - -- Objective build/type verification: pass as of the latest implementation pass. -- Objective routing/schema behavior: pass for the implemented built-in instrument/React bridge foundation. -- Subjective audio quality: not_asserted until user auditions exact artifacts in the app. -- Industry-standard parity for the full built-in suite: implementation pass complete, subjective audition pending. diff --git a/cmake/ApplyJUCERealtimePatches.cmake b/cmake/ApplyJUCERealtimePatches.cmake new file mode 100644 index 0000000..1174400 --- /dev/null +++ b/cmake/ApplyJUCERealtimePatches.cmake @@ -0,0 +1,310 @@ +if(NOT DEFINED JUCE_SOURCE_DIR) + message(FATAL_ERROR "JUCE_SOURCE_DIR was not provided") +endif() + +set(JUCE_ASIO_DEVICE_SOURCE + "${JUCE_SOURCE_DIR}/modules/juce_audio_devices/native/juce_ASIO_windows.cpp") +if(NOT EXISTS "${JUCE_ASIO_DEVICE_SOURCE}") + message(FATAL_ERROR + "JUCE ASIO device source was not found: ${JUCE_ASIO_DEVICE_SOURCE}") +endif() + +file(READ "${JUCE_ASIO_DEVICE_SOURCE}" JUCE_ASIO_SOURCE) + +set(JUCE_ASIO_UNPATCHED_GETTER +" int getXRunCount() const noexcept override { return xruns; }") +set(JUCE_ASIO_PATCHED_GETTER +" int getXRunCount() const noexcept override + { + return xruns.load (std::memory_order_relaxed); + }") +set(JUCE_ASIO_UNPATCHED_DISABLED_WRITE +" xruns = -1;") +set(JUCE_ASIO_PATCHED_DISABLED_WRITE +" xruns.store (-1, std::memory_order_relaxed);") +set(JUCE_ASIO_UNPATCHED_DECLARATION +" int xruns = 0;") +set(JUCE_ASIO_PATCHED_DECLARATION +" std::atomic<int> xruns { 0 };") +set(JUCE_ASIO_UNPATCHED_RESET +" xruns = 0;") +set(JUCE_ASIO_PATCHED_RESET +" xruns.store (0, std::memory_order_relaxed);") +set(JUCE_ASIO_UNPATCHED_INCREMENT +" case kAsioOverload: ++xruns; return 1;") +set(JUCE_ASIO_PATCHED_INCREMENT +" case kAsioOverload: + xruns.fetch_add (1, std::memory_order_relaxed); + return 1;") + +string(FIND + "${JUCE_ASIO_SOURCE}" + "${JUCE_ASIO_PATCHED_DECLARATION}" + JUCE_ASIO_ATOMIC_PATCHED_AT) +if(JUCE_ASIO_ATOMIC_PATCHED_AT GREATER_EQUAL 0) + foreach(PATCHED_SNIPPET + JUCE_ASIO_PATCHED_GETTER + JUCE_ASIO_PATCHED_DISABLED_WRITE + JUCE_ASIO_PATCHED_RESET + JUCE_ASIO_PATCHED_INCREMENT) + string(FIND + "${JUCE_ASIO_SOURCE}" + "${${PATCHED_SNIPPET}}" + JUCE_ASIO_PATCHED_SNIPPET_AT) + if(JUCE_ASIO_PATCHED_SNIPPET_AT LESS 0) + message(FATAL_ERROR + "JUCE ASIO x-run counter patch is incomplete at ${PATCHED_SNIPPET}") + endif() + endforeach() + message(STATUS "JUCE ASIO atomic x-run counter patch is already applied") +else() + foreach(UNPATCHED_SNIPPET + JUCE_ASIO_UNPATCHED_GETTER + JUCE_ASIO_UNPATCHED_DISABLED_WRITE + JUCE_ASIO_UNPATCHED_DECLARATION + JUCE_ASIO_UNPATCHED_RESET + JUCE_ASIO_UNPATCHED_INCREMENT) + string(FIND + "${JUCE_ASIO_SOURCE}" + "${${UNPATCHED_SNIPPET}}" + JUCE_ASIO_UNPATCHED_SNIPPET_AT) + if(JUCE_ASIO_UNPATCHED_SNIPPET_AT LESS 0) + message(FATAL_ERROR + "Pinned JUCE ASIO x-run counter patch context changed at ${UNPATCHED_SNIPPET}; refusing an unverified dependency rewrite") + endif() + endforeach() + + string(REPLACE + "${JUCE_ASIO_UNPATCHED_GETTER}" + "${JUCE_ASIO_PATCHED_GETTER}" + JUCE_ASIO_SOURCE + "${JUCE_ASIO_SOURCE}") + string(REPLACE + "${JUCE_ASIO_UNPATCHED_DISABLED_WRITE}" + "${JUCE_ASIO_PATCHED_DISABLED_WRITE}" + JUCE_ASIO_SOURCE + "${JUCE_ASIO_SOURCE}") + string(REPLACE + "${JUCE_ASIO_UNPATCHED_DECLARATION}" + "${JUCE_ASIO_PATCHED_DECLARATION}" + JUCE_ASIO_SOURCE + "${JUCE_ASIO_SOURCE}") + string(REPLACE + "${JUCE_ASIO_UNPATCHED_RESET}" + "${JUCE_ASIO_PATCHED_RESET}" + JUCE_ASIO_SOURCE + "${JUCE_ASIO_SOURCE}") + string(REPLACE + "${JUCE_ASIO_UNPATCHED_INCREMENT}" + "${JUCE_ASIO_PATCHED_INCREMENT}" + JUCE_ASIO_SOURCE + "${JUCE_ASIO_SOURCE}") + file(WRITE + "${JUCE_ASIO_DEVICE_SOURCE}" + "${JUCE_ASIO_SOURCE}") + message(STATUS "Applied JUCE ASIO atomic x-run counter patch") +endif() + +set(JUCE_BUFFERING_READER + "${JUCE_SOURCE_DIR}/modules/juce_audio_formats/format/juce_BufferingAudioFormatReader.cpp") +if(NOT EXISTS "${JUCE_BUFFERING_READER}") + message(FATAL_ERROR + "JUCE BufferingAudioFormatReader source was not found: ${JUCE_BUFFERING_READER}") +endif() + +file(READ "${JUCE_BUFFERING_READER}" JUCE_BUFFERING_READER_SOURCE) + +set(JUCE_BLOCKING_LOCK +" const ScopedLock sl (lock); + nextReadPosition = startSampleInFile;") + +set(JUCE_REALTIME_LOCK_V1 +" // OpenStudio uses timeoutMs == 0 from its realtime playback callback. + // A normal ScopedLock can priority-invert against the low-priority + // read-ahead thread. In realtime mode, report a cache miss instead of + // waiting; non-realtime callers retain JUCE's original blocking behavior. + const bool realtimeTryOnly = timeoutMs == 0; + if (realtimeTryOnly) + { + if (! lock.tryEnter()) + { + for (int channel = 0; channel < numDestChannels; ++channel) + if (auto* dest = reinterpret_cast<float*> (destSamples[channel])) + FloatVectorOperations::clear (dest + startOffsetInDestBuffer, numSamples); + + return false; + } + } + else + { + lock.enter(); + } + + struct ScopedCriticalSectionExit final + { + explicit ScopedCriticalSectionExit (CriticalSection& sectionToUse) noexcept + : section (sectionToUse) + { + } + + ~ScopedCriticalSectionExit() + { + section.exit(); + } + + CriticalSection& section; + }; + + const ScopedCriticalSectionExit lockExit (lock); + nextReadPosition = startSampleInFile;") + +set(JUCE_REALTIME_LOCK_V2 +" if (numSamples <= 0) + return true; + + // OpenStudio uses timeoutMs == 0 from its realtime playback callback. + // A normal ScopedLock can priority-invert against the low-priority + // read-ahead thread. Publish the requested position before attempting the + // lock so the read-ahead thread can chase a realtime miss immediately. + // In realtime mode, report that miss instead of waiting; non-realtime + // callers retain JUCE's original blocking behavior. + nextReadPosition = startSampleInFile; + const bool realtimeTryOnly = timeoutMs == 0; + if (realtimeTryOnly) + { + if (! lock.tryEnter()) + { + for (int channel = 0; channel < numDestChannels; ++channel) + if (auto* dest = reinterpret_cast<float*> (destSamples[channel])) + FloatVectorOperations::clear (dest + startOffsetInDestBuffer, numSamples); + + return false; + } + } + else + { + lock.enter(); + } + + struct ScopedCriticalSectionExit final + { + explicit ScopedCriticalSectionExit (CriticalSection& sectionToUse) noexcept + : section (sectionToUse) + { + } + + ~ScopedCriticalSectionExit() + { + section.exit(); + } + + CriticalSection& section; + }; + + const ScopedCriticalSectionExit lockExit (lock);") + +set(JUCE_REALTIME_LOCK +" if (numSamples <= 0) + return true; + + // OpenStudio uses timeoutMs == 0 from its realtime playback callback. + // A normal ScopedLock can priority-invert against the low-priority + // read-ahead thread. Publish the requested position before attempting the + // lock so the read-ahead thread can chase a realtime miss immediately. + // In realtime mode, report that miss without modifying the destination; + // the caller owns its bounded continuity-concealment policy. Non-realtime + // callers retain JUCE's original blocking behavior. + nextReadPosition = startSampleInFile; + const bool realtimeTryOnly = timeoutMs == 0; + if (realtimeTryOnly) + { + if (! lock.tryEnter()) + return false; + } + else + { + lock.enter(); + } + + struct ScopedCriticalSectionExit final + { + explicit ScopedCriticalSectionExit (CriticalSection& sectionToUse) noexcept + : section (sectionToUse) + { + } + + ~ScopedCriticalSectionExit() + { + section.exit(); + } + + CriticalSection& section; + }; + + const ScopedCriticalSectionExit lockExit (lock);") + +string(FIND + "${JUCE_BUFFERING_READER_SOURCE}" + "${JUCE_REALTIME_LOCK}" + JUCE_PATCHED_AT) +if(JUCE_PATCHED_AT GREATER_EQUAL 0) + message(STATUS + "JUCE realtime BufferingAudioReader patch is already applied") + return() +endif() + +string(FIND + "${JUCE_BUFFERING_READER_SOURCE}" + "${JUCE_REALTIME_LOCK_V2}" + JUCE_PATCH_V2_AT) +if(JUCE_PATCH_V2_AT GREATER_EQUAL 0) + string(REPLACE + "${JUCE_REALTIME_LOCK_V2}" + "${JUCE_REALTIME_LOCK}" + JUCE_BUFFERING_READER_PATCHED_SOURCE + "${JUCE_BUFFERING_READER_SOURCE}") + file(WRITE + "${JUCE_BUFFERING_READER}" + "${JUCE_BUFFERING_READER_PATCHED_SOURCE}") + message(STATUS + "Updated JUCE realtime BufferingAudioReader patch to continuity-safe V3") + return() +endif() + +string(FIND + "${JUCE_BUFFERING_READER_SOURCE}" + "${JUCE_REALTIME_LOCK_V1}" + JUCE_PATCH_V1_AT) +if(JUCE_PATCH_V1_AT GREATER_EQUAL 0) + string(REPLACE + "${JUCE_REALTIME_LOCK_V1}" + "${JUCE_REALTIME_LOCK}" + JUCE_BUFFERING_READER_PATCHED_SOURCE + "${JUCE_BUFFERING_READER_SOURCE}") + file(WRITE + "${JUCE_BUFFERING_READER}" + "${JUCE_BUFFERING_READER_PATCHED_SOURCE}") + message(STATUS + "Updated JUCE realtime BufferingAudioReader patch") + return() +endif() + +string(FIND + "${JUCE_BUFFERING_READER_SOURCE}" + "${JUCE_BLOCKING_LOCK}" + JUCE_UNPATCHED_AT) +if(JUCE_UNPATCHED_AT LESS 0) + message(FATAL_ERROR + "Pinned JUCE BufferingAudioReader patch context changed; refusing an unverified dependency rewrite") +endif() + +string(REPLACE + "${JUCE_BLOCKING_LOCK}" + "${JUCE_REALTIME_LOCK}" + JUCE_BUFFERING_READER_PATCHED_SOURCE + "${JUCE_BUFFERING_READER_SOURCE}") +file(WRITE + "${JUCE_BUFFERING_READER}" + "${JUCE_BUFFERING_READER_PATCHED_SOURCE}") +message(STATUS + "Applied JUCE realtime non-blocking BufferingAudioReader patch") diff --git a/cmake/ApplyNAMCorePatches.cmake b/cmake/ApplyNAMCorePatches.cmake new file mode 100644 index 0000000..eefa276 --- /dev/null +++ b/cmake/ApplyNAMCorePatches.cmake @@ -0,0 +1,108 @@ +if(NOT DEFINED NAM_SOURCE_DIR) + message(FATAL_ERROR "NAM_SOURCE_DIR was not provided") +endif() + +find_program(NAM_GIT_EXECUTABLE NAMES git) +if(NOT NAM_GIT_EXECUTABLE) + message(FATAL_ERROR "Git is required to patch NeuralAmpModelerCore") +endif() + +function(nam_apply_git_patch PATCH_NAME PATCH_DESCRIPTION) + set(PATCH_PATH "${CMAKE_CURRENT_LIST_DIR}/patches/${PATCH_NAME}") + if(NOT EXISTS "${PATCH_PATH}") + message(FATAL_ERROR "NeuralAmpModelerCore patch was not found: ${PATCH_PATH}") + endif() + + # FetchContent checks out dependencies using the developer's Git settings. + # On Windows, core.autocrlf may therefore make untouched source lines CRLF, + # while git apply writes the patch's added lines as LF. Ignore whitespace + # changes while matching patch context so a later configure can recognize + # that the exact patch is already present in this mixed-ending worktree. + execute_process( + COMMAND "${NAM_GIT_EXECUTABLE}" -C "${NAM_SOURCE_DIR}" + apply --check --ignore-space-change --whitespace=nowarn "${PATCH_PATH}" + RESULT_VARIABLE PATCH_CHECK_RESULT + OUTPUT_VARIABLE PATCH_CHECK_OUTPUT + ERROR_VARIABLE PATCH_CHECK_ERROR + ) + if(PATCH_CHECK_RESULT EQUAL 0) + execute_process( + COMMAND "${NAM_GIT_EXECUTABLE}" -C "${NAM_SOURCE_DIR}" + apply --ignore-space-change --whitespace=nowarn "${PATCH_PATH}" + RESULT_VARIABLE PATCH_APPLY_RESULT + OUTPUT_VARIABLE PATCH_APPLY_OUTPUT + ERROR_VARIABLE PATCH_APPLY_ERROR + ) + if(NOT PATCH_APPLY_RESULT EQUAL 0) + message(FATAL_ERROR + "Failed to apply ${PATCH_DESCRIPTION}:\n" + "${PATCH_APPLY_OUTPUT}${PATCH_APPLY_ERROR}") + endif() + message(STATUS "Applied ${PATCH_DESCRIPTION}") + return() + endif() + + execute_process( + COMMAND "${NAM_GIT_EXECUTABLE}" -C "${NAM_SOURCE_DIR}" + apply --reverse --check --ignore-space-change --whitespace=nowarn "${PATCH_PATH}" + RESULT_VARIABLE PATCH_REVERSE_CHECK_RESULT + OUTPUT_VARIABLE PATCH_REVERSE_CHECK_OUTPUT + ERROR_VARIABLE PATCH_REVERSE_CHECK_ERROR + ) + if(PATCH_REVERSE_CHECK_RESULT EQUAL 0) + message(STATUS "${PATCH_DESCRIPTION} is already applied") + return() + endif() + + message(FATAL_ERROR + "NeuralAmpModelerCore v0.5.4 patch context changed for ${PATCH_DESCRIPTION}; " + "refusing an unverified dependency rewrite.\n" + "Apply check: ${PATCH_CHECK_OUTPUT}${PATCH_CHECK_ERROR}\n" + "Reverse check: ${PATCH_REVERSE_CHECK_OUTPUT}${PATCH_REVERSE_CHECK_ERROR}") +endfunction() + +set(NAM_WAVENET_MODEL "${NAM_SOURCE_DIR}/NAM/wavenet/model.cpp") +if(NOT EXISTS "${NAM_WAVENET_MODEL}") + message(FATAL_ERROR "NeuralAmpModelerCore WaveNet source was not found: ${NAM_WAVENET_MODEL}") +endif() + +file(READ "${NAM_WAVENET_MODEL}" NAM_WAVENET_SOURCE) + +set(NAM_FULL_ACCUMULATOR_CLEAR +" // Zero head inputs accumulator (first layer array) + this->_head_inputs.setZero(); + ProcessInner(layer_inputs, condition, num_frames);") +set(NAM_ACTIVE_ACCUMULATOR_CLEAR +" // Zero head inputs accumulator (first layer array) + this->_head_inputs.leftCols(num_frames).setZero(); + ProcessInner(layer_inputs, condition, num_frames);") + +string(FIND "${NAM_WAVENET_SOURCE}" "${NAM_ACTIVE_ACCUMULATOR_CLEAR}" NAM_PATCHED_AT) +if(NAM_PATCHED_AT GREATER_EQUAL 0) + message(STATUS "NeuralAmpModelerCore realtime small-block patch is already applied") +else() + string(FIND "${NAM_WAVENET_SOURCE}" "${NAM_FULL_ACCUMULATOR_CLEAR}" NAM_UNPATCHED_AT) + if(NAM_UNPATCHED_AT LESS 0) + message(FATAL_ERROR + "NeuralAmpModelerCore v0.5.4 WaveNet patch context changed; " + "refusing an unverified dependency rewrite") + endif() + + string(REPLACE + "${NAM_FULL_ACCUMULATOR_CLEAR}" + "${NAM_ACTIVE_ACCUMULATOR_CLEAR}" + NAM_WAVENET_PATCHED_SOURCE + "${NAM_WAVENET_SOURCE}") + file(WRITE "${NAM_WAVENET_MODEL}" "${NAM_WAVENET_PATCHED_SOURCE}") + message(STATUS "Applied NeuralAmpModelerCore realtime small-block accumulator patch") +endif() + +nam_apply_git_patch( + "NAMCoreSlimmablePendingFastPath.patch" + "NeuralAmpModelerCore SlimmableWavenet lock-free pending fast path") +nam_apply_git_patch( + "NAMCoreConvNetRealtime.patch" + "NeuralAmpModelerCore allocation-free ConvNet callback patch") +nam_apply_git_patch( + "NAMCoreA2FastCurrentBlockMirror.patch" + "NeuralAmpModelerCore A2 fast-path current-block tail mirror") diff --git a/cmake/patches/NAMCoreA2FastCurrentBlockMirror.patch b/cmake/patches/NAMCoreA2FastCurrentBlockMirror.patch new file mode 100644 index 0000000..734f306 --- /dev/null +++ b/cmake/patches/NAMCoreA2FastCurrentBlockMirror.patch @@ -0,0 +1,42 @@ +diff --git a/NAM/wavenet/a2_fast.cpp b/NAM/wavenet/a2_fast.cpp +index 67093c8..8127a7c 100644 +--- a/NAM/wavenet/a2_fast.cpp ++++ b/NAM/wavenet/a2_fast.cpp +@@ -337,7 +337,6 @@ template <int Channels> + void A2FastModel<Channels>::_ring_write(Layer& L, int num_frames) + { + #if NAM_A2_RING_MODE == 1 +- const int mbs = GetMaxBufferSize(); + float* const hist = L.history.data(); + const float* const src = _layer_in.data(); + const int wp = L.write_pos; +@@ -349,7 +348,9 @@ void A2FastModel<Channels>::_ring_write(Layer& L, int num_frames) + static_cast<size_t>(num_frames - first) * Channels * sizeof(float)); + } ++ // A contiguous read can cross the ring end by at most this block's length. + std::memcpy( +- hist + static_cast<size_t>(L.pow2_size) * Channels, hist, static_cast<size_t>(mbs) * Channels * sizeof(float)); ++ hist + static_cast<size_t>(L.pow2_size) * Channels, hist, ++ static_cast<size_t>(num_frames) * Channels * sizeof(float)); + L.write_pos = (wp + num_frames) & L.pow2_mask; + #else + if (L.write_pos + num_frames > L.history_cols) +@@ -369,7 +369,6 @@ template <int Channels> + void A2FastModel<Channels>::_head_ring_write(int num_frames) + { + #if NAM_A2_RING_MODE == 1 +- const int mbs = GetMaxBufferSize(); + float* const hist = _head_history.data(); + const float* const src = _head_sum.data(); + const int wp = _head_write_pos; +@@ -381,7 +380,9 @@ void A2FastModel<Channels>::_head_ring_write(int num_frames) + static_cast<size_t>(num_frames - first) * Channels * sizeof(float)); + } ++ // A contiguous read can cross the ring end by at most this block's length. + std::memcpy( +- hist + static_cast<size_t>(_head_pow2_size) * Channels, hist, static_cast<size_t>(mbs) * Channels * sizeof(float)); ++ hist + static_cast<size_t>(_head_pow2_size) * Channels, hist, ++ static_cast<size_t>(num_frames) * Channels * sizeof(float)); + _head_write_pos = (wp + num_frames) & _head_pow2_mask; + #else + const int keep = kHeadKernelSize - 1; diff --git a/cmake/patches/NAMCoreConvNetRealtime.patch b/cmake/patches/NAMCoreConvNetRealtime.patch new file mode 100644 index 0000000..028dc8f --- /dev/null +++ b/cmake/patches/NAMCoreConvNetRealtime.patch @@ -0,0 +1,227 @@ +diff --git a/NAM/convnet.cpp b/NAM/convnet.cpp +index 329caf6..895e5e3 100644 +--- a/NAM/convnet.cpp ++++ b/NAM/convnet.cpp +@@ -157,20 +157,24 @@ void nam::convnet::_Head::process_(const Eigen::MatrixXf& input, Eigen::MatrixXf + { + const long length = i_end - i_start; + const long out_channels = this->_weight.rows(); ++ const long in_channels = this->_weight.cols(); + +- // Resize output to (out_channels x length) +- output.resize(out_channels, length); +- +- // Extract input slice: (in_channels x length) +- Eigen::MatrixXf input_slice = input.middleCols(i_start, length); +- +- // Compute output = weight * input_slice: (out_channels x in_channels) * (in_channels x length) = (out_channels x +- // length) +- output.noalias() = this->_weight * input_slice; +- +- // Add bias to each column: output.colwise() += bias +- // output is (out_channels x length), bias is (out_channels x 1), so colwise() += works +- output.colwise() += this->_bias; ++ if (length <= 0 || i_start < 0 || i_end > input.cols() || input.rows() != in_channels ++ || output.rows() != out_channels || output.cols() < length) ++ return; ++ ++ // Manual multiply keeps the head allocation-free for every dynamic block size. ++ // Accumulation order is deterministic and matches the scalar reference equation. ++ for (long frame = 0; frame < length; ++frame) ++ { ++ for (long out_ch = 0; out_ch < out_channels; ++out_ch) ++ { ++ float value = this->_bias(out_ch); ++ for (long in_ch = 0; in_ch < in_channels; ++in_ch) ++ value += this->_weight(out_ch, in_ch) * input(in_ch, i_start + frame); ++ output(out_ch, frame) = value; ++ } ++ } + } + + nam::convnet::ConvNet::ConvNet(const int in_channels, const int out_channels, const int channels, +@@ -186,11 +190,6 @@ nam::convnet::ConvNet::ConvNet(const int in_channels, const int out_channels, co + for (size_t i = 0; i < dilations.size(); i++) + this->_blocks[i].set_weights_( + i == 0 ? in_channels : channels, channels, dilations[i], batchnorm, activation_config, groups, it); +- // Only need _block_vals for the head (one entry) +- // Conv1D layers manage their own buffers now +- this->_block_vals.resize(1); +- this->_block_vals[0].setZero(); +- + // Create single head that outputs all channels + this->_head = _Head(channels, out_channels, it); + +@@ -206,75 +205,44 @@ nam::convnet::ConvNet::ConvNet(const int in_channels, const int out_channels, co + void nam::convnet::ConvNet::process(NAM_SAMPLE** input, NAM_SAMPLE** output, const int num_frames) + + { +- this->_update_buffers_(input, num_frames); + const int in_channels = NumInputChannels(); + const int out_channels = NumOutputChannels(); + +- // For multi-channel, we process each input channel independently through the network +- // and sum outputs to each output channel (simple implementation) +- // This can be extended later for more sophisticated cross-channel processing ++ if (num_frames <= 0) ++ return; + +- // Convert input buffers to matrix for first layer (stack input channels) +- Eigen::MatrixXf input_matrix(in_channels, num_frames); +- const long i_start = this->_input_buffer_offset; ++ if (num_frames > GetMaxBufferSize() || _blocks.empty() || _input_matrix.rows() != in_channels ++ || _input_matrix.cols() < num_frames || _head_output.rows() != out_channels ++ || _head_output.cols() < num_frames) ++ { ++ for (int ch = 0; ch < out_channels; ++ch) ++ std::fill_n(output[ch], num_frames, 0.0f); ++ return; ++ } ++ ++ // Conv1D owns the required history. Copy only the current host block into the ++ // pre-allocated matrix instead of updating Buffer's deprecated vector history. + for (int ch = 0; ch < in_channels; ch++) + { + for (int i = 0; i < num_frames; i++) +- input_matrix(ch, i) = this->_input_buffers[ch][i_start + i]; ++ _input_matrix(ch, i) = input[ch][i]; + } + +- // Process through ConvNetBlock layers +- // Each block now uses Conv1D's internal buffers via Process() and GetOutput() + for (size_t i = 0; i < this->_blocks.size(); i++) + { +- // Get input for this block +- Eigen::MatrixXf block_input; + if (i == 0) +- { +- // First block uses the input matrix +- block_input = input_matrix; +- } ++ this->_blocks[i].Process(_input_matrix, num_frames); + else +- { +- // Subsequent blocks use output from previous block +- auto prev_output = this->_blocks[i - 1].GetOutput(num_frames); +- block_input = prev_output; // Copy to matrix +- } +- +- // Process block (handles Conv1D, batchnorm, and activation internally) +- this->_blocks[i].Process(block_input, num_frames); +- } +- +- // Process head for all output channels at once +- // We need _block_vals[0] for the head interface +- const long buffer_size = (long)this->_input_buffers[0].size(); +- if (this->_block_vals[0].rows() != this->_blocks.back().get_out_channels() +- || this->_block_vals[0].cols() != buffer_size) +- { +- this->_block_vals[0].resize(this->_blocks.back().get_out_channels(), buffer_size); ++ this->_blocks[i].Process(this->_blocks[i - 1].GetOutput(), num_frames); + } + +- // Copy last block output to _block_vals for head +- auto last_output = this->_blocks.back().GetOutput(num_frames); +- const long buffer_offset = this->_input_buffer_offset; +- const long buffer_i_end = buffer_offset + num_frames; +- // last_output is (channels x num_frames), _block_vals[0] is (channels x buffer_size) +- // Copy to the correct location in _block_vals +- this->_block_vals[0].block(0, buffer_offset, last_output.rows(), num_frames) = last_output; +- +- // Process head - outputs all channels at once +- // Head will resize _head_output internally +- this->_head.process_(this->_block_vals[0], this->_head_output, buffer_offset, buffer_i_end); ++ this->_head.process_(this->_blocks.back().GetOutput(), this->_head_output, 0, num_frames); + +- // Copy to output arrays for each channel + for (int ch = 0; ch < out_channels; ch++) + { + for (int s = 0; s < num_frames; s++) + output[ch][s] = this->_head_output(ch, s); + } +- +- // Prepare for next call: +- nam::Buffer::_advance_input_buffer_(num_frames); + } + + void nam::convnet::ConvNet::_verify_weights(const int channels, const std::vector<int>& dilations, const bool batchnorm, +@@ -285,41 +253,16 @@ void nam::convnet::ConvNet::_verify_weights(const int channels, const std::vecto + + void nam::convnet::ConvNet::SetMaxBufferSize(const int maxBufferSize) + { +- nam::Buffer::SetMaxBufferSize(maxBufferSize); ++ nam::DSP::SetMaxBufferSize(maxBufferSize); ++ const int prepared_size = std::max(0, maxBufferSize); + +- // Reset all ConvNetBlock instances with the new buffer size +- for (auto& block : _blocks) +- { +- block.SetMaxBufferSize(maxBufferSize); +- } +-} +- +-void nam::convnet::ConvNet::_update_buffers_(NAM_SAMPLE** input, const int num_frames) +-{ +- this->Buffer::_update_buffers_(input, num_frames); ++ _input_matrix.resize(NumInputChannels(), prepared_size); ++ _input_matrix.setZero(); ++ _head_output.resize(NumOutputChannels(), prepared_size); ++ _head_output.setZero(); + +- // All channels use the same buffer size +- const long buffer_size = (long)this->_input_buffers[0].size(); +- +- // Only need _block_vals[0] for the head +- // Conv1D layers manage their own buffers now +- if (this->_block_vals[0].rows() != this->_blocks.back().get_out_channels() +- || this->_block_vals[0].cols() != buffer_size) +- { +- this->_block_vals[0].resize(this->_blocks.back().get_out_channels(), buffer_size); +- this->_block_vals[0].setZero(); +- } +-} +- +-void nam::convnet::ConvNet::_rewind_buffers_() +-{ +- // Conv1D instances now manage their own ring buffers and handle rewinding internally +- // So we don't need to rewind _block_vals for Conv1D layers +- // We only need _block_vals for the head, and it doesn't need rewinding since it's only used +- // for the current frame range +- +- // Just rewind the input buffer (for Buffer base class) +- this->Buffer::_rewind_buffers_(); ++ for (auto& block : _blocks) ++ block.SetMaxBufferSize(prepared_size); + } + + // Config parser +diff --git a/NAM/convnet.h b/NAM/convnet.h +index 394389e..a34fe23 100644 +--- a/NAM/convnet.h ++++ b/NAM/convnet.h +@@ -92,6 +92,10 @@ public: + /// \return Block reference to the output + Eigen::Block<Eigen::MatrixXf> GetOutput(const int num_frames); + ++ /// \brief Get the full pre-allocated output buffer ++ /// \return Const reference; only the first num_frames columns are valid ++ const Eigen::MatrixXf& GetOutput() const { return _output; } ++ + /// \brief Get the number of output channels + /// \return Number of output channels + long get_out_channels() const; +@@ -155,13 +159,11 @@ public: + + protected: + std::vector<ConvNetBlock> _blocks; +- std::vector<Eigen::MatrixXf> _block_vals; ++ Eigen::MatrixXf _input_matrix; // (in_channels, prepared maximum frames) + Eigen::MatrixXf _head_output; // (out_channels, num_frames) + _Head _head; + void _verify_weights(const int channels, const std::vector<int>& dilations, const bool batchnorm, + const size_t actual_weights); +- void _update_buffers_(NAM_SAMPLE** input, const int num_frames) override; +- void _rewind_buffers_() override; + + int mPrewarmSamples = 0; // Pre-compute during initialization + }; diff --git a/cmake/patches/NAMCoreSlimmablePendingFastPath.patch b/cmake/patches/NAMCoreSlimmablePendingFastPath.patch new file mode 100644 index 0000000..f7691f7 --- /dev/null +++ b/cmake/patches/NAMCoreSlimmablePendingFastPath.patch @@ -0,0 +1,115 @@ +diff --git a/NAM/wavenet/slimmable.cpp b/NAM/wavenet/slimmable.cpp +index 7112105..fe38781 100644 +--- a/NAM/wavenet/slimmable.cpp ++++ b/NAM/wavenet/slimmable.cpp +@@ -306,44 +306,59 @@ bool is_full_size(const std::vector<wavenet::LayerArrayParams>& params, const st + + } // anonymous namespace + ++static_assert(std::atomic<bool>::is_always_lock_free, ++ "SlimmableWavenet requires a lock-free pending-model publication hint"); ++ + #if NAM_HAS_ATOMIC_SHARED_PTR + void SlimmableWavenet::_pending_clear_release() + { ++ _pending_available.store(false, std::memory_order_release); + _pending_staged.store({}, std::memory_order_release); + } + + std::shared_ptr<SlimmableWavenet::StagedSlimModel> SlimmableWavenet::_pending_load_acquire() const + { ++ if (!_pending_available.load(std::memory_order_acquire)) ++ return {}; + return _pending_staged.load(std::memory_order_acquire); + } + + void SlimmableWavenet::_pending_store_release(std::shared_ptr<StagedSlimModel> p) + { + _pending_staged.store(std::move(p), std::memory_order_release); ++ _pending_available.store(true, std::memory_order_release); + } + + std::shared_ptr<SlimmableWavenet::StagedSlimModel> SlimmableWavenet::_pending_exchange_take_acq_rel() + { ++ if (!_pending_available.exchange(false, std::memory_order_acq_rel)) ++ return {}; + return _pending_staged.exchange({}, std::memory_order_acq_rel); + } + #else + void SlimmableWavenet::_pending_clear_release() + { ++ _pending_available.store(false, std::memory_order_release); + std::atomic_store_explicit(&_pending_staged, std::shared_ptr<StagedSlimModel>{}, std::memory_order_release); + } + + std::shared_ptr<SlimmableWavenet::StagedSlimModel> SlimmableWavenet::_pending_load_acquire() const + { ++ if (!_pending_available.load(std::memory_order_acquire)) ++ return {}; + return std::atomic_load_explicit(&_pending_staged, std::memory_order_acquire); + } + + void SlimmableWavenet::_pending_store_release(std::shared_ptr<StagedSlimModel> p) + { + std::atomic_store_explicit(&_pending_staged, std::move(p), std::memory_order_release); ++ _pending_available.store(true, std::memory_order_release); + } + + std::shared_ptr<SlimmableWavenet::StagedSlimModel> SlimmableWavenet::_pending_exchange_take_acq_rel() + { ++ if (!_pending_available.exchange(false, std::memory_order_acq_rel)) ++ return {}; + return std::atomic_exchange_explicit(&_pending_staged, std::shared_ptr<StagedSlimModel>{}, std::memory_order_acq_rel); + } + #endif +@@ -488,10 +503,15 @@ void SlimmableWavenet::_stage_rebuild_model(const std::vector<int>& target_chann + + void SlimmableWavenet::process(NAM_SAMPLE** input, NAM_SAMPLE** output, const int num_frames) + { +- if (auto pack = _pending_exchange_take_acq_rel()) ++ // MSVC implements atomic<shared_ptr> with an internal lock. Keep that operation ++ // entirely off the steady-state audio path; it runs only when a staged model exists. ++ if (_pending_available.load(std::memory_order_acquire)) + { +- _active_model = std::move(pack->model); +- _current_channels = std::move(pack->channels); ++ if (auto pack = _pending_exchange_take_acq_rel()) ++ { ++ _active_model = std::move(pack->model); ++ _current_channels = std::move(pack->channels); ++ } + } + if (_active_model) + _active_model->process(input, output, num_frames); +diff --git a/NAM/wavenet/slimmable.h b/NAM/wavenet/slimmable.h +index 12c0268..740e83e 100644 +--- a/NAM/wavenet/slimmable.h ++++ b/NAM/wavenet/slimmable.h +@@ -1,5 +1,6 @@ + #pragma once + ++#include <atomic> + #include <memory> + #include <vector> + +@@ -15,10 +16,6 @@ + #define NAM_HAS_ATOMIC_SHARED_PTR 0 + #endif + +-#if NAM_HAS_ATOMIC_SHARED_PTR +- #include <atomic> +-#endif +- + #include "../dsp.h" + #include "json.hpp" + #include "../model_config.h" +@@ -88,6 +85,9 @@ private: + /// Staged model; synchronized via deprecated std::atomic_* overloads for shared_ptr only. + std::shared_ptr<StagedSlimModel> _pending_staged; + #endif ++ /// Lock-free publication hint. The audio thread reads this first so steady-state ++ /// processing never enters the potentially locked atomic<shared_ptr> implementation. ++ std::atomic<bool> _pending_available{false}; + + std::vector<int> _current_channels; + int _current_buffer_size = 0; diff --git a/docs/IMPLEMENTATION_PLAN.md b/docs/IMPLEMENTATION_PLAN.md deleted file mode 100644 index e0c1345..0000000 --- a/docs/IMPLEMENTATION_PLAN.md +++ /dev/null @@ -1,429 +0,0 @@ -# Studio13-v3 Implementation Plan - -> **Goal**: Close the gap between Studio13-v3 and professional DAWs like Ardour/REAPER by implementing missing features end-to-end (C++ backend + bridge + React frontend). - ---- - -## Remaining Work — Honest Audit (March 2026) - -Everything below was audited against the actual codebase. Features are categorized by what's actually missing. - -### Category A: Broken — Code Exists Both Sides But Not Connected - -| # | Feature | Problem | Fix Effort | -|---|---------|---------|------------| -| 8 | Clip Gain Envelope | Backend interpolation works. Frontend state+undo works. But `syncClipsWithBackend()` never sends `gainEnvelope` to backend. Also no UI to draw envelope points on clips. | Medium | -| 13 | Trigger Engine (Clip Launcher) | Backend `TriggerEngine::processBlock()` runs in audio callback. Frontend store has full state. But NO bridge functions sync slot data from frontend to backend. Clips never actually launch. | Medium | - -### Category B: Backend Done, No Frontend UI - -| # | Feature | What Exists | What's Missing | -|---|---------|-------------|----------------| -| 4 | Channel Strip EQ | S13EQ class (HPF+LPF+4 bands), processes before FX chain in TrackProcessor | No UI controls — no enable toggle, no frequency/gain/Q knobs | -| 5 | Sidechain Routing | Topological sort, sidechain buffer routing, TrackProcessor expands channels | No UI to select sidechain source per plugin | -| 6 | Pan Law Options | All 4 algorithms (Constant Power, -4.5dB, -6dB, Linear) in TrackProcessor | No dropdown UI in Project Settings | -| 7 | DC Offset Removal | 5Hz high-pass filter in TrackProcessor | No toggle UI per track | -| 10 | Monitoring FX Chain | Post-master chain, correctly excluded from renders | No UI to add/manage monitoring FX | -| 12 | Timecode Sync | Full MIDI Clock + MTC send/receive in TimecodeSync.h/cpp | No settings panel for sync source/MIDI device/framerate | - -### Category C: Not Implemented At All - -| # | Feature | Notes | -|---|---------|-------| -| 29 | Crosshair Cursor | Only exists in ParametricGraph (EQ editing), NOT as timeline toggle | -| 30 | Accessibility | No ARIA labels, no focus indicators, no systematic keyboard navigation | -| — | Missing Media Resolver | No detection of missing audio files on project load, no relink dialog | -| — | Tab-to-Transient Navigation | No Tab/Shift+Tab handler for jumping between transients | -| — | Contextual Help (F1) | helpTexts.ts exists but no F1 key handler or hover help system | -| — | In-App Getting Started Guide | No tutorial/onboarding component | -| — | User Manual / API Docs | No manual or doc generation | -| — | Plugin Crash Isolation | Only blacklist exists, no separate-process sandboxing | -| — | 32-bit Plugin Bridge | Not implemented | - -### Category D: Uncertain / Incomplete - -| Feature | Status | -|---------|--------| -| Lagrange Resampling in Render | Referenced in code comments but implementation not fully visible | -| Note Expression / MPE | Infrastructure exists (setNoteExpression action, pitchBend/pressure/slide) but Piano Roll UI for MPE editing may be incomplete | - ---- - -## Detailed Plans for Remaining Work - -### Plan R1: Fix Clip Gain Envelope (Feature #8) - -**Priority**: High — backend code is wasted without the sync - -**Step 1: Add gainEnvelope to syncClipsWithBackend()** -- File: `frontend/src/store/useDAWStore.ts` -- In `syncClipsWithBackend()` (~line 4278-4350), after syncing basic clip properties, add: - ```typescript - // After addPlaybackClip calls, sync gain envelopes - for (const track of state.tracks) { - for (const clip of track.clips) { - if (clip.gainEnvelope && clip.gainEnvelope.length > 0) { - await nativeBridge.setClipGainEnvelope(track.id, clip.id, clip.gainEnvelope); - } - } - } - ``` -- Also add gainEnvelope to the clip key hash so changes trigger re-sync - -**Step 2: Add clip gain drawing UI** -- File: `frontend/src/components/Timeline.tsx` -- When a clip is selected and Shift is held, show gain envelope overlay: - - Render gain points as small circles on the clip - - Click to add point, drag to move, right-click to delete - - Points are relative to clip start, value 0.0-2.0 (0 = silence, 1.0 = unity, 2.0 = +6dB) -- Wire to existing `addClipGainPoint()`, `moveClipGainPoint()`, `removeClipGainPoint()` in store - -**Undo**: Already implemented in store (addClipGainPoint etc. use commandManager) - ---- - -### Plan R2: Fix Trigger Engine Bridge (Feature #13) - -**Priority**: High — complete audio engine wasted without bridge - -**Step 1: Add bridge functions in MainComponent.cpp** -- Register native functions: - - `setTriggerSlot(trackIndex, slotIndex, filePath, duration, offset, mode)` → calls `triggerEngine.setSlotClip()` - - `triggerSlot(trackIndex, slotIndex)` → calls `triggerEngine.triggerSlot()` - - `stopSlot(trackIndex, slotIndex)` → calls `triggerEngine.stopSlot()` - - `triggerScene(sceneIndex)` → calls `triggerEngine.triggerScene()` - - `stopAllSlots()` → calls `triggerEngine.stopAll()` - - `setTriggerQuantize(mode)` → calls `triggerEngine.setQuantizeMode()` - - `getTriggerGridState()` → calls `triggerEngine.getGridState()` - -**Step 2: Add NativeBridge.ts wrappers** -- Add corresponding functions with mock fallbacks - -**Step 3: Wire frontend store to bridge** -- In `triggerClipLauncherSlot()`, `stopClipLauncherSlot()`, etc. — add `nativeBridge.triggerSlot()` calls -- On play, sync all slot assignments to backend via `setTriggerSlot()` for each populated slot - -**Step 4: Add Clip Launcher UI** -- New component `ClipLauncherView.tsx` — grid of slots, each with play/stop/record buttons -- Toggle between Arrangement view and Session view -- Scene launch row at bottom - ---- - -### Plan R3: Channel Strip EQ UI (Feature #4) - -**Priority**: Medium — enhances mixing workflow - -**Where**: `frontend/src/components/ChannelStrip.tsx` - -**Implementation**: -- Add collapsible "EQ" section in ChannelStrip (below existing Gain Staging section) -- Enable/disable toggle → calls `nativeBridge.setChannelStripEQEnabled(trackId, bool)` -- Per-band controls (HPF, LPF, 4 parametric): - - Frequency knob/slider - - Gain knob/slider (parametric bands only) - - Q knob/slider (parametric bands only) - - Enable toggle per band -- Wire each control to `nativeBridge.setChannelStripEQParam(trackId, bandIndex, paramName, value)` -- Optional: Reuse ParametricGraph component for visual EQ curve - -**Bridge functions needed**: Already exposed (`setChannelStripEQEnabled`, `setChannelStripEQParam`) - ---- - -### Plan R4: Sidechain Routing UI (Feature #5) - -**Priority**: Medium — essential for sidechain compression workflows - -**Where**: `frontend/src/components/FXChainPanel.tsx` - -**Implementation**: -- Per plugin slot, add a "Sidechain" dropdown (only for plugins that support sidechain input) -- Dropdown lists all other tracks as potential sidechain sources -- On select → `nativeBridge.setSidechainSource(trackId, fxIndex, sourceTrackId)` -- "None" option → `nativeBridge.clearSidechainSource(trackId, fxIndex)` -- Visual indicator when sidechain is active (small icon/badge on plugin slot) - -**Bridge functions needed**: Already exposed (`setSidechainSource`, `clearSidechainSource`, `getSidechainSource`) - ---- - -### Plan R5: Pan Law Options UI (Feature #6) - -**Priority**: Low — rarely changed, but easy to add - -**Where**: `frontend/src/components/ProjectSettingsModal.tsx` - -**Implementation**: -- Add "Pan Law" dropdown in project settings, options: - - Constant Power (-3dB) — default - - -4.5dB - - -6dB (Linear) - - 0dB (Unity) -- On change → `nativeBridge.setPanLaw(value)` -- Store current pan law in project state for save/load - -**Bridge functions needed**: Already exposed (`setPanLaw`) - ---- - -### Plan R6: DC Offset Removal UI (Feature #7) - -**Priority**: Low — niche feature, easy to add - -**Where**: `frontend/src/components/ChannelStrip.tsx` or track context menu - -**Implementation**: -- Add "DC Offset" toggle per track (small checkbox or button) -- On toggle → `nativeBridge.setTrackDCOffset(trackId, enabled)` -- Visual indicator when active - -**Bridge functions needed**: Already exposed (`setTrackDCOffset`) - ---- - -### Plan R7: Monitoring FX Chain UI (Feature #10) - -**Priority**: Medium — important for recording musicians - -**Where**: New section in `MixerPanel.tsx` or dedicated panel - -**Implementation**: -- Add "Monitor FX" section after Master channel strip -- Add/remove plugins → `nativeBridge.addMonitoringFX(pluginId)`, `removeMonitoringFX(index)` -- Bypass toggle → `nativeBridge.bypassMonitoringFX(index, bypassed)` -- Open plugin editor → `nativeBridge.openMonitoringFXEditor(index)` -- Clear visual label: "Monitor Only — not included in renders" - -**Bridge functions needed**: Already exposed - ---- - -### Plan R8: Timecode Sync Settings UI (Feature #12) - -**Priority**: Low — needed for professional studio integration - -**Where**: New component `TimecodeSettingsPanel.tsx` or tab in SettingsModal - -**Implementation**: -- Sync Source dropdown: Internal / MIDI Clock / MTC -- MIDI Output Device selector (for clock/MTC send) -- MIDI Input Device selector (for external sync) -- SMPTE Frame Rate: 24 / 25 / 29.97df / 30 -- Sync status indicator (locked/unlocked/seeking) -- Wire to TimecodeSyncManager via bridge calls: - - `setSyncSource(mode)` - - `setTimecodeFrameRate(fps)` - - `setTimecodeMIDIDevice(deviceId, isInput)` - -**Bridge functions needed**: Need to be added to MainComponent.cpp for TimecodeSyncManager - ---- - -### Plan R9: Crosshair Cursor (Feature #29) - -**Priority**: Low — visual aid - -**Where**: `frontend/src/components/Timeline.tsx` - -**Implementation**: -- Add `showCrosshair: boolean` to store, toggle via View menu -- On mouse move over timeline stage, render: - - Vertical line from top to bottom at mouse X - - Horizontal line across full width at mouse Y - - Semi-transparent, dashed style -- Use a dedicated Konva Layer (non-listening) for performance -- Hide during drag operations - ---- - -### Plan R10: Accessibility (Feature #30) - -**Priority**: Medium-High — important for inclusivity, significant effort - -**Implementation** (phased): - -**Phase A: ARIA labels + focus indicators** -- Add `aria-label` to all buttons, inputs, sliders across all components -- Add `tabIndex` to interactive elements -- Add visible focus rings (already in Tailwind: `focus:ring-2 focus:ring-daw-accent`) -- Ensure all tooltips include shortcut hints - -**Phase B: Keyboard navigation** -- Track list: Arrow up/down to select tracks, Enter to expand -- Timeline: Arrow keys to move selection, Shift+Arrow to extend -- Mixer: Tab between channel strips, arrow keys for faders -- All modals: Tab trap, Escape to close - -**Phase C: Screen reader optimization** -- Announce state changes (recording started, track armed, etc.) -- Live regions for transport status, meter readings -- Landmark roles for main areas (timeline, mixer, transport) - ---- - -### Plan R11: Missing Media Resolver - -**Priority**: Medium — prevents broken projects - -**Where**: `frontend/src/store/useDAWStore.ts` (in project load) + new dialog component - -**Implementation**: -- On project load, after parsing clips, check if each audio file exists via `nativeBridge.fileExists(path)` -- If any files are missing, show `MissingMediaDialog.tsx`: - - List of missing files with original paths - - "Locate" button per file → opens file picker - - "Locate Folder" → search a directory for matching filenames - - "Skip" → keep clip but mark as offline (dimmed in timeline) -- Update clip paths after relinking - ---- - -### Plan R12: Tab-to-Transient Navigation - -**Priority**: Low — workflow enhancement - -**Where**: `frontend/src/components/App.tsx` (keyboard handler) + `Timeline.tsx` - -**Implementation**: -- Tab key: Jump playhead to next transient in selected clip -- Shift+Tab: Jump to previous transient -- Requires transient detection: call `nativeBridge.detectTransients(filePath, sensitivity)` (may need C++ implementation if not already present) -- Cache transient positions per clip -- Move playhead to nearest transient after current position - ---- - -## Completed Features Reference - -<details> -<summary>Phase 1: Wire Frontend to Backend (ALL COMPLETED)</summary> - -- 1.1 Automation Playback — Per-sample volume/pan automation in TrackProcessor, frontend sync, touch/latch modes -- 1.2 Tempo Map — Binary search tempo lookup, metronome integration, tempo markers -- 1.3 Comping / Takes — Frontend take management synced to backend via clip swap -- 1.4 Razor Editing — Backend clip sync after razor content deletion -- 1.5 Track Groups — Linked parameter changes propagated to backend per-track -</details> - -<details> -<summary>Phase 2: Complete Stubs (ALL COMPLETED)</summary> - -- 2.1 MIDI Recording — MIDIRecorder captures events during recording, saves to .mid -- 2.2 Time Stretching — RubberBand/FFmpeg integration for offline stretch -- 2.3 Pitch Shifting — Same engine as time stretching -- 2.4 Sample Rate Conversion on Render — Device rate conversion in render path -- 2.5 Dither — TPDF and noise-shaped dither on 16/24-bit export -- 2.6 Monitoring FX Chain — Backend complete (see Plan R7 for missing UI) -</details> - -<details> -<summary>Phase 3: New Features (ALL COMPLETED except UI gaps)</summary> - -- 3.1 Punch In/Out Recording — Punch range in audio callback -- 3.2 Loop Recording — Multi-take per loop pass -- 3.3 Record-Safe Mode — Per-track lock on arming -- 3.4 LV2 Plugin Support — JUCE built-in + configured search paths -- 3.5 CLAP Plugin Support — CLAPPluginFormat class -- 3.6 Audio Units — Deferred (macOS only) -- 3.7 Surround / Spatial Audio — VBAP panner, speaker layouts -- 3.8 Video Integration — VideoReader + FFmpeg + VideoWindow UI -- 3.9 Timecode / Sync — Backend complete (see Plan R8 for missing UI) -- 3.10 Control Surfaces — Generic MIDI, MCU, OSC implementations -- 3.11 Scripting Engine — Lua s13.* API expanded -- 3.12 Strip Silence — Detection + split -- 3.13 Freeze Track — Render + bypass FX -- 3.14 Session Import/Export — RPP import/export + EDL export -- 3.15 DDP Export — Full DDP 2.0 exporter + UI -</details> - -<details> -<summary>Phase 4: Advanced Features (COMPLETED except bridge gaps)</summary> - -- 4.1 Clip Launch / Trigger Engine — Backend complete (see Plan R2 for broken bridge) -- 4.2 Step Sequencer — Drum Editor implementation -- 4.3 Built-in Effects — S13 EQ/Comp/Gate/Limiter/Delay/Reverb/Chorus/Saturator -- 4.4 Sidechain — Backend complete (see Plan R4 for missing UI) -</details> - -<details> -<summary>Deferred Features — Status</summary> - -**Visual / Cosmetic**: All done (waveform rendering, clip rendering, fade curves, automation styling, themes, track icons, meters, piano roll, transport, scrollbars, loading states, animations, High-DPI, color picker) - -**Interaction / Workflow**: Mostly done. Missing: crosshair cursor (Plan R9), tab-to-transient (Plan R12), contextual help F1. Done: drag-and-drop, custom shortcuts, smart tool, snap preview, track folders, slip editing, marquee zoom, auto-scroll, media browser, project notes, track notes, waveform zoom, spectral view, time selection, recent files. - -**Performance / Optimization**: All done (diff-based sync, waveform virtualization, useShallow everywhere, LRU eviction, concurrent peaks, Konva layers, plugin scan caching, bridge batching, reader pooling). - -**Audio Quality**: Done except Lagrange resampling (uncertain). Done: pan law options (backend), DC offset removal (backend), gain staging display, oversampling, LUFS/phase/spectrum metering. - -**MIDI Editing**: All done (velocity, CC lanes, quantize, transform, step input, multi-clip, MIDI learn, drum editor, MIDI import/export, scale highlighting). Note expression/MPE infrastructure exists but UI may be incomplete. - -**Plugin Management**: Mostly done. Missing: crash isolation (sandboxing), 32-bit bridge. Done: favorites, categories, presets, generic editor, A/B comparison, chain presets, PDC, parameter automation list. - -**Project Management**: All done (templates, archive, missing media — actually missing media resolver NOT done, media pool, cleanup, auto-save, compare, metadata). - -**Mixing / Routing**: Mostly done. Missing: channel strip EQ UI (Plan R3). Done: routing matrix, bus workflow, pre/post fader sends, mixer snapshots, mixer undo, VCA faders. - -**Accessibility**: NOT DONE — see Plan R10. - -**Documentation / Help**: Mostly NOT DONE. Missing: in-app guide, F1 help, user manual, API docs. Done: keyboard shortcut cheat sheet (printable). -</details> - ---- - -## Implementation Priority Order - -### Sprint A (Fix Broken Features) — HIGH PRIORITY -1. **R1: Clip Gain Envelope sync** — Add gainEnvelope to syncClipsWithBackend + clip gain drawing UI -2. **R2: Trigger Engine bridge** — Add bridge functions + wire frontend store + basic Clip Launcher UI - -### Sprint B (Add Missing UI for Backend Features) — MEDIUM PRIORITY -3. **R3: Channel Strip EQ UI** — Collapsible EQ section in ChannelStrip -4. **R4: Sidechain Routing UI** — Per-plugin sidechain source dropdown in FXChainPanel -5. **R5: Pan Law dropdown** — Simple dropdown in ProjectSettingsModal -6. **R6: DC Offset toggle** — Per-track toggle -7. **R7: Monitoring FX UI** — Monitor FX section in mixer - -### Sprint C (Missing Features) — MEDIUM PRIORITY -8. **R9: Crosshair Cursor** — Konva layer with vertical+horizontal lines -9. **R11: Missing Media Resolver** — Detection on project load + relink dialog - -### Sprint D (Accessibility) — MEDIUM-HIGH PRIORITY -10. **R10: Accessibility Phase A** — ARIA labels + focus indicators across all components -11. **R10: Accessibility Phase B** — Keyboard navigation -12. **R10: Accessibility Phase C** — Screen reader optimization - -### Sprint E (Low Priority Remaining) -13. **R8: Timecode Sync UI** — Sync settings panel -14. **R12: Tab-to-Transient** — Transient detection + keyboard navigation -15. Contextual help (F1) system -16. In-app getting started guide -17. User manual / API documentation -18. Plugin crash isolation (separate process sandboxing) -19. 32-bit plugin bridge -20. MPE/Note Expression UI completion - ---- - -## Score Card - -| Category | Done | Remaining | Total | -|----------|------|-----------|-------| -| Core Audio Features (1-13) | 7 | 6 (UI gaps + 2 broken) | 13 | -| Frontend Features (14-30) | 15 | 2 | 17 | -| Backend Features (31-36) | 6 | 0 | 6 | -| Major Flow Changes | 7 | 1 uncertain | 8 | -| Deferred: Visual/Cosmetic | 17 | 0 | 17 | -| Deferred: Interaction/Workflow | 17 | 3 | 20 | -| Deferred: Performance | 14 | 0 | 14 | -| Deferred: Audio Quality | 8 | 1 uncertain | 9 | -| Deferred: MIDI Editing | 11 | 0-1 (MPE) | 11 | -| Deferred: Plugin Management | 8 | 2 | 10 | -| Deferred: Project Management | 7 | 1 | 8 | -| Deferred: Mixing/Routing | 6 | 1 | 7 | -| Deferred: Accessibility | 0 | 6 | 6 | -| Deferred: Documentation | 1 | 4 | 5 | -| **TOTAL** | **~124** | **~27** | **~151** | - -**Completion: ~82%** — Most core functionality works. Remaining work is primarily UI wiring, accessibility, and documentation. diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 0000000..e796ef2 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,38 @@ +# OpenStudio Documentation + +OpenStudio keeps documentation task-oriented and close to the code. The goal is +the same pattern used by mature open-source libraries: a small navigation page, +stable guides by subject, executable examples, and one short roadmap instead of +date-stamped implementation diaries. + +## Start here + +- [User manual](USER_MANUAL.md) — install, configure, record, edit, mix, and export. +- [Implemented features](implemented_features.md) — current feature inventory and caveats. +- [NAM Rack](nam-rack.md) — Guitar/Bass capture workflow, multi-capture selection, DSP/state contract, TONE3000 integration, and release acceptance. +- [Keyboard and mouse profiles](input-profiles.md) — built-in DAW profiles, independent keyboard/mouse selection, scoped bindings, and custom profile import/export. +- [MIDI editor](midi-editor.md) — supported editing contract and manual acceptance. +- [NAM and audio QA](testing.md) — deterministic checks and manual release acceptance. +- [Release roadmap](roadmap.md) — only work that is still open or deliberately deferred. +- [Release runbook](release-runbook.md) — packaging and publication. +- [Release smoke checklist](release-smoke-checklist.md) — final build acceptance. +- [Runtime dependency contract](runtime-dependency-contract.md) — optional runtimes and models. +- [Lua API](API.md) — scripting reference. + +## Documentation rules + +1. Document the current product, not the history of how it was reached. +2. Put user workflows before implementation detail. +3. Keep runnable commands beside the behavior they verify. +4. Mark audio evidence as `pass`, `fail`, `diagnostic_only`, or + `not_asserted`. +5. Never claim subjective tone, naturalness, or commercial-product parity from + automated metrics. +6. Keep dated investigations in Git history or an issue tracker after their + decisions have been folded into a stable guide. +7. Prefer links to authoritative source files over copied code. +8. Update the guide and test in the same change when a public contract changes. + +Detailed research that remains useful for pitch rendering is consolidated in +`pitch_renderer_research_notes.md`. It is technical reference material, not an +active release plan. diff --git a/docs/USER_MANUAL.md b/docs/USER_MANUAL.md index c084149..f5a6795 100644 --- a/docs/USER_MANUAL.md +++ b/docs/USER_MANUAL.md @@ -27,6 +27,12 @@ Version 3.0 -- Comprehensive Reference Guide --- +> **Shortcut notation:** Inline shortcuts in this manual show the OpenStudio +> default keyboard and mouse profiles. The active profile, operating system, +> editor scope, and custom overrides can change them. **Help > Keyboard +> Shortcuts** is authoritative for keys and selected base profiles; the +> fine-grained mouse-gesture overrides are shown in **Preferences > Mouse**. + ## 1. Getting Started ### 1.1 System Requirements @@ -35,7 +41,8 @@ OpenStudio is a desktop DAW built with a JUCE C++ audio backend and a React/Type **Minimum requirements:** -- Windows 10 or later (64-bit), or macOS for the desktop release +- Windows 10 or later (64-bit), a supported macOS release, or an x86-64 Linux + desktop capable of running AppImage packages - WebView2 Runtime on Windows (typically pre-installed on Windows 10/11) - Audio interface with ASIO, WASAPI, or DirectSound drivers on Windows - 4 GB RAM (8 GB or more recommended) @@ -53,7 +60,7 @@ OpenStudio is a desktop DAW built with a JUCE C++ audio backend and a React/Type OpenStudio production releases are distributed as platform-specific install packages. -1. Download the latest Windows installer or macOS package from the official download page. +1. Download the latest Windows installer, macOS package, or Linux AppImage from the official download page. 2. Run the installer and complete the setup steps for your platform. 3. Launch OpenStudio from the Start menu, Applications folder, or desktop shortcut. @@ -61,6 +68,10 @@ OpenStudio production releases are distributed as platform-specific install pack **macOS:** OpenStudio v1 ships as an unsigned DMG. Drag `OpenStudio.app` to `Applications`. If macOS blocks launch, right-click the app, choose **Open**, and if needed allow it under **System Settings > Privacy & Security**. +**Linux:** mark the downloaded AppImage executable and launch it from your +desktop or terminal. FFmpeg-backed operations use an optional system `ffmpeg` +on `PATH`; the AppImage does not bundle an arbitrary host FFmpeg binary. + OpenStudio also includes automatic update support. You can trigger a manual update check from **Help > Check for Updates...**. Stem separation uses optional AI Tools that are installed separately from the base app. If AI Tools are missing, use the **AI Tools** button beside the Settings button or the **Install AI Tools** button inside the Stem Separation dialog. @@ -220,20 +231,20 @@ The Timeline is the central canvas-based workspace where you arrange audio and M - Trim handles on the left and right edges (in Select or Smart tool mode) - **Grid lines**: Vertical lines aligned to the current grid setting (bar, beat, subdivision). - **Automation lanes**: Per-track lanes below the track that display automation curves. -- **Time selection**: A highlighted region created by clicking and dragging on the ruler or timeline background. -- **Razor edits**: Semi-transparent selection areas created with Alt+drag for precise non-destructive editing. +- **Time selection**: A highlighted region created with Primary+drag on the timeline background or Shift+drag on the ruler (`Primary` is Ctrl on Windows/Linux and Command on macOS). +- **Razor edits**: Semi-transparent selection areas created with Alt/Option+drag on the timeline background for precise non-destructive editing. **Essential Navigation:** - **Scroll**: native vertical scrolling through the workspace. - **Ctrl+Scroll**: horizontal timeline zoom around the mouse pointer. - **Shift+Scroll**: horizontal timeline scroll. - **Alt+Scroll**: track height resize. -- **Ctrl+Shift+Scroll**: track-height zoom style adjustment for faster resizing. +- **Ctrl+Shift+Scroll**: waveform-height zoom for the hovered track. - **First-session hotkeys**: `Space`, `Ctrl+R`, `Ctrl+T`, `Ctrl+M`, `S`, `B`, `Delete`, `Ctrl+S`, `F1`, `Ctrl+Shift+P`. -- **Need a refresher?** Press `F1` for the searchable **Help Reference** and open **Help > Keyboard Shortcuts** for the full shortcut list and custom global rebinding. +- **Need a refresher?** Press `F1` for the searchable **Help Reference** and open **Help > Keyboard Shortcuts** for the full shortcut list and custom scoped rebinding. **Zoom and Scroll:** -- **Horizontal zoom**: `Ctrl+Scroll wheel` (or `Ctrl+Plus` / `Ctrl+Minus`). Zoom range: 1 to 1000 pixels per second. +- **Horizontal zoom**: `Ctrl+Scroll wheel` (or `Ctrl++` / `Ctrl+-`). Zoom range: 1 to 1000 pixels per second. - **Horizontal scroll**: Shift+scroll wheel, or use the horizontal scrollbar. - **Vertical scroll**: Scroll wheel when hovering over the track area. - **Zoom to Fit**: `Ctrl+0` resets zoom to a standard overview level. @@ -256,9 +267,9 @@ The Transport Bar runs along the bottom of the window and provides: **Center Section - Transport Controls:** - **Go to Start** (skip back icon): Returns the playhead to the beginning. - **Record** (red circle): Starts recording on armed tracks. `Ctrl+R` -- **Play** (green triangle): Starts playback. `Space` -- **Stop** (square): Stops playback/recording. `Space` (while playing) -- **Pause** (parallel bars): Pauses playback. +- **Play / Pause** (green triangle): Starts or pauses playback. `Space` +- **Stop** (square): Stops playback or recording. There is no separate default keyboard shortcut; `Space` stops an active recording through the Play / Pause action. +- **Pause** (parallel bars): Pauses playback in place. - **Loop** (repeat icon): Toggles loop playback mode. `L` - **Metronome** (metronome icon): Toggles the click track. @@ -301,8 +312,8 @@ OpenStudio includes several additional panels accessible via the View menu: | Big Clock | View menu | Large timecode display | | Render Queue | View menu | Queue and manage multiple render jobs | | Routing Matrix | View menu | Visual signal routing between tracks/buses | -| Media Explorer | View menu | Browse and preview media files | -| Media Pool | View menu | All media files used in the current project | +| Media Explorer | View menu | Browse/import media; backend audio preview is partial | +| Media Pool | View menu | State/actions exist; the full panel is not mounted yet | | Loudness Meter | View > Metering | LUFS loudness measurement | | Spectrum Analyzer | View > Metering | Frequency spectrum display | | Phase Correlation Meter | View > Metering | Stereo phase correlation | @@ -311,7 +322,7 @@ OpenStudio includes several additional panels accessible via the View menu: | Toolbar Editor | View menu | Customize toolbar layout | | Command Palette | `Ctrl+Shift+P` | Fuzzy search for any action in the application | | Help Reference | `F1` | Searchable in-app reference for controls and features | -| Keyboard Shortcuts | Help menu | Searchable shortcut reference and custom global rebinding | +| Keyboard Shortcuts | Help menu | Searchable reference, input profiles, and custom scoped rebinding | --- @@ -616,8 +627,8 @@ MIDI Learn allows you to map physical MIDI controller knobs, faders, and buttons **Clip selection:** - Click a clip to select it. -- `Ctrl+Click` to add/remove clips from the selection. -- `Shift+Click` for range selection. +- Primary+click to add/remove a clip from the selection (`Primary` is Ctrl on Windows/Linux and Command on macOS). +- Plain-drag empty timeline space to marquee-select every audio or MIDI clip intersecting the rectangle. - Click empty timeline background to deselect all clips. - `Ctrl+Shift+A` to select all clips. - `Esc` to deselect all. @@ -629,7 +640,7 @@ MIDI Learn allows you to map physical MIDI controller knobs, faders, and buttons - `Ctrl+A` to select all tracks. **Time selection:** -- Click and drag on the timeline ruler to create a time selection. +- Primary+drag on the timeline background, or Shift+drag on the ruler, to create a time selection (`Primary` is Ctrl on Windows/Linux and Command on macOS). - The time selection is highlighted as a shaded region. - Time selections are used for punch recording, rendering bounds, and editing operations. @@ -637,8 +648,9 @@ MIDI Learn allows you to map physical MIDI controller knobs, faders, and buttons - Click and drag a clip to move it to a new position or track. - When snap is enabled, the clip snaps to grid lines. -- Hold `Ctrl` while dragging to copy the clip instead of moving it. -- Hold `Shift` while dragging to constrain movement to horizontal only (time axis). +- Hold `Primary` while dragging to copy the clip instead of moving it. +- Hold `Shift` while dragging to lock movement to the first axis that crosses the drag threshold. +- Hold `Alt`/`Option` while dragging to bypass snapping. - Multi-selected clips move together as a group. ### 6.3 Splitting Clips @@ -665,7 +677,7 @@ Trim the start or end of a clip to reveal or hide content: Slip editing moves the audio content within a clip without changing the clip's position on the timeline: -1. Hold `Ctrl+Shift` and drag within a clip. +1. Hold `Primary+Shift` and drag within a clip (`Primary` is Ctrl on Windows/Linux and Command on macOS). 2. The clip's boundaries stay fixed, but the audio content slides earlier or later within the clip. 3. This is useful for adjusting the timing of audio relative to the clip boundaries. @@ -680,6 +692,9 @@ Each clip has adjustable fade-in and fade-out regions: **Auto-Crossfade**: When enabled (toggle in Main Toolbar or View menu), overlapping clips on the same track automatically create crossfades. +For an audio clip's gain envelope, Shift+click the clip to add a point. Drag an +existing point to change its time and gain; right-click a point to remove it. + ### 6.7 Undo and Redo OpenStudio provides comprehensive undo/redo support for virtually all editing operations: @@ -738,12 +753,12 @@ When a time selection is active, the following operations are available: Razor editing provides a fast way to select and delete specific regions across multiple tracks: -1. Hold `Alt` and drag on the timeline to create a razor selection area. +1. Hold `Alt`/`Option` and drag on the timeline background to create a razor selection area. 2. The razor area appears as a semi-transparent highlight. 3. Press `Delete` or use **Edit > Delete Razor Edit Content** to remove the content within the razor areas. -4. Use **Edit > Clear Razor Edits** to dismiss the razor selection without deleting. +4. Run **Clear Razor Edits** from the Command Palette to dismiss the razor selection without deleting. -Razor edits respect ripple mode settings. +Deleting razor-edit content currently leaves a gap; it does not apply ripple mode. ### 6.12 Ripple Editing @@ -869,8 +884,8 @@ MIDI Continuous Controller (CC) messages can be drawn and edited in CC lanes: Align note start times to the grid: 1. Select notes (or select all with `Ctrl+A` in the Piano Roll). -2. Press `Q` or go to **MIDI > Quantize Notes...** -3. The quantize dialog allows setting the quantize grid, strength, and whether to quantize note ends. +2. Open **MIDI > Quantize Notes...** to choose the grid, strength, and whether to quantize note ends. +3. Press `Q` to reapply the last-used MIDI quantize settings without reopening the panel. ### 7.9 MIDI Transform Operations @@ -905,7 +920,9 @@ The Piano Roll can highlight notes that belong to a specific musical scale: ### 7.11 Drum Editor -Toggle the Drum Editor mode via **View > Toggle Drum Editor**. The drum editor provides a grid-based view optimized for drum programming, where each row represents a drum instrument rather than a pitch. +The Drum Editor action/state is present, but a complete mounted drum-grid editor +is not part of the current workspace. Use the Piano Roll for MIDI drum-note +editing in this build. ### 7.12 Multi-Clip MIDI Editing @@ -1115,7 +1132,9 @@ Bypass all effects on a track without removing them: ### 9.8 FX Chain Reordering -Drag and drop effects within the FX Chain Panel to change their order. The signal flows from top to bottom through the chain. +Drag and drop effects within track and input FX chains to change their order. +The signal flows from top to bottom. Master-FX reordering is not supported in +the current UI. ### 9.9 Safe Mode (Bypass FX on Load) @@ -1125,6 +1144,54 @@ If a project with heavy or problematic plugins is slow to load, open it in Safe - All FX plugins are bypassed on load, allowing the project to open quickly. - You can then selectively enable plugins as needed. +### 9.10 NAM Rack + +**OpenStudio NAM Rack** is the built-in Guitar/Bass workspace for NAM A1/A2 +pedal, amp, and full-rig captures. + +1. Add **OpenStudio NAM Rack** from the built-in effects list and select the + live instrument input. +2. Choose **Guitar** or **Bass**. The profile changes appropriate hidden + tracking/frequency voicing and library filtering without replacing the + current capture, IR, or visible control values. +3. Load a local `.nam` file, or connect TONE3000 and open a tone pack. +4. If a pack contains multiple captures, choose **View Captures**, select the + exact child capture, and check its topology badge. **RAW / AMP ONLY** needs + an external cabinet IR; **CAB EMBEDDED** is a full rig and bypasses the + external cabinet stage while preserving the selected IR for later. +5. **Selecting** a row changes only the pending choice. **Audition** temporarily + routes that capture through live input. Audition another child to compare, + or choose **Stop**/Cancel to restore the previous rack state. +6. Choose **Use** to commit that exact capture. Reopen the capture selector and + use another child to replace it. +7. Use the Amp power control to bypass/enable the capture without unloading it, + or use **Unload** to clear the slot. The immediate rack recovery card handles + missing Amp/Cab assets with Locate, Replace, and Bypass. Project-open + missing-media recovery also covers Pedal NAM assets and can offer Search in + Folder, a library copy, Locate, and supported TONE3000 Re-download. +8. Save a rack tone or project to recall the complete creative state. Device + calibration remains local playback-environment state rather than silently + travelling as part of a tone. + +Factory effect templates contain control settings only: they do not include a +NAM capture or cabinet IR and use the Amp/Full-Rig that is already loaded. +Exported rack presets reference local NAM/IR files instead of embedding those +binaries, so another machine may require Locate, Search, or supported +Re-download recovery. + +Local `.nam` loading works without TONE3000. Public-build TONE3000 availability +depends on the partner-approved integration and release configuration. On +Linux, sign-in also requires `secret-tool` (usually installed by the +`libsecret-tools` package) and an available Secret Service/keyring. + +Audition and Use/Cancel are transactional, and prepared model swaps reject +stale requests. Perceived click/noise behavior on a real interface is still a +release audition item, especially at small buffers; automation alone is not a +substitute for listening to the exact build. + +See the [NAM Rack guide](nam-rack.md) for the complete signal chain, +Guitar/Bass mapping, state migration, TONE3000 connection, and QA contract. + --- ## 10. Automation @@ -1248,16 +1315,18 @@ Open the Render dialog via **File > Render...** or press `Ctrl+Alt+R`. ### 12.2 Render Source -Choose what to render: +Choose the required source. Master and track-stem paths are active; the two +selected-item choices are visible but do not yet filter the backend to the +selected clips: -| Source | Description | -|-----------------------------|-------------------------------------------------------| -| **Master mix** | Full stereo mix of all tracks through the master bus | -| **Selected tracks (stems)** | Individual stems for each selected track | -| **Master mix + all stems** | Master mix plus individual stems for every track | -| **Selected media items** | Only the selected clips, direct output | -| **Selected items via master** | Selected clips routed through the master FX chain | -| **Razor edit areas** | Render each razor edit area as a separate file | +| Source | Current status | +|---|---| +| **Master mix** | Full mix of all tracks through the master bus | +| **Selected tracks (stems)** | Individual stems for selected tracks | +| **Master mix + all stems** | Master mix plus a stem for every track | +| **Selected media items** | UI choice only; selected-clip filtering is pending | +| **Selected items via master** | UI choice only; selected-clip filtering is pending | +| **Razor edit areas** | Renders each razor-area time range as a separate stem from the track that owns the area | ### 12.3 Render Bounds @@ -1292,16 +1361,16 @@ Choose the time range to render: **Primary output format:** -| Format | Description | Bit Depth Options | -|-----------------|--------------------------------------|----------------------------| -| **WAV** | Standard uncompressed audio | 16-bit, 24-bit, 32-bit float | -| **AIFF** | Apple uncompressed audio | 16-bit, 24-bit, 32-bit float | -| **FLAC** | Lossless compressed audio | 16-bit, 24-bit | -| **MP3** | Lossy compressed (128-320 kbps) | N/A (bitrate-based) | -| **OGG Vorbis** | Lossy compressed (quality 3-10) | N/A (quality-based) | +| Format | Current status | +|---|---| +| **WAV** | Uncompressed output with the available bit-depth selection | +| **AIFF** | Uncompressed output with the available bit-depth selection | +| **FLAC** | Lossless compressed output with the available bit-depth selection | +| **MP3** | FFmpeg-encoded output using the selected bitrate; FFmpeg is bundled on Windows and must be installed on `PATH` on macOS/Linux | +| **OGG Vorbis** | FFmpeg-encoded output using the selected quality; FFmpeg is bundled on Windows and must be installed on `PATH` on macOS/Linux | -**Sample rate**: 44100, 48000, 88200, 96000, or 192000 Hz. -**Note**: Rendering processes through the current engine/device configuration, then post-processes when a target sample-rate conversion is requested. +**Sample rate**: Select the target render rate. The offline engine renders at +that rate while the playback path converts source files as required. **Channels**: Stereo or Mono. @@ -1310,16 +1379,13 @@ Choose the time range to render: | Option | Description | |-----------------|------------------------------------------------------------------| | **Normalize** | Peak-normalizes the output to 0 dBFS | -| **Dither** | Applies dither when reducing bit depth. Types: TPDF, Noise Shaped. Only available for 16-bit and 24-bit output. | +| **Dither** | Applies TPDF or first-order noise-shaped dither before integer bit-depth output | | **Resample Quality** | UI placeholder only in the current build; backend support is pending | ### 12.7 Secondary Output -Enable **Secondary output** to simultaneously render a second format (e.g., render WAV master + MP3 reference): - -1. Check "Secondary output". -2. Select the secondary format (MP3, OGG, FLAC, WAV, AIFF). -3. Select the secondary bit depth. +Enable **Secondary output** to run a second render pass in another format after +each primary file. Select its format and bit depth/codec quality independently. ### 12.8 Metadata @@ -1414,11 +1480,9 @@ Archive your entire session (project file + all referenced media) into a single ### 13.8 Media Pool -The Media Pool (**View > Media Pool** or **File > Media Pool**) lists all audio and MIDI files used in the current project: - -- View file paths, durations, sample rates, and channel counts. -- Identify missing media files. -- Remove unused media references. +Media-pool state and menu actions are present, but the full Media Pool panel is +not mounted in the current workspace. Use the Missing Media Resolver for broken +paths and the Media Explorer for browsing/import. ### 13.9 Missing Media Resolver @@ -1645,15 +1709,30 @@ For custom theming, open **View > Theme Editor...**. The Theme Editor allows you ### 15.3 Keyboard Shortcuts -Open the **Keyboard Shortcuts** window from the **Help** menu to browse the searchable shortcut reference, print a cheat sheet, and rebind supported shortcuts. +Open **Help > Keyboard Shortcuts** to browse the searchable action reference, +print a cheat sheet for the current platform, choose input profiles, and rebind +supported actions. Press `F1` for the **Help Reference**, which is separate from the Keyboard Shortcuts window. Use **Help > Getting Started Guide** for the built-in first-session walkthrough covering navigation gestures, essential hotkeys, track creation, recording, and export. -Custom shortcut rebinding currently lives in the **Keyboard Shortcuts** window, not in Preferences. +Keyboard and **Mouse & scroll** profiles are selected independently. The 19 +built-in profile families are OpenStudio, Pro Tools, Cubase/Nuendo, REAPER, +Audacity, Logic Pro, FL Studio, Ableton Live, Studio One, Bitwig Studio, +Reason, Cakewalk/Sonar, GarageBand, Digital Performer, Ardour, Adobe Audition, +Mixcraft, Waveform, and Renoise. -Custom rebinding currently applies to **global shortcuts**. Timeline- and editor-scoped shortcuts are documented in the reference but are not rebindable in this pass. +Create named custom keyboard profiles to add multiple bindings, set separate +macOS/Windows/Linux/fallback overrides, intentionally unassign an action, +inherit its base mapping again, and import/export the profile as JSON. Conflict +checks run before an overlapping key is accepted. + +Bindings can be scoped to global, Timeline/ruler, track controls, Mixer, Piano +Roll, Pitch Editor, automation, browser, plug-in, modal, and contextual +surfaces. Custom shortcut editing lives in the Keyboard Shortcuts window, not +in Preferences. See [Keyboard, Hotkey, Mouse, and Scroll +Profiles](input-profiles.md) for the full behavior and safety rules. ### 15.4 Preferences @@ -1677,10 +1756,12 @@ Open **Options > Preferences** (`Ctrl+,`) to access the full preferences dialog: - Panel visibility settings **Mouse tab:** +- Choose the active **Mouse & scroll profile** independently from the keyboard map. - Configure what happens when you click with different modifier keys in various contexts: - Clip Drag, Clip Resize, Timeline Click, Track Header, Automation Point, Fade Handle, Ruler Click - - Each context can have different actions for: Click, Ctrl+Click, Shift+Click, Alt+Click -- Reset to defaults button + - Each context exposes all 16 combinations of semantic Primary, Secondary, Alt/Option, and Shift +- **Clear Custom Overrides** removes the persisted fine-grained overrides and returns to the selected base profile. +- The selected mouse/scroll base profile and validated per-gesture overrides persist and are shared with detached windows. **Backup tab:** - Enable/disable auto-backup @@ -1730,7 +1811,7 @@ Open **View > Toolbar Editor...** to customize the Main Toolbar: ### 15.8 Command Palette -Press `Ctrl+Shift+P` to open the Command Palette. Type to fuzzy-search through all available actions. Press Enter to execute the selected action. This is the fastest way to access any feature without memorizing its shortcut or menu location. +Press `Ctrl+Shift+P` to open the Command Palette. Type to fuzzy-search through all available actions. Press Enter to execute the selected action. This lets you access actions without memorizing their shortcut or menu location. ### 15.9 Plugin Bridge (32-bit) @@ -1743,14 +1824,19 @@ If you have 32-bit VST plugins that need to run in the 64-bit OpenStudio environ ## 16. Keyboard Shortcuts +The tables below show the **OpenStudio default keyboard profile**. Other +built-in profiles, platform-specific bindings, custom overrides, and active +editor scopes can change or intentionally unassign these keys. Use **Help > +Keyboard Shortcuts** for the effective map. + ### 16.1 Transport | Action | Shortcut | |-----------------------|-------------------------| | Play / Pause | `Space` | -| Stop | `Space` (while playing) | +| Stop | No separate default | | Record | `Ctrl+R` | -| Go to Start | Transport button / command palette | +| Go to Start | `Home` | | Toggle Loop | `L` | | Set Loop to Selection | `Ctrl+L` | | Tap Tempo | `T` | @@ -1823,8 +1909,8 @@ If you have 32-bit VST plugins that need to run in the 64-bit OpenStudio environ | Help Reference | `F1` | | Keyboard Shortcuts | Help menu | | Zoom to Time Selection | `Ctrl+Shift+E` | -| Zoom In | `Ctrl+Plus` | -| Zoom Out | `Ctrl+Minus` | +| Zoom In | `Ctrl++` | +| Zoom Out | `Ctrl+-` | | Zoom to Fit | `Ctrl+0` | | Save Screenset 1 | `Ctrl+Shift+1` | | Save Screenset 2 | `Ctrl+Shift+2` | @@ -1852,7 +1938,7 @@ If you have 32-bit VST plugins that need to run in the 64-bit OpenStudio environ | Action | Shortcut | |----------------------------|----------| -| Quantize Notes | Quantize dialog / command palette | +| Quantize Notes Using Last Settings | `Q` | | Transpose +1 Semitone | (via menu/command palette) | | Transpose -1 Semitone | (via menu/command palette) | | Transpose Octave Up (+12) | (via menu/command palette) | @@ -1861,31 +1947,37 @@ If you have 32-bit VST plugins that need to run in the 64-bit OpenStudio environ | Velocity -10% | (via menu/command palette) | | Reverse MIDI Notes | (via menu/command palette) | | Invert MIDI Note Pitches | (via menu/command palette) | -| Select All Notes | (via menu/command palette) | - -### 16.10 Mouse Shortcuts - -| Action | Mouse Gesture | -|---------------------------|----------------------------------------| -| Vertical navigate | Scroll | -| Timeline zoom | Ctrl+Scroll | -| Horizontal navigate | Shift+Scroll | -| Resize track height | Alt+Scroll | -| Faster track-height zoom | Ctrl+Shift+Scroll | -| Move clip | Drag clip | -| Copy clip | Ctrl+Drag clip | -| Constrain to horizontal | Shift+Drag clip | -| Slip edit | Alt+Drag inside clip | -| Trim clip edge | Drag left/right edge of clip | -| Create fade | Drag top-left or top-right corner | -| Add gain point | Shift+Click in clip | -| Rubber-band select clips | Drag on empty timeline space | -| Create razor edit | Alt+Drag on timeline | -| Horizontal zoom | Ctrl+Scroll wheel (on timeline) | -| Horizontal scroll | Shift+Scroll wheel | -| Move playhead | Click on ruler | -| Create time selection | Drag on ruler | -| Context menu | Right-click | +| Select All Notes | `Ctrl+A` | + +### 16.10 Mouse Shortcuts (OpenStudio Profile) + +`Primary` means Ctrl on Windows/Linux and Command on macOS. + +| Surface / action | OpenStudio mouse gesture | +|---|---| +| Vertical workspace scroll | Scroll | +| Timeline zoom | Primary+Scroll | +| Horizontal timeline scroll | Shift+Scroll | +| Resize track height | Alt/Option+Scroll | +| Zoom waveform height | Primary+Shift+Scroll | +| Move / copy clip | Drag / Primary+Drag | +| Slip-edit clip contents | Primary+Shift+Drag | +| Axis-lock clip move | Shift+Drag; locks to the first axis that crosses the threshold | +| Move clip without snap | Alt/Option+Drag | +| Resize / fine resize clip edge | Drag / Primary+Drag edge | +| Symmetric resize / stretch clip | Shift+Drag / Alt/Option+Drag edge | +| Seek on empty timeline | Click | +| Select range / extend selection | Primary+Click-drag / Shift+Click-drag | +| Create a razor edit | Alt/Option+Drag empty timeline | +| Select / toggle / range-select track | Click / Primary+Click / Shift+Click track header | +| Solo track | Alt/Option+Click track header | +| Move / fine-move automation point | Drag / Primary+Drag | +| Constrain automation point vertically / delete | Shift+Drag / Alt/Option+Click point | +| Adjust / fine-adjust fade handle | Drag / Primary+Drag | +| Symmetric fade / cycle fade shape | Shift+Drag / Alt/Option+Click handle | +| Seek from ruler | Click ruler | +| Set loop / time selection / zoom range | Primary+Drag / Shift+Drag / Alt/Option+Drag ruler | +| Context menu | Right-click | --- @@ -1951,7 +2043,8 @@ If you have 32-bit VST plugins that need to run in the 64-bit OpenStudio environ **Solutions**: 1. When prompted, use the Missing Media dialog to browse for the moved files. 2. If files were moved, point to their new location. -3. Use **File > Media Pool** to view all referenced files and their status. +3. Use the Missing Media dialog to resolve each referenced path; the full Media + Pool panel is not mounted in the current workspace. 4. If original files are lost, re-record or re-import the audio. ### 17.7 Recording Issues @@ -1965,6 +2058,32 @@ If you have 32-bit VST plugins that need to run in the 64-bit OpenStudio environ 4. Confirm audio signal is reaching the track (check the activity meter on the Track Header). 5. Check **Record Safe** is not enabled on the track (prevents recording). +#### macOS microphone permission recovery + +macOS uses the **Microphone** privacy permission for every audio input, +including built-in microphones and USB/Thunderbolt audio interfaces. A device +can appear in Audio Settings while its captured samples remain silent if access +was denied. + +1. Quit OpenStudio. +2. Open **System Settings > Privacy & Security > Microphone** and enable + OpenStudio. +3. Reopen OpenStudio, select the input device again, arm a track, and verify the + input meter. + +If OpenStudio is missing from that list or the stored decision appears stuck, +you can optionally reset permission for only the installed OpenStudio bundle: + +```bash +bundle_id="$(defaults read /Applications/OpenStudio.app/Contents/Info CFBundleIdentifier)" +tccutil reset Microphone "$bundle_id" +``` + +If the app is installed elsewhere, adjust the path in the first command. Then +relaunch OpenStudio and choose **Allow** when macOS asks. Avoid the broader +`tccutil reset Microphone` command unless you intentionally want to reset +microphone permission for every application. + ### 17.8 Project Won't Save **Symptoms**: Save fails or project file appears empty. @@ -2024,15 +2143,21 @@ If you have 32-bit VST plugins that need to run in the 64-bit OpenStudio environ **Solutions**: 1. Ensure the main OpenStudio window has focus (click on the timeline or a panel). 2. If a text input field is focused (e.g., renaming a track), keyboard shortcuts are temporarily disabled. Press `Esc` to defocus. -3. Check the keyboard shortcuts reference (`F1`) to confirm the correct binding. -4. Open **Help > Keyboard Shortcuts** to confirm whether a global shortcut was customized or reset it to the default binding. -5. Some shortcuts are context-dependent (e.g., MIDI shortcuts only work when the Piano Roll is open). +3. Open **Help > Keyboard Shortcuts**. `F1` opens the separate Help Reference, + not the active key map. +4. Confirm the selected keyboard profile, the current platform override, and + whether the action is intentionally unassigned. +5. Check the action's scope. Timeline, Piano Roll, Pitch Editor, Mixer, + automation, browser, plug-in, track-control, and modal bindings run only in + their matching context. +6. If a custom profile is active, choose **Inherit** for one target or reset the + profile to compare against its built-in base map. --- ## 18. AI Music and Assisted Audio -OpenStudio includes optional AI-assisted workflows that live inside the normal DAW session. These features are not bundled into the base app by default; install the required AI Tools runtime from inside the app when prompted. +OpenStudio includes AI-assisted workflows that live inside the normal DAW session. The small Basic Pitch model is bundled, with audio-to-MIDI inference enabled in current ONNX-enabled Windows/Linux releases. Generation and stem workflows use optional AI Tools runtimes and large model assets installed on demand. ### 18.1 AI Tools Setup @@ -2087,9 +2212,9 @@ OpenStudio project files (`.osproj`) are saved to the location you choose when s ## Appendix B: Audio Format Support -**Import formats**: WAV, AIFF, FLAC, MP3, OGG Vorbis, MIDI, and video audio extraction where FFmpeg is available +**Import formats**: WAV, AIFF, FLAC, MP3, OGG Vorbis, MIDI, and video audio extraction where FFmpeg is available. The audited executable is bundled on Windows; FFmpeg-backed operations require a system `ffmpeg` on `PATH` on macOS/Linux. -**Export formats**: WAV, AIFF, FLAC, MP3, OGG Vorbis, MIDI, and DDP export +**Export formats**: WAV, AIFF, FLAC, MP3, OGG Vorbis, MIDI, and DDP export. MP3/OGG and other FFmpeg conversions require the bundled Windows executable or a system `ffmpeg` on macOS/Linux. **Plugin formats**: VST3 is the stable primary path. CLAP and LV2 code paths are present where available. Experimental 32-bit bridging controls are not part of the stable plugin-hosting path. @@ -2163,12 +2288,12 @@ OpenStudio generates `.ospeaks` sidecar files alongside audio files for efficien - OpenStudio handles sample rate conversion automatically when importing audio files recorded at different rates than the project's device rate. - Linear interpolation is used for real-time sample rate conversion during playback. -- For rendering, the "Resample Quality" setting (Fast/Good/Best) controls the quality of the conversion algorithm. +- Offline rendering supports the selected target sample rate. The **Resample Quality** selector is currently a UI placeholder and does not yet change the backend conversion algorithm. ### Audio Thread Safety -OpenStudio uses professional-grade audio thread safety patterns: -- Non-blocking locks on the audio thread (try-lock pattern) ensure glitch-free playback. +OpenStudio uses the following audio-thread safety patterns: +- Non-blocking locks on the audio thread (try-lock pattern) reduce the risk of callback stalls. - Pre-allocated audio buffers avoid heap allocations during audio processing. - Pre-loaded audio file readers prevent disk I/O on the audio thread. - Atomic operations for parameter updates (volume, pan) avoid mutex contention. diff --git a/docs/audio_midi_engine_roadmap.md b/docs/audio_midi_engine_roadmap.md deleted file mode 100644 index 771934f..0000000 --- a/docs/audio_midi_engine_roadmap.md +++ /dev/null @@ -1,88 +0,0 @@ -# Audio/MIDI Engine Roadmap - -## Summary -Implement this in phases so we fix correctness first, then complete plugin-format and low-latency MIDI support, then add the 64-bit hybrid engine without destabilizing the current app. The first shippable milestone is a repo-backed fix for live MIDI keyboard input, instrument-track rendering, MIDI clip playback, and offline/render parity. Later phases complete CLAP/VST3i behavior and add an opt-in hybrid 64-bit processing mode with guarded rollout. - -## Phase Plan -### Phase 1: MIDI/Instrument Bugfixes and Correctness -Status: In progress. Core engine work is implemented; live keyboard/render validation is still pending. -- Replace the current placeholder live-MIDI path with an enqueue-only design; no instrument/plugin processing outside the audio thread. -- Add per-track live MIDI intake so hardware MIDI, virtual keyboard input, and future MIDI clip playback all enter the same track-owned event path. -- In the real-time audio callback, build each track's block `MidiBuffer` before track processing. -- Process the loaded instrument plugin inside the real-time track path for `Instrument` tracks, before post-instrument audio FX. -- Process the loaded instrument plugin in offline render, freeze, bounce, and stem/export paths so live playback and render use the same signal flow. -- Ensure transport stop, loop wrap, track mute/solo, record-arm changes, and monitor-off events flush pending note-offs safely. -- Keep current float audio behavior unchanged for non-MIDI tracks. -- Acceptance for this phase: a user can load a VST3i, arm/monitor the track, play a MIDI keyboard, hear sound in real time, record MIDI, and get matching offline render output. - -### Phase 2: Full MIDI Track and Clip Playback Implementation -Status: Partially implemented. Track MIDI scheduling/sync is in place; loop/punch hardening and downstream/plugin MIDI routing still need completion. -- Introduce an engine-side MIDI clip scheduler that converts stored clip note/CC events into per-block sample-offset MIDI events. -- Merge three MIDI sources per track in the audio thread: scheduled clip events, queued live input, and UI-generated input. -- Add proper loop handling, seek handling, punch-in/out behavior, and overdub-safe note state tracking. -- Route MIDI-only tracks to hardware MIDI output and instrument tracks to instrument plugins; do not silently drop MIDI on either path. -- Make plugin MIDI output a first-class path: capture plugin-produced MIDI from instrument/MIDI effects and route it either to hardware output or downstream MIDI targets. -- Preserve existing frontend clip models and NativeBridge calls where possible; add backend-only scheduling first, then tighten JS/native contract only if needed. -- Acceptance for this phase: MIDI clips play back sample-aligned, overdub records correctly, loop playback does not hang notes, and MIDI-only tracks can drive external hardware. - -### Phase 3: VST3i and CLAP Completion -Status: Partially implemented. CLAP JUCE MIDI bridging and capability probing exist; transport/playhead parity and full browser/runtime parity are still pending. -- Keep VST3 hosting as the primary reference path and make instrument-track processing identical for VST3 effects, VST3 instruments, and CLAP instruments. -- Complete CLAP event bridging by translating JUCE MIDI events into CLAP note/parameter events with intra-block sample offsets. -- Implement CLAP output-event handling so CLAP plugins that emit MIDI/events are not treated as no-op outputs. -- Pass transport/playhead timing into CLAP processing just as VST3 plugins already receive playhead state. -- Detect plugin capabilities up front: instrument, MIDI effect, audio effect, MIDI output, double-precision support, bus layouts. -- Classify plugins in the browser using actual capabilities so instrument-only and MIDI-effect-only flows are correct. -- Acceptance for this phase: at least one VST3i and one CLAP instrument both work for live keyboard input, MIDI clip playback, editor open/state restore, and offline render. - -### Phase 4: Ultra-Low-Latency MIDI Architecture -Status: Partially implemented. The MIDI input callback path is lock-free, the real-time callback now runs from immutable processing snapshots instead of the main graph try-lock, busy-track contention can now fall back to the last safe processed block instead of hard-dropping immediately, and busy master/monitor chains now reuse the last safe processed output instead of forcing silence; deeper end-to-end hardening and validation are still pending. -- Remove blocking locks from the hot MIDI path; use preallocated per-device lock-free queues for inbound MIDI and a separate queue for UI/virtual-keyboard MIDI. -- Timestamp input events on arrival and convert them to audio-block sample offsets when draining into the audio thread. -- Add per-track note-state tables and overflow counters so dropped/late events are observable and recoverable. -- Keep all queue draining, event merging, and note-off recovery allocation-free on the audio thread. -- Reduce avoidable callback stalls around graph edits by isolating MIDI delivery from graph-management locks. -- Add a diagnostics view/API for queue overflow count, late-event count, max events per block, and current buffer size. -- Acceptance for this phase: stable live keyboard play at 32/64/128 sample buffers with no hung notes, no callback-time locking in the MIDI path, and measurable lower worst-case input-to-sound jitter. - -### Phase 5: 64-Bit Hybrid Engine -Status: Partially implemented. A processing-precision framework now exists with project persistence, track/plugin double-precision negotiation, sidechain-aware double processing, freeze/render MIDI parity, hybrid64 now reaching real-time and offline master/master-monitor processing more deeply where plugins support it, and per-plugin float fallback overrides are now exposed in the FX/monitoring UI for track/master/monitor chains; the full end-to-end double bus architecture is still not complete yet. -- Add an engine setting `processingPrecision: float32 | hybrid64`, persisted per application/session setting; default stays `float32` initially. -- Implement double-precision internal buses for track summing, sends, sidechains, master summing, and offline render when `hybrid64` is enabled. -- Negotiate plugin precision per instance: if a plugin supports double precision, process it in double; otherwise convert at the plugin boundary and continue internal summing in double. -- Keep media decode and hardware I/O compatible with current float paths while promoting internal summing to double in hybrid mode. -- Update automation, metering, PDC, sidechain routing, and normalization/render code so float and hybrid64 paths stay behaviorally aligned. -- Add a compatibility fallback so any plugin that misbehaves in double can be forced to float processing without disabling hybrid64 globally. -- Acceptance for this phase: hybrid64 renders null-close against float for ordinary sessions, improves precision in stress mixes/feedback-heavy cases, and does not change existing float32 session behavior unless the setting is enabled. - -### Phase 6: Hardening, Compatibility, and Release Guardrails -Status: Partially implemented. Backend compatibility-matrix and engine-benchmark APIs now exist, benchmarks now cover multiple block sizes and include MIDI diagnostic context plus hybrid64-aware master processing, the release-guardrail runner now validates track/master/monitor fallback counters, compatibility-metadata completeness, and benchmark block coverage/finite values in one backend report, and an automated regression-suite runner plus repo-side runner script now exist; full regression coverage and strict release gating are still not complete. -- Add plugin regression coverage for mono/stereo instruments, sidechain FX, MIDI-only plugins, CLAP instruments, and float-only legacy plugins. -- Benchmark CPU and memory cost of `float32` vs `hybrid64` at 32/64/256 sample buffers and at realistic large-session track counts. -- Gate release on keyboard-smoke tests, offline-render parity tests, no-hung-note tests, and queue-overflow diagnostics staying clean under stress. -- Keep a rollback switch for `hybrid64` and for CLAP-MIDI output handling until the compatibility matrix is green. - -## Important API and Interface Changes -- Backend engine additions: - `enqueueLiveMidiEvent`, `enqueueUiMidiEvent`, `buildTrackMidiBlock`, `processInstrumentTrack`, `setProcessingPrecision`, `getMidiDiagnostics`, `getPluginCapabilities`. -- Track model additions: - per-track live MIDI queue, per-track note-state cache, optional downstream MIDI target, optional per-plugin precision override. -- Native bridge additions: - precision setting getter/setter, MIDI diagnostics getter, optional keyboard-test diagnostics endpoint, regression-suite runner endpoint. -- Plugin capability model: - add booleans for `isInstrument`, `isMidiEffect`, `producesMidi`, `supportsDoublePrecision`, `pluginFormat`, and bus-layout summary. - -## Test Plan -- Live keyboard test: load VST3i, arm + monitor, play notes/chords rapidly, stop transport, verify no hung notes. -- MIDI clip test: import/create clip with note-on/off and CC data, play, loop, seek, and render; verify live and render outputs match. -- Hardware MIDI test: use a MIDI-only track to drive an external device and verify note timing and note-off behavior. -- CLAP test: scan/load a CLAP instrument, open editor, play live MIDI, play MIDI clips, save/restore state, render offline. -- Latency test: run at 32/64/128 sample buffers and capture queue overflow, late-event count, and callback-stall metrics. -- Hybrid64 test: compare float32 vs hybrid64 CPU use, render parity, sidechain behavior, PDC correctness, and plugin fallback handling. - -## Assumptions and Defaults -- Default shipping behavior remains `float32` until hybrid64 passes compatibility and performance validation. -- MIDI correctness takes priority over preserving the current placeholder monitor path; any non-audio-thread instrument triggering is removed. -- VST3 remains the most stable plugin path; CLAP reaches feature parity after the dedicated event-bridge phase, not before. -- Existing frontend track/clip models stay intact unless Phase 2 proves a contract change is required for sample-offset scheduling. -- The first user validation checkpoint is after Phase 1, using a physical MIDI keyboard on an instrument track before broader roadmap work continues. diff --git a/docs/audio_signal_chain_qa.md b/docs/audio_signal_chain_qa.md deleted file mode 100644 index 8051126..0000000 --- a/docs/audio_signal_chain_qa.md +++ /dev/null @@ -1,32 +0,0 @@ -# Audio Signal Chain QA - -Pitch, render, and playback artifact work must start with the signal chain before any DSP tuning. - -## Chain References - -- Live playback: clip route resolution -> `PlaybackEngine` read/mix -> `TrackProcessor` -> sends/sidechain -> master/monitoring FX -> gain/pan/mono -> meters/spectrum -> audio device. -- Offline render/export: `renderProject` -> render `PlaybackEngine` snapshot -> `TrackProcessor` -> master FX/gain -> writer. - -If a click/noise is present in an exported render, debug the shared render/playback path first. Do not attribute it to WebView IPC, audio-device underruns, or live-only preview routing until the render chain is clean. - -## Render Chain Debug Packet - -Set `OPENSTUDIO_AUDIO_CHAIN_DEBUG=1` before rendering to emit a debug packet next to the rendered file, or set `OPENSTUDIO_AUDIO_CHAIN_DEBUG_DIR` to choose a folder. The packet includes: - -- `render_chain_report.json` -- `playback_output.wav` -- `track_post_processing.wav` -- `master_pre_fx.wav` -- `master_post_fx.wav` -- `writer_input.wav` - -The report records per-block route/source details and peak/RMS/high-derivative/non-finite stats. Use `OPENSTUDIO_AUDIO_CHAIN_DEBUG_MAX_SEC` to cap the captured duration; the default is `12` seconds. - -## First Dirty Stage Rule - -- Dirty at playback: inspect source routing, stale pitch-preview state, reader/sample-rate conversion, chunking, and hot-path allocation counters. -- Dirty after track/master processing: inspect no-FX bypass, processor reset/state, default EQ/gain, and denormal handling. -- Dirty only at writer output: inspect write alignment, format conversion, dither, and block/tail handling. -- Dirty only in live playback after clean render: inspect callback duration/deadline counters, spectrum lock misses, callback resizes, IPC/timer pressure, and transport preview cleanup. - -Do not call a render-noise fix done until the first dirty stage is identified and the fixed output passes spectrogram/high-derivative checks plus user audition. diff --git a/docs/cubase-grid-quantize-parity-plan.md b/docs/cubase-grid-quantize-parity-plan.md deleted file mode 100644 index 8191090..0000000 --- a/docs/cubase-grid-quantize-parity-plan.md +++ /dev/null @@ -1,34 +0,0 @@ -# Cubase-Style Global Grid, Snap, and MIDI Quantize Parity - -## Summary -Implement Cubase-style parity for the global grid, snap behavior, MIDI editor snapping, and MIDI quantize workflow. This pass excludes audio warp/hitpoint quantize, groove extraction from audio, and backend DSP changes. - -## Already Completed -- [x] Reviewed Steinberg Cubase 15 docs for Quantize Panel, Quantize Presets, Grid Type, Snap Grid, Snap Types, Key Editor Toolbar, and MIDI snap behavior. -- [x] Audited Studio13's current global snap, timeline grid, piano roll snap, and MIDI quantize implementation. - -## Tracking Checklist -- [x] Create `docs/cubase-grid-quantize-parity-plan.md` with this checklist. -- [x] Add shared grid/quantize preset model and interval resolver. -- [x] Persist new snap/grid/quantize state in store and project save/load. -- [x] Add header toolbar visual controls. -- [x] Update View menu and Preferences grid controls. -- [x] Refactor timeline snapping and grid rendering to use shared resolver. -- [x] Refactor piano roll snapping and grid rendering to use shared resolver. -- [x] Implement MIDI Ctrl snap-bypass and resolve duplicate-drag conflict. -- [x] Replace MIDI Quantize dialog with Cubase-style Quantize Panel. -- [x] Add Length Quantize and Quantize Link behavior for MIDI editor/step input. -- [x] Implement custom quantize preset save/rename/remove/restore factory. -- [x] Add tests and mark checklist items done as each passes. - -## Implemented Visual Changes -- [x] Main header toolbar now shows Snap, Snap Type, Grid Type, Quantize Preset, Apply Quantize, and Quantize Panel controls. -- [x] Piano roll toolbar now mirrors the Cubase-style Snap, Snap Type, Grid Type, Quantize Preset, Apply, Quantize Panel, and Length Quantize controls. -- [x] Piano roll status strip displays the active resolved grid label instead of the old fixed `0.25 beat` snap readout. -- [x] MIDI Quantize dialog is now a Quantize Panel-style grid with Preset, Mode, Grid Type, Soft Quantize, Tuplet, Swing, Groove, Catch Range, Safe Range, Rough Quantize, Length Quantize, Move Controllers, Auto Apply, Reset, and Apply controls. - -## Test Plan -- [x] Unit-test straight, triplet, dotted, Bar/Beat, Use Quantize, and Adapt to Zoom interval resolution. -- [x] Unit-test Snap Type behavior for grid, relative grid, cursor, event, and combined snap candidates. -- [ ] Add MIDI editor interaction coverage for Snap on, Ctrl-drag off-grid placement, draw/resize/split using selected grid, quantize using current preset, and Length Quantize. -- [x] Run `npx tsc --noEmit` and targeted frontend tests; note known pre-existing TypeScript errors separately if still present. diff --git a/docs/design-screenshot-gap-review.md b/docs/design-screenshot-gap-review.md deleted file mode 100644 index 663c54c..0000000 --- a/docs/design-screenshot-gap-review.md +++ /dev/null @@ -1,642 +0,0 @@ -# Design Screenshot Gap Review - -## Summary - -This document compares the supplied design screenshots against the current OpenStudio frontend and records what is already implemented, what is partial, what is still missing, and what depends on backend support. - -Scope notes: - -- The screenshots are treated as the design source of truth. -- This review targets screenshot parity, not full PRO DAW parity beyond what is visibly represented. -- Status labels used in this document: - - `Implemented`: the visible surface and primary behavior already exist. - - `Partial`: some of the visible surface or behavior exists, but parity is incomplete. - - `Missing`: the screenshot-visible surface is not exposed yet. - - `Backend-dependent`: the frontend surface exists or is planned, but full behavior still depends on backend support. - -## Current App Baseline - -The main DAW shell is already present and wired in the current app: - -- `ProjectTabBar`, `MenuBar`, timeline workspace, lower editor zones, mixer, and transport are mounted from `frontend/src/App.tsx`. -- The app already ships major dialogs and panels referenced by the screenshots, including: - - `RenderModal` - - `ProjectSettingsModal` - - `RenderQueuePanel` - - `UndoHistoryPanel` - - `CommandPalette` - - `DynamicSplitModal` - - `RegionRenderMatrix` - - `CleanProjectModal` - - `BatchConverterModal` - - `CrossfadeEditor` - - `ClipPropertiesPanel` - - `PianoRoll` - - `VirtualPianoKeyboard` - -Key validation already completed during this audit: - -- `frontend` tests pass: `51/51` -- `frontend` production build succeeds - -## Screenshot Audit - -### `design.png` - -Status: `Partial` - -What matches today: - -- Main DAW shell exists with a top menu bar, track control panel, timeline, mixer area, and bottom transport. -- Track headers already support record arm, mute, solo, FX, input selection, color, icon, and automation-oriented controls. -- Mixer and transport surfaces are implemented as app-level panels rather than placeholders. - -What is still off: - -- Top-level menu structure does not yet match the screenshot order. -- The screenshot shows `File`, `Edit`, `View`, `Insert`, `Item`, `Track`, `Options`, `Actions`, `Help`. -- The current app renders only `File`, `Edit`, `View`, `Insert`, `Options`, `Help`. -- The screenshot suggests a more PRO DAW-aligned discoverability flow for item and track operations than the current top menu exposes. - -Relevant implementation: - -- `frontend/src/App.tsx` -- `frontend/src/components/MenuBar.tsx` -- `frontend/src/components/TrackHeader.tsx` -- `frontend/src/components/SortableTrackHeader.tsx` -- `frontend/src/components/Timeline.tsx` -- `frontend/src/components/MixerPanel.tsx` -- `frontend/src/components/TransportBar.tsx` - -### `Design screenshots/File-options.png` - -Status: `Partial` - -Already implemented: - -- New project -- Open project -- Save project -- Save project as -- Close project -- Project settings -- Render -- Region Render Matrix -- Export project MIDI -- Clean project directory -- Batch file converter -- Quit -- Recent projects -- Template-related operations -- Safe mode project open - -Differences from screenshot: - -- `New project tab` and `Save all projects` are not surfaced in the File menu today, even though project tabs exist. -- `Queued Renders` is represented as a separate `Render Queue` panel, but not exposed with the same wording and placement as the screenshot. -- `Project Render Metadata` is not a complete File-menu workflow yet. -- `Save live output to disk (bounce)...` is represented as `Capture Output`, which is functionally related but not named or placed as screenshot parity. -- `Consolidate/Export tracks...` is not surfaced from the File menu as shown. - -Relevant implementation: - -- `frontend/src/components/MenuBar.tsx` -- `frontend/src/components/RenderQueuePanel.tsx` -- `frontend/src/store/actionRegistry.ts` - -### `Design screenshots/Edit-options.png` - -Status: `Partial` - -Already implemented: - -- Undo / redo -- Undo history -- Select all -- Cut / copy / paste -- Cut within time selection -- Copy within time selection -- Dynamic split - -Implemented elsewhere but not surfaced like the screenshot: - -- Crossfade editor exists -- Nudge operations exist -- Split operations exist -- Group / ungroup exist -- Reverse clip exists -- Quantize selected clips exists - -Current parity gaps: - -- The current `Edit` menu mixes general edit operations with clip/item-specific operations that should likely move into a top-level `Item` menu for screenshot parity. -- Several screenshot-visible operations exist in store actions or context menus but are not exposed with the same labels, grouping, or separators. -- `Transient Detection Settings` is not surfaced as a dedicated menu entry; transient detection currently lives inside `DynamicSplitModal`. - -Relevant implementation: - -- `frontend/src/components/menus/EditMenu.tsx` -- `frontend/src/components/DynamicSplitModal.tsx` -- `frontend/src/components/CrossfadeEditor.tsx` -- `frontend/src/store/actionRegistry.ts` -- `frontend/src/store/actions/clipEditing.ts` - -### `Design screenshots/View-options.png` - -Status: `Partial` - -Already implemented: - -- Mixer toggle -- Virtual MIDI keyboard -- Region/marker manager -- Clip properties -- Big clock -- Render queue -- Routing matrix -- Media explorer -- Audio settings -- Render -- Region Render Matrix -- Zoom controls -- Loop enable -- Snap enable -- Screensets - -Partially matching: - -- The View menu contains many screenshot-related destinations, but naming and ordering do not yet follow the screenshot. -- Some screenshot items are represented by OpenStudio-specific equivalents instead of direct label matches. - -Still missing or not surfaced cleanly: - -- `Track Manager` -- `Track Group Manager` -- `Project Media/FX Bay` -- `Navigator` -- `Scale Finder` -- `Show/hide all floating windows` -- `Cascade all floating windows` -- `Time unit for ruler` -- `Go to` -- `Always on top` -- `Fullscreen` - -Relevant implementation: - -- `frontend/src/components/MenuBar.tsx` -- `frontend/src/components/VirtualPianoKeyboard.tsx` -- `frontend/src/components/RegionMarkerManager.tsx` -- `frontend/src/components/ClipPropertiesPanel.tsx` -- `frontend/src/components/BigClock.tsx` -- `frontend/src/components/RenderQueuePanel.tsx` -- `frontend/src/components/RoutingMatrix.tsx` -- `frontend/src/components/MediaExplorer.tsx` - -### `Design screenshots/Insert-options.png` - -Status: `Partial` - -Already implemented: - -- Media file import -- New MIDI item equivalent via empty MIDI clip -- Empty item -- Marker -- Marker with prompt for name -- Region from selection -- Track insertion -- Multiple tracks -- Virtual instrument on new track - -Partial or different from screenshot: - -- The current Insert menu includes more OpenStudio-specific track creation choices like bus/group tracks and spacer tracks. -- Screenshot entries like SMPTE timecode generator and click source are not surfaced. -- `Track from template` exists conceptually through templates, but top-level parity is incomplete. - -Relevant implementation: - -- `frontend/src/components/MenuBar.tsx` -- `frontend/src/store/actionRegistry.ts` - -### `Design screenshots/Item-options.png` - -Status: `Missing` as a top-level menu, `Partial` as underlying behavior - -Already implemented in behavior: - -- Select all -- Nudge/set items equivalent via nudge actions -- Split items at cursor -- Split items at time selection -- Item properties equivalent through clip properties -- Group / ungroup selected clips -- Reverse clip -- Item-level editing functions in timeline context menus and store actions - -Still missing for screenshot parity: - -- No top-level `Item` menu is rendered today. -- Existing item-related behavior is split across: - - `Edit` menu - - clip context menus - - timeline interactions - - clip properties panel -- Screenshot-level grouping such as `Take`, `Comps`, `Stretch markers`, `Spectral edits`, and `Media` is not exposed as a dedicated top menu structure. - -Relevant implementation: - -- `frontend/src/components/menus/EditMenu.tsx` -- `frontend/src/components/ClipPropertiesPanel.tsx` -- `frontend/src/components/Timeline.tsx` -- `frontend/src/store/actionRegistry.ts` -- `frontend/src/store/actions/clipEditing.ts` - -### `Design screenshots/Track-options.png` - -Status: `Missing` as a top-level menu, `Partial` as underlying behavior - -Already implemented in behavior: - -- Insert new track -- Insert multiple tracks -- Insert virtual instrument track -- Save/load track templates -- Remove tracks -- Duplicate tracks -- Move tracks to folder -- Freeze / unfreeze -- Track color -- Track icon -- Free item positioning -- Track automation-related operations -- Routing-related operations - -Current mismatch: - -- No top-level `Track` menu is rendered today. -- A large portion of screenshot-relevant behavior lives in track context menus instead of the main menu bar. -- Track-level commands are discoverable only after right-clicking track headers, which is not screenshot parity. - -Still missing or not clearly surfaced: - -- Dedicated `Meters` submenu parity -- `Track timebase` -- `Track performance options` -- `Track layout` -- `Track grouping` as top-level menu content -- `MIDI track controls` and `Lock track controls` as explicit grouped menu content - -Relevant implementation: - -- `frontend/src/components/SortableTrackHeader.tsx` -- `frontend/src/components/TrackHeader.tsx` -- `frontend/src/store/useDAWStore.ts` -- `frontend/src/store/actions/tracks.ts` - -### `Design screenshots/Options-options.png` - -Status: `Partial` - -Already implemented: - -- Record mode selection -- Ripple editing mode selection -- Auto-crossfade -- Locking -- Theme settings -- Preferences -- Timecode / sync settings - -Partially matching: - -- Screenshot-specific option naming does not line up perfectly with the current menu structure. -- Some screenshot entries are represented by broader or differently grouped OpenStudio settings. - -Still missing or not surfaced: - -- Many PRO DAW-specific editing preference toggles shown in the screenshot are not directly exposed. -- `Metronome/pre-roll settings...` is not surfaced in the Options menu as shown. -- Several transport-display and playback-scroll options are not top-menu surfaced in the same way. - -Relevant implementation: - -- `frontend/src/components/MenuBar.tsx` -- `frontend/src/components/PreferencesModal.tsx` -- `frontend/src/components/TimecodeSettingsPanel.tsx` - -### `Design screenshots/Actions-options.png` - -Status: `Missing` as a top-level menu, `Partial` in underlying system - -Already implemented: - -- A central action registry exists. -- Command palette exists. -- Recent actions behavior exists in the command palette. -- Shortcut metadata and action categories are already centralized. - -Still missing for screenshot parity: - -- No top-level `Actions` menu is rendered today. -- No menu-level recent action list matching the screenshot is exposed. -- No direct `Show action list...` top-menu destination exists yet, even though the action registry is already suitable for it. - -Relevant implementation: - -- `frontend/src/store/actionRegistry.ts` -- `frontend/src/components/CommandPalette.tsx` -- `frontend/src/components/MenuBar.tsx` - -### `Design screenshots/Help-options.png` - -Status: `Partial` - -Already implemented: - -- Getting started guide -- Help reference -- Keyboard shortcuts -- Check for updates -- Command palette -- About dialog - -Still missing or not aligned: - -- Screenshot-specific entries such as documentation submenu, project timebase help, action list as HTML, and legal/purchasing/changelog links are not exposed. -- The Help menu is more product-focused than screenshot-parity focused right now. - -Relevant implementation: - -- `frontend/src/components/MenuBar.tsx` -- `frontend/src/components/HelpOverlay.tsx` -- `frontend/src/components/KeyboardShortcutsModal.tsx` -- `frontend/src/components/GettingStartedGuide.tsx` - -### `Design screenshots/render-export.png` - -Status: `Partial` - -Already implemented: - -- Render dialog exists and is functional. -- Source selection -- Bounds selection -- Time bounds section -- Output directory -- File naming -- Format selection -- Sample rate -- Channels -- Bit depth where applicable -- MP3 bitrate -- OGG quality -- Normalize -- Dither -- Add to queue -- Multi-file render count logic -- Region-based render support -- Stem render support -- Secondary output support -- Add-to-project-after-render flow - -Known current gaps: - -- Metadata section is present but explicitly marked `coming soon`. -- Resample quality is shown but explicitly marked `Backend support pending`. -- Online render is shown but explicitly marked `unsupported`. -- Screenshot-style preset handling is not fully matched. -- Screenshot-specific fine-grained embed / preserve / dithering / second-pass combinations are not fully mirrored yet. - -Status classification details: - -- `Metadata`: `Backend-dependent` -- `Resample quality`: `Backend-dependent` -- `Online render`: `Backend-dependent` -- Overall dialog: `Partial` - -Relevant implementation: - -- `frontend/src/components/RenderModal.tsx` -- `frontend/src/components/RenderQueuePanel.tsx` -- `frontend/src/services/NativeBridge.ts` -- `Source/AudioEngine.cpp` -- `Source/MainComponent.cpp` - -### `Design screenshots/midi track and clip.png` - -Status: `Partial` - -Already implemented: - -- MIDI track support -- Piano roll editor -- Virtual MIDI keyboard -- Instrument tracks -- MIDI device routing - -What still differs: - -- The screenshot is focused on arrange-view MIDI clip visibility inside the main timeline. -- The current app has the necessary MIDI infrastructure, but screenshot-level visual parity for the exact arrange-view presentation needs a dedicated audit pass against timeline rendering and track header MIDI affordances. - -Relevant implementation: - -- `frontend/src/components/PianoRoll.tsx` -- `frontend/src/components/VirtualPianoKeyboard.tsx` -- `frontend/src/components/Timeline.tsx` -- `frontend/src/components/TrackHeader.tsx` - -## Consolidated Status - -### Already Implemented - -- Main DAW shell -- Project tabs -- Menu bar framework -- File menu core actions -- Edit menu core actions -- View menu major panels and toggles -- Insert menu core track and marker actions -- Track header controls -- Timeline -- Mixer -- Transport -- Render queue -- Project settings dialog -- Region render matrix dialog -- Dynamic split dialog -- Clean project directory dialog -- Batch file converter dialog -- Crossfade editor dialog -- Undo history panel -- Command palette -- Clip properties panel -- Piano roll -- Virtual MIDI keyboard - -### Partial - -- Overall screenshot shell parity -- File menu parity -- Edit menu parity -- View menu parity -- Insert menu parity -- Options menu parity -- Help menu parity -- Render/export parity -- MIDI arrange-view parity -- Track header visual parity - -### Missing - -- Top-level `Item` menu -- Top-level `Track` menu -- Top-level `Actions` menu -- Screenshot-matching menu grouping for many existing item and track actions -- Screenshot-level help/documentation menu structure - -### Backend-dependent - -- Render metadata -- Full resample quality support -- Online render mode -- Any additional screenshot-visible render options that require new bridge parameters - -## Remaining Work TODO - -### 1. Create the dedicated deliverable - -- [x] Create `docs/design-screenshot-gap-review.md` as the dedicated audit and remaining-work plan. -- [x] Compare each supplied screenshot against the current app shell, menus, dialogs, and track/timeline UI. -- [x] Mark each screenshot-visible feature as `implemented`, `partial`, `missing`, or `backend-dependent`. -- [x] Keep the scope focused on screenshot parity rather than full PRO DAW parity. - -### 2. Finish menu-bar parity - -- [ ] Add top-level `Item` menu to the menu bar. -- [ ] Add top-level `Track` menu to the menu bar. -- [ ] Add top-level `Actions` menu to the menu bar. -- [ ] Keep menu order aligned to the screenshots: - - `File` - - `Edit` - - `View` - - `Insert` - - `Item` - - `Track` - - `Options` - - `Actions` - - `Help` -- [ ] Normalize labels, separators, and submenu grouping to match the screenshots more closely. -- [ ] Normalize shortcut display where the action registry already defines the binding. -- [ ] Use disabled entries only when screenshot visibility matters and the feature is not yet implemented. - -### 3. Refactor menu definitions - -- [ ] Refactor menu definitions so menu items come from shared builders instead of duplicated inline logic in `MenuBar.tsx`. -- [ ] Reuse existing store actions and action-registry definitions where possible. -- [ ] Avoid duplicating behavior between: - - `EditMenu` - - track context menus - - action registry - - top-level menu definitions -- [ ] Centralize label, enablement, checked state, and shortcut resolution. - -### 4. Promote already-implemented item behavior into a real `Item` menu - -- [ ] Move clip/item-oriented commands out of the overloaded `Edit` menu where needed. -- [ ] Include currently implemented actions such as: - - split at cursor - - split at time selection - - nudge operations - - group / ungroup - - reverse clip - - dynamic split - - crossfade editor entry point - - clip/item properties -- [ ] Add placeholder or disabled sections only where screenshot-level grouping is needed but behavior is not yet present. - -### 5. Promote track behavior into a real `Track` menu - -- [ ] Surface track operations that already exist in track context menus and store actions. -- [ ] Include currently implemented actions such as: - - insert new track - - insert multiple tracks - - virtual instrument track - - delete track(s) - - duplicate track - - move to folder - - save/load track template - - freeze / unfreeze - - track color - - track icon - - free item positioning - - routing-related entry points - - automation-related entry points -- [ ] Add screenshot-driven structure for track grouping and track controls without removing OpenStudio-specific affordances. - -### 6. Build the `Actions` menu from the existing action system - -- [ ] Back the `Actions` menu with `frontend/src/store/actionRegistry.ts`. -- [ ] Add a top-level entry equivalent to `Show action list...`. -- [ ] Surface recent actions using the same recent-action source already used by `CommandPalette`. -- [ ] Keep action labels and shortcuts synchronized with the registry rather than copying strings into the menu. - -### 7. Tighten File / View / Insert / Options / Help parity - -- [ ] Add missing File-menu screenshot entries where a reasonable OpenStudio equivalent already exists. -- [ ] Align `Render Queue` / `Queued Renders` naming and placement decisions. -- [ ] Decide whether `Capture Output` should be renamed or regrouped to match screenshot expectations better. -- [ ] Expand View menu coverage for screenshot-visible managers and utility windows. -- [ ] Expand Insert menu coverage for screenshot-visible non-track insert tools where appropriate. -- [ ] Expose metronome/pre-roll and related transport options if they are needed for screenshot parity. -- [ ] Expand Help menu structure to cover screenshot-visible documentation and reference entry points. - -### 8. Expand render/export parity carefully - -- [ ] Keep the current working render modal intact as the base. -- [ ] Finish screenshot-visible preset handling if required for parity. -- [ ] Implement render metadata behavior or keep it clearly marked as backend-dependent. -- [ ] Implement resample quality behavior or keep it clearly marked as backend-dependent. -- [ ] Implement online render mode or keep it clearly marked as backend-dependent. -- [ ] Review screenshot-visible checkbox groups and labels for naming and placement parity. -- [ ] Preserve backward compatibility for existing bridge calls while extending render options. - -### 9. Document backend dependencies separately - -- [ ] Track backend-required parity items in their own section, separate from frontend-only tasks. -- [ ] Include bridge/API implications for each backend-dependent item. -- [ ] Keep the frontend plan executable even if backend tasks are staged later. - -## Test Plan TODO - -- [ ] Add tests that assert full top-level menu order and presence. -- [ ] Add tests for representative `Item` menu commands. -- [ ] Add tests for representative `Track` menu commands. -- [ ] Add tests for representative `Actions` menu commands. -- [ ] Add render-modal tests for visible supported vs unsupported states. -- [ ] Add tests for any shared menu-builder logic introduced during refactor. -- [ ] Run `npm test` in `frontend`. -- [ ] Run `npm run build` in `frontend`. -- [ ] Perform manual screenshot-by-screenshot parity verification after implementation. - -## Assumptions - -- [x] Treat the supplied screenshots as the design source of truth. -- [x] Target design plus visible behavior parity, not visual-only parity. -- [x] Use the current React, Zustand, and modal architecture; do not replace it with native menus. -- [x] Preserve backward compatibility for existing store actions and bridge calls where possible. -- [x] Preserve existing OpenStudio-specific features unless they directly conflict with screenshot parity. - -## Priority Order - -Recommended implementation order: - -1. Add `Item`, `Track`, and `Actions` top-level menus. -2. Refactor menu definitions into shared builders. -3. Promote existing item and track operations into screenshot-aligned menu structures. -4. Normalize File / View / Insert / Options / Help labels and grouping. -5. Expand render/export parity. -6. Add menu and render tests. -7. Perform final manual screenshot parity pass. diff --git a/docs/engine_v3_fullclip_prototype_20260417.md b/docs/engine_v3_fullclip_prototype_20260417.md deleted file mode 100644 index 972c87b..0000000 --- a/docs/engine_v3_fullclip_prototype_20260417.md +++ /dev/null @@ -1,97 +0,0 @@ -# Engine-V3 Full-Clip Prototype Status (2026-04-17) - -## What Landed -- Added new renderer branches: - - `engine_v3_fullclip` - - `engine_v3_fullclip_lpc` - - `engine_v3_fullclip_lpc_transient` -- Added engine-v3 diagnostics plumbing through native + frontend regression results. -- Added continuous full-clip HQ output path for engine-v3 in `AudioEngine`. -- Added first LPC spectral envelope transfer helper in `LpcEnvelopeTransfer`. -- Hardened the current Signalsmith pitch-only path for better baseline formant configuration: - - `setFormantBase(avgDetectedHz)` per block - - inverse-ratio formant factor by default - -## Important Bug Fixed During Bring-Up -- The first engine-v3 full-clip implementation created a corrected full buffer and then overwrote it with the original `clipBuffer` before writing the output file. -- This made the branch look active in diagnostics while exporting source-identical audio. -- That overwrite bug is now fixed. - -## Current Truth -- `engine_v3_fullclip` now produces a real full-clip processed output. -- `engine_v3_fullclip_lpc` no longer collapses into NaN/silence after stability hardening, but it is still not keepable. -- The current engine-v3 prototype does **not** yet beat `pitch_only_adaptive_selector` on the canonical `pitchOrg +4` truth case. - -## First Canonical Results -### Plain continuous carrier -- Run: - - `D:\test projects\os tests\runs\20260417_035915_engine_v3_pitchOrg_plus4_fullclip_plain_r2fresh` -- Summary: - - `engine_v3_fullclip` - - sane audio output - - note mel `9.963` - - note envelope `1.229` - - entry mel `7.867` - - exit mel `9.306` - - onset artifact `2.43` -- Verdict: - - proves the continuous full-clip carrier path is live - - still substantially worse than the kept adaptive baseline on the target problem - -### LPC formant pass -- Run: - - `D:\test projects\os tests\runs\20260417_035915_engine_v3_pitchOrg_plus4_fullclip_lpc_r3fresh` -- Summary: - - `engine_v3_fullclip_lpc` - - numerically stable after guard fixes - - still extremely poor perceptual/regression quality - - note mel `48.943` - - note envelope `6.362` - - entry mel `49.398` - - exit mel `48.759` -- Verdict: - - current LPC transfer implementation is not viable yet - - it remains prototype-only and must not be promoted - -## What This Means -- The structural continuity change is now real and benchmarkable. -- The first formant-transfer implementation is still wrong for the target vocal edit quality. -- Engine-v3 remains a prototype branch, not a product-ready replacement. - -## Boundary-Zone Follow-Up -- Added a true boundary-zone blend on top of the continuous carrier: - - original shell at the boundary - - own-engine first-voiced-cycles patch - - continuous carrier for the stable body -- Canonical runs: - - `D:\test projects\os tests\runs\20260417_040833_engine_v3_pitchOrg_plus4_fullclip_plain_r3boundary` - - `D:\test projects\os tests\runs\20260417_040833_engine_v3_pitchTest_plus4_fullclip_plain_r1boundary` -- Diagnostics confirm the boundary slice is engaging: - - `firstVoicedCyclesEntryUsed=true` - - `firstVoicedCyclesExitUsed=true` - - `v3ContinuousRenderUsed=true` -- Verdict: - - this is the first real boundary-zone ownership prototype - - it still does not clear the quality gate on the canonical `+4` cases - -## Safer Formant/Body Harvest Follow-Up -- Added a low-wet own-engine body-color harvest inside the edited note body only. -- Canonical runs: - - `D:\test projects\os tests\runs\20260417_101035_engine_v3_pitchOrg_plus4_fullclip_plain_r4bodyharvest` - - `D:\test projects\os tests\runs\20260417_101035_engine_v3_pitchTest_plus4_fullclip_r2bodyharvest` -- Verdict: - - this bounded formant/body-color attempt did not materially move the canonical truth metrics - - it is not the missing win - -## Immediate Next Work -1. Keep `pitch_only_adaptive_selector` as the shipping baseline. -2. Treat `engine_v3_fullclip` as the active engine-v3 prototype. -3. Keep `engine_v3_fullclip_lpc` and `_transient` as experimental-only until they beat the baseline on: - - `pitchOrg +4` - - `pitchTestOrg +4` - - `pitchOrg -4` - - `pitchTestOrg -4` -4. Next engine-v3 DSP work should focus on: - - first-voiced-cycles boundary ownership - - safer formant transfer - - immediate-neighbor-only smoothing validation diff --git a/docs/features.md b/docs/features.md deleted file mode 100644 index fae8fbc..0000000 --- a/docs/features.md +++ /dev/null @@ -1,347 +0,0 @@ -# OpenStudio / Studio13-v3 Feature Inventory - -> **Last updated:** 2026-06-01 -> -> **Primary project format:** `.osproj` -> -> **Legacy project format:** `.s13` -> -> **Scope of this update:** current source tree, mounted UI, action registry, frontend bridge, backend native functions, and adjacent feature docs. -> -> **Note:** This file used to be a historical REAPER-parity tracker with stale counts. It is now a current feature inventory. Keep older planning docs for traceability, but use this file, `README.md`, and `docs/implemented_features.md` for public-facing feature claims. - -## Status Legend - -| Status | Meaning | -|---|---| -| Implemented | User-facing workflow has a UI/action and a store, bridge, or backend path. | -| Partial / Experimental | Real code exists, but the workflow is incomplete, hardware/runtime dependent, or not yet release-hardened. | -| Planned / Stub | UI state, bridge stubs, or planning notes exist, but the feature should not be advertised as complete. | - -## Latest Additions Since The Old Tracker - -| Area | Latest feature surface | -|---|---| -| AI runtime setup | In-app AI Tools setup with install, cancel, reset, status refresh, feature selection, background install notification, and platform-specific runtime plans. | -| AI music generation | ACE-Step 1.5 XL Turbo workflows for text-to-music and lyrics-plus-style generation. | -| AI audio generation | Stable Audio 3 Medium support for text-to-audio and source-conditioned workflows, including license-gated local model import. | -| Clip AI workflows | Create variation, inpaint selected range, and continue clip from a selected source audio clip. | -| Stem separation | Async stem separation with progress polling, cancellation, selectable stems, and result import to tracks. | -| Audio-to-MIDI | Convert an audio clip to a new MIDI track using polyphonic note extraction where the native Basic Pitch / ONNX path is available. | -| Detached editors | Detached mixer and detached MIDI editor window flows with UI snapshot publishing through the native bridge. | -| MIDI editor depth | Docked or windowed piano roll sessions, velocity/CC lanes, pitch bend controls, quantize, note transforms, and range editing. | -| Render/export | Dither path, secondary output, render queue, region render matrix, DDP export, batch converter, render-in-place, and add-render-to-project options. | -| Routing and mixing | Send/bus routing, routing matrix, sidechain assignment, channel output selection, stereo width, phase invert, pan law, and mixer snapshots. | -| Project delivery | Project compare, archive/unarchive, clean project directory, safe-mode open, project templates, and project tabs. | -| Video and sync | Video window plumbing, FFmpeg-backed video/audio extraction path, MTC input/output, MIDI clock sync state, and timecode settings. | -| Scripting and effects | Lua script editor/API, S13FX/JSFX audio effects, JSFX `@gfx` editor support, plugin A/B states, FX chain presets, and built-in FX presets. | -| Workflow customization | Command palette, shortcuts modal, screensets, theme editor, toolbar editor, custom actions/macros, mouse modifiers, and help surfaces. | - -## At A Glance - -| Area | Current support | -|---|---| -| Core engine | JUCE C++ audio engine with React/TypeScript WebView UI and synchronous `window.__JUCE__.backend` bridge. | -| Recording | Multitrack audio recording, MIDI recording, punch range, record modes, armed tracks, record-safe state, and input monitoring. | -| Editing | Clip move/trim/split, ripple edit, razor edit, time selection edits, fades, grouping, takes, slip edit, reverse, normalize, time stretch, and pitch shift. | -| MIDI | MIDI and instrument tracks, piano roll, virtual keyboard, MIDI import/export, MIDI output routing, quantize, transforms, CC lanes, and audio-to-MIDI. | -| Mixing | Mixer, detached mixer, sends, buses, routing matrix, master strip, channel strip EQ, metering, automation, mixer snapshots, and sidechains. | -| Plugins | VST3 hosting, CLAP/LV2 code paths, native editors, input/track/master/monitoring FX, presets, A/B states, MIDI learn, and built-in FX. | -| Pitch | Graphical pitch editor, YIN pitch analysis, note blobs, drift/vibrato tools, real-time pitch corrector, polyphonic detection, and ARA host plumbing. | -| AI | Optional local AI Tools runtime for stem separation, ACE-Step music generation, Stable Audio 3 audio generation, variation, inpaint, and continuation. | -| Render | WAV, AIFF, FLAC, MP3, OGG, stems, selected items, razor areas, regions, render queue, region matrix, DDP, batch conversion, dither, metadata, and secondary output. | -| Project tools | `.osproj` save/load, `.s13` legacy support, recent projects, templates, safe mode, autosave/backup, compare, archive, clean directory, missing media resolver. | -| Workflow | Command palette, keyboard shortcuts, menus, screensets, themes, toolbar editor, help overlay, getting started guide, big clock, and timecode settings. | -| Sync/media | MTC/MIDI clock plumbing, control surface manager, OSC support, MCU-style control surface paths, video window, and FFmpeg video extraction. | - -## Core Engine, Transport, And Recording - -### Implemented - -- Native JUCE audio engine with a React/TypeScript UI hosted in WebView2. -- Audio device settings for driver, device, input/output channels, sample rate, buffer size, and channel configuration. -- Sample-rate-aware clip playback and render mixing through the playback engine. -- Transport controls for play, pause, stop, record, seek, rewind, loop, set loop to time selection, and auto-scroll. -- Tempo, tap tempo, time signature, tempo markers, and metronome controls. -- Metronome accenting, volume, custom click/accent sounds, reset sounds, and render-to-file support. -- Multitrack audio recording with track arm, record-safe, input channel selection, monitoring, punch range, and record modes. -- MIDI recording with live preview and completed MIDI clip handoff. -- Background waveform peak cache and recording waveform previews. -- Real-time meter update event flow isolated from track arrays for render performance. - -### Partial / Experimental - -- External sync paths exist for MTC and MIDI clock, but device and studio integration still needs hardware validation. -- LTC output has a UI/bridge surface, but the backend explicitly treats generation as a stub. -- Live capture output has bridge/store state and should be treated as experimental until fully validated in-session. - -## Project, Files, And Media Management - -### Implemented - -- New, open, save, save as, close project, quit, and unsaved-changes confirmation flows. -- `.osproj` as the primary project extension with `.s13` legacy open/save support. -- Recent projects, startup recovery/diagnostics, and safe-mode project open with FX bypass. -- Project settings for name, notes, sample rate, bit depth, tempo, time signature, author/revision style metadata, and related state. -- Timestamped backup/autosave preferences. -- Project tabs, project templates, save-as-template, and new-from-template flows. -- Project compare with saved version. -- Session archive/unarchive backend paths. -- Media import through native dialogs, drag/drop, and audio/video import path. -- Missing media resolver. -- Media explorer surface, recent paths, and media import workflow. -- Clean project directory tool. -- Batch file converter modal. - -### Partial / Experimental - -- Media explorer audition/preview should be treated as limited until the backend preview engine is expanded. -- AAF/session interchange code paths exist, but AAF import is not a complete advertised workflow. - -## Arrangement And Clip Editing - -### Implemented - -- Konva timeline with ruler, grid, snap, zoom, scroll, playhead, waveform rendering, MIDI thumbnails, and time selection. -- Audio and MIDI clip creation, media import, drag/drop, move, resize, trim, and track-to-track moves. -- Multi-clip and multi-track selection, select all clips, select all tracks, and deselect all. -- Undo/redo through the command manager for editing operations. -- Cut, copy, paste, duplicate, delete, nudge, and fine nudge. -- Split at cursor and split at time selection. -- Cut/copy/delete within time selection and insert silence. -- Ripple editing modes: off, per-track, and all-tracks. -- Razor edit areas with content deletion and render source support. -- Clip mute, lock, color, volume, pan, fade in/out, fade shape, gain envelope, and clip properties panel. -- Auto-crossfade and a crossfade editor surface. -- Reverse clip, normalize selected clips, time stretch, and clip pitch shift. -- Dynamic split/transient split UI and execution path. -- Slip editing and free item positioning. -- Takes: add take, set active take, explode takes to tracks, and implode clips into takes. -- Track spacers, empty items, empty MIDI items, insert multiple tracks, and folder tracks. -- Clip launcher view. -- Quantize selected clips to grid. - -## MIDI And Instruments - -### Implemented - -- MIDI device enumeration, input opening, output routing, and MIDI panic. -- MIDI tracks and instrument tracks. -- Virtual instrument on new track and quick-add instrument track actions. -- MIDI clip storage, serialization, playback scheduling, import, export, and project MIDI export. -- Piano roll editor with docked and detached/windowed sessions. -- Note draw, edit, select, cut/copy/paste, delete, resize, move, and range operations. -- Velocity editing, CC lanes, pitch bend controls, visible lane preferences, and note inspector style surfaces. -- MIDI quantize using last settings, reset quantize, freeze quantize, and quantize test coverage. -- MIDI transforms: transpose, octave transpose, velocity scale, reverse notes, invert note pitches, and snap selected notes to scale. -- Virtual piano keyboard. -- MIDI input readiness checks before recording. -- Audio-to-MIDI conversion creates a generated MIDI track beside the source track, with undo support. -- Built-in instrument paths for basic synth, piano, drums, and sampler-style state. - -### Partial / Experimental - -- Drum editor and media pool toggles/actions exist, but should be confirmed as mounted, complete workflows before being advertised heavily. -- Step sequencer/step input state exists in the store surface, but the full user workflow needs validation. - -## Mixing, Routing, Metering, And Automation - -### Implemented - -- Mixer panel, channel strips, master strip, master track in TCP, and detached mixer window. -- Track controls for volume, pan, mute, solo, arm, input monitoring, record-safe, channel count, playback offset, and output channels. -- Master volume, pan, mute, mono, and master automation state. -- Peak/RMS meters, master meter cluster, clipping state, and reset meter clip actions. -- Channel strip EQ modal and built-in channel EQ backend parameters. -- Sends with level, pan, enable, pre/post fader, and phase invert. -- Bus/group tracks and create-bus-from-selected-tracks. -- Routing matrix and track routing modal. -- Sidechain source assignment into plugins. -- Phase invert, stereo width, master send enable, pan law, and DC offset handling. -- Track groups / linked group parameters. -- Mixer snapshots with save, recall, delete, backend sync, and undo on recall. -- Track and master automation lanes with read, write, touch, latch, manual point editing, range replace, backend sync, and envelope manager. -- Move-envelopes-with-items option. -- Loudness meter, phase correlation, and spectrum data bridge paths. - -## Plugins, FX, And Scripting - -### Implemented - -- Plugin scanning and loading for VST3, with CLAP/LV2 code paths present. -- Native plugin editor window management. -- Input FX, track FX, master FX, and monitoring FX chains. -- Add, remove, bypass, reorder, and open editor flows for FX chains. -- Plugin parameters, preset load/save, state save/load, and plugin A/B compare. -- Plugin MIDI learn, mapping list, and clear mapping flows. -- FX chain presets for track, input, and master chains. -- Built-in EQ, compressor, gate, limiter, delay, reverb, chorus, saturator, pitch corrector, and instrument-style processors. -- Built-in FX preset save/load/delete. -- Built-in FX oversampling controls. -- S13FX / JSFX-style script effects. -- JSFX `@gfx` native editor support through `S13FXGfxEditor`. -- Lua script execution, script directory/listing, script editor UI, and console output. -- App-facing Lua API documentation in `docs/API.md`. - -### Partial / Experimental - -- CLAP and LV2 support should be described as code-path/plugin-format support until compatibility is validated with a plugin test matrix. -- 32-bit plugin bridge is currently a preference/toggle surface, not a completed out-of-process legacy plugin host. - -## Pitch, Analysis, And Audio Processing - -### Implemented - -- Monophonic pitch analysis with YIN contour and note segmentation. -- Graphical pitch editor with note blobs, pitch contour, piano grid, zoom, scroll, and lower-zone UI. -- Pitch editor tools for pitch, drift, vibrato, transition, draw/split style editing, selection, undo, and redo. -- Scale/key snapping, chromatic snap, correct-pitch macro, and scale detection support. -- Offline monophonic graphical pitch correction/apply path. -- Pitch preview, scrub preview, rendered preview segments, and route/status diagnostics. -- Real-time auto-tune style pitch corrector FX. -- Polyphonic detection and audio-to-MIDI extraction through the Basic Pitch / ONNX path where available. -- Audio analyzer, transient detection, and silent-region style analysis utilities. -- ARA host controller lifecycle and track/clip ARA status plumbing. - -### Partial / Experimental - -- Polyphonic pitch correction/resynthesis is less mature than monophonic pitch editing. Treat detection and MIDI extraction as stronger than polyphonic audio correction. -- Subjective pitch, formant, stem, and artifact quality always requires user audition. Harness diagnostics are not proof of audible quality. - -## AI And Assisted Audio - -### Implemented - -- Optional AI Tools runtime status with refresh, install, cancel, reset, selected feature install, requested feature routing, and setup progress. -- Modular AI Tools feature IDs for `stemSeparation` and `audioGeneration`. -- Hardware/runtime status including GPU support hints and model/runtime readiness. -- Platform runtime packaging plans for Windows DirectML/CUDA and Linux CUDA/ROCm style profiles. -- Stem separation workflow with selectable stems, progress polling, cancellation, and imported result clips/tracks. -- AI track type and AI track header controls. -- AI generation modal and AI workflow parameter fields. -- ACE-Step 1.5 XL Turbo model surface. -- Stable Audio 3 Medium model surface. -- AI workflows: - - Text to Music - - Lyrics + Style - - Text to Audio - - Create Variation - - Inpaint Selection - - Continue Clip -- Source-conditioned AI generation from selected clips, with time-selection requirements for inpaint. -- AI generation progress and cancellation. -- Stable Audio setup includes local snapshot selection and license acknowledgement state. - -### Partial / Experimental - -- AI generation quality and speed depend on installed optional runtimes, local hardware, available VRAM/RAM, model availability, and accepted model licenses. -- The core app intentionally does not bundle large AI model runtimes. - -## Render, Export, And Delivery - -### Implemented - -- Offline render through the same playback/FX path used by playback. -- Render sources for master, stems, selected tracks, selected media items, selected items through master, and razor edit areas. -- Region render matrix UI. -- Render bounds for entire project, custom range, time selection, project regions, and selected regions where the UI path is available. -- Output directory, filename, and wildcard filename resolution. -- Metadata state for rendered files. -- Formats: WAV, AIFF, FLAC, MP3, and OGG. -- Sample-rate conversion and lossy encoding through FFmpeg where needed. -- Mono/stereo output, bit depth/quality options, normalize, render tail, and include-metronome options. -- Dithered render path through `renderProjectWithDither`. -- Secondary output format and secondary bit depth. -- Online render and add-rendered-output-to-project UI state. -- Render queue panel and queue actions. -- Render clip in place and render track in place. -- Consolidate track. -- Freeze/unfreeze track state and related UI. -- DDP disc image export backend and modal. -- Batch converter modal. -- Export project MIDI. - -### Partial / Experimental - -- Region render matrix, DDP, batch conversion, online render, and add-to-project workflows should receive release smoke testing before high-confidence public release notes. -- Advanced broadcast metadata, immersive multichannel delivery, and full CD mastering validation remain specialist areas to test separately. - -## Workflow, UI, And Customization - -### Implemented - -- Central action registry used by menus, command palette, shortcut reference, and global shortcuts. -- Menu bar, main toolbar, transport bar, lower zone, mixer, timeline, and modal surfaces. -- Command palette. -- Keyboard shortcuts modal. -- Preferences modal with general, editing, display, and backup preferences. -- Help overlay and getting started guide. -- Big clock and timecode settings. -- Screensets/layout state with save/load actions. -- Theme presets, theme editor, custom theme overrides, theme import/export style state, and high-contrast support. -- Toolbar editor and custom toolbar state. -- Custom actions/macros. -- Mouse modifier preferences and reset. -- Toast notifications, modal safety guards, startup recovery app, and error boundary. -- Detachable panels for mixer and MIDI editor. - -## Sync, Control Surfaces, Video, And Pro-Audio Plumbing - -### Implemented / Present - -- Timecode display and timecode settings panel. -- MTC generator and receiver paths. -- MIDI clock sync source/status plumbing. -- MIDI control surface manager. -- OSC control surface support. -- MCU-style control surface support. -- Video window component. -- FFmpeg-backed video metadata/frame extraction and audio extraction path. -- Surround/channel layout and VBAP panner source modules. -- Track channel format and master channel format state. - -### Partial / Experimental - -- Video support is functional plumbing, not a full post-production video suite. -- External sync and control surface workflows should be tested with real devices. -- Surround/immersive workflows need dedicated validation before being advertised as mature. - -## File Types And Sidecar Assets - -| Type | Current role | -|---|---| -| `.osproj` | Primary project file. | -| `.s13` | Legacy project file support. | -| `.ostheme` | Current theme export/import target. | -| `.s13theme` | Legacy theme import support. | -| `.ospreset` | Built-in FX preset style. | -| `.ospeaks` | Current waveform peak cache sidecar. | -| `.s13peaks` | Legacy waveform peak cache sidecar support. | -| `.mid` / `.midi` | MIDI import/export. | -| `.wav`, `.aiff`, `.flac`, `.mp3`, `.ogg` | Render/export and media workflows. | - -## Current Caveats To Keep Honest - -| Feature | Caveat | -|---|---| -| Polyphonic pitch correction | Detection and MIDI extraction are present; polyphonic audio correction/resynthesis is still less mature. | -| CLAP/LV2 hosting | Code paths exist; plugin compatibility still needs broad validation. | -| 32-bit plugin bridge | Toggle/state exists; full legacy plugin bridge is not complete. | -| LTC output | Bridge surface exists; backend generation is stubbed. | -| Media explorer preview | Import/browse surface exists; audition preview is limited. | -| AAF import/interchange | Source code exists, but it should not be advertised as complete AAF support. | -| Video | FFmpeg-backed video plumbing exists; editing/post-production workflow maturity is still evolving. | -| AI generation | Optional runtime and hardware dependent; model licenses and local setup affect availability. | -| Audio quality claims | Pitch, formant, stem, and generation quality must be validated by listening, not just diagnostics. | - -## Source Cross-Reference - -- `README.md` - public overview and product positioning. -- `docs/implemented_features.md` - codebase feature audit and caveats. -- `frontend/src/store/actionRegistry.ts` - commands exposed to menus, shortcuts, and command palette. -- `frontend/src/App.tsx` - mounted panels, modals, lower zones, detached windows, and workflow surfaces. -- `frontend/src/services/NativeBridge.ts` - frontend-to-native feature boundary. -- `frontend/src/data/aiWorkflows.ts` - AI models, workflows, and parameters. -- `frontend/src/store/actions/*` - current Zustand action modules. -- `Source/MainComponent.cpp` - native bridge functions exposed to the frontend. -- `Source/AudioEngine.*`, `Source/PlaybackEngine.*`, `Source/TrackProcessor.*`, `Source/MIDIManager.*`, `Source/Pitch*`, `Source/StemSeparator.*`, `Source/AITrackEngine.*`, and related source files - backend feature implementation. diff --git a/docs/features.pdf b/docs/features.pdf deleted file mode 100644 index 938a748588964b11c2af2248a671f18a7e730062..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 279549 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%0DYf45u%I0 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ʱ@l~lhOeJVeUikF+Qr<$F!1&XrW^TOS6 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%0DX}Hop4YQ9az+ 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 diff --git a/docs/implemented_features.md b/docs/implemented_features.md index 808be4a..2274b00 100644 --- a/docs/implemented_features.md +++ b/docs/implemented_features.md @@ -4,6 +4,12 @@ This audit treats the codebase as the source of truth: `CMakeLists.txt`, `Source Features are sorted by impact first, then complexity. +Inventory status rule: a feature belongs in the main tables only when a +user-facing workflow is mounted and has the necessary state, bridge, or backend +path. A real but incomplete, hardware-dependent, or code-path-only surface +belongs under [Implemented But Partial / Caveated](#implemented-but-partial--caveated) +and must not be advertised as a complete workflow. + Ratings: - `H`: High @@ -18,11 +24,13 @@ Ratings: | Real-time playback engine with sample-rate-aware clip mixing | H | H | | Audio device setup: driver, I/O, sample rate, buffer, channels | H | H | | Multitrack audio recording with armed tracks, monitoring, punch range | H | H | +| Record modes, record-safe state, input-channel selection, and set-loop-to-time-selection workflow | H | M | | Transport: play, stop, pause, record, seek, loop, current time | H | M | | Tempo, time signature, tap tempo, tempo markers | H | M | -| Metronome with accenting, volume, custom sounds, render-to-track | M | M | +| Metronome with accenting, volume, custom/reset click sounds, and render inclusion | M | M | | Background waveform peak cache and recording waveform previews | H | H | | MIDI recording preview and completed MIDI clip handoff | H | M | +| Meter events isolated from the track array to avoid playback-time UI churn | M | M | ## Arrangement / Editing @@ -38,7 +46,9 @@ Ratings: | Clip fades, clip volume, gain envelopes, mute, lock, color | H | M | | Clip reverse, normalize, time stretch, pitch shift | H | H | | Auto-crossfade and crossfade editor | H | M | -| Takes: explode, implode, active-take style state | M | M | +| Takes: add, select active, explode to tracks, and implode clips | M | M | +| Dynamic/transient split workflow | M | H | +| Track spacers, empty audio/MIDI items, and clip launcher | M | M | | Markers, named markers, regions, region manager | H | M | | Tempo marker support | H | M | | Quantize selected clips | M | M | @@ -60,6 +70,9 @@ Ratings: | Output channel selection, track channel count, playback offset | M | M | | LUFS measurement, phase correlation, spectrum data | M | H | | Channel strip EQ modal | M | M | +| Mixer snapshots with save, recall, delete, backend sync, and undoable recall | M | H | +| Track/master automation lanes with read, write, touch, latch, range replacement, and envelope management | H | H | +| Move-envelopes-with-items option | M | M | ## Plugins / FX / Scripting @@ -71,14 +84,19 @@ Ratings: | Add, remove, bypass, reorder FX chains | H | M | | Plugin parameters, presets, state save/load, A/B compare | H | H | | Plugin MIDI learn and parameter mapping | H | H | +| Track, input, and master FX-chain presets | M | M | +| Built-in FX preset save, load, and delete | M | M | | Processing precision override / hybrid precision support | M | H | | Plugin capability matrix, guardrails, release benchmark hooks | M | H | | Built-in EQ, compressor, gate, limiter, delay, reverb, chorus, saturator | H | H | | Built-in real-time pitch corrector FX | H | H | | Built-in FX editors and oversampling controls | M | H | +| NAM Rack A1/A2 pedal, amp, and full-rig capture hosting | H | H | +| NAM Rack Guitar/Bass voicing, native pedalboard, cabinet IR/Cabinet Space, Graphic EQ, modulation, delay, reverb/shimmer, tuner, calibration, presets, A/B, and project recall | H | H | +| NAM Rack multi-capture pack selection with per-capture topology, transactional audition/rollback, Use, replace, bypass, unload, and missing-asset recovery | H | H | | S13FX / JSFX-style script effects with sliders and reload | H | H | | S13FX `@gfx` native editor support | M | H | -| Lua script execution, script listing, script editor UI | M | H | +| Lua script execution, script listing/editor, console output, and app-facing API reference | M | H | ## MIDI / Instruments @@ -89,12 +107,16 @@ Ratings: | MIDI clips with note storage and playback scheduling | H | H | | MIDI recording into clips with live preview | H | H | | Piano roll editor | H | H | -| MIDI note draw/edit/select, velocity, CC editing | H | H | +| Docked/detached piano-roll sessions with note, velocity, CC, pitch-bend, and range editing | H | H | | Virtual piano keyboard | M | M | -| Step sequencer and step input state/actions | M | M | -| MIDI transforms: transpose, velocity scale, reverse, invert | M | M | +| Piano-roll step input state/actions | M | M | +| MIDI panic and input-readiness checks | M | M | +| Quantize using last settings, reset quantize, and freeze quantize | M | M | +| MIDI transforms: transpose/octave, velocity scale, reverse, invert, and scale snap | M | M | | MIDI import/export and project MIDI export | H | M | | Load/open virtual instrument on instrument tracks | H | H | +| Built-in basic synth, piano, clean-guitar, drum, and fallback sampler paths | M | H | +| Audio-to-MIDI creates an adjacent MIDI track with undo support | H | H | ## Pitch / Audio Analysis @@ -109,7 +131,7 @@ Ratings: | Real-time auto-tune style pitch corrector plugin | H | H | | Pitch editor undo/redo and A/B style comparison state | M | M | | Transient detection and silent-region detection | M | M | -| Polyphonic pitch detection and MIDI extraction via Basic Pitch / ONNX | H | H | +| Polyphonic pitch detection and MIDI extraction via Basic Pitch / ONNX (ONNX-enabled builds; current Windows/Linux release pipeline) | H | H | | Stem-aware / AI-adjacent audio analysis plumbing | M | H | ## Rendering / Export / Interchange @@ -117,13 +139,15 @@ Ratings: | Feature | Impact | Complexity | |---|---:|---:| | Offline project render through the same playback/FX engine | H | H | -| Render formats: WAV, AIFF, FLAC, MP3, OGG | H | H | +| Render formats: WAV, AIFF, FLAC, MP3, OGG (FFmpeg-backed export uses the bundled audited binary on Windows and a system dependency on macOS/Linux) | H | H | | Render options: sample rate, bit depth/quality, mono/stereo, normalize, tail | H | M | | Dithered render path | M | H | -| Stem/track render code path and region render matrix UI | H | H | +| Master and per-track stem render paths, plus region/razor range orchestration | H | H | +| Project, custom, time-selection, project-region, and selected-region bounds | H | M | +| Include-metronome and optional secondary-format output | M | M | | Render queue | M | M | | Add rendered output back into project | M | M | -| Render metadata and filename wildcards | M | M | +| Render filename wildcards | M | M | | Render in place, consolidate track, freeze/unfreeze | H | H | | Batch audio converter | M | M | | DDP export | M | H | @@ -140,6 +164,7 @@ Ratings: | Project settings, notes, author/revision metadata | M | M | | Project templates and save-from-template flow | M | M | | Safe-mode project open / FX bypass recovery path | H | M | +| Session archive/unarchive | M | H | | Media import and drag/drop handling | H | M | | Missing media resolver | H | M | | Media explorer browse/import | M | M | @@ -152,11 +177,13 @@ Ratings: | Feature | Impact | Complexity | |---|---:|---:| | AI tools runtime status, install, cancel, reset flow | H | H | +| Feature-selective AI setup with hardware/model readiness and background progress | H | H | | Stem separation workflow with selectable stems and progress polling | H | H | | Stem separation result import into new tracks/clips | H | H | | AI track type and AI track header controls | M | H | -| Text-to-music generation workflow | H | H | -| Lyrics + style music generation workflow | H | H | +| ACE-Step text-to-music and lyrics-plus-style generation | H | H | +| Stable Audio 3 Medium text-to-audio generation with gated local snapshot import and license acknowledgement | H | H | +| Source-conditioned variation, inpaint-selection, and continue-clip workflows | H | H | | AI generation progress/cancel handling | M | H | ## Workflow / UI Customization @@ -165,11 +192,15 @@ Ratings: |---|---:|---:| | Central action registry powering menus, shortcuts, command palette | H | H | | Menu bar, main toolbar, custom toolbar strip/editor | H | M | -| Keyboard shortcuts modal and global shortcut handling | H | M | +| Searchable/printable keyboard-shortcuts modal with 19 built-in DAW profile families | H | H | +| Independent keyboard and mouse/scroll profiles with platform-aware labels and documented gesture targeting | H | H | +| Scoped multi-binding, conflict checks, intentional unassignment, and named custom keyboard-profile import/export | H | H | | Command palette | H | M | | Screensets/layout state | M | M | | Theme editor and custom theme state | M | M | -| Mouse modifier preferences | M | M | +| Persisted mouse modifier preferences and profile-specific wheel/drag behavior, synchronized to detached windows | M | H | +| Custom actions/macros | M | M | +| High-contrast theme, startup recovery surface, modal guards, and top-level error boundary | M | M | | Big clock and timecode display settings | M | M | | Help overlay and getting started guide | L | M | | App updater hooks | M | M | @@ -186,6 +217,7 @@ Ratings: | MCU-style control surface support | M | H | | Video window, video metadata/frame extraction, audio extraction path | M | H | | Surround/channel layout and VBAP panner code paths | M | H | +| Track/master channel-format state | M | M | | ARA host controller lifecycle and track ARA status plumbing | H | H | ## Implemented But Partial / Caveated @@ -199,8 +231,19 @@ These have real code surfaces, but should not be counted as fully delivered DAW | LTC output | Bridge stub exists, not a real implementation | | Live capture start/stop | Bridge stubs exist | | Media Explorer audio preview | UI exists; backend preview function appears to only acknowledge/log | -| AI continuation workflow | Present in workflow list but marked unavailable | | Drum editor / media pool | Store toggles/actions exist, but no mounted full UI components were found | +| Step sequencer | Store state and actions exist, but no mounted step-sequencer component was found; piano-roll step input is the supported workflow | | Master FX reorder | Track/input reorder exists; master reorder is noted as unsupported in UI | | Legacy `executeScript/loadScriptFile` bridge names | Stubbed, but newer `runScript/runScriptCode` paths are implemented | +| Public TONE3000 release | OAuth/catalog/download implementation and deterministic mocks exist; partner approval and a fresh-account release-candidate run remain external gates | +| NAM Rack sonic/noise acceptance | Deterministic DSP/state guards exist; tone, transition perception, and real-interface crackle/noise require audition of the exact release build | +| Selected-item render sources | The two choices are present, but the backend does not yet filter the render to selected clips | +| Render metadata | Metadata fields are shown as a disabled placeholder; the renderer does not write them yet | +| Online render | The current render-dialog control is a disabled UI placeholder | +| Specialist delivery workflows | Region matrix, DDP, batch conversion, immersive delivery, broadcast metadata, and CD-mastering behavior need focused release smoke/hardware validation before strong public claims | +| External sync and control surfaces | MTC, MIDI clock, OSC, and MCU-style paths need release validation with real devices | +| Video | FFmpeg-backed plumbing exists, but this is not a mature post-production video suite; FFmpeg is bundled on Windows and is an optional system dependency on macOS/Linux | +| Surround/immersive delivery | Channel-layout and VBAP paths exist; dedicated workflow and hardware validation remain open | +| AI generation availability and quality | Optional runtime, model licenses, local hardware, RAM/VRAM, and user audition determine availability and results; large generation models are not bundled with the core app | +| Subjective audio quality | Pitch, formant, stem, generation, and NAM tone/artifact claims require audition; automated diagnostics alone are not acceptance evidence | diff --git a/docs/input-profiles.md b/docs/input-profiles.md new file mode 100644 index 0000000..93254e6 --- /dev/null +++ b/docs/input-profiles.md @@ -0,0 +1,140 @@ +# Keyboard, Hotkey, Mouse, and Scroll Profiles + +OpenStudio can adopt the familiar input conventions of another DAW without +changing the project or audio engine. Keyboard and mouse/scroll behavior are +separate choices: for example, you can use Cubase-style keys with REAPER-style +timeline scrolling. + +## Choose a profile + +1. Open **Help > Keyboard Shortcuts**. +2. Choose a **Keyboard profile**. +3. Choose a separate **Mouse & scroll profile**. +4. Search the action list to see the effective keys and their active scope. + +The first-run profile card exposes both selectors; Getting Started shows the +current choices and directs you to the shortcut window. Preferences also shows the +current mouse behavior and exact modifier overrides. + +The selected keyboard base, mouse/scroll base, custom keyboard profiles, and +fine-grained per-gesture mouse overrides are persisted. Named/importable custom +profiles currently apply to the keyboard only. Mouse overrides are validated +before loading and are synchronized to detached editor windows with the active +base profiles. + +## Binding vocabulary + +- **Primary** is Control on Windows/Linux and Command on macOS. +- The legacy portable **Alt** token means Alt on Windows/Linux and physical + Control on macOS. Profile definitions use explicit **Option**, **Control**, + **Command**, or **Meta** whenever the physical modifier matters. +- Numpad bindings and physical `Code:` bindings remain distinct from the + character printed on a key. This prevents layout-dependent labels from + silently changing the intended physical shortcut. + +## Built-in profiles + +OpenStudio currently includes 19 built-in profile families: + +| OpenStudio | Pro Tools | Cubase / Nuendo | REAPER | Audacity | +|---|---|---|---|---| +| Logic Pro | FL Studio | Ableton Live | Studio One | Bitwig Studio | +| Reason | Cakewalk / Sonar | GarageBand | Digital Performer | Ardour | +| Adobe Audition | Mixcraft | Waveform | Renoise | | + +A profile maps documented source-DAW conventions onto equivalent OpenStudio +actions. It does not claim to reproduce commands for which OpenStudio has no +matching operation. Most profiles keep the OpenStudio binding when the source +profile does not define an override; explicit empty mappings prevent known +collisions or false equivalence. Digital Performer, Waveform, and Renoise use a +strict policy, so commands without a verified mapping remain unassigned. The +deliberate exception is `Esc` for closing an active modal, which remains an +application-level safety control. + +Profiles remain selectable on every supported OpenStudio platform. When the +source DAW is not native to the current operating system, the UI labels the +selection as cross-platform emulation. Printed key names are normalized for the +current platform, including Command/Control and Option/Alt distinctions. + +## Custom keyboard profiles + +The Keyboard Shortcuts window can create named profiles on top of any built-in +base profile. A custom profile can be created, duplicated, renamed, deleted, +exported to JSON, and imported again. + +For each action you can: + +- add more than one key combination; +- create an all-platform binding or a macOS, Windows, Linux, or fallback + override; +- intentionally disable the action for the selected target; +- remove an override and inherit the built-in profile again; +- review conflicts before accepting an overlapping binding. + +An imported profile is schema-checked, size-limited, normalized, and rejected +if it names unknown actions or invalid/unreachable key combinations. Imported +profiles become a copy with a fresh local identity rather than overwriting an +existing profile silently. + +## Context and scope + +The same key may be valid in different editors. OpenStudio resolves bindings by +action scope, including global, Timeline/ruler, track controls, Mixer, Piano +Roll, Pitch Editor, automation, browser, plug-in, modal, and contextual +surfaces. Text entry and active shortcut capture take precedence so typing in a +field does not accidentally run a DAW command. + +The action list is the authoritative view of the selected profile. Use +**Print** to generate a cheat sheet for the current profile and platform; static +shortcut examples in the manual show the OpenStudio default profile only. + +## Mouse and wheel safety + +Vendor mouse profiles enable only gestures that have a documented OpenStudio +equivalent and a valid hit target. Unsupported parameter-wheel gestures are +suppressed instead of falling through to a different OpenStudio value change. +Browser zoom protection and normal list/browser scrolling remain application +safety behavior, independent of the selected vendor profile. + +Some gestures are intentionally surface-specific. Examples include Cubase +fade/event-volume adjustment, Pro Tools waveform zoom, FL Studio clip/note +operations, and Cakewalk grouped console-fader changes. A gesture that requires +a missing OpenStudio state remains unassigned rather than changing a broader +control unexpectedly. + +## Verification and source notes + +The implementation is covered by unit tests for platform normalization, +dispatch precedence, strict/fallback policy, conflicts, import/export, +mouse/wheel resolution, undo transactions, detached-window base-profile sync, +and editor scopes. Playwright flows cover onboarding, base-profile and custom +keyboard-profile persistence, runtime switching, custom keyboard overrides, +keyboard capture, and representative wheel behavior. + +The built-in profile claims were last validated against official vendor +manuals, help pages, and shortcut sheets on **2026-08-21**. The primary source +set is: + +- [Avid Pro Tools](https://kb.avid.com/pkb/articles/en_US/Knowledge/Pro-Tools-Documentation), + [Steinberg Cubase/Nuendo](https://www.steinberg.help/r/cubase-pro/15.0/en/cubase_nuendo/topics/key_commands/key_commands_tool_category_c.html), + [REAPER](https://dlz.reaper.fm/userguide/ReaperUserGuide779a.pdf), and + [Audacity](https://manual.audacityteam.org/man/keyboard_shortcut_reference.html); +- [Apple Logic Pro](https://support.apple.com/en-mt/guide/logicpro/lgcp02bf31b6/mac) + and [GarageBand](https://support.apple.com/guide/garageband/gbnd715f33a0/mac), + [FL Studio](https://www.image-line.com/fl-studio-learning-content/fl-studio-online-manual/html/basics_shortcuts.htm), + [Ableton Live](https://www.ableton.com/en/manual/live-keyboard-shortcuts/), and + [Studio One](https://pae-web.presonusmusic.com/downloads/products/pdf/Studio_One_Pro_7_Key_Command_Sheet.pdf); +- [Bitwig Studio](https://www.bitwig.com/userguide/latest/the_dashboard/), + [Reason](https://docs.reasonstudios.com/reason14/key-commands), + [Cakewalk/Sonar](https://help.cakewalk.com/hc/en-us/articles/360036997613-Cakewalk-Sonar-Keyboard-Shortcuts), + [Digital Performer](https://cdn-data.motu.com/manuals/software/dp/v113/Digital%20Performer%20User%20Guide.pdf), + and [Ardour](https://manual.ardour.org/setting-up-your-system/keyboard-shortcuts/); +- [Adobe Audition](https://helpx.adobe.com/audition/desktop/keyboard-shortcuts/default-keyboard-shortcuts.html), + [Mixcraft](https://acoustica.com/mixcraft-10-manual/keyboard-shortcuts), + [Waveform](https://www.tracktion.com/training/manuals), and + [Renoise](https://tutorials.renoise.com/wiki/Keyboard_Shortcuts). + +These sources describe each product's **published defaults**. They are not a +promise to reproduce a user's customized source-DAW map. OpenStudio's own named +custom profiles and overrides are a separate, persisted layer on top of the +selected published-default base. diff --git a/docs/macos-audio-fixes.md b/docs/macos-audio-fixes.md deleted file mode 100644 index 1233108..0000000 --- a/docs/macos-audio-fixes.md +++ /dev/null @@ -1,209 +0,0 @@ -# macOS Audio Fixes — Root Cause Analysis & Implementation Notes - -**Date:** 2026-04-13 -**Affects:** macOS arm64 (Apple Silicon), all macOS releases -**Files changed:** -- `Source/StemSeparator.cpp` -- `CMakeLists.txt` - ---- - -## Background - -Two separate bugs were found during macOS testing with an Audient ID14 USB audio interface. Both trace back to the same root condition: **the app was distributed without notarization**, triggering macOS Gatekeeper quarantine on first launch. The quarantine created a cascade of failures in two independent subsystems. - -The user had to run `xattr -dr com.apple.quarantine /Applications/OpenStudio.app` manually before the app would open. This is the key diagnostic signal that connected both bugs. - ---- - -## Bug 1 — AI Tools Installation Fails on macOS arm64 - -### Symptom - -Install log shows the download, verification, and extraction all succeeding, then: - -```json -{ - "phase": "probe", - "event": "runtime_probe_finished", - "baseRuntimeReady": false, - "runtimeReady": false, - "selectedBackend": "cpu", - "supportedBackends": "" -} -``` - -`supportedBackends: ""` (empty string, not even `"cpu"`) is the diagnostic fingerprint — it means `probeRuntimeCapabilities()` returned a **default-initialized struct**, i.e., it exited before parsing any JSON from the probe process. - -### Root Cause Trace - -#### Step 1 — Why `supportedBackends` is empty - -`StemSeparator::probeRuntimeCapabilities()` has several early-return paths that return a default `RuntimeCapabilities{}` struct before reaching the JSON parse loop. The log call at the end (`capabilities.supportedBackends.joinIntoString(",")`) then produces an empty string because the array was never populated. The "add cpu if empty" safety net only runs after a successful parse — not on early returns. - -#### Step 2 — Which early-return fired - -The Python binary path check passes (the extracted Python file exists on disk — confirmed by the `findPythonInRuntimeRoot` check at line 1674 succeeding). The failure is at the subprocess launch: - -```cpp -if (! probe.start(command) || ! probe.waitForProcessToFinish(30000)) - return capabilities; -``` - -`juce::ChildProcess::start()` uses `posix_spawn()` internally on macOS. `posix_spawn()` returns `EACCES` and the call returns `false` when the target binary is not executable. - -#### Step 3 — Why the binary is not executable - -`juce::ZipFile::uncompressTo()` does not restore Unix file permission bits from the zip's external file attributes. The Python binary inside the AI runtime archive has execute permission in the zip metadata, but after extraction the file mode is set without the `x` bit — typically `-rw-r--r--` instead of `-rwxr-xr-x`. - -This is a known limitation of JUCE's zip extraction: it writes file content correctly but ignores the Unix permission field stored in the zip's local file headers. - -#### Step 4 — The quarantine layer on top - -Even if the execute bit were somehow present, macOS applies the `com.apple.quarantine` extended attribute to all files extracted from a downloaded zip archive (because the zip itself was downloaded from the internet and carries the quarantine attribute). Gatekeeper blocks execution of quarantined binaries launched by a child process. - -The user's `xattr -dr` on the app bundle only cleared the `.app` itself. Files extracted later to `~/Library/Application Support/OpenStudio/stem-runtime/` were quarantined separately and untouched by that command. - -Both problems apply simultaneously on a fresh install: -- No execute bit → `posix_spawn()` fails with `EACCES` -- Quarantine attribute → Gatekeeper blocks even if execute bit is present - -### Fix - -**File:** `Source/StemSeparator.cpp` — `extractRuntimeArchive()` - -After the successful `copyDirectoryTo(destinationRoot)` call and before cleanup, a `#if JUCE_MAC` block is inserted that performs two post-extraction steps: - -**Step A — Restore execute bits using POSIX `chmod()`** - -A lambda (`restoreExecuteBit`) iterates every regular file under `bin/` and `lib/` using `juce::RangedDirectoryIterator`, reads current permissions with `::stat()`, and ORs in `S_IXUSR | S_IXGRP | S_IXOTH` via `::chmod()`. A separate block does the same for the Python binary itself (which may live outside `bin/` depending on the archive layout). - -`chmod()` is used directly instead of spawning a subprocess because: -- It avoids the overhead of a child process -- It avoids the circular problem of needing a working Python to fix Python's own permissions -- `<sys/stat.h>` is always available on macOS/Linux - -**Step B — Strip the quarantine attribute using `xattr -rd`** - -`xattr` is a macOS system tool that always exists at a known path. It is invoked via `juce::ChildProcess` with `xattr -rd com.apple.quarantine <destinationRoot>`. The `-r` flag makes it recursive across the entire runtime directory. Failure is treated as non-fatal — the chmod step (Step A) is the primary fix; the quarantine strip is defense-in-depth. - -There is no single POSIX API equivalent to a recursive `removexattr` over a directory tree, so the subprocess approach is necessary for this step. - -**Additional changes in `probeRuntimeCapabilities()`:** - -- All early-return paths now emit a structured JSON log line via `appendAiToolsLogLine()` explaining which check failed (python not found, script not found, process start failure, timeout, bad exit code). Previously these returned silently, making the failure impossible to diagnose from the log alone. -- Probe subprocess timeout increased from 15 000 ms to 30 000 ms. Even after quarantine is stripped, macOS Gatekeeper performs a one-time scan of newly executable binaries. On slow or heavily loaded systems this scan can exceed 15 seconds. - -### Platform Impact - -The chmod/xattr block is wrapped in `#if JUCE_MAC` and does not compile on Windows or Linux. The `#include <sys/stat.h>` is wrapped in `#if JUCE_MAC || JUCE_LINUX` — it is a standard POSIX header on Linux and a harmless addition there. The timeout and logging changes are cross-platform but additive only (longer timeout, extra log lines on failure). - ---- - -## Bug 2 — Input Monitoring Produces No Audio (No Meter Movement) - -### Symptom - -- Audient ID14 connected via USB, inputs visible in the device selector inside the app -- Track added, armed for recording, FX loaded -- No audio heard through monitoring -- No movement in the channel strip peak meters at all - -### Why This Is Not a Driver Issue - -The Audient ID14 is a class-compliant USB audio device. macOS has native Core Audio support for it with no third-party driver required. Other DAWs working with the same device confirms the hardware and driver layer are fine. - -### Root Cause Trace - -#### Step 1 — Enumeration vs. capture - -The app can list the interface's inputs (channel count, names) because device enumeration uses `AudioObjectGetPropertyData` with `kAudioDevicePropertyStreamConfiguration`, which does **not** require microphone permission. - -Actual audio capture — reading samples from `inputChannelData` in the audio callback — goes through a different code path that macOS gates behind the privacy permission system. - -#### Step 2 — macOS treats all audio input as "microphone" - -On macOS, **the "Microphone" privacy permission covers every audio input source** — built-in microphone, USB audio interfaces, Thunderbolt interfaces, HDMI audio return, everything. It is not specific to the physical built-in microphone. The OS does not distinguish between a laptop mic and a professional audio interface at the privacy layer. - -When microphone permission is denied or not yet requested: -- `numInputChannels` in the audio callback may still be > 0 (the device is open) -- But all values in `inputChannelData` are zero — silence -- The monitoring path in `AudioEngine::audioDeviceIOCallbackWithContext()` faithfully copies those zeros into the track buffer -- The track FX chain processes zeros, the meter computes 0.0 RMS, the channel strip shows nothing - -#### Step 3 — The permission was never requested - -The `NSMicrophoneUsageDescription` key was missing from the app's `Info.plist`. This key is required for macOS to allow the app to use audio input at all. When the key is absent: - -- macOS never shows a permission dialog -- The app's permission state stays at "not determined" (or is silently treated as denied) -- Core Audio provides zero input data on every callback - -This key must be set in the generated `Info.plist` at build time. In a JUCE CMake project, it is controlled through the `juce_add_gui_app()` call. - -**The existing `juce_add_gui_app()` call in `CMakeLists.txt`:** - -```cmake -juce_add_gui_app(OpenStudio - PRODUCT_NAME "OpenStudio" - VERSION ${PROJECT_VERSION} - ICON_BIG "${CMAKE_CURRENT_SOURCE_DIR}/assets/icon-256x256.png" - ICON_SMALL "${CMAKE_CURRENT_SOURCE_DIR}/assets/icon-16x16.png" - # MICROPHONE_PERMISSION_ENABLED and MICROPHONE_PERMISSION_TEXT were absent -) -``` - -#### Step 4 — The quarantine connection - -The app being quarantined on first launch is related but not the direct cause. The direct cause is the missing plist key. The quarantine connection is: - -- A quarantined app on its first launch may have its entitlement and permission requests suppressed or fail silently by Gatekeeper -- If the key had been present but the first launch was quarantined, macOS might have failed to record the "not determined" state correctly -- After the user ran `xattr -dr` on the app, subsequent launches no longer trigger Gatekeeper — but the permission was already never requested, so audio input still returns zeros - -### Fix - -**File:** `CMakeLists.txt` — `juce_add_gui_app()` call - -Two properties added: - -```cmake -MICROPHONE_PERMISSION_ENABLED TRUE -MICROPHONE_PERMISSION_TEXT "OpenStudio needs access to your audio input to record from microphones and audio interfaces." -``` - -`MICROPHONE_PERMISSION_ENABLED TRUE` tells JUCE's CMake module to emit `NSMicrophoneUsageDescription` into the generated `Info.plist`. `MICROPHONE_PERMISSION_TEXT` is the string value for that key — it is shown to the user in the macOS permission dialog and in System Settings → Privacy → Microphone. - -On the first launch of the rebuilt app, macOS will display a one-time permission dialog. After the user grants access, Core Audio provides real input data and monitoring works. - -### Platform Impact - -`MICROPHONE_PERMISSION_ENABLED` and `MICROPHONE_PERMISSION_TEXT` are Apple-platform-only properties in JUCE's CMake module. The module does not act on them for Windows or Linux builds — they are silently ignored. This change has zero effect on Windows and Linux builds. - -### User-Facing Behavior Change - -**New installs:** The permission dialog appears on first launch. Expected and correct. - -**Existing installs (users who had the old build):** Their stored permission state is "not determined" (the key was never in the plist, so macOS never asked). On first launch of the updated build, macOS will show the dialog. They grant access, and monitoring works from that point forward. - -**If a user previously explicitly denied access** (unlikely given the permission dialog was never shown, but possible through System Settings): They need to enable it manually at System Settings → Privacy & Security → Microphone. - -To reset a specific installation's stored permission state from the terminal: - -```bash -tccutil reset Microphone <bundle-identifier> -# e.g.: tccutil reset Microphone in.openstudio.app -``` - ---- - -## Summary of All Changes - -| File | Change | Reason | -|---|---|---| -| `Source/StemSeparator.cpp` | `#include <sys/stat.h>` under `#if JUCE_MAC \|\| JUCE_LINUX` | Required for POSIX `stat()` and `chmod()` | -| `Source/StemSeparator.cpp` | Post-extraction `chmod +x` block in `extractRuntimeArchive()` | `juce::ZipFile::uncompressTo()` does not restore Unix execute bits; Python binary extracted without `+x` causes `posix_spawn()` to return `EACCES` | -| `Source/StemSeparator.cpp` | Post-extraction `xattr -rd com.apple.quarantine` in `extractRuntimeArchive()` | macOS applies quarantine to all files extracted from a downloaded zip; Gatekeeper blocks execution of quarantined binaries | -| `Source/StemSeparator.cpp` | Diagnostic log lines on all early returns in `probeRuntimeCapabilities()` | All early returns were previously silent; log now records which specific check failed | -| `Source/StemSeparator.cpp` | Probe timeout 15 000 ms → 30 000 ms | First-time Gatekeeper scan of a newly executable binary can exceed 15 s on loaded systems | -| `CMakeLists.txt` | `MICROPHONE_PERMISSION_ENABLED TRUE` + `MICROPHONE_PERMISSION_TEXT` in `juce_add_gui_app()` | Without `NSMicrophoneUsageDescription` in `Info.plist`, macOS never prompts for audio input permission and Core Audio silently returns zeros for all input | diff --git a/docs/midi-editor.md b/docs/midi-editor.md new file mode 100644 index 0000000..b757a16 --- /dev/null +++ b/docs/midi-editor.md @@ -0,0 +1,60 @@ +# MIDI Editor + +OpenStudio's MIDI editor combines arrange-view MIDI items with a docked piano +roll, controller lanes, instrument routing, source-window editing, and +project/export serialization. + +## Current contract + +- MIDI and instrument tracks share the main timeline with audio tracks. +- Clip move, resize, loop, slip, split, copy, duplicate, delete, mute, lock, + repeat, and compatible cross-track operations are undoable. +- The piano roll supports draw, erase, move, resize, split, glue, mute, + audition, range selection, multi-item reference editing, and note inspector + changes. +- Controller editing covers velocity, note-off velocity, probability, + variance, pitch bend, CC, 14-bit CC, program/bank select, channel pressure, + poly pressure, curves, transforms, and lane management where exposed. +- Project save/reload, backend synchronization, playback scheduling, render, + freeze, and MIDI export preserve supported event metadata. + +## Grid, snap, and quantize contract + +- The arrange view and docked piano roll use one project-persisted Snap toggle, + Snap Type, Grid Type, active Quantize Preset, and custom preset collection. +- Grid choices include Bar, Beat, straight, triplet, dotted, and time values; + Use Quantize resolves through the active preset, while Adapt to Zoom selects + a readable musical subdivision. Visual grid-line thinning must not change the + actual edit/snap interval. +- Snap types cover Grid, Grid Relative, Events, Shuffle, Cursor, and their + supported combinations. MIDI draw, move, resize, split, and ruler gestures + use the selected grid when Snap is enabled; Ctrl/Command temporarily permits + off-grid placement. +- Quantize applies the active preset to starts, ends, both, or note length and + supports strength, swing/groove, tuplets, catch/safe ranges, roughness, and + moving controllers. Length Quantize may use an explicit value or Quantize + Link, and factory/custom preset save, rename, remove, restore, and project + recall preserve the selected workflow. + +Automated browser/native coverage is `pass` for those deterministic contracts. +Overall workflow parity remains `partial` until a musician completes the manual +REAPER/Cubase-style acceptance below. + +## Manual acceptance + +- [ ] Arrange a multi-item MIDI passage using move, loop, slip, split, + cross-track copy, and undo/redo without losing source context. +- [ ] Edit notes and multiple controller lanes in the docked editor without + accidental tool/selection changes. +- [ ] Confirm note, CC, pitch-bend, pressure, program, and bank data sound and + export as displayed. +- [ ] Save, close, reopen, and render a combined MIDI/instrument project. +- [ ] Compare the complete interaction flow with the intended REAPER arrange + and Cubase Key Editor references and record concrete remaining gaps. +- [ ] In a browser/WebView interaction run, verify Snap on, Ctrl/Command-drag + off-grid placement, draw/resize/split on the selected grid, quantize with the + active preset, and Length Quantize with both a fixed value and Quantize Link. + +Implementation history and old screenshot-by-screenshot matrices belong in Git +history. New behavior should be documented here with its test or manual +acceptance criterion. diff --git a/docs/nam-rack.md b/docs/nam-rack.md new file mode 100644 index 0000000..1454956 --- /dev/null +++ b/docs/nam-rack.md @@ -0,0 +1,607 @@ +# NAM Rack + +The NAM Rack is OpenStudio's free, open-source guitar and bass workspace. It hosts Neural +Amp Modeler A1 and A2 pedal, amp, or full-rig captures inside the DAW, surrounds them +with native pedals and studio effects, loads cabinet impulse responses, saves +complete tones, and optionally connects to TONE3000. + +OpenStudio does not charge to unlock the rack or its built-in effects. NAM and +OpenStudio are open source. Third-party captures and impulse responses still +retain their creators' licenses. + +## Musician workflow + +1. Add the NAM Rack to a track, choose the live instrument input, and select the + Guitar or Bass profile. +2. Set the device buffer and input trim, then tune. +3. Load a local A1/A2 capture or connect TONE3000. When a tone pack contains + more than one capture, open its capture list and choose the exact child + before auditioning or using it. +4. If the capture is amp-only, load a cabinet IR. A full-rig capture that + already contains a cabinet bypasses the separate cabinet stage. +5. Shape the front end with the native pedalboard and finish the sound with EQ, + modulation, delay, and reverb. +6. Save the complete rack as a tone or project state. + +### Multi-capture packs and audition + +TONE3000 results are presented as tone packs rather than duplicating one card +per child model. A pack reports its declared capture count; opening **View +Captures** hydrates the available children and shows each name, NAM +architecture, and topology such as **RAW / AMP ONLY**, **CAB EMBEDDED**, +**PEDAL**, **PREAMP**, or **STUDIO**. + +For a pack with more than one capture, the pack row is not an implicit model +choice. The user must select a concrete child before **Audition** or **Use** is +enabled. A selection is identified by tone ID plus model ID; URL-only children +use a normalized URL identity so two captures without numeric IDs do not +collapse together. The `tone:0` pack sentinel is never treated as a real child +capture. + +The lifecycle is deliberately explicit: + +1. Selecting a child updates only the pending UI selection; it does not change + the audible rack. +2. **Audition** prepares/downloads that child as needed and temporarily + publishes it to the target slot. Auditioning another child supersedes the + first preview. +3. **Stop** or Cancel restores the complete baseline that existed before the + preview, including capture, cabinet state, and relevant mix/power values. +4. **Use** commits that exact child and its durable source metadata. It can then + be recalled, pinned in filtered library views, and recovered after restart. +5. Opening the capture selector and using another child replaces the current + capture. Amp power bypasses/re-enables an Amp capture without losing it, and + Amp **Unload** clears that slot. Pedal NAM uses Pedal Mix for bypass; removing + the broader Pedal module also clears its pre-Amp module settings. +6. A CAB EMBEDDED/full-rig child bypasses the external Cab stage without + deleting the chosen IR. Returning to an amp-only child restores the external + cabinet workflow. + +Model preparation, stale-request rejection, and rollback are deterministic +test contracts. The user interface also exposes the child list and actions to +keyboard/assistive navigation. Absence of audible clicks, dropouts, or +real-interface crackle remains `not_asserted` until the exact release artifact +is auditioned at small and normal buffers. + +The current audible route is: + +```text +Input trim + -> Gate + -> Compressor + -> Stereo Poly Octaver + -> EQ Boost / pre-EQ + -> Precision Drive + -> Distortion + -> optional A1/A2 Pedal NAM capture + -> A1/A2 Amp or Full-Rig NAM capture + -> Cabinet IR and cabinet shaping + -> Cabinet Space (early Room / optional Doubler) + -> reorderable EQ / modulation / delay / reverb + -> Output trim + -> final stereo-linked finite/level safety guard + -> meters +``` + +The tuner observes the input without becoming part of the audible chain. +Pedal NAM is an optional serial pre-amp slot. When loaded, its calibrated wet +path and the native pedalboard feed the Amp/Full-Rig NAM slot; a partial Pedal +mix preserves the single-input dry/wet balance before a following mono Amp NAM. +A pedal-only capture is not a complete amp/cab tone by itself; it normally needs +a following Amp/Full-Rig and, for an amp-only capture, a cabinet IR. +The former global live Transpose, Chaos mode, Glitch, and Laser product +controls are retired. The new Cabinet Space Doubler is a separate post-cab +presentation effect, not a revival of the retired global control. Legacy Laser +fields are ignored and pruned when old projects are restored; they are not +exposed or processed by the active rack. + +### Guitar/Bass instrument-profile contract + +Instrument Profile is a non-destructive voicing selector. It changes only the +frequency-, tracking-, and low-end-sensitive behavior that should follow the +instrument. It never rewrites visible control values or silently replaces a +loaded NAM capture, cabinet IR, input/output trim, gate threshold, compressor +settings, time/mix controls, or explicit HPF/LPF choices. + +The current profile-aware components are: + +- EQ Boost keeps its eight stable preset/automation IDs, but Guitar presents + `120/250/500/1k/2.5k/5k/8k/12k` and Bass presents + `50/120/250/500/800/1.6k/4.5k/10k`. +- The stereo poly Octaver changes its analysis and pitch-tracking profile so + B0/E1 bass fundamentals remain supported without weakening Guitar tracking. +- Precision Drive, Distortion, the Amp input wrapper, and the Amp tone stack + move their hidden low-frequency split/weighting and tone centres downward + for Bass. Their visible Drive, Attack, Bright, Voice, Bass, Mid, Treble, and + Presence values stay untouched. +- The post-cab Graphic EQ retains its fixed nine labels; in Bass mode its 65 Hz + band becomes a low shelf instead of a narrow peaking band. +- Bass modulation keeps a unity direct path while the existing wet-path high + pass prevents the modulated branch from replacing the fundamental. +- Bass Delay keeps unity direct audio and applies a higher high-pass only to + repeats/feedback. Time, feedback, mix, modulation, ducking, mode, ping-pong, + and sync remain the user's values. +- Plate, Hall, and Room Reverb shorten only the low-band decay ratio in Bass + mode. The visible decay and low-cut values remain exact. Studio retains its + legacy mapping for old-preset compatibility. + +Gate, Compressor, Cabinet/IR, Cabinet Space, calibration, trims, and tuner are +deliberately profile-invariant. Compressor detector HPF and cabinet/reverb +cutoffs are explicit creative controls, not hidden selector defaults. The tuner +already covers 27.5-1320 Hz, so it needs no mode-dependent range change. + +Library filtering follows the profile only as a discovery aid. Untagged/shared +captures remain visible, an explicitly opposite-tagged active capture remains +loaded and is pinned in the list, and changing profile never downloads, swaps, +or unloads an asset. A factory-template label is cleared if that template no +longer matches the chosen profile; the resulting control state remains intact. + +### Tuner behavior + +Opening the tuner explicitly subscribes that NAM Rack to its dry hardware-input +route; record arm and input monitoring are not required. Multiple rack windows +use independent subscriber IDs, so closing one window cannot disable another. +The most recently opened tuner owns the analysis route until it closes, then +the prior subscriber resumes. A master-rack tuner explicitly observes global +hardware Input 1. + +The audio callback only selects the strongest routed channel and copies it into +a preallocated lock-free FIFO. A low-priority worker applies anti-aliased +downsampling, full-range MPM/NSDF pitch detection, parabolic period refinement, +and a temporal tracker. This keeps analysis out of the audible path and adds no +audio latency. + +The supported range is 27.5-1320 Hz, covering B0/E1 bass fundamentals through +upper guitar. Estimates are converted to absolute musical cents, median +filtered, and confidence-weighted before display. Three consistent frames +acquire a note, with the first pick-heavy window deliberately deweighted. +Large note or octave changes require repeated agreement, and note-name +hysteresis prevents boundary flicker. A missing estimate enters `Holding`: the +last average remains unchanged for about 450 ms, then fades and clears around +1.2 seconds after genuinely missing pitch. Closing the final subscribed tuner +disables the worker-side analysis. The worker discards stale queued audio +rather than letting CPU pressure turn into seconds of display lag. + +## Why A2 matters + +NAM A2 is the current Neural Amp Modeler architecture. TONE3000 and the NAM +project describe it as a more accurate and more efficient successor while +keeping the model format and inference ecosystem open. OpenStudio loads both A1 +and A2 so existing libraries remain useful while new A2 captures can take +advantage of the newer architecture. + +That gives OpenStudio a credible free alternative in the same creative category +as AmpliTube, Guitar Rig, and Neural DSP plug-ins: a playable amp-capture rig +with pedals, cabinets, effects, presets, and DAW recall. It is not an objective +claim that every capture beats every commercial product. Capture quality, +interface calibration, cabinet choice, and the player still determine the +result, and subjective comparison remains a musician's decision. + +## Architecture + +The main implementation lives in: + +- `Source/BuiltInEffects2.h/.cpp` — rack DSP, A1/A2 model preparation and + processing, cabinet convolution, effects, transitions, calibration, state, + latency, and diagnostics. +- `Source/NAMCabPresentation.h/.cpp` — bounded post-cab early-room and + doubler presentation, transient protection, mono compatibility, and spatial + diagnostics. +- `Source/NAMPolyOctaver.h/.cpp` — independent-channel ERB phase-scaling + octave voices used by the current stereo/polyphonic Octaver. +- `Source/TunerPitchTracker.h/.cpp` — real-time-safe input tap, background + MPM/NSDF detector, sustained-note averaging, and hold/release state. +- `Source/MainComponent.cpp` — native bridge, TONE3000 OAuth/search/download, + local library, and secure token persistence. +- `frontend/src/components/NAMRackPanel.tsx` — rack application state and user + workflow. +- `frontend/src/components/NAMRackDesignPort.tsx` — hardware-style stage UI. +- `frontend/src/components/NAMExplorer.tsx` — local/TONE3000 browsing, + preview, installation, and recovery. +- `frontend/src/services/NativeBridge.ts` — typed native API and deterministic + development mocks. + +### Real-time contract + +- Model parsing, file I/O, allocation, and convolution preparation occur away + from the audio callback. +- Prepared models and IRs are published atomically and retired after readers + have left the previous graph. +- The callback uses preallocated buffers and bounded work. +- Sample-rate conversion is explicit around NAM models whose expected rate + differs from the host. +- Fixed latency is reported to the host, with aligned dry paths during bypass + and crossfade transitions. +- Precision Drive and Distortion share the selected 2x/4x/8x nonlinear rate + island. It contributes one host-reported latency for every pedal power + combination; neither stage performs nested resampling. +- No timing result from one machine is marketed as a universal CPU claim. + +### Input routing and stereo NAM contract + +The DAW track route is the sole input-topology authority. A one-channel route +uses the mono NAM path. A route with two or more channels uses the stereo path +automatically when every loaded NAM slot has either two prepared 1x1 lanes or +a native 2x2 graph; if a loaded slot cannot support stereo, the Rack safely +falls back to mono. Empty slots do not prevent the remaining stereo effects +from processing a stereo track. + +The standard NAM capture used by the public ecosystem is normally a stateful +1-input/1-output processor. For stereo processing, its atomically published +owner contains two independently constructed and prepared `nam::DSP` graphs. +Left and right have separate model, +resampler, FIFO, dry-delay, calibration, fault, output-history, and NAM Slim +activation state. The callback evaluates the lanes sequentially with shared +preallocated scratch memory, but stages both results until the pair completes; +a runtime fault in either graph therefore publishes latency-matched dry for both +channels in that same callback, never one wet lane beside one dry lane. The Rack +never clocks one DSP object twice. A native 2x2 NAM model, if one is loaded, runs +once and does not receive a duplicate wrapper graph. Cabinet convolution +continues to process the resulting stereo lanes. + +Changing among routing modes uses an 8 ms fade-out, a muted 24 ms plus reported +latency state-prime interval, and a 12 ms fade-in. The graph mode changes only at +zero gain, and the envelope is before post effects so existing delay/reverb +tails remain continuous. This avoids exposing a cold or stale inactive lane and +does not allocate, lock, reset a graph, or perform I/O on the audio callback. + +Both 1x1 lanes are constructed off the callback. A failed replacement cannot +disturb an already active pair. On a first load, if only the optional right graph +cannot be constructed or prepared, the ready primary graph remains available +for mono routing. Parallel lanes add no second latency contribution, but stereo +processing is expected to approach twice the NAM inference cost. Mono routing +processes only the primary graph. + +There is no Rack-level Mono/Stereo preference. The retired `inputMode` key is +absent from the public schema and is ignored and pruned from legacy project, +preset, A/B, baseline, portable-state, and direct-setter paths. Physical input +selection and track channel width remain DAW responsibilities. Diagnostics +publish the automatic and effective mode so the UI can explain transitions and +pause the mono-only Doubler without introducing another user setting. Loading a +compatible model or changing the DAW track width activates the corresponding +route through the same muted handoff described above. + +### Meter topology contract + +The input meter measures the routed signal before Input Trim. A configured mono +source renders one full-width lane; a configured stereo source renders genuine +L/R lanes. This presentation follows `routedInputChannelCount`, not the +effective NAM graph, so a stereo route remains visibly stereo if a mono-only +capture forces an internal fallback. Returning to mono clears the hidden right +peak and hold, and the numeric level and clip indication use only visible lanes. + +The output meter always renders independent L/R peaks from the final Rack output +boundary. Linked input/output peak values remain compatibility fallbacks for an +older native build; the frontend never invents stereo values from a linked peak. + +Low-buffer timing results are machine/build-specific `diagnostic_only` +evidence, not proof of ASIO stability. Driver safety and subjective stereo +presentation still require testing on the target system and exact release build. + +### Cabinet Space presentation contract + +Cabinet Space is a fixed post-cab presentation stage, before the reorderable EQ, +modulation, Delay, and Reverb. It also runs for captures with an embedded cab; +placing it inside the external IR function would incorrectly skip those rigs. +Room accepts new input only from an engaged external Cab/IR or an audible, +engaged Amp/Full-Rig capture with an embedded cabinet. With an amp-only capture +and the external Cab off, or with both Amp and Cab off, Room may remain armed +and its existing history may drain over unity dry, but raw DI cannot enter a new +tail; the UI reports **No cab source**. + +Room Amount/Width feed a deterministic asymmetric 2x2 early-reflection field. +Doubler Mix/Spread and its 3-20 ms Delay (4.5 ms by default) add two independently +drifting short-delay voices around the selected time. Doubler generates stereo +only for a routed mono source; a true-stereo source pauses it with an explanation +without rewriting its saved enable, mix, delay, or spread. The close cab signal +remains an unattenuated centre anchor and the generated side is mixed as `+S/-S`, +so summing the output to mono cancels the added side rather than comb-filtering +the direct tone. + +The design follows the practical contracts exposed by current guitar products: +mono can become stereo at a component boundary, while true stereo input remains +stereo; a doubler uses millisecond-scale spread; and cabinet presentation is +separate from the late Delay/Reverb. It also follows the DAFx open-source +widener findings that low frequencies should remain more centred and that a +decorrelated path needs transient handling. Accordingly, two cascaded side +high-passes keep bass anchored, and a shared onset envelope ducks only the wet +Room/Doubler fields (up to about 3/6 dB respectively) while leaving the direct +pick attack untouched. + +The processor uses preallocated feed-forward early/Doubler paths plus a bounded, +damped four-line late-room network, with no runtime allocation, locks, logging, +or I/O. Its deterministic gates cover exact bypass, reset/partition equivalence, +mono-fold cancellation, mono-to-stereo generation, the 3.1 ms first reflection, +44.1/48/96 kHz operation, wet-only low-frequency side/mid balance, prefilled +automation, transient recovery, NaN/Inf recovery, bounded tail, and 8-sample +component timing. Wall-clock scheduler outliers remain diagnostic-only. +Perceived externalisation, naturalness, and similarity to a named product are +still `not_asserted` until a level-matched musician audition. + +Cabinet Space is controlled independently from the external Cab/IR switch. In +the compact chain, its own power control restores the last Room Amount and +Doubler Mix (or starts at 22% Room / 12% Doubler); switching it off writes both +amounts to zero. In Cab > Device Controls, Room Amount and Doubler Mix are the +individual enables: either may be zero while the other remains audible, and +Width/Spread shape only their corresponding active field. + +### Native pre-amp pedal level contract + +Precision Drive and Distortion use one current pre-release implementation. They +share a `+12 dBu` native-pedal operating reference before the Amp NAM stage. If +the interface/rack calibration reference is `R dBu`, the shared nonlinear island +receives `R - 12 dB` before the selected shared 2x/4x/8x processing and applies +the exact reciprocal gain afterward. This keeps the represented analog pedal +level stable when the interface reference changes and avoids applying the +conversion twice when both pedals are stacked. + +Precision Drive is a full-wet overdrive circuit, not an EQ-only boost. Attack +sets a frequency-selective feedback split: low frequencies retain the unity path +while upper lows and mids receive Drive-dependent gain into an asymmetric +nonlinear cell. Bright shapes the post-cell bandwidth, a DC blocker removes the +intentional asymmetry's offset, and Volume is an exact post-circuit gain. The +current default Volume is `+9 dB`, giving the pedal enough output to push a clean +Amp NAM; a saved explicit nonzero Volume remains the user's value. + +Precision Gate is a local, input-keyed control whose Off position is exact +unity. Its stereo-linked detector reads the untouched calibrated island input, +while its gain is applied after the complete Precision circuit and Volume but +before Distortion. Threshold, hold, detector release, and smooth closing follow +the selected amount; reopening is fast. The nonlinear circuit remains warm +during closure, and linking the envelope never mixes audio between channels. + +Distortion is a clean-room modern-heavy design informed by Empress's published +Heavy/Heavy Menace behavior, not a circuit clone. It distributes gain across +three zero-centred nonlinear cells with filtering between cells, then feeds a +stateful diode stage. `Weight` is a pre-distortion high-pass macro (`Tight` to +`Thick`), Tone controls interstage/presence voicing, and Heavy, Extreme, and +Crunch select distinct gain-density ranges. Mix crossfades the latency-aligned +clean stage input against the complete distorted branch. A fixed `-2.5 dB` +internal calibration keeps ordinary high-gain transients below the rack's +emergency knee; Level is applied exactly once after the complete topology. +`Dist Gate` is a dedicated stereo-linked idle-noise gate. Its detector reads +the untouched calibrated drive-island input before Precision Drive, while its +gain is applied after the complete Distortion circuit, Mix, and Level. This +input-keyed/post-distortion placement leaves the approved open tone unchanged +while suppressing small-signal noise buildup when the input drops below the +selected threshold. The current `0.22` default uses 6 dB hysteresis, a 35 ms +hold, a fast reopen, and a smooth close; `0` is the exact-unity bypass. The +nonlinear state remains warm during closure, and the linked envelope applies +the same gain to both channels without mixing audio between them. +The public design references are Empress's +[Heavy Menace overview](https://empresseffects.com/products/heavy-menace) and +[Heavy/Heavy Menace design history](https://empresseffects.com/blogs/empress-blog/the-heavy-menace-celebrating-10-years-of-heavy). + +The shared island uses one latency-aligned power transition instead of +multiplying nested pedal fades. Mid-transition reversals remain continuous, and +reaching exact bypass performs bounded fixed-state cleanup. The shared IIR +oversampler is drained incrementally with zero input across ordinary bypass +callbacks rather than performing a capacity-sized reset in one low-buffer +callback. The path has independent left/right state and performs no runtime +allocation, lock, I/O, nested resampling, or lookahead. + +The serialized `namEffectsDspVersion` field is an internal migration schema, +not a user preference or a supported legacy-engine selector. Because NAM Rack +has not shipped, every recognized old or missing marker is translated to the +one current implementation during binary, project, tone, and portable-state +restore. For pre-current presets only, the former default Precision Volume of +`0 dB` maps to the current `+9 dB` default; explicit nonzero controls and +model/IR resources are preserved. No old pedal DSP remains selectable or +runnable after restore. + +### Other pre-NAM pedal contracts + +The current Compressor exposes `Comp`, explicit `Attack` (0.1-50 ms), explicit +`Release` (50-1000 ms), a neutral-at-centre 500 Hz `Tone` tilt, an `Intensity` +switch, true parallel `Mix`, signed `Level` (-18 to +18 dB), and detector HPF +choices Off/80/240 Hz. +`Comp` moves the threshold from -6 to -44 dB and the knee from 12 to 2 dB; +`Intensity` selects an 8:1 or 16:1 ratio. Its calibrated gain-reduction meter is +shown on the pedal. The +range and interaction model deliberately cover the useful overlap documented +by Dyna Comp, Cali76, Empress Compressor MKII, and Keeley Compressor Plus, +without claiming to copy their proprietary OTA/FET circuits or synthesising +their noise. + +The Compressor first builds its complete parallel signal and then applies the +signed Level control to that complete stage: + +```text +stage = (1 - Mix) * dry + Mix * compressed +output = dBToGain(Output) * stage +``` + +The child compressor therefore has no hidden positive makeup contribution. +After Compressor bypass has drained its 25 ms transition, its detector, +RMS envelope, filters, and lookahead state are reset before the next engage. +The stable Level automation/state ID remains `compressorVolumeDb`. The retired +pre-release `Detail` macro is accepted only by migration: it is translated once +to its exact former effective attack/release times, removed, and never selects +another compressor implementation. + +The Rack Graphic EQ is nine bands at 65/125/250/500 Hz and 1/2/4/8/16 kHz, +with +/-12 dB per band. Its HPF provides exact **Off** plus logarithmic +20-500 Hz travel; its LPF provides logarithmic 3-20 kHz travel plus clockwise +**Off**. Mirrored 6% endpoint detents, double-click-to-Off, value formatting, +automation, MIDI learn, and state all use the same mapping. Each filter retains +its last active cutoff while Off. + +The processing order is HPF, nine bands, LPF, then the separate smoothed +/-12 dB +Level control. Both edge filters are stereo 12 dB/oct Butterworth responses with +smoothed coefficients and short Off/On transitions. The upper 16 kHz band is a +high shelf rather than a near-Nyquist bell. Flat/Off and whole-module bypass are +transparent, filter state remains warm while bypassed, and the minimum-phase +path adds no latency, saturation, hidden makeup, or modelled hiss. Migration +defaults the filters to Off and Level to 0 dB while preserving established band +IDs and private last-active cutoffs. + +The former dedicated Tape Echo pedal is retired in NAM effects DSP version 17. +Its six `tapeEcho*` parameters are removed from processing, automation, schema, +and UI state. Legacy values are pruned without being mapped onto the post-FX +Delay, so recalling an older tone cannot overwrite that Delay's saved settings. +The existing post-FX Delay remains available and retains its Tape mode. + +Gate topology is unchanged. The rack uses `Stereo Poly Octaver`: independent L/R +instances of the MIT Terrarium-derived ERB-PS2 topology, with fixed 6:1 +multirate processing, 80 complex bands at `Fs/6`, fast phase scaling, and +polyphase reconstruction. Six-sample scheduling state is retained across host +callbacks, so arbitrary partitions are sample-exact. The production callback +performs no allocation, locking, I/O, coefficient design, or dynamic growth. + +Deterministic fixtures cover exact silence/bypass, L-only isolation, identical +stereo parity, reset and fixed-versus-uneven callback partitions, NaN/Inf +recovery, 110/220/440/880 Hz target generation, at least 70 dB stop-band +rejection, and 44.1/48/96 kHz operation. All reset/partition/leak/parity errors +were exactly zero in the final Release run. The optimized isolated 48 kHz / +8-sample both-voice path measured p50 `2.9 us`, p99 `8.0 us`, and zero deadline +misses on the test machine. These are correctness and machine-specific timing +checks only: perceived chord tracking, pick transients, voicing, and +product-reference quality remain `not_asserted` until musician audition. + +### Reverb + +The active rack/instrument reverb is true stereo and offers four Voice choices: +`Studio`, `Plate`, `Hall`, and `Room`. The stable stored controls are Mix, +Pre-delay, Low cut, Decay, Tone, Shimmer, Pad, and Engage, but the hardware UI +relabels and remaps the tone/texture macros for each voice: + +- Studio: **DECAY**, **TONE**, and **AIR**; +- Plate: **DECAY**, **DAMP**, and **SHIMMER**; +- Hall: **DECAY**, **DAMP**, and **MOTION** (pitch shimmer is disabled); +- Room: **SIZE**, **TONE**, and **EARLY** (pitch shimmer is disabled). + +The stored Decay range is 0.2-12 seconds. Room treats that control as Size and +maps it to an effective room-decay range of roughly 0.45-3.2 seconds. Plate, +Hall, and Room shorten the low-band decay in Bass mode while leaving the user's +stored controls intact; Studio keeps its compatibility mapping. + +Pad is a default-off additive texture over the unchanged selected Reverb, not a +replacement voice or an amount macro. It is sourced from an already diffused +reverb projection rather than dry guitar, and it never changes Mix, Pre-delay, +Low cut, Decay, Tone, Shimmer, or the Voice-specific texture mapping. Its +source-following body and separately bounded upper breath layer avoid feeding +the noise-like carrier through the long tank, limiting dense-note buildup while +retaining a sparse airy tail. Pad remains armed if Reverb is bypassed, crossfades +without resetting the base tail, and drains after Off. + +The wet architecture has no dry latency, runtime allocation, lock, or +convolution. Non-finite/catastrophic recursive state clears only the reverb +history and mutes that wet block; the rack's final stereo-linked guard remains +the normal finite/level safety stage. Freeze, ducking, and former advanced +controls are not part of the active public schema. Recognized pre-release +markers are migration input only and normalize to the current reverb engine +during restore. + +### State and recovery contract + +- A rack preset represents the complete creative tone. +- Device calibration is playback-environment state and does not silently travel + as creative preset state. +- Project state stores the exact child-capture/model identity, stable model/IR + source identity, and the current rack parameters. +- Exported rack presets reference local NAM/IR files and do not embed the asset + binaries. Recall on another machine may therefore require Locate, Search in + Folder, or supported TONE3000 re-download. +- Factory effect templates contain no capture or IR and shape the currently + loaded Amp/Full-Rig plus native stages. +- Fresh capture selections and direct Capture Library loads request **Full** + model quality independently for the Pedal and Amp slots. Explicit saved + **Economy** selections and the legacy global Slim value restore exactly; a + snapshot with no quality field migrates to Full rather than inheriting the + destination rack's current setting. Legacy global quality is expanded into + per-slot values before preset import or Compare verification. +- Preview is transactional: Cancel restores the prior audible state; Use + publishes the chosen asset; failed or superseded requests cannot overwrite a + newer choice. +- Preset selection has one verified identity: none, factory ID, or user name. + Loading drains pending parameter persistence, applies the complete snapshot, + verifies native readback and model resources, then commits that identity. + Failure keeps the prior identity and the manager open; serialized Previous and + Next navigation always resolves from the last verified identity. +- Compare recall is transactional. It captures a complete authoritative rollback + before mutation, verifies parameters, model resources, DSP version, stage + order, and identity after recall, and verifies the rollback independently + before claiming the prior rack was restored after any false return, exception, + or readback mismatch. +- Current `.ospreset` storage is authoritative: a same-name legacy `.s13preset` + must never overwrite it. Valid user migrations write the current form + atomically, while corrupt legacy or user files remain untouched. Runtime + factory originals are immutable and use migrated AppData shadows instead. +- The immediate in-rack recovery card detects missing Amp/Cab assets and exposes + Locate, Replace, and Bypass. Project-open missing-media recovery additionally + covers Pedal NAM paths and can offer Search in Folder, a library copy, Locate, + and supported TONE3000 re-download when provider metadata exists. +- Full-rig captures bypass the external cabinet without discarding the user's + previous cabinet selection. + +## TONE3000 connection + +Production builds receive the TONE3000 publishable `client_id` through +`TONE3000_PUBLISHABLE_KEY`. It is a public OAuth identifier, not a secret. Never +embed a server/client secret. + +The native sign-in flow: + +1. Creates a PKCE verifier, challenge, and state value. +2. Opens the normal TONE3000 authorize page in the default browser. +3. Listens on `http://127.0.0.1:18762/tone3000/callback`. +4. Verifies the returned state and exchanges the code with the verifier. +5. Stores tokens in the operating-system credential store: Windows DPAPI, + macOS Keychain, or Linux Secret Service through `secret-tool`. +6. Restores a returning session and refreshes it before an authenticated action + when required. + +A first-time user can sign up in the same browser flow. The application should +never ask the user to copy an access token into a normal product screen. + +### Search and transient-cache contract + +Typed text is a draft until one remote request is committed after a 400 ms +debounce. Enter and the Search button flush that same request immediately without +leaving a second delayed request. Every request owns an immutable key containing +query, architecture, category/gear, source tab, sort, page size, and page; a +search-intent change invalidates the previous generation synchronously, so a +late success, error, or completion cannot alter the new rows or busy state. + +In-flight requests and bounded LRU results are shared across Explorer remounts +for the current application session. A fresh cached result renders immediately; +stale rows may remain visible during background refresh. Filters, committed +query, appended pages, and scroll position survive remounts in that session. +Remote catalog results are not persisted without explicit TONE3000 approval; +installed/local assets and user presets remain durable local data. + +Infinite browsing issues at most one request for each page/key, deduplicates by +stable ID, and provides an accessible Load More fallback. A failed append keeps +the accumulated rows and retries as an append; no speculative prefetch is used +under the service search-rate limit. + +The initial model URL must use HTTPS on an official `tone3000.com` host. +Bounded HTTPS redirects to CDN hosts are allowed, while bearer credentials are +sent only to trusted TONE3000 hosts. OpenStudio validates the response, installs +to a durable local path, and preserves source attribution. +OpenStudio does not bulk-download, proxy, or re-host the TONE3000 catalog. + +## TONE3000 partner approval gate + +Before a public release enables the connected catalog, obtain written TONE3000 +approval for the exact release candidate's endpoint scope, OAuth flow, +attribution, creator/license metadata, download behavior, and release wording. +The public build must remain usable with local NAM captures when the connected +service is unavailable or not configured. + +## Release status + +Objective DSP/state/download guards are automated. The remaining release +acceptance is intentionally external or human: + +- authenticated TONE3000 review and a fresh-account end-to-end run; +- a real A1/A2 capture and cabinet-IR download, restart, recovery, and + re-download; +- user audition of the exact build for tone, transition quality, low-buffer + crackle, pedal feel, modulation, delay, reverb, and shimmer; +- a real screen-reader pass over bitmap-backed controls; +- confirmation that the release bundles no third-party captures or IRs by + default; any future starter content requires separate license and + redistribution approval. + +See [NAM and audio QA](testing.md) for the executable checklist. diff --git a/docs/new_features.md b/docs/new_features.md deleted file mode 100644 index df9ee88..0000000 --- a/docs/new_features.md +++ /dev/null @@ -1,408 +0,0 @@ -# Studio13 New Features Implementation Plan - -> **Status:** Historical implementation plan. Several items in this document have since moved from "planned" to implemented or partial. For current public-facing support/feature claims, use `README.md`, `docs/implemented_features.md`, and the mounted UI/actions as the source of truth. - -## Current State Summary - -| Area | Status | Notes | -|------|--------|-------| -| JSFX Audio Processing | Done | YSFX fully integrated, S13FXProcessor wraps scripts as AudioProcessor | -| JSFX @gfx Rendering | Not Started | YSFX header has gfx APIs but never called | -| Lua Scripting (Automation) | Done | 50+ functions in ScriptEngine, transport/tracks/FX/automation/analysis | -| Lua Scripting (GUI) | Not Started | No drawing API, scripts output to console only | -| Theme System | Done | 5 presets + per-color overrides via ThemeEditor, CSS custom properties | -| VST3 Hosting | Done | Full scanning, loading, parameter control, editor windows | -| CLAP Hosting | Partial | CLAPPluginFormat class exists, scan paths configured, loading incomplete | -| LV2 Hosting | Prepared | Code paths exist, JUCE 8 has LV2 support, not compiled in | - ---- - -## Feature 1: Playhead Stop Behavior Setting - -**Priority**: High | **Effort**: Low | **Impact**: High (UX polish) - -Currently the playhead returns to the position where playback started when stopped. Many users (especially those coming from REAPER/Pro Tools) expect it to stop where it is. - -### Implementation Plan - -#### 1.1 Add workspace setting to Zustand store -**File**: `frontend/src/store/useDAWStore.ts` -- Add `playheadStopBehavior: 'return-to-start' | 'stop-in-place'` to store state -- Default: `'return-to-start'` (current behavior, no breaking change) -- Add `setPlayheadStopBehavior(mode)` action -- Persist in project settings / preferences - -#### 1.2 Modify stop action -**File**: `frontend/src/store/useDAWStore.ts` (stop/transport logic) -- In the `stop()` action, check `playheadStopBehavior`: - - `'return-to-start'`: current behavior (set currentTime back to where play started) - - `'stop-in-place'`: leave currentTime at current playhead position -- The C++ backend stop doesn't need changes — the position is a frontend concern - -#### 1.3 Add to Preferences modal -**File**: `frontend/src/components/PreferencesModal.tsx` -- Add toggle under "Editing" or "General" tab: - - Label: "Playhead behavior on stop" - - Options: "Return to start position" / "Stop at current position" - -#### 1.4 Add keyboard shortcut variant -- Consider: pressing Stop once = stop-in-place, pressing Stop twice = return to start - (this is the REAPER convention and feels natural for both workflows) - ---- - -## Feature 2: JSFX @gfx Rendering Support - -**Priority**: Medium | **Effort**: High | **Impact**: High (unlocks community JSFX plugin UIs) - -YSFX already exposes the full @gfx API (`ysfx_gfx_setup`, `ysfx_gfx_run`, `ysfx_gfx_update_mouse`, `ysfx_gfx_add_key`). We just need to render the framebuffer and route input. - -### Architecture Decision - -**Option A**: Render in JUCE native window (like VST3 editors) using `juce::Image` as framebuffer -- Pros: Same window management as VST3, no WebView overhead, direct pixel access -- Cons: Separate native window, not in WebView - -**Option B**: Render in WebView via base64 frame streaming or OffscreenCanvas -- Pros: Integrated in FXChainPanel UI -- Cons: Frame streaming overhead, latency, complex bridge - -**Recommendation**: Option A — native JUCE window, matching existing PluginWindowManager pattern - -### Implementation Plan - -#### 2.1 Create S13FXGfxEditor (JUCE AudioProcessorEditor for JSFX @gfx) -**New file**: `Source/S13FXGfxEditor.h` / `.cpp` - -``` -class S13FXGfxEditor : public juce::AudioProcessorEditor, public juce::Timer -``` - -- Holds a `juce::Image` framebuffer (ARGB, sized to gfx_w x gfx_h) -- On `timerCallback()` (~30fps): - 1. Lock the YSFX effect - 2. Call `ysfx_gfx_setup(effect, &gfxConfig)` with framebuffer pointer, width, height - 3. Call `ysfx_gfx_run(effect)` to execute the @gfx section - 4. Unlock, `repaint()` -- On `paint()`: draw the `juce::Image` to screen -- On `mouseDown/mouseDrag/mouseUp/mouseMove`: call `ysfx_gfx_update_mouse(effect, x, y, buttons)` -- On `keyPressed`: call `ysfx_gfx_add_key(effect, keyCode, modifiers, isPressed)` -- Support `ysfx_gfx_wants_retina()` for HiDPI - -#### 2.2 Configure ysfx_gfx_config_t -**Reference**: `build/_deps/ysfx-src/include/ysfx.h` - -The `ysfx_gfx_config_t` struct needs: -- `pixel_width`, `pixel_height` — framebuffer dimensions -- `pixel_stride` — bytes per row -- `pixels` — pointer to ARGB pixel data (from juce::Image::BitmapData) -- `scale_factor` — for HiDPI (1.0 or 2.0) -- `show_menu` callback — for JSFX scripts that call `gfx_showmenu()` -- `set_cursor` callback — to change mouse cursor - -#### 2.3 Update S13FXProcessor to support editor -**File**: `Source/S13FXProcessor.h` / `.cpp` - -- Change `hasEditor()` to return `true` when the loaded script has a @gfx section - - Use `ysfx_has_section(effect, ysfx_section_gfx)` to detect -- `createEditor()` returns `new S13FXGfxEditor(*this)` when @gfx exists -- Add `ysfx_t* getEffect()` accessor for the editor to call gfx APIs -- Add mutex for gfx thread safety (gfx runs on message thread, audio on audio thread) - -#### 2.4 Wire into PluginWindowManager -**File**: `Source/PluginWindowManager.cpp` - -No changes needed — PluginWindowManager already opens editors via `processor->createEditor()`. Once S13FXProcessor returns an editor, the existing window management works automatically. - -#### 2.5 Handle JSFX image loading (gfx_loadimg) -- YSFX's `gfx_loadimg` loads PNGs from the script's directory -- Need to ensure `ysfx_config_set_data_root()` points to the script's parent directory -- Already set in S13FXProcessor::loadScript — verify it includes the effects directory - -#### 2.6 Testing -- Test with community JSFX plugins that use @gfx: - - ReaEQ (REAPER's built-in EQ with spectrum display) - - Geraint Luff's jsfx-ui-lib examples (knobs, graphs) - - JS: Liteon/analyser (spectrum analyzer) - - Any JSFX with `@gfx` section from the ReaTeam JSFX repository - -### Dependencies -- None (YSFX already compiled and linked) - -### Estimated Sub-tasks -1. Implement S13FXGfxEditor with framebuffer rendering — 1 session -2. Wire mouse/keyboard input routing — 0.5 session -3. Handle gfx_loadimg, show_menu, set_cursor callbacks — 0.5 session -4. Test with 5+ community JSFX scripts — 1 session - ---- - -## Feature 3: Lua Scripting GUI API - -**Priority**: Medium | **Effort**: Medium | **Impact**: Medium (power users can create custom tools) - -Expose a drawing/widget API to Lua scripts so they can create custom tool windows (similar to REAPER's ReaScript gfx.* or ReaImGui). - -### Architecture Decision - -**Option A**: Immediate-mode drawing API (like REAPER's gfx.*) -- `s13.gfx.init("Window Title", 400, 300)` -- `s13.gfx.rect(x, y, w, h)`, `s13.gfx.line(...)`, `s13.gfx.drawstr(...)` -- `s13.gfx.mouse_x`, `s13.gfx.mouse_y`, `s13.gfx.mouse_cap` -- Runs in a loop via `s13.defer(callback)` pattern -- Pros: REAPER-compatible API surface, simple for script authors -- Cons: Need native window + framebuffer per script, C++ rendering - -**Option B**: WebView-based widget API (React components generated from Lua) -- Scripts describe UI declaratively, rendered in a docked WebView panel -- Pros: Rich UI, uses existing React infrastructure, beautiful by default -- Cons: Complex bridge, not REAPER-compatible, higher latency - -**Option C**: ImGui-style API via native window -- `s13.ui.begin("Window")`, `s13.ui.button("Click me")`, `s13.ui.slider("Volume", 0, 1)` -- Backed by JUCE components in a native window -- Pros: Fast, native feel, widget-level API (simpler than pixel drawing) -- Cons: No REAPER compatibility, need widget rendering engine - -**Recommendation**: Option A first (REAPER compatibility), Option C later for convenience widgets - -### Implementation Plan - -#### 3.1 Create S13ScriptWindow (JUCE component for script GUIs) -**New file**: `Source/S13ScriptWindow.h` / `.cpp` - -- `juce::DocumentWindow` subclass with embedded `juce::Component` -- Holds a `juce::Image` framebuffer -- 30fps timer for redraw -- Mouse/keyboard event capture and storage in shared state -- Script reads mouse_x/mouse_y/mouse_cap from Lua globals - -#### 3.2 Add gfx.* API to ScriptEngine -**File**: `Source/ScriptEngine.cpp` - -Register these Lua functions: -``` -s13.gfx.init(title, width, height [, dock]) -- open/resize window -s13.gfx.close() -- close window -s13.gfx.set(r, g, b [, a]) -- set color (0-1) -s13.gfx.rect(x, y, w, h [, filled]) -- rectangle -s13.gfx.line(x1, y1, x2, y2 [, aa]) -- line -s13.gfx.circle(x, y, r [, fill, aa]) -- circle -s13.gfx.arc(x, y, r, ang1, ang2 [, aa]) -- arc -s13.gfx.roundrect(x, y, w, h, radius) -- rounded rect -s13.gfx.drawstr(text [, flags, right, bottom]) -- text -s13.gfx.setfont(size [, face, flags]) -- font -s13.gfx.measurestr(text) -> w, h -- text metrics -s13.gfx.blit(img, scale, rotation, ...) -- image blit -s13.gfx.loadimg(idx, filename) -- load PNG -s13.gfx.getchar() -> keycode -- keyboard input -``` - -Expose as globals (matching REAPER convention): -``` -gfx.x, gfx.y -- current draw position -gfx.w, gfx.h -- window size -gfx.mouse_x, gfx.mouse_y -- mouse position -gfx.mouse_cap -- mouse buttons bitmask (1=L, 2=R, 4=Ctrl, 8=Shift, 16=Alt) -gfx.mouse_wheel -- scroll delta -``` - -#### 3.3 Add s13.defer() for script main loops -**File**: `Source/ScriptEngine.cpp` - -- `s13.defer(callback)` — schedule a Lua function to run on next message loop cycle -- This is the pattern REAPER uses for scripts that need continuous updates -- ScriptEngine maintains a deferred callback queue, processes on a timer - -#### 3.4 Script window management -**File**: `Source/ScriptEngine.cpp` / `MainComponent.cpp` - -- Track open script windows in ScriptEngine -- Close all script windows when script terminates -- Support docking (stretch goal — requires WebView panel integration) - -#### 3.5 Frontend integration -**File**: `frontend/src/components/` (new ScriptRunner panel) - -- Add "Run Script" UI in menu/toolbar -- Script console panel showing print() output -- List of running scripts with stop buttons - -### REAPER API Compatibility Target -The goal is that simple ReaScripts using `gfx.*` functions work with minimal modifications: -- Change `reaper.defer(fn)` to `s13.defer(fn)` -- Change `reaper.GetCursorPosition()` to `s13.getPlayhead()` -- Most `gfx.*` calls should work as-is - -### Estimated Sub-tasks -1. S13ScriptWindow with framebuffer — 1 session -2. Core gfx.* drawing functions (rect, line, circle, text) — 1 session -3. Mouse/keyboard input routing — 0.5 session -4. s13.defer() and script lifecycle — 0.5 session -5. Image loading (gfx.loadimg/blit) — 0.5 session -6. Testing with adapted REAPER scripts — 1 session - ---- - -## Feature 4: Community Compatibility (Themes, Scripts, Extensions) - -**Priority**: Medium | **Effort**: Medium-High | **Impact**: High (ecosystem leverage) - -### 4.1 REAPER Theme Color Import -**Effort**: Low - -REAPER `.ReaperTheme` files are INI-format with 400+ named color entries. We can import the key colors into our CSS custom property system. - -**Plan**: -- Add "Import REAPER Theme" button in ThemeEditor -- Parse the `.ReaperTheme` INI file -- Map REAPER color keys to Studio13 `daw-*` tokens: - - `col_main_bg` -> `--color-daw-dark` - - `col_main_bg2` -> `--color-daw-panel` - - `col_main_text` -> `--color-daw-text` - - `col_tcp_text` -> `--color-daw-text` - - `col_seltrack` -> `--color-daw-selection` - - `col_cursor` -> `--color-daw-accent` - - etc. (partial mapping, best effort) -- Apply as custom theme overrides -- **File**: `frontend/src/components/ThemeEditor.tsx` + new `reaperThemeParser.ts` utility - -### 4.2 REAPER JSFX Compatibility -**Effort**: Already mostly done (audio), high for @gfx - -The YSFX runtime IS REAPER's JSFX engine (same codebase by jpcima). Audio processing is 100% compatible. What's needed: -- Feature 2 above (@gfx rendering) — makes visual JSFX plugins work -- Ensure `@import` and library includes work (YSFX handles this via data_root) -- Test with ReaTeam JSFX repository scripts (largest JSFX collection) - -### 4.3 ReaPack-style Script Distribution (Stretch) -**Effort**: Medium - -ReaPack is REAPER's package manager for scripts/JSFX/themes. Full compatibility is unrealistic, but we can support the same repository format for JSFX/Lua scripts. - -**Plan**: -- Parse ReaPack `.xml` repository index files -- Download and install JSFX scripts to user effects directory -- Download and install Lua scripts to user scripts directory -- Simple browser UI: search, categories, install/update/remove -- **NOT** full ReaPack compatibility (no extensions, no theme installation, no auto-update daemon) -- Focus on the two largest repos: ReaTeam JSFX and ReaTeam Scripts - -### 4.4 CLAP Plugin Hosting (Complete) -**Effort**: Medium - -CLAPPluginFormat already exists. Finish it: -- Complete `createPluginInstance()` implementation -- Parameter mapping (CLAP params -> JUCE AudioProcessorParameter) -- Editor window support (CLAP GUI API) -- State save/restore (CLAP state API) -- Test with popular CLAP plugins (Surge XT, Vital, Dexed CLAP builds) - -### 4.5 LV2 Plugin Hosting (Enable) -**Effort**: Low - -JUCE 8.0.0 has LV2 hosting support. Just needs: -- Add `JUCE_PLUGINHOST_LV2=1` to `target_compile_definitions` in CMakeLists.txt -- Verify scan paths in PluginManager -- Test with a few LV2 plugins -- Handle LV2-specific quirks (turtle files, presets) - -### 4.6 Theme Export Format -**Effort**: Low - -Allow users to export/import Studio13 themes as JSON files: -```json -{ - "name": "My Custom Theme", - "author": "Username", - "version": "1.0", - "colors": { - "daw-dark": "#121212", - "daw-panel": "#1a1a1a", - ... - } -} -``` -- Share via file or paste -- Could host a simple theme gallery on the website - ---- - -## Feature 5: User Theme API (CSS Variables) - -**Priority**: Low | **Effort**: Low | **Impact**: Low (already mostly done) - -The theme system is already user-editable. Small additions: - -### 5.1 Theme file import/export -- Export current theme as `.s13theme` JSON -- Import from file picker -- **File**: `frontend/src/components/ThemeEditor.tsx` - -### 5.2 Additional CSS tokens -Expose more granular tokens for power users: -- `--color-daw-clip-audio` (audio clip background) -- `--color-daw-clip-midi` (MIDI clip background) -- `--color-daw-waveform` (waveform color) -- `--color-daw-grid-line` (timeline grid) -- `--color-daw-playhead` (playhead cursor) -- `--font-daw-primary` (main font family) -- `--font-daw-mono` (monospace font for values) - -### 5.3 Live CSS injection for advanced users -- Allow pasting custom CSS in preferences (textarea) -- Applied as `<style>` tag in head -- For power users who want pixel-perfect control beyond color tokens - ---- - -## Feature 6: C++ Extension API (Future / Low Priority) - -**Priority**: Low | **Effort**: Very High | **Impact**: Low (niche audience) - -This would allow C++ developers to write native extensions (like SWS for REAPER). NOT recommended for near-term roadmap. - -### If implemented: -- Define stable C API (not C++) for extensions to call -- Extension DLLs loaded at startup from `Documents/Studio13/Extensions/` -- API surface: register actions, add menu items, access track/clip data, process audio -- Would need versioned ABI, documentation, example project -- Consider: is this worth it when Lua + JSFX already cover most use cases? - -### Recommendation -Skip this for now. Invest in Lua + JSFX extensibility instead. Revisit when user demand exists. - ---- - -## Implementation Priority Order - -| Phase | Feature | Sessions Est. | -|-------|---------|---------------| -| **Phase 1** | 1. Playhead stop behavior setting | 0.5 | -| **Phase 2** | 2. JSFX @gfx rendering | 3 | -| **Phase 3** | 4.4 Complete CLAP hosting | 2 | -| **Phase 3** | 4.5 Enable LV2 hosting | 0.5 | -| **Phase 4** | 3. Lua scripting GUI API | 4 | -| **Phase 4** | 4.1 REAPER theme import | 1 | -| **Phase 5** | 4.3 ReaPack browser (stretch) | 3 | -| **Phase 5** | 4.6 Theme export/share | 0.5 | -| **Phase 5** | 5. Additional CSS tokens | 0.5 | -| **Future** | 6. C++ Extension API | 10+ | - -Total estimated: ~15 sessions for Phase 1-5, with Phase 1-3 being the highest impact. - ---- - -## Key Files Reference - -| Component | Files | -|-----------|-------| -| YSFX/JSFX runtime | `Source/S13FXProcessor.{h,cpp}`, `build/_deps/ysfx-src/include/ysfx.h` | -| Lua scripting | `Source/ScriptEngine.{h,cpp}` | -| Plugin hosting | `Source/PluginManager.{h,cpp}`, `Source/CLAPPluginFormat.h` | -| Plugin windows | `Source/PluginWindowManager.{h,cpp}` | -| Theme system | `frontend/src/components/ThemeEditor.tsx`, `frontend/src/index.css` | -| Theme store | `frontend/src/store/useDAWStore.ts` (THEME_PRESETS ~line 9871) | -| Transport | `frontend/src/store/useDAWStore.ts` (stop/play actions) | -| Preferences | `frontend/src/components/PreferencesModal.tsx` | -| Native bridge | `frontend/src/services/NativeBridge.ts`, `Source/MainComponent.cpp` | diff --git a/docs/openstudio-website-launch-plan.md b/docs/openstudio-website-launch-plan.md deleted file mode 100644 index 97bc796..0000000 --- a/docs/openstudio-website-launch-plan.md +++ /dev/null @@ -1,704 +0,0 @@ -# OpenStudio Website, Rebrand, and Production Plan - -This document turns the current repo state into a practical launch plan for the OpenStudio website, download flow, rebrand, and production release. - -## 1. Repo Audit Summary - -Based on the current codebase: - -- The app is a desktop DAW with a JUCE C++ backend and a React/TypeScript frontend embedded in a native window. -- The current release flow is still Windows-first. `docs/USER_MANUAL.md` explicitly describes a Windows-native app distributed as a single `Studio13.exe`. -- `build.py` only builds and launches the Windows executable path. -- `CMakeLists.txt` has Apple/Linux compile guards, but `Source/MainComponent.cpp` still hardcodes the WebView2 backend, so macOS/Linux are not production-ready yet. -- There is no real auto-update system in the repo right now. -- Branding is still deeply embedded across product name, executable name, docs, code symbols, file extensions, localStorage keys, scripts, and the SVG wordmark. -- There is a launch blocker around licensing consistency: - - `LICENSE` is AGPLv3. - - `THIRD_PARTY_LICENSES.md` says the project is released under AGPLv3-compatible terms. - - `README.md` still says “Studio13 is proprietary software. All rights reserved.” - -### Branding Surface Area - -Current branding footprint is large even after excluding `node_modules`, generated files, the build folder, and bundled Python: - -- `Studio13`-style product naming: about 200 matches across 42 files -- `S13`-style short prefix and file-format branding: about 146 matches across 29 files - -This is a real migration project, not a single search-and-replace. - -## 2. Website Strategy - -## Goal - -The website should do four jobs: - -1. Explain what OpenStudio is in one screen. -2. Show real screenshots and credible workflow value. -3. Convert visitors into downloads without overpromising unsupported platforms. -4. Make the rebrand feel deliberate and professional. - -## Recommended Positioning - -Use this product framing: - -> OpenStudio is a modern desktop DAW with a native JUCE audio engine and a fast React interface, built for recording, editing, pitch work, mixing, and export without Electron overhead. - -That keeps the core differentiator intact: - -- native desktop audio engine -- modern UI stack -- strong pitch workflow -- plugin hosting -- audio + MIDI + export in one app - -## Recommended Visual Direction - -Do not build a generic SaaS landing page. - -Use a visual language closer to “audio workstation meets technical instrument”: - -- Background: deep ink/navy with layered gradients, subtle gridlines, and spectrogram/waveform textures -- Core colors: - - `#08111b` background - - `#102033` panels - - `#39a0d8` primary brand blue - - `#0cfaf7` highlight cyan - - `#ff9d4d` warm accent for CTA emphasis -- Typography: - - Headlines: `Space Grotesk` or `Sora` - - UI/body: `Manrope` or `IBM Plex Sans` - - Technical labels: `IBM Plex Mono` -- Motion: - - slow waveform reveals - - horizontal screenshot parallax - - meters/spectra that animate once on load, not constantly - -## Recommended Information Architecture - -### Homepage - -1. Hero -2. Proof bar -3. Screenshot-led feature stories -4. Workflow section -5. Plugin and pitch section -6. Download/compatibility section -7. FAQ -8. Roadmap / “coming next” - -### Download Page - -1. Platform cards -2. Install instructions -3. System requirements -4. Checksums / version history -5. Auto-update policy -6. Known limitations - -### Docs / Learn - -1. Getting started -2. Recording -3. MIDI editing -4. Pitch correction -5. Plugin hosting -6. Scripting -7. Export - -## 3. Homepage Wireframe - -## Hero - -Suggested headline: - -> OpenStudio is a native DAW for recording, editing, pitch work, and mixing. - -Suggested subheadline: - -> Built on a JUCE C++ audio engine with a modern React interface, OpenStudio gives you fast editing, deep pitch tools, plugin hosting, and streamlined export in a desktop app that feels immediate. - -Suggested CTAs: - -- `Download for Windows` -- `See Features` -- `Join macOS/Linux waitlist` if those builds are not ready yet - -Hero supporting points: - -- Native audio engine -- Audio + MIDI workflow -- Pitch editing and correction -- VST3 hosting -- Offline export - -## Proof Bar - -Use a short strip directly under the hero: - -- Native desktop app -- JUCE audio engine -- React UI -- Pitch tools -- Multitrack audio + MIDI -- Export to WAV / AIFF / FLAC - -## Feature Story Blocks - -Build these as alternating text + screenshot sections. - -### 1. Record and Arrange - -- Show the main arrange/timeline view -- Copy theme: - - Record audio, arrange clips, split takes, trim edges, work with waveforms, and keep momentum with fast keyboard-driven editing. - -### 2. MIDI and Composition - -- Show piano roll and MIDI track view -- Copy theme: - - Create MIDI tracks, edit notes in the piano roll, use the virtual keyboard, and keep timing tight with snap and quantize tools. - -### 3. Pitch Workflow - -- Show pitch editor / pitch corrector UI -- Copy theme: - - Analyze vocal or melodic material, adjust notes visually, refine formants and transitions, or use real-time pitch correction inside the FX workflow. - -### 4. Mix and Finish - -- Show mixer + FX chain + render/export -- Copy theme: - - Shape the mix with channel strips, automation, plugin chains, built-in effects, and export-ready rendering options. - -## Workflow Section - -Three cards: - -- Record -- Edit -- Release - -Each card should show 3-4 concrete capabilities instead of generic claims. - -## Download Section - -Use honest platform states: - -- Windows: available first -- macOS: planned / experimental until verified -- Linux: planned / experimental until verified - -Do not label all three as “available now” unless CI, packaging, and QA are actually ready. - -## 4. Feature List for Website Copy - -Below is the recommended product copy set based on what exists in the repo today. This is split into: - -- features safe to market once verified in QA -- features that should be labeled beta, experimental, or “coming soon” until validated - -## A. Safe to Market First - -These are strong candidates for the main website once we confirm them in a release checklist. - -### Native multitrack recording and playback - -- What it does: lets users record and play back multiple tracks with a native desktop audio engine -- How to use it: create tracks, arm recording, choose inputs, and record directly into the timeline -- Why it matters: this is the core DAW workflow and should anchor the homepage - -### Audio timeline editing - -- What it does: arrange clips, trim, split, move, loop, zoom, and work directly with waveforms -- How to use it: import audio, drag clips on the timeline, use snap/grid controls, and split at the playhead -- Why it matters: this is one of the clearest screenshot-friendly workflows - -### MIDI tracks, piano roll, and virtual keyboard - -- What it does: supports MIDI input, clip editing, note editing, and on-screen keyboard input -- How to use it: create a MIDI track, open the piano roll, draw or edit notes, and use quantize when needed -- Why it matters: shows the app is not audio-only - -### Mixer, channel strips, and metering - -- What it does: gives track-level balance control with faders, pan, mute/solo, and meters -- How to use it: open the mixer or track controls, set levels, pan positions, and monitor signal activity in real time -- Why it matters: important for credibility with DAW users - -### Built-in effects and FX chains - -- What it does: supports per-track input FX, track FX, and master FX, plus built-in processors -- How to use it: open the FX chain, add built-in effects or plugins, then reorder or bypass processors -- Why it matters: this gives clear “record, process, mix” messaging - -### Pitch editing and correction - -- What it does: offers graphical pitch editing plus a real-time pitch corrector workflow -- How to use it: analyze a clip, open the pitch editor, move notes or use correction controls for faster cleanup -- Why it matters: this is one of the product’s strongest differentiators - -### Automation lanes - -- What it does: lets users automate volume, pan, and parameter changes over time -- How to use it: show automation on a track, add control points, then shape the curve during playback or editing -- Why it matters: a serious DAW needs visible automation support - -### Render and export - -- What it does: exports finished work to common audio formats like WAV, AIFF, and FLAC -- How to use it: open the render/export flow, pick format and depth, then render the project or target range -- Why it matters: this completes the “from recording to export” story - -### Lua scripting and workflow automation - -- What it does: exposes scripting hooks for transport, tracks, FX, and automation workflows -- How to use it: open the script editor, write or run scripts, and automate repetitive tasks -- Why it matters: strong USP for advanced users, but should sit lower on the homepage - -## B. Market Only After Verification - -These are interesting differentiators, but they should be validated before they appear prominently on the website. - -### ARA plugin hosting - -- Good USP if stable -- Needs explicit regression testing before public marketing - -### Stem separation - -- Strong headline feature -- Needs packaging validation because it depends on Python/model/runtime setup - -### DDP export - -- Valuable for mastering users -- Needs end-to-end QA before public claims - -### Theme import/export - -- Nice differentiator -- Should be verified so we do not oversell customization depth - -### Command palette, screensets, batch conversion, cleanup tools - -- Great supporting features -- Better for a features page than the hero - -### Video sync and surround workflows - -- Present in code paths and UI state -- Should not be advertised until tested and production-ready - -### CLAP / LV2 support - -- Present in the codebase -- Treat as beta/experimental until scan/load/editor behavior is verified - -## 5. Screenshot Plan - -The current `Design screenshots/` folder is not enough for marketing. Most of those images are menu captures, not hero-grade product screenshots. - -### Capture These Fresh - -1. Main timeline with multiple tracks and waveforms -2. Mixer with active meters -3. Piano roll with notes and velocity lane -4. Pitch editor with visible note blobs/curves -5. FX chain + plugin browser -6. Render/export dialog -7. Theme editor or scripting view for the “power users” section - -### Existing Assets Worth Reusing - -- `design.png` -- `logo_preview.png` -- `icon_preview.png` -- `Design screenshots/midi track and clip.png` -- `Design screenshots/render-export.png` - -## 6. Download and Installer Strategy - -## Current State - -Right now the project is closest to this distribution model: - -- Windows executable build output -- copied runtime assets beside the executable -- no formal installer -- no update channel - -That matches the current manual as well. - -## What To Ship First - -Recommendation: - -1. Ship Windows first -2. Add a real installer -3. Add signed release artifacts and checksums -4. Add updater support after installer packaging is stable -5. Bring macOS next -6. Bring Linux after macOS if bandwidth is limited - -## Windows - -### Current Build Output - -Current production build command: - -- `python build.py prod` - -Current output path: - -- `build/Studio13_v2_artefacts/Release/Studio13.exe` - -### What the Windows Installer Must Include - -- main executable -- WebView2 requirement handling -- `ffmpeg.exe` -- `effects/` -- `scripts/` -- `models/` -- bundled Python/runtime if stem separation depends on it -- app icon, version metadata, uninstaller - -### Recommended Installer Approach - -Use one of these: - -- Fastest path: Inno Setup -- More enterprise-heavy path: WiX -- Microsoft-store-style path: MSIX - -Recommendation: start with Inno Setup because it is the shortest path to a professional Windows installer. - -## macOS - -### Feasibility - -Possible in theory from the CMake guards, but not ready to promise publicly yet. - -Current blocker: - -- `Source/MainComponent.cpp` hardcodes the WebView2 backend instead of selecting the browser backend per platform - -### What Must Happen Before macOS Download Exists - -- fix platform-specific webview backend selection -- build on macOS hardware/CI -- package app resources inside the `.app` bundle -- sign with Apple Developer ID -- notarize -- package as `.dmg` - -### What the macOS Bundle Must Include - -- `.app` bundle -- resources inside `Contents/Resources` -- models/effects/scripts -- ffmpeg binary -- any Python/runtime dependencies if required - -## Linux - -### Feasibility - -Possible later, but currently not production-ready. - -### Minimum Viable Linux Release - -- tarball or AppImage first -- `.deb` later if needed - -### Linux Requirements To Solve - -- webview backend validation -- ALSA/JACK/WebKitGTK dependency strategy -- asset bundling -- plugin scanning differences -- distro testing - -Recommendation: if Linux happens, AppImage is the cleanest first public artifact. - -## 7. Auto-Update Support - -## Current State - -There is no updater implementation in the repo right now. - -No evidence found for: - -- WinSparkle -- Sparkle -- Squirrel -- appcast/update feeds -- update signatures -- check-for-updates UI -- background patching - -## Recommendation - -### Windows - -- Use WinSparkle if you want native desktop-style update checks -- Publish signed installers plus an appcast feed - -### macOS - -- Use Sparkle -- Pair with code signing + notarization from day one - -### Linux - -- Avoid promising true in-app auto-update at first -- Prefer package-manager updates or AppImageUpdate only if you commit to AppImage - -## Important Timing Note - -Do the OpenStudio rename before shipping the first public auto-update channel. - -If you launch updates under `Studio13` and then rename immediately after, you create avoidable migration complexity for: - -- appcast/feed URLs -- code signing identity -- install directories -- update channels -- support docs - -## 8. Rebrand Plan: Studio13 -> OpenStudio - -## Critical Warning: Do Not Blindly Replace `S13` With `OS` - -This needs one explicit naming decision before implementation. - -### Why `OS` Is Dangerous Technically - -- In Lua, `os` is already a standard library namespace. -- A project extension like `.os` is too generic and confusing. -- `OS` also reads as “operating system” in code, docs, and support discussions. - -### Recommended Rule - -- Customer-facing short label: `OS` is okay in visual marketing copy only -- Technical/product identifiers: use `OpenStudio` or `openstudio`, not raw `OS` - -## Recommended Naming Map - -- Product name: `Studio13` -> `OpenStudio` -- App target / executable: `Studio13_v2` / `Studio13.exe` -> `OpenStudio` -- Internal class prefix: - - `S13PitchCorrector` -> `OpenStudioPitchCorrector` - - `S13FXProcessor` -> `OpenStudioFXProcessor` - - `S13FXGfxEditor` -> `OpenStudioFXGfxEditor` - - `S13ScriptWindow` -> `OpenStudioScriptWindow` -- Scripting namespace: - - do not use `os.*` - - use `openstudio.*` or `ostudio.*` - - keep `s13.*` as a deprecated compatibility alias for one transition period - -## File Extension Recommendations - -Avoid `.os`. - -Recommended safer replacements: - -- project file: `.s13` -> `.ostudio` or `.osproj` -- peak cache: `.s13peaks` -> `.ostudiopeaks` -- theme file: `.s13theme` -> `.ostheme` -- preset file: `.s13preset` -> `.ospreset` - -My recommendation: - -- `.ostudio` for projects -- `.ostheme` for themes -- `.ospreset` for presets -- `.ostudiopeaks` for cache files - -## Branding Surfaces To Rename - -### Product and build identity - -- CMake project and target names -- `PRODUCT_NAME` -- executable name -- macOS bundle name -- installer product name -- package.json name where user-visible -- manifest names and metadata - -### UI and docs - -- README -- manual -- API docs -- About dialogs -- onboarding text -- plugin browser author strings -- keyboard shortcut modal -- window titles -- support links - -### File formats and runtime keys - -- project extension -- theme/preset/cache extensions -- localStorage keys -- saved templates keys -- screenshots/workflow exports -- app data folder paths -- documents paths -- debug log file paths - -### Code symbols and filenames - -- `S13*` classes/files -- `s13_` localStorage keys and constants -- `Studio13Application` -- `Studio13_Debug.log` - -### Plugin and scripting branding - -- built-in FX names -- “S13FX” category naming -- scripting APIs -- script templates/comments - -## Logo Work - -The current `frontend/public/logo.svg` is not simple text. The wordmark is made from vector paths. - -That means the clean path is: - -1. re-export the logo from the original design source if available, or -2. replace the lower wordmark area with a new `OpenStudio` vector wordmark - -Do not treat it like an editable text layer unless you have the original source file. - -## Backward Compatibility Plan - -To avoid breaking existing users/projects: - -- continue reading old `.s13` project files for at least one full transition cycle -- continue reading old theme/preset/cache formats where practical -- support old `s13.*` Lua aliases temporarily if scripts already exist -- migrate old app data paths to new `OpenStudio` paths on first launch - -## 9. Production TODO List - -## Phase 0: Decisions - -- Decide final project file extension -- Decide whether scripting namespace becomes `openstudio.*` or stays `s13.*` with aliasing -- Decide license position: AGPL/commercial/proprietary must be made consistent -- Decide first public platform: recommended `Windows first` -- Decide whether CLAP/LV2/video/DDP are launch features or post-launch features - -## Phase 1: Rebrand Foundations - -- Rename product name in build system, manifests, app metadata, and docs -- Replace the SVG wordmark with `OpenStudio` -- Rename app data folders and document paths -- Rename visible FX labels from `S13` to `OpenStudio` or `OS FX` -- Rename file formats with backward-compatible import support -- Rename localStorage keys with migration logic -- Add compatibility shims for old script/file naming where needed - -## Phase 2: Product Hardening - -- Create a release checklist for audio recording, playback, save/load, render, plugin scan/load, pitch edit, MIDI edit, and export -- Validate all “hero” website features manually -- Mark unstable features as beta or hide them -- Test large projects, missing media handling, and plugin crash scenarios -- Test sample rate changes and audio device switching -- Add crash logging and cleaner error reporting -- Add safe mode / recovery mode for plugin-related startup issues if not fully ready yet - -## Phase 3: Packaging and Distribution - -- Build a proper Windows installer -- Add version metadata and signed binaries -- Add release artifact checksums -- Bundle all required runtime assets consistently -- Verify clean install and uninstall on a new machine -- Define where logs, user data, scripts, models, and themes live after install - -## Phase 4: Cross-Platform Readiness - -- Remove hardcoded WebView2 backend usage from shared code -- validate browser backend selection per platform -- stand up macOS build pipeline -- stand up Linux build pipeline -- test plugin hosting and file dialogs on each platform -- package runtime assets correctly for `.app` and AppImage/tarball layouts - -## Phase 5: Auto-Update - -- Choose updater stack per platform -- Generate signed update feed -- create stable/beta channels -- add update settings UI -- test update path from one released version to the next -- test rename-era migration if updater arrives after rebrand work begins - -## Phase 6: Website Production - -- Design homepage and download page -- Capture polished screenshots -- write short, honest feature copy -- add platform matrix and system requirements -- add release notes/changelog page -- add FAQ for plugins, audio drivers, supported formats, and project compatibility -- add privacy/support/contact pages - -## Phase 7: Legal and Compliance - -- Resolve the AGPL vs proprietary contradiction -- confirm third-party redistribution rights for FFmpeg, WebView2, ASIO handling, models, and any bundled Python dependencies -- publish third-party notices in installer or app bundle if required -- add EULA/privacy policy only if they match the actual license strategy - -## Phase 8: Launch Operations - -- create versioning policy -- create release notes template -- create bug-report template -- create support email/contact flow -- create “known issues” page -- create telemetry/privacy stance -- decide whether beta releases are public or invite-only - -## 10. Recommended Public Launch Sequence - -Best path from the current repo: - -1. Finalize branding decisions for OpenStudio naming and file extensions -2. Resolve licensing position -3. Finish the Windows-only production release path -4. Launch website with Windows download first -5. Mark macOS and Linux as “in progress” or “join waitlist” -6. Add updater support after installer and signing are stable -7. Bring macOS next -8. Bring Linux after platform validation - -## 11. What Should Not Be Promised on Day One - -Until validated, avoid homepage claims like: - -- “Available on Windows, macOS, and Linux” -- “Automatic updates included” -- “Full CLAP/LV2 support” -- “Production-ready video workflow” -- “Mastering-grade DDP workflow” - -These may become true, but they should not headline the site until verified. - -## 12. Recommended Immediate Next Actions - -If we want the fastest path to a credible public launch, do these next: - -1. Lock the final OpenStudio naming rules, especially file extensions and scripting namespace. -2. Resolve the license mismatch across `LICENSE`, `README.md`, and release messaging. -3. Decide the Windows installer format and build the first signed installer. -4. Capture fresh hero-quality screenshots from the actual app. -5. Build the marketing site around a Windows-first release, with macOS/Linux shown as upcoming unless proven ready. diff --git a/docs/pitch_corrector_feat_plan.md b/docs/pitch_corrector_feat_plan.md deleted file mode 100644 index 33b5e67..0000000 --- a/docs/pitch_corrector_feat_plan.md +++ /dev/null @@ -1,139 +0,0 @@ -# Studio13 Pitch Correction Engine — Signalsmith Stretch Integration Plan - -## Goal - -Replace the broken custom SMS synthesis engine with **Signalsmith Stretch** — a free -(MIT), header-only, production-quality phase vocoder that handles stereo natively, supports -per-block varying pitch ratios, and has built-in formant compensation. - -The **note detection and graphical editor** (blobs, contour display, note segmentation) are -kept as-is using `PitchAnalyzer` (YIN) and `PartialTracker` / `SinusoidalModel::analyze()`. -Only the **synthesis** (actual audio pitch shifting) is replaced. - ---- - -## Architecture After This Change - -``` -Input Audio (stereo or mono) - │ - ▼ -buildCorrectionCurve() ← per-sample pitch ratio from note edits -buildFormantCurve() ← per-sample formant ratio (independent shift) - │ - ▼ -SignalsmithShifter::process() ← replaces ALL of: SMS resynthesis, WORLD vocoder, - │ presetDefault(ch, sr) phase vocoder, mono mix + SGT stereo path - │ process in intervalSamples blocks - │ setTransposeFactor(avgRatio) per block - │ setFormantFactor(1/avgRatio) per block (keeps formants in place) - │ handles stereo natively — NO mono mix needed - │ - ▼ -Output Audio (same channel count as input) -``` - ---- - -## What Is Removed - -| File | Why Removed | -|------|-------------| -| `Source/FormantPreserver.h/.cpp` | WORLD vocoder — mono-only, speech-oriented, replaced | -| `Source/PitchShifter.h/.cpp` | Phase vocoder — basic, no formant preservation, replaced | -| `Source/SpectralPitchShifter.h/.cpp` | Old spectral pitch shifting, not used | -| `Source/SpectralProcessor.h/.cpp` | STFT utils only used by SpectralPitchShifter | -| `Source/PolyResynthesizer.h/.cpp` | Polyphonic SMS resynthesis, replaced | -| `Source/HarmonicMaskGenerator.h/.cpp` | Wiener masks for poly, replaced | -| SMS synthesis from `SinusoidalModel` | `resynthesizeWithRatios`, `additiveSynthOLA`, `extractSpectralResidual`, `synthesizeStochasticResidual`, `extractTransientLayer`, `classifyVoiceQuality`, `warpEnvelope`, `computeAmplitudeEnvelope`, `resynthesize` | -| SMS cache from `PitchResynthesizer` | `cachedAnalysis_`, `cachedGroups_`, `cachedCorrectedMono_`, `cachedRatios_`, `findChangedRange()` | - -## What Is Kept - -| File | Why Kept | -|------|----------| -| `Source/PitchAnalyzer.h/.cpp` | YIN pitch detection — drives the graphical editor note blobs | -| `Source/PitchDetector.h/.cpp` | Low-level YIN algorithm | -| `Source/PitchMapper.h/.cpp` | Scale/key snapping for real-time corrector | -| `Source/PartialTracker.h/.cpp` | STFT + partial tracking — kept for future SMS analysis improvements | -| `Source/SinusoidalModel.h/.cpp` | `analyze()` + `groupPartials()` — kept for future note visualization | -| `Source/S13PitchCorrector.h/.cpp` | Real-time inline pitch corrector (auto-tune style FX) | -| `Source/PolyPitchDetector.h/.cpp` | Basic-Pitch ONNX model — polyphonic note detection | -| `Source/PitchResynthesizer.h/.cpp` | Refactored: keeps `buildCorrectionCurve()`, uses Signalsmith | -| `Source/ARAHostController.h/.cpp` | ARA plugin hosting — unrelated to pitch | -| `Source/StemSeparator.h/.cpp` | AI stem separation — unrelated to pitch | - ---- - -## New File - -### `thirdparty/signalsmith/signalsmith-stretch.h` -- Single header from https://github.com/Signalsmith-Audio/signalsmith-stretch -- MIT license -- Provides `signalsmith::stretch::SignalsmithStretch<float>` - -### `Source/SignalsmithShifter.h` -``` -SignalsmithShifter::process( - input, // const float* const* — one pointer per channel - numChannels, - numSamples, - sampleRate, - ratios, // per-sample pitch ratio (1.0 = no shift) - formantRatios // per-sample formant ratio (empty = auto-preserve) -) -> vector<vector<float>> // one vector per channel, exactly numSamples long -``` -Internally: -- Creates `SignalsmithStretch<float>`, calls `presetDefault(numChannels, sampleRate)` -- Processes in `intervalSamples()`-sized blocks -- Per block: averages ratio, calls `setTransposeFactor()` + `setFormantFactor()`, calls `process()` -- Feeds silence to flush latency, trims output to exact `numSamples` - ---- - -## Quality Characteristics - -| Aspect | Before (broken SMS) | After (Signalsmith) | -|--------|---------------------|---------------------| -| Stereo | Crashes | Native stereo, no mono mix | -| Amplitude | Distorted (10× inflation) | Preserved | -| Formants | Broken LPC path | Built-in compensation | -| Sibilants | Smeared by STFT | Good (Signalsmith preserves transients) | -| Artifacts | Heavy (phase vocoder + additive resynth combined) | Clean | -| Large shifts | Crashes or distorts | Handles well | - ---- - -## Implementation Steps - -1. Add `signalsmith-stretch.h` to `thirdparty/signalsmith/` -2. Create `Source/SignalsmithShifter.h` (wrapper class) -3. Refactor `Source/PitchResynthesizer.cpp` — replace SMS block with `SignalsmithShifter::process()` -4. Remove synthesis methods from `Source/SinusoidalModel.cpp/.h` -5. Delete `FormantPreserver`, `PitchShifter`, `SpectralPitchShifter`, `SpectralProcessor`, `PolyResynthesizer`, `HarmonicMaskGenerator` -6. Update `CMakeLists.txt` — add `thirdparty/signalsmith` to include path, remove deleted files, remove `world_static` dependency -7. Build, fix errors - ---- - -## Future Improvements (Post-Integration) - -Once the pitch corrector works cleanly with Signalsmith, the next quality improvements are: - -### Near term -- **Per-note formant control**: The `buildFormantCurve()` already builds a per-sample formant - ratio. Wire it to `setFormantFactor()` per block for independent formant shifting per note. -- **Transition crossfades**: At note boundaries (voiced→unvoiced), blend ratio smoothly over - ~10ms already handled by `buildCorrectionCurve()`. - -### Medium term -- **Incremental re-correction**: Signalsmith is fast enough to re-process the full window - on each edit (~50ms for a 5s window). No incremental patching needed. -- **SMS analysis for pitch display**: `PartialTracker` + `SinusoidalModel::analyze()` can be - used to display richer note information (harmonic content, detected partials) in the pitch - editor UI beyond what YIN gives. - -### Long term -- **Back to SMS synthesis**: Once a stable reference output exists from Signalsmith, we can - incrementally improve the SMS synthesis layer and A/B test against Signalsmith until SMS - surpasses it. At that point, SMS becomes the default and Signalsmith becomes the fallback. diff --git a/docs/pitch_editor_engine_v2_implementation_plan.md b/docs/pitch_editor_engine_v2_implementation_plan.md deleted file mode 100644 index 2378d7d..0000000 --- a/docs/pitch_editor_engine_v2_implementation_plan.md +++ /dev/null @@ -1,473 +0,0 @@ -# Pitch Editor Engine V2 Implementation Guide - -Status note on 2026-04-17: - -- the engine-v2 implementation work is complete enough for comparison, but it is no longer the recommended active recovery path -- root-cause research, ML benchmark, and engine-v3 feasibility are now recorded in: - - [pitch_root_cause_research_20260417.md](c:/Users/srvds/Documents/Codes/Studio13-v3/docs/pitch_root_cause_research_20260417.md) -- current repo truth: - - `pitch_only_adaptive_selector` remains the kept working baseline - - local ML restoration is blocked because no materially stronger note-local restorer is available in this environment - - the first `engine-v3` feasibility probe returned `stop` - -## Goal -Move the pitch editor to a 2-tier workflow: - -- `Tier 1`: instant drag monitoring while the user is moving a note -- `Tier 2`: debounced HQ note/island render that becomes the authoritative playback result for the changed region - -This program is built on top of the current repo truth: - -- kept live branch: `pitch_only_adaptive_selector` -- active experimental path: `pitch_only_engine_v2_program` -- note-change stutter and formant drift are still unresolved -- code must stay in place for user audition before cleanup - -## Locked Product Behavior -- Use `2` tiers, not 1 or 3 -- Drag monitoring starts immediately while the note is moving -- HQ note render starts after roughly `300 ms` of inactivity -- Transport playback does not use preview-quality audio for committed edits -- Changed regions wait for HQ-ready cache audio before the new edit becomes authoritative -- Experimental code is not removed until after user listening validation - -## Implemented Foundation -### Current v1 infrastructure -- Added `note_hq` as a first-class pitch correction render mode -- Auto-apply now targets note-local HQ renders instead of staged playhead segments -- Drag lifecycle now starts and stops interactive pitch monitoring explicitly -- Playback region replacement keeps the last valid rendered region until a newer overlapping HQ region is ready -- Regression harness accepts `note_hq` render jobs -- Added a dedicated RAM scrub-preview path: - - backend entrypoints: - - `startPitchScrubPreview` - - `updatePitchScrubPreview` - - `stopPitchScrubPreview` - - native playback mixes a RAM loop monitor voice directly from `PlaybackEngine` - - scrub loops are extracted from the stable interior of the selected note, not the onset - - stereo clips are supported by deriving loop bounds from mono analysis and extracting matching multichannel audio -- Added the first real `engine-v2` audio implementation on top of the scaffold: - - Signalsmith-based voiced-core renderer in the transition window - - cepstral envelope restoration on voiced-support frames - - spectral-flatness-driven transient/unvoiced bypass mask - - residual carry reinjection from shared own-engine analysis - - transition compositor that mixes: - - original transient shell - - voiced core - - adaptive-selector base - - residual carry - -### Current limitations -- The scrub voice is now benchmarked through a dedicated stopped-transport scrub harness, but it still needs real user audition in the editor UI -- `engine-v2` sound work is now implemented, but the first full audible pass regresses both primary `+4` truth clips badly -- The current `engine-v2` transition compositor is still too broad and is dragging the stable note body off target -- The audible product issues remain unresolved: - - stutter on note change - - formant/timbre drift on note change - -## Architecture -### Tier 1: drag monitoring -- Start on note drag begin for pitch-affecting gestures -- Use note-local pitch preview derived from the selected note window -- Clear immediately on drag end -- This tier is intentionally fast and temporary - -### Tier 2: HQ note cache -- Trigger after debounce -- Render only the changed note/island region plus transition shoulders -- Store the result as a playback override region -- Replace overlapping cached regions atomically when a newer HQ render finishes - -### Transport behavior -- While a new HQ note render is pending, transport keeps using the last valid audio for that region -- Once the new HQ note render completes, playback swaps to the new override region -- No preview-quality renderer is used for committed transport playback - -## Next Engine-V2 Audio Steps -1. Tighten `engine-v2` engagement to the transition core instead of the wider note window -2. Lower wet exposure so adaptive-selector remains the dominant carrier outside the transition nucleus -3. Keep cepstral envelope restoration only where voiced support is strong and stable -4. Keep transient/unvoiced bypass mandatory at the transition edges -5. Rebalance residual carry so it restores breathiness without shifting core pitch/body -6. Re-run the truth cases against: - - `CTRL-SHIP` - - `CTRL-R6` - - `pitch_only_adaptive_selector` - - current `pitch_only_engine_v2_program` - -## Current Benchmark Snapshot -### Dedicated scrub preview -- Implemented and build-clean -- Native/backend path is active -- Dedicated scrub regression now passes with the natural-segment path on stopped transport: - - run: `20260416_200227_pitchOrg_scrub_preview_r8` - - result: - - `scrubPreviewAudible=true` - - `scrubPreviewFirstDragAudible=true` - - start latency `26.9 ms` - - stop latency `26.8 ms` - - loop duration `240.0 ms` - - base pitch `365.17 Hz` - - repeat stability `0.4699` - - last peak `0.1123` -- The render-quality harness still does not score drag feel, so scrub regression remains a separate check -- Multi-scenario scrub suite now exists: - - runner: `tools/run-ui-pitch-scrub-suite.ps1` - - richer runs: - - `20260416_231821_pitchOrg_scrub_suite_richer_r1` - - `20260416_234516_pitchTest_scrub_suite_richer_r1` - - current measured state: - - first drag audible: `true` - - repeated-drag suite case audible: `true` - - after-transport-cycle suite case audible: `true` - - true multi-note fixtures now exist: - - `tests/fixtures/pitch-regression/example_pitchOrg_scrub_multinote.json` - - `tests/fixtures/pitch-regression/example_pitchTest_scrub_multinote.json` - - multi-note scrub run: `20260416_235640_pitchTest_scrub_suite_multinote_r3` - - selection-change is now exercised end-to-end on the multi-note scrub fixture -- Important honesty note: - - scrub preview is now structurally present and richer-benchmarked across the current canonical local scrub scenarios - - `H1` is complete for the current canonical local fixture corpus - - the suite does not yet score perceived “breaking/tearing” quality directly - - the user-facing sound still needs listening validation in the editor - -### Boundary / transient / formant harnesses -- Boundary suite exists and runs: - - runner: `tools/run-ui-pitch-boundary-suite.ps1` -- Manifest-driven regression suite runner now exists: - - `tools/run-ui-pitch-regression-suite.ps1` -- Transient and formant wrappers now exist on top of it: - - `tools/run-ui-pitch-transient-suite.ps1` - - `tools/run-ui-pitch-formant-suite.ps1` -- Richer manifests added: - - `tests/fixtures/pitch-regression/suites/transient_richer_suite.json` - - `tests/fixtures/pitch-regression/suites/formant_richer_suite.json` -- Richer benchmark runs: - - transient: `20260416_231844_transient_suite_richer_r1` - - formant: `20260416_233426_formant_suite_richer_r1` -- Important honesty note: - - `H3` and `H4` are now complete for the current canonical local fixture corpus - - they still do not represent a broad real-world vocal corpus, but they are no longer smoke-only placeholders - -## Remaining Iterations -- Mandatory iterations still remaining: `0` -- Conditional phase-locking iterations still remaining: `+2` -- Why `0` remains: - - `S1-S3` are effectively in - - `H2` boundary harness is in - - `H1`, `H3`, and `H4` now have richer canonical-suite coverage and are treated as closed for the current local fixture corpus - - the adaptive-carrier tuning track is closed for now at its current best profile - - `A7` is complete and flat - - the engine-v2 challenger is now frozen after the narrowed `r8` close-out pass - - there is no remaining mandatory harness close-out work in the current local fixture corpus - -## What We Learned After Close-Out -- engine-v2 did not fail because of missing plumbing anymore -- it failed because the remaining error is centered on: - - transition ownership and boundary timing drift - - mixed transient and first-voiced-cycle handling - - formant preservation that is too weak and too local for hard transitions -- those findings came from the bounded root-cause pass on 2026-04-17, not from another speculative renderer loop -- that means this document should now be read as implementation history and available scaffolding, not as the primary next-step plan - -### `engine-v2` first audible implementation -- `pitchOrg +4` - - branch: `pitch_only_engine_v2_program` - - run: `20260416_124252_pitchOrg_plus4_note_hq_engine_v2_program_impl_r2` - - result: - - note mel `9.653` - - env `1.782` - - note/body/core cents `-18.72 / -18.72 / -37.23` - - entry mel `10.430` - - exit mel `11.219` - - onset artifact `3.23` - - `spectralEnvelopeCorrectionUsed=true` - - `engineV2Used=true` -- `pitchTestOrg +4` - - branch: `pitch_only_engine_v2_program` - - run: `20260416_124622_pitchTestOrg_plus4_note_hq_engine_v2_program_impl_r3` - - result: - - note mel `11.303` - - env `1.425` - - note/body/core cents `-17.94 / -17.94 / -36.45` - - entry mel `8.389` - - exit mel `10.274` - - onset artifact `0.85` - - `spectralEnvelopeCorrectionUsed=true` - - `engineV2Used=true` -- Verdict: - - infrastructure is real and benchmarkable - - first audible pass is not keepable - - code remains in place for user test and further tuning - -### Latest tuning snapshot -- `B1-B3` engine-v2 challenger close-out - - runs: - - `20260416_230357_enginev2_narrow_pitchOrg_plus4_r8` - - `20260416_230555_enginev2_narrow_pitchTest_plus4_r8` - - result: - - `pitchOrg +4` - - note mel `6.608` - - env `1.009` - - entry `7.620` - - exit `7.112` - - onset artifact `1.390` - - formant drift `0.395` - - `pitchTestOrg +4` - - note mel `3.143` - - env `0.498` - - entry `7.017` - - exit `1.887` - - onset artifact `4.000` - - formant drift `0.062` - - verdict: - - the narrowed/drier engine-v2 pass still loses clearly to the adaptive correction carrier on the hard clip - - easy-clip onset improves, but entry timbre still worsens - - hard-clip entry and onset remain much worse than the adaptive carrier - - freeze the challenger and stop spending main budget here - -- `A7` STFT correction-layer sweep - - runs: - - `20260416_224905_adaptive_stft_tune_r10_1024o8` - - `20260416_224905_adaptive_stft_tune_r10_2048o8` - - `20260416_224905_adaptive_stft_tune_r10_2048o4` - - result: - - all three profiles were effectively identical on both smoke cases - - `pitchOrg +4` stayed at about: - - note mel `6.525` - - env `1.022` - - entry `6.885` - - exit `7.112` - - onset artifact `2.257` - - formant drift `0.374` - - `pitchTestOrg +4` stayed at about: - - note mel `2.828` - - env `0.469` - - entry `1.703` - - exit `1.887` - - onset artifact `1.688` - - formant drift `0.050` - - verdict: - - STFT size / hop is not the dominant lever in the current adaptive correction layer - - `A7` should be treated as complete and flat - -- `pitchOrg +4` - - branch: `pitch_only_adaptive_selector` - - run: `20260416_223535_adaptive_residual_tune_r9_dry` - - result: - - note mel `6.525` - - env `1.022` - - entry mel `6.885` - - exit mel `7.112` - - onset artifact `2.257` - - boundary timing error `8.417 ms` - - formant body harmonic drift `0.374` - - `spectralEnvelopeCorrectionUsed=true` -- `pitchTestOrg +4` - - branch: `pitch_only_adaptive_selector` - - run: `20260416_223535_adaptive_residual_tune_r9_dry` - - result: - - note mel `2.828` - - env `0.469` - - entry mel `1.703` - - exit mel `1.887` - - onset artifact `1.688` - - boundary timing error `2.229 ms` - - formant body harmonic drift `0.050` - - `spectralEnvelopeCorrectionUsed=true` -- Verdict on the current best adaptive-carrier correction pass: - - `r9 dry` is the current best adaptive correction profile - - `A5` cepstral strength/lifter sweeps were effectively flat on the smoke suite - - `A6` residual carry sweep favored the driest profile, so the default correction path now keeps residual reinjection off - - it is still not fully keepable: - - `pitchOrg +4` onset artifact remains materially worse than plain adaptive - - `pitchTestOrg +4` onset and exit remain somewhat worse than plain adaptive even though the gap is much smaller - - the next tuning priority should now be: - - `A7` STFT correction-layer sweep - - then challenger close-out `B1-B4` - -- `pitchOrg +4` - - branch: `pitch_only_adaptive_selector` - - run: `20260416_213810_adaptive_boundary_tune_r7_onsetcleanup` - - result: - - note mel `6.526` - - env `1.023` - - entry mel `6.890` - - exit mel `7.112` - - onset artifact `2.261` - - boundary timing error `8.396 ms` - - formant body harmonic drift `0.374` - - `spectralEnvelopeCorrectionUsed=true` -- `pitchTestOrg +4` - - branch: `pitch_only_adaptive_selector` - - run: `20260416_213810_adaptive_boundary_tune_r7_onsetcleanup` - - result: - - note mel `2.828` - - env `0.470` - - entry mel `1.707` - - exit mel `1.887` - - onset artifact `1.714` - - boundary timing error `2.250 ms` - - formant body harmonic drift `0.050` - - `spectralEnvelopeCorrectionUsed=true` -- Verdict on the current best adaptive-carrier correction pass: - - `r7` is the best adaptive correction profile so far - - it meaningfully improves the hard clip: - - note mel is now close to the plain adaptive baseline - - exit damage is far lower than earlier correction passes - - it is still not fully keepable: - - `pitchOrg +4` onset artifact remains materially worse than plain adaptive - - `pitchTestOrg +4` onset artifact and exit are still worse than plain adaptive even though they are much closer now - - the next tuning priority should now be: - - `A5` cepstral lifter retune with richer formant fixtures - - `A6` residual carry rebalance - - then decide whether one more adaptive boundary cleanup pass is justified before more engine-v2 work - -- `pitchOrg +4` - - branch: `pitch_only_adaptive_selector` - - run: `20260416_212441_adaptive_boundary_tune_r5_compromise` - - result: - - note mel `6.533` - - env `1.039` - - entry mel `7.462` - - exit mel `7.044` - - onset artifact `2.261` - - boundary timing error `8.396 ms` - - formant body harmonic drift `0.373` - - `spectralEnvelopeCorrectionUsed=true` -- `pitchTestOrg +4` - - branch: `pitch_only_adaptive_selector` - - run: `20260416_212441_adaptive_boundary_tune_r5_compromise` - - result: - - note mel `2.935` - - env `0.487` - - entry mel `1.833` - - exit mel `3.665` - - onset artifact `1.748` - - boundary timing error `2.250 ms` - - formant body harmonic drift `0.040` - - `spectralEnvelopeCorrectionUsed=true` -- Verdict on the current best adaptive-carrier correction pass: - - `r5` is the best adaptive correction profile so far - - it is still not keepable: - - `pitchOrg +4` note-start artifact is still materially worse than the plain adaptive baseline - - `pitchTestOrg +4` exit quality is improved but still much worse than baseline - - the next tuning priority should now be: - - `A4` entry timing compensation - - `A5` cepstral lifter retune - - then a narrower `A3` crossfade-law cleanup if the start remains rough in listening - -- `pitchOrg +4` - - branch: `pitch_only_adaptive_selector` - - run: `20260416_211448_adaptive_boundary_tune_r3` - - result: - - note mel `6.537` - - env `1.040` - - entry mel `7.435` - - exit mel `7.028` - - onset artifact `2.383` - - boundary timing error `8.396 ms` - - formant body harmonic drift `0.373` - - `spectralEnvelopeCorrectionUsed=true` -- `pitchTestOrg +4` - - branch: `pitch_only_adaptive_selector` - - run: `20260416_211448_adaptive_boundary_tune_r3` - - result: - - note mel `2.960` - - env `0.493` - - entry mel `1.876` - - exit mel `4.067` - - onset artifact `1.540` - - boundary timing error `2.250 ms` - - formant body harmonic drift `0.039` - - `spectralEnvelopeCorrectionUsed=true` -- Verdict on the second adaptive-carrier correction pass: - - this pass is better than `r2`, especially on `pitchTestOrg +4` - - it is still not keepable: - - `pitchOrg +4` onset artifact remains materially worse than the pre-correction adaptive baseline - - `pitchTestOrg +4` exit quality and boundary timing are still much worse than baseline even after the improvement - - the next tuning priority remains: - - `A3` transient handoff crossfade sweep - - `A4` entry timing compensation - - `A5` cepstral lifter retune - -- `pitchOrg +4` - - branch: `pitch_only_adaptive_selector` - - run: `20260416_210838_adaptive_boundary_tune_r2` - - result: - - note mel `6.548` - - env `1.044` - - entry mel `7.383` - - exit mel `7.007` - - onset artifact `3.259` - - boundary timing error `8.417 ms` - - formant body harmonic drift `0.372` - - `spectralEnvelopeCorrectionUsed=true` -- `pitchTestOrg +4` - - branch: `pitch_only_adaptive_selector` - - run: `20260416_210838_adaptive_boundary_tune_r2` - - result: - - note mel `3.029` - - env `0.511` - - entry mel `1.993` - - exit mel `5.269` - - onset artifact `0.824` - - boundary timing error `5.458 ms` - - formant body harmonic drift `0.038` - - `spectralEnvelopeCorrectionUsed=true` -- Verdict on the first adaptive-carrier correction pass: - - this was a real engaged run, not a stale-binary repeat - - it is still not keepable: - - `pitchOrg +4` improved note/body similarity slightly, but onset artifact got much worse - - `pitchTestOrg +4` improved onset/formant proxy, but exit quality and boundary timing got much worse - - the current tuning priority should move to: - - `A3` transient handoff crossfade sweep - - `A4` entry timing compensation - - `A5` cepstral lifter retune - -- `pitchOrg +4` - - branch: `pitch_only_engine_v2_program` - - run: `20260416_152736_pitchOrg_plus4_note_hq_engine_v2_tune_r7` - - result: - - note mel `7.314` - - env `1.347` - - entry mel `7.396` - - exit mel `7.027` - - onset artifact `1.388` - - boundary timing error `0.792 ms` - - formant body harmonic drift `0.415` -- `pitchTestOrg +4` - - branch: `pitch_only_engine_v2_program` - - run: `20260416_152736_pitchTestOrg_plus4_note_hq_engine_v2_tune_r7` - - result: - - note mel `3.540` - - env `0.521` - - entry mel `7.513` - - exit mel `1.632` - - onset artifact `4.013` - - onset delay `1.479 ms` - - formant body harmonic drift `0.069` -- Comparison baseline: - - adaptive still wins the hard case clearly: - - `pitchOrg +4`: note mel `7.085`, entry mel `7.078`, onset artifact `1.803` - - `pitchTestOrg +4`: note mel `2.810`, entry mel `1.530`, onset artifact `0.705` - -## Validation Rules -- Keep comparing on: - - `pitchOrg.wav -> pitchOrg+4s.wav` - - `pitchTestOrg.wav -> pitchTestOrg+4s.wav` -- Run guard cases only after a real `+4` win -- Track: - - note mel - - note env RMSE - - note/body/core cents - - entry and exit mel/env - - onset artifact - - harmonic-envelope drift - - render latency for note-local HQ jobs - -## Cleanup Rule -- Mark new paths as `Active Test` or `User Pending` -- Do not remove experimental code until: - - benchmark failure is recorded - - and the user has listened to it or explicitly approved cleanup diff --git a/docs/pitch_editor_research_summary.md b/docs/pitch_editor_research_summary.md deleted file mode 100644 index 66aef33..0000000 --- a/docs/pitch_editor_research_summary.md +++ /dev/null @@ -1,4523 +0,0 @@ -# Pitch Editor Research Decision Log - -Canonical status board: [pitch_recovery_master_map.md](c:/Users/srvds/Documents/Codes/Studio13-v3/docs/pitch_recovery_master_map.md) - -Decision rule from 2026-04-14 onward: -- keep lifecycle state, queue order, and harvestable traits in the master map -- keep this file as the chronological experiment ledger with exact runs, metrics, and keep/reject decisions - -### 2026-04-28: Entry Contour-Handoff Correction - -Purpose: -- test the hypothesis that the remaining start artifact is caused by a pitch-trajectory discontinuity rather than only an audio splice. -- keep render context before the note without mutating the previous word or delaying hard step edits. - -Implementation: -- added note-HQ entry pitch-handoff diagnostics through C++, the frontend bridge, and regression summaries. -- changed the native pitch-ratio curve so explicit continuous/internal transitions can use a minimum-jerk pitch handoff. -- kept hard/unknown entries on the legacy-compatible rule: pre-note render context is allowed, but the ratio reaches the target by `note.startTime` and audible dry/wet ownership stays with the entry bridge. -- added F0 slope/acceleration reporting to the reference harness; the hard gate is applied only when an actual pitch handoff is active. - -Decision: -- keep the diagnostic and explicit-continuous handoff support. -- do not use a body-delayed pitch ramp for hard/unknown entries. Trial runs with a 20-40 ms hard-entry pitch ramp regressed `pitchOrg +4` onset artifact to `1.615` and then entry lag to `19-25 ms`; the correct hard-entry behavior is render pre-roll plus dry-protected commit, not delayed pitch onset. - -Validation: -- `D:\test projects\os tests\runs\20260428_115125_entry_contour_handoff_plus4_final3`: passed, onset artifact `1.501`, exit-next `2.156`, pre-bridge residual `-172.205 dB`. -- `D:\test projects\os tests\runs\20260428_115314_entry_contour_handoff_minus4_final`: passed, onset artifact `1.187`, exit-next `0.207`, downshift harmonic drift `0.339`, spectral envelope correction enabled. -- `D:\test projects\os tests\runs\20260428_115719_entry_contour_handoff_two_adjacent_plus4_r2`: passed, one edit island for two edited notes, with internal pitch handoff diagnostics and no doubled dry/wet ownership. - -### 2026-04-28: Emergency Word-Grouping Repair - -Purpose: -- fix the regression where broad `wordGroupId` ownership caused one clicked note to move unrelated notes. -- prevent phrase-first segmentation from collapsing separate words into oversized editable regions. - -Implementation: -- restored normal UI ownership: click/drag/edit operations affect only explicitly selected notes. -- removed the word-group hull overlay and "Word (n)" inspector behavior. -- kept `wordGroupId` as assistive metadata for diagnostics/render grouping, not as automatic selection or drag ownership. -- restored conservative analyzer merging: short `40 ms` merge gap plus pitch-distance guard, instead of merging every short gap bridged by phrase context. -- allowed strong acoustic `hard_word_like` candidates to split default analyzer regions, while pitch hysteresis/vibrato candidates remain non-destructive diagnostics. -- harness metrics now separate hard acoustic splits from destructive pitch-corner/pitch-jump failures and report expected-region overhang to catch collapsed words. - -Decision: -- keep this repair immediately; product default must be "the note I clicked is the note I move." -- whole-word movement should require explicit multi-selection or a future dedicated group-edit mode, not implicit analyzer grouping. -- verification: - - analyzer: `D:\test projects\os tests\runs\20260428_110455_emergency_word_group_repair_analysis_pitchOrg`, `noteCount=5`, `wordGroupCount=5`, destructive corner/pitch-jump splits `0/0`, hard acoustic splits `2`, max expected overhang `0.459`. - - UI ownership: `pitchEditorSingleNoteOwnership.test.ts` passed; shared `wordGroupId` no longer expands selection, drag updates, or selected pitch moves. - - audio: `pitchOrg +4` and `pitchOrg -4` note-HQ runs passed; `-4` harmonic drift measured `0.343`, onset artifacts measured `1.48` / `1.598`, exit-next artifacts `2.31` / `0.091`. - - adjacent selected notes: `D:\test projects\os tests\runs\20260428_110807_emergency_repair_two_adjacent_plus4` reported one note-HQ edit island for two selected edits, confirming the double-voice ownership fix remains active. - -### 2026-04-28: Phrase-First Vibrato-Safe Word Detection - -Purpose: -- fix continued over-fragmentation where one sung word in a single breath is split by vibrato, bend, or melisma movement. -- make word/phrase regions the primary editable units while preserving pitch contour diagnostics. - -Implementation: -- removed the destructive running-average pitch-jump split from default segmentation. -- short voiced detector dropouts are bridged up to `80 ms`; hard automatic cuts require long unvoiced gaps or sustained energy-break evidence. -- sustained pitch deviations are exported as `pitch_hysteresis_*` boundary candidates, never destructive splits. -- vibrato-like periodic reversals are marked as `internal_vibrato` diagnostics and remain inside the same editable word/phrase. -- close fragments can merge across short non-hard gaps regardless of pitch distance, because pitch difference alone is not a word boundary. -- superseded by the emergency repair: the canvas no longer selects/highlights `wordGroupId` as the primary object, and dragging one internal fragment no longer moves the whole group. - -Decision: -- keep this as a product-model/analyzer correction, not a renderer experiment. -- corrected product rule: continuous breath, vibrato, bend, and melisma may stay related by metadata, but visible editing remains note-first unless the user explicitly selects multiple notes. -- destructive pitch-corner and pitch-jump splitting stays research-only/diagnostic by default. - -Validation: -- native build and frontend build passed after the change. -- analyzer run `D:\test projects\os tests\runs\20260428_040921_phrase_first_word_detection_pitchOrg` passed with `noteCount=3`, `wordGroupCount=3`, `destructivePitchJumpSplitCount=0`, `destructiveCornerSplitCount=0`, edited-word overlap `1.000`, and max fragments `1`. -- primary note-HQ runs: - - `D:\test projects\os tests\runs\20260428_040951_phrase_first_pitchOrg_plus4` - - `D:\test projects\os tests\runs\20260428_041117_phrase_first_pitchOrg_minus4` -- adjacent-fragment diagnostic `D:\test projects\os tests\runs\20260428_041244_phrase_first_two_adjacent_plus4` confirmed one raw note-HQ edit island for two supplied fragments (`noteHqEditIslandCount=1`, `noteHqEditedNoteCount=2`). - -### 2026-04-28: Word Grouping And Edit-Island Correction - -Purpose: -- fix the regression where a single sung word is broken into several editable pieces. -- fix adjacent selected notes sounding doubled by treating them as one render island. - -Implementation: -- pitch-corner detections are now `boundaryCandidates` by default, not automatic note splits. -- destructive corner splitting is available only with `OPENSTUDIO_ANALYZER_APPLY_CORNER_SPLITS=1`. -- analyzer notes now carry `wordGroupId`; close voiced fragments without a hard acoustic boundary are grouped as one editable word/phrase. -- superseded by the emergency repair: pitch move and scale correction affect explicitly selected notes only. -- note-HQ request building coalesces adjacent edited notes into edit islands; only island entry/exit get bridge ownership, while internal boundaries stay on the continuous pitch curve. -- backend commit ranges merge adjacent edited notes into island ownership and no longer average diagnostic pitch ratios with `sqrt(previous * current)`. - -Decision: -- keep this as a product-model/signal-chain correction, not a new renderer experiment. -- product rule: word-like editing is the default; internal micro-note editing requires explicit manual split. -- corner detection remains useful as an analyzer hint, but not as a default edit seam. - -Validation: -- native build and frontend build passed after the change. -- analyzer run `D:\test projects\os tests\runs\20260428_022002_word_group_analysis_pitchOrg_r2` passed with `destructiveCornerSplitCount=0` and min expected word-group overlap `0.928`. -- primary note-HQ runs: - - `D:\test projects\os tests\runs\20260428_022028_word_group_island_plus4` - - `D:\test projects\os tests\runs\20260428_022028_word_group_island_minus4` -- adjacent-fragment diagnostic `D:\test projects\os tests\runs\20260428_023520_word_group_two_adjacent_plus4_r4` confirmed one raw note-HQ edit island for two edited fragments (`noteHqEditIslandCount=1`, `noteHqEditedNoteCount=2`). - -### 2026-04-27: Segmentation-Corner And Voiced-Core Timbre Correction - -Purpose: -- address the remaining stutter as a possible wrong-boundary problem, not only a compositor problem. -- reduce downshift formant drift with an envelope transfer tied to the original voiced vowel core. - -Implementation: -- note segmentation now detects conservative pitch-curve corners from the smoothed MIDI contour. -- a corner split requires supporting vocal evidence: energy dip, confidence dip, nearby unvoiced/noise, or strong pitch prominence. -- vibrato-like periodic reversals are suppressed so normal sustained vibrato does not become many small notes. -- analyzed notes now expose `entryBoundaryKind`, `exitBoundaryKind`, reason, and score. -- note-HQ uses those boundary kinds when choosing bridge ownership: hard word-like boundaries get shorter audible bridges, while soft legato boundaries may use wider phrase smoothing. -- downward pitch-only note-HQ now applies voiced-core spectral envelope transfer on edited note bodies after the native directional renderer. - -Decision: -- keep this as a signal-chain and segmentation correction, not a new renderer-family experiment. -- product rule: previous/next word bodies stay dry across hard boundaries; continuous sustain/legato may share transition smoothing, but neighboring note bodies are not fully retuned. -- acceptance remains the primary `pitchOrg +4/-4` note-HQ gates plus the richer formant/transient/boundary suites. - -Measured runs: -- `pitchOrg +4`: `D:\test projects\os tests\runs\20260428_013135_seg_corner_timbre_plus4` - - body/core pitch error `0.00 / 0.00 cents` - - entry lag `-0.125 ms`, onset artifact `1.479`, onset derivative `1.087` - - protected pre-bridge residual `-172.823 dB` - - exit-next artifact `2.307` - - harmonic drift `0.379` -- first `pitchOrg -4` aggressive envelope-transfer attempt: `D:\test projects\os tests\runs\20260428_013344_seg_corner_timbre_minus4` - - rejected because harmonic drift regressed to `0.615 > 0.360`. - - lesson: envelope transfer must be a bounded support-weighted correction, not a replacement of the native downshift body. -- final `pitchOrg -4`: `D:\test projects\os tests\runs\20260428_013650_seg_corner_timbre_minus4_mix005` - - body/core pitch error `0.00 / +11.90 cents` - - `spectralEnvelopeCorrectionUsed=true` - - entry lag `+0.771 ms`, onset artifact `1.598`, onset derivative `1.598` - - protected pre-bridge residual `-240.000 dB` - - exit-next artifact `0.091` - - harmonic drift `0.343`, low/mid/high deltas `-1.083 / -2.067 / -0.053 dB` -- analyzer diagnostic run: `D:\test projects\os tests\runs\20260428_013900_seg_corner_boundary_analysis` - - detected `11` notes over the 4 s `pitchOrg` clip, with `2` corner-boundary notes reported. - - boundary kind counts were `hard_word_like=22`, confirming diagnostics are serialized; further product tuning should use manual vocal-boundary references before making corner splits more aggressive. - -### 2026-04-27: Entry Bridge Fix For Final Note-HQ Apply - -Purpose: -- fix the remaining edited-note entry stutter without moving the artifact back into the previous word. -- keep phrase/effective render context, but make audible entry ownership bridge-aware rather than forcing either a hard dry edge or a broad wet left shoulder. - -Implementation: -- final note-HQ compositing now chooses a direction-aware entry bridge. -- upward edits use a tight in-body bridge because the pre-note bridge regressed the upward onset metrics. -- downward edits may start audible bridge ownership up to `24 ms` before `note.startTime`; on the canonical case the bridge starts at `0.876009s`, then lands back on body timing by the end of the entry window. -- downshift bridge applies a local wet-read delay (`-21.995 ms` on `pitchOrg -4`), a bounded envelope correction (`+1.7 dB`), and a short dry transient preservation window (`10 ms`). -- diagnostics now include `noteHqEntryBridgeStartSec`, `noteHqEntryBridgeEndSec`, `noteHqEntryBridgeWetLagMs`, `noteHqEntryBridgeEnvelopeGainDb`, `noteHqEntryBridgeUsed`, and `noteHqEntryTransientDryPreservedMs`. -- the harness now protects only the pre-bridge tail, not the whole pre-body region, and writes entry-bridge audition WAVs. - -Measured runs: -- `pitchOrg +4`: `tmp_pitch_runs/20260428_004839_entry_bridge_v15_plus4` - - body/core pitch error `0.00 / 0.00 cents` - - entry bridge `0.900000s -> 0.916009s`, lag `0.0 ms`, gain `0.0 dB` - - entry lag `-0.125 ms` - - onset artifact `1.479`, onset derivative `1.087` - - protected pre-bridge residual `-172.823 dB` - - exit-next artifact `2.307` - - harmonic drift `0.379` -- `pitchOrg -4`: `tmp_pitch_runs/20260428_004708_entry_bridge_v15_minus4` - - body/core pitch error `0.00 / +11.90 cents` - - entry bridge `0.876009s -> 0.980000s`, lag `-21.995 ms`, gain `+1.7 dB` - - entry lag `+0.771 ms` - - onset artifact `1.598`, onset derivative `1.598` - - protected pre-bridge residual `-240.000 dB` - - exit-next artifact `0.091` - - harmonic drift `0.344` -- export parity: - - `tmp_pitch_runs/20260428_005155_entry_bridge_v15_plus4_export` - - `tmp_pitch_runs/20260428_005458_entry_bridge_v15_minus4_export` - - source-vs-export dry-tail residual is still informational because the mixer/export path is full-file, but preview/export body pitch and note-HQ product parity passed. - -Decision: -- keep this as a signal-chain/compositor correctness fix, not a reopened renderer-family experiment. -- product rule: final apply may use a tiny bounded pre-note bridge for best sound, but anything before `noteHqEntryBridgeStartSec` must remain original/dry. -- expected perceived match after this pass: about `91-94%` for `+4` and `89-92%` for `-4` versus the provided samples on this fixture. - -### 2026-04-27: Final Pre-Body Dry Ownership Fix For Note-HQ Apply - -Purpose: -- fix the remaining previous-word stutter without regressing the edited-note exit/next-note handoff. -- separate renderer context from audible commit ownership. - -Root cause: -- the renderer needs left-shoulder context for phase/envelope history, but committing that left shoulder as wet audio moved the stitching artifact backward into the previous word. -- the existing `preCommitArtifactScore` could miss this because it looked at a narrow boundary point rather than auditing the whole previous-word tail. - -Implementation: -- note-HQ still renders with phrase/effective context. -- final dry-protected compositing now starts audible wet ownership at `note.startTime`, not `effectiveStartTime`. -- `[effectiveStartTime, note.startTime)` remains original/dry. -- entry blends dry-to-wet inside the edited note body over `12 ms`. -- exit keeps the previous fix: wet-to-dry starts at `note.endTime - 12 ms` and releases through `effectiveEndTime`. -- diagnostics now include context range, audible commit range, pre-body dry-protected samples, entry fade ms, and exit lead-in ms. -- the harness now has a full pre-body ownership audit: - - `preBodyTailOriginalResidualDb` over `[noteStart - 80 ms, noteStart)`. - - `candidateActiveDifferenceStartSec`. - - `preBodyTailArtifactScore`. - - audition WAVs: `orig_pre_body_tail.wav`, `cand_pre_body_tail.wav`, `diff_pre_body_tail.wav`. -- the ownership audit uses `noteHqAudibleCommitStartSec`, not analysis-only body/core windows. - -Measured runs: -- `pitchOrg +4`: `tmp_pitch_runs/20260427_213815_pre_body_dry_v3_plus4` - - body/core pitch error `0.00 / 0.00 cents` - - pre-body residual `-170.878 dB` - - active difference start `0.900063s` - - onset artifact `1.706` - - exit-next artifact `2.307` - - harmonic drift `0.379` -- `pitchOrg -4`: `tmp_pitch_runs/20260427_213940_pre_body_dry_v3_minus4` - - body/core pitch error `0.00 / +11.90 cents` - - pre-body residual `-169.515 dB` - - active difference start `0.900063s` - - onset artifact `2.721` - - exit-next artifact `0.091` - - harmonic drift `0.352` -- export parity: - - `tmp_pitch_runs/20260427_214538_pre_body_dry_v4_plus4_export` - - `tmp_pitch_runs/20260427_214814_pre_body_dry_v4_minus4_export` - - note: source-vs-export dry residual is informational only because the mixer/export path changes the full file from time zero; export parity is judged against the note-HQ product. -- richer formant suite: - - `tmp_pitch_runs/pre_body_dry_v2_formant_richer/20260427_212751_pre_body_dry_v2_formant_richer` -- richer transient suite: - - `tmp_pitch_runs/pre_body_dry_v4_transient_richer/20260427_215055_pre_body_dry_v4_transient_richer` -- boundary suite: - - `tmp_pitch_runs/pre_body_dry_v2_boundary/20260427_212152_pre_body_dry_v2_boundary` - - primary real `pitchOrg` cases stay under the exit-next gate; the synthetic shortened-end stress case still warns with a high exit-next artifact. - -Decision: -- keep this as a signal-chain/compositor correctness fix, not a renderer-family experiment. -- product rule: render context may extend before the edited note, but final committed audio before `note.startTime` must remain original/dry. -- expected perceived match after this pass: about `89-92%` for `+4` and `87-90%` for `-4` versus the provided samples, with the remaining gap mostly from timbre/body-envelope match rather than word-break stitching. - -### 2026-04-27: Pitch-Only Signal-Chain Fix, Note-HQ Slicing Fix, And Transition-Shoulder Commit - -Purpose: -- fix the reported pitch-note change failures as signal-chain bugs: - - timbre getting thinner/fatter when pitch moves - - stutter/word-break just before or after the edited note -- stop accepting low-confidence note-HQ fallback silently -- make the regression harness catch formant/spectrogram drift on the real candidate slice - -Root causes found: -- several `SignalsmithShifter::process(...)` pitch-only callsites passed `detectedPitchHz` as the sixth argument, which is actually `formantRatios`; that could turn F0 Hz values into huge unintended formant factors. -- `note_hq` regression slicing treated every candidate like a window-local render, even when the app wrote a full-clip/phrase result; this let formant and boundary metrics inspect the wrong slice. -- note-HQ apply request construction dropped the note's own transition shoulders when there was no immediate neighbor, so the dry patch still committed only the body and could hard-switch at word edges. - -Implementation: -- added explicit `SignalsmithShifter` pitch-only entrypoints: - - `processPitchOnlyBase(..., ratios, detectedPitchHz)` - - `processPitchOnlyCe33Base(..., ratios)` -- routed pitch-only detected-F0 renders through `process(..., ratios, {}, detectedPitchHz)`, keeping explicit formant rendering on the non-empty `formantRatios` path only. -- changed note-HQ pitch-only final render to require phrase/full-context offline HQ unless `OPENSTUDIO_PITCH_ALLOW_NOTE_HQ_NATIVE_FALLBACK=1` is set. -- expanded note-HQ commit ownership to include effective transition shoulders; for the canonical `0.900s-1.550s` body the final diagnostic runs commit `0.860s-1.610s`. -- added preview segment entry/exit crossfade to avoid hard-switching cached chunks against the source clip. -- fixed the formant proxy peak scorer to order selected broad peaks by frequency before treating them as F1/F2 proxies. - -Measured runs: -- production HQ-required check: - - `20260427_135602_after_fix_pitchOrg_plus4_hq_required_missing_runtime` - - expected failure in this checkout: bundled Rubber Band executable exits with Windows status `0xC0000135` because dependent runtime DLLs are missing. - - result is now a hard failure, not a silent native fallback. -- follow-up runtime fix: - - added `tools/rubberband/sndfile.dll` from the bundled Python `libsndfile_x64.dll`, plus the matching VC runtime DLLs. - - `rubberband.exe --version` and `rubberband-r3.exe --version` now report `4.0.0`. - - app-path result `20260427_145800_rubberband_runtime_fixed_pitchOrg_plus4` used `rubberband_hq_phrase_hq` with `phraseHqExternalUsed=true` and `pitchRenderBackendVersion=4.0.0`. - - quality status is still not promoted: `20260427_145847_rubberband_runtime_fixed_pitchOrg_plus4` failed the strict formant gate at mid-band delta `+7.866 dB > 7.000 dB` and boundary timing `38.54 ms`. -- final debug-native `pitchOrg +4`: - - run: `20260427_135220_after_fix_pitchOrg_plus4_native_override_final` - - body/core pitch error: `0.00 / 0.00 cents` - - note mel/env: `6.804 dB / 1.258` - - formant body harmonic drift: `0.378` - - low/mid/high deltas: `-2.46 / +0.53 / -3.59 dB` - - core F1/F2 proxy drift: `-46.9 / +23.4 Hz` - - boundary timing error: `8.42 ms` - - onset artifact score: `1.77` - - spectrogram assets: `D:\test projects\os tests\runs\20260427_135220_after_fix_pitchOrg_plus4_native_override_final\spectrogram` -- final debug-native `pitchOrg -4`: - - run: `20260427_135413_after_fix_pitchOrg_minus4_native_override_final` - - body/core pitch error: `0.00 / +11.90 cents` - - note mel/env: `6.557 dB / 1.086` - - formant body harmonic drift: `0.469` - - low/mid/high deltas: `-0.41 / +0.83 / +1.12 dB` - - core F1/F2 proxy drift: `+46.9 / -70.3 Hz` - - boundary timing error: `25.38 ms` - - onset artifact score: `0.94` - - spectrogram assets: `D:\test projects\os tests\runs\20260427_135413_after_fix_pitchOrg_minus4_native_override_final\spectrogram` -- richer suites: - - formant richer suite passed all `6` cases: `20260427_135901_after_fix_formant_richer_native_override` - - transient richer suite passed all `8` cases: `20260427_141431_after_fix_transient_richer_native_override` - - export/preview parity passed for `pitchOrg +4`: `20260427_143420_after_fix_export_preview_parity_plus4_native_override` -- boundary suite: - - run: `20260427_142907_after_fix_boundary_pitchOrg_plus4_native_override` - - `start_earlier` and `start_later` passed. - - synthetic `end_earlier` failed the new hard gate: boundary timing `38.938 ms > 32 ms`. - - decision: keep this as a known strict stress failure, not a pass. - -Decision: -- this is a correctness fix to the existing signal chain and harness, not a reopened renderer-family experiment. -- keep `pitch_only_adaptive_selector` as the native diagnostic fallback. -- production note-HQ needs the external HQ backend/runtime fixed before claiming final HQ parity. - -### 2026-04-17: Root-Cause Research + ML Benchmark + Engine-v3 Feasibility - -Purpose: -- stop doing blind renderer experiments -- turn the remaining two product issues into evidence-backed causes -- quickly decide whether local ML restoration or a clean-sheet `engine-v3` branch is actually credible - -New tooling: -- `tools/pitch_root_cause_research.py` -- `tools/run-pitch-root-cause-research.ps1` -- `tools/run-pitch-ml-benchmark.ps1` -- `tools/pitch_engine_v3_feasibility.py` -- `tools/run-pitch-engine-v3-feasibility.ps1` - -Primary outputs: -- root-cause: - - `20260417_012542_pitch_root_cause_research` - - summary doc: - - `D:\test projects\os tests\runs\20260417_012542_pitch_root_cause_research\pitch_root_cause_research.md` -- ML benchmark: - - `20260417_003355_pitch_ml_benchmark` -- engine-v3 feasibility: - - `20260417_003355_engine_v3_feasibility` -- repo summary: - - `docs/pitch_root_cause_research_20260417.md` - -Root-cause verdicts: -- rank 1: - - transition ownership and boundary timing drift - - evidence: - - hard-case adaptive boundary timing still peaks around `18.92 ms` - - frozen engine-v2 still collapses at hard-case entry with entry mel `7.017` -- rank 2: - - mixed transient and first-voiced-cycle content is still being handled by one renderer family - - evidence: - - hard-case transient entry/exit max stayed about `1.614 / 6.723` - - engine-v2 still failed with transient bypass enabled -- rank 3: - - current formant preservation is too weak and too local to survive hard transitions - - evidence: - - adaptive formant drift remained around `0.364` on `pitchOrg` and `0.071` on `pitchTest` - - engine-v2 kept envelope correction on but still lost the hard case - -ML benchmark verdict: -- result: - - `blocked_no_stronger_restorer` -- environment: - - runtime ready `true` - - backend `cuda` -- candidate check: - - `voicefixer`: not installed - - `demucs`: not installed - - `audio_separator`: available but not suitable for note-local restoration - - `proxy_ml_restore_v1`: explicitly excluded and already rejected -- decision: - - do not reopen local ML restoration on another proxy - - only reopen once a materially stronger restorer is available - -Engine-v3 feasibility verdict: -- decomposition probe results: - - `pitchOrg_plus4`: score `0.511`, verdict `stop` - - `pitchTest_plus4`: score `0.505`, verdict `stop` -- decision: - - do not open a long `engine-v3` implementation branch from this probe - - only revisit `engine-v3` after defining a materially stronger decomposition and transition-pair ownership model - -Meaning for the program: -- current best renderer remains `pitch_only_adaptive_selector` -- engine-v2 remains frozen as comparison evidence only -- the unsolved product issues are now understood as architectural rather than just tuning leftovers -- next bounded action should be: - - stronger external/licensed or materially stronger ML benchmark, or - - a better pre-defined decomposition/transition design before any future `engine-v3` - -### 2026-04-16: Richer Fixture Close-Out Progress, `H3/H4` Closed For Current Canonical Corpus - -Purpose: -- stop leaving the remaining iteration budget tied to smoke-only fixture coverage -- close out richer transient and formant suites on the current canonical clip families -- tighten the scrub-suite truth so the only remaining mandatory gap is the real multi-note selection-change case - -What changed: -- added richer manifests: - - `tests/fixtures/pitch-regression/suites/transient_richer_suite.json` - - `tests/fixtures/pitch-regression/suites/formant_richer_suite.json` -- extended the scrub-suite plumbing to request a selection-change scenario when available -- ran richer scrub suites on both canonical clip families: - - `20260416_231821_pitchOrg_scrub_suite_richer_r1` - - `20260416_234516_pitchTest_scrub_suite_richer_r1` -- ran richer regression suites: - - transient: `20260416_231844_transient_suite_richer_r1` - - formant: `20260416_233426_formant_suite_richer_r1` - -Scrub-suite truth: -- first drag, repeated drag, and after-transport-cycle are all audible on both clip families -- representative scrub figures: - - `pitchOrg` - - start / stop latency about `26-28 ms` - - repeat stability `0.4699` - - last peak `0.1123` - - `pitchTestOrg` - - start / stop latency about `26-28 ms` - - repeat stability `0.7770` - - last peak `0.1313` -- verdict: - - `H1` is still only partial - - the suite now covers the major stopped-transport scrub scenarios - - but true selection-change is still unproven because the current scrub fixtures resolve to one-note jobs, so the added scenario does not yet exercise a real second-note handoff - -Transient richer-suite highlights: -- `pitchOrg +4` richer entry/exit runs: - - note mel about `7.095` - - onset artifact about `1.212` - - formant drift about `0.367` -- `pitchTestOrg +4` richer entry/exit runs: - - note mel about `4.915` - - entry artifact about `1.58-1.61` - - exit artifact about `6.36-6.72` - - boundary timing error about `11.60-18.92 ms` -- `pitchTestOrg -4` richer entry/exit runs: - - note mel about `5.743` - - exit artifact about `7.90-8.41` - - boundary timing error about `16.54-35.40 ms` -- verdict: - - `H3` is now complete for the current canonical local fixture corpus - - the suite confirms the remaining weakness is still boundary behavior, especially hard-case exits and downward guards - -Formant richer-suite highlights: -- `pitchOrg +4` body / transition formant runs: - - formant drift about `0.360-0.367` - - entry / exit artifact still about `6.59-7.05` -- `pitchTestOrg +4` body / transition formant runs: - - formant drift about `0.063-0.080` - - entry artifact about `1.58-1.77` - - exit artifact about `4.22-6.72` -- `pitchTestOrg -4` body formant run: - - formant drift `0.0569` - - note/body cents still off on the downward guard -- verdict: - - `H4` is now complete for the current canonical local fixture corpus - - the suite confirms formant drift is still materially worse on the easier `pitchOrg` family than on `pitchTestOrg`, while boundary artifacts still dominate the listening problem overall - -Current plan truth: -- remaining mandatory iterations: `1` -- remaining conditional iterations: `+2` -- the one mandatory item still open is: - - true multi-note `H1` scrub selection-change coverage - -### 2026-04-16: `H1` Scrub Selection-Change Close-Out - -Purpose: -- close the last remaining mandatory harness gap instead of leaving scrub selection-change as a half-wired scenario -- prove the app-path scrub job can exercise a real second-note handoff, not just repeat `first_drag` - -What changed: -- fixed scrub note-array flattening in `tools/run-ui-pitch-scrub-regression.ps1` -- added multi-note scrub fixtures: - - `tests/fixtures/pitch-regression/example_pitchOrg_scrub_multinote.json` - - `tests/fixtures/pitch-regression/example_pitchTest_scrub_multinote.json` -- added scrub debug/result fields in the app-path regression flow so the selection-change scenario could be verified directly - -Verification runs: -- direct debug run: - - `20260416_235624_pitchTest_scrub_selection_debug_r1` - - result: - - `scrubPreviewSelectionChangeAudible=true` - - scenario count `2` - - scenario names: - - `first_drag` - - `selection_change` -- full multi-note scrub suite: - - `20260416_235640_pitchTest_scrub_suite_multinote_r3` - - result: - - `first_drag`: audible `true` - - `repeated_drag`: audible `true` - - `after_transport_cycle`: audible `true` - - `selection_change`: audible `true` - - selection-change case reports: - - `scrubPreviewSelectionChangeAudible=true` - - start latency `27.2 ms` - - stop latency `27.6 ms` - - repeat stability `0.4174` - - last peak `0.0991` - -Verdict: -- `H1` is now complete for the current canonical local fixture corpus -- there are no mandatory harness-closeout iterations left -- the remaining work from here is no longer “unfinished implementation”; it is product-quality improvement work, plus the optional conditional phase-locking branch if we decide to open it - -Current plan truth: -- remaining mandatory iterations: `0` -- remaining conditional iterations: `+2` - -### 2026-04-16: Scrub Preview Natural-Segment Fix Landed, Boundary/Formant Work Still Pending - -Purpose: -- fix the user-facing scrub-preview failure instead of treating the older infrastructure-only pass as complete -- make drag preview audible on first drag and stop the tiny-loop tearing behavior -- keep the boundary/formant work explicitly marked as still incomplete - -What changed: -- scrub preview now serializes note/frame payloads across the native bridge for a more reliable native parse -- scrub extraction now prefers the clip's active audio source instead of the preserved original-file path -- scrub extraction now falls back to deriving note bounds from analyzed frames if note metadata arrives incomplete -- scrub preview now uses: - - a longer natural note-local voiced segment - - gain normalization - - repeat-stability telemetry - - preview armed / first-callback / first-drag-audible status flags - -Fresh scrub regression: -- run: `20260416_200227_pitchOrg_scrub_preview_r8` -- result: - - `scrubPreviewAudible=true` - - `scrubPreviewFirstDragAudible=true` - - start latency `26.9 ms` - - stop latency `26.8 ms` - - base pitch `365.17 Hz` - - loop duration `240.0 ms` - - last peak `0.1123` - - repeat stability `0.4699` - -Verdict: -- the scrub path is now materially closer to the intended product behavior and no longer falls back to the near-silent `40 ms / 55 Hz` path in the harness -- this closes the core `S1/S2` scrub implementation work and most of `S3` -- boundary tuning, formant tuning, the full boundary/transient/formant suites, and the full adaptive/engine-v2 tuning program are still not complete - -### 2026-04-16: Dedicated RAM Scrub Voice Implemented, First Full Engine-V2 Audio Pass Active - -Purpose: -- finish the remaining implementation work that the 2-tier pitch-editor program still needed -- replace the old “interactive preview piggyback” assumption with a true RAM scrub monitor path -- move `engine-v2` from diagnostics/scaffold territory into a real benchmarkable audio renderer - -What was implemented: -- dedicated scrub-preview pipeline - - native bridge entrypoints: - - `startPitchScrubPreview` - - `updatePitchScrubPreview` - - `stopPitchScrubPreview` - - scrub loops are extracted from the stable interior of the selected note, not the onset - - loops live entirely in RAM and are mixed directly by `PlaybackEngine` - - stereo clips are supported by deriving loop bounds from mono analysis and extracting matching multichannel audio -- first real full `engine-v2` audio pass: - - Signalsmith-based voiced-core render in the transition window - - cepstral envelope restoration on voiced-support frames - - spectral-flatness transient/unvoiced bypass mask - - residual carry reinjection from shared own-engine analysis - - transition compositor layered on top of the frozen adaptive selector output - -Primary truth-case results: -- `pitchOrg +4` - - adaptive benchmark: - - run: `20260416_115127_pitchOrg_plus4_note_hq_adaptive_r2` - - note mel `7.085` - - env `1.376` - - entry `7.078` - - exit `7.027` - - onset artifact `1.80` - - engine-v2 full audio: - - run: `20260416_124252_pitchOrg_plus4_note_hq_engine_v2_program_impl_r2` - - note mel `9.653` - - env `1.782` - - entry `10.430` - - exit `11.219` - - onset artifact `3.23` - - note/body/core cents `-18.72 / -18.72 / -37.23` - - `spectralEnvelopeCorrectionUsed=true` - - `engineV2Used=true` - - verdict: - - the new renderer is real, but it is still not keepable; it is pulling the easy truth case too far away from the adaptive benchmark -- `pitchTestOrg +4` - - adaptive benchmark: - - run: `20260416_115302_pitchTestOrg_plus4_note_hq_adaptive_r2` - - note mel `2.810` - - env `0.470` - - entry `1.530` - - exit `1.632` - - onset artifact `0.70` - - engine-v2 full audio: - - run: `20260416_124622_pitchTestOrg_plus4_note_hq_engine_v2_program_impl_r3` - - note mel `11.303` - - env `1.425` - - entry `8.389` - - exit `10.274` - - onset artifact `0.85` - - note/body/core cents `-17.94 / -17.94 / -36.45` - - `spectralEnvelopeCorrectionUsed=true` - - `engineV2Used=true` - - verdict: - - the hard truth case is still much worse than the frozen adaptive benchmark - -Decision: -- keep all code in place -- mark the family `Active Test / User Pending` -- do not remove the new scrub voice or engine-v2 code -- next tuning step must narrow engine-v2 engagement around the transition nucleus instead of letting it own such a wide region - -### 2026-04-16: Engine-V2 Transition-Nucleus Tightening - -Purpose: -- reduce the catastrophic full-note drift from the first engine-v2 audio pass -- keep the adaptive selector as the dominant carrier -- let engine-v2 touch only the onset-transition nucleus for upward note changes - -What changed: -- transition ownership moved from the wider island/body window to a much tighter note-entry window -- engine-v2 now adds deltas on top of the adaptive baseline instead of composing a broader replacement mix -- voiced-core wet level and residual carry were reduced -- transient preservation was made more dominant at the entry edge - -Primary truth-case results: -- `pitchOrg +4` - - run: `20260416_125615_pitchOrg_plus4_note_hq_engine_v2_program_impl_r4` - - result: - - note mel `7.323` - - env `1.419` - - entry mel `7.918` - - exit mel `7.027` - - onset artifact `1.66` - - note/body/core cents `0.00 / 0.00 / 0.00` - - verdict: - - much safer than the first full engine-v2 pass and exact on whole-note/body pitch, but still worse than adaptive overall because entry quality drifted and note/env did not improve enough -- `pitchTestOrg +4` - - run: `20260416_125615_pitchTestOrg_plus4_note_hq_engine_v2_program_impl_r4` - - result: - - note mel `3.250` - - env `0.536` - - entry mel `4.277` - - exit mel `1.632` - - onset artifact `1.95` - - note/body/core cents `0.00 / 0.00 / -18.32` - - verdict: - - far better than the original catastrophic engine-v2 attempt, but still clearly worse than the adaptive selector on the hard truth case - -Follow-up tuning: -- `r5` tightened wet ownership even further: - - `20260416_125930_pitchOrg_plus4_note_hq_engine_v2_program_impl_r5` - - `20260416_125930_pitchTestOrg_plus4_note_hq_engine_v2_program_impl_r5` -- result: - - metrics stayed effectively the same as `r4` - - this indicates the current engine-v2 topology is now failing in a stable way rather than exploding numerically - -Additional tightening: -- `r6` protected the first voiced cycles longer and pushed engine-v2 takeover deeper into the entry: - - `20260416_131617_pitchOrg_plus4_note_hq_engine_v2_program_impl_r6` - - `20260416_131617_pitchTestOrg_plus4_note_hq_engine_v2_program_impl_r6` -- result: - - `pitchOrg +4` - - note mel `7.313` - - env `1.365` - - entry mel `8.121` - - onset artifact `1.48` - - exact note/body/core cents `0 / 0 / 0` - - `pitchTestOrg +4` - - note mel `3.429` - - env `0.508` - - entry mel `5.278` - - onset artifact `3.81` - - note/body cents exact but core still `-18.32` -- verdict: - - the easy truth case became somewhat safer and preserved pitch/body exactly - - the hard truth case still loses badly on note-entry quality, so this compositor family is now plateauing as a waveform-correction overlay - -Current interpretation: -- implementation is complete enough to audition: - - dedicated RAM scrub preview exists - - engine-v2 voiced-core + cepstral envelope + transient bypass + residual carry exists -- the main audible issues are still not solved -- the remaining problem is now narrower: - - engine-v2 is no longer catastrophically unstable - - but its current transition compositor still makes the hard note entry worse than the adaptive selector - - the next meaningful move is likely a different engine-v2 role, such as using engine-v2 primarily as a formant/timbre correction layer on top of the adaptive carrier instead of as a waveform-correction overlay - -### 2026-04-16: `FAM-ENGINE-V2` `V2-1` Scaffold Started - -Purpose: -- begin the engine-v2 fallback program without risking the current best editor -- make the new branch fail-closed to `pitch_only_adaptive_selector` -- prove we can extract transition-native support signals before changing audible output - -What was implemented: -- new safe benchmark branch: - - `pitch_only_engine_v2_program` -- new engine-v2 diagnostics flowing through the native/app regression path: - - `engineV2Used` - - `engineV2FallbackUsed` - - `engineV2TransitionCount` - - `engineV2TransitionStartSec` - - `engineV2TransitionEndSec` - - `engineV2HarmonicSupportPeak` - - `engineV2ResidualSupportPeak` - - `engineV2EnvelopeSupportPeak` -- current `V2-1` behavior: - - render exactly the frozen adaptive-selector output - - compute transition/harmonic/residual/envelope scaffold diagnostics from `OwnPitchEngine` shared analysis - - report those diagnostics through the regression summaries - -Primary smoke runs: -- `pitchOrg +4` - - run: `20260416_104358_v2_scaffold_pitchOrg_plus4_smoke_r4` - - result: - - requested/actual branch: `pitch_only_engine_v2_program / pitch_only_engine_v2_program` - - output SHA: `F4BFBE23347CA853EEDE27E48E70F24DC5983AABE37498D02CD8F6D518B3EC72` - - `engineV2Used=true` - - transition count: `1` - - transition window: `0.090–0.830s` - - support peaks: harmonic `0.982`, residual `0.075`, envelope `2.379` - - verdict: - - safe and bit-identical to the frozen adaptive benchmark, with real scaffold engagement -- `pitchTestOrg +4` - - run: `20260416_104610_v2_scaffold_pitchTestOrg_plus4_smoke_r1` - - result: - - requested/actual branch: `pitch_only_engine_v2_program / pitch_only_engine_v2_program` - - output SHA: `1164BB74D7FC7EC87B163790DAF763E94B1B79812B7BE36F3FCD97966CFA740A` - - `engineV2Used=true` - - transition count: `1` - - transition window: `0.090–1.260s` - - support peaks: harmonic `0.982`, residual `0.075`, envelope `2.192` - - verdict: - - safe and bit-identical to the frozen adaptive benchmark on the harder truth case too - -Program state after `V2-1`: -- engine-v2 is now an active family rather than a placeholder -- the scaffold is fail-closed, measurable, and safe on both main `+4` truth clips -- this does not solve the stutter/formant problem yet; it just gives us a trustworthy base for `V2-2` - -### 2026-04-16: `FAM-ENGINE-V2` First `V2-2` Core-Blend Attempt Rejected - -Purpose: -- take one conservative audible step beyond the scaffold -- keep the engine-v2 branch on the same diagnostics/transition windows -- test whether a light own-engine voiced-core bleed-in could help without destabilizing the frozen adaptive output - -What was tried: -- a conservative stable-core blend on top of `pitch_only_engine_v2_program` -- the blend only allowed own-engine output into the analyzed voiced support region -- the rest of the branch still followed the adaptive-selector output - -Primary truth-case result: -- `pitchOrg +4` - - run: `20260416_105142_v2_2_pitchOrg_plus4_g1` - - result: - - note mel `7.085 -> 7.175` - - env `1.376 -> 1.421` - - entry mel `7.078 -> 7.321` - - exit mel `7.027 -> 7.418` - - onset artifact `1.80 -> 1.75` - - verdict: - - not keepable; the note, entry, and exit all drifted the wrong way for only a tiny onset gain -- `pitchTestOrg +4` - - run: `20260416_105142_v2_2_pitchTestOrg_plus4_g1` - - result: - - note mel `6.292 -> 8.192` - - env `1.130 -> 1.236` - - entry mel `1.530 -> 9.507` - - exit mel `1.632 -> 2.027` - - note cents `-125.96 -> -141.08` - - onset artifact `0.70 -> 1.13` - - verdict: - - clearly worse on the harder truth case - -Decision: -- rejected immediately under the stop-fast rule -- restored `pitch_only_engine_v2_program` to the safe `V2-1` scaffold after the trial - -Parity restore check after rollback: -- `pitchOrg +4` - - run: `20260416_110003_v2_scaffold_pitchOrg_plus4_parity_check_r6` - - result: - - SHA back to `F4BFBE23347CA853EEDE27E48E70F24DC5983AABE37498D02CD8F6D518B3EC72` - - still `engineV2Used=true` with transition/support diagnostics intact -- `pitchTestOrg +4` - - run: `20260416_110152_v2_scaffold_pitchTestOrg_plus4_parity_check_r2` - - result: - - SHA back to `1164BB74D7FC7EC87B163790DAF763E94B1B79812B7BE36F3FCD97966CFA740A` - - still `engineV2Used=true` with transition/support diagnostics intact - -Current engine-v2 state: -- scaffold remains active and safe -- first audible `V2-2` attempt is rejected -- the next `V2-2` candidate must be structurally different from a simple stable-core blend - -### 2026-04-15: Remaining Research Close-Out - -Purpose: -- close the remaining credible families cleanly instead of leaving half-open work items in the queue -- freeze the current best editor on measured evidence -- decide whether the next move is another local family or the engine-v2 fallback - -What was implemented: -- added an analysis-only regression harness: - - [run-ui-pitch-analysis-regression.ps1](c:/Users/srvds/Documents/Codes/Studio13-v3/tools/run-ui-pitch-analysis-regression.ps1) - - shared job-driver support in [pitchRegressionDriver.ts](c:/Users/srvds/Documents/Codes/Studio13-v3/frontend/src/utils/pitchRegressionDriver.ts) -- used that harness to close out `FAM-ANALYZER-PYIN` -- reran the four canonical truth cases on `pitch_only_adaptive_selector` to freeze it as the benchmark branch -- checked the repo for a stronger ML restorer than `ml_restore_proxy_v1` -- checked the remaining PV status against the actual local implementation inventory - -Analyzer close-out: -- `A1` direct-YIN + decoder on `pitchOrg` - - run: `20260415_210932_A1_pitchOrg_direct` - - result: - - notes detected / expected: `7 / 1` - - voiced frame ratio: `0.802` - - median voiced confidence: `0.974` - - matched expected note window: yes - - overlap ratio: `0.964` -- `A1` direct-YIN + decoder on `pitchTestOrg` - - run: `20260415_210932_A1_pitchTestOrg_direct` - - result: - - notes detected / expected: `6 / 1` - - voiced frame ratio: `0.676` - - median voiced confidence: `0.976` - - matched expected note window: yes - - overlap ratio: `0.796` -- `A2` FFT-YIN parity decision - - runs: - - `20260415_210932_A2_pitchOrg_fft` - - `20260415_210932_A2_pitchTestOrg_fft` - - result: - - `0` detected notes on both fixtures - - voiced frame ratio `0.000` on both fixtures - - verdict: - - direct-YIN + decoder is frozen as the kept analyzer path - - FFT-YIN is formally rejected-for-now and remains gated off - -Broader adaptive-selector validation: -- runs: - - `20260415_211004_closeout_pitchOrg_plus4_adaptive` - - `20260415_211004_closeout_pitchOrg_minus4_adaptive` - - `20260415_211004_closeout_pitchTestOrg_plus4_adaptive` - - `20260415_211004_closeout_pitchTestOrg_minus4_adaptive` -- result: - - `pitchOrg +4` - - note mel `7.085` - - env `1.376` - - entry `7.078` - - exit `7.027` - - onset artifact `1.80` - - `pitchOrg -4` - - note mel `6.623` - - env `1.102` - - entry `6.585` - - exit `7.475` - - onset artifact `2.80` - - `pitchTestOrg +4` - - note mel `2.810` - - env `0.470` - - entry `1.530` - - exit `1.632` - - onset artifact `0.70` - - `pitchTestOrg -4` - - note mel `3.505` - - env `1.024` - - entry `3.090` - - exit `1.835` - - onset artifact `3.64` -- verdict: - - `pitch_only_adaptive_selector` is now frozen as the benchmark branch for any future engine-v2 work - -Remaining-family close-out decision: -- `FAM-ML-RESTORATION` - - no materially stronger trained restorer exists locally beyond `ml_restore_proxy_v1` - - family is deferred behind engine-v2 -- `FAM-PVDR` - - no materially different stable implementation is ready locally beyond the rejected resample-plus-phase-lock attempt - - family stays closed unless a genuinely different design is prepared - -Program conclusion: -- remaining close-out work is complete -- the current product issues are still unresolved: - - stutter on note changes - - formant/timbre change on note changes -- the next serious step is no longer another local family patch -- the next serious step is the `FAM-ENGINE-V2` fallback program - -### 2026-04-15: `FAM-TRANSITION-HQ` Stop-Fast Verdict - -Purpose: -- try a proper note-change-specific HQ renderer instead of another full-note shell swap -- keep `pitch_only_adaptive_selector` frozen as the live working editor -- benchmark a transition-only shell/core/residual overlay on top of the adaptive output before even considering an ML finish - -What was implemented for the trial: -- temporary branch key: - - `pitch_only_transition_hq` -- temporary HQ-only transition overlay on top of `pitch_only_adaptive_selector`: - - preserve original shell content near the note-change edge - - blend in own-engine voiced core support only through the transition window - - reinject a small residual carry inside the transition core - - apply simple local envelope correction between adaptive and own-engine outputs -- reusable diagnostics were added to the regression/native result flow: - - `transitionHqUsed` - - `transitionHqFallbackUsed` - - `transitionStartSec` - - `transitionEndSec` - - `transitionTransientPeak` - - `transitionVoicedCorePeak` - - `transitionResidualPeak` - - `transitionEnvelopeCorrectionUsed` - -Truth-case results versus the current adaptive selector: -- `pitchOrg +4` - - adaptive control run: `20260415_185731_pitchOrg_plus4_adaptive_transition_cmp` - - transition HQ run: `20260415_185258_pitchOrg_plus4_transition_hq_m1` - - result: - - note mel `7.085 -> 7.395` - - env `1.376 -> 1.434` - - entry mel `7.078 -> 7.723` - - exit mel `7.027 -> 7.027` - - onset artifact `1.80 -> 1.59` - - note/body/core cents stayed exact at `0 / 0 / 0` - - `transitionHqUsed=true` - - transition peaks `0.829 / 0.840 / 0.073` - - verdict on this case: - - onset improved a little, but note, envelope, and entry all got worse -- `pitchTestOrg +4` - - adaptive control run: `20260415_185942_pitchTestOrg_plus4_adaptive_transition_cmp` - - transition HQ run: `20260415_185446_pitchTestOrg_plus4_transition_hq_m1` - - result: - - note mel `2.810 -> 4.084` - - env `0.470 -> 0.772` - - entry mel `1.530 -> 15.735` - - exit mel `1.632 -> 1.632` - - onset artifact `0.70 -> 3.73` - - core cents stayed `-18.32`, matching the underlying hard-case pitch issue - - `transitionHqUsed=true` - - transition peaks `0.574 / 0.840 / 0.073` - - verdict on this case: - - the overlay made the hard truth case dramatically worse - -Verdict: -- rejected after the first DSP iteration -- it failed the keep gate decisively: - - one case only improved the onset score while harming note/body entry quality - - the other primary case regressed heavily on note mel, envelope, entry, and onset artifact - - there was no justification to open the optional ML-finish stage - -Cleanup: -- removed the temporary `pitch_only_transition_hq` branch support from the renderer and harness after the verdict -- kept the transition diagnostics plumbing in place for future benchmark reporting if a materially different engine-v2 path needs similar measurements -- the live editor remains `pitch_only_adaptive_selector` - -### 2026-04-15: Research Synthesis Before The Next Renderer Family - -Purpose: -- stop guessing between "modern sounding" ideas and actually research the remaining families that are still credible -- separate what the repo already tried from what the literature still supports -- update the queue so the next work is evidence-backed instead of another near-duplicate shell variation - -Primary-source takeaways: -- median-filter HPSS is a real and useful separation technique, but it is a decomposition step, not a complete vocal pitch-editor renderer - - source: FitzGerald 2010 DAFx paper -- WSOLA is strong for local continuity and time-scale seams, but not a complete answer to vocal pitch/body/formant artifacts - - source: Verhelst and Roelands 1993 -- research-grade phase-vocoder work is still genuinely untried here - - the repo only tried a lightweight boundary-alignment variant - - sources: Laroche and Dolson 1999, and "Phase Vocoder Done Right" 2022 -- DDSP is the strongest engine-v2 style research direction if we accept a larger redesign - - source: DDSP 2020 -- the shallow-diffusion singing restoration paper is the closest direct match to the repo’s real product problem - - start from a usable pitch-shifted render - - then restore natural singing quality while preserving melody and timing - - source: Liu and Akama 2026 -- WORLD remains useful as a support decomposition for envelope/aperiodicity features, not as the final renderer target - - source: WORLD 2016 - -Decision from the literature pass: -- stop treating more seam-only or shell-only DSP tweaks as the highest-value next step -- keep the current best working editor (`pitch_only_adaptive_selector`) frozen as the live benchmark -- move the next queue to: - - `FAM-PVDR` - - `FAM-ML-RESTORATION` - - broader validation on `FAM-ADAPTIVE-SELECTOR` - -Repo note: -- the full research note and source list is now in [pitch_renderer_research_notes.md](c:/Users/srvds/Documents/Codes/Studio13-v3/docs/pitch_renderer_research_notes.md) - -### 2026-04-15: `FAM-ML-RESTORATION` Proxy Benchmark Verdict - -Purpose: -- execute the next research-backed direction without touching the live editor path -- keep `pitch_only_adaptive_selector` frozen as the base renderer -- test restoration-after-render as an offline benchmark, not a shipping path - -What was implemented for the trial: -- new offline benchmark script: [ml_restore_benchmark.py](c:/Users/srvds/Documents/Codes/Studio13-v3/tools/ml_restore_benchmark.py) -- regression harness integration in [run-ui-pitch-regression.ps1](c:/Users/srvds/Documents/Codes/Studio13-v3/tools/run-ui-pitch-regression.ps1) -- benchmark-only diagnostics recorded through the existing summary flow: - - `mlRestoreUsed` - - `mlRestoreModelId` - - `mlRestoreWindowSec` - - `mlRestoreBaseBranch` -- first proxy model id: - - `ml_restore_proxy_v1` -- `M1` proxy behavior: - - render with `pitch_only_adaptive_selector` - - restore only the note window offline - - use pYIN-derived F0 conditioning from the original window - - use original-window energy conditioning - - apply transient-emphasis blending near note entry - - apply harmonic spectral-envelope correction on the rendered candidate - -Truth-case results versus the current adaptive selector: -- `pitchOrg +4` - - adaptive control run: `20260415_142514_pitchOrg_plus4_adaptive_m1_cmp` - - ML restore run: `20260415_141959_pitchOrg_plus4_ml_restore_m1` - - result: - - note mel `7.085 -> 6.736` - - env `1.376 -> 1.291` - - entry mel `7.078 -> 6.716` - - exit mel `7.027 -> 6.629` - - onset artifact `1.80 -> 1.77` - - note/body/core cents stayed exact at `0 / 0 / 0` - - verdict on this case: - - promising on the easier upward truth case -- `pitchTestOrg +4` - - adaptive control run: `20260415_142514_pitchTestOrg_plus4_adaptive_m1_cmp` - - ML restore run: `20260415_142207_pitchTestOrg_plus4_ml_restore_m1` - - result: - - note mel `2.810 -> 3.004` - - env `0.470 -> 0.463` - - entry mel `1.530 -> 2.048` - - exit mel `1.632 -> 1.957` - - onset artifact `0.70 -> 1.06` - - body/core cents stayed `0.00 / -18.32`, matching the base renderer's pitch behavior - - verdict on this case: - - materially worse on the harder truth case even though envelope RMSE moved slightly in the right direction - -Verdict: -- rejected after `M1` -- it failed the equal-weight keep gate: - - the proxy restorer improved `pitchOrg +4` - - but it materially harmed `pitchTestOrg +4` on note mel, entry mel, exit mel, and onset artifact - - there is no justification for `M2` on this proxy family - -What we are keeping: -- the offline benchmark infrastructure stays in the repo -- the live editor remains frozen on `pitch_only_adaptive_selector` -- `FAM-ML-RESTORATION` should only reopen with: - - a trained restorer - - or a materially different restoration method than `ml_restore_proxy_v1` - -### 2026-04-15: `FAM-PVDR` Stop-Fast Verdict - -Purpose: -- execute the next DSP-first family after the ML benchmark stop -- keep `pitch_only_adaptive_selector` as the base editor behavior -- test a genuinely different long-note phase-vocoder overlay instead of the older lightweight boundary-alignment pass - -What was implemented for the trial: -- temporary branch key: - - `pitch_only_pvdr` -- temporary long-upward overlay on top of `pitch_only_adaptive_selector`: - - resample the long upward note region - - apply a custom phase-vocoder stretch back to original duration - - use identity-style peak phase locking around detected spectral peaks - - blend only into the stable long-upward core region -- reused existing phase-lock diagnostics: - - `phaseLockUsed` - - `phaseLockFallbackUsed` - - `phaseAlignedEntry` - - `phaseAlignedExit` - - `phasePeakCount` - -Truth-case results: -- `pitchOrg +4` - - run: `20260415_181645_pitchOrg_plus4_pvdr_p1` - - result: - - byte-identical to the adaptive selector - - SHA stayed `F4BFBE23347CA853EEDE27E48E70F24DC5983AABE37498D02CD8F6D518B3EC72` - - `phaseLockUsed=false` -- `pitchTestOrg +4` - - run: `20260415_181645_pitchTestOrg_plus4_pvdr_p1` - - result: - - note/body/core cents `-628.27 / -628.27 / -664.72` - - onset artifact exploded to `+200512709616936000` - - entry mel `337.641` - - exit mel `324.358` - - `phaseLockUsed=true` - - `phaseAlignedEntry=true` - - `phaseAlignedExit=true` - - `phasePeakCount=14710` - - verdict on this case: - - catastrophic failure on the harder long-upward truth case - -Verdict: -- rejected after `P1` -- stop-fast rule triggered immediately: - - the easy `+4` case did not improve - - the hard `+4` case failed catastrophically - - there was no reason to run the `-4` guards - -Cleanup: -- removed the temporary `pitch_only_pvdr` branch support from the renderer and harness -- kept the existing phase-lock diagnostics only -- the live editor remains `pitch_only_adaptive_selector` - -### 2026-04-15: `FAM-WSOLA-SEAM` Stop-Fast Verdict - -Purpose: -- try the first genuinely untried DSP-first family from the new queue -- keep the existing `pitch_only_adaptive_selector` routing intact and only replace seam handling at short-upward shoulders with a WSOLA-style similarity search -- compare directly against the current adaptive branch on all four canonical truth cases - -What was implemented for the trial: -- temporary branch key: `pitch_only_wsola_seam` -- temporary WSOLA-style shoulder pass layered on top of the adaptive selector: - - mono-sum similarity search - - short-upward notes only - - entry and exit shoulder realignment with a raised-cosine overlap -- reusable seam-search diagnostics added to the native/regression result flow: - - `wsolaUsed` - - `wsolaFallbackUsed` - - `wsolaEntryLagSamples` - - `wsolaExitLagSamples` - - `wsolaCorrelationScore` - -Truth-case results versus the current adaptive selector: -- `pitchOrg +4` - - adaptive control run: `20260415_122753_pitchOrg_plus4_adaptive_cmp` - - WSOLA run: `20260415_121916_pitchOrg_plus4_wsola_w1` - - WSOLA engaged: - - `wsolaUsed=true` - - entry/exit lag `326 / -349` samples - - correlation `0.667` - - result: - - note mel `7.085 -> 7.102` - - env `1.376 -> 1.377` - - entry mel `7.078 -> 7.314` - - exit mel `7.027 -> 7.151` - - onset artifact `1.80 -> 2.29` - - verdict on this case: - - the only case that changed got worse across the seam-sensitive metrics we care about -- `pitchOrg -4` - - adaptive control run: `20260415_122930_pitchOrg_minus4_adaptive_cmp` - - WSOLA run: `20260415_122117_pitchOrg_minus4_wsola_w1` - - result: - - byte-identical output to the adaptive selector - - SHA stayed `6BDCD513FAE4F2267564769D722FCF1FC48E69D981E4493F4E5D2BBBFFD027A0` -- `pitchTestOrg +4` - - adaptive control run: `20260415_123106_pitchTestOrg_plus4_adaptive_cmp` - - WSOLA run: `20260415_122251_pitchTestOrg_plus4_wsola_w1` - - result: - - byte-identical output to the adaptive selector - - SHA stayed `1164BB74D7FC7EC87B163790DAF763E94B1B79812B7BE36F3FCD97966CFA740A` -- `pitchTestOrg -4` - - adaptive control run: `20260415_123320_pitchTestOrg_minus4_adaptive_cmp` - - WSOLA run: `20260415_122513_pitchTestOrg_minus4_wsola_w1` - - result: - - byte-identical output to the adaptive selector - - SHA stayed `9B3E951F0D60DB8828A1CA82AC162A7987EE3C7BA4CCAACCF187B5E75BBD7F37` - -Verdict: -- rejected after `W1` -- it failed the stop-fast gate: - - no primary truth case improved - - the only engaged case (`pitchOrg +4`) regressed on note mel, entry, exit, and onset artifact - - the other three canonical cases stayed exactly on the adaptive baseline - -Cleanup: -- removed the temporary `pitch_only_wsola_seam` renderer branch support after the verdict -- kept the WSOLA/seam diagnostics in the regression/native result flow because they are reusable if a later seam-search family is tried in a meaningfully different form - -### 2026-04-15: `FAM-PHASE-LOCK-PV` Stop-Fast Verdict - -Purpose: -- try the next genuinely untried DSP-first family after the WSOLA stop-fast reject -- keep the existing `pitch_only_adaptive_selector` routing intact and only swap in a boundary-phase-aligned long-upward variant -- compare directly against the current adaptive branch on all four canonical truth cases - -What was implemented for the trial: -- temporary branch key: `pitch_only_phase_lock_pv` -- temporary adaptive-selector variant for long upward notes: - - same adaptive routing as the kept branch - - mono-sum boundary lag search against the simple `ce33` output - - boundary-aligned long-note replacement inside the long upward body span -- reusable phase-lock diagnostics added to the native/regression result flow: - - `phaseLockUsed` - - `phaseLockFallbackUsed` - - `phaseAlignedEntry` - - `phaseAlignedExit` - - `phasePeakCount` - -Truth-case results versus the current adaptive selector: -- `pitchOrg +4` - - adaptive control run: `20260415_122753_pitchOrg_plus4_adaptive_cmp` - - phase-lock run: `20260415_130513_pitchOrg_plus4_phase_lock_p1` - - result: - - byte-identical output to the adaptive selector - - SHA stayed `F4BFBE23347CA853EEDE27E48E70F24DC5983AABE37498D02CD8F6D518B3EC72` - - `phaseLockUsed=false` -- `pitchOrg -4` - - adaptive control run: `20260415_122930_pitchOrg_minus4_adaptive_cmp` - - phase-lock run: `20260415_130647_pitchOrg_minus4_phase_lock_p1` - - result: - - byte-identical output to the adaptive selector - - SHA stayed `6BDCD513FAE4F2267564769D722FCF1FC48E69D981E4493F4E5D2BBBFFD027A0` - - `phaseLockUsed=false` -- `pitchTestOrg +4` - - adaptive control run: `20260415_123106_pitchTestOrg_plus4_adaptive_cmp` - - phase-lock run: `20260415_130820_pitchTestOrg_plus4_phase_lock_p1` - - phase-lock engaged: - - `phaseLockUsed=true` - - `phaseAlignedEntry=false` - - `phaseAlignedExit=true` - - `phasePeakCount=114` - - result: - - note mel `2.81 -> 3.003` - - env `0.47 -> 0.479` - - entry mel `1.53 -> 2.278` - - exit mel `1.632 -> 1.940` - - onset artifact `0.705 -> 0.66` - - verdict on this case: - - selective boundary alignment was real, but it still made the hard long-upward truth case worse where the keep gate matters -- `pitchTestOrg -4` - - adaptive control run: `20260415_123320_pitchTestOrg_minus4_adaptive_cmp` - - phase-lock run: `20260415_131038_pitchTestOrg_minus4_phase_lock_p1` - - result: - - byte-identical output to the adaptive selector - - SHA stayed `9B3E951F0D60DB8828A1CA82AC162A7987EE3C7BA4CCAACCF187B5E75BBD7F37` - - `phaseLockUsed=false` - -Verdict: -- rejected after `P1` -- it failed the stop-fast gate: - - three canonical cases stayed exactly on the adaptive baseline - - the only engaged case (`pitchTestOrg +4`) materially regressed on note mel and entry mel - - the slight onset-artifact gain was not enough to offset the note/entry loss - -Cleanup: -- removed the temporary `pitch_only_phase_lock_pv` renderer branch support after the verdict -- kept the phase-lock diagnostics in the regression/native result flow because they are reusable if a later, materially different phase-coherent family is tried - -### 2026-04-15: `FAM-HPSS-MEDIAN` Stop-Fast Verdict - -Purpose: -- retry HPSS in a genuinely different form from the rejected heuristic shell -- use a real STFT median-filter separation idea instead of the old voiced-mask proxy -- keep the current adaptive selector as the base render and only replace short-upward note regions with a median-shell recombine - -What was implemented for the trial: -- temporary branch key: `pitch_only_hpss_median` -- temporary median-shell pass layered on top of the adaptive selector: - - mono-sum STFT analysis - - horizontal median across time and vertical median across frequency - - scalar harmonic/transient weighting projected back to the time domain - - original signal as the transient side, adaptive output as the harmonic side - - short upward notes only -- reused HPSS diagnostics in the regression flow: - - `hpssUsed` - - `hpssFallbackUsed` - - `harmonicMaskPeak` - - `aperiodicMaskPeak` - - `spectralEnvelopeCorrectionUsed` - -Truth-case results versus the current adaptive selector: -- `pitchOrg +4` - - adaptive control run: `20260415_122753_pitchOrg_plus4_adaptive_cmp` - - median HPSS run: `20260415_132239_pitchOrg_plus4_hpss_median_hm1` - - median HPSS engaged: - - `hpssUsed=true` - - harmonic/aperiodic peaks `0.868 / 0.554` - - result: - - note mel `7.085 -> 7.432` - - env `1.376 -> 1.279` - - entry mel `7.078 -> 7.445` - - exit mel `7.027 -> 6.742` - - onset artifact `1.80 -> 1.48` - - note/body/core cents `0 / 0 / 0 -> -55.55 / -55.55 / -55.55` - - verdict on this case: - - the onset side improved again, but the body pitch and note quality collapsed, so this is not a keepable trade -- `pitchOrg -4` - - adaptive control run: `20260415_122930_pitchOrg_minus4_adaptive_cmp` - - median HPSS run: `20260415_132408_pitchOrg_minus4_hpss_median_hm1` - - result: - - byte-identical output to the adaptive selector - - SHA stayed `6BDCD513FAE4F2267564769D722FCF1FC48E69D981E4493F4E5D2BBBFFD027A0` -- `pitchTestOrg +4` - - adaptive control run: `20260415_123106_pitchTestOrg_plus4_adaptive_cmp` - - median HPSS run: `20260415_132536_pitchTestOrg_plus4_hpss_median_hm1` - - result: - - byte-identical output to the adaptive selector - - SHA stayed `1164BB74D7FC7EC87B163790DAF763E94B1B79812B7BE36F3FCD97966CFA740A` -- `pitchTestOrg -4` - - adaptive control run: `20260415_123320_pitchTestOrg_minus4_adaptive_cmp` - - median HPSS run: `20260415_132746_pitchTestOrg_minus4_hpss_median_hm1` - - result: - - byte-identical output to the adaptive selector - - SHA stayed `9B3E951F0D60DB8828A1CA82AC162A7987EE3C7BA4CCAACCF187B5E75BBD7F37` - -Verdict: -- rejected after `Hm1` -- it failed the stop-fast gate: - - the only engaged case (`pitchOrg +4`) regressed on note mel, entry mel, and body pitch - - the harder `pitchTestOrg +4` case still did not engage - - there is no basis for opening `FAM-HPSS-MEDIAN-SF` on top of this shell - -Cleanup: -- removed the temporary `pitch_only_hpss_median` renderer branch support after the verdict -- kept the HPSS diagnostics in the regression/native result flow because they remain reusable for any future materially different HPSS family - -### 2026-04-15: `FAM-HPSS-SHELL` Stop-Fast Verdict - -Purpose: -- test a genuinely new vertical split family instead of another onset/body handoff -- keep transient/noise content original and send only the harmonic body through a pitched layer -- compare directly against the kept adaptive selector on all four canonical truth cases - -What was implemented for the trial: -- temporary branch key: `pitch_only_hpss_shell` -- temporary HPSS-style island composition on top of the current adaptive selector base: - - original signal for transient/noise-dominant regions - - pitched harmonic layer only in stable voiced regions - - outer-island-only splices -- temporary HPSS diagnostics in the regression flow: - - `hpssUsed` - - `hpssFallbackUsed` - - `harmonicMaskPeak` - - `aperiodicMaskPeak` - - `spectralEnvelopeCorrectionUsed` - -Truth-case results: -- `pitchOrg +4` - - run: `20260415_110453_pitchOrg_plus4_hpss_shell_h1` - - HPSS engaged: `hpssUsed=true` - - onset artifact improved `1.810 -> 1.390` - - but note/body quality collapsed: - - note mel `6.209 -> 10.066` - - env `0.961 -> 2.028` - - entry mel `6.928 -> 10.996` - - exit mel `6.076 -> 15.137` - - verdict on this case: - - same old pattern again: onset-side gain, unacceptable body loss -- `pitchTestOrg +4` - - run: `20260415_110628_pitchTestOrg_plus4_hpss_shell_h1` - - HPSS never engaged: - - `hpssUsed=false` - - output stayed on the existing adaptive-selector result - - SHA `1164BB74D7FC7EC87B163790DAF763E94B1B79812B7BE36F3FCD97966CFA740A` -- `pitchOrg -4` - - run: `20260415_110628_pitchOrg_minus4_hpss_shell_h1` - - note mel regressed to `6.623` - - env `1.102` - - core cents drifted to `+11.90` -- `pitchTestOrg -4` - - run: `20260415_110628_pitchTestOrg_minus4_hpss_shell_h1` - - note mel `3.505` - - onset artifact `3.64` - - not safe enough to justify continuing the family - -Verdict: -- rejected after `H1` -- it failed the stop-fast gate: - - the easy upward case improved only the onset metric while destroying note/body quality - - the harder upward truth case did not engage at all - - the `-4` guards did not stay clean enough - -Cleanup: -- removed the temporary `pitch_only_hpss_shell` renderer branch support after the verdict -- kept the HPSS diagnostic fields in the regression/native result flow because they are reusable if a later, structurally different vertical-split family is tried - -### 2026-04-15: `FAM-ANALYZER-PYIN` Implementation Start - -Purpose: -- make the editor-side monophonic pitch analysis the top active family -- stop pretending we already have pYIN when the repo only had basic YIN-style trackers - -What was already true before this change: -- `PitchAnalyzer` already existed as an offline monophonic editor analyzer -- `PitchDetector` already existed as a live YIN-style tracker -- neither path had: - - true pYIN candidate generation - - temporal decoding - - FFT-accelerated YIN - -What landed in this pass: -- `PitchAnalyzer` now uses: - - Hann windowing - - FFT-derived YIN difference calculation - - CMNDF candidate extraction - - per-frame voiced/unvoiced probability - - lightweight Viterbi-style decoding across frames -- external editor-facing result shape stayed the same: - - frame `frequency` - - frame `midiNote` - - frame `confidence` - - frame `rmsDB` - - frame `voiced` - - existing note segmentation output -- `PitchDetector` comments were corrected so the live tracker is described honestly as YIN-style, not pYIN - -Current status: -- implemented and compiling -- now validated in staged form on the real fixture clips: - - safe default is the direct Hann-windowed YIN difference path plus the new multi-candidate / voiced-probability / Viterbi-style decoder - - FFT-derived difference is still implemented, but remains behind `OPENSTUDIO_ANALYZER_USE_FFT_YIN=1` until parity is proven -- this family is now the top active queue item in the master map - -Real fixture validation: -- `pitchOrg +4` using local analyzer fallback and the correct short-note fixture: - - run: `20260415_100627_pitchOrg_plus4_adaptive_selector_analyzer_pyin_safe_g3` - - note/body/core cents `0.00 / 0.00 / 0.00` - - note mel `7.085` - - entry mel `7.078` - - exit mel `7.027` - - output SHA `F4BFBE23347CA853EEDE27E48E70F24DC5983AABE37498D02CD8F6D518B3EC72` -- first `pitchTest +4` validation looked broken, but that run used the wrong note fixture (`example_plus4_notes.json`, the older `pitchOrg` timing), so it is not a valid analyzer verdict for the later `pitchTest` note family -- `pitchTest +4` using local analyzer fallback and the correct clip-specific fixture: - - run: `20260415_101036_pitchTestOrg_plus4_adaptive_selector_analyzer_pyin_safe_g4` - - note/body/core cents `-17.94 / 0.00 / -18.32` - - note mel `5.158` - - entry mel `1.530` - - exit mel `1.632` - - output SHA `1164BB74D7FC7EC87B163790DAF763E94B1B79812B7BE36F3FCD97966CFA740A` - -FFT probe status: -- explicit FFT-YIN probe on `pitchOrg +4` is still not safe - - run: `20260415_101249_pitchOrg_plus4_adaptive_selector_analyzer_fft_probe_g4` - - note/body/core cents `-386.31 / -386.31 / -401.30` - - note mel `8.072` - - output SHA `019D3F5341440BE010F2B3E5E620AE5878CEAFE5C03364FCBED7DBCC5A4BDDC3` -- verdict: - - keep FFT-derived YIN staged behind env until parity work is done - - keep the direct YIN difference path as the active safe default for the new decoder stack - -Pitch-editor scope change: -- the pitch editor is now intentionally mono-only -- stereo vocal clips remain supported: - - editor analysis mixes the clip to mono for contour extraction - - correction still renders against the full multichannel clip in the backend -- the old polyphonic mode UI path was removed from the pitch editor surface so the product now matches the monophonic editor target directly - -Immediate next action: -- compare note segmentation quality and contour stability against the previous analyzer behavior on `pitchOrg` and `pitchTestOrg` -- only then decide whether the staged analyzer upgrade can become the new baseline - -### 2026-04-14: Post-PSOLA Continuation Checks - -#### Path E1, Iteration 1: Voiced-Tail Continuation Body -- Change: - - tried a voiced-tail continuation source for the short-upward body, seeded from a small epoch window around the entry anchor instead of the full PSOLA body path -- Result: - - `pitchOrg +4` - - failed closed to the trusted `r6` baseline - - output SHA stayed `055B3300041A8B5DE93C462C7E18F180BF7740D0134B0C05B6D255A6A36B46BD` - - body replacement used/fallback `false / true` - - `pitchTest +4` - - also stayed at the same shipping-control output - - output SHA stayed `1A9B12D8EA57EFEAC7B3505735BC9D4DA5F666D98703DA1333549314719CC043` -- Verdict: - - stopped early after the first iteration - - no improvement on the active target and the guard stayed flat, so the path did not earn its second slot - -#### Path E2, Iteration 1: Early Continuation Handoff Into Existing Core -- Change: - - narrowed the continuation idea to the fragile early body only - - replacement region would cover only the first continuation span after voiced entry, then hand into the existing hybrid core - - replacement blending was changed to sit on top of the legacy/own base mix so the handoff could blend into the live core instead of only back into dry legacy -- Result: - - `pitchOrg +4` - - again failed closed to the trusted `r6` baseline - - output SHA stayed `055B3300041A8B5DE93C462C7E18F180BF7740D0134B0C05B6D255A6A36B46BD` - - body replacement used/fallback `false / true` - - `pitchTest +4` - - also remained unchanged on the shipping-control SHA - - output SHA stayed `1A9B12D8EA57EFEAC7B3505735BC9D4DA5F666D98703DA1333549314719CC043` -- Verdict: - - stopped early after the first iteration - - the architecture never engaged on the active target, so there was no justification to spend the second slot - -#### Continuation-Family Conclusion -- Both post-PSOLA continuation families were exhausted under the stop-fast rule. -- Neither one engaged successfully on `pitchOrg +4`. -- The active renderer was restored to the trusted `HS-4 / r6` baseline by disabling body replacement again. -- Current live truth remains: - - `pitchOrg +4` - - note mel `6.209` - - env `0.961` - - entry mel `6.928` - - exit mel `6.076` - - onset artifact `1.810` - - `pitchTest +4` - - note mel `3.481` - - env `0.623` - - entry mel `2.484` - - exit mel `7.662` - - onset artifact `3.819` - -### 2026-04-15: Dormant Branch Truth Sweep - -Purpose: -- finish the option-map analysis for every callable renderer branch already present in the app-path runner -- stop guessing which archived branches might still matter and measure them directly on the same `+4` truth cases - -#### `branch_simple_ce33` -- Result: - - `pitchOrg +4` - - note mel `7.810` - - env `0.883` - - body/core cents `0.00 / 0.00` - - entry mel `7.996` - - exit mel `9.295` - - onset artifact `2.50` - - SHA `29313710B708E393623C18128948110C62375473DC95D46B5F18E1DBF7FB939A` - - `pitchTest +4` - - note mel `3.044` - - env `0.486` - - body cents `0.00` - - entry mel `1.660` - - exit mel `6.378` - - onset artifact `0.72` - - SHA `70A4507DC97B4CC3C630B3DC418798B58E0F2539BF8C6D4EE7F2CEAB012189EC` -- Verdict: - - not the best single overall control because it loses clearly to `CTRL-R6` on `pitchOrg +4` - - but it is the strongest measured standalone result so far on `pitchTest +4` - - keep as a secondary benchmark and harvest candidate - -#### `branch_current_advanced` -- Result: - - `pitchOrg +4` - - note mel `7.329` - - env `0.827` - - body/core cents `-37.23 / -37.23` - - entry mel `7.752` - - exit mel `9.438` - - onset artifact `1.94` - - SHA `90D2D3638B7F1DF5655AD1A9871A3DCEDAC611E5198B285B5039B8583CD7DF45` - - `pitchTest +4` - - note mel `8.784` - - env `1.190` - - body/core cents `-35.70 / -36.45` - - entry mel `5.908` - - exit mel `6.373` - - onset artifact `2.38` - - SHA `E562BC9377B0BFB51B0D139CC532FEDED240B2D636D154166BAC0B1652B1E703` -- Verdict: - - clearly below both controls on truth-case pitch accuracy and note/body quality - - treat as rejected standalone archived branch - -#### `pitch_only_psola_core` -- Result: - - `pitchOrg +4` - - note mel `11.053` - - env `1.640` - - body/core cents `-55.55 / -55.55` - - entry mel `7.448` - - exit mel `8.976` - - onset artifact `1.94` - - SHA `C6E61F58A3A99B41FAE27557AEE69F61EEAFFF925AE72332A2ACF21D54DEBAD8` - - `pitchTest +4` - - note mel `17.536` - - env `2.547` - - body/core cents `-104.96 / -124.35` - - entry mel `6.305` - - exit mel `6.329` - - onset artifact `2.38` - - SHA `A59B8C6305E31D95584C15214B1712F98BFF90B2E764FACA5A69F80A9DF61E6F` -- Verdict: - - catastrophic truth-case miss as a standalone branch - - reject as standalone archived core - -#### `pitch_only_model_core` -- Result: - - `pitchOrg +4` - - note mel `10.955` - - env `1.626` - - body/core cents `-37.23 / -37.23` - - entry mel `7.421` - - exit mel `8.971` - - onset artifact `1.94` - - SHA `E2D3A690881BB489EEC0B7409FD2D60EA87F1AE2FE96527F01DFC89908F57DE8` - - `pitchTest +4` - - note mel `17.397` - - env `2.530` - - body/core cents `-104.96 / -124.35` - - entry mel `6.295` - - exit mel `6.330` - - onset artifact `2.38` - - SHA `FF455AB0B313826E75D249BBF69CEB61F740D741B85BF0DB06771CEAC73289BC` -- Verdict: - - also a strong standalone rejection on the truth cases - - no reason to keep it as an active standalone contender - -#### `pitch_only_own_engine` -- Result: - - `pitchOrg +4` - - note mel `6.316` - - env `1.044` - - body/core cents `0.00 / 0.00` - - entry mel `7.783` - - exit mel `6.407` - - onset artifact `1.59` - - SHA `0A72E7027F69E85741E24AC1CC7CBD3958E263F0ED7FA9F4CEC49EA3D5202EE6` - - `pitchTest +4` - - note mel `12.164` - - env `1.667` - - body/core cents `0.00 / -18.32` - - entry mel `17.634` - - exit mel `13.403` - - onset artifact `3.99` - - SHA `96397D63A5F3AD6F835A80605E9FAF0615947D80E515F5A5F02F844A21AC4146` -- Verdict: - - interesting on the easier `pitchOrg +4` clip because it keeps exact body pitch and improves onset artifact versus `CTRL-R6` - - not viable as a standalone editor because `pitchTest +4` collapses badly - - harvest only if a later v2 needs own-engine core behavior on easier upward notes - -#### `formant_only_own_engine` and `pitch_plus_formant_own_engine` -- Result: - - both matched `branch_current_advanced` bit-for-bit on both `+4` truth cases - - `pitchOrg +4` SHA `90D2D3638B7F1DF5655AD1A9871A3DCEDAC611E5198B285B5039B8583CD7DF45` - - `pitchTest +4` SHA `E562BC9377B0BFB51B0D139CC532FEDED240B2D636D154166BAC0B1652B1E703` -- Verdict: - - treat them as archived advanced/formant variants, not distinct truth-case winners - - reject them as standalone candidates - -#### Dormant-Branch Sweep Conclusion -- The callable archived branch set is now mapped much more clearly: - - strongest `pitchTest +4` branch: `branch_simple_ce33` - - strongest kept overall experimental control: `CTRL-R6` - - strongest easier-clip own-engine result: `pitch_only_own_engine` on `pitchOrg +4` -- The branches that are still worth keeping around as references are: - - `CTRL-SHIP` - - `CTRL-R6` - - `branch_simple_ce33` -- The rest of the dormant callable branches are no longer credible standalone pitch-editor candidates on the truth cases. -- Next queue consequence: - - the callable archived branch analysis is now complete enough to justify moving the top queue item to `FAM-V2-SYNTH-CORE` - - that family is now tracked in the master map as the next upward v2 attempt instead of continuing any exhausted handoff or archived-core loop - -### 2026-04-15: `FAM-V2-SYNTH-CORE` Stop-Fast Check - -Purpose: -- test one new upward `v2` family that was still structurally different from the exhausted handoff and island-core loops -- specifically: - - island shell - - directly synthesized voiced core - - explicit residual layer - - outer-only shell behavior - -Implementation note: -- branch name used for the single iteration was `pitch_only_synth_core` -- the branch code was removed immediately after the verdict, per the prune-on-reject workflow - -#### `G1` -- Result: - - `pitchOrg +4` - - note mel `8.135` - - env `1.517` - - whole/body/core cents `-408.27 / 0.00 / 0.00` - - entry mel `10.468` - - exit mel `13.781` - - onset artifact `1.39` - - island native used/fallback `true / false` - - SHA `247BC954F14147C9ABE0B12F04C20E907BD94C9FD400A5D99905CA995C44E572` - - `pitchTest +4` - - failed closed back to the control output - - note mel `3.481` - - env `0.623` - - entry mel `2.484` - - exit mel `7.662` - - onset artifact `3.82` - - island native used/fallback `false / false` - - SHA `1A9B12D8EA57EFEAC7B3505735BC9D4DA5F666D98703DA1333549314719CC043` -- Verdict: - - decisive reject after the first iteration - - onset improved again on `pitchOrg +4`, but body/entry/exit and whole-note pitch behavior regressed too much - - no improvement and no engagement on `pitchTest +4` - - no `G2` - - branch code removed immediately - -### 2026-04-15: `FAM-ADAPTIVE-SELECTOR` - -Purpose: -- stop forcing one renderer family to solve both truth clips by itself -- harvest the two strongest measured behaviors we now have: - - `CTRL-R6` for short upward notes like `pitchOrg +4` - - `branch_simple_ce33` for long upward notes like `pitchTest +4` - -Implementation: -- new branch: `pitch_only_adaptive_selector` -- rule for this first family: - - short upward notes -> use `CTRL-R6` behavior - - long upward notes -> use `branch_simple_ce33` - - downward notes remain unchanged on the current baseline behavior - -#### `G1` -- Result: - - `pitchOrg +4` - - note mel `6.210` - - env `0.961` - - entry mel `6.978` - - exit mel `6.029` - - onset artifact `1.80` - - SHA `E039C0AF68908D14ECC2BC17A6D335DDDA7C713B6DEFE10BF4D1C59799D3B0E0` - - `pitchTest +4` - - note mel `7.300` - - env `0.840` - - body/core cents `-35.70 / -54.39` - - entry mel `5.911` - - exit mel `6.375` - - onset artifact `2.38` - - SHA `4E0F29A3472F1B0A51A9B5D7D3FB8050DF374FB32034DD20C3049E143192FCAB` -- Diagnosis: - - the “simple” sub-render inside the selector was not actually using the real `branch_simple_ce33` path - - so `G1` was not a fair test of the harvested selector idea - -#### `G2` -- Fix: - - replaced the selector’s long-up simple source with the true whole-file `SignalsmithShifter::processPitchOnlyCe33Base` path used by standalone `branch_simple_ce33` -- Result: - - `pitchOrg +4` - - note mel `6.210` - - env `0.961` - - entry mel `6.978` - - exit mel `6.029` - - onset artifact `1.80` - - SHA `E039C0AF68908D14ECC2BC17A6D335DDDA7C713B6DEFE10BF4D1C59799D3B0E0` - - `pitchTest +4` - - note mel `3.095` - - env `0.493` - - body/core cents `0.00 / -18.32` - - entry mel `1.530` - - exit mel `7.350` - - onset artifact `0.70` - - SHA `F52F4B97CACE7E048767F3243C7DAFD949FD08F2491DDC1CB649B6B8E9B8F24E` -- Guard runs: - - `pitchOrg -4` - - exact same trusted control SHA `6E73A2F0FA1E053488C65DD801D97F1F30564F0684DE076924CF7CCF2C4394AE` - - `pitchTest -4` - - exact same trusted control SHA `1B6A789C4D36AB0D330CD043E41A72EB27B858120DF34B271293764A197F909C` -- Verdict: - - keep - - this is the first family that improved `pitchTest +4` materially without materially harming `pitchOrg +4` - - downward guards remained unchanged, so the branch is safe enough to freeze as the new experimental base for the next queue item - -### 2026-04-15: Initial `-4` Support Scan For The Next Queue - -Purpose: -- start the downward-family work on top of the newly kept adaptive branch -- check whether the archived support branches already contain an obvious `-4` winner we should harvest before designing a new downward-specific hybrid - -#### `branch_simple_ce33` -- Result: - - `pitchOrg -4` - - note mel `8.397` - - env `3.882` - - onset artifact `2.51` - - SHA `C4BCE0BE13F3ED88EEC2B716ECD1C4328244AA57BD884D9927A6976F5815C325` - - `pitchTest -4` - - note mel `3.931` - - env `3.401` - - note/body cents `-5.74 / -5.74` - - entry mel `3.098` - - exit mel `6.106` - - onset artifact `1.07` - - SHA `2732128716D791837D24CD6328B4FD8FA0E4476FC2940EB12FFB4A9FD2A1A600` -- Verdict: - - not a standalone downward winner - - interesting for onset/exit behavior on `pitchTest -4`, but the envelope error is too large to promote directly - -#### `pitch_only_own_engine` -- Result: - - `pitchOrg -4` - - note mel `5.560` - - env `1.544` - - note/body cents `+11.90 / +11.90` - - exit mel `7.135` - - onset artifact `2.79` - - SHA `451786635BD29F262125F7A93355D9267B08CDD8FDA2E8567029FA300C3111AD` - - `pitchTest -4` - - note mel `7.727` - - env `1.049` - - entry mel `10.313` - - exit mel `13.998` - - onset artifact `4.01` - - SHA `88EA8E2FE77F77E4E316B49D362FEC2599C35E48EBA096C40F100F11794978E7` -- Verdict: - - interesting only as a possible easy-clip downward body trait - - not a viable standalone `-4` path because it collapses badly on `pitchTest -4` - -#### Downward-Scan Conclusion -- There is no immediate archived branch we can promote as the downward answer. -- The adaptive selector remains frozen as the active experimental base. -- The next downward family should be a new hybrid that: - - keeps the adaptive branch unchanged for `+4` - - borrows only narrowly proven `-4` traits - - does not replace the whole renderer with either `ce33` or standalone own-engine on downward notes - -### 2026-04-15: `FAM-ADAPTIVE-SELECTOR` Downward Harvest Keep - -Purpose: -- take the best narrow `-4` trait from the support scan -- land it inside the already-kept `pitch_only_adaptive_selector` branch instead of inventing another standalone renderer family - -#### Cleanup Before The Real Test -- I first tried adding a separate branch key for the downward selector experiment. -- That path was not trustworthy: - - the harness label was correct - - but the app still reported `requested / actual = branch_hybrid_reset / branch_hybrid_reset` -- Instead of burning more time on branch-key plumbing, I removed that dead `_down` key and folded the downward trial directly into the working `pitch_only_adaptive_selector` branch. - -#### Iteration G3: Light Short-Downward Own-Engine Support -- Change: - - kept the adaptive selector's upward policy unchanged: - - `CTRL-R6` on short upward notes - - `branch_simple_ce33` on long upward notes - - added one bounded downward trait: - - light own-engine contribution on shorter edited downward notes - - protected entry and exit shoulders - - max own weight `0.24` -- Result: - - `pitchOrg -4` - - note mel `7.405 -> 6.570` - - env `1.094 -> 1.100` - - entry mel `6.902 -> 6.571` - - exit mel `8.778 -> 7.565` - - onset artifact `2.743 -> 2.802` - - SHA `1D75C81C2FC23779F7B07114A30B72B8564E43A638A28276244C84DFEE91F46D` - - `pitchTest -4` - - remained byte-identical to the prior adaptive baseline: - - SHA `1B6A789C4D36AB0D330CD043E41A72EB27B858120DF34B271293764A197F909C` - - note mel `3.775` - - env `1.062` - - entry mel `3.090` - - exit mel `7.134` - - onset artifact `3.642` - - `+4` guards - - both adaptive-selector winners stayed unchanged: - - `pitchOrg +4` SHA `E039C0AF68908D14ECC2BC17A6D335DDDA7C713B6DEFE10BF4D1C59799D3B0E0` - - `pitchTest +4` SHA `F52F4B97CACE7E048767F3243C7DAFD949FD08F2491DDC1CB649B6B8E9B8F24E` -- Verdict: - - keep - - this is the first downward-side improvement that: - - improves a real `-4` truth case - - keeps the harder `pitchTest -4` case safe - - leaves the newly won `+4` adaptive outputs untouched - -#### Current Best Experimental Truth -- `pitchOrg +4` - - note mel `6.210` - - env `0.961` - - entry mel `6.978` - - exit mel `6.029` - - onset artifact `1.804` - - SHA `E039C0AF68908D14ECC2BC17A6D335DDDA7C713B6DEFE10BF4D1C59799D3B0E0` -- `pitchTest +4` - - note mel `3.095` - - env `0.493` - - entry mel `1.530` - - exit mel `7.350` - - onset artifact `0.700` - - SHA `F52F4B97CACE7E048767F3243C7DAFD949FD08F2491DDC1CB649B6B8E9B8F24E` -- `pitchOrg -4` - - note mel `6.570` - - env `1.100` - - entry mel `6.571` - - exit mel `7.565` - - onset artifact `2.802` - - SHA `1D75C81C2FC23779F7B07114A30B72B8564E43A638A28276244C84DFEE91F46D` -- `pitchTest -4` - - note mel `3.775` - - env `1.062` - - entry mel `3.090` - - exit mel `7.134` - - onset artifact `3.642` - - SHA `1B6A789C4D36AB0D330CD043E41A72EB27B858120DF34B271293764A197F909C` - -#### Conclusion -- `pitch_only_adaptive_selector` is now the best overall experimental editor path in the repo: - - short upward notes: - - `CTRL-R6` - - long upward notes: - - `branch_simple_ce33` - - shorter downward notes: - - bounded own-engine support blended into the adaptive output -- The harder `pitchTest -4` problem is not solved yet, but basic downward support is no longer “missing entirely.” - -## Goal And Non-Negotiables -- Match the user reference clips first, not the current engine: - - `pitchOrg.wav -> pitchOrg+4s.wav` - - `pitchOrg.wav -> pitchOrg-4s.wav` - - `pitchTestOrg.wav -> pitchTestOrg+4s.wav` - - `pitchTestOrg.wav -> pitchTestOrg-4s.wav` -- Hard requirements: - - exact local pitch change - - no word/consonant cutoff - - no clipping-like grit - - no previous-note drag - - preview under about `1s` -- Historical safety reference: - - commit `ce33d14f8a11f3315797876eff2711ef71a7cdf0` -- Sonic target: - - user-supplied reference WAVs, even when another render sounds nicer by ear - -## Current Baseline -- Current pitch-only baseline: - - corrected note-local `single` render routing - - safer `ce33`-family carrier - - minimal note-core Stage B -- Why this is the current baseline: - - fixed the major `single` vs `preview_segment` correctness bug - - exact target pitch is now healthy again on the corrected `pitchTest` family - - onset behavior is safer than the old advanced branch - - still fast enough for note-local preview -- Current main pain point: - - `pitchOrg -> +4` still sounds darker / more synthetic than the reference - - neighbor-note metrics are still too high - -### Current Measured Baseline -| Case | Note mel | Note env RMSE | Cents error | Onset jump | Current note-local latency | -| --- | ---: | ---: | ---: | ---: | ---: | -| `pitchOrg -> +4` | `8.299` | `1.018` | `0.00` | `+0.65 dB` | `226 ms` | -| `pitchOrg -> -4` | `7.408` | `1.114` | `0.00` | `+1.64 dB` | `191 ms` | -| `pitchTestOrg -> +4` | `3.449` | `0.620` | `0.00` | `0.00 dB` | `283 ms` | -| `pitchTestOrg -> -4` | `3.769` | `1.071` | `0.00` | `0.00 dB` | `268 ms` | - -- Preview note: - - the bounded note-local preview path has stayed in the same `~200-300 ms` class during harness checks, comfortably under the `<1s` requirement -- Interpretation: - - `pitchTest` correctness is now healthy - - `pitchOrg +4` remains the main sonic gap - -## Reality-Check Reset (2026-04-13) -- Status: - - do **not** treat the current app as research-level or sample-level - - do **not** treat the current own-engine branch as promotion-ready -- Why this reset happened: - - manual listening on the first upward `+4` note move still revealed: - - formant drift - - neighboring-word cutoff / crackle - - robotic shifted-note color - - that means older "close enough" interpretations were too generous -- Fresh frozen report: - - matrix root: `D:\test projects\os tests\reports\pitch-reality-check_20260413_172356` - - matrix markdown: `D:\test projects\os tests\reports\pitch-reality-check_20260413_172356\pitch_reality_check_matrix.md` -- Key findings from the frozen reality-check matrix: - - `baseline_app_current` on `pitchOrg +4` is still far from the reference: - - note mel `8.299` - - entry/exit mel `7.690 / 8.511` - - formant body harmonic drift `0.523` - - low/mid/high band delta `-2.826 / +0.807 / -4.847 dB` - - F1/F2 proxy drift `-23.4 / -46.9 Hz` - - `baseline_own_engine_current` is now branch-distinct and preview-complete, but still not promotion-ready: - - `pitchOrg +4` single / preview are branch-true and parity-safe - - `pitchTest +4` single remains much worse than the app baseline on timbre metrics -- Truth-phase fix that changed the interpretation: - - the old persisted `default` and `pitch_only_own_engine` `+4` hashes were identical because separate app processes could write the same output filename slot - - native regression summaries now persist: - - requested vs actual renderer branch - - fallback reason - - output SHA256 - - candidate coverage start/end - - the output naming path now uses a unique token, so branch comparisons are no longer being corrupted by filename collisions -- Current policy after the reset: - - reference metrics remain the main gate - - but claims of "research/sample-close" are invalid until the upgraded formant-sensitive harness and audition bundle both agree -- Current parity truth after the branch-fix: - - `default`, `pitchOrg +4` - - single / preview parity passed - - note mel delta `0.509 dB` - - note env delta `0.108` - - body/core cents delta `0 / 0` - - `pitch_only_own_engine`, `pitchOrg +4` - - single / preview parity passed - - note mel delta `0.063 dB` - - note env delta `0.194` - - body/core cents delta `0 / 0` - - this removes preview/single parity as the immediate blocker on `pitchOrg +4` - -### Track A: Current App Cleanup After Reset -#### Iteration TA-1: Upward shoulder / entry protection softening -- Hypothesis: - - the first audible failure might be mostly an onset/shoulder problem in the current hybrid-reset app path -- Change: - - made upward-note shoulders longer and drier at note entry/exit -- Result: - - `pitchOrg +4` improved only slightly at the note edges: - - onset peak `+0.65 -> +0.61 dB` - - exit mel `8.511 -> 8.275` - - but `pitchTest +4` regressed clearly: - - note mel `3.449 -> 3.489` - - entry mel `1.941 -> 2.779` - - centroid drift `-39.4 -> -53.9 Hz` -- Verdict: - - rejected -- Learning: - - shoulder tuning alone is not the main blocker on the current app path - -#### Iteration TA-2: Short-upward note-core spectral rebalance -- Hypothesis: - - the current app path might be over-boosting mid bands and over-trimming low/high bands for short upward notes -- Change: - - added a short-upward-only note-core spectral rebalance inside the Stage B envelope-anchor path -- Result: - - effectively neutral on both checked cases -- Verdict: - - rejected -- Learning: - - the current app-path miss is not being driven by a small short-upward Stage B weighting error - -#### Iteration TA-3: Upward carrier swap inside the hybrid app path -- Hypothesis: - - the old `ce33` upward carrier itself is the source of the formant issue, so replacing it with the newer note-local Stage A carrier might immediately improve `+4` -- Change: - - swapped only upward islands in the hybrid branch to the newer note-local carrier while keeping the hybrid blending and Stage B -- Result: - - pitch correctness broke badly: - - `pitchOrg +4` cents `0.00 -> -37.23` - - `pitchTest +4` cents `0.00 -> -35.70` - - timbre metrics did move, but not in a usable product direction -- Verdict: - - rejected and reverted -- Learning: - - the current hybrid branch depends on the `ce33` carrier assumptions more strongly than expected - - fixing the app-path formant issue will need a cleaner carrier replacement plan, not an inline swap - -#### Iteration TA-4: `ce33` carrier with preserve-style formant guidance -- Hypothesis: - - the `ce33` hybrid carrier might be darkening `pitchOrg +4` because it hardcodes `1 / pitchRatio` timbre fallback, so feeding it voiced pitch guidance and preserve-style formant handling could reduce the audible formant drift -- Change: - - routed the `ce33` pitch-only carrier through preserve-mode-style formant handling instead of the old ratio-driven fallback -- Result: - - `pitchOrg +4` regressed badly: - - note mel `8.299 -> 8.833` - - note env `1.018 -> 1.298` - - centroid drift `-189.7 -> +84.8 Hz` - - entry/exit mel `7.690 / 8.511 -> 11.240 / 10.962` - - onset peak `+0.65 -> +2.52 dB` - - `pitchTest +4` also regressed badly: - - note mel `3.449 -> 8.516` - - note env `0.620 -> 1.703` - - centroid drift `-39.4 -> +355.6 Hz` -- Verdict: - - rejected and reverted -- Learning: - - the current hybrid app path is not simply "too dark because `1 / ratio` is wrong" - - moving the `ce33` carrier toward preserve-mode behavior blows up the note body and boundaries instead of fixing the reference mismatch - -#### Iteration TA-5: Short-upward Stage B de-darkening rebalance -- Hypothesis: - - the primary `pitchOrg +4` miss might be recoverable without touching the fragile `ce33` carrier by de-darkening only the short upward Stage B weighting: - - slightly less mid emphasis - - less low trim - - less high-band air protection -- Change: - - added a stronger short-upward-only spectral rebalance inside the hybrid Stage B path -- Result: - - `pitchOrg +4` was mixed: - - note mel `8.299 -> 8.170` - - note env `1.018 -> 1.102` - - centroid drift `-189.7 -> -26.5 Hz` - - entry/exit mel worsened to `9.109 / 9.461` - - harmonic drift worsened `0.523 -> 0.771` - - `pitchTest +4` regressed clearly: - - note mel `3.449 -> 6.366` - - note env `0.620 -> 1.246` - - centroid drift `-39.4 -> +144.5 Hz` -- Verdict: - - rejected and reverted -- Learning: - - stronger short-upward de-darkening can move centroid drift in the right direction on the hard case, but it is too destructive to the healthier clip family - - the next app-path move should not be a broader Stage B spectral push; it needs a cleaner upward carrier or decomposition idea - -#### Iteration TA-6: Upward shoulder protection tightening on the shipping branch -- Hypothesis: - - the stitched / cutoff feeling at the start of upward notes is partly coming from too much wet shoulder exposure in the hybrid-reset shipping branch -- Change: - - for upward notes only, tightened the audible entry/exit shoulders and lowered the wet floor inside the protected entry/exit zones - - kept the voiced body / Stage B timbre logic unchanged -- Result: - - `pitchOrg +4` improved slightly and stayed exact: - - note mel `8.299 -> 8.289` - - note env `1.018 -> 1.017` - - onset peak `+0.65 -> +0.61 dB` - - exit mel `8.511 -> 8.203` - - harmonic drift `0.523 -> 0.522` - - `pitchTest +4` stayed within the guard budget, but did not improve: - - note mel `3.449 -> 3.481` - - note env `0.620 -> 0.623` - - neighbor mel stayed effectively unchanged -- Verdict: - - kept -- Learning: - - the onset / stitching feel can be improved a little without destabilizing the guard case - - but the main miss is still note-core timbre / formant behavior, not shoulders alone - -#### Iteration TA-7: Upward frame-local envelope smoothing -- Hypothesis: - - the upward hybrid-reset app path might still be too broad in its envelope estimate, so tightening the envelope smoothing window could make the correction more local-frame and more reference-like -- Change: - - reduced the upward hybrid-reset envelope smoothing window inside the Stage B anchor pass -- Result: - - `pitchOrg +4` was effectively unchanged at the saved-output level before the guard rerun - - `pitchTest +4` shifted slightly but without any useful improvement -- Verdict: - - rejected and reverted -- Learning: - - the current app-path miss is not being caused by envelope smoothing width alone - -#### Iteration TA-8: Upward core-only high-band detail reinjection -- Hypothesis: - - the app path might still sound dark / robotic on `pitchOrg +4` because the upward hybrid-reset branch is over-smoothing high-band detail inside the voiced core -- Change: - - increased capped upward high-band detail reinjection only inside the hybrid-reset core path -- Result: - - `pitchOrg +4` regressed overall: - - note mel `8.289 -> 8.304` - - note env `1.017 -> 1.021` - - entry/exit mel `7.774 / 8.203 -> 7.829 / 8.238` - - harmonic drift improved only trivially `0.5221 -> 0.5210` - - `pitchTest +4` stayed at the same weaker guard result as the previous rejected branch: - - note mel `3.504` - - note env `0.614` -- Verdict: - - rejected -- Learning: - - extra high-band detail alone is not enough to make the current app path more reference-like - - the remaining app-path gap is more structural than just "too little air" - -## Research Timeline -### Milestone 1: Early DSP tuning before the harness was good enough -- Prior belief: - - broad note mel and general listening were enough to guide tuning -- New evidence: - - onset cracking, note-start weakness, and neighbor damage were still audible even when broad metrics looked acceptable -- Decision: - - stop trusting note-wide metrics alone - -### Milestone 2: Harness upgrade for onset / release / neighbor damage -- Prior belief: - - if note mel improved, pitch quality was probably improving in the right way -- New evidence: - - onset and neighbor windows could fail badly while overall note metrics stayed merely "okay" -- Decision: - - add entry/core/exit windows, pre/post-neighbor windows, onset peak jump, onset high-band burst, and audition bundles - -### Milestone 3: Wrong `pitchTest` fixture discovery -- Prior belief: - - the `pitchTest` comparisons were valid enough to compare branches -- New evidence: - - the old `pitchTest` runs were using the wrong note payload / wrong window family -- Decision: - - add clip-family-specific fixtures for `pitchTestOrg` and stop reusing the older `pitchOrg` note fixture - -### Milestone 4: Preview vs `single` divergence discovery -- Prior belief: - - preview and normal apply were basically the same engine with different quality settings -- New evidence: - - corrected `pitchTestOrg -> +4` preview was around `-36 cents`, while `single` was once around `-282 cents` -- Decision: - - treat the old `single` path as a core product bug, not a minor tuning issue - -### Milestone 5: Note-local `single` render fix -- Prior belief: - - pitch correctness problems were mainly inside Stage A / Stage B DSP -- New evidence: - - most of the giant miss came from how `single` rendered and spliced the edited region -- Decision: - - make `single` use note-local windowing logic consistent with the preview family - -### Milestone 6: Architecture bakeoff -- Prior belief: - - the current advanced branch might simply be the global winner -- New evidence: - - branch results depended strongly on clip family and on whether the corrected fixtures were used -- Decision: - - stop assuming the most complex branch is best; compare branches only through the corrected harness - -### Milestone 7: Safer hybrid becomes the current baseline -- Prior belief: - - a mixed carrier branch might deliver the best of both worlds -- New evidence: - - carrier mixing was unstable after the `single` routing fix -- Decision: - - use the safer `ce33`-family carrier plus a minimal note-core Stage B as the current baseline - -## Approaches Tried -### 1. Simple `ce33`-style Signalsmith baseline -- Intent: - - recover the historically safer articulation path -- Why it seemed promising: - - earlier stable behavior, cleaner entry/exit, fewer synthetic artifacts -- Result: - - exact pitch and cleaner onset behavior in many cases - - still too plain / not close enough to the reference timbre on `pitchOrg` -- Failure / plateau reason: - - safer than richer branches, but often too far from the sonic target -- Status: - - `plateaued but informative` - -### 2. Current advanced note-island Signalsmith branch -- Intent: - - improve the carrier and recover timbre with a serial note-core Stage B -- Why it seemed promising: - - better broad quality than simple `ce33` on `pitchOrg` - - fast preview -- Result: - - good broad note metrics on some cases - - onset and neighbor damage remained - - looked better than it really was before the harness upgrade -- Failure / plateau reason: - - too artifact-prone at note boundaries and not robust enough across clip families -- Status: - - `plateaued but informative` - -### 3. Carrier-mix hybrid (`ce33` shoulders + current core carrier) -- Intent: - - keep safer shoulders while using the stronger current carrier in the core -- Why it seemed promising: - - matched the intuition that shoulders and core want different behavior -- Result: - - unstable after the corrected `single` path - - could blow up centroid drift and quality badly -- Failure / plateau reason: - - mixing two carriers inside one note island is too fragile in the current design -- Status: - - `dead end` - -### 4. Safer hybrid (`ce33` carrier + minimal Stage B) -- Intent: - - keep the safer carrier and add only a small note-core recovery layer -- Why it seemed promising: - - lowest-risk path after the `single` routing fix -- Result: - - exact pitch on corrected `pitchTest` - - safer onset behavior - - good enough to become the current baseline -- Failure / plateau reason: - - still below the research/sample target, especially on `pitchOrg +4` -- Status: - - `current baseline` - -### 5. PSOLA branch -- Intent: - - use a voiced-core pitch-synchronous recovery path -- Why it seemed promising: - - should preserve articulation well in voiced regions -- Result: - - no meaningful app-path win -- Failure / plateau reason: - - did not beat the safer baseline enough to justify the extra complexity -- Status: - - `dead end` - -### 6. Model-style experimental branch -- Intent: - - recover more natural timbre through a heavier local refinement branch -- Why it seemed promising: - - could, in theory, close the realism gap more quickly -- Result: - - no app-path win strong enough to justify it -- Failure / plateau reason: - - not a practical product path in the current form -- Status: - - `dead end for now` - -### 7. Bungee benchmark -- Intent: - - benchmark an interesting outside shifter against Signalsmith -- Why it seemed promising: - - partial wins on some upward note-island cases -- Result: - - interesting benchmark, mixed across directions -- Failure / plateau reason: - - not strong enough or clean enough to replace the current shipping path -- Status: - - `plateaued but informative` - -## Failures And Root Causes -### Failure: word cutoff / broken onset -- Root cause: - - processing too wide a region - - shoulders treated like core - - old `single` render routing bug -- Learning: - - strict note-local rendering is mandatory - -### Failure: clipping-like crackle without true digital clipping -- Root cause: - - interference-style artifacts from overly aggressive blending and unstable branch combinations -- Learning: - - safer carrier + serial correction only - -### Failure: pitch-up sounding brighter, pitch-down darker -- Root cause: - - pitch-directional timbre drift and naive fallback behavior -- Learning: - - up/down probably need distinct note-core handling - -### Failure: branch looked good numerically but sounded wrong -- Root cause: - - harness originally missed onset/release/neighbor artifacts -- Learning: - - decision-making must use artifact-sensitive metrics and short audition files - -### Failure: misleading `pitchTest` conclusions -- Root cause: - - wrong note fixture and wrong analysis window -- Learning: - - every clip family needs its own verified fixture when note placement differs - -## What Actually Improved -- note-island rendering -- corrected `single` render routing -- artifact-aware harness -- simpler `ce33`-family carrier behavior -- smaller, safer Stage B - -## Own-Engine Architecture Branch -- Goal: - - stop building around `generic shifter -> corrective overlays` - - create a shared decomposition engine that can later support: - - `pitch_only_own_engine` - - `formant_only_own_engine` - - `pitch_plus_formant_own_engine` -- What is implemented now: - - new shared-analysis module in: - - `Source/OwnPitchEngine.h` - - `Source/OwnPitchEngine.cpp` - - current analysis output includes: - - note islands - - voiced masks - - F0 track - - epochs - - harmonic model - - residual model - - spectral envelope model - - new experimental branch routing in: - - `Source/PitchResynthesizer.cpp` - - `tools/run-ui-pitch-regression.ps1` - - current mode support: - - `pitch_only_own_engine`: real experimental renderer - - `formant_only_own_engine`: shared-analysis scaffold, legacy render fallback - - `pitch_plus_formant_own_engine`: own pitch base scaffold, legacy formant overlay fallback -- Why this branch exists: - - the old Signalsmith-centered family plateaued below the target - - future global formant work needs a clean place in the engine graph, not another retrofit -- Current status: - - `still viable as architecture` - - `not viable yet as a shipping renderer` - -### First Own-Engine Benchmark Snapshot -| Case | Branch | Note mel | Note env RMSE | Cents error | Centroid drift | Onset jump | Latency | -| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | -| `pitchOrg -> +4` | `default` | `7.288` | `0.789` | `-18.32` | `-115.9 Hz` | `+0.65 dB` | `184 ms` | -| `pitchOrg -> +4` | `pitch_only_own_engine` v1 | `13.917` | `1.840` | `-762.28` | `+349.9 Hz` | `+15.14 dB` | `49 ms` | -| `pitchOrg -> +4` | `pitch_only_own_engine` v2 | `14.169` | `1.893` | `-762.28` | `+355.2 Hz` | `+17.63 dB` | `46 ms` | -| `pitchTestOrg -> +4` | `default` | `3.449` | `0.620` | `0.00` | `-39.4 Hz` | `0.00 dB` | `266 ms` | -| `pitchTestOrg -> +4` | `pitch_only_own_engine` v1 | `19.693` | `2.782` | `0.00` | `+1776.0 Hz` | `+2.29 dB` | `63 ms` | -| `pitchTestOrg -> +4` | `pitch_only_own_engine` v2 | `19.822` | `2.805` | `0.00` | `+1781.8 Hz` | `+4.83 dB` | `61 ms` | - -- Interpretation: - - the own-engine branch is very fast already - - the current synthesis prototype is badly wrong on timbre and onset behavior - - `pitchOrg +4` also has a major pitch-takeover failure in the current prototype - - the small wet-mask fix did not solve the core problem -- Current decision: - - keep the architecture branch - - do **not** treat the current own-engine renderer as competitive yet - - next own-engine work must focus on: - - correct voiced-core takeover - - target-pitch integrity on `pitchOrg +4` - - less synthetic harmonic rendering before any global-formant module is turned on - -### Own-Engine Iteration Log -#### Iteration OE-1: Use the app correction curve as pitch intent -- Change: - - stop deriving target pitch directly from note MIDI fields - - use the same per-sample correction curve the legacy renderer uses -- Why: - - keeps pitch intent consistent across engine families - - avoids fixture-specific note-payload interpretation bugs -- Result: - - `pitchOrg +4` pitch correctness recovered from `-762.28 cents` to `-18.32 cents` - - timbre was still far too bright and synthetic -- Learning: - - the biggest remaining own-engine problem after OE-1 was synthesis color, not pitch-target interpretation - -#### Iteration OE-2: Replace additive carrier with epoch-grain carrier where possible -- Change: - - use a pitch-synchronous grain carrier inside the voiced core when epoch density is good -- Why: - - keeps more of the original waveform character than pure additive synthesis -- Result: - - `pitchTest +4` improved materially: - - note mel `19.478 -> 9.447` - - note envelope `2.819 -> 1.234` - - centroid drift `+2321.8 Hz -> -18.2 Hz` - - `pitchOrg +4` barely changed in that pass -- Learning: - - the new carrier family can work - - clip families do not fail in the same way, so direction and clip behavior matter - -#### Iteration OE-3: Tame core wetness and brightness -- Change: - - lower core wet cap - - make shoulders drier - - add a conservative low-pass to the prototype carrier -- Why: - - the epoch carrier was still too bright and too intrusive in the note body -- Result: - - `pitchOrg +4` improved strongly and became the first genuinely competitive own-engine result: - - note mel `12.012 -> 5.945` - - note envelope `1.989 -> 1.099` - - cents `-18.32 -> 0.00` - - centroid drift `+1323.2 Hz -> +67.1 Hz` - - onset jump `+17.64 dB -> +0.81 dB` - - `pitchOrg -4` was mixed: - - note mel `6.396` - - note envelope `1.154` - - cents `+59.09` - - `pitchTest +4` stayed improved versus the broken prototype, but remained worse than baseline: - - note mel `9.603` - - note envelope `1.144` - - cents `-8.95` - - `pitchTest -4` also remained worse than baseline: - - note mel `8.779` - - note envelope `1.125` - - cents `0.00` -- Learning: - - the own engine is now promising on the hardest `pitchOrg +4` case - - the current prototype is not robust yet across directions and clip families - - next own-engine work should be direction-specific and carrier-shaping-specific, not another broad architecture rewrite - -#### Iteration OE-4: Direction- and duration-aware carrier shaping -- Change: - - separate carrier settings for: - - short upward notes - - longer upward notes - - downward notes -- Why: - - `pitchOrg +4` and the `pitchTest` family were clearly not asking for the same wetness / brightness balance -- Result: - - improved `pitchTest +4` and both `-4` cases - - but softened the best `pitchOrg +4` result too much -- Decision: - - treat the first direction-aware pass as informative, not the final keeper -- Learning: - - direction-aware tuning is necessary - - but the main objective must still protect the `pitchOrg +4` win - -#### Iteration OE-5: Stronger voiced-core takeover with short-downward pitch bias -- Change: - - keep the direction-aware carrier shaping - - add stronger voiced-core takeover - - apply a small target-ratio bias only for short downward notes -- Why: - - the remaining own-engine errors were dominated by partial dry-pitch leakage on `-4` -- Result: - - `pitchOrg -4` cents fixed from `+59.09` to `0.00` - - `pitchTest +4` and `pitchTest -4` stayed exact at `0.00` - - `pitchOrg +4` stayed clearly better than the legacy baseline on note mel, but not as strong as OE-3 -- Learning: - - the own engine now has a credible cross-case baseline - - the next gap is mostly timbre realism / spectral balance, not gross pitch correctness - -#### Iteration OE-6: Longer-upward shoulder easing -- Change: - - keep OE-5 as the base - - reduce dry shoulder protection only for longer upward notes -- Why: - - `pitchTest +4` was still failing more at entry/exit shape than at pitch correctness -- Result: - - `pitchTest +4` improved slightly without harming the other three tracked cases: - - note mel `9.207 -> 9.143` - - note envelope `1.116 -> 1.120` (flat) - - cents stayed `0.00` -- Learning: - - long upward notes do want slightly less dry shoulder protection - - the remaining gap is now a smaller timbre realism problem, not a routing or gross takeover failure - -#### Iteration OE-7: WORLD-style decomposition pass 1 -- Change: - - replace the heuristic own-engine decomposition with a real source-filter pass: - - pitch-adaptive spectral envelope analysis - - harmonic model driven from the source envelope - - band aperiodicity / residual model - - source-filter correction applied on top of the epoch carrier -- Why: - - the own engine was now routing and pitching correctly often enough that the remaining gap looked like a decomposition realism problem, not a carrier-routing problem -- Result: - - this became the first kept decomposition upgrade: - - `pitchOrg +4` improved: - - note mel `6.528 -> 6.293` - - note envelope `1.076 -> 1.049` - - centroid drift `-223.7 Hz -> -139.1 Hz` - - cents stayed `-18.32` - - `pitchTest +4` stayed exact at `0.00 cents`, but timbre remained weak: - - note mel `9.143 -> 9.260` - - note envelope `1.120 -> 1.109` - - centroid drift improved `-435.9 Hz -> -230.7 Hz` - - `pitchTest -4` stayed exact and slightly steadier in centroid: - - note mel `7.915 -> 7.907` - - centroid drift `-247.3 Hz -> -25.4 Hz` -- Learning: - - the source-filter direction is real and worth continuing - - the main remaining miss is now concentrated in long upward note entry/exit and spectral balance, not gross pitch intent - -#### Iteration OE-8: Aperiodicity-aware envelope correction -- Change: - - damp spectral-envelope correction in high-aperiodicity bands - - reduce residual reinjection in noisier regions -- Why: - - the first decomposition pass still looked too blunt on `pitchTest`, especially in regions that behave more like noisy / mixed content than clean harmonics -- Result: - - essentially neutral: - - `pitchOrg +4` note mel `6.293 -> 6.277` - - `pitchOrg -4` note mel `7.033 -> 7.040` - - `pitchTest +4` note mel `9.260 -> 9.265` - - `pitchTest -4` note mel `7.907 -> 7.901` -- Decision: - - rejected as a useful next lever -- Learning: - - the remaining `pitchTest` gap is not mainly caused by over-correcting noisy bins - -#### Iteration OE-9: Fade source-filter correction at core boundaries -- Change: - - fade the source-filter correction and residual reinjection in and out inside the core -- Why: - - the own engine was still trailing the baseline most clearly at note entry and exit on long upward notes -- Result: - - also effectively neutral: - - `pitchOrg +4` note mel `6.277 -> 6.275` - - `pitchTest +4` note mel `9.265 -> 9.259` - - `pitchOrg -4` and `pitchTest -4` moved only trivially -- Decision: - - rejected; keep OE-7 as the current own-engine baseline -- Learning: - - `pitchTest +4` is not primarily failing because the source-filter correction reaches too close to the core edges - - the shared `pitchTest` pre/post-neighbor metrics are also high on the default baseline, so that metric is not the differentiator there - -#### Iteration OE-10: Local-frame spectral-envelope correction -- Change: - - keep the source-filter decomposition from OE-7 - - switch the correction from a single broad note-average envelope to a locally interpolated frame envelope with a small global blend for stability -- Why: - - long upward notes still looked too flattened in timbre, which suggested the correction was too coarse over time rather than fundamentally wrong -- Result: - - this is the new kept decomposition baseline: - - `pitchTest +4` improved: - - note mel `9.260 -> 9.069` - - note envelope `1.109 -> 1.071` - - `pitchTest -4` improved: - - note mel `7.907 -> 7.727` - - note envelope `1.077 -> 1.049` - - `pitchOrg +4` regressed slightly: - - note mel `6.293 -> 6.342` - - note envelope `1.049 -> 1.053` - - `pitchOrg -4` also regressed slightly: - - note mel `7.033 -> 7.060` -- Learning: - - temporal envelope locality matters - - the long-note `pitchTest` gap was not just a carrier problem - - this change is worth keeping even with the small `pitchOrg` regressions because it improves the weaker family materially - -#### Iteration OE-11: Short-upward pitch-ratio bias tuning -- Change: - - add a tiny upward-only pitch-ratio bias for shorter notes, reusing the same structural hook that already fixed the short-downward miss -- Why: - - after OE-10, `pitchOrg +4` still carried the old `-18.32` cents miss even though `pitchTest +4` was exact -- Result: - - the first bias attempt overshot and was rejected - - the reduced bias was kept: - - `pitchOrg +4` cents `-18.32 -> 0.00` - - `pitchOrg +4` note envelope `1.053 -> 1.017` - - `pitchOrg +4` note mel `6.342 -> 6.318` - - `pitchTest +4` stayed unchanged at `9.069` note mel / `0.00` cents - - both `-4` cases stayed unchanged from OE-10 -- Learning: - - the short-upward pitch miss was a small ratio calibration issue, not a deeper decomposition failure - - the own engine now has a meaningfully better `+4` story than it did at OE-7 - -### Latest Own-Engine Snapshot -| Case | Branch | Note mel | Note env RMSE | Cents error | Centroid drift | Onset jump | Latency | -| --- | --- | ---: | ---: | ---: | ---: | ---: | ---: | -| `pitchOrg -> +4` | `default` | `7.288` | `0.789` | `-18.32` | `-115.9 Hz` | `+0.65 dB` | `184 ms` | -| `pitchOrg -> +4` | `pitch_only_own_engine (OE-11)` | `6.318` | `1.017` | `0.00` | `-170.6 Hz` | `+0.73 dB` | `57 ms` | -| `pitchOrg -> -4` | `default baseline` | `7.408` | `1.114` | `0.00` | n/a | `+1.64 dB` | `191 ms` | -| `pitchOrg -> -4` | `pitch_only_own_engine (OE-11)` | `7.060` | `1.279` | `0.00` | `+217.3 Hz` | `+0.95 dB` | `54 ms` | -| `pitchTestOrg -> +4` | `default baseline` | `3.449` | `0.620` | `0.00` | `-39.4 Hz` | `0.00 dB` | `266 ms` | -| `pitchTestOrg -> +4` | `pitch_only_own_engine (OE-11)` | `9.069` | `1.071` | `0.00` | `-225.9 Hz` | `0.00 dB` | `74 ms` | -| `pitchTestOrg -> -4` | `default baseline` | `3.769` | `1.071` | `0.00` | n/a | `0.00 dB` | `268 ms` | -| `pitchTestOrg -> -4` | `pitch_only_own_engine (OE-11)` | `7.727` | `1.049` | `0.00` | `-37.9 Hz` | `0.00 dB` | `76 ms` | - -- Current decision after OE-11: - - keep the own-engine branch active - - keep OE-11 as the current own-engine baseline - - OE-8 and OE-9 were neutral and should not be re-tried first - - the own engine is now exact on all four tracked pitch cases - - it is still not ready to replace the current baseline across all clip families - - next work should prioritize: - - improve long upward-note timbre realism on `pitchTest +4` - - bring the `pitchOrg` and `pitchTest` envelope / spectral realism closer together without giving back exact pitch - - compare entry/exit behavior against the default baseline, not just against the reference - - then global-formant field work on top of the stabilized pitch carrier - -### Own-Engine Preview Reality Check -- Fresh current-code preview truth: - - `pitch_only_own_engine` preview no longer times out or drops the result file - - it is still not usable, because the preview render is sonically far away from both the reference and the own-engine single render -- Current `pitchOrg -> +4`: - - `single`: note mel `6.318`, note env `1.017`, note/body/core cents `0.00 / +18.92 / +18.92` - - `preview_segment`: note mel `12.758`, note env `1.434`, note/body/core cents `-458.43 / -880.59 / 0.00` -- Current `pitchTestOrg -> +4`: - - `single`: note mel `9.069`, note env `1.071`, note/body/core cents `0.00 / 0.00 / -18.32` - - `preview_segment`: note mel `16.584`, note env `2.051`, note/body/core cents `-978.55 / -978.55 / -984.54` -- Learning: - - the own-engine preview problem is no longer "job failed" - - it is now a **preview/single parity** problem - - the core of `pitchOrg +4` preview can still hit the right pitch while the broader note body is badly wrong, which points to body/coverage/takeover behavior rather than pure target-pitch math - -#### Iteration OE-12: Short-upward body-takeover increase -- Hypothesis: - - the own-engine upward short-note miss might be caused by too much dry original pitch leaking outside the strict voiced core, especially in preview -- Change: - - increased short-upward body entry/exit wetness and outside-core wet scaling -- Result: - - no measurable change on the checked runs: - - `pitchOrg +4 single`: stayed `6.318 / 1.017 / 0.00 cents` - - `pitchOrg +4 preview`: stayed `12.758 / 1.434 / -458.43 cents` - - `pitchTest +4 single`: stayed `9.069 / 1.071 / 0.00 cents` -- Verdict: - - rejected and reverted -- Learning: - - the current own-engine preview failure is not fixed by a simple increase in short-upward body wetness - - the next own-engine move should target preview/single parity more explicitly, not just "more corrected body" - -## Remaining Approaches -### Phase 1: Timbre Recovery On Safer Hybrid Baseline -- **Iteration budget:** `2` -- Why this could be better: - - pitch correctness is now acceptable - - the remaining gap is mainly note-core timbre realism, especially `pitchOrg +4` - - this is the lowest-risk path because it keeps the corrected note-local routing -- What would count as failure: - - after 2 bounded iterations, `pitchOrg +4` still sounds clearly robotic/dark and metrics do not materially improve -- What happens if it is worse: - - revert the failed timbre change immediately - - keep the safer hybrid baseline unchanged -- **Iterations left after Phase 1 completes:** `6` - -### Phase 2: Direction-Specific Note-Core Correction -- **Iteration budget:** `2` -- Why this could be better: - - `+pitch` and `-pitch` have already shown different needs - - one shared timbre rule is likely holding quality back -- What would count as failure: - - separate up/down tuning gives only tiny wins or causes regressions across clip families -- What happens if it is worse: - - keep only any clearly winning directional constant - - otherwise revert to the safer hybrid baseline -- **Iterations left after Phase 2 completes:** `4` - -### Phase 3: Shoulder / Onset Protection Refinement -- **Iteration budget:** `2` -- Why this could be better: - - the user still reports slight break/cutoff/robotic onset behavior - - the upgraded harness now measures those failures directly -- What would count as failure: - - onset gets cleaner but note-core quality worsens too much - - or metrics improve while the audible issue remains unchanged -- What happens if it is worse: - - lock the best shoulder behavior already found - - do not keep stretching the shoulder region just because one artifact metric improves -- **Iterations left after Phase 3 completes:** `2` - -### Phase 4: Harmonic-Relative Stage B -- **Iteration budget:** `2` -- Why this could be better: - - this is the last serious DSP-family change still likely to move closer to the research renders without another Stage A rewrite - - it targets harmonic structure more directly than the current envelope-style correction -- What would count as failure: - - no meaningful gain after 2 bounded iterations - - or latency / instability / artifacts regress -- What happens if it is worse: - - stop incremental DSP tuning on this family - - do not open another broad branch without a new explicit decision -- **Iterations left after Phase 4 completes:** `0` - -## Iteration Budget And Phase Gates -- Total remaining serious research budget: **`8` bounded iterations** -- Phase breakdown: - - Phase 1: `2` - - Phase 2: `2` - - Phase 3: `2` - - Phase 4: `2` -- At the end of each phase, record: - - what changed - - what improved - - what regressed - - whether the next phase is still justified -- Phase gates: - - start: `8` iterations left - - after Phase 1: `6` iterations left - - after Phase 2: `4` iterations left - - after Phase 3: `2` iterations left - - after Phase 4: `0` iterations left -- Rule: - - no phase gets more than its 2-iteration budget without an explicit reset of the plan - -## Iteration Results -### Phase 1, Iteration 1 of 2: Upward hybrid envelope-anchor relaxation -- Hypothesis: - - `pitchOrg +4` was still too dark, so a lighter upward-only hybrid envelope anchor might recover some timbre without disturbing onset safety -- Change: - - slightly increased upward hybrid mid-band lift - - slightly reduced upward low-band trim - - slightly relaxed upward air protection - - slightly increased upward hybrid detail retention -- Result: - - `pitchOrg -> +4`: note mel `8.414 -> 8.411`, note env `1.019 -> 1.019`, centroid `-194.0 -> -193.3 Hz` - - `pitchTestOrg -> +4`: note mel `3.441 -> 3.439`, note env `0.620 -> 0.621`, centroid `-34.2 -> -33.6 Hz` - - onset metrics stayed effectively unchanged -- Verdict: - - no material improvement - - kept in place because it was neutral-to-slightly-better, but it does not count as a meaningful Phase 1 win - -### Phase 1, Iteration 2 of 2: Stronger upward hybrid Stage B -- Hypothesis: - - a slightly stronger upward Stage B might improve the darker `pitchOrg +4` note core more directly -- Change: - - benchmarked stronger upward Stage B wetness only - - tested `OPENSTUDIO_PITCH_STAGEB_SCALE_UP=0.25` - - tested `OPENSTUDIO_PITCH_STAGEB_SCALE_UP=0.30` -- Result: - - `0.25`: - - `pitchOrg -> +4`: note mel `8.207`, note env `1.018`, centroid `-182.5 Hz` - - `pitchTestOrg -> +4`: note mel `3.549`, note env `0.664`, centroid `-28.9 Hz` - - `0.30`: - - `pitchOrg -> +4`: note mel `8.207`, note env `1.018`, centroid `-182.5 Hz` - - `pitchTestOrg -> +4`: note mel `3.658`, note env `0.699`, centroid `-24.2 Hz` -- Verdict: - - rejected - - the `pitchOrg +4` gain was too small to justify the regression on the already healthier `pitchTestOrg +4` case - -### Phase 1 Status -- Outcome: - - Phase 1 completed without a meaningful win - - current baseline remains the safer hybrid with the neutral Iteration 1 refinement and without the stronger upward Stage B override -- Iterations remaining: - - total remaining after Phase 1 completion: `6` - - next phase to start: `Phase 2: Direction-Specific Note-Core Correction` - -### Phase 2, Iteration 1 of 2: Upward short-note bias inside envelope-anchor strength -- Hypothesis: - - the shorter `pitchOrg +4` note might need stronger upward note-core correction than the longer `pitchTest +4` note -- Change: - - added an upward-only short-note boost inside the envelope-anchor strength calculation -- Result: - - `pitchOrg -> +4`: note mel `8.411 -> 8.410`, note env `1.019 -> 1.019`, centroid `-193.3 -> -193.0 Hz` - - `pitchTestOrg -> +4`: note mel `3.439 -> 3.439`, note env `0.621 -> 0.621`, centroid `-33.6 -> -33.6 Hz` -- Verdict: - - effectively neutral - - kept because it did not hurt anything, but it was too small to matter by itself - -### Phase 2, Iteration 2 of 2: Upward short-note wet-cap bonus -- Hypothesis: - - the stronger upward Stage B setting from Phase 1 helped the short `pitchOrg +4` note but hurt the longer `pitchTest +4` note, so the wet-cap bonus should apply only to short upward notes -- Change: - - added an upward-only wet-cap bonus for shorter edited notes in the safer hybrid branch -- Result: - - `pitchOrg -> +4`: note mel `8.411 -> 8.302`, note env `1.019 -> 1.019`, centroid `-193.3 -> -187.4 Hz` - - `pitchTestOrg -> +4`: note mel `3.439 -> 3.439`, note env `0.621 -> 0.621`, centroid `-33.6 -> -33.6 Hz` - - downward sanity check: - - `pitchOrg -> -4` stayed `7.408 / 1.114 / 0.00 cents` -- Verdict: - - kept - - this is the first meaningful gain that improved the hard upward case without damaging the healthier clip family - -### Phase 2 Status -- Outcome: - - Phase 2 completed with one kept directional improvement - - current baseline now includes the upward short-note wet-cap bonus -- Iterations remaining: - - total remaining after Phase 2 completion: `4` - - next phase to start: `Phase 3: Shoulder / Onset Protection Refinement` - -### Phase 3, Iteration 1 of 2: Drier hybrid shoulders and stronger edge protection -- Hypothesis: - - the safer hybrid still needed slightly more shoulder protection, especially at note boundaries, to reduce onset stress without undoing the Phase 2 timbre gain -- Change: - - shortened audible shoulders for the hybrid branch - - increased entry/exit protection lengths - - lowered hybrid edge wet floors at note entry and exit -- Result: - - `pitchOrg -> +4`: note mel `8.302 -> 8.297`, note env `1.019 -> 1.019`, centroid `-187.4 -> -189.3 Hz`, onset jump `+0.68 -> +0.65 dB` - - `pitchTestOrg -> +4`: note mel `3.439 -> 3.454`, note env `0.621 -> 0.622`, centroid `-33.6 -> -39.1 Hz` -- Verdict: - - kept only because the hard case improved slightly and onset moved in the right direction - - not a strong win - -### Phase 3, Iteration 2 of 2: Longer hybrid entry-side splice fade -- Hypothesis: - - a longer entry-side splice fade might reduce the remaining note-start stress without changing the note core -- Change: - - increased hybrid entry-side splice fade length only -- Result: - - no measurable change relative to Phase 3 iteration 1 on either `pitchOrg +4` or `pitchTestOrg +4` -- Verdict: - - no effect - - the earlier Phase 3 iteration 1 state is the only part worth keeping - -### Phase 3 Status -- Outcome: - - Phase 3 completed without a meaningful onset-specific win - - current baseline keeps the tiny improvement from Phase 3 iteration 1 only -- Iterations remaining: - - total remaining after Phase 3 completion: `2` - - next phase to start: `Phase 4: Harmonic-Relative Stage B` - -### Phase 4, Iteration 1 of 2: More harmonic-focused upward hybrid weighting -- Hypothesis: - - the hybrid upward path was still too broadband, so a more harmonic-focused envelope weight might move the result closer to the reference timbre -- Change: - - reduced the broadband floor of the harmonic weighting for upward hybrid blocks - - increased upward hybrid detail retention slightly -- Result: - - `pitchOrg -> +4`: note mel `8.297 -> 8.303`, note env `1.019 -> 1.018`, centroid `-189.3 -> -190.6 Hz` - - `pitchTestOrg -> +4`: note mel `3.454 -> 3.458`, note env `0.622 -> 0.616`, centroid `-39.1 -> -40.4 Hz` -- Verdict: - - rejected as a meaningful direction - - the change broadened in the wrong way and did not produce a real win - -### Phase 4, Iteration 2 of 2: Narrower harmonic neighborhoods for upward hybrid blocks -- Hypothesis: - - if the broadening was the problem, a narrower harmonic neighborhood might keep correction closer to true harmonics without washing across the note -- Change: - - reverted the broader harmonic weighting from iteration 1 - - narrowed the harmonic-mask sigma for upward hybrid blocks -- Result: - - `pitchOrg -> +4`: note mel `8.297 -> 8.299`, note env `1.019 -> 1.018`, centroid `-189.3 -> -189.7 Hz` - - `pitchTestOrg -> +4`: note mel `3.454 -> 3.449`, note env `0.622 -> 0.620`, centroid `-39.1 -> -39.4 Hz` -- Verdict: - - neutral - - too small to count as a real Phase 4 win - -### Phase 4 Status -- Outcome: - - Phase 4 completed without a meaningful DSP-family breakthrough - - the current frozen fallback baseline is still the safer hybrid family with: - - corrected note-local `single` routing - - short-note upward wet-cap bonus from Phase 2 - - tiny shoulder refinement from Phase 3 -- Iterations remaining: - - total remaining after Phase 4 completion: `0` - - next state: `freeze fallback baseline and hand off unless a new plan is created` - -## Decision Gates -- Continue on the current path only if: - - pitch remains within `+/-5 cents` - - no word cutoff or crackle returns - - `pitchOrg +4` timbre improves materially by ear and metrics - - preview remains under `1s` -- Freeze the current safer hybrid as fallback baseline if: - - later phases fail to improve timbre materially - - but the baseline still preserves pitch correctness, locality, and onset safety -- Escalate / hand off to another agent if: - - all `8` remaining iterations are used - - and the output is still clearly below the user reference by ear - - especially if `pitchOrg +4` remains robotic/dark - -## Failure / Handoff Plan -- When iterations reach `0`: - - stop doing more parameter loops - - freeze the best fallback baseline - - hand off with: - - current best baseline branch - - harness commands - - winning and losing metrics - - dead ends not worth retrying first - - open hypotheses for the next agent -- Handoff framing: - - the product path is now functionally corrected - - the remaining gap is mainly sonic realism, especially on upward note-local shifts - - the next agent should start from the corrected note-local baseline, not the old broken path - -## Bottom Line -- The biggest hidden bug was not just DSP quality; it was the mismatch between preview-style note-local rendering and the old `single` apply path. -- After fixing that, the project moved to a much safer baseline. -- We are no longer mainly fighting gross pitch correctness on the later `pitchTest` note. -- The remaining work is bounded: - - `8` serious iterations left - - `4` remaining approach families - - after that, freeze the best baseline and hand off cleanly instead of looping indefinitely. - -## Persistent Comparison Harness -- Canonical persistent artifact root: - - `D:\test projects\os tests` -- Canonical manifest: - - `D:\test projects\os tests\manifests\pitch_artifacts.json` -- Best saved app/own-engine artifacts are now registered in the manifest instead of being left in temp folders. -- New comparison tooling: - - `tools/pitch_harness_common.ps1` - - `tools/register-pitch-artifact.ps1` - - `tools/pitch_spectrogram_compare.py` - - `tools/run-pitch-output-comparison.ps1` -- Verified persistent comparison reports: - - `pitchOrg +4` - - matrix: `D:\test projects\os tests\reports\pitch_output_comparison_20260413_160935.md` - - report dir: `D:\test projects\os tests\reports\pitchOrg__4\20260413_160935` - - `pitchTestOrg +4` - - matrix: `D:\test projects\os tests\reports\pitch_output_comparison_20260413_161412.md` - - report dir: `D:\test projects\os tests\reports\pitchTestOrg__4\20260413_161412` -- Research-reference comparison is now handled explicitly by the harness: - - if a research render is not registered in the manifest, the report records that as missing instead of silently skipping it -- Current comparison finding to keep in mind: - - for the saved `+4` reports, the current `default` and `pitch_only_own_engine` candidates came out numerically identical in the stored comparison runs, so branch routing needs to be re-checked before treating those as meaningfully distinct outputs - -## April 13 Reality-Check Follow-Through - -### Truth Refresh -- Branch-truth and output-truth were re-verified through the real app path. -- Current shipping fallback remains: - - `default` -> actual branch `branch_hybrid_reset` -- Current hard-case app baseline remains: - - `pitchOrg +4`: note mel `8.299`, env `1.018`, cents `0.00`, pre/post-neighbor mel `8.017 / 4.235`, onset peak `+0.649 dB`, harmonic drift `0.523` -- Current downward app baseline remains: - - `pitchOrg -4`: note mel `7.405`, env `1.094`, cents `0.00`, onset peak `+1.416 dB`, harmonic drift `0.469` -- Current guard-case app baseline remains: - - `pitchTest +4`: note mel `3.449`, env `0.620`, cents `0.00`, pre/post-neighbor mel `15.956 / 19.285` - -### Harness Upgrade: Stutter-Sensitive Metrics -- Added new onset artifact diagnostics to `tools/reference_audio_match.py`: - - `onsetDerivativeJumpDb` - - `onsetRepeatSimilarityExcess` - - `onsetSpectralFluxDelta` - - `onsetArtifactScore` -- These are now carried through: - - `tools/run-ui-pitch-regression.ps1` - - `tools/run-pitch-reality-check.ps1` -- Purpose: - - make the stitched / repeated-attack / stutter-like onset failure visible in saved reports instead of relying only on broad entry-window metrics - -### App Iteration A: Onset-Safe Splice Relocation -- Hypothesis: - - anchoring the wet handoff later for upward notes would reduce the stitched/stutter feel at note start -- Change: - - first tried voiced-onset-anchored handoff - - then tried a small mandatory minimum delay for the upward wet ramp -- Result: - - both variants produced no measurable output change on the real app path - - `pitchOrg +4` stayed: - - note mel `8.289` - - env `1.017` - - onset peak `+0.61 dB` - - onset derivative / repeat / flux / artifact `+1.84 / 0.000 / +1.50 / +1.84` - - `pitchTest +4` stayed: - - note mel `3.481` - - env `0.623` - - onset derivative / repeat / flux / artifact `0.00 / 0.636 / +0.59 / +3.82` -- Verdict: - - rejected - - the current app-path onset problem is real, but this splice-only tweak was not strong enough to move the rendered output - -### App Iteration B: Dedicated Downward App Law -- Hypothesis: - - downward pitch shifts need their own low/mid/high envelope law and should not share the same timbre correction as upward shifts -- Change: - - tested a downward-only hybrid Stage B weighting change: - - stronger low-harmonic relocation - - different air protection - - lower downward detail preservation -- Result: - - no meaningful win worth keeping - - `pitchOrg -4` stayed effectively at baseline: - - note mel `7.405` - - env `1.094` - - onset derivative / repeat / flux / artifact `+2.74 / 0.000 / +0.74 / +2.74` - - `pitchTest -4` remained around the old level and still not acceptable by ear: - - note mel `3.775` - - env `1.062` - - onset derivative / repeat / flux / artifact `0.00 / 0.607 / +1.00 / +3.64` -- Verdict: - - rejected - - the current app branch appears to be at its ceiling for these small downward-law pushes - -### App-Path Status After Final Two Micro-Iterations -- Outcome: - - the harness is now better at agreeing with the audible onset complaint - - the two final app-path micro-iterations did not produce a keepable improvement - - shipping app baseline remains the last kept `TA-6` shoulder-protection state -- App-path iterations left: - - `0` -- Decision: - - stop further micro-tuning on the current app branch - - pivot active recovery to the own-engine / source-filter path for the next structural work - -## Own-Engine Recovery Restart - -### Own-Engine Baseline Before Restart -- Fresh own-engine truth runs showed: - - `pitchOrg +4` - - note mel `6.484` - - env `1.302` - - cents `+18.92` - - harmonic drift `0.423` - - onset artifact `1.76` - - `pitchOrg -4` - - note mel `7.307` - - env `1.634` - - cents `-46.79` - - harmonic drift `0.320` - - onset artifact `2.79` -- Working conclusion: - - the own engine was already more promising than the shipping app on some timbre metrics - - but it was still not trustworthy because pitch correctness had drifted again - -### Own-Engine Iteration OE-R1: Upward Onset-Safe Wet Handoff -- Hypothesis: - - the own-engine wet mask was handing too much synthesized content into the perceptual note onset, causing entry roughness and obscuring the core renderer quality -- Change: - - for upward notes only, made the own-engine body entry much drier at the start of the note - - added a short dry-hold inside the note body before the wet ramp rises - - left downward onset handling unchanged -- Result: - - `pitchOrg +4` - - note mel `6.484 -> 6.530` - - env `1.302 -> 1.356` - - cents `+18.92 -> 0.00` - - harmonic drift `0.423 -> 0.390` - - centroid `-310.7 -> -279.2 Hz` - - `pitchOrg -4` - - note mel `7.307 -> 5.560` - - env `1.634 -> 1.544` - - cents `-46.79 -> +11.90` - - harmonic drift `0.320 -> 0.176` - - `pitchTest +4` - - remained effectively unchanged: - - note mel `9.072` - - env `1.075` - - core cents `-18.32` - - `pitchTest -4` - - stayed exact on pitch: - - note mel `7.727` - - env `1.049` - - cents `0.00` -- Verdict: - - kept as the new experimental own-engine baseline - - this is the first structural own-engine iteration after the app-path stop point that materially improved both `pitchOrg +4` and `pitchOrg -4` - - it still does not beat the shipping app on the `pitchTest` family, so it remains experimental only - -### Own-Engine Iteration OE-R2: Stronger Long-Upward Source-Filter Correction -- Hypothesis: - - `pitchTest +4` is a long upward note, so the own-engine source-filter correction for long bodies might simply be too weak and too broad -- Change: - - increased long-upward local envelope correction strength - - tightened the gain limits and high-band cap for long upward notes only -- Result: - - `pitchTest +4` - - stayed essentially unchanged: - - note mel `9.070` - - env `1.073` - - core cents `-18.32` - - onset artifact `4.01` - - `pitchOrg +4` - - stayed effectively unchanged and healthy for the current own-engine baseline: - - note mel `6.520` - - env `1.352` - - cents `0.00` -- Verdict: - - rejected - - `pitchTest +4` is not mainly blocked by a simple long-upward correction-strength issue in the current source-filter step - -### Own-Engine Iteration OE-R3: Long-Upward Drier Shoulders -- Hypothesis: - - the long upward note in `pitchTest +4` might still be failing because too much synthesized signal is entering the body shoulders, not because the core timbre model is weak -- Change: - - made long upward notes use a drier entry shoulder, longer exit protection, and lower outside-core wetness -- Result: - - `pitchOrg +4` - - improved onset-facing metrics a bit: - - onset peak `+0.73 -> +0.49 dB` - - onset artifact `1.76 -> 1.59` - - pitch stayed exact - - `pitchTest +4` - - essentially unchanged: - - note mel `9.070` - - env `1.072` - - onset artifact `3.99` -- Verdict: - - rejected as the next baseline - - useful for diagnosis because it showed `pitchTest +4` is not mainly a shoulder wetness problem - -### Own-Engine Iteration OE-R4: Long-Upward Tighter Core Window -- Hypothesis: - - if `pitchTest +4` is not a wet-mask problem, its synthesized core may still be too wide and invading phonetic shoulders before epoch rendering begins -- Change: - - increased long-upward core entry/exit protection inside the shared analysis stage -- Result: - - `pitchTest +4` - - did not improve: - - note mel `9.084` - - env `1.079` - - onset artifact `4.01` - - `pitchOrg +4` - - stayed unchanged and healthy relative to the current own-engine baseline -- Verdict: - - rejected - - `pitchTest +4` is not mainly blocked by a simple long-note core-window size issue - -### Own-Engine Budget Status -- Used in the current structural own-engine cycle: - - `4` bounded iterations - - `OE-R1` kept - - `OE-R2` rejected - - `OE-R3` rejected - - `OE-R4` rejected -- Remaining serious own-engine iterations in the current budget: - - `2` -- Current best experimental own-engine baseline remains: - - `OE-R1`: upward onset-safe wet handoff - -### Own-Engine Iteration OE-R5: Long-Upward Epoch-Carrier Remap -- Hypothesis: - - long upward notes may sound repetitive because extra target epochs are being matched to the nearest discrete source epoch instead of interpolating between source epochs -- Change: - - for long upward notes only, interpolated the epoch carrier between adjacent source epochs instead of hard-rounding to one source epoch -- Result: - - `pitchTest +4` - - mixed: - - note mel `9.085` - - env `1.077` - - harmonic drift improved to `0.221` - - but onset/body quality did not improve enough - - `pitchOrg +4` - - unchanged and still exact -- Verdict: - - rejected - - useful because it confirmed the long-note upward miss is partly carrier-related, but not solved by epoch interpolation alone - -### Own-Engine Iteration OE-R6: Long-Upward Harmonic-Carrier Split -- Hypothesis: - - the long-note upward miss might need a different carrier family altogether; keep short-note upward and downward notes on the stronger path, but force long upward notes onto the harmonic core renderer -- Change: - - long upward notes bypass the epoch carrier and use the harmonic carrier path instead -- Result: - - `pitchTest +4` - - first meaningful improvement on this clip family in this bounded cycle: - - note mel `9.084 -> 8.785` - - env `1.079 -> 1.045` - - harmonic drift `0.290 -> 0.232` - - `pitchOrg +4` - - unchanged and still strong for the current own-engine baseline: - - note mel `6.520` - - env `1.352` - - cents `0.00` - - `pitchOrg -4` - - unchanged -- Verdict: - - kept - - this becomes the new experimental own-engine baseline - -### Own-Engine Final Budget Status -- Used in the current bounded structural own-engine cycle: - - `6` serious iterations - - kept: - - `OE-R1` - - `OE-R6` - - rejected: - - `OE-R2` - - `OE-R3` - - `OE-R4` - - `OE-R5` -- Remaining serious own-engine iterations in the current budget: - - `0` -- Current best experimental own-engine baseline is now: - - `OE-R6`: long-upward harmonic-carrier split on top of the earlier upward onset-safe handoff - -## April 13, 2026: Hybrid Structural Branch For `pitchTestOrg` - -### Goal -- Start the next recovery cycle on the user-confirmed truth case: - - original: `D:\test projects\pitchTestOrg.wav` - - references: - - `D:\test projects\pitchTestOrg+4s.wav` - - `D:\test projects\pitchTestOrg-4s.wav` -- Freeze the current shipping app path as control and route new work into an explicit experimental branch: - - `pitch_only_hybrid_structural` - -### Harness / Branch Infrastructure -- Added explicit experimental branch routing: - - requested / actual branch name: - - `pitch_only_hybrid_structural` -- Updated the UI regression runner so this branch can be exercised through the same persistent app-path harness and reports. - -### Hybrid Structural Iteration HS-1: Voiced-Onset / Voiced-Exit Anchored Wet Mask -- Hypothesis: - - the `pitchTest` truth case is failing because the pitch renderer is entering and exiting too close to the perceptual attack and handoff, creating stitched boundaries -- Change: - - added a branch-specific experimental route - - added voiced-onset / voiced-exit detection support in the own-engine wet-mask path - - first experimental mask delayed wet entry and advanced wet exit around detected voiced activity -- Result: - - `pitchTest +4` - - got much worse: - - note mel `11.889` - - env `1.620` - - entry mel `15.982` - - exit mel `12.982` - - `pitchTest -4` - - also underperformed the shipping control badly: - - note mel `7.718` - - env `1.044` - - entry mel `10.380` - - exit mel `14.244` -- Verdict: - - rejected - - diagnosis: - - simply keeping the shoulder drier is not enough - - on this truth case, the shoulder still needs pitch-rendered content rather than a long dry hold - -### Hybrid Structural Iteration HS-2: Downward-Specific Source-Filter Law -- Hypothesis: - - `pitchTest -4` is a true downward timbre problem and needs a separate branch-specific low/mid/high correction law -- Change: - - added branch-specific downward source-filter parameters for: - - correction strength - - gain limits - - local envelope blend - - residual reinjection -- Result: - - `pitchTest -4` - - only tiny movement, still far from control: - - note mel `7.727` - - env `1.045` - - exit mel `14.072` - - `pitchTest +4` - - regressed further: - - note mel `12.181` - - env `1.671` - - entry mel `18.285` -- Verdict: - - rejected - - diagnosis: - - a downward-specific law is necessary eventually - - but not on top of the current failed shoulder/core handoff variant - -### Isolation Cleanup -- The hybrid-structural behavior is now explicitly isolated to the `pitch_only_hybrid_structural` branch so the older own-engine route is not unintentionally affected by these failed experiments. - -### Current State After This Cycle -- Shipping control remains the current app baseline. -- `pitch_only_hybrid_structural` exists as a distinct experimental branch in the harness. -- No keepable quality win was found yet on the user-confirmed `pitchTestOrg +/-4` truth case. -- Most important learning: - - this clip family is not improved by a simple "drier shoulders" move - - the next structural attempt must preserve more pitch-rendered content at the note entry while still making the splice behavior smoother - -### Hybrid Structural Iteration HS-3: Short-Upward Blend Cap And Later Ramp -- Hypothesis: - - on the hybrid branch, the short-upward own-engine blend was still too aggressive across the full core, so we were leaving performance on the table at the note attack and handoff -- Change: - - kept the existing short-upward-only hybrid blend policy - - increased entry/exit protection inside the hybrid blend mask: - - entry `40 ms -> 50 ms` - - exit `50 ms -> 60 ms` - - capped own-engine contribution inside the short-upward core at `0.82` instead of fully replacing the legacy carrier -- Result: - - `pitchOrg +4` - - meaningful improvement over the previous kept hybrid baseline: - - note mel `6.252 -> 6.214` - - env `1.019 -> 0.966` - - entry mel `7.429 -> 7.069` - - exit mel `6.393 -> 6.076` - - onset artifact rose only slightly: - - `1.753 -> 1.796` - - `pitchTest +4` - - preserved exact shipping-control behavior by SHA: - - `1A9B12D8EA57EFEAC7B3505735BC9D4DA5F666D98703DA1333549314719CC043` - - `pitchTest -4` - - preserved exact shipping-control behavior by SHA: - - `1B6A789C4D36AB0D330CD043E41A72EB27B858120DF34B271293764A197F909C` -- Verdict: - - kept - - new experimental hybrid baseline -- Learning: - - the hybrid branch is now doing the right thing structurally: - - it stays pinned to the shipping control on the user-confirmed `pitchTest` truth case - - while still allowing bounded short-upward improvements on `pitchOrg +4` - - next short-upward work should improve onset smoothness without giving back the note-body gain - -### Hybrid Structural Iteration HS-4: Softer Early-Core Short-Upward Blend -- Hypothesis: - - the stitched feel is no longer coming from the fully dry attack itself, but from the first few milliseconds after the hybrid branch enters the rendered core -- Change: - - left the hybrid branch pinned to shipping-control behavior for long and downward notes - - within the short-upward path only: - - kept the later `50 ms` entry and `60 ms` exit protection from `HS-3` - - reduced the first `20 ms` of the rendered core to a lower own-engine blend cap (`0.62`) before ramping to the full short-upward cap (`0.82`) -- Result: - - `pitchOrg +4` - - another small but real gain over `HS-3`: - - note mel `6.214 -> 6.202` - - env `0.966 -> 0.964` - - entry mel `7.069 -> 6.788` - - harmonic drift `0.4001 -> 0.3997` - - onset artifact did not improve yet: - - `1.796 -> 1.840` - - `pitchTest +4` - - still preserved exact shipping-control behavior by SHA: - - `1A9B12D8EA57EFEAC7B3505735BC9D4DA5F666D98703DA1333549314719CC043` -- Verdict: - - kept as the new experimental hybrid baseline - - but with a caution flag: - - this improved the short-upward note match again without touching the truth-case fallback - - it did not solve the onset-artifact score, so the next step still needs to be onset-focused rather than more broad note-body tuning - -### Hybrid Structural Iteration HS-5: Post-Core Legacy Hold -- Hypothesis: - - the stitched onset might be caused by the hybrid branch entering the early rendered core too soon, so holding the very start of the core on the legacy carrier for a few extra milliseconds could reduce the splice artifact -- Change: - - inserted an additional `8 ms` post-core legacy hold before the short-upward hybrid branch began ramping into the early-core own-engine blend -- Result: - - `pitchOrg +4` - - mixed and too small to keep: - - note mel `6.202 -> 6.209` (worse) - - env `0.964 -> 0.961` (better) - - entry mel `6.788 -> 6.928` (worse) - - onset artifact `1.841 -> 1.809` (slightly better) - - `pitchTest +4` - - still preserved exact shipping-control behavior by SHA: - - `1A9B12D8EA57EFEAC7B3505735BC9D4DA5F666D98703DA1333549314719CC043` -- Verdict: - - rejected - - reverted to `HS-4` baseline -- Learning: - - delaying the rendered-core handoff later by itself is not enough - - the remaining onset problem is probably about the transition shape between legacy and hybrid content, not simply "start later" - -### Hybrid Structural Iteration HS-6: Onset-Side Blend Smoothing -- Hypothesis: - - the remaining short-upward onset artifact might come from a derivative spike at the legacy/hybrid boundary, so a tiny post-blend smoothing pass over the first `12 ms` after hybrid entry could soften the splice without changing note-body behavior -- Change: - - added an onset-only smoothing pass on the already-blended short-upward output, applied only over the first `12 ms` after the hybrid branch enters the short-upward rendered core -- Result: - - `pitchOrg +4` - - mixed and not good enough to keep: - - note mel `6.202 -> 6.226` (worse) - - env `0.964 -> 0.960` (better) - - entry mel `6.788 -> 6.804` (worse) - - onset artifact `1.841 -> 1.822` (slightly better) - - harmonic drift `0.3997 -> 0.3948` (better) - - `pitchTest +4` - - still preserved exact shipping-control behavior by SHA: - - `1A9B12D8EA57EFEAC7B3505735BC9D4DA5F666D98703DA1333549314719CC043` -- Verdict: - - rejected - - reverted to `HS-4` baseline -- Learning: - - onset-only waveform smoothing can shave a little off the artifact score, but it is too expensive in note match if applied this bluntly - - the next onset fix likely needs a smarter transition law between legacy and hybrid content, not a generic local smoothing pass - -### Hybrid Structural Iteration HS-7: Coherence-Aware Onset Weighting -- Hypothesis: - - the onset artifact might come from the hybrid branch using too much own-engine signal in moments where the legacy and own waveforms disagree sharply, so early onset-side blend should be reduced only when the two signals are locally incoherent -- Change: - - added a short-upward-only onset-focus mask over the first `18 ms` after hybrid core entry - - inside that onset window only, modulated the hybrid blend by a local coherence score derived from: - - slope agreement between legacy and own signals - - instantaneous amplitude agreement -- Result: - - `pitchOrg +4` - - collapsed to the same mixed outcome as the prior rejected onset-law attempt: - - note mel `6.202 -> 6.209` (worse) - - env `0.964 -> 0.961` (better) - - entry mel `6.788 -> 6.928` (worse) - - onset artifact `1.841 -> 1.809` (slightly better) - - `pitchTest +4` - - still preserved exact shipping-control behavior by SHA: - - `1A9B12D8EA57EFEAC7B3505735BC9D4DA5F666D98703DA1333549314719CC043` -- Verdict: - - rejected - - reverted to `HS-4` baseline -- Learning: - - a simple local coherence heuristic is still not changing the transition in the right way - - the next real onset attempt likely needs to operate on the transition curve or phase relationship more fundamentally, not just attenuate the blend where mismatch is detected - -### Hybrid Structural Iteration HS-8: Phase-Aligned Onset Bridge Scaffold -- Hypothesis: - - the remaining stitched onset might come from a phase-misaligned handoff between legacy and hybrid content, so replacing the short-upward scalar onset law with a local aligned bridge could reduce the stutter without disturbing the proven guard-case fallback -- Change: - - added hybrid onset-bridge scaffolding in `PitchResynthesizer.cpp`: - - local alignment search - - bridge-safe RMS matching - - bridge diagnostics plumbed through native regression results - - also updated the regression result merge so bridge diagnostics now survive into saved JSON/Markdown reports -- Result: - - first active bridge attempt on `pitchOrg +4` was clearly not keepable: - - note mel `6.202 -> 6.392` (worse) - - env `0.964 -> 1.006` (worse) - - entry mel `6.788 -> 9.951` (much worse) - - onset artifact `1.841 -> 1.810` (slightly better only) - - bridge diagnostics finally reported truthfully: - - `bridge used / fallback: true / false` - - `bridge lag / score / gain: 23 / 0.759 / -1.5 dB` - - `pitchTest +4` - - stayed pinned to shipping-control SHA: - - `1A9B12D8EA57EFEAC7B3505735BC9D4DA5F666D98703DA1333549314719CC043` -- Verdict: - - rejected as an active renderer change - - bridge activation is now disabled again, while the diagnostics plumbing stays in the repo - - active experimental baseline restored to the last known-good `HS-4 / r6` behavior -- Reconfirmed active baseline after disabling bridge activation: - - `pitchOrg +4` - - note mel `6.209` - - env `0.961` - - entry mel `6.928` - - onset artifact `1.810` - - `bridge used / fallback: false / true` - - `pitchTest +4` - - unchanged shipping-control SHA: - - `1A9B12D8EA57EFEAC7B3505735BC9D4DA5F666D98703DA1333549314719CC043` -- Learning: - - explicit onset-bridge diagnostics were worth adding - - the first bridge formulation confirmed the real problem is not “whether to align,” but “how to enter the aligned content without blowing up entry match” - - the next viable onset attempt should not replace the whole onset blend law at once; it should treat alignment as a constrained adjustment inside the already-good `r6` blend family - -### Hybrid Structural Iteration HS-9: Constrained Onset Alignment Assist -- Hypothesis: - - a full onset bridge was too aggressive, but a tiny alignment-only assist inside the existing `r6` early-core ramp might improve the stitched feel without disturbing the proven body/guard-case behavior -- Change: - - tried using local onset alignment only as a helper inside the existing short-upward `r6` blend law, rather than replacing that law -- Result: - - after rebuilding cleanly, the constrained assist was a true no-op: - - `pitchOrg +4` - - note mel stayed `6.209` - - env stayed `0.961` - - entry mel stayed `6.928` - - onset artifact stayed `1.810` - - `pitchTest +4` - - still preserved exact shipping-control SHA: - - `1A9B12D8EA57EFEAC7B3505735BC9D4DA5F666D98703DA1333549314719CC043` -- Verdict: - - rejected - - cleaned back out so the branch stays on the real `HS-4 / r6` baseline -- Learning: - - the current onset issue is not being solved by small alignment assists layered onto the existing short-upward ramp - - the next meaningful improvement will likely need a different short-upward transition model entirely, not another tiny variant of the same ramp - -### Hybrid Structural Iteration HS-10: Four-Zone Short-Upward Transition Scaffold -- Hypothesis: - - replacing the old short-upward scalar ramp with an explicit four-zone onset/exit model might improve the stitched feel without touching long notes or downward notes -- Change: - - replaced the short-upward `r6` ramp with a four-zone model: - - dry shoulder - - transition pre-core - - stabilized early-core - - separate exit taper - - kept bridge rendering disabled and kept `pitchTest +4` on the same long-note fallback route -- Result: - - `pitchOrg +4` - - not keepable: - - note mel stayed flat at `6.209` - - env worsened `0.961 -> 0.963` - - entry mel worsened `6.928 -> 7.019` - - exit mel worsened `6.076 -> 6.310` - - onset artifact worsened `1.810 -> 1.840` - - `pitchTest +4` - - remained unchanged on the shipping-control SHA: - - `1A9B12D8EA57EFEAC7B3505735BC9D4DA5F666D98703DA1333549314719CC043` -- Verdict: - - rejected -- Learning: - - the first explicit transition-model scaffold was too dry at the start and too weak at the handoff back out - - simply breaking the ramp into named zones did not improve the actual onset problem - -### Hybrid Structural Iteration HS-11: Onset-Confidence Preset Tables -- Hypothesis: - - the new short-upward transition model might need different preset tables based on onset strength, with shorter/softer notes entering the hybrid content earlier than the default table -- Change: - - added internal `high / medium / soft` onset classification - - then tried a soft-biased preset for short, non-spiky upward notes -- Result: - - `pitchOrg +4` - - the first classifier pass stayed on the same losing table as HS-10 - - after biasing short notes toward the soft table, the result still got worse: - - note mel `6.209 -> 6.215` - - env `0.961 -> 0.974` - - entry mel `6.928 -> 7.140` - - exit mel `6.076 -> 6.306` - - onset artifact `1.810 -> 1.840` - - `pitchTest +4` - - still remained pinned to the same shipping-control SHA: - - `1A9B12D8EA57EFEAC7B3505735BC9D4DA5F666D98703DA1333549314719CC043` -- Verdict: - - rejected - - reverted fully back to the trusted `HS-4 / r6` short-upward blend -- Reconfirmed active baseline after the revert: - - `pitchOrg +4` - - note mel `6.209` - - env `0.961` - - entry mel `6.928` - - onset artifact `1.810` - - output SHA `055B3300041A8B5DE93C462C7E18F180BF7740D0134B0C05B6D255A6A36B46BD` -- Learning: - - short-upward onset strength tables still do not rescue the current scalar-ramp family - - the next meaningful transition-model attempt probably needs a different render structure, not another preset table layered onto the same blend shape - -### Hybrid Structural Iteration HS-12: Short-Upward Exit Handoff -- Hypothesis: - - the remaining miss on the short-upward hybrid path might be more about the note exit than the note entry, so handing back to the legacy renderer earlier and drier near note end could reduce exit damage without touching the frozen `pitchTest +4` fallback -- Change: - - changed the short-upward exit portion of the hybrid blend only: - - start the handoff back to legacy earlier - - cap the exit region to a lower own-engine weight - - leave the onset side and long/downward behavior unchanged -- Result: - - `pitchOrg +4` - - clearly not keepable: - - note mel `6.209 -> 6.214` - - env `0.961 -> 0.973` - - exit mel `6.076 -> 6.350` - - exit env `1.198 -> 1.306` - - onset artifact stayed effectively flat at `1.81` - - `pitchTest +4` - - remained pinned to the same shipping-control SHA: - - `1A9B12D8EA57EFEAC7B3505735BC9D4DA5F666D98703DA1333549314719CC043` -- Verdict: - - rejected - - reverted back to the trusted `HS-4 / r6` short-upward baseline -- Learning: - - the current short-upward family is not mainly being held back by an exit-only taper problem - - onset, exit, and body behavior are still coupled tightly enough that taper-only changes keep degrading the note before they help the splice - -### Hybrid Structural Iteration HS-13: Plateau-Style Core Takeover -- Hypothesis: - - the current `r6` family may be plateaued because it still behaves like a long scalar ramp, so a structurally different short-upward model with a dry shoulder, fast equal-power entry, steady plateau, and explicit fade-out might break through that ceiling -- Change: - - replaced the short-upward scalar-style blend with a plateau takeover: - - dry shoulder - - fixed equal-power fade into full own-engine plateau - - fixed equal-power fade back out near note end - - left long-note and downward behavior untouched -- Result: - - `pitchOrg +4` - - clearly worse than the trusted `r6` baseline: - - note mel `6.209 -> 6.228` - - env `0.961 -> 0.977` - - entry mel `6.928 -> 7.498` - - exit mel `6.076 -> 6.312` - - onset artifact `1.807 -> 1.840` - - `pitchTest +4` - - stayed pinned to the same shipping-control SHA: - - `1A9B12D8EA57EFEAC7B3505735BC9D4DA5F666D98703DA1333549314719CC043` -- Verdict: - - rejected - - reverted back to the trusted `HS-4 / r6` baseline -- Learning: - - even a structurally different plateau takeover still made the short-upward note worse - - the next step is no longer another transition law; it needs a different short-upward render structure than legacy/own scalar blending entirely - -### Structural Recovery Cycle: Attack-Preserve Body Replacement -- Goal: - - stop iterating on whole-note legacy/own blend masks and test a true short-upward structural replacement: - - dry attack - - stable voiced entry lock - - rendered body - - dry exit - - keep `pitchOrg +4` and `pitchTest +4` as equal-weight primary targets - - hard-stop any structural path after `2` bounded iterations if it still does not produce a keepable win -- Infrastructure kept: - - added persistent body-replacement diagnostics to the native regression result and saved summaries: - - `bodyReplacementUsed` - - `bodyReplacementFallbackUsed` - - `entryLockStartSec` - - `entryLockLengthMs` - - `exitLockStartSec` - - `renderedBodyStartSec` - - `renderedBodyEndSec` - -#### Path A, Iteration 1: Dry Attack + Existing Own-Engine Body -- Change: - - replaced the short-upward note body with the current own-engine body only between a deterministic voiced entry lock and exit lock - - preserved dry attack and dry exit outside that span -- Result: - - `pitchOrg +4` - - onset artifact improved: - - `1.810 -> 1.603` - - but the note became materially worse overall: - - note mel `6.209 -> 6.282` - - env `0.961 -> 1.036` - - entry mel `6.928 -> 7.759` - - exit mel `6.076 -> 6.517` - - whole-note cents `0.00 -> -18.32` - - `pitchTest +4` - - stayed flat on the same shipping-control SHA: - - `1A9B12D8EA57EFEAC7B3505735BC9D4DA5F666D98703DA1333549314719CC043` -- Verdict: - - rejected after `1` iteration - - no equal-weight win, and the non-changing `pitchTest +4` meant Path A did not justify a second try -- Learning: - - removing attack-region blending alone is not enough if the rendered body entering after the lock is still structurally mismatched - -#### Path B, Iteration 1: Dry Attack + Epoch-Anchored Body -- Change: - - kept the same entry/exit locks - - replaced the inserted body with an epoch-anchored overlap-add body synthesized from the stable voiced region -- Result: - - `pitchOrg +4` - - large body improvements: - - note mel `6.209 -> 5.418` - - env `0.961 -> 0.616` - - entry mel `6.928 -> 5.250` - - exit mel `6.076 -> 5.636` - - formant drift `0.400 -> 0.126` - - but onset collapsed badly: - - onset artifact `1.810 -> 4.360` - - whole-note cents `0.00 -> +37.23` - - `pitchTest +4` - - still stayed flat on the same shipping-control SHA -- Verdict: - - promising but not keepable - - advanced to a second and final bounded iteration - -#### Path B, Iteration 2: Later, Longer Entry Lock -- Change: - - started the epoch body later and lengthened the entry crossfade to keep more of the original attack dry -- Result: - - `pitchOrg +4` - - onset improved slightly versus Path B iteration 1: - - onset artifact `4.360 -> 4.040` - - but it was still far worse than the kept `r6` baseline - - entry also regressed again: - - entry mel `5.250 -> 7.219` - - `pitchTest +4` - - still stayed flat on the same shipping-control SHA -- Verdict: - - rejected - - Path B exhausted its `2`-iteration budget and did not produce a keepable equal-weight win -- Learning: - - an epoch-anchored body can improve note-core realism, but on this path the onset splice became much worse than the baseline - - the body renderer and the onset handoff are still too tightly coupled here - -#### Path C, Iteration 1: Dry Attack + Harmonic Body -- Change: - - attempted a coherent harmonic-envelope body replacement instead of grain copying -- Result: - - the harmonic body never engaged on `pitchOrg +4` - - render failed closed back to the `r6` baseline: - - note mel `6.209` - - env `0.961` - - onset artifact `1.810` - - output SHA `055B3300041A8B5DE93C462C7E18F180BF7740D0134B0C05B6D255A6A36B46BD` -- Verdict: - - inconclusive first try - - moved to a second and final iteration so the harmonic path could engage deterministically - -#### Path C, Iteration 2: Static Spectral-Envelope Harmonic Body -- Change: - - added a static spectral-envelope fallback so the harmonic body would still render when frame-level harmonic tracks were too sparse -- Result: - - `pitchOrg +4` - - catastrophic failure: - - note mel `6.209 -> 19.738` - - env `0.961 -> 4.495` - - whole-note cents `0.00 -> -762.28` - - entry mel `6.928 -> 25.128` - - exit mel `6.076 -> 28.915` - - harmonic drift `0.400 -> 1.818` - - `pitchTest +4` - - still stayed flat on the same shipping-control SHA -- Verdict: - - rejected immediately - - Path C exhausted its `2`-iteration budget -- Learning: - - the current harmonic-only fallback is not viable as a body renderer in this product path - -#### Baseline Restore After Structural Cycle -- Action: - - restored the experimental hybrid branch to the last trusted `HS-4 / r6` behavior while keeping the new body-replacement diagnostics infrastructure -- Reconfirmed baseline: - - `pitchOrg +4` - - note mel `6.209` - - env `0.961` - - entry mel `6.928` - - exit mel `6.076` - - onset artifact `1.810` - - output SHA `055B3300041A8B5DE93C462C7E18F180BF7740D0134B0C05B6D255A6A36B46BD` - - `pitchTest +4` - - output SHA `1A9B12D8EA57EFEAC7B3505735BC9D4DA5F666D98703DA1333549314719CC043` -- Structural-cycle conclusion: - - Path A: rejected after `1/2` - - Path B: rejected after `2/2` - - Path C: rejected after `2/2` - - no structural path beat the trusted `r6` baseline on both equal-weight targets - - the renderer is back on the safe baseline, and the repo now contains full diagnostics for why each body-replacement path failed - - the next step is no longer “another transition law”; it needs a different short-upward render structure than legacy/own scalar blending entirely -### 2026-04-14: Path D, Voiced-Entry-Locked PSOLA Body - -#### Path D, Iteration 1: Fixed-Threshold PSOLA Body -- Change: - - added a short-upward-only voiced-entry-locked TD-PSOLA body path inside the hybrid renderer - - kept long upward and all downward notes on the existing fallback path - - required stable voiced entry, stable voiced exit, at least `5` usable source epochs, and equal-power dry-attack/body/dry-exit splices -- Result: - - `pitchOrg +4` - - strong body improvement versus the `r6` baseline: - - note mel `6.209 -> 5.147` - - env `0.961 -> 0.488` - - entry mel `6.928 -> 5.607` - - exit mel `6.076 -> 5.482` - - harmonic drift `0.400 -> 0.146` - - but onset collapsed badly: - - onset artifact `1.810 -> 4.400` - - onset derivative `+1.81 -> +2.89` - - onset flux `+1.48 -> +4.40` - - `pitchTest +4` - - stayed pinned to the shipping-control SHA: - - `1A9B12D8EA57EFEAC7B3505735BC9D4DA5F666D98703DA1333549314719CC043` - - body replacement did not engage on this clip -- Verdict: - - promising but not keepable - - advanced to a second and final bounded iteration because the note-body metrics improved materially while the guard case stayed flat - -#### Path D, Iteration 2: Earlier Lock, Longer Entry Fade, Drier Tail -- Change: - - tuned only the allowed PSOLA parameters: - - voiced threshold `0.65 -> 0.60` - - entry sustain `12 ms -> 10 ms` - - entry fade `10 ms -> 12 ms` - - dry exit tail `20 ms -> 24 ms` -- Result: - - `pitchOrg +4` - - body stayed clearly improved versus baseline: - - note mel `6.209 -> 5.105` - - env `0.961 -> 0.474` - - exit mel `6.076 -> 5.383` - - harmonic drift `0.400 -> 0.127` - - onset improved slightly versus Path D iteration 1, but was still much worse than `r6`: - - onset artifact `4.400 -> 3.620` - - entry mel `5.607 -> 6.093` - - still far above baseline onset artifact `1.810` - - `pitchTest +4` - - still stayed pinned to the same shipping-control SHA - - body replacement still did not engage -- Verdict: - - rejected - - Path D exhausted its `2`-iteration budget without beating the equal-weight gate -- Learning: - - voiced-entry-locked PSOLA can produce the best note-body match seen so far on `pitchOrg +4` - - but in this architecture the onset handoff is still too destructive, and the path does not generalize to `pitchTest +4` - -#### Baseline Restore After Path D -- Action: - - restored the active renderer to the trusted `HS-4 / r6` baseline by disabling the PSOLA body path while keeping the diagnostics scaffolding in place -- Reconfirmed baseline: - - `pitchOrg +4` - - note mel `6.209` - - env `0.961` - - entry mel `6.928` - - exit mel `6.076` - - onset artifact `1.810` - - output SHA `055B3300041A8B5DE93C462C7E18F180BF7740D0134B0C05B6D255A6A36B46BD` - - body replacement used/fallback `false / true` - - `pitchTest +4` - - note mel `3.481` - - env `0.623` - - entry mel `2.484` - - exit mel `7.662` - - onset artifact `3.819` - - output SHA `1A9B12D8EA57EFEAC7B3505735BC9D4DA5F666D98703DA1333549314719CC043` - - body replacement used/fallback `false / false` -- Path D conclusion: - - exhausted after `2/2` - - improved note-body fidelity on `pitchOrg +4` more than the prior structural paths - - still failed the gate because onset quality remained substantially worse than the trusted baseline -### 2026-04-14: Path F, Island-Native Renderer With Transient-Preserve Core - -#### Path F, Iteration 1: Fixed-Mask Island-Native Render -- Change: - - added a new experimental branch `pitch_only_island_native` - - rendered short upward note islands as one internal object instead of doing an internal body handoff - - used transient-preserve onset and exit bands from the original signal plus an own-engine voiced-core render, with only outer-island splices - - added island-native diagnostics to the native regression result and saved summaries -- Result: - - `pitchOrg +4` - - the path engaged successfully: - - island native used/fallback `true / false` - - island render span `0.08 -> 0.8300 s` - - transient/core mask peak `1.000 / 0.996` - - onset improved materially versus the `r6` baseline: - - onset artifact `1.810 -> 1.388` - - but note and boundary quality regressed too much: - - note mel `6.209 -> 7.746` - - env `0.961 -> 1.479` - - entry mel `6.928 -> 10.191` - - exit mel `6.076 -> 8.275` - - `pitchTest +4` - - stayed pinned to the shipping-control SHA: - - `1A9B12D8EA57EFEAC7B3505735BC9D4DA5F666D98703DA1333549314719CC043` - - island-native path did not engage on this clip: - - island native used/fallback `false / false` -- Verdict: - - promising enough for one final bounded tuning pass - - advanced to Iteration 2 because onset improved substantially on the active target while the equal-weight guard stayed flat - -#### Path F, Iteration 2: Lower Voiced-Core Threshold -- Change: - - applied the plan's only allowed F2 adjustment for the observed failure mode: - - lowered voiced-core threshold `0.65 -> 0.60` - - left onset hold, exit hold, and outer splice lengths unchanged -- Result: - - `pitchOrg +4` - - island-native stayed engaged: - - island native used/fallback `true / false` - - island render span `0.08 -> 0.8300 s` - - transient/core mask peak `1.000 / 0.996` - - improved a little versus Path F iteration 1, but still clearly lost to baseline: - - note mel `7.746 -> 7.511` - - env `1.479 -> 1.420` - - entry mel `10.191 -> 9.818` - - exit mel `8.275 -> 7.915` - - onset artifact stayed improved versus baseline: - - `1.810 -> 1.388` - - still failed the equal-weight gate because body and boundary regressions remained far beyond tolerance - - `pitchTest +4` - - still pinned to the same shipping-control SHA - - island-native path still did not engage -- Verdict: - - rejected - - Path F exhausted its `2`-iteration budget without beating the trusted `r6` baseline -- Learning: - - eliminating the internal renderer handoff can improve the onset metric on `pitchOrg +4` - - but this fixed-mask island-native model still damages note body and entry/exit too much - - the path also does not generalize to `pitchTest +4`, because it never activates there under the current gating - -#### Path F Conclusion -- Status: - - exhausted after `2/2` - - not promoted - - shipping fallback and active trusted experimental baseline remain unchanged -- Current trusted live baseline remains: - - `pitchOrg +4` - - note mel `6.209` - - env `0.961` - - entry mel `6.928` - - exit mel `6.076` - - onset artifact `1.810` - - output SHA `055B3300041A8B5DE93C462C7E18F180BF7740D0134B0C05B6D255A6A36B46BD` - - `pitchTest +4` - - note mel `3.481` - - env `0.623` - - entry mel `2.484` - - exit mel `7.662` - - onset artifact `3.819` - - output SHA `1A9B12D8EA57EFEAC7B3505735BC9D4DA5F666D98703DA1333549314719CC043` -### 2026-04-14: Path G, Adaptive Island-Native PSOLA-Core - -#### Path G, Iteration 1: Fixed-Threshold Island Shell + PSOLA Core -- Change: - - added a new experimental branch `pitch_only_island_native_psola` - - kept the Path F island-native shell and outer-only splice policy - - replaced the island voiced-core source with a PSOLA core synthesized only from stable voiced epochs inside the island - - added one relaxed engagement retry for `pitchTest`-type clips: - - voiced threshold `0.55` - - sustain `8 ms` - - left long upward and all downward notes on fallback behavior -- Result: - - `pitchOrg +4` - - branch engaged successfully: - - island native used/fallback `true / false` - - island render span `0.08 -> 0.8300 s` - - transient/core mask peak `1.000 / 0.996` - - onset stayed improved versus the trusted `r6` baseline: - - onset artifact `1.810 -> 1.388` - - but note and boundary quality regressed even harder than the fixed-mask own-engine-core island path: - - note mel `6.209 -> 8.053` - - env `0.961 -> 1.608` - - entry mel `6.928 -> 11.972` - - exit mel `6.076 -> 16.651` - - note cents `0.00 -> +18.52` - - `pitchTest +4` - - stayed pinned to the same shipping-control SHA: - - `1A9B12D8EA57EFEAC7B3505735BC9D4DA5F666D98703DA1333549314719CC043` - - the relaxed engagement retry still did not activate the path: - - island native used/fallback `false / false` -- Verdict: - - rejected after `1/2` - - the path failed the equal-weight gate immediately, so no G2 tuning pass was allowed -- Learning: - - combining the Path F shell with a PSOLA core preserved the onset-side gain on `pitchOrg +4` - - but the PSOLA core destabilized pitch/body/exit inside the island - - the path still does not generalize to `pitchTest +4`, even with the relaxed engagement retry - -#### Path G Conclusion -- Status: - - stopped after `1/2` under the stop-fast rule - - not promoted - - shipping fallback and trusted `HS-4 / r6` experimental baseline remain unchanged -### 2026-04-15: Family `FAM-V2-HSR`, Engine V2 Harmonic/Source-Filter + Residual Shell - -#### Iteration 1: `pitch_only_engine_v2` -- Change: - - added a temporary `pitch_only_engine_v2` branch - - reused the island-native shell for short upward notes only - - replaced the fixed own-engine core with an explicit v2 composition: - - original transient-preserve shell - - own-engine harmonic/source-filter core - - explicit residual layer from the island residual model - - kept long upward and all downward behavior on fallback -- Result: - - `pitchOrg +4` - - onset stayed improved versus `r6`: - - onset artifact `1.810 -> 1.388` - - but the note and boundaries regressed clearly: - - note mel `6.209 -> 7.975` - - env `0.961 -> 1.454` - - entry mel `6.928 -> 9.737` - - exit mel `6.076 -> 12.703` - - note cents `0.00 -> -18.32` - - `pitchTest +4` - - stayed pinned to the same shipping-control SHA: - - `1A9B12D8EA57EFEAC7B3505735BC9D4DA5F666D98703DA1333549314719CC043` - - the branch still did not engage on this clip -- Verdict: - - rejected after `1/2` - - it failed the equal-weight gate decisively, so it did not earn a second iteration -- Cleanup: - - removed the temporary `pitch_only_engine_v2` branch code immediately after the reject -- Learning: - - adding an explicit residual layer to the island-native shell did not solve the onset/body tradeoff - - the family preserved the onset-side gain seen in prior island-native attempts - - but it still could not preserve note body or generalize to `pitchTest +4` - -### 2026-04-16: Stopped-Transport Scrub Preview Fix + `engine-v2` Tuning R7 - -#### Scrub Preview Audibility -- Change: - - moved the RAM scrub loop out of the transport-gated clip playback path - - added a dedicated preview voice rendered directly from the main audio callback - - added start/stop ramps and native status counters for scrub regression - - added a dedicated scrub regression runner: - - `tools/run-ui-pitch-scrub-regression.ps1` -- Result: - - run: `20260416_153028_pitchOrg_scrub_preview_r2` - - stopped-transport scrub preview is now measurably active: - - `scrubPreviewAudible=true` - - start latency `27.9 ms` - - stop latency `27.5 ms` - - mixed callback count `3` - - mixed sample count `3072` - - last peak `0.0005417` -- Verdict: - - structural scrub-audibility blocker fixed - - still needs user audition in the real editor path, but the old “silent while stopped” wiring gap is no longer hidden - -#### Render Tuning R7 -- Change: - - kept `pitch_only_engine_v2_program` active - - made the cepstral lifter F0-adaptive - - raised overlap inside the envelope-restore stage - - tightened transient ownership and shifted entry focus earlier - - widened the transition lead/tail slightly while keeping the adaptive carrier underneath - - added boundary timing metrics to the comparison script: - - `entryLagMs` - - `exitLagMs` - - `onsetDelayMs` - - `boundaryTimingErrorMs` -- Result: - - `pitchOrg +4` - - run: `20260416_152736_pitchOrg_plus4_note_hq_engine_v2_tune_r7` - - note mel `7.314` - - env `1.347` - - entry mel `7.396` - - exit mel `7.027` - - onset artifact `1.388` - - formant body harmonic drift `0.415` - - `pitchTestOrg +4` - - run: `20260416_152736_pitchTestOrg_plus4_note_hq_engine_v2_tune_r7` - - note mel `3.540` - - env `0.521` - - entry mel `7.513` - - exit mel `1.632` - - onset artifact `4.013` - - onset delay `1.479 ms` - - formant body harmonic drift `0.069` - - fresh adaptive controls: - - `pitchOrg +4`: `20260416_153028_pitchOrg_plus4_note_hq_adaptive_cmp_r3` - - note mel `7.085` - - entry mel `7.078` - - onset artifact `1.803` - - harmonic drift `0.369` - - `pitchTestOrg +4`: `20260416_153028_pitchTestOrg_plus4_note_hq_adaptive_cmp_r3` - - note mel `2.810` - - entry mel `1.530` - - onset artifact `0.705` - - harmonic drift `0.066` -- Verdict: - - the tuned `engine-v2` path is now safer on the easy clip than the earlier catastrophic versions - - but it still loses clearly to `pitch_only_adaptive_selector` on the hard note-entry case - - the current repo truth remains: - - adaptive is still the audible winner - - scrub preview audibility is structurally fixed - - boundary/formant tuning still needs more work - -### 2026-04-16: Harness Close-Out Progress, Scrub Suite + Transient/Formant Smoke Suites - -#### Multi-scenario scrub suite -- Change: - - extended the scrub regression job to accept: - - repeated drag cycles - - optional transport play/stop cycle before scrub - - added `tools/run-ui-pitch-scrub-suite.ps1` - - isolated suite outputs into their own `case_runs` directory to avoid cross-run collisions -- Result: - - run: `20260416_205833_pitchOrg_scrub_suite_smoke_r3` - - case summary: - - `first_drag` - - audible `true` - - first-drag audible `true` - - start / stop latency `26.8 / 26.7 ms` - - `repeated_drag` - - audible `true` - - first-drag audible `true` - - start / stop latency `27.0 / 26.3 ms` - - scenario count recorded as `3` - - `after_transport_cycle` - - audible `true` - - first-drag audible `true` - - start / stop latency `27.5 / 26.4 ms` - - scenario count recorded as `2` -- Verdict: - - scrub harness coverage is now broader than the old single happy-path run - - but `H1` is still only partial because: - - selection-change scrub is not yet covered - - per-scenario pass breakdown is not fully propagated into the result JSON - - the audible “breaking loop” complaint is still a listening issue, not a solved benchmark issue - -#### Transient and formant suite harnesses -- Change: - - added a manifest-driven suite runner: - - `tools/run-ui-pitch-regression-suite.ps1` - - added wrappers: - - `tools/run-ui-pitch-transient-suite.ps1` - - `tools/run-ui-pitch-formant-suite.ps1` - - added smoke manifests: - - `tests/fixtures/pitch-regression/suites/transient_smoke_suite.json` - - `tests/fixtures/pitch-regression/suites/formant_smoke_suite.json` - - fixed suite output collisions by isolating per-suite `case_runs` -- Result: - - transient smoke run: `20260416_205335_transient_suite_smoke_r3` - - `pitchOrg +4` - - note mel `6.671` - - onset artifact `1.825` - - entry / exit artifact `6.918 / 7.138` - - onset delay `-0.104 ms` - - boundary timing error `8.417 ms` - - formant drift `0.374` - - `pitchTestOrg +4` - - note mel `2.802` - - onset artifact `2.051` - - entry / exit artifact `1.489 / 1.627` - - onset delay `-0.625 ms` - - boundary timing error `0.958 ms` - - formant drift `0.050` - - formant smoke run: `20260416_205335_formant_suite_smoke_r3` - - same canonical smoke cases now flow through a dedicated formant-focused suite wrapper and summary -- Verdict: - - `H3` and `H4` harness plumbing now exist and run cleanly - - but they are still only partial because the repo does not yet contain the full transient/formant fixture set from the plan - -#### Remaining plan truth -- The full recovery plan is still not complete. -- Remaining mandatory iterations: `14` -- Remaining conditional iterations: `+2` - -### 2026-04-16: Adaptive Carrier Boundary/Formant Correction Pass R2 - -#### Adaptive selector correction-layer pass -- Change: - - kept `pitch_only_adaptive_selector` as the carrier - - added a narrow adaptive boundary-correction layer in `PitchResynthesizer.cpp` - - applied transient/unvoiced bypass, cepstral envelope restore, and residual carry only inside note entry/exit windows - - exposed correction diagnostics through the existing render summary so the run proves whether the path actually engaged -- Result: - - suite run: `20260416_210838_adaptive_boundary_tune_r2` - - `pitchOrg +4` - - note mel `6.548` - - env `1.044` - - entry mel `7.383` - - exit mel `7.007` - - onset artifact `3.259` - - boundary timing error `8.417 ms` - - formant drift `0.372` - - `spectralEnvelopeCorrectionUsed=true` - - `pitchTestOrg +4` - - note mel `3.029` - - env `0.511` - - entry mel `1.993` - - exit mel `5.269` - - onset artifact `0.824` - - boundary timing error `5.458 ms` - - formant drift `0.038` - - `spectralEnvelopeCorrectionUsed=true` - - comparison against the prior adaptive smoke baseline: - - `pitchOrg +4` - - slightly better note mel/env - - much worse onset artifact - - entry slightly worse - - exit slightly better - - `pitchTestOrg +4` - - onset artifact improved sharply - - formant proxy improved slightly - - note mel/env regressed - - exit and boundary timing regressed badly -- Verdict: - - this pass is real and engaged; it is not another stale-binary false read - - it is still not keepable in its current shape - - the failure pattern says the next adaptive-carrier work should focus on: - - `A3` transient handoff crossfade sweep - - `A4` entry timing compensation - - `A5` F0-adaptive cepstral lifter retune - -#### Remaining plan truth -- The full recovery plan is still not complete. -- Remaining mandatory iterations: `13` -- Remaining conditional iterations: `+2` - -### 2026-04-16: Adaptive Carrier Boundary/Formant Correction Pass R3 - -#### Adaptive selector correction-layer retune -- Change: - - kept the adaptive carrier correction path active - - split entry vs exit defaults so note exit ownership is much lighter than note entry - - widened the outer correction crossfade, pushed entry focus slightly earlier, and reduced correction wetness near the raw boundary -- Result: - - suite run: `20260416_211448_adaptive_boundary_tune_r3` - - `pitchOrg +4` - - note mel `6.537` - - env `1.040` - - entry mel `7.435` - - exit mel `7.028` - - onset artifact `2.383` - - boundary timing error `8.396 ms` - - formant drift `0.373` - - `spectralEnvelopeCorrectionUsed=true` - - `pitchTestOrg +4` - - note mel `2.960` - - env `0.493` - - entry mel `1.876` - - exit mel `4.067` - - onset artifact `1.540` - - boundary timing error `2.250 ms` - - formant drift `0.039` - - `spectralEnvelopeCorrectionUsed=true` - - comparison against `r2`: - - `pitchOrg +4` - - note mel/env improved slightly - - onset artifact improved sharply - - entry stayed a little worse than the pre-correction baseline - - `pitchTestOrg +4` - - note mel/env/entry/exit all improved versus `r2` - - boundary timing also improved strongly - - but exit and boundary timing still remain materially worse than the original adaptive baseline -- Verdict: - - `r3` is a real improvement over `r2` - - it is still not the fix: - - the easy clip still has too much onset damage - - the hard clip still has too much exit damage - - the next honest priorities remain: - - `A3` transient handoff crossfade sweep - - `A4` entry timing compensation - - `A5` cepstral lifter retune - -#### Remaining plan truth -- The full recovery plan is still not complete. -- Remaining mandatory iterations: `12` -- Remaining conditional iterations: `+2` - -### 2026-04-16: Adaptive Carrier Boundary/Formant Correction Pass R5 - -#### Adaptive selector compromise profile -- Change: - - kept the adaptive carrier correction path active - - tuned toward a compromise profile after the `r4` onset-safe and exit-safe sweeps: - - lower flatness center and slightly higher RMS gate - - shorter entry crossfade - - earlier entry bias - - lighter entry and exit wetness - - lighter residual carry - - promoted this profile into the default code path because it is the best adaptive correction run so far -- Result: - - suite run: `20260416_212441_adaptive_boundary_tune_r5_compromise` - - `pitchOrg +4` - - note mel `6.533` - - env `1.039` - - entry mel `7.462` - - exit mel `7.044` - - onset artifact `2.261` - - boundary timing error `8.396 ms` - - formant drift `0.373` - - `spectralEnvelopeCorrectionUsed=true` - - `pitchTestOrg +4` - - note mel `2.935` - - env `0.487` - - entry mel `1.833` - - exit mel `3.665` - - onset artifact `1.748` - - boundary timing error `2.250 ms` - - formant drift `0.040` - - `spectralEnvelopeCorrectionUsed=true` - - comparison against earlier adaptive correction passes: - - this is the best mixed result so far - - it improves `pitchTestOrg +4` note/entry/exit/formant metrics versus `r2` and `r3` - - it also improves `pitchOrg +4` onset artifact versus `r2` and `r3` - - but it still does not beat the plain adaptive baseline on the note-start/note-end problems that matter most -- Verdict: - - the adaptive correction layer is now a real tunable path, not just a failed idea - - but it is still not the proper fix yet - - remaining priority order should be: - - `A4` entry timing compensation - - `A5` cepstral lifter retune - - then either: - - one more `A3` cleanup pass if start roughness still dominates listening, or - - freeze the adaptive correction layer as a non-default experiment if it keeps failing against plain adaptive - -#### Remaining plan truth -- The full recovery plan is still not complete. -- Remaining mandatory iterations: `11` -- Remaining conditional iterations: `+2` - -### 2026-04-16: Adaptive Carrier Timing/Formant Retune R6 + Onset Cleanup R7 - -#### Timing/formant retune -- Change: - - added explicit entry/exit pre/post window tuning to the adaptive correction path - - made cepstral lifter scale and correction strength tunable instead of fixed - - softened the default cepstral profile and reduced correction authority near the raw boundary -- Result: - - run: `20260416_213431_adaptive_boundary_tune_r6_timing_formant` - - `pitchOrg +4` - - note mel `6.541` - - env `1.038` - - entry mel `7.298` - - exit mel `7.112` - - onset artifact `2.261` - - formant drift `0.373` - - `pitchTestOrg +4` - - note mel `2.830` - - env `0.470` - - entry mel `1.755` - - exit mel `1.887` - - onset artifact `1.748` - - formant drift `0.050` -- Verdict: - - this was a real improvement on the hard clip, especially at exit - - formant drift did not materially improve - - the easy clip still kept too much start-side damage - -#### Onset cleanup follow-up -- Change: - - raised the onset RMS gate slightly - - reduced entry wetness again - - shortened the entry pre/post ownership window - - promoted the resulting profile into the default code path because it outperformed the earlier adaptive correction runs overall -- Result: - - run: `20260416_213810_adaptive_boundary_tune_r7_onsetcleanup` - - `pitchOrg +4` - - note mel `6.526` - - env `1.023` - - entry mel `6.890` - - exit mel `7.112` - - onset artifact `2.261` - - formant drift `0.374` - - `pitchTestOrg +4` - - note mel `2.828` - - env `0.470` - - entry mel `1.707` - - exit mel `1.887` - - onset artifact `1.714` - - formant drift `0.050` -- Verdict: - - `r7` is the strongest adaptive correction profile so far - - it narrows the hard-case gap substantially - - but it still does not solve the two main user-facing issues: - - `pitchOrg +4` note start is still too artifacted versus plain adaptive - - `pitchTestOrg +4` note exit and onset are still not as clean as the plain adaptive baseline - -#### Remaining plan truth -- The full recovery plan is still not complete. -- Remaining mandatory iterations: `10` -- Remaining conditional iterations: `+2` - -### 2026-04-16: Adaptive Carrier Formant Sweep R8 + Residual Sweep R9 - -#### Cepstral/formant sweep -- Change: - - ran two formant-focused profiles on the adaptive correction path: - - `r8 strong`: lower lifter scale and stronger cepstral correction - - `r8 soft`: higher lifter scale and softer cepstral correction -- Result: - - runs: - - `20260416_223105_adaptive_formant_tune_r8_strong` - - `20260416_223105_adaptive_formant_tune_r8_soft` - - both profiles were effectively flat on the smoke suite - - differences were tiny enough that they do not justify a default change yet -- Verdict: - - `A5` is not the dominant lever on the current smoke cases - - richer sustained-vowel fixtures are still needed before declaring cepstral tuning closed in a product sense - -#### Residual carry sweep -- Change: - - compared a dry residual profile against a wetter residual profile on the same formant smoke suite -- Result: - - runs: - - `20260416_223535_adaptive_residual_tune_r9_dry` - - `20260416_223535_adaptive_residual_tune_r9_wet` - - `r9 dry` won slightly but consistently: - - `pitchOrg +4` - - note mel `6.525` - - env `1.022` - - entry mel `6.885` - - onset artifact `2.257` - - `pitchTestOrg +4` - - note mel `2.828` - - env `0.469` - - entry mel `1.703` - - onset artifact `1.688` - - the wetter residual profile was slightly worse on both smoke cases -- Verdict: - - `A6` currently favors keeping residual reinjection off in the adaptive correction layer - - the default code path now uses the dry residual profile - -#### Remaining plan truth -- The full recovery plan is still not complete. -- Remaining mandatory iterations: `8` -- Remaining conditional iterations: `+2` - -### 2026-04-16: Adaptive Carrier STFT Sweep R10 - -#### STFT correction-layer sweep -- Change: - - exposed the cepstral correction stage FFT order and hop divisor as explicit tuning controls - - compared: - - `1024 / 8` - - `2048 / 8` - - `2048 / 4` -- Result: - - runs: - - `20260416_224905_adaptive_stft_tune_r10_1024o8` - - `20260416_224905_adaptive_stft_tune_r10_2048o8` - - `20260416_224905_adaptive_stft_tune_r10_2048o4` - - all three profiles were effectively identical on both smoke cases - - representative values: - - `pitchOrg +4` - - note mel `6.525` - - env `1.022` - - entry `6.885` - - exit `7.112` - - onset artifact `2.257` - - formant drift `0.374` - - `pitchTestOrg +4` - - note mel `2.828` - - env `0.469` - - entry `1.703` - - exit `1.887` - - onset artifact `1.688` - - formant drift `0.050` -- Verdict: - - `A7` is effectively flat on the current adaptive correction path - - FFT size / hop is not the dominant remaining lever here - - remaining budget should move to: - - richer fixture completion for `H1/H3/H4` - - challenger close-out `B1-B4` - -#### Remaining plan truth -- The full recovery plan is still not complete. -- Remaining mandatory iterations: `7` -- Remaining conditional iterations: `+2` - -### 2026-04-16: Engine-v2 Challenger Narrow Close-Out R8 - -#### Narrowed/drier engine-v2 pass -- Change: - - narrowed engine-v2 ownership further around the edited transition nucleus - - made its transient flatness gates, entry bias, core wetness, residual wetness, and cepstral tuning explicit - - dried the path down substantially and shortened its transition window so it behaved more like a challenger overlay than a broad note takeover -- Result: - - runs: - - `20260416_230357_enginev2_narrow_pitchOrg_plus4_r8` - - `20260416_230555_enginev2_narrow_pitchTest_plus4_r8` - - `pitchOrg +4` - - note mel `6.608` - - env `1.009` - - entry mel `7.620` - - exit mel `7.112` - - onset artifact `1.390` - - formant drift `0.395` - - `pitchTestOrg +4` - - note mel `3.143` - - env `0.498` - - entry mel `7.017` - - exit mel `1.887` - - onset artifact `4.000` - - formant drift `0.062` -- Verdict: - - this is enough to close the challenger honestly - - the narrowed engine-v2 pass still loses clearly on the hard clip - - it is worth keeping in the repo for reference/audition, but not for more main-budget tuning - - the adaptive carrier remains the only live path worth carrying forward - -#### Remaining plan truth -- The full recovery plan is still not complete. -- Remaining mandatory iterations: `3` -- Remaining conditional iterations: `+2` - -### 2026-04-27: Direction-Specific Note-HQ Timbre + Exit Polish - -#### Renderer decision -- Change: - - moved production `note_hq` pitch-only rendering to native direction-specific HQ. - - upward edits keep the current native adaptive branch. - - downward edits now use a guarded formant law instead of sharing the upward compensation path. - - Rubber Band remains installed/diagnosed and can be forced for benchmarks with `OPENSTUDIO_PITCH_USE_RUBBERBAND_HQ=1`, but it is not quality-promoted for production note-HQ. -- Reason: - - the previous native bug was signal-chain correctness, not a renderer-family opening: detected F0 guidance had been passed as `formantRatios` in pitch-only calls. - - the remaining audible downshift issue was the native compensation law, not a reason to require Rubber Band. - - the measured Rubber Band benchmark still failed the `+4` mid-band formant gate and had worse boundary timing than native. - -#### Downshift formant guard -- Change: - - pitch-only downward edits use `pow(1 / ratio, alpha)` with default alpha `0.58`. - - downshift envelope anchoring was strengthened around the voiced `200-3500 Hz` body. - - native result diagnostics now report direction, selected branch, downshift guard usage, guard alpha, effective note-HQ range, and Rubber Band quality-promotion status. -- Result: - - primary `pitchOrg -4` run: `tmp_pitch_runs/20260427_160222_direction_guard_v3_pitchOrg_minus4`. - - harmonic-envelope drift improved from the prior native `0.469` to `0.353`. - - body low/mid/high deltas were `-0.420 / -1.280 / +0.208 dB`. - - body/core cents were `0.00 / +11.90`. - - onset artifact was `1.40`; exit-next artifact was `1.927`. -- Verdict: - - the downshift timbre problem is materially improved and now passes the practical gate. - - the aspirational harmonic-drift target remains `<= 0.35`; this pass landed just above it at `0.353`, so future work should treat that as polish, not an emergency renderer swap. - -#### Exit-to-next-note polish -- Change: - - note-HQ transition ownership is asymmetric by default: shorter pre-note shoulder, longer post-note shoulder, and a small next-note head when adjacent notes touch. - - final native compositing uses a wider dry-protected crossfade at the effective commit range. - - the harness now reports exit-to-next-note discontinuity metrics and writes `cand_exit_next.wav`. -- Result: - - `pitchOrg +4`: `tmp_pitch_runs/20260427_160222_direction_guard_v3_pitchOrg_plus4`, exit-next artifact `1.110`. - - `pitchOrg -4`: `tmp_pitch_runs/20260427_160222_direction_guard_v3_pitchOrg_minus4`, exit-next artifact `1.927`. - - boundary suite passed: `tmp_pitch_runs/20260427_162913_direction_guard_v4_boundary_plus4`. -- Verdict: - - the remaining word-break issue is now handled as an edited-note exit handoff metric rather than being hidden inside broad note/window scores. - -#### Validation -- Passed: - - primary `pitchOrg +4` and `pitchOrg -4` note-HQ acceptance runs. - - export parity for both directions: - - `tmp_pitch_runs/20260427_162615_direction_guard_v4_export_parity_plus4` - - `tmp_pitch_runs/20260427_162615_direction_guard_v4_export_parity_minus4` - - richer formant suite: - - `tmp_pitch_runs/20260427_161118_direction_guard_v4_formant_richer` - - richer transient suite: - - `tmp_pitch_runs/20260427_161118_direction_guard_v4_transient_richer` - - boundary suite: - - `tmp_pitch_runs/20260427_162913_direction_guard_v4_boundary_plus4` -- Harness correction: - - phrase/full-clip note-HQ candidates are scored as full-clip audio. - - window-local semantics remain only for actual segment renders such as preview segments. - - downshift F1/F2 hard gates use the more stable note-body proxy on the canonical window; core F2 remains reported but is too unstable to gate alone on this fixture. - -### 2026-04-27: Two-Sided Note-HQ Boundary Follow-Up - -#### Problem -- User feedback: - - the edited-note exit/next-note handoff was improved. - - a stutter/word-break became audible on the note or word before the edited note. -- Root cause: - - note-HQ rendering had enough left context, but the dry-protected compositor used a generic fixed fade. - - with a left shoulder, that let wet audio become fully committed before the edited note body actually began. - -#### Change -- Commit ranges now retain: - - effective shoulder start/end. - - true note body start/end. -- Entry behavior: - - dry-to-wet fade spans the whole left shoulder. - - full wet is reached at the edited note body start, not before it. -- Exit behavior: - - wet-to-dry release starts with a small `12 ms` lead-in before the note body end, then fades through the right shoulder. - - this lowers the derivative discontinuity at the edited-note exit without returning to the previous-word artifact. -- Harness: - - added `preCommitArtifactScore`. - - added `cand_pre_commit.wav` audition excerpt. - - dry-neighbor residual checks now evaluate only the unowned dry neighbor region outside the effective note-HQ commit range. - -#### Result -- `pitchOrg +4`: - - run: `tmp_pitch_runs/20260427_202041_direction_entry_guard_v6_plus4` - - pre-commit/onset artifact: `0.055 / 1.791` - - exit-next artifact: `2.307` - - body/core cents: `0.00 / 0.00` - - harmonic drift: `0.378` -- `pitchOrg -4`: - - run: `tmp_pitch_runs/20260427_202204_direction_entry_guard_v6_minus4` - - pre-commit/onset artifact: `0.093 / 1.398` - - exit-next artifact: `0.091` - - body/core cents: `0.00 / +11.90` - - harmonic drift: `0.352` -- Boundary suite: - - run: `tmp_pitch_runs/20260427_boundary_entry_guard_v6b/20260427_202849_direction_entry_guard_v6_boundary` - - summary: `pitch_boundary_suite_summary.md` - - start-edge cases stayed clean on the new pre-commit metric. - -#### Verdict -- The correct ownership model is not a larger shoulder by itself. -- The renderer should have phrase/shoulder context, but the final commit blend must be note-body-aware so the previous word remains dry until the transition actually belongs to the edited note. diff --git a/docs/pitch_recovery_master_map.md b/docs/pitch_recovery_master_map.md deleted file mode 100644 index e3ddb12..0000000 --- a/docs/pitch_recovery_master_map.md +++ /dev/null @@ -1,324 +0,0 @@ -# Pitch Recovery Master Map - -## Current Controls -- 2026-05-02 Vienna VSF audition pivot: - - user audition rejected the adaptive family for the start/pre-start artifact on the Vienna clip; VSF HQ hybrids-disabled was the only tested family that did not have that start artifact. - - `vienna_vsf_residual_less_055_plus4_full` and `vienna_vsf_residual_less_055_minus4_full` are the current best audition baselines, with residual scale `0.55`; the remaining target is +4 edited-note body clashing/distortion, while -4 nasal tone is regression context. - - body/dry blend variants are rejected because they sounded like two voices singing the edited pitch; do not continue with reduced core wet or dry/body blend candidates for this issue. - - current repair direction is VSF epoch-carrier only: optional upward source-epoch interpolation plus upward grain-radius scaling, with diagnostics reporting residual scale, epoch interpolation use, and effective grain scale. - - iterative fine-tuning round 1 is staged in `tmp_pitch_runs\vienna_vsf_iter_20260502_041147`: exact relative `+4.00`, VSF HQ, hybrids disabled, residual scale `0.55`, core wet `1.0`, and candidate WAVs for baseline `grain065`, interpolation strengths `0.75/0.50`, grain radius `0.60/0.70` at interpolation `0.75`, and `-1.5 dB` upward body presence trim variants. All deterministic harness gates passed, but clashing/distortion, doubled voice, formant/timbre, naturalness, and start artifact remain `not_asserted` until user audition. - - user audition currently ranks `vienna_vsf_iter_grain070_interp075_plus4_full` as the best +4 candidate so far; this is best-by-audition, not a fixed/completed claim. - - local diagnostic-only helper `local_tools\pitch\pitch_residual_hotspot_report.py` reported residual hotspots by time slice and broad band against the batch-local `grain065` baseline; these residual/hotspot metrics are not quality claims and the helper is not tracked. - - downshift nasal iteration is staged in `tmp_pitch_runs\vienna_vsf_minus4_iter_20260502_044712`: exact relative `-4.00`, VSF HQ, hybrids disabled, residual scale `0.55`, core wet `1.0`, no grain/epoch tuning, and candidate WAVs for baseline, `-1.5 dB` nasal trims at `900/1100/1300 Hz`, plus `1100 Hz` nasal trim with `+1.0 dB` body compensation at `430 Hz`. All deterministic harness gates passed, and EQ variants are not byte-identical to baseline. User audition currently ranks `vienna_vsf_iter_minus4_nasal1100_full` as the best -4 candidate so far; nasal tone, distortion, doubled voice, formant/timbre, naturalness, and start artifact remain audition-gated and not a fixed/completed claim. - - default VSF tuning now follows the current user-picked paths: upward shifts enable source-epoch interpolation by default with interpolation strength `0.75` and upward grain radius scale `0.70`; downward shifts apply `-1.5 dB` body nasal trim at `1100 Hz` by default. Env overrides remain available for diagnostics. -- 2026-04-29 doubled-core recovery: - - app audition still reported an artificial doubled vocal even after mono spectrogram gates passed, so the current default is treated as audition-not-done until the stable edited-note core clears a dedicated double-voice QA pass. - - historical state at that point: product/default note-HQ pitch-only selection was restored to `pitch_only_adaptive_selector` with `legacy_natural` recovery; this is superseded by the 2026-05-02 Vienna VSF audition pivot above. - - likely cause addressed first: the vocal source/filter output was being blended with the adaptive-selector core on long notes by default. That core hybrid is now opt-in via `OPENSTUDIO_VSF_CORE_HYBRID_ENABLE=1` or the legacy diagnostic override `OPENSTUDIO_VSF_CORE_HYBRID_DISABLE=0`. - - `tools\pitch_double_voice_analyze.py` is now part of reference-backed pitch-only `note_hq` runs and gates original-F0 leakage, secondary pitch excess, stereo correlation drift, mid/side drift, comb/notch excess, and dry-correlation excess. - - mid/side drift uses an audible-side floor, so nearly mono side residue is reported as raw drift without falsely failing the doubled-core gate. - - layer dumps for diagnosis are available via `-DumpPitchLayers` / `OPENSTUDIO_VSF_LAYER_DUMP_ENABLE=1`; they write dry input, source/filter core, residual/noise, wet envelope, adaptive hybrid output when engaged, and final output. - - lesson: doubled-core artifacts are phase/stereo/layering failures, so mono mel and formant proxies cannot be the final naturalness proof. -- 2026-04-29 spectrogram-first QA correction: - - completion claims for reference-backed pitch-only `note_hq` renders now require a final spectrogram/mel/waveform-envelope report for both upshift and downshift; if the spectrogram done gate fails, the work is explicitly "not done" and the next failing region is named. - - the failure baseline is `D:\test projects\os tests\runs\20260429_074056_vocal_source_filter_pitchTest_plus4_transient_smoke`: `cand_phrase.wav` vs `ref_phrase.wav` measured about `12.15 dB` whole-phrase mel MAE, phrase short-RMS envelope correlation `0.177`, phrase high-band delta about `+5.25 dB`, core high-band delta about `+6.23 dB`, entry RMS about `+7.6 dB`, exit RMS about `-5.45 dB`, onset peak jump about `+28.8 dB`, onset high-band burst about `+12.9 dB`, and candidate/reference lag about `54 ms`. - - lesson: pitch cents, branch diagnostics, and proxy formant gates can pass while the rendered vocal is still unusable. Spectrogram/mel/waveform-envelope checks and human audition now veto completion. - - next repair order is entry/gating burst first, residual/noise smear second, voiced-core naturalness third, and timing/ownership audit fourth. Do not widen dry-protected neighbor commits just to match references that changed wider phrase audio. -- 2026-04-29 source/filter artifact repair status: - - current code adds PSOLA overlap-weight normalization, longer dry entry ownership, delayed entry-only gain/EQ shaping, duration-specific long-note RMS trim, and bounded long-note adaptive hybrids for entry/core/exit in the `pitch_only_vocal_source_filter_hq` renderer. - - latest canonical `pitchOrg` reports remain close inside the edited note after the long-note-only hybrid change: `20260429_122136_spectrogram_gate_pitchOrg_plus4_after_exit_hybrid_diag` measured core/entry/exit mel `4.68/7.41/5.71 dB`, and `20260429_122322_spectrogram_gate_pitchOrg_minus4_after_exit_hybrid_diag` measured `4.35/6.14/5.61 dB`. - - latest harder `pitchTestOrg` reports have the note-owned spectrogram regions inside the current gates: `20260429_123450_spectrogram_gate_pitchTest_plus4_core_hybrid_diag` measured core/entry/exit mel `6.84/4.29/6.17 dB`, and `20260429_123742_spectrogram_gate_pitchTest_minus4_core_hybrid_diag` measured `6.47/4.27/7.74 dB`. - - these runs are still not a final completion claim until app audition is clean. The remaining phrase-wide envelope failure is non-actionable on these references because original-vs-reference pre/post-neighbor mismatch is about `15/19 dB`; the harness now reports that mismatch and skips the phrase-envelope done gate in that case. Positive onset bursts remain hard failures, but quieter-than-reference onset deltas are reported as target mismatch rather than burst artifacts. - - next concrete fix if audition still sounds wrong: inspect the long-note `cand_core.wav` and `cand_exit.wav` spectrograms manually against `ref_core.wav`/`ref_exit.wav`, then tune only the core hybrid amount or replace the adaptive core support. Do not widen dry-protected neighbor commits just to improve phrase correlation. -- 2026-04-29 default vocal source/filter hard-gate follow-up: - - short upward entries now use a shorter `24 ms` dry shell and a near-neutral short-up entry mid cut (`OPENSTUDIO_VSF_SHORT_UP_ENTRY_MID_CUT_DB`, default `-3 dB`) to remove the residual onset-flux failure without affecting downshift or long-note policies. - - the four default-branch hard checks now pass pitch-quality and spectrogram gates with `actualRendererBranch=pitch_only_vocal_source_filter_hq`: - - `20260429_132647_spectrogram_gate_pitchOrg_plus4_short_entry_eq3_hard_check`: core/entry/exit mel `4.09/5.37/5.70 dB`. - - `20260429_132935_spectrogram_gate_pitchOrg_minus4_after_short_entry_eq3_hard_check`: `4.35/6.14/5.61 dB`. - - `20260429_132935_spectrogram_gate_pitchTest_plus4_after_short_entry_eq3_hard_check`: `6.84/4.29/6.17 dB`. - - `20260429_132935_spectrogram_gate_pitchTest_minus4_after_short_entry_eq3_hard_check`: `6.47/4.27/7.74 dB`. - - final status remains audition-gated: these metrics say the renderer is no longer the obvious ghost/robot failure from the spectrogram baseline, but app listening still wins over the proxy gates. -- 2026-04-28 Signalsmith pitch-only formant-contract correction: - - pitch-only vocal note edits now call `setFormantFactor(1.0f, true)` in the Signalsmith carrier, matching live preview and the real-time corrector. - - active adaptive-selector pitch-only carriers pass detected F0 through `setFormantBase(...)` when available, and the offline transpose map uses the same stage-A tonality-limit controls as live preview. - - explicit formant edits pass their requested ratio directly with `compensatePitch=true`; pitch ratio is not folded into the formant factor. - - downshift-specific timbre support remains a bounded adaptive-selector blend/envelope-transfer concern (`OPENSTUDIO_PITCH_DOWNSHIFT_OWN_BLEND` defaults to `0.42`), not inverse-ratio carrier compensation. -- 2026-04-28 entry contour-handoff correction: - - the start artifact was reclassified as a pitch-trajectory/ownership mismatch: the renderer needs pre-note ratio context, but final audible ownership must still be controlled by the entry bridge. - - measured tuning showed that hard/unknown `pitchOrg` entries must keep render pre-roll and reach the target by `note.startTime`; adding an audible body ramp there regressed entry lag and onset gates. - - entry pitch handoff is therefore enabled only for explicit continuous/internal transitions (`soft_legato`, `internal_bend`, `internal_vibrato`, or adjacent edited notes inside the same island). Hard/unknown entries keep dry-protected audio ownership and render-context pre-roll without delaying the shifted body. - - diagnostics now include `noteHqEntryPitchHandoffUsed`, handoff start/end, pre/body milliseconds, slope-jump, and acceleration-limit status; the frontend bridge and regression summaries preserve those fields. - - the harness now reports entry F0 slope/acceleration metrics. The hard gate applies only when a real pitch handoff is used; canonical hard/unknown step edits still report the metric as diagnostic because the reference itself behaves like a step edit. - - verification: - - `D:\test projects\os tests\runs\20260428_115125_entry_contour_handoff_plus4_final3`: `pitchOrg +4` passed; onset artifact `1.501`, onset derivative `1.05`, exit-next `2.156`, body/core pitch `0.00/0.00 cents`, harmonic drift `0.382`. - - `D:\test projects\os tests\runs\20260428_115314_entry_contour_handoff_minus4_final`: `pitchOrg -4` passed; onset artifact `1.187`, onset derivative `0.92`, exit-next `0.207`, downshift harmonic drift `0.339`, low/mid/high `-0.911/-2.011/-0.202 dB`. - - `D:\test projects\os tests\runs\20260428_115719_entry_contour_handoff_two_adjacent_plus4_r2`: adjacent selected notes still render as one edit island (`noteHqEditIslandCount=1`, `noteHqEditedNoteCount=2`) and report the internal pitch handoff instead of a second dry/wet bridge. -- 2026-04-28 emergency word-grouping repair: - - product default is restored to single-note ownership: clicking or dragging one note selects and edits only that note. - - `wordGroupId` remains metadata for diagnostics and controlled render-island decisions, but it no longer automatically expands visible selection or pitch-drag edits. - - the large word-group hull overlay and multi-note "Word" inspector display were removed because broad/incorrect grouping made unrelated notes appear and move together. - - analyzer merging is conservative again: automatic merges use a short `40 ms` gap plus an about `1 st` pitch-distance guard, rather than swallowing nearby material solely because it is within the dropout bridge. - - strong acoustic `hard_word_like` boundary candidates may split default analyzer regions; pure pitch hysteresis, pitch corner, and `internal_vibrato` candidates remain non-destructive diagnostics. - - harness diagnostics now treat hard acoustic splits separately from destructive pitch-corner/pitch-jump failures and add expected-region overhang checks to catch collapsed words. - - verification: - - analyzer run `D:\test projects\os tests\runs\20260428_110455_emergency_word_group_repair_analysis_pitchOrg`: `noteCount=5`, `wordGroupCount=5`, `destructiveCornerSplitCount=0`, `destructivePitchJumpSplitCount=0`, hard acoustic splits `2`, max fragments `1`, max overhang `0.459`. - - UI ownership test `pitchEditorSingleNoteOwnership.test.ts`: click/select, drag update, and selected pitch move all affect only explicit note IDs even when notes share `wordGroupId`. - - primary note-HQ runs `D:\test projects\os tests\runs\20260428_110516_emergency_repair_pitchOrg_plus4` and `D:\test projects\os tests\runs\20260428_110641_emergency_repair_pitchOrg_minus4` passed the current gates; measured onset artifacts were `1.48` and `1.598`, exit-next artifacts `2.31` and `0.091`, downshift harmonic drift `0.343`. - - adjacent selected-note run `D:\test projects\os tests\runs\20260428_110807_emergency_repair_two_adjacent_plus4` reported `noteHqEditIslandCount=1` and `noteHqEditedNoteCount=2`; it is kept as the double-voice safety check, with exit-next artifact still a polish risk on that stress fixture. -- 2026-04-28 phrase-first vibrato-safe word detection: - - the older running-average pitch-jump split is no longer allowed to destructively cut editable notes; sustained pitch movement now becomes `boundaryCandidates` with `pitch_hysteresis_*` reasons. - - analyzer segmentation is phrase-first: short voiced detector dropouts up to `80 ms` are bridged, while automatic note cuts are reserved for hard acoustic evidence such as long unvoiced gaps or sustained energy breaks. - - vibrato-like periodic reversals are reported as `internal_vibrato` diagnostics and remain non-destructive by default. - - close fragments are merged across short non-hard gaps without blocking on pitch distance alone, so melisma/bend/vibrato movement does not create separate editable words. - - superseded by the emergency repair above: `wordGroupId` is assistive metadata, not default UI ownership. - - harness diagnostics now also report `pitchDeviationCandidateCount`, `destructivePitchJumpSplitCount`, and `vibratoSuppressedCandidateCount`; destructive pitch-jump splits must be `0` by default. - - verification: - - analyzer run `D:\test projects\os tests\runs\20260428_040921_phrase_first_word_detection_pitchOrg`: `noteCount=3`, `wordGroupCount=3`, `destructivePitchJumpSplitCount=0`, `destructiveCornerSplitCount=0`, edited-word overlap `1.000`, max fragments `1`. - - primary note-HQ runs `D:\test projects\os tests\runs\20260428_040951_phrase_first_pitchOrg_plus4` and `D:\test projects\os tests\runs\20260428_041117_phrase_first_pitchOrg_minus4` kept the prior pitch, onset, exit, and downshift formant gates. - - adjacent-fragment diagnostic `D:\test projects\os tests\runs\20260428_041244_phrase_first_two_adjacent_plus4` reported `noteHqEditIslandCount=1` and `noteHqEditedNoteCount=2`, confirming one ownership island for two supplied fragments. - - lesson: demoting pitch-corner splits was not enough because the older pitch-deviation splitter could still fragment continuous sung words before word grouping ran. -- 2026-04-28 word-group + edit-island correction: - - pitch-curve corners are now exported as boundary candidates instead of destructive note splits by default; `OPENSTUDIO_ANALYZER_APPLY_CORNER_SPLITS=1` is research-only. - - analyzer output now includes `wordGroupId`, so close voiced fragments without a hard acoustic break remain one editable word/phrase group. - - superseded by the emergency repair above: normal pitch moves affect only explicitly selected notes. - - final note-HQ builds commit ownership per edit island, not per note, so adjacent moved notes get one outer entry bridge and one outer exit bridge instead of internal dry/wet handoffs. - - merged commit ranges no longer average pitch ratios with `sqrt(previous * current)`; variable-ratio islands keep ownership separate from the actual per-sample pitch curve. - - harness diagnostics now report boundary candidates, destructive corner split count, word-group overlap, edit-island count, and edited-note count. - - verification: - - analyzer run `D:\test projects\os tests\runs\20260428_022002_word_group_analysis_pitchOrg_r2`: `noteCount=10`, `wordGroupCount=4`, `cornerCandidateCount=2`, `destructiveCornerSplitCount=0`, min expected word-group overlap `0.928`. - - primary note-HQ runs `D:\test projects\os tests\runs\20260428_022028_word_group_island_plus4` and `D:\test projects\os tests\runs\20260428_022028_word_group_island_minus4` kept the prior +4/-4 pitch, onset, exit, and downshift formant gates. - - adjacent-fragment diagnostic `D:\test projects\os tests\runs\20260428_023520_word_group_two_adjacent_plus4_r4` reported `noteHqEditIslandCount=1` and `noteHqEditedNoteCount=2` in the raw result, confirming one ownership island for two moved fragments. - - lesson: more segmentation can improve seam metrics while making vocal editing worse; editable note boundaries, vocal word groups, and render islands must stay separate. -- 2026-04-27 segmentation + timbre-stability update: - - note segmentation now has conservative pitch-corner boundary detection: sharp smoothed-F0 direction reversals can split a note only when supported by energy, confidence, nearby unvoiced/noise, or strong pitch-prominence evidence. - - detected note boundaries now carry `entryBoundaryKind` / `exitBoundaryKind` diagnostics (`hard_word_like`, `soft_legato`, `internal_bend`, or `unknown`) plus reason and score. - - note-HQ commit policy is boundary-kind aware: hard word-like entries get a tighter audible bridge, while soft legato/sustain entries may keep the wider phrase bridge needed for continuous vocal gestures. - - downshift pitch-only renders now apply voiced-core spectral envelope transfer on edited note bodies after the native directional render; this makes formant stability depend on the original vowel envelope rather than only on ratio compensation. - - the failed lesson is recorded: smoothing the wrong detected note boundary can move the stitch artifact around without fixing it, so analysis boundaries, vocal boundaries, and render ownership are now treated separately. - - primary verification: - - `D:\test projects\os tests\runs\20260428_013135_seg_corner_timbre_plus4`: body/core `0.00 / 0.00 cents`, onset artifact `1.479`, onset derivative `1.087`, exit-next `2.307`, harmonic drift `0.379`. - - `D:\test projects\os tests\runs\20260428_013650_seg_corner_timbre_minus4_mix005`: body/core `0.00 / +11.90 cents`, `spectralEnvelopeCorrectionUsed=true`, onset artifact `1.598`, onset derivative `1.598`, exit-next `0.091`, harmonic drift `0.343`, low/mid/high `-1.083 / -2.067 / -0.053 dB`. - - rejected aggressive envelope-transfer run `D:\test projects\os tests\runs\20260428_013344_seg_corner_timbre_minus4` regressed harmonic drift to `0.615`, so the kept pass uses a small voiced-support-weighted transfer mix. - - analyzer diagnostic run `D:\test projects\os tests\runs\20260428_013900_seg_corner_boundary_analysis` serialized boundary diagnostics and reported `2` corner-boundary notes; use manual vocal-boundary references before increasing split aggressiveness. -- 2026-04-27 signal-chain correctness update: - - native pitch-only renders no longer pass detected F0 curves through the `formantRatios` argument by accident; pitch-only entrypoints now route `ratios + detectedPitchHz` separately and keep `formantCurveUsed=false`. - - note-HQ compare semantics are corrected: preview segments are window-local, but phrase/full-clip note-HQ candidates are scored as full-clip audio. - - note-HQ apply now renders with phrase/transition context but dry-protected final compositing keeps audio before the edited note start dry; `pitchOrg` renders with context around `0.604s-1.683s`, effective ownership `0.860s-1.610s`, and audible commit `0.900s-1.610s` for a `0.900s-1.550s` note body. - - follow-up direction-specific decision: production note-HQ pitch-only defaults to native directional HQ; Rubber Band/offline HQ remains benchmark-only unless explicitly requested. - - follow-up runtime fix: `tools/rubberband/sndfile.dll`, `vcruntime140.dll`, and `vcruntime140_1.dll` are now bundled so Rubber Band starts and reports version `4.0.0`; `20260427_145800_rubberband_runtime_fixed_pitchOrg_plus4` confirms `phraseHqExternalUsed=true`. - - external Rubber Band HQ is still benchmark-gated, not quality-promoted: `20260427_145847_rubberband_runtime_fixed_pitchOrg_plus4` failed strict formant/boundary gates (`midBandDeltaDb=+7.866`, boundary `38.54 ms`). - - final diagnostic native-fallback runs: - - `20260427_135220_after_fix_pitchOrg_plus4_native_override_final`: body/core pitch `0.00/0.00 cents`, formant body drift `0.378`, low/mid/high `-2.46/+0.53/-3.59 dB`, core F1/F2 drift `-46.9/+23.4 Hz`, boundary `8.42 ms`. - - `20260427_135413_after_fix_pitchOrg_minus4_native_override_final`: body/core pitch `0.00/+11.90 cents`, formant body drift `0.469`, low/mid/high `-0.41/+0.83/+1.12 dB`, core F1/F2 drift `+46.9/-70.3 Hz`, boundary `25.38 ms`. - - richer formant suite passed under explicit native fallback: `20260427_135901_after_fix_formant_richer_native_override`. - - richer transient suite passed under explicit native fallback: `20260427_141431_after_fix_transient_richer_native_override`. - - boundary-variant suite is not fully green under the new strict gate: `20260427_142907_after_fix_boundary_pitchOrg_plus4_native_override` passed `start_earlier` and `start_later`, then failed synthetic `end_earlier` at boundary timing `38.938 ms > 32 ms`. -- Shipping fallback: `branch_hybrid_reset` -- Trusted experimental control: `pitch_only_hybrid_structural` (`HS-4 / r6`) -- Active best experimental branch: `pitch_only_adaptive_selector` with harvested long-upward and short-downward support -- Analyzer close-out state: direct-YIN + decoder is the frozen kept path; FFT-YIN stays rejected-for-now behind `OPENSTUDIO_ANALYZER_USE_FFT_YIN=1` -- Scrub preview state: natural-segment scrub preview is now active and benchmarked via `20260416_200227_pitchOrg_scrub_preview_r8` (`scrubPreviewAudible=true`, `scrubPreviewFirstDragAudible=true`, loop duration `240 ms`, base pitch `365 Hz`, last peak `0.112`); repeat-stability tuning is still open -- Root-cause research state: - - completed in `20260417_012542_pitch_root_cause_research` - - ranked causes: - - transition ownership and boundary timing drift - - mixed transient and first-voiced-cycle handling inside one renderer family - - formant preservation that is too weak and too local for hard transitions - - repo summary: - - [pitch_root_cause_research_20260417.md](c:/Users/srvds/Documents/Codes/Studio13-v3/docs/pitch_root_cause_research_20260417.md) -- ML benchmark state: - - completed in `20260417_003355_pitch_ml_benchmark` - - verdict: `blocked_no_stronger_restorer` - - local environment has no materially stronger note-local restorer ready now -- Engine-v3 feasibility state: - - completed in `20260417_003355_engine_v3_feasibility` - - `V3-1` decomposition probe verdict: `stop` - - do not open a longer engine-v3 implementation branch from the current decomposition probe -- Harness close-out state: - - `H2` boundary suite is implemented - - `H1` scrub suite is still partial, but it now has richer multi-scenario runs on both canonical clip families: - - `20260416_231821_pitchOrg_scrub_suite_richer_r1` - - `20260416_234516_pitchTest_scrub_suite_richer_r1` - - true multi-note scrub fixtures now exist: - - `tests/fixtures/pitch-regression/example_pitchOrg_scrub_multinote.json` - - `tests/fixtures/pitch-regression/example_pitchTest_scrub_multinote.json` - - multi-note scrub suite run: - - `20260416_235640_pitchTest_scrub_suite_multinote_r3` - - first drag, repeated drag, after-transport-cycle, and selection-change are now all exercised end-to-end - - `H1` scrub suite is now complete for the current canonical local fixture corpus - - `H3` transient suite is now complete for the current canonical fixture corpus with richer up/down boundary-focused coverage: - - `20260416_231844_transient_suite_richer_r1` - - `H4` formant suite is now complete for the current canonical fixture corpus with richer body/transition coverage: - - `20260416_233426_formant_suite_richer_r1` - - first adaptive-carrier boundary/formant correction pass is now benchmarked: - - latest run: `20260416_224905_adaptive_stft_tune_r10_*` - - `spectralEnvelopeCorrectionUsed=true` on both `+4` truth clips - - result: best adaptive correction profile so far, still mixed and not keepable yet - - `A7` STFT sweep is now closed as effectively flat (`1024/8`, `2048/8`, `2048/4` all matched within noise) - - engine-v2 challenger close-out: - - run: `20260416_230357_enginev2_narrow_pitchOrg_plus4_r8` - - run: `20260416_230555_enginev2_narrow_pitchTest_plus4_r8` - - verdict: freeze challenger; still loses clearly on the hard clip - - remaining mandatory iterations from the previous close-out program: `0` - - remaining conditional iterations from the previous close-out program: `+2` -- Current renderer research reference: [pitch_renderer_research_notes.md](c:/Users/srvds/Documents/Codes/Studio13-v3/docs/pitch_renderer_research_notes.md) -- Pitch editor scope: monophonic only, with stereo vocal clips supported by analyzing a mono sum while preserving multichannel render output -- Canonical truth cases: - - `pitchOrg.wav -> pitchOrg+4s.wav` - - `pitchOrg.wav -> pitchOrg-4s.wav` - - `pitchTestOrg.wav -> pitchTestOrg+4s.wav` - - `pitchTestOrg.wav -> pitchTestOrg-4s.wav` -- Workflow rules: - - Track every family here first. - - Test one active family at a time. - - Compare every run against `CTRL-SHIP` and `CTRL-R6`. - - Maximum `2` serious iterations per family. - - If a family is rejected, remove renderer-specific code quickly and record the rejection in the chronological log. - -## 2026-04-27 Production Note-HQ Directional Update -- Classification: signal-chain correctness correction, not a reopened renderer-family experiment. -- Product decision: - - `note_hq` pitch-only production rendering now defaults to native direction-specific HQ. - - Upward edits keep the existing native adaptive path. - - Superseded carrier detail: downward edits used a gentler formant guard for a period, but pitch-only Signalsmith now uses neutral formant preservation and leaves downshift timbre support to bounded post-render correction. - - Rubber Band remains available for diagnostics and benchmark runs, but it is not quality-promoted for production `note_hq` unless `OPENSTUDIO_PITCH_USE_RUBBERBAND_HQ=1`. -- Downshift timbre fix: - - native pitch-only downshifts now keep the Signalsmith carrier formant-neutral with `setFormantFactor(1.0f, true)`. - - active pitch-only carriers keep detected F0 as `setFormantBase(...)` guidance and use the live-preview stage-A tonality limit before applying neutral formant compensation. - - the adaptive selector's bounded own-engine downshift blend now defaults to `0.42`; envelope matching remains the secondary bounded body-color support focused on the voiced `200-3500 Hz` body while protecting transient and air bands. -- Boundary polish: - - note-HQ ownership is now asymmetric around edited notes, with a wider post-note shoulder and a small next-note head when adjacent notes touch. - - final compositing uses a wider dry-protected crossfade at the effective commit range instead of cutting at the note body boundary. - - the regression harness now reports an explicit exit-to-next-note artifact score. -- 2026-04-27 two-sided boundary correction: - - the first exit-focused fix exposed an audible pre-note/previous-word handoff because the dry-protected compositor could become fully wet before the edited note body started. - - commit ranges now carry both the effective shoulder and the true note body start/end. - - final audible compositing now starts at the edited note body start, never at the left effective shoulder by default. - - `[effectiveStartTime, note.startTime)` is copied from the original/dry audio exactly; the dry-to-wet entry fade happens inside the first `12 ms` of the edited note body. - - release compositing starts a small `12 ms` lead-in before the note body end, then fades through the right shoulder, reducing the derivative jump at the edited-note exit. - - the failed lesson is recorded: widening left shoulder ownership can move the stutter backward into the previous word, so render context and audible commit ownership must stay separate. - - the harness now reports `preBodyTailOriginalResidualDb`, `candidateActiveDifferenceStartSec`, `preBodyTailArtifactScore`, and writes `orig_pre_body_tail.wav`, `cand_pre_body_tail.wav`, and `diff_pre_body_tail.wav`. -- Primary measured results: - - `pitchOrg +4`: run `tmp_pitch_runs/20260427_160222_direction_guard_v3_pitchOrg_plus4`; body/core cents `0.00 / 0.00`, harmonic drift `0.378`, band deltas `-2.464 / +0.531 / -3.590 dB`, F1/F2 proxy drift `-46.875 / +23.438 Hz`, onset artifact `1.79`, exit-next artifact `1.110`. - - `pitchOrg -4`: run `tmp_pitch_runs/20260427_160222_direction_guard_v3_pitchOrg_minus4`; body/core cents `0.00 / +11.90`, harmonic drift improved from the prior native `0.469` to `0.353`, band deltas `-0.420 / -1.280 / +0.208 dB`, onset artifact `1.40`, exit-next artifact `1.927`. - - two-sided boundary follow-up `pitchOrg +4`: run `tmp_pitch_runs/20260427_202041_direction_entry_guard_v6_plus4`; pre-commit/onset artifacts `0.055 / 1.791`, exit-next artifact `2.307`, body/core cents `0.00 / 0.00`. - - two-sided boundary follow-up `pitchOrg -4`: run `tmp_pitch_runs/20260427_202204_direction_entry_guard_v6_minus4`; pre-commit/onset artifacts `0.093 / 1.398`, exit-next artifact `0.091`, harmonic drift `0.352`, body/core cents `0.00 / +11.90`. - - final pre-body dry ownership `pitchOrg +4`: run `tmp_pitch_runs/20260427_213815_pre_body_dry_v3_plus4`; body/core cents `0.00 / 0.00`, pre-body residual `-170.878 dB`, active difference start `0.900063s`, onset artifact `1.706`, exit-next artifact `2.307`, harmonic drift `0.379`. - - final pre-body dry ownership `pitchOrg -4`: run `tmp_pitch_runs/20260427_213940_pre_body_dry_v3_minus4`; body/core cents `0.00 / +11.90`, pre-body residual `-169.515 dB`, active difference start `0.900063s`, onset artifact `2.721`, exit-next artifact `0.091`, harmonic drift `0.352`. - - entry-bridge follow-up: - - product rule is now bridge-aware: render context may extend before the edited note, and final apply may use a bounded entry bridge, but audio before `noteHqEntryBridgeStartSec` must remain original/dry. - - upward edits use a tight in-body bridge (`0.900s -> 0.916s` on `pitchOrg +4`) because the pre-note bridge regressed the upward onset audit. - - downward edits use a bounded pre-note bridge (`0.876s -> 0.980s` on `pitchOrg -4`) with a `-22.0 ms` wet-read offset, `+1.7 dB` entry envelope correction, and `10 ms` dry transient preservation. - - the corrected lesson is recorded: fully dry pre-note ownership prevented previous-word mutation, but could leave a phase/envelope discontinuity exactly at the edited-note entry. - - final `pitchOrg +4` run `tmp_pitch_runs/20260428_004839_entry_bridge_v15_plus4`: body/core cents `0.00 / 0.00`, entry lag `-0.125 ms`, onset artifact `1.479`, onset derivative `1.087`, protected pre-bridge residual `-172.823 dB`, exit-next artifact `2.307`, harmonic drift `0.379`. - - final `pitchOrg -4` run `tmp_pitch_runs/20260428_004708_entry_bridge_v15_minus4`: body/core cents `0.00 / +11.90`, entry lag `+0.771 ms`, onset artifact `1.598`, onset derivative `1.598`, protected pre-bridge residual `-240.000 dB`, exit-next artifact `0.091`, harmonic drift `0.344`. - - export parity passed in `tmp_pitch_runs/20260428_005155_entry_bridge_v15_plus4_export` and `tmp_pitch_runs/20260428_005458_entry_bridge_v15_minus4_export`; the source-vs-export dry residual remains informational because the mixer/export path changes the full file from time zero. - - Export parity passed for both directions in `tmp_pitch_runs/20260427_214538_pre_body_dry_v4_plus4_export` and `tmp_pitch_runs/20260427_214814_pre_body_dry_v4_minus4_export`; the source-vs-export dry residual readout is informational only because the mixer/export path changes the full file from time zero. - - Richer formant suite passed in `tmp_pitch_runs/pre_body_dry_v2_formant_richer/20260427_212751_pre_body_dry_v2_formant_richer`. - - Richer transient suite passed in `tmp_pitch_runs/pre_body_dry_v4_transient_richer/20260427_215055_pre_body_dry_v4_transient_richer`. - - Boundary suite completed in `tmp_pitch_runs/pre_body_dry_v2_boundary/20260427_212152_pre_body_dry_v2_boundary`; the primary real `pitchOrg` cases stay under the exit-next gate, while the synthetic shortened-end stress case still shows a high exit-next artifact and remains a stress warning. -- Rubber Band benchmark status: - - runtime availability diagnostics stay in place. - - pitch maps now use `effectiveStart/effectiveEnd` transition shoulders for benchmark ramps. - - current benchmark evidence is not production-promotable because the earlier `+4` run failed the mid-band formant gate and had worse boundary timing than native. - -## Approach Status Table -| Family ID | Approach | Class | Status | Last Result | Best Observed Gain | Main Failure | Can Harvest | Code State | Next Action | -| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | -| `CTRL-SHIP` | Shipping fallback `branch_hybrid_reset` | Control | `Kept Control` | Shipping-safe app path; still current fallback baseline | Safest all-around fallback, exact pitch on truth cases | Still far from samples on onset, exit, neighbors | Yes | `Active branch` | Keep frozen as shipping control | -| `CTRL-R6` | `pitch_only_hybrid_structural` / `HS-4 / r6` | Control | `Kept Control` | Trusted experimental baseline; best kept short-upward branch | `pitchOrg +4` note mel `6.209`, env `0.961`, entry `6.928`, exit `6.076`, onset artifact `1.810` | Does not improve `pitchTest +4`; stutter still present | Yes | `Active branch` | Keep frozen as experimental control | -| `FAM-ANALYZER-PYIN` | Native editor-first analyzer upgrade: staged direct-YIN baseline plus FFT-YIN probe, multi-candidate extraction, voiced/unvoiced probabilities, and Viterbi-style decoding in `PitchAnalyzer` | Analysis upgrade | `Promising` | 2026-04-15 close-out: direct Hann-windowed YIN + decoder matched the target note window on both analysis fixtures (`pitchOrg`: `7` detected / `1` expected, overlap ratio `0.964`; `pitchTestOrg`: `6` detected / `1` expected, overlap ratio `0.796`) with high median voiced confidence (`0.974` / `0.976`), while FFT-YIN produced `0` detected notes and `0.000` voiced-frame ratio on both clips when forced on | First native editor-side path that adds pYIN-like candidate generation and temporal decoding without new dependencies, while keeping the editor contract stable and the direct path usable on real clips | Direct path still oversplits full-clip note segmentation on the current fixtures, and FFT-derived difference computation is still not parity-safe enough to promote | Yes | `Active branch` | Freeze the direct-YIN + decoder path as the kept analyzer implementation, keep FFT-YIN gated off, and treat any future analyzer work as segmentation polish rather than an open parity question | -| `FAM-SCALAR` | Scalar blend/ramp/timing/smoothing/coherence/bridge family | Exhausted tweak family | `Rejected` | Multiple rejected HS iterations; no keep beyond `HS-4 / r6` | Safer short-upward early-core blend in `HS-4` | Could not fix onset/body tradeoff; all later variants plateaued | Yes | `Disabled` | Do not revisit without a new structural reason | -| `FAM-BODY-A` | Dry attack + existing own-engine body | Body replacement | `Rejected` | Path A iteration 1 | Onset artifact improved on `pitchOrg +4` | Note mel/env and entry worsened; no equal-weight win | No | `Disabled` | Keep rejected | -| `FAM-BODY-B` | Dry attack + epoch-copy body | Body replacement | `Rejected` | Path B exhausted after 2 iterations | Strong note-body gain on `pitchOrg +4` | Onset collapsed badly; not keepable | Yes | `Disabled` | Harvest only if a future v2 needs epoch-copy body evidence | -| `FAM-BODY-C` | Dry attack + harmonic-only body | Body replacement | `Rejected` | Path C exhausted after 2 iterations | None; C1 failed closed | C2 collapsed pitch/body badly | No | `Disabled` | Keep rejected | -| `FAM-BODY-D` | Dry attack + PSOLA body | Body replacement | `Rejected` | Path D exhausted after 2 iterations | Best body realism on `pitchOrg +4`: note mel `5.105`, env `0.474`, harmonic drift `0.127` | Onset artifact stayed far worse than `r6`; did not generalize to `pitchTest +4` | Yes | `Disabled` | Harvest PSOLA body realism only, not the handoff architecture | -| `FAM-CONT-E1` | Voiced-tail continuation body | Continuation | `Rejected` | Failed closed on first iteration | None | Never engaged on active target | No | `Disabled` | Keep rejected | -| `FAM-CONT-E2` | Early continuation handoff into existing core | Continuation | `Rejected` | Failed closed on first iteration | None | Never engaged on active target | No | `Disabled` | Keep rejected | -| `FAM-ISLAND-F` | Fixed-mask island-native with own-engine core | Island-native | `Rejected` | Path F exhausted after 2 iterations | Onset artifact improved to `1.388` on `pitchOrg +4` | Body, entry, and exit regressed too much; never engaged on `pitchTest +4` | Yes | `Disabled` | Harvest onset-side gain only | -| `FAM-ISLAND-G` | Island-native + PSOLA core | Island-native | `Rejected` | Path G stopped after 1 iteration | Preserved Path F onset-side gain | Pitch/body/exit destabilized badly; still no `pitchTest +4` engagement | No | `Disabled` | Keep rejected | -| `FAM-CE33-SIMPLE` | Legacy simple `ce33` path (`branch_simple_ce33`) | Archived baseline | `Promising` | Truth sweep 2026-04-15; `pitchOrg +4` note mel `7.810`, env `0.883`, entry `7.996`, exit `9.295`, onset artifact `2.50`; `pitchTest +4` note mel `3.044`, env `0.486`, entry `1.660`, exit `6.378`, onset artifact `0.72` | Best measured `pitchTest +4` single-case result so far | Still behind `CTRL-R6` on `pitchOrg +4`; not a single best overall control | Yes | `Active branch` | Keep as a secondary benchmark and harvest candidate, not as the main control | -| `FAM-ADAPTIVE-SELECTOR` | Harvested hybrid selector: `CTRL-R6` for short upward notes, `branch_simple_ce33` for long upward notes, light own-engine support on short downward notes | Hybrid kept path | `Kept Control` | 2026-04-15 broader validation sweep: `pitchOrg +4` note mel `7.085`, env `1.376`, entry `7.078`, exit `7.027`, onset artifact `1.80`; `pitchOrg -4` note mel `6.623`, env `1.102`, entry `6.585`, exit `7.475`, onset artifact `2.80`; `pitchTestOrg +4` note mel `2.810`, env `0.470`, entry `1.530`, exit `1.632`, onset artifact `0.70`; `pitchTestOrg -4` note mel `3.505`, env `1.024`, entry `3.090`, exit `1.835`, onset artifact `3.64` | First branch to beat `CTRL-R6` on `pitchTest +4`, keep the easier `+4` case competitive, and carry a useful harvested `pitchOrg -4` improvement without destabilizing the truth set | Still does not fully solve stutter/formant note-change quality, and `pitchTestOrg -4` remains only acceptable rather than a clear win | Yes | `Active branch` | Freeze as the benchmark branch for the rest of the research close-out and any engine-v2 comparisons | -| `FAM-ADVANCED` | Advanced legacy branch (`branch_current_advanced`) | Archived baseline | `Rejected` | Truth sweep 2026-04-15; `pitchOrg +4` note mel `7.329`, env `0.827`, cents `-36.45`; `pitchTest +4` note mel `8.784`, env `1.190`, cents `-35.70` | None beyond historical reference value | Misses pitch on both truth cases and loses clearly to both controls | No | `Active branch` | Do not use standalone; prune after tracker-based cleanup reaches archived branches | -| `FAM-CORE-PSOLA` | Standalone PSOLA core (`pitch_only_psola_core`) | Archived core | `Rejected` | Truth sweep 2026-04-15; `pitchOrg +4` note mel `11.053`, env `1.640`, body cents `-55.55`; `pitchTest +4` note mel `17.536`, env `2.547`, body cents `-104.96` | None as a standalone truth-case path | Severe pitch/body drift on both truth cases | No | `Active branch` | Do not use standalone; prune after tracker-based cleanup reaches archived cores | -| `FAM-CORE-MODEL` | Standalone model core (`pitch_only_model_core`) | Archived core | `Rejected` | Truth sweep 2026-04-15; `pitchOrg +4` note mel `10.955`, env `1.626`, body cents `-37.23`; `pitchTest +4` note mel `17.397`, env `2.530`, body cents `-104.96` | None as a standalone truth-case path | Severe truth-case loss with large body drift and poor envelope match | No | `Active branch` | Do not use standalone; prune after tracker-based cleanup reaches archived cores | -| `FAM-OWN-PITCH` | Standalone own-engine pitch path (`pitch_only_own_engine`) | Archived core | `Rejected` | Truth sweep 2026-04-15; `pitchOrg +4` note mel `6.316`, env `1.044`, entry `7.783`, exit `6.407`, onset artifact `1.59`; `pitchTest +4` note mel `12.164`, env `1.667`, entry `17.634`, exit `13.403`, onset artifact `3.99` | Decent exact-pitch `pitchOrg +4` body with a better onset artifact than `CTRL-R6` | Collapses badly on `pitchTest +4`; not a viable standalone editor | Yes | `Active branch` | Harvest only if a future v2 needs own-engine core behavior on easy upward clips | -| `FAM-FORMANT-ONLY` | Own-engine formant-only path (`formant_only_own_engine`) | Archived formant path | `Rejected` | Truth sweep 2026-04-15 matched `FAM-ADVANCED` bit-for-bit on both `+4` truth cases | None distinct from `FAM-ADVANCED` | Not a competitive truth-case path and appears equivalent to the advanced branch on current tests | No | `Active branch` | Treat as an archived alias-like formant path; prune with `FAM-ADVANCED` | -| `FAM-PITCH-PLUS-FORMANT` | Own-engine pitch-plus-formant path (`pitch_plus_formant_own_engine`) | Archived formant path | `Rejected` | Truth sweep 2026-04-15 matched `FAM-ADVANCED` bit-for-bit on both `+4` truth cases | None distinct from `FAM-ADVANCED` | Not a competitive truth-case path and appears equivalent to the advanced branch on current tests | No | `Active branch` | Treat as an archived alias-like formant path; prune with `FAM-ADVANCED` | -| `FAM-BASELINE-SAFE` | `baseline_safe` runner option | Alias / cleanup item | `Superseded` | Code inspection 2026-04-15: runner validate-set contains it, renderer parser does not map it to a distinct branch | None; not a distinct renderer family | Appears to be an alias/config leftover rather than a real option | No | `Not started` | Treat as non-distinct; clean up the option when touching runner dispatch next | -| `FAM-V2-SYNTH-CORE` | Island shell + directly synthesized voiced core + explicit residual layer | Major revamp | `Rejected` | `G1` on 2026-04-15; `pitchOrg +4` onset artifact `1.810 -> 1.39` but note mel `6.209 -> 8.135`, env `0.961 -> 1.517`, entry `6.928 -> 10.468`, exit `6.076 -> 13.781`, whole-note cents `-408.27`; `pitchTest +4` failed closed to control SHA | Preserved the familiar onset-side gain pattern on `pitchOrg +4` | Body, entry, exit, and pitch stability regressed too much; no reason to spend `G2` | No | `Removed` | Do not continue this family; escalate to a deeper redesign definition | -| `FAM-V2-HSR` | Transient layer + harmonic/source-filter core + residual layer | Major revamp | `Rejected` | `pitch_only_engine_v2` G1 on 2026-04-15; `pitchOrg +4` onset artifact `1.810 -> 1.388` but note mel `6.209 -> 7.975`, env `0.961 -> 1.454`, entry `6.928 -> 9.737`, exit `6.076 -> 12.703`; `pitchTest +4` unchanged and still did not engage | Onset-side gain on `pitchOrg +4` matched island-native family | Body/exit regressed too much and the family still did not generalize to `pitchTest +4` | No | `Removed` | Do not continue this family; move to a deeper redesign definition | -| `FAM-HPSS-SHELL` | HPSS-style vertical split: original transient/noise shell plus pitched harmonic layer | Major revamp | `Rejected` | `H1` on 2026-04-15; `pitchOrg +4` engaged and improved onset artifact `1.810 -> 1.390`, but note mel worsened `6.209 -> 10.066`, env `0.961 -> 2.028`, entry `6.928 -> 10.996`, exit `6.076 -> 15.137`; `pitchTest +4` failed closed with `hpssUsed=false`; `-4` guards also lost versus the adaptive control | Another confirmation that vertical transient preservation can reduce the onset score on the easy upward clip | Harmonic body collapsed badly on `pitchOrg +4`, did not engage on `pitchTest +4`, and did not stay safe on the `-4` guards | No | `Removed` | Stop the family at `H1`; do not open `H2/H3` on this shell | -| `FAM-HPSS-SF` | HPSS shell plus source-filter harmonic core | Major revamp | `Researched` | Not started because `FAM-HPSS-SHELL` failed the stop-fast gate immediately | Plausible path for vertical split plus timbre preservation if a stronger shell ever wins | Blocked by the failed shell; current planned version should not be opened on top of a losing `H1` | Yes | `Not started` | Only revisit if a structurally different HPSS shell is defined later | -| `FAM-HPSS-SF-APER` | HPSS shell plus source-filter core plus explicit aperiodic layer | Major revamp | `Researched` | Not started because `FAM-HPSS-SHELL` failed the stop-fast gate immediately | Keeps the full transient/harmonic/aperiodic decomposition idea on the map | Blocked by the failed shell; should not be layered onto the rejected `H1` foundation | Yes | `Not started` | Only revisit if a later HPSS shell earns continuation | -| `FAM-WSOLA-SEAM` | WSOLA-style shoulder similarity search on top of the adaptive selector | Major revamp | `Rejected` | `W1` on 2026-04-15; only `pitchOrg +4` changed, and it got worse versus the current adaptive branch: note mel `7.085 -> 7.102`, env `1.376 -> 1.377`, entry `7.078 -> 7.314`, exit `7.027 -> 7.151`, onset artifact `1.80 -> 2.29`; `pitchOrg -4`, `pitchTestOrg +4`, and `pitchTestOrg -4` stayed byte-identical to the adaptive branch | Proved the repo can run seam-search diagnostics through the existing truth harness | No truth-case win, and the only engaged case regressed on onset, entry, exit, and note mel | No | `Removed` | Do not revisit this shoulder-only WSOLA implementation; move to phase-coherent DSP families | -| `FAM-PHASE-LOCK-PV` | Phase-vocoder body path with harmonic peak locking and boundary phase alignment | Major revamp | `Rejected` | `P1` on 2026-04-15; `pitchOrg +4`, `pitchOrg -4`, and `pitchTestOrg -4` stayed byte-identical to `FAM-ADAPTIVE-SELECTOR`; `pitchTestOrg +4` was the only engaged case with `phaseLockUsed=true`, `phaseAlignedExit=true`, `phasePeakCount=114`, but it regressed on note mel `2.81 -> 3.003`, entry mel `1.53 -> 2.278`, and exit mel `1.632 -> 1.940` while only slightly improving onset artifact `0.705 -> 0.66` | Proved this lighter boundary-phase-alignment variant can engage selectively on the harder long-upward case without destabilizing the other truth cases | No equal-weight win: the only engaged case materially worsened note and entry metrics, so it did not earn a tuned `P2` | No | `Removed` | Do not revisit this boundary-alignment-only phase-lock pass; move to `FAM-HPSS-MEDIAN` | -| `FAM-HPSS-MEDIAN` | True median-filter HPSS shell with harmonic/transient recombine | Major revamp | `Rejected` | `Hm1` on 2026-04-15; only `pitchOrg +4` changed, with `hpssUsed=true`, harmonic/aperiodic peaks `0.868 / 0.554`, but note mel worsened `7.085 -> 7.432`, entry mel `7.078 -> 7.445`, and note/body/core cents collapsed to `-55.55`; `pitchOrg -4`, `pitchTestOrg +4`, and `pitchTestOrg -4` stayed byte-identical to `FAM-ADAPTIVE-SELECTOR` | Proved the repo can run a real median-filter HPSS shell through the truth harness instead of just the earlier heuristic mask shell | Still did not generalize to `pitchTest +4`, and the only engaged case regressed on body pitch and note/entry quality | No | `Removed` | Do not revisit this scalar median-shell implementation; keep only the diagnostics and stop list entry | -| `FAM-HPSS-MEDIAN-SF` | Median HPSS shell plus harmonic spectral-envelope preservation | Major revamp | `Researched` | Not started because `FAM-HPSS-MEDIAN` failed the stop-fast gate at `Hm1` | Puts true HPSS and explicit harmonic timbre preservation together in one family | Gated behind a promising `FAM-HPSS-MEDIAN` shell result; should not open on a losing shell | Yes | `Not started` | Leave blocked unless a materially stronger median HPSS shell is defined later | -| `FAM-PVDR` | Research-grade phase-coherent phase-vocoder family with proper phase locking or phase-gradient integration | Major revamp | `Rejected` | `P1` on 2026-04-15 benchmarked a long-upward resample-plus-phase-lock PVDR overlay on top of `pitch_only_adaptive_selector`; `pitchOrg +4` stayed byte-identical, but `pitchTestOrg +4` catastrophically failed with note/body/core cents `-628.27 / -628.27 / -664.72`, onset artifact exploding to `+200512709616936000`, and `phaseLockUsed=true`, `phasePeakCount=14710` | Proved the repo can route a genuinely different PV-style long-note benchmark through the truth harness without touching the live branch | The first real PVDR attempt was numerically unstable and failed the stop-fast gate decisively on the harder truth case, and there is no materially different stable PV implementation ready locally right now | No | `Removed` | Keep the broader PV family closed unless a genuinely different phase-gradient or otherwise more stable implementation is ready to benchmark | -| `FAM-TRANSITION-HQ` | HQ-only transition-native note-change overlay on top of `pitch_only_adaptive_selector` | Major revamp | `Rejected` | `M1` on 2026-04-15 benchmarked `pitch_only_transition_hq`; it engaged on both `+4` truth cases with transition diagnostics, but `pitchOrg +4` regressed from note mel `7.085 -> 7.395`, env `1.376 -> 1.434`, entry `7.078 -> 7.723`, onset artifact `1.80 -> 1.59`, while `pitchTestOrg +4` regressed much harder from note mel `2.810 -> 4.084`, env `0.470 -> 0.772`, entry `1.530 -> 15.735`, onset artifact `0.70 -> 3.73`, and core cents stayed off at `-18.32` | Proved the repo can benchmark a transition-focused HQ overlay with explicit shell/core/residual diagnostics on stereo-safe mono analysis | The overlay harmed both primary truth cases, especially `pitchTestOrg +4`, so it did not earn a second DSP iteration or the optional ML finish | No | `Removed` | Stop this family at `M1`; the next escalation is not another local overlay but a materially larger engine redesign if we revisit note-change rendering | -| `FAM-ML-RESTORATION` | Offline-only post-render restoration/refinement benchmark | Research only | `Blocked` | `M1` on 2026-04-15 benchmarked `ml_restore_proxy_v1` on top of `pitch_only_adaptive_selector`; it helped the easier clip but materially harmed `pitchTestOrg +4`. Follow-up environment benchmark on 2026-04-17 returned `blocked_no_stronger_restorer`: `voicefixer` and `demucs` are not installed, `audio_separator` is not suitable for note-local restoration, and the proxy path is explicitly excluded. | First offline benchmark infrastructure that can score a restoration pass on top of the kept renderer without touching the live editor path | No materially stronger local note-local restorer is available right now, so reopening the family locally would just repeat the rejected proxy path | Yes | `Disabled` | Keep the benchmark harness and diagnostics, but only reopen this family once a genuinely stronger local or external/licensed restorer is available | -| `FAM-ENGINE-V2` | Full note-transition-aware engine redesign with explicit harmonic core, residual/noise path, formant envelope, and transition compositor | Full redesign fallback | `Frozen Reference` | `V2-1` scaffold remains parity-safe on both primary `+4` truth clips with branch `pitch_only_engine_v2_program`, and the branch contains the full transition-native audio pass: dedicated RAM scrub preview, Signalsmith-based voiced-core render, cepstral envelope restoration, spectral-flatness transient bypass, residual carry, and transition composition. Latest narrowed runs on 2026-04-16 still lose to the adaptive selector, and the 2026-04-17 root-cause pass confirmed the branch is evidence only, not the recommended active path. | The branch now has the full implementation scaffolding we actually need: note-local HQ infrastructure, dedicated scrub monitoring, transition-native diagnostics, and a benchmarkable engine-v2 sound path that no longer fails numerically | The current waveform-correction overlay shape plateaued: it can be made safer on the easy clip, but the hard truth-case entry still loses badly versus the adaptive selector | Yes | `Active branch` | Keep the code for comparison and audition, but do not continue this branch as the main recovery path without a materially stronger decomposition/transition model | -| `FAM-ENGINE-V3` | Clean-sheet transition-pair renderer with explicit transient shell, voiced core, residual path, and built-in formant handling | Long-term redesign | `Blocked` | 2026-04-17 feasibility probe `20260417_003355_engine_v3_feasibility` scored only `0.511` on `pitchOrg_plus4` and `0.505` on `pitchTest_plus4`, both with verdict `stop` at `V3-1` decomposition stage | Keeps a true clean-sheet DSP option on the map instead of another local overlay family | Current decomposition probe is not strong enough to justify immediate build-out and risks repeating engine-v2 if opened blindly | Yes | `Not started` | Only reopen after defining a materially stronger decomposition and transition-pair ownership design; do not continue from the current probe | -| `FAM-V2-HSR-DOWN` | Separate downward law on top of the active experimental branch | Major revamp | `Harvested` | Support scan plus adaptive integration on 2026-04-15: `branch_simple_ce33` was not a clean `-4` winner; `pitch_only_own_engine` improved easy downward body metrics; harvested light own-engine support into `FAM-ADAPTIVE-SELECTOR`, improving `pitchOrg -4` note mel `7.405 -> 6.570`, entry `6.902 -> 6.571`, exit `8.778 -> 7.565` while `pitchTest -4` stayed on the same SHA | Demonstrated that a small own-engine contribution helps easier short downward notes without harming the hard guard case | Harvested result still does not materially improve the harder `pitchTest -4` truth case | Yes | `Active branch` | Treat the first downward trait as harvested; only start a deeper standalone downward family if later validation shows `pitchTest -4` still needs a dedicated win | -| `FAM-V2-LONG` | Separate long-note policy on top of v2 | Major revamp | `Researched` | Not implemented yet | Lets short-note and long-note solutions diverge cleanly | Blocked until a new short-upward v2 family actually wins | Yes | `Not started` | Blocked pending a new upward v2 control | -| `FAM-NEURAL-FINAL` | Final-only restoration benchmark | Research only | `Researched` | Not implemented yet | Possible late-stage restoration after DSP render | Too early; should not be next coding task | Yes | `Not started` | Queue only if DSP v2 plateaus | -| `FAM-SIGNALSMITH-CARRIER` | Signalsmith as carrier/fallback inside a larger v2 engine | Support architecture | `Researched` | Current repo history already proves Signalsmith-family strength | Strong stability and fallback behavior | Current Signalsmith-centered handoff family is plateaued | Yes | `Active branch` | Reuse as a support role inside v2, not as more local patching | -| `FAM-WORLD-FEATURES-V2` | WORLD-style decomposition features only for envelope / aperiodicity support | Support architecture | `Researched` | Not implemented as a distinct branch; kept as an internal-analysis option only | Useful support direction for future envelope and residual estimation | Pure WORLD rendering is still out of scope and non-competitive here | Yes | `Not started` | Use only as support features inside a future renderer, never as a standalone path | -| `FAM-DECOMP-FEATURES` | WORLD-style decomposition ideas as internal features only | Support architecture | `Researched` | Research direction only; no pure WORLD retry | Useful for F0/envelope/residual decomposition signals | Pure WORLD render path is not competitive for this product | Yes | `Not started` | Use only as internal analysis support if helpful in v2 | - -## Harvestable Traits -| Trait ID | Trait | Source Family | Evidence | Adopted? | Target Architecture | -| --- | --- | --- | --- | --- | --- | -| `TR-HS4-EARLYCORE` | Softer early-core short-upward blend | `CTRL-R6` | Best kept short-upward compromise in current branch | Yes | `CTRL-R6` control | -| `TR-D-BODY` | PSOLA body realism in stable voiced core | `FAM-BODY-D` | `pitchOrg +4` note mel `6.209 -> 5.105`, env `0.961 -> 0.474`, harmonic drift `0.400 -> 0.127` | No | `FAM-V2-HSR` | -| `TR-F-ONSET` | Island-native onset improvement with outer-only splices | `FAM-ISLAND-F` | `pitchOrg +4` onset artifact `1.810 -> 1.388` | No | `FAM-V2-HSR` | -| `TR-SIGNALSMITH-STABILITY` | Stable fallback/carrier behavior | `CTRL-SHIP`, `FAM-SIGNALSMITH-CARRIER` | Shipping path remains safest exact-pitch fallback across truth cases | Yes | Shipping fallback and future v2 fallback role | -| `TR-DECOMP-SUPPORT` | Internal decomposition as analysis features, not renderer | `FAM-DECOMP-FEATURES` | Useful structural separation for F0 / envelope / residual planning | No | `FAM-V2-HSR` | -| `TR-CE33-PITCHTEST` | Strong `pitchTest +4` truth-case behavior from simple `ce33` | `FAM-CE33-SIMPLE` | `pitchTest +4` note mel `3.044`, env `0.486`, entry `1.660`, exit `6.378`, onset artifact `0.72` | No | Future hybrid / v2 benchmark role | -| `TR-OWN-PITCH-EASY-UP` | Own-engine exact-pitch short-upward behavior on easier clips | `FAM-OWN-PITCH` | `pitchOrg +4` note mel `6.316`, onset artifact `1.59`, exact body/core pitch | No | Future v2 core selection / fallback study | -| `TR-ADAPTIVE-LONGUP` | Long-upward selector rule: keep `CTRL-R6` on short upward notes and use `ce33` on long upward notes | `FAM-ADAPTIVE-SELECTOR` | `pitchTest +4` improved from `3.481 / 0.623 / 2.484 / 7.662 / 3.819` to `3.095 / 0.493 / 1.530 / 7.350 / 0.70` while `pitchOrg +4` stayed effectively flat | Yes | `FAM-ADAPTIVE-SELECTOR` | -| `TR-ADAPTIVE-DOWN-SHORT` | Light own-engine support on shorter downward notes inside the adaptive selector | `FAM-V2-HSR-DOWN` | `pitchOrg -4` improved from note mel `7.405` to `6.570`, entry `6.902` to `6.571`, exit `8.778` to `7.565`, while `pitchTest -4` stayed byte-identical and both `+4` truth cases stayed on their kept adaptive outputs | Yes | `FAM-ADAPTIVE-SELECTOR` | -| `TR-OWN-DOWN-EASY` | Own-engine note-body gain on easier downward clips | `FAM-OWN-PITCH` | `pitchOrg -4` note mel `7.405 -> 5.560` with exact core pitch, but no generalization to `pitchTest -4` | No | Future downward-specific hybrid study | -| `TR-PHASE-LOCK-COHERENCE` | Peak-locked phase coherence around harmonic bodies | `FAM-PHASE-LOCK-PV` | `P1` only showed a selective `pitchTestOrg +4` engagement, but the resulting note/entry regression was not worth harvesting as a kept trait | No | Future phase-coherent DSP family only if a materially different implementation is defined | -| `TR-HPSS-MEDIAN-TRANSIENT` | Median-filter transient preservation without body invasion | `FAM-HPSS-MEDIAN` | `Hm1` engaged on `pitchOrg +4`, but the shell still dragged the note body off pitch (`-55.55` cents) and worsened note/entry mel, so there is no keepable transient-preserve trait yet | No | Future HPSS median family only if a materially different shell is defined | -| `TR-SF-HARMONIC-ENVELOPE` | Harmonic-only spectral-envelope preservation on top of a stronger shell | `FAM-HPSS-MEDIAN-SF` | Pending family implementation | No | Future HPSS median + source-filter family | -| `TR-ML-RESTORE` | Offline restoration of residual pitch-shift artifacts | `FAM-ML-RESTORATION` | `M1` proxy benchmark proved the harness can improve the easier `pitchOrg +4` case, but it materially harmed `pitchTestOrg +4`, so there is no keepable restore trait yet | No | Future offline restoration benchmark | -| `TR-TRANSITION-HQ` | Transition-focused shell/core/residual overlay | `FAM-TRANSITION-HQ` | `M1` engaged cleanly and exposed useful diagnostics, but it worsened both `+4` truth cases and produced no keepable transition trait | No | Future engine-v2 work only if a materially different transition model is defined | - -## Active Queue -1. Stronger ML / external benchmark only - - keep the offline benchmark harness and diagnostics - - do not reopen local ML restoration on another proxy or tuning-only pass - - only continue once a materially stronger restorer or outside/licensed benchmark path is available -2. `FAM-ENGINE-V2` - - keep the branch frozen as comparison evidence and for user audition only - - do not spend main tuning budget here unless a materially stronger decomposition/transition model is defined first -3. `FAM-ENGINE-V3` only after a stronger decomposition design exists - - do not continue from the current `V3-1` probe - - require a materially stronger transient/core/residual decomposition and transition-pair ownership design first -4. `FAM-PVDR` reopen only if a materially different stable implementation is ready - - do not reuse the rejected resample-plus-phase-lock overlay - - only reopen with a more stable phase-gradient or otherwise fundamentally different phase-coherent implementation -5. External benchmark decision - - trained ML restoration program - - or outside/licensed renderer benchmark - -## Stop List -- Do not revisit `FAM-SCALAR` without a new structural reason. -- Do not revisit `FAM-BODY-A`, `FAM-BODY-B`, `FAM-BODY-C`, or `FAM-BODY-D` as standalone handoff architectures. -- Do not revisit `FAM-CONT-E1` or `FAM-CONT-E2`. -- Do not revisit `FAM-ISLAND-F` or `FAM-ISLAND-G` as-is. -- Do not revisit `FAM-V2-HSR` as implemented on 2026-04-15; that residual-layer shell has been tested and removed. -- Do not revisit `FAM-V2-SYNTH-CORE` as implemented on 2026-04-15; that directly synthesized island-core pass has been tested and removed. -- Do not revisit `FAM-HPSS-SHELL` as implemented on 2026-04-15; it improved the easy-note onset score but collapsed note/body quality and never generalized to `pitchTest +4`. -- Do not revisit `FAM-WSOLA-SEAM` as implemented on 2026-04-15; the only engaged case (`pitchOrg +4`) got worse, and the other canonical truth cases stayed identical to `FAM-ADAPTIVE-SELECTOR`. -- Do not revisit `FAM-PHASE-LOCK-PV` as implemented on 2026-04-15; the only engaged case (`pitchTestOrg +4`) still lost on note mel and entry despite selective boundary alignment. -- Do not revisit `FAM-HPSS-MEDIAN` as implemented on 2026-04-15; it finally used a real median-filter shell, but the only engaged case (`pitchOrg +4`) still regressed on body pitch, note mel, and entry. -- Do not revisit `FAM-PVDR` as implemented on 2026-04-15; the first resample-plus-phase-lock overlay failed catastrophically on `pitchTestOrg +4`. -- Do not revisit `FAM-TRANSITION-HQ` as implemented on 2026-04-15; the transition overlay engaged on both `+4` truth cases but worsened both, especially `pitchTestOrg +4`. -- Do not revisit `FAM-ADVANCED`, `FAM-FORMANT-ONLY`, or `FAM-PITCH-PLUS-FORMANT` as standalone truth-case candidates. -- Do not revisit `FAM-CORE-PSOLA`, `FAM-CORE-MODEL`, or `FAM-OWN-PITCH` as standalone editors; harvest only explicitly proven traits. -- Do not retry pure WORLD end-to-end rendering. -- Do not spend more tuning cycles on local Stage B / blend-shape patching in the current Signalsmith-centered handoff family. -- Do not keep rejected renderer families alive just because one trait was useful; harvest the trait and remove the dead path. diff --git a/docs/pitch_renderer_research_notes.md b/docs/pitch_renderer_research_notes.md index 1d83073..ce255f0 100644 --- a/docs/pitch_renderer_research_notes.md +++ b/docs/pitch_renderer_research_notes.md @@ -1,6 +1,7 @@ # Pitch Renderer Research Notes -Date: 2026-04-15 +- Started: 2026-04-15 +- Last consolidated: 2026-04-28 Purpose: - capture primary-source research before more renderer implementation @@ -83,6 +84,21 @@ Purpose: - formant/timbre drift on note changes - weak generalization from `pitchOrg` to `pitchTestOrg` +## Consolidated architecture evidence + +The bounded root-cause and feasibility probes support three durable conclusions. Their numeric scores are historical, `diagnostic_only` evidence; they are useful for comparing the tested branches, but do not prove perceived quality or the absence of audible artifacts. + +1. Transition ownership is architectural, not another crossfade-tuning problem. + - The April 17 hard-case adaptive run still reported a `18.917 ms` maximum boundary/transient timing error, transient means of `1.598` at entry and `6.543` at exit, and `0.071` mean formant drift. + - The frozen `pitch_only_engine_v2_program` challenger reported `7.017` entry mel distance and `4.000` onset artifact even while its formant-drift diagnostic was `0.062`. + - The resulting design requirement is to own entry and exit as one transition pair, distinguish transient shell and first voiced cycles from the stable voiced core, and keep pitch-carrier ownership separate from timbre repair. +2. The first clean-sheet decomposition probe was not a viable `engine-v3` starting point. + - Its shell/core/residual heuristic scored `0.511` on `pitchOrg_plus4` and `0.505` on `pitchTest_plus4`; both runs returned the probe's `stop` verdict. + - This rejects that specific heuristic, not every future redesign. Reopen a clean-sheet branch only after defining a materially stronger decomposition and transition-pair ownership model, then proving it in a bounded feasibility probe. +3. Restoration remains a valid research direction, but the local proxy path is closed. + - The April 17 environment had a working CUDA runtime but no suitable note-local `voicefixer` or `demucs` restorer; `audio_separator` was available but did not meet the task, and `proxy_ml_restore_v1` had already been rejected. + - Do not treat package availability from that snapshot as a permanent dependency fact. The durable gate is that `FAM-ML-RESTORATION` may resume only with a materially stronger external, licensed, or research-backed restorer and a representative benchmark—not another local proxy. + ## Primary-source findings ### 1. Median-filter HPSS is real, but it is a separation tool, not a complete vocal pitch-editor solution @@ -168,13 +184,15 @@ Source: - heuristic HPSS shell - scalar median HPSS shell - lightweight boundary-aligned phase-lock variant +- the frozen `pitch_only_engine_v2_program` challenger +- the first `engine-v3` shell/core/residual decomposition heuristic ### Still genuinely viable - a true research-grade phase-vocoder family: - identity / peak phase locking - or phase-gradient / RTPGHI-style integration -- an offline restoration benchmark on top of the best current renderer -- DDSP-style engine-v2 work if we accept a larger revamp +- an offline restoration benchmark on top of the best current renderer, once a genuinely stronger restorer is available +- DDSP-style or other conditioned source/filter redesign work if we accept a larger revamp and first pass a bounded decomposition/transition feasibility gate ### Lower priority or support only - WORLD as decomposition support only @@ -182,15 +200,18 @@ Source: - more seam-only local overlap tweaks ## Recommended next queue -1. `FAM-PVDR` +1. Keep `pitch_only_adaptive_selector` as the production editor while alternatives remain benchmark-only. +2. `FAM-PVDR` - proper phase-coherent phase-vocoder family - not another boundary-alignment patch - long/stable voiced regions first -2. `FAM-ML-RESTORATION` - - offline benchmark on top of `pitch_only_adaptive_selector` +3. `FAM-ML-RESTORATION`, conditional on acquiring a genuinely stronger restorer + - benchmark offline on top of `pitch_only_adaptive_selector` - treat artifacts as restoration rather than trying to make the base shifter perfect -3. Broader validation sweep on `FAM-ADAPTIVE-SELECTOR` + - do not reopen with `proxy_ml_restore_v1` or a generic source separator +4. Broader validation sweep on `FAM-ADAPTIVE-SELECTOR` - keep the current best editor stable while new work stays benchmark-only +5. A clean-sheet engine only after a stronger decomposition/transition-pair design passes a small feasibility probe. ## Why this matters - The current repo pattern is clear: diff --git a/docs/pitch_root_cause_research_20260417.md b/docs/pitch_root_cause_research_20260417.md deleted file mode 100644 index 23ca2fa..0000000 --- a/docs/pitch_root_cause_research_20260417.md +++ /dev/null @@ -1,109 +0,0 @@ -# Pitch Root-Cause Research 2026-04-17 - -## Summary -This pass was meant to answer three bounded questions: - -1. Why are the two remaining product issues still happening? -2. Is there a fast local ML/external-style restoration path available now? -3. Is a clean-sheet `engine-v3` DSP reset credible enough to continue immediately? - -The answers are: - -- The failures are primarily architectural, not just tuning-related. -- No materially stronger local ML restorer is available in this environment right now. -- The first `engine-v3` feasibility probe does not justify immediate build-out. - -Baseline remains: - -- kept renderer: `pitch_only_adaptive_selector` -- frozen comparison-only challenger: `pitch_only_engine_v2_program` - -## Top Causes -| Rank | Cause | Confidence | Evidence | Likely fixes | -| --- | --- | --- | --- | --- | -| 1 | Transition ownership and boundary timing drift | high | Hard-case adaptive boundary timing stays high even after correction (`18.92 ms` boundary max; `18.92 ms` transient max), and frozen engine-v2 still collapses on hard-case entry (`entry mel 7.017`). | Own entry and exit as a transition pair instead of as per-note local patches; move shell/core alignment earlier at note entry instead of relying on late correction; only benchmark architectures that separate transient shell from voiced core before pitch rendering | -| 2 | Mixed transient and first-voiced-cycle content is still being handled by one renderer family | medium | Adaptive correction improves some easy windows but hard-case transient metrics stay elevated (`pitchTest` transient entry/exit max `1.614 / 6.723`), and engine-v2 still fails with transient bypass enabled. | Use a true shell/core/residual decomposition before note-change rendering; treat the first voiced cycles as their own ownership zone; prefer learned restoration or a clean-sheet transition renderer over more local handoff tuning | -| 3 | Current formant preservation is too weak and too local to survive hard transitions | high | Formant drift remains in the adaptive path even after correction (`pitchOrg` formant mean `0.364`; `pitchTest` formant mean `0.071`), while engine-v2 keeps spectral envelope correction on but still loses the hard case (`formant drift 0.062`, `entry mel 7.017`). | Use an explicitly conditioned source-filter or learned restoration stage instead of a light cepstral patch; keep pitch exactness in the carrier and repair timbre only inside the affected transition region; only continue DSP work if the new architecture bakes formant handling into the core renderer | - -## Key Evidence -- Original vs reference hard case: - - boundary timing `39.833 ms` - - formant drift `0.528` -- Adaptive best hard-case transient means: - - entry `1.598` - - exit `6.543` - - timing max `18.917 ms` -- Adaptive best hard-case formant mean drift: - - `0.071` -- Frozen engine-v2 hard-case run: - - entry mel `7.017` - - onset artifact `4.000` - - formant drift `0.062` - -Primary artifact files: - -- root-cause run: - - `D:\test projects\os tests\runs\20260417_012542_pitch_root_cause_research\pitch_root_cause_research.md` - - `D:\test projects\os tests\runs\20260417_012542_pitch_root_cause_research\pitch_root_cause_research.json` -- ML benchmark: - - `D:\test projects\os tests\runs\20260417_003355_pitch_ml_benchmark\pitch_ml_benchmark_summary.md` -- engine-v3 feasibility: - - `D:\test projects\os tests\runs\20260417_003355_engine_v3_feasibility\pitch_engine_v3_feasibility_summary.md` - -## ML Benchmark Verdict -Local ML restoration is blocked for now. - -Environment result: - -- verdict: `blocked_no_stronger_restorer` -- runtime ready: `true` -- selected backend: `cuda` - -Candidate check: - -- `voicefixer`: not installed -- `demucs`: not installed -- `audio_separator`: available, but not note-local restoration -- `proxy_ml_restore_v1`: explicitly excluded and already rejected - -Meaning: - -- do not reopen `FAM-ML-RESTORATION` locally on another proxy -- the next ML step is to source a genuinely stronger restorer or benchmark an outside/licensed path - -## Engine-v3 Feasibility Verdict -The first `V3-1` decomposition probe says `stop`, not `continue`. - -Results: - -| Case | Decomposition score | Verdict | -| --- | ---: | --- | -| `pitchOrg_plus4` | `0.511` | `stop` | -| `pitchTest_plus4` | `0.505` | `stop` | - -Interpretation: - -- the first shell/core/residual split heuristic is not yet stronger than the current adaptive carrier -- there is no evidence yet that an immediate `engine-v3` build-out would avoid repeating the `engine-v2` failure pattern - -Meaning: - -- do not start a long `engine-v3` branch from this decomposition probe alone -- only reopen `engine-v3` if we define a materially stronger decomposition and transition-pair ownership model first - -## Decision -Current best action order is: - -1. Keep `pitch_only_adaptive_selector` as the working editor. -2. Stop local ML retries until a stronger restorer is actually available. -3. Do not expand `engine-v3` from the current feasibility probe. -4. If we want the fastest chance of a real audible improvement, benchmark an external/licensed or materially stronger ML restorer next. -5. If we want a new in-house DSP engine later, begin with a better decomposition/transition design doc first, not another immediate renderer branch. - -## What This Research Changed -This pass closes the main uncertainty from the earlier tuning program: - -- the problem is not mainly unresolved because we missed one more STFT or crossfade tweak -- the problem remains because the current family does not own the transition pair strongly enough, still mixes transient and first voiced cycles too early, and only preserves formants with a weak local correction - -That means the next step should be bounded and evidence-led, not another open-ended renderer tuning loop. diff --git a/docs/pr_footprint_cleanup_20260501.md b/docs/pr_footprint_cleanup_20260501.md deleted file mode 100644 index 394efeb..0000000 --- a/docs/pr_footprint_cleanup_20260501.md +++ /dev/null @@ -1,24 +0,0 @@ -# PR Footprint Cleanup - 2026-05-01 - -## Keep - -- Source, frontend, docs, tools, and test fixture files that are part of active feature work or regression coverage. -- AI runtime installer/configuration files such as `tools/install_ai_tools.py`, `tools/prepare-ai-runtime.ps1`, runtime install-plan JSON files, `tools/openstudio_ace_runner.py`, and the lightweight `tools/openstudio_ace_backend` bridge sources. -- Pitch regression scripts and fixtures needed to reproduce the pitch-renderer work. - -## Ignore Or Remove - -- `tmp_pitch_runs/` generated pitch regression runs. Pre-cleanup status showed 2951 untracked files in this directory. -- `tools/openstudio_ace_backend/vendor_runtime/` downloaded/generated ACE runtime payloads. Pre-cleanup status showed 429 untracked files in this directory. The installer/probe code reconstructs this runtime from the pinned runtime plan and cache; it should not be committed. -- Generated pitch regression WAV/PNG/JSONL reports under `tests/fixtures/pitch-regression`. -- Local debug capture output under `pitch_debug_captures/`. - -## Needs Review - -- Untracked source/docs/frontend/test files outside the generated buckets are not deleted here. They appear to be intentional feature or regression work and should be reviewed by feature owner before commit. -- Tracked modified files remain untouched by this cleanup pass. - -## Actions - -- Added `.gitignore` coverage for generated pitch runs, pitch debug captures, generated report media, and the ACE vendor runtime payload. -- Removed generated local runtime/run folders from the working tree after verifying they were inside the repository root. diff --git a/docs/qwen-daw-assistant-turboquant-plan.md b/docs/qwen-daw-assistant-turboquant-plan.md deleted file mode 100644 index f5999d1..0000000 --- a/docs/qwen-daw-assistant-turboquant-plan.md +++ /dev/null @@ -1,584 +0,0 @@ -# Qwen DAW Assistant, TurboQuant, GGUF, and ACE Step Plan - -Date: 2026-04-27 - -Status: planning document only. Do not treat this file as implementation. - -## Goal - -Build a local-only Qwen assistant for Studio13 that can understand plain English, inspect project/audio context, plan DAW/plugin actions, explain the impact of those actions, and execute only after user confirmation. - -The assistant must also control the existing ACE Step 1.5 XL Turbo music-generation integration. - -The installer must check hardware first, download only one supported model/runtime profile, verify that it actually runs, and fail clearly if unsupported. No runtime fallback and no downloading a larger model that cannot run on the machine. - -## Key Decision - -Use Qwen-only audio/music-capable models. - -Do not use Gemma. - -Do not use text-only Qwen models as the main assistant, even if they are easier to run, because the requirement is audio/music understanding. - -ACE Step's internal `qwen_4b_ace15.safetensors` model is not the Studio13 assistant brain. It is part of the ACE generation stack and should stay there. - -## What TurboQuant Actually Gives Us - -TurboQuant is KV-cache compression for vLLM inference. It is not a model-weight quantizer. - -That means: - -- TurboQuant helps with longer context after the base model has loaded. -- TurboQuant can reduce KV memory pressure for large project/audio summaries. -- TurboQuant does not make an oversized model's weights fit into VRAM by itself. -- TurboQuant applies to the vLLM path, not the GGUF/llama.cpp path. -- For quality-sensitive audio/music planning, prefer 4-bit values where possible. TurboQuant's own README identifies low-bit value quantization as the main quality bottleneck. - -TurboQuant's published hardware tests are not audio-model tests: - -| TurboQuant-tested model | Hardware | Relevance to Studio13 | -| --- | --- | --- | -| `Qwen3.5-27B-AWQ` | 1x RTX 5090 32GB | Useful proof of vLLM KV compression, but not an audio/music Omni assistant target. | -| `Qwen3.5-35B-A3B` | 8x RTX 3090 24GB | Useful MoE/KV reference, but not a practical single-workstation Studio13 target. | - -Studio13 should use TurboQuant as an optimization layer only after a Qwen audio model has passed a real load test. - -## Runtime Families - -The installer should probe both runtime families before downloading a model, then select exactly one verified profile. - -### Primary: vLLM/vLLM-Omni + AWQ + TurboQuant - -Use when WSL2 CUDA validates cleanly. - -Includes: - -- WSL2/Linux CUDA runtime. -- vLLM or vLLM-Omni. -- AWQ or AWQ-Marlin where supported. -- TurboQuant KV-cache compression. -- Triton kernels from vLLM/TurboQuant. -- FlashAttention or vLLM's optimized attention backend. -- PagedAttention. -- Fixed context, batch, and audio-window limits based on VRAM. - -Preferred 16GB VRAM candidate: - -- `Qwen/Qwen2.5-Omni-7B-AWQ` - -Why: - -- It supports text, image, audio, and video input. -- Its model card explicitly targets lower-VRAM GPUs. -- Its official table lists substantially lower memory than BF16: 11.77GB for 15s video, 17.84GB for 30s video, 30.31GB for 60s video. -- For Studio13, we should use audio-only input and `return_audio=false`, so the practical audio-only load can be lower than the video table, but it still must be verified locally. - -### Secondary: llama.cpp + GGUF + mtmd/mmproj - -Use only if the exact GGUF model and audio path verify successfully. - -Includes: - -- llama.cpp CUDA build. -- GGUF language/model file. -- matching multimodal projector or mtmd-compatible assets when required. -- GPU layer offload. -- llama.cpp flash attention where supported. -- audio-only verification prompt. - -Important: - -- TurboQuant does not apply to GGUF. -- GGUF model weight quantization and TurboQuant KV compression are separate technologies. -- llama.cpp multimodal/audio support is actively evolving, so GGUF profiles must be marked candidate-only until Studio13's installer proves that the exact model can accept audio and return reliable text/tool-plan output. - -## Qwen Model Map: Small to Large - -Only models with audio/music understanding are allowed in the assistant model map. - -The installer should maintain a strict profile manifest. A model is "loadable" only if both the hardware prefilter and the real startup test pass. - -| Tier | Model | Role | Audio/music support | Runtime candidates | Minimum install rule | -| --- | --- | --- | --- | --- | --- | -| Small | `Qwen/Qwen2.5-Omni-3B` | Lowest-footprint direct audio assistant | Yes. Official card reports music/audio reasoning benchmarks. | vLLM-Omni, Transformers, GGUF candidate | Install only after a real 10s audio load test. Prefer this when 7B-AWQ fails on 16GB VRAM. | -| Recommended | `Qwen/Qwen2.5-Omni-7B-AWQ` | Main consumer-GPU assistant | Yes. Better than 3B on most audio/text tasks and has low-VRAM AWQ profile. | vLLM-Omni/Transformers AWQ | Primary target for 32GB RAM / 16GB VRAM. Use 10-15s audio batches by default. | -| Medium | `Qwen/Qwen2.5-Omni-7B` BF16 | Higher-quality 7B baseline | Yes | vLLM-Omni/Transformers | Reject on 16GB VRAM. Require large-VRAM verification, roughly 48GB+ practical headroom. | -| Large analysis sidecar | `Qwen/Qwen3-Omni-30B-A3B-Captioner` | Detailed audio caption/context extractor | Yes, audio-focused text output | vLLM/Transformers, GGUF candidate | Not the main DAW control brain. Require high-VRAM verification or remote lab machine. | -| Large reasoning | `Qwen/Qwen3-Omni-30B-A3B-Thinking` | Best multimodal reasoning candidate | Yes | vLLM/Transformers, GGUF candidate | Reject on 16GB VRAM. Official BF16 table is 68.74GB minimum for 15s video. | -| Largest | `Qwen/Qwen3-Omni-30B-A3B-Instruct` | Full thinker/talker model | Yes | vLLM/Transformers, GGUF candidate | Reject on 16GB VRAM. Official BF16 table is 78.85GB minimum for 15s video. Disable talker when text output only. | - -Legacy candidate: - -- `Qwen/Qwen2-Audio-7B-Instruct` can understand audio, but Qwen2.5-Omni should be preferred because it has stronger documented multimodal/audio/music performance and better current runtime paths. - -## Hardware Selection Rules - -These are installer prefilter rules. The final authority is a real local model-load and inference test. - -| Hardware | Selected profile | -| --- | --- | -| 16GB VRAM, 32GB RAM, WSL2 CUDA passes | `Qwen/Qwen2.5-Omni-7B-AWQ` through vLLM/vLLM-Omni, TurboQuant enabled after load. | -| 16GB VRAM, vLLM path fails but llama.cpp audio GGUF path verifies | `Qwen2.5-Omni-3B-GGUF` first; `Qwen2.5-Omni-7B-GGUF` only if audio load test passes with headroom. | -| 24GB VRAM | `Qwen/Qwen2.5-Omni-7B-AWQ` with longer audio windows, or verified `Qwen2.5-Omni-7B-GGUF`. | -| 48GB VRAM | `Qwen/Qwen2.5-Omni-7B` BF16 or AWQ with longer batches. | -| 80GB+ VRAM | Consider `Qwen3-Omni-30B-A3B-Thinking`. | -| 96GB+ VRAM or multi-GPU | Consider `Qwen3-Omni-30B-A3B-Instruct`. | -| No verified profile | Do not download a model. Mark assistant unsupported. | - -For the current target class of 32GB RAM / 16GB VRAM, the realistic plan is: - -1. Try `Qwen/Qwen2.5-Omni-7B-AWQ` with audio-only inference, `return_audio=false`, 10s default audio windows. -2. If it cannot be loaded during pre-download verification planning, try the 3B Omni profile. -3. If neither profile can be proven loadable, do not install the assistant model. - -## Installer Requirements - -The existing AI runtime installer should gain a separate "assistant runtime" section while keeping ACE Step installation intact. - -Probe before download: - -- Windows version. -- WSL2 availability. -- NVIDIA driver and CUDA visibility inside WSL2. -- GPU model, VRAM, compute capability, and free VRAM. -- System RAM and free disk. -- Existing ACE Step runtime status. -- Whether vLLM/vLLM-Omni can start. -- Whether TurboQuant can import and attach its vLLM integration. -- Whether llama.cpp CUDA build can run an mtmd/audio smoke test. - -Profile manifest fields: - -- `profileId` -- `modelRepo` -- `modelRevision` -- `runtimeFamily` -- `quantization` -- `requiresAudioInput` -- `requiresMmproj` -- `minRamGb` -- `minVramGb` -- `minFreeDiskGb` -- `defaultAudioWindowSeconds` -- `maxVerifiedAudioWindowSeconds` -- `contextTokens` -- `gpuOffloadPolicy` -- `turboQuantEnabled` -- `flashAttentionEnabled` -- `tritonRequired` -- `startupTestPrompt` -- `audioSmokeTestFile` -- `sha256` or pinned file checksums where possible - -Verification after download: - -1. Load the model. -2. Load multimodal/audio projector if required. -3. Run a 10s audio/music understanding test. -4. Run a strict JSON action-plan test. -5. Validate against Studio13's assistant action schema. -6. For vLLM path, verify TurboQuant integration and the attention backend. -7. For GGUF path, verify llama.cpp audio input through its supported local API/CLI. -8. Record the verified profile in a runtime status file. - -No fallback policy: - -- The installer may probe multiple profiles before download. -- The installer must download only the selected profile. -- After download, if verification fails, mark assistant unsupported. -- Do not silently install a smaller model after a failed selected install. -- User can explicitly rerun setup to select a different profile. - -## Audio Context Strategy - -Do not feed all multitrack audio directly into the LLM. - -Use deterministic project/audio analysis first, then send compact structured context plus selected raw audio windows only when needed. - -Per clip context: - -- file path/id -- duration -- sample rate -- channels -- clip gain -- fades -- offset/trim -- loudness -- peak/true peak -- silence regions -- transient density -- pitch/key estimate where relevant -- tempo hints -- spectral tilt -- stereo width - -Per track context: - -- track name/type guess -- clips -- volume/pan/mute/solo/arm -- routing/sends -- FX chain and plugin params -- automation summary -- loudness and peak range -- frequency balance -- role guess such as vocal, drums, bass, guitar, keys, FX, bus, master - -Master context: - -- integrated LUFS -- short-term LUFS -- true peak -- crest factor -- clipping risk -- spectral balance -- stereo width -- phase/correlation -- dominant problem regions - -Batching rules: - -| Situation | Audio window policy | -| --- | --- | -| Selected clip edit | Send selected clip summary plus 5-10s raw audio around selection. | -| Track-level mix command | Send full track summary plus 10s representative windows. | -| Master mix command on small project | Send all track summaries plus representative 10s windows from loud/active sections. | -| Master mix command on large project | Batch by buses/stems first, then request track-level details only for problematic groups. | -| Many tracks or long project | Use section summaries first. Raw audio only for selected sections. | -| Micro timing/glitch tasks | Use 1s windows around transient/problem locations. | -| Arrangement/structure tasks | Use 30-100s symbolic/summary windows, not raw audio by default. | - -Default for 16GB VRAM: - -- 10s audio windows. -- No video input. -- Text output only. -- `return_audio=false`. -- TurboQuant enabled only on the vLLM path after model load. - -## Assistant Action Surface - -All actions must be typed, validated, reversible where possible, and confirmation-gated. - -The assistant should not directly mutate state. It should produce an action plan that Studio13 executes through existing store/bridge paths. - -Every clip/track/project data mutation must use undo-aware command paths. - -### Transport and Timeline - -- Play, stop, pause, record. -- Seek to time/bar/marker. -- Set loop region. -- Toggle metronome/count-in. -- Set tempo/time signature. -- Add, remove, rename, and navigate markers/regions. -- Set snap/grid/zoom/tool mode. - -### Tracks and Mixer - -- Add, duplicate, remove, rename, color, reorder tracks. -- Create folder tracks, buses, VCAs, groups. -- Set volume, pan, width, phase, mute, solo, arm, monitoring. -- Set input/output routing. -- Add/remove/adjust sends. -- Create mix snapshots. -- Compare or restore mixer snapshots. - -### Clips and Editing - -- Import audio/MIDI. -- Add generated audio clips. -- Move, split, trim, resize, duplicate, delete clips. -- Set clip gain, mute, color, lock, group, reverse. -- Apply fades/crossfades. -- Quantize, nudge, align, slip edit. -- Dynamic split by transients. -- Normalize or adjust gain. -- Render/bounce selected clips. - -### Plugins and FX Chains - -- Insert built-in FX or scanned plugins. -- Remove, bypass, enable, reorder plugins. -- Read plugin parameters. -- Set plugin parameters. -- Load presets where available. -- Create common chains, such as vocal cleanup, bass control, drum bus glue, mastering limiter. -- Explain expected sonic impact before applying. - -### Automation - -- Create/show/hide automation lanes. -- Add, move, delete automation points. -- Set automation mode. -- Draw fades, ramps, ducking, pan moves, filter sweeps. -- Summarize automation conflicts. - -### Pitch, Stem, and Audio Analysis - -- Analyze pitch contour. -- Apply pitch correction. -- Extract MIDI where supported. -- Separate stems. -- Detect tempo/key. -- Detect transients/silence. -- Analyze loudness/spectrum/stereo. -- Suggest corrective chains based on analysis. - -### Render and Export - -- Configure render format. -- Render master. -- Render selected tracks/stems only when backend support exists. -- Normalize/tail options where supported. -- Explain unsupported render options rather than pretending they work. - -### ACE Step 1.5 XL Turbo - -The assistant must be able to control ACE Step through Studio13's existing AI generation pipeline. - -Actions: - -- `ai.getRuntimeStatus` -- `ai.openSetup` -- `ai.createAITrack` -- `ai.setWorkflow` -- `ai.setGenerationParams` -- `ai.generateMusic` -- `ai.cancelGeneration` -- `ai.pollGeneration` -- `ai.insertGeneratedClip` - -ACE workflow params to expose: - -- `workflowId` -- `prompt` -- `lyrics` -- `seed` -- `bpm` -- `duration` -- `timesignature` -- `language` -- `keyscale` -- `generate_audio_codes` -- `inferenceSteps` -- `cfg_scale` -- `guidance_scale` -- `shift` -- `temperature` -- `top_p` -- `top_k` -- `min_p` - -The assistant should not call `tools/generate_music.py` directly. It should use the app's existing NativeBridge/store flow so progress, cancellation, UI status, and generated clip insertion stay consistent. - -If the user requests continuation from an existing clip, the assistant should only use ACE continuation if that workflow is implemented and marked available. Otherwise it should say continuation is unavailable and offer a prompt/style-based generation using extracted clip context. - -## Example Action Chains - -### "Make the vocal clearer" - -Plan: - -1. Analyze selected vocal track loudness, spectral balance, silence, and FX chain. -2. Add or adjust high-pass EQ. -3. Add gentle compression. -4. Add de-esser if sibilance is detected. -5. Raise presence band only if masking is detected. -6. Lower competing instruments or add sidechain/dynamic EQ if needed. -7. Preview and keep changes undoable. - -Impact: - -- Improves intelligibility. -- May make vocal brighter or more forward. -- Can increase harshness if overdone, so cap boosts conservatively. - -### "Make the master louder without clipping" - -Plan: - -1. Analyze master LUFS, true peak, crest factor, clipping risk. -2. Identify tracks/buses causing peak spikes. -3. Lower or compress those tracks first. -4. Add/adjust master bus compression only if needed. -5. Add limiter ceiling, e.g. -1.0 dBTP. -6. Increase gain to target loudness. -7. Re-analyze and show before/after. - -Impact: - -- Raises perceived loudness. -- May reduce dynamics. -- Safer than only pushing a limiter because it fixes source peaks first. - -### "Generate a dark synthwave intro" - -Plan: - -1. Read project tempo/key if present. -2. Create or select an AI track. -3. Set ACE Step workflow to `text-to-music`. -4. Translate request into ACE params: prompt, BPM, key, duration, seed. -5. Confirm with the user. -6. Start ACE generation. -7. Poll progress. -8. Insert generated clip. -9. Name/color/route track. - -Impact: - -- Adds a new generated audio clip. -- Does not modify existing audio. -- Can be regenerated with a seed change. - -### "Use this clip as context and create drums that fit" - -Plan: - -1. Analyze selected clip tempo/key/energy/transients. -2. Summarize style and rhythmic feel. -3. Build an ACE prompt from the summary. -4. Generate a drum-focused clip on a new AI track. -5. Align clip start to selection. -6. Set gain conservatively and route to drum bus if present. - -Impact: - -- Creates a new generated drum layer. -- Existing clip remains untouched. -- Exact continuation depends on whether ACE continuation workflow is available. - -## UI Plan - -Add a collapsible chat bar on the right side of the DAW. - -States: - -- collapsed icon button -- expanded chat -- context selected -- thinking/planning -- awaiting confirmation -- executing -- success -- failed/unsupported - -The assistant response should show: - -- interpreted intent -- affected tracks/clips/plugins -- proposed action chain -- expected sonic impact -- risk/destructive status -- undo availability -- confirmation controls - -Execution policy: - -- Never auto-execute data-changing actions from plain text. -- Always ask for confirmation. -- Allow safe read-only analysis without confirmation. -- Let the user inspect the exact action chain before execution. - -## Feasibility Report - -Feasible, with the right constraints. - -Most realistic for 32GB RAM / 16GB VRAM: - -- `Qwen/Qwen2.5-Omni-7B-AWQ` -- vLLM/vLLM-Omni in WSL2 CUDA -- audio-only input -- `return_audio=false` -- 10s default raw audio windows -- project summaries for larger context -- TurboQuant for KV/context pressure after load - -Likely not feasible on 16GB VRAM: - -- Qwen3-Omni 30B BF16 variants. -- Long raw multitrack audio context in one prompt. -- Full raw master mix analysis for many tracks without batching. - -GGUF feasibility: - -- Useful as a secondary path. -- Must be verified per exact model because llama.cpp audio/multimodal support is still moving quickly. -- Do not assume a GGUF file is enough; audio input support and projector compatibility must pass a real smoke test. - -ACE Step feasibility: - -- Already integrated as a music-generation engine. -- Very useful as an assistant-controlled tool. -- Not suitable as the general DAW assistant model. -- The assistant should use ACE for generation, not for reasoning/planning. - -## Implementation Phases - -### Phase 1: Documentation and manifests - -- Create assistant model profile manifest. -- Add action schema draft. -- Define installer probe outputs. -- Define verification prompts and audio smoke-test assets. - -### Phase 2: Runtime probe - -- Extend AI runtime probe for assistant runtime. -- Add WSL2 CUDA checks. -- Add vLLM/vLLM-Omni import checks. -- Add TurboQuant import/hook checks. -- Add llama.cpp CUDA/mtmd checks. - -### Phase 3: Installer selection - -- Select exactly one model profile before download. -- Download only selected model. -- Run verification. -- Save verified runtime status. -- Fail clearly if unsupported. - -### Phase 4: Assistant service - -- Local HTTP service wrapper around selected runtime. -- Strict JSON output mode. -- Tool/action schema validation. -- Project/audio context assembler. -- Plan generation and confirmation flow. - -### Phase 5: DAW integration - -- Collapsible right chat bar. -- Action preview UI. -- Confirmation and execution state. -- Undo-aware action execution. -- ACE Step action control. - -### Phase 6: Audio intelligence - -- Clip/track/master feature summaries. -- Representative audio window selector. -- Batch planner for large projects. -- Before/after analysis for mix actions. - -## Acceptance Criteria - -- On unsupported hardware, no assistant model is downloaded. -- On supported hardware, exactly one assistant model profile is downloaded. -- Startup verification proves audio input, JSON planning, and schema validation. -- The assistant can explain and confirm a DAW action chain before running. -- The assistant can control ACE Step generation through Studio13's existing AI generation flow. -- Master mix requests use track/bus analysis and batched context instead of dumping all audio into the LLM. -- All data-changing actions remain undoable where Studio13 supports undo. - -## Sources - -- TurboQuant: https://github.com/0xSero/turboquant -- vLLM-Omni supported models: https://docs.vllm.ai/projects/vllm-omni/en/latest/models/supported_models/ -- Qwen2.5-Omni-3B: https://huggingface.co/Qwen/Qwen2.5-Omni-3B -- Qwen2.5-Omni-7B-AWQ: https://huggingface.co/Qwen/Qwen2.5-Omni-7B-AWQ -- Qwen3-Omni-30B-A3B-Instruct: https://huggingface.co/Qwen/Qwen3-Omni-30B-A3B-Instruct -- llama.cpp multimodal/mtmd notes: https://github.com/ggml-org/llama.cpp/blob/master/tools/mtmd/README.md - diff --git a/docs/release-runbook.md b/docs/release-runbook.md index 2475b46..1b599ff 100644 --- a/docs/release-runbook.md +++ b/docs/release-runbook.md @@ -35,14 +35,14 @@ Use this flow instead: - If runtime inputs did not change, keep `OPENSTUDIO_AI_RUNTIME_RELEASE_TAG` and `OPENSTUDIO_AI_RUNTIME_VERSION` pinned to the latest known-good runtime release. - If runtime inputs changed, publish the runtime first with `.github/workflows/ai-runtime-release.yml`, then update those variables to the new runtime release tag/version. 6. Push a version tag like `v0.0.2`. -7. Let `.github/workflows/release.yml` build Windows and macOS, reuse the pinned AI runtime release, publish the GitHub Release, attach the fixed-name assets, and then trigger the website repo so it can publish the public metadata and redirects. +7. Let `.github/workflows/release.yml` build Windows, macOS, and Linux, reuse the pinned AI runtime release, publish the GitHub Release, attach the release assets, and then trigger the website repo so it can publish the public metadata and redirects. 8. Verify the published direct-download URLs: - `https://github.com/<org>/<repo>/releases/latest/download/OpenStudio-Setup-x64.exe` - `https://github.com/<org>/<repo>/releases/latest/download/OpenStudio-macOS.dmg` - - `https://github.com/<org>/<repo>/releases/latest/download/OpenStudio-Linux.AppImage` + - `https://github.com/<org>/<repo>/releases/download/v<version>/OpenStudio-<version>-linux-x86_64.AppImage` - `https://github.com/<org>/<repo>/releases/download/<ai-runtime-tag>/OpenStudio-AI-Runtime-windows-base-x64.zip` - - `https://github.com/<org>/<repo>/releases/latest/download/OpenStudio-AI-Runtime-macos-arm64.zip` - - `https://github.com/<org>/<repo>/releases/download/<ai-runtime-tag>/OpenStudio-AI-Runtime-linux-x64.tar.gz` + - `https://github.com/<org>/<repo>/releases/download/<ai-runtime-tag>/OpenStudio-AI-Runtime-macos-arm64.zip` + - `https://github.com/<org>/<repo>/releases/download/<ai-runtime-tag>/OpenStudio-AI-Runtime-linux-cpu-x64.zip` 9. Verify the website repo finishes its deploy and the public metadata/redirect URLs on `openstudio.org.in` return JSON/XML/302 responses instead of the SPA HTML shell. The stable installer/runtime filenames are part of the public download contract. The website repo is now the only publisher of public metadata and redirects. @@ -59,11 +59,23 @@ If a release page shows only GitHub's default source archives, treat that as a f - Official Windows CI and release builds also provision the pinned Windows prerequisite installers used by the installer recovery flow. - To install the pinned optional ONNX Runtime package locally, run: `powershell -ExecutionPolicy Bypass -File tools/setup-onnxruntime.ps1` + The installer records and verifies the requested version, platform, archive + digest, import library, runtime DLL, headers, and redistributed notices before + reusing an existing local installation. - To install the pinned ASIO SDK locally, run: `powershell -ExecutionPolicy Bypass -File tools/setup-asio-sdk.ps1` - To install the pinned Windows prerequisite installers locally, run: `powershell -ExecutionPolicy Bypass -File tools/setup-windows-prereqs.ps1` -- To include ONNX Runtime in the Windows GitHub Actions build, set the repository variable `OPENSTUDIO_SETUP_ONNXRUNTIME=true`. +- Official Windows and Linux CI/release jobs provision the pinned ONNX Runtime + and validate its redistributed license notices. The current macOS release job + does not provision ONNX Runtime. +- Windows packages include one checksum-pinned, provenance-recorded FFmpeg + executable. macOS and Linux packages intentionally do not redistribute an + unpinned FFmpeg binary and use an optional system `ffmpeg` on `PATH`. +- Windows configuration and runtime validation fail if the pinned FFmpeg + executable or its required legal/provenance files are absent or altered. +- Linux release automation extracts the completed AppImage and reruns the + runtime-bundle contract against its packaged `usr/bin` payload. ## Dependency contract @@ -75,6 +87,42 @@ OpenStudio now follows the policy documented in `docs/runtime-dependency-contrac - Optional feature prerequisites, including Python for AI tools, must never block base app launch. - AI tools setup runs in the background and surfaces progress through the toolbar AI button plus a lightweight in-app popup. +## Release decision rules + +- Do not publish a Windows artifact containing the bundled `ffmpeg.exe` until + complete corresponding source for that exact static build (including its + linked libraries) is made available through the release distribution. The + packaged GPL text and provenance manifest are necessary notices, but are not + a substitute for corresponding source. +- Configure repository variables `OPENSTUDIO_FFMPEG_CORRESPONDING_SOURCE_URL` + and `OPENSTUDIO_FFMPEG_CORRESPONDING_SOURCE_SHA256` with an HTTPS archive and + digest for that exact complete source package. Release automation downloads, + verifies, checksums, and publishes it beside the Windows installer; missing + or mismatched configuration blocks the release. +- A passing `--startup-self-test` proves dependency and asset preflight, not a + rendered UI. The packaged main shell, detached Mixer, detached MIDI editor, + and built-in effect editor must each report `boot-ready` through close/reopen + cycles; native third-party editor lifecycle is checked separately. +- A Debug pass is not a Windows Release pass. The installed Release executable + is the browser/window approval artifact. +- Preserve the browser startup watchdog and the shared writable + `%APPDATA%\OpenStudio\WebView2UserData` configuration used by both WebView2 + preflight and construction. +- Upgrade JUCE only as an isolated dependency change. Require Debug and Release + compilation plus audio-device, plug-in-host, window-lifecycle, and packaging + gates. Realtime JUCE patches must fail closed if their expected upstream + source context changes. +- Treat code signing, notarization, and download reputation as separate + evidence. A signed Windows binary may still lack SmartScreen reputation, and + a valid macOS signature is not a substitute for the intended notarization and + Gatekeeper assessment. + +Before publication, complete the real-machine matrix in +`docs/release-smoke-checklist.md`: Windows 10 and 11 standard-user installs, +Apple Silicon plus Intel macOS (including the oldest supported macOS), actual +audio-device reconfiguration/record/render/sleep-wake checks, and available +VST3/CLAP/AU editor lifecycle checks while audio is active. + ## Local Windows release flow The local Windows RC gate is now the required no-surprises check before any push/tag for release: @@ -95,7 +143,7 @@ If you want one command for the full guarded Windows path, use: 1. Build the frontend: `cd frontend && npm ci && npm run build` 2. Install the ASIO SDK when you want parity with the official Windows release path: `powershell -ExecutionPolicy Bypass -File tools/setup-asio-sdk.ps1` -3. Optional: install ONNX Runtime for polyphonic pitch detection: `powershell -ExecutionPolicy Bypass -File tools/setup-onnxruntime.ps1` +3. Install ONNX Runtime for parity with the official Windows release and polyphonic pitch detection: `powershell -ExecutionPolicy Bypass -File tools/setup-onnxruntime.ps1` 4. Build the app in a clean release directory: `cmake -S . -B build-release-windows -A x64 "-DOPENSTUDIO_APP_VERSION=1.0.0" "-DJUCE_ASIOSDK_PATH=thirdparty/asio" "-DOPENSTUDIO_REQUIRE_ASIO=ON" "-DOPENSTUDIO_ENABLE_EXTERNAL_PYTHON_AI_FALLBACK=OFF" -DFETCHCONTENT_UPDATES_DISCONNECTED=ON` 5. Build the release target: `cmake --build build-release-windows --config Release --target OpenStudio` 6. Validate the runtime bundle: `./tools/validate-runtime-bundle.ps1 -Platform windows -BundlePath build-release-windows/OpenStudio_artefacts/Release -ExpectedVersion 1.0.0 -EnforceLeanBundle` @@ -124,14 +172,14 @@ If you want one command for the guarded macOS path, use: 3. Validate the app bundle: `./tools/validate-runtime-bundle.ps1 -Platform macos -BundlePath build-release-macos/<path-to-OpenStudio.app> -ExpectedVersion 1.0.0 -EnforceLeanBundle` 4. Package the DMG: `./tools/package-macos-release.sh build-release-macos/<path-to-OpenStudio.app> 1.0.0` - If `MACOS_CODESIGN_IDENTITY` is set, the script verifies both the app bundle and DMG with `codesign` and `spctl`. If notarization credentials are present, it also staples and validates the notarized DMG. - For the zero-cost v1 path, leave those signing variables unset and ship the unsigned DMG with manual Gatekeeper override instructions on the download page. + If `MACOS_CODESIGN_IDENTITY` is set, the script verifies both the app bundle and DMG with `codesign`. If notarization credentials are present, it also staples and validates the notarized DMG and requires Gatekeeper (`spctl`) acceptance. + For the zero-cost v1 path, leave those signing variables unset, publish the generated SHA-256 checksum, and document Apple's per-app **Privacy & Security > Open Anyway** flow. Recursive quarantine removal is a diagnostic fallback, not the normal installation path. 5. Prepare and package the macOS AI runtime archive for Apple Silicon: `./tools/prepare-ai-runtime.ps1 -Platform macos -RuntimeRoot build-ai-runtime/macos-arm64 -Architecture arm64 -RequirementsFile tools/ai-runtime-requirements-macos.txt -ExpectedRuntimeVersion 1.0.0 -StandaloneReleaseTag 20260325 -StandalonePythonVersion 3.10.20` `./tools/package-ai-runtime.ps1 -Platform macos -RuntimeRoot build-ai-runtime/macos-arm64 -OutputPath dist/ai-runtime/OpenStudio-AI-Runtime-macos-arm64.zip -ExpectedRuntimeVersion 1.0.0` Intel macOS AI runtime support is currently disabled because the pinned `audio-separator` dependency stack does not publish a satisfiable Intel macOS wheel set for the release path. 6. Generate updater metadata with the DMG path and URL included. - For Sparkle-ready appcasts, also pass `-MacEdSignature <signature>` and optionally `-MacMinimumSystemVersion 13.0`. + For Sparkle-ready appcasts, also pass `-MacEdSignature <signature>` and optionally `-MacMinimumSystemVersion 12.0`. 7. Validate the generated metadata: `./tools/validate-release-metadata.ps1 -MetadataDir dist/release-metadata -Channel stable -MacAssetPath dist/macos/OpenStudio-macOS.dmg -MacArm64AiRuntimeAssetPath dist/ai-runtime/OpenStudio-AI-Runtime-macos-arm64.zip` 8. Stage the uniquely named GitHub Release metadata assets: @@ -171,7 +219,12 @@ The default base app no longer bundles the optional stem-separation Python runti ## Secrets expected by GitHub Actions -For the current release path, the only non-signing secret required for public metadata publishing is the cross-repo website dispatch token. If you want Doppler-backed secret loading, add `DOPPLER_TOKEN` as the single bootstrap secret in GitHub Actions. The signing/notarization secrets below stay optional unless you decide to enable trusted distribution later. +For the current release path, `OPENSTUDIO_WEBSITE_DISPATCH_TOKEN` must be set +directly as a GitHub Actions secret because the publish job intentionally does +not receive Doppler credentials. `DOPPLER_TOKEN` is an optional bootstrap for +the allowlisted build/signing values used inside their specific build steps; it +does not replace the website dispatch secret. Signing/notarization secrets stay +optional unless you decide to enable trusted distribution later. - `MACOS_CODESIGN_IDENTITY` - `MACOS_CERTIFICATE_BASE64` diff --git a/docs/release-smoke-checklist.md b/docs/release-smoke-checklist.md index af4e180..3129833 100644 --- a/docs/release-smoke-checklist.md +++ b/docs/release-smoke-checklist.md @@ -6,30 +6,64 @@ Use this checklist for every release candidate before publishing installers, man - Run `./tools/run-windows-rc.ps1 -Version <candidate-version>` before pushing any release tag. - Do not tag a release until the local Windows RC installer path has been validated successfully in both normal startup and `--ui-safe-mode`. +- Treat `--startup-self-test` as dependency/asset preflight only. It does not + replace a visible `boot-ready` result from the packaged frontend. +- A Debug pass is not a Windows Release pass. Run the lifecycle checks against + the installed Release executable. + +## Window Lifecycle Matrix + +Run this matrix from the packaged app while audio is active. Repeat close/reopen, +rapid-close-during-load, sleep/wake, and a second cold launch on each real-machine +release-candidate platform. + +| Window role | Required lifecycle | Success signal | +|---|---|---| +| Main shell | Cold launch, close, relaunch | `boot-ready` and responsive UI | +| Detached Mixer | Detach/open, close, reopen | `boot-ready`; audio continues | +| Detached MIDI editor | Detach, dock/close, reopen; repeat with two different MIDI sessions | `boot-ready`; the correct session returns | +| Built-in effect editor | Open, close during load, reopen | `boot-ready`; controls and audio recover | +| Third-party plug-in editor | Open, close, reopen at least one available native editor | Native editor paints; audio continues without a blank or hung window | ## Windows - Install `OpenStudio-Setup-x64.exe` on a clean machine or VM. +- Repeat the installed Release check on real Windows 10 and Windows 11 standard-user machines; include one machine with Controlled Folder Access or comparable endpoint policy when available. - Confirm the installer provisions or repairs WebView2 Runtime and VC++ Redistributable before offering `Launch OpenStudio`. - Confirm the installer shows which step it is on while copying files, installing VC++, installing WebView2, and validating shell startup. - Confirm the installed app launches without a frontend dev server running. - Confirm the installed app does not show a full black window. -- Confirm `webui`, `effects`, `scripts`, `models`, and `ffmpeg.exe` are present in the installed app directory. +- Confirm `webui`, `effects`, `scripts`, `models`, and the checksum-pinned + `ffmpeg.exe` are present in the installed app directory. +- Confirm `licenses/FFmpeg-COPYING.GPLv3.txt` and + `licenses/FFmpeg-PROVENANCE.json` are present, and confirm the matching + complete corresponding-source distribution is available before publication. +- Confirm the checksum-validated YSFX/WDL, dr_libs, stb, CLAP, Signalsmith, + ARA, and Basic Pitch notices are present under `licenses/`. Also confirm the + notices copied from the pinned NAMCore/Eigen source and, when enabled, the + provenance-verified ONNX Runtime installation are present. - Confirm `prereqs/windows/MicrosoftEdgeWebView2RuntimeInstallerX64.exe` and `prereqs/windows/vc_redist.x64.exe` are present in the installed app directory. - Confirm `%APPDATA%\OpenStudio\logs\OpenStudio_Startup.log` is created on first launch. - Confirm the startup log reports `Embedded browser backend supported: Yes`. - Confirm the startup self-test passes before launch is offered. - Confirm the startup log records `Frontend startup state: boot-ready`. +- Confirm preflight and every WebView2 role use + `%APPDATA%\OpenStudio\WebView2UserData`, outside the protected installation + directory, and confirm the blank-window watchdog remains active. - Confirm a missing `basic_pitch_nmp.onnx` model does not block the base app shell from launching. - Confirm `OpenStudio.exe --ui-safe-mode` renders the safe startup UI visibly. - If startup fails, run `./tools/inspect-installed-windows-app.ps1` on the test machine and archive the generated report. - Open a blank project and confirm audio devices enumerate successfully. +- On a real audio interface, switch input/output device, sample rate, and buffer + size; then monitor, record, play, export, sleep/wake, and relaunch. - Create an audio track, arm it, and confirm monitoring works. - Import an audio file and confirm waveform peaks appear. - Save a new project as `.osproj`. - Open the saved `.osproj` by double-clicking it in Explorer. - Open a legacy `.s13` project and confirm it loads. - Open the mixer, add a built-in OpenStudio effect, and confirm audio still passes. +- Scan, open, close, and reopen at least one available VST3 editor and one CLAP + editor while audio is active. - Confirm the base install does not include a bundled `python/` runtime folder. - Open Stem Separation and confirm it shows the `Install AI Tools` CTA when the optional runtime is missing. - Click the toolbar AI Tools button beside Settings and confirm it opens the same install/help path. @@ -46,14 +80,28 @@ Use this checklist for every release candidate before publishing installers, man ## macOS - Install the `.dmg` output on a clean machine. +- Exercise the packaged app on real Apple Silicon and Intel Macs, including the + oldest supported macOS on at least one machine; hosted runners and a universal + slice check do not replace this gate. - Confirm the app launches offline without a frontend dev server. - Confirm runtime assets are bundled inside the app resources. - Confirm the app bundle startup self-test passes. - Confirm the startup log reports the packaged frontend and shell-critical startup assets as present. -- Confirm the unsigned DMG mounts and the app launches after the documented Gatekeeper override flow (`right-click > Open`, then allow in Privacy & Security if needed). +- Starting with a freshly browser-downloaded DMG, record `xattr -p com.apple.quarantine <dmg>` and the exact Gatekeeper result before changing the artifact. +- Confirm the unsigned DMG mounts and the app launches after Apple's per-app Gatekeeper override flow (attempt launch, then **Privacy & Security > Open Anyway**). Do not remove quarantine before this check. +- Run the native-window lifecycle smoke test against the packaged app and require `boot-ready` from main, Mixer, MIDI, and built-in editor views across close/reopen cycles. +- If signing/notarization credentials are enabled, require `codesign --verify --deep --strict`, `spctl` acceptance, and a successful first launch with quarantine intact. - If startup is forced to fail, confirm the startup doctor/fallback identifies the failure branch and shows the log/safe-mode recovery path. - Open a blank project and confirm audio device setup works. +- With a real CoreAudio interface, switch input/output device, sample rate, and + buffer size; grant microphone access, then monitor, record, play, render, + sleep/wake, and relaunch. +- Scan, open, close, and reopen available VST3, CLAP, and AU editors while audio + is active. - Import audio, edit, and export a short render. +- Confirm WAV/AIFF/FLAC work without FFmpeg. Then install a system `ffmpeg` on + `PATH` and confirm an MP3/OGG conversion succeeds; the app bundle itself must + not contain an unpinned `ffmpeg` binary. - Save a new `.osproj` project and reopen it manually from Finder. - Open a legacy `.s13` project and confirm it loads. - Confirm the base app bundle does not include a bundled `python/` runtime folder. @@ -62,6 +110,21 @@ Use this checklist for every release candidate before publishing installers, man - Trigger `Check for Updates...` and confirm the stable manifest request succeeds. - Validate update behavior from the previous public version to the candidate build. +## Linux + +- Validate both the raw Release output and the extracted AppImage payload with + `tools/validate-runtime-bundle.ps1 -Platform linux -ExpectedVersion <version> + -EnforceLeanBundle`. +- Confirm `OpenStudio.version` exists and exactly matches the candidate version; + a missing, empty, or mismatched manifest is a release failure. +- Run `--startup-self-test` under `xvfb-run`, then launch the AppImage visibly on + an x86-64 desktop and confirm the frontend reaches `boot-ready`. +- Confirm no FFmpeg binary is bundled. Test one FFmpeg-backed operation both + without `ffmpeg` on `PATH` (actionable failure) and with the supported system + package installed (successful operation). +- Test local NAM loading without a keyring. When TONE3000 sign-in is enabled, + also test token persistence with `secret-tool` and an active Secret Service. + ## Updater And Release Metadata - Confirm `releases/latest.json` and `releases/stable/latest.json` match. @@ -90,3 +153,6 @@ Use this checklist for every release candidate before publishing installers, man - Confirm known issues are documented. - Confirm support contact details are published. - Confirm rollback instructions are ready if the update feed needs to be reverted. +- Record signing/notarization state separately from first-launch reputation. + A valid signature alone is not proof of SmartScreen reputation or Gatekeeper + acceptance. diff --git a/docs/roadmap.md b/docs/roadmap.md new file mode 100644 index 0000000..6b91f0f --- /dev/null +++ b/docs/roadmap.md @@ -0,0 +1,57 @@ +# OpenStudio Roadmap + +This public roadmap describes product direction, not fixed delivery dates or a +promise that every exploratory item will ship. Current capabilities and caveats +live in [Implemented features](implemented_features.md); release qualification +lives in [Testing](testing.md) and the +[Release smoke checklist](release-smoke-checklist.md). + +## Now: release quality + +- Complete release qualification for the NAM Rack and optional TONE3000 + workflow, including multi-capture selection, Guitar/Bass profiles, project and + preset recovery, accessibility, and real-interface listening tests. +- Keep Windows, macOS, and Linux installation, startup, updates, and optional AI Tools + setup reliable on clean systems. +- Preserve old projects and presets while strengthening audio-thread safety, + deterministic state migration, and failure recovery. + +## Next: DAW foundations + +- Finish the remaining MIDI playback, routing, note-lifecycle, hardware-output, + and plug-in-generated MIDI workflows across live playback and offline render. +- Bring CLAP instrument/event handling and state restoration to the same + product standard as the reference VST3 path. +- Unify menus and contextual commands around the action registry so shortcuts, + enablement, undo, and visible actions remain consistent. +- Complete and test the render/export options that OpenStudio advertises, + including presets, queue behavior, metadata, failure cleanup, and project + round trips. +- Improve project-wide media, FX, track/group, navigation, and floating-window + management. + +## Exploring + +- An optional local DAW assistant that selects a model appropriate for the + user's hardware, keeps project context local and bounded, previews every + mutating action, and uses OpenStudio's normal undo-aware commands. +- Wider hybrid-precision processing where it produces measurable value without + compromising plug-in compatibility or the default float32 workflow. +- More portable tone/library workflows, including cross-device metadata and + safe shared-asset management. +- Future pitch-rendering or restoration research when a materially stronger, + testable approach becomes available. +- A native extension SDK if demand justifies a stable ABI and long-term + compatibility commitment; Lua and JSFX remain the supported extension paths + today. + +## Product guardrails + +- OpenStudio will not bundle third-party NAM captures or cabinet IRs without + clear redistribution permission. +- Automated measurements will not be presented as proof of subjective tone, + naturalness, or commercial-product parity. +- Experimental controls will not be exposed as working product features before + their complete signal path, persistence, and tests exist. +- Retired NAM Rack controls and misleading decorative routing will not return + without a new product decision and full QA. diff --git a/docs/runtime-dependency-contract.md b/docs/runtime-dependency-contract.md index 0a9d565..72dbc18 100644 --- a/docs/runtime-dependency-contract.md +++ b/docs/runtime-dependency-contract.md @@ -19,6 +19,17 @@ If a hard prerequisite is missing or unusable: - the startup doctor must log the exact failure branch - the user must get an actionable recovery path +### Startup Evidence + +`--startup-self-test` verifies dependency discovery, packaged shell assets, and +whether an embedded-browser environment can be requested. It does **not** prove +that a window rendered the React application. + +`boot-ready` is the stronger UI signal emitted after a browser role has loaded +its frontend. Release qualification requires both checks. The browser startup +watchdog must remain active and must turn a missing `boot-ready` signal into a +diagnosable failure instead of leaving a blank window. + ## Bundled Feature Assets These are bundled with OpenStudio and should be present in the installed/runtime bundle, but they must not block the base shell from launching. @@ -27,7 +38,14 @@ These are bundled with OpenStudio and should be present in the installed/runtime - `effects/` - `scripts/` - `models/basic_pitch_nmp.onnx` -- `ffmpeg` / `ffmpeg.exe` +- `models/basic_pitch_nmp.provenance.json` +- `OpenStudio.version`, generated from the same CMake version compiled into the + application and validated without launching a GUI process +- `LICENSE`, `THIRD_PARTY_LICENSES.md`, and the packaged dependency notices + under `licenses/`; notices with repository-pinned digests are checksum + validated before packaging +- Windows: the checksum-pinned `ffmpeg.exe` plus its exact GPL and provenance + files If a bundled feature asset is missing: @@ -41,7 +59,14 @@ These must never block base app launch. - Python for AI tools - AI models and downloadable AI helper runtimes -- ONNX Runtime +- ONNX Runtime in custom builds and on platforms where it is not provisioned; + official Windows/Linux releases provision the pinned runtime +- Linux `secret-tool` (normally provided by `libsecret-tools`) and an available + Secret Service/keyring for optional TONE3000 sign-in; local NAM loading does + not depend on it +- macOS/Linux: a system `ffmpeg` on `PATH` for MP3/OGG export, video-audio + extraction, FFmpeg-backed time stretch/pitch shift, and conversions that need + FFmpeg. OpenStudio does not redistribute an unpinned Unix FFmpeg binary. - ASIO - plugin-vendor-specific external runtimes @@ -57,6 +82,12 @@ If an optional dependency is missing: - The installer owns hard launch prerequisites. - The packaged app stages offline Windows prerequisite installers in `prereqs/windows`. +- Browser capability checks and browser construction must use the same shared + options factory. Every WebView2 role uses the writable per-user data folder + `%APPDATA%\OpenStudio\WebView2UserData`; no installed path may fall back to a + user-data folder beside the executable under `Program Files`. +- A Debug browser pass is not evidence that the MSVC Release build works. The + packaged Release executable must complete the frontend-ready lifecycle gate. - The startup doctor must distinguish: - WebView2 not installed - WebView2 installed but unusable @@ -66,12 +97,54 @@ If an optional dependency is missing: ### macOS - The app relies on system WebKit; no separate browser runtime installer is bundled. +- The Basic Pitch model is bundled for provenance consistency, but the current + macOS release pipeline does not provision ONNX Runtime, so Basic Pitch + inference is unavailable in that build. +- FFmpeg-backed features require a system FFmpeg on `PATH`; FFmpeg is not + bundled in the macOS app. - The startup doctor must distinguish: - backend unavailable on the current system - shipped runtime asset missing - packaged frontend missing - Safe mode and the startup log must remain available for recovery. +### Linux + +- Release validation must read `OpenStudio.version` and fail on a missing, + empty, or mismatched manifest; it must not launch the GUI binary for a + best-effort version check. +- FFmpeg-backed features use the system `ffmpeg` installed by the distribution; + OpenStudio does not copy a developer-local FFmpeg into the AppImage. +- Missing FFmpeg must disable only the affected conversion operation and must + produce an actionable diagnostic rather than blocking startup. + +## Embedded and Native Window Roles + +The embedded-browser lifecycle contract covers the main shell, detached Mixer, +each detached MIDI editor, and each built-in effect editor. Each role must reach +`boot-ready`, survive close/reopen cycles, and release closed secondary views. +Third-party plug-in editors use their native JUCE editor path and are qualified +separately for open/close/reopen behavior while audio is running. The graphical +Pitch Editor remains part of the main window rather than a detached browser +role. + +## JUCE Dependency Policy + +OpenStudio is pinned to JUCE `9.0.1`. A JUCE upgrade must be an isolated, +reviewable dependency change with Debug and Release builds plus audio-device, +plug-in-host, browser lifecycle, and packaging qualification. OpenStudio's +realtime JUCE patches must fail closed when their expected upstream source +context changes; an upgrade must never silently skip or partially apply them. + +## Distribution Trust Boundary + +Signing, launch reputation, and runtime health are separate gates. A valid +signature is not automatically reputation-clean on Windows, and a self-signed +binary is not a substitute for established Authenticode reputation. On macOS, +signature verification does not replace notarization/Gatekeeper assessment. +Unsigned releases may use the documented user-approved first-launch path, but +must not describe that path as warning-free. + ## AI Tools Contract - Clicking the toolbar AI button may start optional setup work. diff --git a/docs/stable_audio_3_integration_plan.md b/docs/stable_audio_3_integration_plan.md deleted file mode 100644 index 164cd30..0000000 --- a/docs/stable_audio_3_integration_plan.md +++ /dev/null @@ -1,148 +0,0 @@ -# Stable Audio 3 + ACE-Step Source-Audio Workflow Checklist - -## Summary - -- [x] Keep the current ACE model/version exactly as-is: `ACE-Step 1.5 XL Turbo`. -- [x] Add `Stable Audio 3 Medium` as a separate selectable model with its own runtime, setup, and params. -- [x] Add supported source-audio workflows for both models from the clip context menu. -- [x] Do not implement ACE Extract, Lego, or Complete: no UI entries, workflow IDs, backend branches, or disabled placeholders. - -## AI Track Flow - -- [x] Keep AI tracks prompt-first. -- [x] Add a compact model dropdown in the AI track header: - - `ACE-Step 1.5 XL Turbo` - - `Stable Audio 3 Medium` -- [x] Add the same model dropdown at the top of the AI track params modal. -- [x] Make model changes update the workflow dropdown and visible params form. -- [x] Limit AI track workflows to: - - ACE-Step: `Text to Music`, `Lyrics + Style` - - Stable Audio 3: `Text to Audio` -- [x] If the selected model is unavailable, turn Generate into a setup CTA focused on that model. - -## Clip Context Menu Flow - -- [x] Add an `AI Generation` submenu to the existing audio clip right-click menu, near `Separate Stems...`. -- [x] Show the submenu only for audio clips. -- [x] Add menu items: - - `Create Variation...` - - `Inpaint Selection...` - - `Continue Clip...` -- [x] Disable `Inpaint Selection...` unless the current time selection overlaps the clicked clip. -- [x] Open a new `AI Clip Generation` modal from each menu item. -- [x] Include source clip name, source track name, and duration/range summary in the modal. -- [x] Limit modal model choices to models that support the selected source workflow. -- [x] Include workflow-specific params, setup/status block, and Generate/Cancel footer. -- [x] Do not show ACE Extract/Lego/Complete anywhere. - -## Output Placement - -- [x] Make source-audio workflows nondestructive by default. -- [x] `Create Variation...`: create a new audio track directly below the source track named `AI Variation - <clip name>`, aligned to the source clip start. -- [x] `Inpaint Selection...`: create a new audio track directly below the source track named `AI Inpaint - <clip name>`, aligned to the source clip start. -- [x] `Continue Clip...`: insert only the generated tail at `sourceClip.startTime + sourceClip.duration`. -- [x] Place continuation on the source track when clear; otherwise create `AI Continuation - <clip name>` below the source track. -- [x] Make all generated track/clip additions undo-tracked. - -## Workflow + Params Registry - -- [x] Replace the single ACE-only workflow registry with a model-aware registry. -- [x] Add model IDs: - - `ace-step-v15-xl-turbo` - - `stable-audio-3-medium` -- [x] Add workflow IDs: - - `text-to-music` - - `lyrics-style` - - `text-to-audio` - - `variation` - - `inpaint-selection` - - `continue-clip` -- [x] Declare supported model IDs, surface, params schema, and source requirements per workflow. -- [x] Add ACE source params: prompt, lyrics, seed, duration/extension duration, inference steps, guidance/cfg, `audio_cover_strength`, repaint start/end. -- [x] Add Stable Audio params: prompt, negative prompt, seed, duration/extension duration, steps, cfg scale, source strength/noise amount, inpaint range. -- [x] Add Stable Audio Advanced LoRA inference fields for optional `.safetensors` path and strength. - -## Frontend State + UI - -- [x] Add `aiMusicModelId` to AI tracks and default existing projects to ACE-Step. -- [x] Add modal state for clip generation source, workflow, model, params, and validation/status. -- [x] Build `AIClipGenerationModal` as a sibling to `StemSeparationModal`. -- [x] Reuse current dark theme tokens, compact controls, existing modal/footer layout, and existing UI components. -- [x] Convert time selection to clip-relative inpaint range: - - `rangeStart = max(timeSelection.start, clip.startTime) - clip.startTime` - - `rangeEnd = min(timeSelection.end, clipEnd) - clip.startTime` - - disable when `rangeEnd <= rangeStart` - -## Backend + Bridge - -- [x] Extend generation start API to `startAIGeneration(trackId, modelId, workflowId, paramsJSON)`. -- [x] Preserve old three-argument behavior by treating it as ACE-Step. -- [x] Enforce one global generation job at a time for v1. -- [x] Refactor `AITrackEngine` into provider routing. -- [x] Keep ACE provider on the existing persistent ACE worker. -- [x] Add a separate Stable Audio provider/runtime. -- [x] Include source file path, clip offset, clip duration, source track/clip IDs, inpaint range, or extension length in source params. -- [x] Prepare exact source-segment temp WAV before inference so trimmed clips behave correctly. -- [x] Map ACE Variation to Cover with `src_audio` and `audio_cover_strength`. -- [x] Map ACE Inpaint to Repaint with `src_audio`, `repainting_start`, and `repainting_end`. -- [x] Map ACE Continue to Repaint at the source clip end and crop the output to the generated tail before import. -- [x] Map Stable Audio Variation, Inpaint, and Continue to its source-conditioned workflows. -- [x] Add optional `modelId`, `workflowId`, and `sourceClipId` to progress payloads. - -## Setup Flow - -- [x] Add a music model section under AI Tools Setup > Audio Generation. -- [x] Keep ACE setup unchanged. -- [x] Add Stable Audio 3 Medium setup as strict opt-in. -- [x] Show Stability/Gemma license notice and require explicit checkbox confirmation. -- [x] Show `Powered by Stability AI` attribution when Stable Audio is selected or used. -- [x] Use manual Hugging Face download/import, not stored HF credentials. -- [x] Add `Open Hugging Face Model Page`. -- [x] Show required folder layout help text. -- [x] Add `Proceed with Setup` folder picker and validation. -- [x] Validate Stable Audio folder files: - - `model.safetensors` - - `model_config.json` - - `LICENSE.md` - - `LICENSE_GEMMA.md` - - `NOTICE` - - `t5gemma-b-b-ul2/model.safetensors` - - `t5gemma-b-b-ul2/config.json` - - `t5gemma-b-b-ul2/tokenizer.json` - - `t5gemma-b-b-ul2/tokenizer.model` - - `t5gemma-b-b-ul2/tokenizer_config.json` - - `t5gemma-b-b-ul2/special_tokens_map.json` -- [x] Validate the initial local target `C:\Users\srvds\Downloads\stable_audio_3`. -- [x] Copy/import the snapshot into a managed OpenStudio model folder. -- [x] Keep Stable Audio runtime separate from ACE. - -## Test + Visual Harness - -- [x] Add unit tests for model-aware workflow filtering, default params, normalization, inpaint range conversion, disabled inpaint, and no unsupported workflow IDs. -- [x] Add store tests for model changes, undoable generated source outputs, and continuation placement. -- [x] Add installer/probe tests for Stable Audio folder validation and license confirmation. -- [x] Add `tools/ai-generation-ui-harness.mjs`. -- [x] Harness scenario: `ai-track-model-selector`. -- [x] Harness scenario: `clip-context-ai-menu`. -- [x] Harness scenario: `ai-clip-generation-modal`. -- [x] Harness scenario: `stable-audio-setup`. -- [x] Harness checks desktop and compact screenshots. -- [x] Harness checks text overflow, viewport bounds, menu placement, and theme alignment. -- [x] Harness writes `qa/ai-generation/<date>/screenshots` and `qa/ai-generation/<date>/report.json`. - -## Verification - -- [x] Run `npx tsc --noEmit`. -- [x] Run the frontend visual harness. -- [x] Build frontend assets into `frontend/dist`. -- [x] Run `cmake --build build --config Debug`. -- [x] Stop Codex-started dev servers and leave port `5173` free. -- [ ] Manual check: ACE text generation from AI track. -- [ ] Manual check: ACE lyrics generation from AI track. -- [ ] Manual check: ACE clip variation. -- [ ] Manual check: ACE inpaint with overlapping time selection. -- [ ] Manual check: ACE continuation. -- [ ] Manual check: Stable Audio setup using `C:\Users\srvds\Downloads\stable_audio_3`. -- [ ] Manual check: Stable Audio text generation from AI track. -- [ ] Manual check: Stable Audio variation, inpaint, and continuation. -- [ ] Verify generated WAVs import, appear at expected positions, play back, and can be undone. diff --git a/docs/testing.md b/docs/testing.md new file mode 100644 index 0000000..b169d2f --- /dev/null +++ b/docs/testing.md @@ -0,0 +1,243 @@ +# NAM and Audio QA + +OpenStudio separates deterministic engineering evidence from listening +judgment. Every result must be reported as: + +- `pass` — a deterministic requirement succeeded. +- `fail` — a deterministic requirement failed. +- `diagnostic_only` — useful measurement that is not a release guarantee. +- `not_asserted` — requires a person to audition or inspect the exact build. + +## Fast release checks + +From `frontend/`: + +```bash +npm test +npx tsc --noEmit +npm run build +npm run test:e2e +``` + +From the repository root: + +```powershell +cmake --build build --config Debug +powershell -ExecutionPolicy Bypass -File tools/run-clean-guitar-headless-regression.ps1 -SkipBuild +powershell -ExecutionPolicy Bypass -File tools/run-nam-rack-di-headless-regression.ps1 -SkipBuild +powershell -ExecutionPolicy Bypass -File tools/run-nam-rack-headless-regression.ps1 -SkipBuild +``` + +The full NAM Rack matrix defaults to a 360-second timeout. It currently takes +about three minutes in a Debug build; use `-TimeoutSeconds` only when a slower +CI runner needs additional margin, not to conceal a hung regression. + +Before a release: + +```powershell +cmake --build build --config Release +python build.py prod +``` + +The three PowerShell regressions are intentionally headless. They must not open +an OpenStudio window. `tools/nam-rack-visual-harness.mjs` is retained for +targeted browser/layout capture; generated screenshots and reports are ignored. + +## Frontend visual and interaction QA + +Every resizable frontend surface must be checked at its supported compact, +normal, and large widths; at compact and normal heights; and at representative +HiDPI/Windows display scaling. The release gate is behavioral and geometric: + +- no horizontal page overflow, accidental host gutter, clipped control, or + overlapping visual/hit target; +- labels wrap or truncate deliberately, focus remains visible, and accessible + names and pointer/keyboard targets remain intact; +- browser geometry and screenshot checks cover the rendered result, while + interaction tests cover scrolling, focus, keyboard use, and control travel; +- `npx tsc --noEmit`, the frontend tests, the Vite production build, and the + packaged Debug WebView assets all use the same current source. + +Exact CSS text is not a visual oracle. Tests may enforce global architecture +rules such as the absence of runtime styles and `!important`, but layout +acceptance must inspect the real rendered surface. + +## Audio signal-chain triage + +Pitch, playback, and render artifacts must be localized before DSP tuning. + +- Live: route resolution -> `PlaybackEngine` read/mix -> `TrackProcessor` -> + sends/sidechain -> master/monitor FX -> gain/pan/mono -> meters -> device. +- Render: render `PlaybackEngine` snapshot -> `TrackProcessor` -> master FX and + gain -> writer. + +Set `OPENSTUDIO_AUDIO_CHAIN_DEBUG=1` to write a debug packet beside a render, +or set `OPENSTUDIO_AUDIO_CHAIN_DEBUG_DIR` to choose the directory. The packet +contains `render_chain_report.json`, `playback_output.wav`, +`track_post_processing.wav`, `master_pre_fx.wav`, `master_post_fx.wav`, and +`writer_input.wav`. `OPENSTUDIO_AUDIO_CHAIN_DEBUG_MAX_SEC` bounds capture time +and defaults to 12 seconds. + +Find the first dirty stage: source/routing/read conversion when playback is +already dirty; processor state, bypass, default EQ/gain, and denormals when the +track/master stage first changes; alignment, format conversion, dither, block, +and tail handling when only writer input/output is dirty; callback deadlines, +resizes, lock misses, IPC/timer pressure, and preview cleanup when only live +playback is dirty. A clean render rules out WebView IPC and live-device +underruns as the render artifact's cause. Do not close a noise issue until the +first dirty stage is identified, deterministic checks pass, and the exact +artifact is auditioned. + +## Reference-comparison capture protocol + +Use the same 10-15 second dry DI for both systems, including sustained chords, +single notes, palm-muted transients, decay, and silence. Record the exact preset +and controls, sample rate, buffer, input peak, output loudness, and mono/stereo +route. Capture wet-only output where possible and loudness-match with LUFS/RMS +before judging tone. Test a real `L = guitar, R = silence` route separately +from duplicated stereo input so lane faults cannot hide. + +Reference files are QA oracles only and production must never read or depend on +them. Change one audible issue per iteration. Spectral and level measurements +remain `diagnostic_only`; perceived similarity and transition quality remain +`not_asserted` until a person approves the exact artifacts. + +## What automation may prove + +- A1/A2 fixture loading and invalid-model rejection. +- Finite, bounded processing and expected relative pitch requests. +- Prepared model/IR swaps and stale-request rejection. +- Sample-rate conversion and callback-partition invariance. +- Fixed reported latency and dry-path alignment. +- Project, preset, A/B, order, calibration, and automation identity round trips. +- Preview Use/Cancel rollback. +- Multi-capture pack collapse/hydration, exact child identity (including + URL-only/model-ID-zero cases), selection without publication, preview + supersession, Use, replace, bypass, and unload state transitions. +- Missing-asset recovery and durable download identity. +- TONE3000 session-state transitions with deterministic mocks. +- Output-file creation and explicit render-route state. + +CPU percentages, spectra, formant estimates, and fixture-specific deadline +measurements are `diagnostic_only`. + +## Guitar/Bass instrument-profile release matrix + +The automated gate must cover all of the following before merging: + +1. Missing, legacy, out-of-range, NaN, and infinite profile state canonicalizes + to Guitar; a valid Bass value survives project, user-preset, import/export, + and Compare A/B round trips. The instrument selector is intentionally not a + user-automatable parameter; separate DSP stress tests exercise live profile + switches across callback boundaries. +2. Switching Guitar -> Bass -> Guitar does not change any stored visible value, + model/capture path, cabinet IR path, calibration value, or explicit cutoff. +3. EQ Boost centres/labels, Octaver tracking, both nonlinear pedals, Amp wrapper + and tone stack, Graphic EQ low band, modulation direct path, Delay repeat + filtering, and non-legacy Reverb low decay exercise their intended profile + mapping with finite bounded output. +4. The live switch is deterministic across fixed and uneven callback partitions, + remains bounded at the exact transition samples, and latches one coherent + profile for a complete audio callback during concurrent UI publication. + Octaver coverage spans 44.1, 48, and 96 kHz. +5. Catalog and installed-library views filter only explicitly incompatible + metadata, keep untagged/shared captures, and pin an already-active opposite- + tagged capture without unloading or replacing it. +6. Changing away from an instrument-specific factory template clears only the + stale template identity/baseline. Shared templates and user presets retain + their normal dirty-state behavior. + +The final musician audition uses clean Guitar and five-string Bass DI fixtures. +For each instrument, enable one stage at a time, then the complete chain; toggle +the profile during sustained notes, palm mutes, silence, modulation, Delay and +Reverb tails; load/change/remove, bypass/re-enable, and replace captures and IRs; +save and recall multiple presets; restart the app; and repeat at small and normal +device buffers. Record +the rack output while switching and inspect/listen for clicks, dropouts, stale +audio, DC steps, unexpected repeat/tail resurrection, and noise-floor changes. +Those listening outcomes remain `not_asserted` until a person approves the exact +release artifact. + +## What automation may not prove + +The following remain `not_asserted` until the user auditions the exact artifact: + +- naturalness, realism, commercial-product sonic parity, or "better tone"; +- pick response, palm-muted tightness, chord separation, sustain, or noise feel; +- click-free perception during power/model/cabinet changes; +- tuner feel on a real decaying guitar; +- chorus width, mono compatibility, delay feel, reverb density, or shimmer + musicality; +- absence of real-device crackle across interfaces and drivers. + +## TONE3000 first-user acceptance + +Run this with a clean OS user or after removing only OpenStudio's saved +TONE3000 session: + +1. Install the release candidate and open the NAM Rack. +2. Select Connect TONE3000. +3. Confirm the default browser opens the official TONE3000 page. +4. Create a new account or sign in as a first-time OpenStudio user. +5. Confirm the browser success page returns control to the app without copying + a token or entering developer settings. +6. Search separately for A1 and A2; confirm combined results are bounded, + paginated, attributed, and responsive to rate limits. +7. Open a tone pack that declares multiple captures. Confirm the pack appears + once, its count is correct, and **View Captures** exposes every hydrated + child with its architecture and RAW/CAB-embedded topology. +8. Select child A and confirm selection alone leaves the current audible model + unchanged. Audition A, switch directly to audition child B, then Stop and + confirm the complete pre-preview baseline returns. +9. Audition child A again and choose **Use**. Confirm the nameplate, exact child + identity, source attribution, amp/cab topology, and saved metadata all refer + to A rather than the pack sentinel or first child by accident. +10. Reopen the picker and Use child B to replace A. If B embeds a cabinet, + confirm the external Cab is bypassed without deleting its prior IR; return + to an amp-only child and confirm the normal Cab workflow resumes. +11. Bypass and re-enable the Amp slot without losing B, then Unload and confirm + the slot is empty. Reload B, save the project/tone, restart OpenStudio, and + confirm the exact child and enabled state restore. +12. Start another preview and Cancel it; confirm the restored state includes + capture, Cab, power, and mix values. Repeat while a prior request is still + preparing and confirm a stale completion cannot overwrite the newer choice. +13. Install one permitted cabinet IR and confirm it becomes audible only where + the selected capture needs an external cabinet. +14. Force or wait for token refresh and repeat a search/download. +15. Delete one downloaded child asset, reopen the project, and verify Locate, + Replace, Bypass, and supported Re-download recovery without disabling the + rest of the rack. + +The deterministic frontend/unit suite separately covers pack-sentinel/model-ID-zero +and URL-only child identities when the live catalog does not expose such a +record during the acceptance run. + +Record the app version, OS, account state, model/IR IDs, result for each step, +and screenshots of any failure. Do not include tokens or the publishable key in +the report. + +## Manual audio matrix + +Use clean Guitar and five-string Bass DIs, the user's normal interface, and at +least one A1 and one A2 capture: + +- 44.1, 48, and 96 kHz where the device supports them; +- 32, 64, 128, 256, and 512-sample buffers where stable; +- mono and stereo track paths; +- amp-only capture plus IR and full-rig capture with external Cab bypassed; +- each native pedal alone and representative combinations; +- selection-only, audition/stop, audition-to-audition, Use, model replacement, + cabinet, preset, A/B, bypass/re-enable, unload, and missing-asset transitions; +- live playback and offline render of the same phrase. + +Report objective invariants separately from the user's listening verdict. + +## Optional AI-generation acceptance + +When ACE-Step or Stable Audio generation changes, manually exercise ACE prompt +and lyrics generation plus variation, inpaint, and continuation; then exercise +Stable Audio setup/license acknowledgement, prompt generation, variation, +inpaint, and continuation with a valid local snapshot. Generated WAVs must +import at the intended positions, play, persist through save/reopen, and undo +as one user action. A missing optional model/runtime must not block base-app +startup. diff --git a/effects/README.txt b/effects/README.txt index ded7766..d3cd6a9 100644 --- a/effects/README.txt +++ b/effects/README.txt @@ -1,11 +1,11 @@ -Studio13 Custom JSFX Effects +OpenStudio Custom JSFX Effects ============================ Place your custom .jsfx scripts in this directory. -They will be bundled with Studio13 and appear in the Plugin Browser under "S13FX". +They will be bundled with OpenStudio and appear in the Plugin Browser under "S13FX". For user-created scripts that persist across updates, use: - Documents/Studio13/Effects/ + Documents/OpenStudio/Effects/ You can open the user effects folder from the Plugin Browser by clicking the folder icon next to the Scan button. diff --git a/frontend/.nvmrc b/frontend/.nvmrc new file mode 100644 index 0000000..c947119 --- /dev/null +++ b/frontend/.nvmrc @@ -0,0 +1 @@ +22.23.2 diff --git a/frontend/THIRD_PARTY_NOTICES.txt b/frontend/THIRD_PARTY_NOTICES.txt new file mode 100644 index 0000000..11e3a6d --- /dev/null +++ b/frontend/THIRD_PARTY_NOTICES.txt @@ -0,0 +1,2613 @@ +OpenStudio Frontend Third-Party Notices + +This file is generated from frontend/package-lock.json and the exact license, +copying, and notice files installed in frontend/node_modules. Do not edit it +manually; run `npm run notices:generate` after changing production dependencies. + +Production package instances: 38 + +================================================================================ +@dnd-kit/accessibility@3.1.1 +Installed path: node_modules/@dnd-kit/accessibility +Declared license: MIT +Source: git+https://github.com/clauderic/dnd-kit.git (directory: packages/accessibility) + +--- BEGIN LICENSE (verbatim; line endings normalized to LF) --- +MIT License + +Copyright (c) 2021, Claudéric Demers + +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. + +--- END LICENSE --- + +================================================================================ +@dnd-kit/core@6.3.1 +Installed path: node_modules/@dnd-kit/core +Declared license: MIT +Source: git+https://github.com/clauderic/dnd-kit.git (directory: packages/core) + +--- BEGIN LICENSE (verbatim; line endings normalized to LF) --- +MIT License + +Copyright (c) 2021, Claudéric Demers + +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. + +--- END LICENSE --- + +================================================================================ +@dnd-kit/sortable@10.0.0 +Installed path: node_modules/@dnd-kit/sortable +Declared license: MIT +Source: git+https://github.com/clauderic/dnd-kit.git (directory: packages/sortable) + +--- BEGIN LICENSE (verbatim; line endings normalized to LF) --- +MIT License + +Copyright (c) 2021, Claudéric Demers + +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. + +--- END LICENSE --- + +================================================================================ +@dnd-kit/utilities@3.2.2 +Installed path: node_modules/@dnd-kit/utilities +Declared license: MIT +Source: git+https://github.com/clauderic/dnd-kit.git (directory: packages/utilities) + +--- BEGIN LICENSE (verbatim; line endings normalized to LF) --- +MIT License + +Copyright (c) 2021, Claudéric Demers + +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. + +--- END LICENSE --- + +================================================================================ +@floating-ui/core@1.7.5 +Installed path: node_modules/@floating-ui/core +Declared license: MIT +Source: https://github.com/floating-ui/floating-ui.git (directory: packages/core) + +--- BEGIN LICENSE (verbatim; line endings normalized to LF) --- +MIT License + +Copyright (c) 2021-present Floating UI contributors + +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. + +--- END LICENSE --- + +================================================================================ +@floating-ui/dom@1.7.6 +Installed path: node_modules/@floating-ui/dom +Declared license: MIT +Source: https://github.com/floating-ui/floating-ui.git (directory: packages/dom) + +--- BEGIN LICENSE (verbatim; line endings normalized to LF) --- +MIT License + +Copyright (c) 2021-present Floating UI contributors + +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. + +--- END LICENSE --- + +================================================================================ +@floating-ui/react@0.26.28 +Installed path: node_modules/@floating-ui/react +Declared license: MIT +Source: https://github.com/floating-ui/floating-ui.git (directory: packages/react) + +--- BEGIN LICENSE (verbatim; line endings normalized to LF) --- +MIT License + +Copyright (c) 2021-present Floating UI contributors + +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. + +--- END LICENSE --- + +================================================================================ +@floating-ui/react-dom@2.1.8 +Installed path: node_modules/@floating-ui/react-dom +Declared license: MIT +Source: https://github.com/floating-ui/floating-ui.git (directory: packages/react-dom) + +--- BEGIN LICENSE (verbatim; line endings normalized to LF) --- +MIT License + +Copyright (c) 2021-present Floating UI contributors + +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. + +--- END LICENSE --- + +================================================================================ +@floating-ui/utils@0.2.11 +Installed path: node_modules/@floating-ui/utils +Declared license: MIT +Source: https://github.com/floating-ui/floating-ui.git (directory: packages/utils) + +--- BEGIN LICENSE (verbatim; line endings normalized to LF) --- +MIT License + +Copyright (c) 2021-present Floating UI contributors + +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. + +--- END LICENSE --- + +================================================================================ +@headlessui/react@2.2.9 +Installed path: node_modules/@headlessui/react +Declared license: MIT +Source: git+https://github.com/tailwindlabs/headlessui.git (directory: packages/@headlessui-react) + +--- BEGIN LICENSE (verbatim; line endings normalized to LF) --- +MIT License + +Copyright (c) 2020 Tailwind Labs + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +--- END LICENSE --- + +================================================================================ +@react-aria/focus@3.21.5 +Installed path: node_modules/@react-aria/focus +Declared license: Apache-2.0 +Source: https://github.com/adobe/react-spectrum + +--- BEGIN LICENSE (verbatim; line endings normalized to LF) --- + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 Adobe + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +--- END LICENSE --- + +================================================================================ +@react-aria/interactions@3.27.1 +Installed path: node_modules/@react-aria/interactions +Declared license: Apache-2.0 +Source: https://github.com/adobe/react-spectrum + +--- BEGIN LICENSE (verbatim; line endings normalized to LF) --- + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 Adobe + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +--- END LICENSE --- + +================================================================================ +@react-aria/ssr@3.9.10 +Installed path: node_modules/@react-aria/ssr +Declared license: Apache-2.0 +Source: https://github.com/adobe/react-spectrum + +--- BEGIN LICENSE (verbatim; line endings normalized to LF) --- + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 Adobe + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +--- END LICENSE --- + +================================================================================ +@react-aria/utils@3.33.1 +Installed path: node_modules/@react-aria/utils +Declared license: Apache-2.0 +Source: https://github.com/adobe/react-spectrum + +--- BEGIN LICENSE (verbatim; line endings normalized to LF) --- + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 Adobe + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +--- END LICENSE --- + +================================================================================ +@react-stately/flags@3.1.2 +Installed path: node_modules/@react-stately/flags +Declared license: Apache-2.0 +Source: https://github.com/adobe/react-spectrum + +--- BEGIN LICENSE (verbatim; line endings normalized to LF) --- + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 Adobe + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +--- END LICENSE --- + +================================================================================ +@react-stately/utils@3.11.0 +Installed path: node_modules/@react-stately/utils +Declared license: Apache-2.0 +Source: https://github.com/adobe/react-spectrum + +--- BEGIN LICENSE (verbatim; line endings normalized to LF) --- + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 Adobe + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +--- END LICENSE --- + +================================================================================ +@react-types/shared@3.33.1 +Installed path: node_modules/@react-types/shared +Declared license: Apache-2.0 +Source: https://github.com/adobe/react-spectrum + +--- BEGIN LICENSE (verbatim; line endings normalized to LF) --- + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2019 Adobe + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + +--- END LICENSE --- + +================================================================================ +@swc/helpers@0.5.21 +Installed path: node_modules/@swc/helpers +Declared license: Apache-2.0 +Source: git+https://github.com/swc-project/swc.git (directory: packages/helpers) + +--- BEGIN LICENSE (verbatim; line endings normalized to LF) --- + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + +Copyright 2024 SWC contributors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +--- END LICENSE --- + +================================================================================ +@tanstack/react-virtual@3.13.23 +Installed path: node_modules/@tanstack/react-virtual +Declared license: MIT +Source: git+https://github.com/TanStack/virtual.git (directory: packages/react-virtual) + +--- BEGIN LICENSE (verbatim; line endings normalized to LF) --- +MIT License + +Copyright (c) 2021-present Tanner Linsley + +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. + +--- END LICENSE --- + +================================================================================ +@tanstack/virtual-core@3.13.23 +Installed path: node_modules/@tanstack/virtual-core +Declared license: MIT +Source: git+https://github.com/TanStack/virtual.git (directory: packages/virtual-core) + +--- BEGIN LICENSE (verbatim; line endings normalized to LF) --- +MIT License + +Copyright (c) 2021-present Tanner Linsley + +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. + +--- END LICENSE --- + +================================================================================ +@types/react@19.2.14 +Installed path: node_modules/@types/react +Declared license: MIT +Source: https://github.com/DefinitelyTyped/DefinitelyTyped.git (directory: types/react) + +--- BEGIN LICENSE (verbatim; line endings normalized to LF) --- + MIT License + + Copyright (c) Microsoft Corporation. + + 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 + +--- END LICENSE --- + +================================================================================ +@types/react-reconciler@0.28.9 +Installed path: node_modules/its-fine/node_modules/@types/react-reconciler +Declared license: MIT +Source: https://github.com/DefinitelyTyped/DefinitelyTyped.git (directory: types/react-reconciler) + +--- BEGIN LICENSE (verbatim; line endings normalized to LF) --- + MIT License + + Copyright (c) Microsoft Corporation. + + 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 + +--- END LICENSE --- + +================================================================================ +@types/react-reconciler@0.33.0 +Installed path: node_modules/@types/react-reconciler +Declared license: MIT +Source: https://github.com/DefinitelyTyped/DefinitelyTyped.git (directory: types/react-reconciler) + +--- BEGIN LICENSE (verbatim; line endings normalized to LF) --- + MIT License + + Copyright (c) Microsoft Corporation. + + 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 + +--- END LICENSE --- + +================================================================================ +classnames@2.5.1 +Installed path: node_modules/classnames +Declared license: MIT +Source: git+https://github.com/JedWatson/classnames.git + +--- BEGIN LICENSE (verbatim; line endings normalized to LF) --- +The MIT License (MIT) + +Copyright (c) 2018 Jed Watson + +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. + +--- END LICENSE --- + +================================================================================ +clsx@2.1.1 +Installed path: node_modules/clsx +Declared license: MIT +Source: lukeed/clsx + +--- BEGIN license (verbatim; line endings normalized to LF) --- +MIT License + +Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com) + +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. + +--- END license --- + +================================================================================ +csstype@3.2.3 +Installed path: node_modules/csstype +Declared license: MIT +Source: https://github.com/frenic/csstype + +--- BEGIN LICENSE (verbatim; line endings normalized to LF) --- +Copyright (c) 2017-2018 Fredrik Nicol + +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. + +--- END LICENSE --- + +================================================================================ +its-fine@2.0.0 +Installed path: node_modules/its-fine +Declared license: MIT +Source: https://github.com/pmndrs/its-fine + +--- BEGIN LICENSE (verbatim; line endings normalized to LF) --- +MIT License + +Copyright (c) 2022-2025 Poimandres + +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. + +--- END LICENSE --- + +================================================================================ +konva@9.3.22 +Installed path: node_modules/konva +Declared license: MIT +Source: git://github.com/konvajs/konva.git + +--- BEGIN LICENSE (verbatim; line endings normalized to LF) --- +MIT License + +Original work Copyright (C) 2011 - 2013 by Eric Rowell (KineticJS) +Modified work Copyright (C) 2014 - present by Anton Lavrenov (Konva) + +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. +--- END LICENSE --- + +================================================================================ +lucide-react@0.562.0 +Installed path: node_modules/lucide-react +Declared license: ISC +Source: https://github.com/lucide-icons/lucide.git (directory: packages/lucide-react) + +--- BEGIN LICENSE (verbatim; line endings normalized to LF) --- +ISC License + +Copyright (c) for portions of Lucide are held by Cole Bemis 2013-2023 as part of Feather (MIT). All other copyright (c) for Lucide are held by Lucide Contributors 2025. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +--- + +The MIT License (MIT) (for portions derived from Feather) + +Copyright (c) 2013-2023 Cole Bemis + +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. + +--- END LICENSE --- + +================================================================================ +react@19.2.4 +Installed path: node_modules/react +Declared license: MIT +Source: https://github.com/facebook/react.git (directory: packages/react) + +--- BEGIN LICENSE (verbatim; line endings normalized to LF) --- +MIT License + +Copyright (c) Meta Platforms, Inc. and affiliates. + +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. + +--- END LICENSE --- + +================================================================================ +react-dom@19.2.4 +Installed path: node_modules/react-dom +Declared license: MIT +Source: https://github.com/facebook/react.git (directory: packages/react-dom) + +--- BEGIN LICENSE (verbatim; line endings normalized to LF) --- +MIT License + +Copyright (c) Meta Platforms, Inc. and affiliates. + +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. + +--- END LICENSE --- + +================================================================================ +react-konva@19.2.3 +Installed path: node_modules/react-konva +Declared license: MIT +Source: git@github.com:konvajs/react-konva.git + +--- BEGIN LICENSE (verbatim; line endings normalized to LF) --- +MIT License + +Copyright (c) 2017 Anton Lavrenov + +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. + +--- END LICENSE --- + +================================================================================ +react-reconciler@0.33.0 +Installed path: node_modules/react-reconciler +Declared license: MIT +Source: https://github.com/facebook/react.git (directory: packages/react-reconciler) + +--- BEGIN LICENSE (verbatim; line endings normalized to LF) --- +MIT License + +Copyright (c) Meta Platforms, Inc. and affiliates. + +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. + +--- END LICENSE --- + +================================================================================ +scheduler@0.27.0 +Installed path: node_modules/scheduler +Declared license: MIT +Source: https://github.com/facebook/react.git (directory: packages/scheduler) + +--- BEGIN LICENSE (verbatim; line endings normalized to LF) --- +MIT License + +Copyright (c) Meta Platforms, Inc. and affiliates. + +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. + +--- END LICENSE --- + +================================================================================ +tabbable@6.4.0 +Installed path: node_modules/tabbable +Declared license: MIT +Source: git+https://github.com/focus-trap/tabbable.git + +--- BEGIN LICENSE (verbatim; line endings normalized to LF) --- +The MIT License (MIT) + +Copyright (c) 2015 David Clark + +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. + + +--- END LICENSE --- + +================================================================================ +tslib@2.8.1 +Installed path: node_modules/tslib +Declared license: 0BSD +Source: https://github.com/Microsoft/tslib.git + +--- BEGIN LICENSE.txt (verbatim; line endings normalized to LF) --- +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +--- END LICENSE.txt --- + +================================================================================ +use-sync-external-store@1.6.0 +Installed path: node_modules/use-sync-external-store +Declared license: MIT +Source: https://github.com/facebook/react.git (directory: packages/use-sync-external-store) + +--- BEGIN LICENSE (verbatim; line endings normalized to LF) --- +MIT License + +Copyright (c) Meta Platforms, Inc. and affiliates. + +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. + +--- END LICENSE --- + +================================================================================ +zustand@5.0.12 +Installed path: node_modules/zustand +Declared license: MIT +Source: git+https://github.com/pmndrs/zustand.git + +--- BEGIN LICENSE (verbatim; line endings normalized to LF) --- +MIT License + +Copyright (c) 2019 Paul Henschel + +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. + +--- END LICENSE --- diff --git a/frontend/e2e/automation-input-runtime.spec.ts b/frontend/e2e/automation-input-runtime.spec.ts new file mode 100644 index 0000000..ed120bd --- /dev/null +++ b/frontend/e2e/automation-input-runtime.spec.ts @@ -0,0 +1,191 @@ +import { expect, test, type Page } from "@playwright/test"; + +const PROFILE_SETTINGS_KEY = "openstudio.inputProfiles.v1"; +const PRIMARY_KEY = process.platform === "darwin" ? "Meta" : "Control"; + +async function timelineCanvasPatchHash( + page: Page, + clientX: number, + clientY: number, + radius = 10, +): Promise<number> { + return page.evaluate(({ x, y, r }) => { + let hash = 2166136261; + let sampled = false; + for (const canvas of document.querySelectorAll<HTMLCanvasElement>(".timeline-container canvas")) { + const bounds = canvas.getBoundingClientRect(); + if (x < bounds.left || x >= bounds.right || y < bounds.top || y >= bounds.bottom) continue; + const context = canvas.getContext("2d"); + if (!context || bounds.width <= 0 || bounds.height <= 0) continue; + const scaleX = canvas.width / bounds.width; + const scaleY = canvas.height / bounds.height; + const canvasX = Math.round((x - bounds.left) * scaleX); + const canvasY = Math.round((y - bounds.top) * scaleY); + const pixelRadiusX = Math.max(1, Math.round(r * scaleX)); + const pixelRadiusY = Math.max(1, Math.round(r * scaleY)); + const left = Math.max(0, canvasX - pixelRadiusX); + const top = Math.max(0, canvasY - pixelRadiusY); + const width = Math.min(canvas.width - left, pixelRadiusX * 2 + 1); + const height = Math.min(canvas.height - top, pixelRadiusY * 2 + 1); + if (width <= 0 || height <= 0) continue; + const bytes = context.getImageData(left, top, width, height).data; + sampled = true; + for (const byte of bytes) { + hash ^= byte; + hash = Math.imul(hash, 16777619); + } + } + if (!sampled) throw new Error(`No Timeline canvas covers (${x}, ${y})`); + return hash >>> 0; + }, { x: clientX, y: clientY, r: radius }); +} + +test("real automation lane owns point drag, Delete, and atomic undo", async ({ page }) => { + await page.goto("/"); + await page.evaluate((settingsKey) => { + localStorage.removeItem(settingsKey); + localStorage.removeItem("openstudio_essentialControlsDismissed"); + }, PROFILE_SETTINGS_KEY); + await page.reload(); + + await page.getByLabel("Keyboard profile").selectOption("ableton_live"); + await page.getByLabel("Mouse & scroll profile").selectOption("ableton_live"); + await page.getByRole("button", { name: "Use these profiles" }).click(); + await page.getByRole("button", { name: "Add new audio track" }).click(); + + await page.getByRole("button", { name: "Open automation panel", exact: true }).click(); + const dialog = page.getByRole("dialog").filter({ hasText: "Envelopes" }); + await expect(dialog).toBeVisible(); + const volumeRow = dialog.getByText("Volume", { exact: true }).locator(".."); + await volumeRow.getByTitle("Show envelope").click(); + await expect(volumeRow.getByTitle("Hide envelope")).toBeVisible(); + await dialog.getByRole("button", { name: "Close modal" }).click(); + await expect(dialog).toBeHidden(); + await page.locator(".timeline-container").click({ position: { x: 180, y: 70 } }); + await page.keyboard.press("a"); + + const laneHeader = page.locator("[data-automation-lane-id]").first(); + await expect(laneHeader).toBeVisible(); + const laneBounds = await laneHeader.boundingBox(); + const timelineBounds = await page.locator(".timeline-container").boundingBox(); + expect(laneBounds).not.toBeNull(); + expect(timelineBounds).not.toBeNull(); + const pointX = timelineBounds!.x + Math.min(280, timelineBounds!.width * 0.35); + const pointY = laneBounds!.y + laneBounds!.height * 0.55; + + const emptyHash = await timelineCanvasPatchHash(page, pointX, pointY); + await page.mouse.move(pointX, pointY); + await page.mouse.down(); + await page.mouse.up(); + await expect.poll(() => timelineCanvasPatchHash(page, pointX, pointY)) + .not.toBe(emptyHash); + + const originalPointHash = await timelineCanvasPatchHash(page, pointX, pointY); + const movedX = pointX + 64; + const movedY = pointY - 12; + const emptyDestinationHash = await timelineCanvasPatchHash(page, movedX, movedY); + await page.mouse.move(pointX, pointY); + await page.mouse.down(); + await page.mouse.move(movedX, movedY, { steps: 8 }); + await page.mouse.up(); + await expect.poll(() => timelineCanvasPatchHash(page, movedX, movedY)) + .not.toBe(emptyDestinationHash); + await expect.poll(() => timelineCanvasPatchHash(page, pointX, pointY)) + .not.toBe(originalPointHash); + const movedOriginHash = await timelineCanvasPatchHash(page, pointX, pointY); + const movedDestinationHash = await timelineCanvasPatchHash(page, movedX, movedY); + + await page.keyboard.press(`${PRIMARY_KEY}+Z`); + await expect.poll(() => timelineCanvasPatchHash(page, pointX, pointY)) + .not.toBe(movedOriginHash); + await expect.poll(() => timelineCanvasPatchHash(page, movedX, movedY)) + .not.toBe(movedDestinationHash); + + // The point drag activated the real automation shortcut context. Ableton's + // Tab selects the next point and Delete removes that selected point. + await page.keyboard.press("Tab"); + const selectedHash = await timelineCanvasPatchHash(page, pointX, pointY); + await page.keyboard.press("Delete"); + await expect.poll(() => timelineCanvasPatchHash(page, pointX, pointY)) + .not.toBe(selectedHash); + const deletedHash = await timelineCanvasPatchHash(page, pointX, pointY); + + await page.keyboard.press(`${PRIMARY_KEY}+Z`); + await expect.poll(() => timelineCanvasPatchHash(page, pointX, pointY)) + .not.toBe(deletedHash); +}); + +test("real MIDI track automation lane creates, deletes, and restores a pitch-bend point", async ({ page }) => { + await page.goto("/"); + await page.evaluate((settingsKey) => { + localStorage.removeItem(settingsKey); + localStorage.removeItem("openstudio_essentialControlsDismissed"); + }, PROFILE_SETTINGS_KEY); + await page.reload(); + + await page.getByLabel("Keyboard profile").selectOption("ableton_live"); + await page.getByLabel("Mouse & scroll profile").selectOption("ableton_live"); + await page.getByRole("button", { name: "Use these profiles" }).click(); + await page.getByRole("menuitem", { name: "Insert menu" }).click(); + await page.getByRole("menuitem", { name: /New MIDI Track/ }).click(); + + await page.getByRole("button", { name: "Open automation panel", exact: true }).click(); + const dialog = page.getByRole("dialog").filter({ hasText: "Envelopes" }); + await expect(dialog).toBeVisible(); + const pitchBendRow = dialog.getByText("MIDI Pitch Bend", { exact: true }).locator(".."); + await pitchBendRow.getByTitle("Show envelope").click(); + await expect(pitchBendRow.getByTitle("Hide envelope")).toBeVisible(); + await dialog.getByRole("button", { name: "Close modal" }).click(); + + await page.locator(".timeline-container").click({ position: { x: 180, y: 70 } }); + await page.keyboard.press("a"); + const laneHeader = page.locator("[data-automation-lane-id]").first(); + await expect(laneHeader).toBeVisible(); + const laneBounds = await laneHeader.boundingBox(); + const timelineBounds = await page.locator(".timeline-container").boundingBox(); + expect(laneBounds).not.toBeNull(); + expect(timelineBounds).not.toBeNull(); + const pointX = timelineBounds!.x + Math.min(300, timelineBounds!.width * 0.38); + const pointY = laneBounds!.y + laneBounds!.height * 0.42; + + const beforeCreate = await timelineCanvasPatchHash(page, pointX, pointY); + await page.mouse.click(pointX, pointY); + await expect.poll(() => timelineCanvasPatchHash(page, pointX, pointY)).not.toBe(beforeCreate); + + await page.keyboard.press("Tab"); + const beforeDelete = await timelineCanvasPatchHash(page, pointX, pointY); + await page.keyboard.press("Delete"); + await expect.poll(() => timelineCanvasPatchHash(page, pointX, pointY)).not.toBe(beforeDelete); + const deleted = await timelineCanvasPatchHash(page, pointX, pointY); + await page.keyboard.press(`${PRIMARY_KEY}+Z`); + await expect.poll(() => timelineCanvasPatchHash(page, pointX, pointY)).not.toBe(deleted); +}); + +test("Space stops an active recording instead of leaving transport paused", async ({ page }) => { + await page.goto("/"); + await page.evaluate((settingsKey) => { + localStorage.removeItem(settingsKey); + localStorage.removeItem("openstudio_essentialControlsDismissed"); + }, PROFILE_SETTINGS_KEY); + await page.reload(); + + await page.getByLabel("Keyboard profile").selectOption("openstudio"); + await page.getByLabel("Mouse & scroll profile").selectOption("openstudio"); + await page.getByRole("button", { name: "Use these profiles" }).click(); + await page.getByRole("button", { name: "Add new audio track" }).click(); + await page.getByRole("button", { name: "Arm track for recording", exact: true }).click(); + await page.getByRole("contentinfo", { name: "Transport controls" }) + .getByRole("button", { name: "Record", exact: true }) + .click(); + + const recordingStatus = page.getByLabel("Transport status: Recording"); + await expect(recordingStatus).toBeVisible(); + + // Give the Timeline ownership, matching the reported real-app path that + // previously routed Space through transport.play -> pause(). + await page.locator(".timeline-container").click({ position: { x: 180, y: 70 } }); + await page.keyboard.press("Space"); + + await expect(page.getByLabel("Transport status: Stopped")).toBeVisible(); + await expect(recordingStatus).toBeHidden(); +}); diff --git a/frontend/e2e/hotkey-focus-regression.spec.ts b/frontend/e2e/hotkey-focus-regression.spec.ts new file mode 100644 index 0000000..4e2cb19 --- /dev/null +++ b/frontend/e2e/hotkey-focus-regression.spec.ts @@ -0,0 +1,145 @@ +import { expect, test, type Page } from "@playwright/test"; + +async function setShortcutState( + page: Page, + options: { + customPlay?: string; + playing?: boolean; + recording?: boolean; + }, +) { + await page.evaluate(async (next) => { + const { useDAWStore } = await import("/src/store/useDAWStore.ts"); + const current = useDAWStore.getState(); + useDAWStore.setState({ + customShortcuts: next.customPlay === undefined + ? {} + : { + "transport.play": { + common: next.customPlay ? [next.customPlay] : [], + }, + }, + transport: { + ...current.transport, + isPlaying: Boolean(next.playing || next.recording), + isPaused: false, + isRecording: Boolean(next.recording), + }, + recordSession: next.recording + ? { id: "e2e-focus-recording", startTime: 0, trackIds: [] } + : null, + }); + }, options); +} + +test.beforeEach(async ({ page }) => { + await page.goto("/shortcut-e2e.html"); + await expect(page.getByRole("heading", { name: "Shortcut and wheel test harness" })) + .toBeVisible(); + await page.getByLabel("Active shortcut binding").selectOption(""); +}); + +test("window reactivation cannot leave a button owning transport Space", async ({ page, context }) => { + const button = page.getByRole("button", { name: "Native button" }); + await button.focus(); + + const otherPage = await context.newPage(); + await otherPage.goto("about:blank"); + await otherPage.bringToFront(); + await page.bringToFront(); + + await expect.poll(() => page.evaluate(() => ({ + id: (document.activeElement as HTMLElement | null)?.id ?? "", + focused: document.hasFocus(), + }))).toEqual({ id: "native-button", focused: true }); + + // Headless Chromium can report document focus one task before its keyboard + // target settles after a page switch. Reasserting the foreground page keeps + // this test about retained DOM focus instead of a CDP activation race. + await page.bringToFront(); + await page.keyboard.press("Space"); + + await expect(page.locator("#button-click-count")).toHaveText("0"); + await expect(page.getByLabel("Last shortcut result")).toContainText('"owner":"registry"'); + await expect(page.getByLabel("Last shortcut result")).toContainText('"actionId":"transport.play"'); + await otherPage.close(); +}); + +test("focused slider yields active-profile Space to transport", async ({ page }) => { + const slider = page.getByRole("slider", { name: "Native range" }); + await slider.focus(); + await page.keyboard.press("Space"); + + await expect(slider).toHaveValue("5"); + await expect(page.getByLabel("Last shortcut result")).toContainText('"actionId":"transport.play"'); +}); + +test("held Space is consumed but invokes transport exactly once", async ({ page }) => { + await page.evaluate(async () => { + const { useDAWStore } = await import("/src/store/useDAWStore.ts"); + const pageGlobal = window as Window & { __hotkeyPlayCalls: number }; + pageGlobal.__hotkeyPlayCalls = 0; + useDAWStore.setState({ + play: async () => { + pageGlobal.__hotkeyPlayCalls += 1; + }, + }); + }); + await page.getByRole("button", { name: "Native button" }).focus(); + + await page.keyboard.down("Space"); + await page.keyboard.down("Space"); + await page.keyboard.up("Space"); + + await expect.poll(() => page.evaluate(() => ( + window as Window & { __hotkeyPlayCalls: number } + ).__hotkeyPlayCalls)).toBe(1); + await expect(page.locator("#button-click-count")).toHaveText("0"); +}); + +test("explicitly unbound Play returns Space to the focused button", async ({ page }) => { + await setShortcutState(page, { customPlay: "" }); + const button = page.getByRole("button", { name: "Native button" }); + await button.focus(); + await page.keyboard.press("Space"); + + await expect(page.locator("#button-click-count")).toHaveText("1"); + await expect(page.getByLabel("Last shortcut result")).toContainText('"owner":"native"'); +}); + +test("remapped Play works from a focused button without reserving Space", async ({ page }) => { + await setShortcutState(page, { customPlay: "P" }); + const button = page.getByRole("button", { name: "Native button" }); + await button.focus(); + + await page.keyboard.press("p"); + await expect(page.locator("#button-click-count")).toHaveText("0"); + await expect(page.getByLabel("Last shortcut result")).toContainText('"actionId":"transport.play"'); + + await page.keyboard.press("Space"); + await expect(page.locator("#button-click-count")).toHaveText("1"); + await expect(page.getByLabel("Last shortcut result")).toContainText('"owner":"native"'); +}); + +test("editable Space types while stopped and stops active transport", async ({ page }) => { + const input = page.getByRole("textbox", { name: "Text input" }); + await input.focus(); + await input.evaluate((element) => { + const textInput = element as HTMLInputElement; + textInput.setSelectionRange(textInput.value.length, textInput.value.length); + }); + await page.keyboard.press("Space"); + await expect(input).toHaveValue("select this text "); + await expect(page.getByLabel("Last shortcut result")).toContainText('"owner":"native"'); + + await setShortcutState(page, { playing: true }); + await input.focus(); + await input.evaluate((element) => { + const textInput = element as HTMLInputElement; + textInput.setSelectionRange(textInput.value.length, textInput.value.length); + }); + await page.keyboard.press("Space"); + + await expect(input).toHaveValue("select this text "); + await expect(page.getByLabel("Last shortcut result")).toContainText('"actionId":"transport.play"'); +}); diff --git a/frontend/e2e/input-profile-exhaustive.spec.ts b/frontend/e2e/input-profile-exhaustive.spec.ts new file mode 100644 index 0000000..d3c067c --- /dev/null +++ b/frontend/e2e/input-profile-exhaustive.spec.ts @@ -0,0 +1,265 @@ +import { expect, test, type Page } from "@playwright/test"; + +type ProfileId = + | "openstudio" + | "pro_tools" + | "cubase" + | "reaper" + | "audacity" + | "logic_pro" + | "fl_studio" + | "ableton_live" + | "studio_one" + | "bitwig_studio" + | "reason" + | "cakewalk_sonar" + | "garageband" + | "digital_performer" + | "ardour" + | "adobe_audition" + | "mixcraft" + | "waveform" + | "renoise"; + +interface KeyInit { + key: string; + code: string; + ctrlKey?: boolean; + metaKey?: boolean; + altKey?: boolean; + shiftKey?: boolean; +} + +interface WheelInit { + deltaY: number; + ctrlKey?: boolean; + metaKey?: boolean; + altKey?: boolean; + shiftKey?: boolean; +} + +interface ProfileRuntimeCase { + id: ProfileId; + platform: "macos" | "windows"; + keyboard: { + target: "application-surface" | "timeline-surface" | "piano-surface"; + actionId: string | null; + event: KeyInit; + }; + wheel: { + target: string; + ruleId: string | null; + event: WheelInit; + }; + pointer: { + action: string; + event: Omit<KeyInit, "key" | "code">; + }; +} + +const cases: readonly ProfileRuntimeCase[] = [ + { + id: "openstudio", + platform: "windows", + keyboard: { target: "application-surface", actionId: "view.toggleMixer", event: { key: "m", code: "KeyM", ctrlKey: true } }, + wheel: { target: "wheel-timeline", ruleId: "timeline.horizontal-zoom", event: { deltaY: -120, ctrlKey: true } }, + pointer: { action: "bypass_snap", event: { altKey: true } }, + }, + { + id: "pro_tools", + platform: "windows", + keyboard: { target: "application-surface", actionId: "view.toggleMixer", event: { key: "=", code: "Equal", ctrlKey: true } }, + wheel: { target: "wheel-timeline", ruleId: "pro-tools.option-horizontal-zoom", event: { deltaY: -120, altKey: true } }, + pointer: { action: "copy", event: { altKey: true } }, + }, + { + id: "cubase", + platform: "windows", + keyboard: { target: "application-surface", actionId: "view.toggleMixer", event: { key: "F3", code: "F3" } }, + wheel: { target: "wheel-timeline", ruleId: "cubase.horizontal-zoom", event: { deltaY: -120, ctrlKey: true } }, + pointer: { action: "copy", event: { altKey: true } }, + }, + { + id: "reaper", + platform: "windows", + keyboard: { target: "application-surface", actionId: "view.toggleMixer", event: { key: "m", code: "KeyM", ctrlKey: true } }, + wheel: { target: "wheel-timeline", ruleId: "reaper.horizontal-zoom", event: { deltaY: -120 } }, + pointer: { action: "copy", event: { ctrlKey: true } }, + }, + { + id: "audacity", + platform: "windows", + keyboard: { target: "timeline-surface", actionId: "view.zoomIn", event: { key: "1", code: "Digit1", ctrlKey: true } }, + wheel: { target: "wheel-timeline", ruleId: "audacity.horizontal-zoom", event: { deltaY: -120, ctrlKey: true } }, + pointer: { action: "none", event: { altKey: true } }, + }, + { + id: "logic_pro", + platform: "macos", + keyboard: { target: "application-surface", actionId: "view.toggleMixer", event: { key: "x", code: "KeyX" } }, + wheel: { target: "wheel-timeline", ruleId: "logic-pro.control-option-horizontal-zoom", event: { deltaY: -120, ctrlKey: true, altKey: true } }, + pointer: { action: "copy", event: { altKey: true } }, + }, + { + id: "fl_studio", + platform: "windows", + keyboard: { target: "application-surface", actionId: "view.toggleMixer", event: { key: "F9", code: "F9" } }, + wheel: { target: "wheel-track", ruleId: "fl-studio.playlist-track-reorder", event: { deltaY: -120, shiftKey: true } }, + pointer: { action: "none", event: { altKey: true } }, + }, + { + id: "ableton_live", + platform: "windows", + keyboard: { target: "application-surface", actionId: "view.toggleMixer", event: { key: "m", code: "KeyM", ctrlKey: true, altKey: true } }, + wheel: { target: "wheel-timeline", ruleId: "ableton-live.horizontal-zoom", event: { deltaY: -120, ctrlKey: true } }, + pointer: { action: "copy", event: { ctrlKey: true } }, + }, + { + id: "studio_one", + platform: "windows", + keyboard: { target: "application-surface", actionId: "view.toggleMixer", event: { key: "F3", code: "F3" } }, + wheel: { target: "wheel-timeline", ruleId: "studio-one.horizontal-zoom", event: { deltaY: -120, ctrlKey: true, shiftKey: true } }, + pointer: { action: "copy", event: { altKey: true } }, + }, + { + id: "bitwig_studio", + platform: "windows", + keyboard: { target: "timeline-surface", actionId: "view.zoomIn", event: { key: "=", code: "Equal", ctrlKey: true } }, + wheel: { target: "wheel-timeline", ruleId: "bitwig-studio.control-alt-horizontal-zoom", event: { deltaY: -120, ctrlKey: true, altKey: true } }, + pointer: { action: "none", event: { altKey: true } }, + }, + { + id: "reason", + platform: "windows", + keyboard: { target: "timeline-surface", actionId: "view.zoomIn", event: { key: "h", code: "KeyH" } }, + wheel: { target: "wheel-timeline", ruleId: "reason.horizontal-zoom", event: { deltaY: -120, ctrlKey: true } }, + pointer: { action: "copy", event: { ctrlKey: true } }, + }, + { + id: "cakewalk_sonar", + platform: "windows", + keyboard: { target: "application-surface", actionId: "view.toggleMixer", event: { key: "2", code: "Digit2", altKey: true } }, + wheel: { target: "wheel-timeline", ruleId: "cakewalk-sonar.alt-horizontal-zoom", event: { deltaY: -120, altKey: true } }, + pointer: { action: "none", event: { altKey: true } }, + }, + { + id: "garageband", + platform: "macos", + keyboard: { target: "application-surface", actionId: "view.toggleMasterTrackTCP", event: { key: "m", code: "KeyM", metaKey: true, shiftKey: true } }, + wheel: { target: "wheel-timeline", ruleId: null, event: { deltaY: -120 } }, + pointer: { action: "none", event: { altKey: true } }, + }, + { + id: "digital_performer", + platform: "macos", + // DP's official command system is user-assignable and does not publish a + // stable default table for this profile. Strict mode must not leak the + // OpenStudio Command+M mixer binding into it. + keyboard: { target: "application-surface", actionId: null, event: { key: "m", code: "KeyM", metaKey: true } }, + wheel: { target: "wheel-timeline", ruleId: "digital-performer.option-horizontal-zoom", event: { deltaY: -120, altKey: true } }, + pointer: { action: "none", event: { altKey: true } }, + }, + { + id: "ardour", + platform: "windows", + keyboard: { target: "timeline-surface", actionId: "view.zoomToSelection", event: { key: "z", code: "KeyZ" } }, + wheel: { target: "wheel-timeline", ruleId: "ardour.horizontal-zoom", event: { deltaY: -120, ctrlKey: true } }, + pointer: { action: "none", event: { altKey: true } }, + }, + { + id: "adobe_audition", + platform: "windows", + keyboard: { target: "timeline-surface", actionId: "view.zoomIn", event: { key: "=", code: "Equal" } }, + wheel: { target: "wheel-ruler", ruleId: "adobe-audition.ruler-horizontal-zoom", event: { deltaY: -120 } }, + pointer: { action: "copy", event: { altKey: true } }, + }, + { + id: "mixcraft", + platform: "windows", + keyboard: { target: "application-surface", actionId: "view.toggleVirtualKeyboard", event: { key: "k", code: "KeyK", ctrlKey: true, altKey: true } }, + wheel: { target: "wheel-timeline", ruleId: "mixcraft.horizontal-zoom", event: { deltaY: -120 } }, + pointer: { action: "copy", event: { altKey: true } }, + }, + { + id: "waveform", + platform: "windows", + keyboard: { target: "timeline-surface", actionId: "view.zoomToFit", event: { key: "F8", code: "F8" } }, + wheel: { target: "wheel-timeline", ruleId: "waveform.horizontal-zoom", event: { deltaY: -120 } }, + pointer: { action: "none", event: { altKey: true } }, + }, + { + id: "renoise", + platform: "windows", + keyboard: { target: "application-surface", actionId: "transport.play", event: { key: " ", code: "Space" } }, + wheel: { target: "wheel-timeline", ruleId: null, event: { deltaY: -120 } }, + pointer: { action: "none", event: { altKey: true } }, + }, +] as const; + +async function readJsonOutput(page: Page, label: string): Promise<Record<string, unknown>> { + const raw = await page.getByLabel(label).textContent(); + if (!raw) throw new Error(`No JSON in ${label}`); + return JSON.parse(raw) as Record<string, unknown>; +} + +for (const entry of cases) { + test(`${entry.id} dispatches its documented key policy, wheel, and pointer event`, async ({ page }) => { + await page.goto("/shortcut-e2e.html"); + await expect(page.getByRole("heading", { name: "Shortcut and wheel test harness" })).toBeVisible(); + await page.getByLabel("Active shortcut binding").selectOption(""); + await page.getByLabel("Keyboard platform").selectOption(entry.platform); + await page.getByLabel("Wheel platform").selectOption(entry.platform); + await page.getByLabel("Harness keyboard profile").selectOption(entry.id); + await page.getByLabel("Mouse profile").selectOption(entry.id); + + await page.evaluate(({ target, event }) => { + window.dispatchHarnessKey(target, event); + }, { target: entry.keyboard.target, event: entry.keyboard.event }); + if (entry.keyboard.actionId === null) { + await expect.poll(async () => ( + (await readJsonOutput(page, "Last shortcut result")).handled + )).toBe(false); + expect(await readJsonOutput(page, "Last shortcut result")).toMatchObject({ + handled: false, + }); + } else { + await expect.poll(async () => ( + (await readJsonOutput(page, "Last shortcut result")).actionId + )).toBe(entry.keyboard.actionId); + expect(await readJsonOutput(page, "Last shortcut result")).toMatchObject({ + handled: true, + owner: "registry", + actionId: entry.keyboard.actionId, + platform: entry.platform, + }); + } + + const wheelDispatch = await page.evaluate(({ target, event }) => { + const dispatch = window.dispatchHarnessWheel(target, event); + const raw = document.getElementById(target)?.dataset.lastWheelResult; + if (!raw) throw new Error(`No wheel result for ${target}`); + return { dispatch, resolved: JSON.parse(raw) as Record<string, unknown> }; + }, { target: entry.wheel.target, event: entry.wheel.event }); + expect(wheelDispatch.resolved).toMatchObject({ + profileId: entry.id, + ruleId: entry.wheel.ruleId, + matched: entry.wheel.ruleId !== null, + preventDefault: entry.wheel.ruleId !== null, + }); + expect(wheelDispatch.dispatch.defaultPrevented).toBe(entry.wheel.ruleId !== null); + + const pointerDispatch = await page.evaluate((event) => { + const dispatch = window.dispatchHarnessPointer("pointer-clip-drag", event); + const raw = document.getElementById("pointer-clip-drag")?.dataset.lastPointerResult; + if (!raw) throw new Error("No pointer result"); + return { dispatch, resolved: JSON.parse(raw) as Record<string, unknown> }; + }, entry.pointer.event); + expect(pointerDispatch.resolved).toMatchObject({ + profileId: entry.id, + context: "clip_drag", + action: entry.pointer.action, + source: "profile", + }); + expect(pointerDispatch.dispatch.defaultPrevented).toBe(entry.pointer.action !== "none"); + }); +} diff --git a/frontend/e2e/input-profile-wheel.spec.ts b/frontend/e2e/input-profile-wheel.spec.ts new file mode 100644 index 0000000..2259450 --- /dev/null +++ b/frontend/e2e/input-profile-wheel.spec.ts @@ -0,0 +1,210 @@ +import { expect, test, type Page } from "@playwright/test"; + +interface SyntheticWheelOptions { + deltaX?: number; + deltaY?: number; + deltaMode?: number; + ctrlKey?: boolean; + metaKey?: boolean; + altKey?: boolean; + shiftKey?: boolean; + clientX?: number; + clientY?: number; +} + +async function dispatchRawWheel( + page: Page, + targetId: string, + options: SyntheticWheelOptions, +): Promise<{ dispatchReturned: boolean; defaultPrevented: boolean }> { + return page.evaluate( + ({ id, init }) => window.dispatchHarnessWheel(id, init), + { id: targetId, init: options }, + ); +} + +async function dispatchResolvedWheel( + page: Page, + targetId: string, + options: SyntheticWheelOptions, +): Promise<{ + dispatch: { dispatchReturned: boolean; defaultPrevented: boolean }; + resolved: Record<string, unknown>; +}> { + return page.evaluate(({ id, init }) => { + const dispatch = window.dispatchHarnessWheel(id, init); + const raw = document.getElementById(id)?.dataset.lastWheelResult; + if (!raw) throw new Error(`No wheel result for ${id}`); + return { dispatch, resolved: JSON.parse(raw) as Record<string, unknown> }; + }, { id: targetId, init: options }); +} + +test.beforeEach(async ({ page }) => { + await page.goto("/shortcut-e2e.html"); + await expect(page.getByRole("heading", { name: "Shortcut and wheel test harness" })).toBeVisible(); + await expect(page.getByRole("slider", { name: "Timeline nested profiled range" })).toBeVisible(); +}); + +test("nested profiled controls own plain, fine, and suppressed wheel gestures", async ({ page }) => { + await page.getByLabel("Mouse profile").selectOption("cubase"); + const timelineValue = page.getByLabel("Timeline nested profiled range value"); + const pianoValue = page.getByLabel("Piano roll nested profiled range value"); + + await dispatchRawWheel(page, "timeline-profiled-range", { deltaY: -100 }); + await expect(timelineValue).toHaveText("0.600"); + + await dispatchRawWheel(page, "timeline-profiled-range", { + deltaY: -100, + shiftKey: true, + }); + await expect(timelineValue).toHaveText("0.610"); + + await dispatchRawWheel(page, "timeline-profiled-range", { + deltaY: -100, + altKey: true, + }); + await expect(timelineValue).toHaveText("0.610"); + + await dispatchRawWheel(page, "piano-profiled-range", { deltaY: -100 }); + await expect(pianoValue).toHaveText("0.600"); + await expect(page.getByLabel("Viewport wheel hit counts")).toHaveText( + '{"timeline":0,"piano_roll":0}', + ); +}); + +test("high-resolution packets accumulate before one profiled edit burst", async ({ page }) => { + await page.getByLabel("Mouse profile").selectOption("cubase"); + const value = page.getByLabel("Timeline nested profiled range value"); + const begins = page.getByLabel("Timeline nested profiled range begin count"); + const commits = page.getByLabel("Timeline nested profiled range commit count"); + + for (let packet = 0; packet < 3; packet += 1) { + await dispatchRawWheel(page, "timeline-profiled-range", { deltaY: -0.25 }); + await expect(value).toHaveText("0.500"); + await expect(begins).toHaveText("0"); + } + + await dispatchRawWheel(page, "timeline-profiled-range", { deltaY: -0.25 }); + await expect(value).toHaveText("0.501"); + await expect(begins).toHaveText("1"); + await expect.poll(async () => commits.textContent()).toBe("1"); + await expect(page.getByLabel("Viewport wheel hit counts")).toHaveText( + '{"timeline":0,"piano_roll":0}', + ); +}); + +test("macOS physical Control and Command are both blocked by the raw browser guard", async ({ page }) => { + await page.getByLabel("Wheel platform").selectOption("macos"); + + const physicalControl = await dispatchResolvedWheel(page, "wheel-browser", { + deltaY: 12, + ctrlKey: true, + }); + expect(physicalControl.resolved).toMatchObject({ + ruleId: "browser.native-scroll", + eventDefaultPrevented: true, + }); + expect(physicalControl.dispatch).toEqual({ dispatchReturned: false, defaultPrevented: true }); + + const command = await dispatchResolvedWheel(page, "wheel-browser", { + deltaY: 12, + metaKey: true, + }); + expect(command.resolved).toMatchObject({ + ruleId: "browser.suppress-browser-zoom", + eventDefaultPrevented: true, + }); + expect(command.dispatch).toEqual({ dispatchReturned: false, defaultPrevented: true }); + + const both = await dispatchResolvedWheel(page, "wheel-browser", { + deltaY: 12, + ctrlKey: true, + metaKey: true, + }); + expect(both.resolved).toMatchObject({ + ruleId: "browser.suppress-browser-zoom", + eventDefaultPrevented: true, + }); + expect(both.dispatch).toEqual({ dispatchReturned: false, defaultPrevented: true }); +}); + +test("exact DAW editor subtargets preserve their target and anchor", async ({ page }) => { + await page.getByLabel("Mouse profile").selectOption("pro_tools"); + await page.getByLabel("Wheel platform").selectOption("macos"); + const piano = await dispatchResolvedWheel(page, "wheel-piano", { + deltaY: -8, + ctrlKey: true, + altKey: true, + clientX: 141, + clientY: 73, + }); + expect(piano.resolved).toMatchObject({ + profileId: "pro_tools", + ruleId: "pro-tools.midi-note-height", + operation: "zoom", + target: "midi-note-height", + anchor: { + kind: "pointer", + clientX: 141, + clientY: 73, + targetId: "wheel-piano", + }, + }); + + await page.getByLabel("Mouse profile").selectOption("audacity"); + await page.getByLabel("Wheel platform").selectOption("windows"); + const waveformScale = await dispatchResolvedWheel(page, "wheel-waveform-scale", { + deltaY: 7, + ctrlKey: true, + clientX: 52, + clientY: 118, + }); + expect(waveformScale.resolved).toMatchObject({ + profileId: "audacity", + ruleId: "audacity.waveform-scale-zoom", + operation: "zoom", + target: "waveform-scale", + anchor: { + kind: "hovered-track", + clientX: 52, + clientY: 118, + targetId: "track-e2e", + }, + }); +}); + +test("browser-integrated detached snapshots validate before updating the live mouse profile", async ({ page }) => { + const invalid = await page.evaluate(() => window.applyHarnessInputProfileSnapshot({ + keyboardShortcutProfileId: "reaper", + mouseBehaviorProfileId: "not-a-profile", + customKeyboardProfiles: [], + activeCustomKeyboardProfileId: null, + customShortcuts: {}, + })); + expect(invalid).toEqual({ + applied: false, + keyboardShortcutProfileId: "openstudio", + mouseBehaviorProfileId: "openstudio", + }); + + const applied = await page.evaluate(() => window.applyHarnessInputProfileSnapshot({ + keyboardShortcutProfileId: "reaper", + mouseBehaviorProfileId: "cubase", + customKeyboardProfiles: [], + activeCustomKeyboardProfileId: null, + customShortcuts: {}, + })); + expect(applied).toEqual({ + applied: true, + keyboardShortcutProfileId: "reaper", + mouseBehaviorProfileId: "cubase", + }); + await expect(page.getByLabel("Mouse profile")).toHaveValue("cubase"); + await expect(page.getByLabel("Profile snapshot result")).toContainText('"applied":true'); + + await dispatchRawWheel(page, "timeline-profiled-range", { + deltaY: -100, + altKey: true, + }); + await expect(page.getByLabel("Timeline nested profiled range value")).toHaveText("0.500"); +}); diff --git a/frontend/e2e/midi-input-meter.spec.ts b/frontend/e2e/midi-input-meter.spec.ts new file mode 100644 index 0000000..596c707 --- /dev/null +++ b/frontend/e2e/midi-input-meter.spec.ts @@ -0,0 +1,48 @@ +import { expect, test } from "@playwright/test"; + +test.beforeEach(async ({ page }) => { + await page.goto("/shortcut-e2e.html"); + await expect(page.getByRole("meter", { name: "Harness track meter" })).toBeVisible(); +}); + +test("armed raw MIDI draws mirrored light input lanes and audio output takes precedence", async ({ page }) => { + await page.evaluate(() => window.setHarnessMeterState({ + audioLevel: 0, + midiInputLevel: 0.75, + armed: true, + trackType: "midi", + })); + + const meter = page.getByRole("meter", { name: "Harness track meter" }); + await expect(meter).toHaveAttribute("data-meter-source", "midi_input"); + await page.waitForTimeout(120); + + const pixels = await meter.evaluate((canvas) => { + const element = canvas as HTMLCanvasElement; + const context = element.getContext("2d"); + if (!context) throw new Error("Meter canvas has no 2D context"); + const y = element.height - 8; + return { + left: Array.from(context.getImageData(2, y, 1, 1).data), + right: Array.from(context.getImageData(13, y, 1, 1).data), + }; + }); + expect(pixels.left).toEqual([103, 232, 249, 255]); + expect(pixels.right).toEqual(pixels.left); + + await page.evaluate(() => window.setHarnessMeterState({ + audioLevel: 0.2, + midiInputLevel: 1, + armed: true, + trackType: "instrument", + })); + await expect(meter).toHaveAttribute("data-meter-source", "audio"); + + await page.evaluate(() => window.setHarnessMeterState({ + audioLevel: 0, + midiInputLevel: 1, + armed: false, + trackType: "midi", + })); + await expect(meter).toHaveAttribute("data-meter-source", "idle"); +}); diff --git a/frontend/e2e/nam-multi-capture-lifecycle.spec.ts b/frontend/e2e/nam-multi-capture-lifecycle.spec.ts new file mode 100644 index 0000000..3bb5b7e --- /dev/null +++ b/frontend/e2e/nam-multi-capture-lifecycle.spec.ts @@ -0,0 +1,217 @@ +import { expect, test, type Page } from "@playwright/test"; + +const NAM_ADDRESS = { + trackId: "nam-multi-capture-e2e", + chain: "track", + fxIndex: 0, +} as const; + +const PACK_TITLE = "Headbangers Ball Amp Pack IR/RAW"; + +function sourceFlowUrl() { + const session = { + address: NAM_ADDRESS, + title: "OpenStudio NAM Rack", + fallbackName: "OpenStudio NAM Rack", + }; + const params = new URLSearchParams({ + window: "pluginEditor", + platform: "windows", + windowChrome: "native", + mockPlugin: "nam", + sessionId: JSON.stringify(session), + namView: "rack", + namLibraryFlow: "amp", + namQuery: "headbangers", + }); + return `/?${params.toString()}`; +} + +async function readRackState(page: Page) { + return page.evaluate(async (address) => { + const moduleUrl = "/src/services/NativeBridge.ts"; + const { nativeBridge } = await import(/* @vite-ignore */ moduleUrl); + return nativeBridge.getBuiltInPluginState(address); + }, NAM_ADDRESS); +} + +async function seedHostTrack(page: Page) { + await page.evaluate(async (trackId) => { + const moduleUrl = "/src/store/useDAWStore.ts"; + const { createDefaultTrack, useDAWStore } = await import(/* @vite-ignore */ moduleUrl); + useDAWStore.setState({ + tracks: [createDefaultTrack(trackId, "NAM audition", "#335577", "audio", [])], + isModified: false, + canUndo: false, + canRedo: false, + }); + }, NAM_ADDRESS.trackId); +} + +async function readMonitorAndHistory(page: Page) { + return page.evaluate(async (trackId) => { + const moduleUrl = "/src/store/useDAWStore.ts"; + const { useDAWStore } = await import(/* @vite-ignore */ moduleUrl); + const state = useDAWStore.getState(); + return { + monitorEnabled: state.tracks.find((track: { id: string }) => track.id === trackId)?.monitorEnabled, + isModified: state.isModified, + canUndo: state.canUndo, + canRedo: state.canRedo, + }; + }, NAM_ADDRESS.trackId); +} + +async function readAmpPath(page: Page) { + const state = await readRackState(page); + return String(state.modelState?.ampModelPath ?? "").replace(/\\/g, "/"); +} + +async function expectAmpPath(page: Page, modelId: number | null) { + const modelSlug = modelId === null ? "" : ({ + 6713901: "headbangers-ball-01-raw.nam", + 6713902: "headbangers-ball-01-ir.nam", + 6713904: "headbangers-ball-02-ir.nam", + } as Record<number, string>)[modelId]; + await expect.poll(() => readAmpPath(page)) + .toEqual(modelId === null ? "" : expect.stringMatching(new RegExp(`/${modelSlug.replace(".", "\\.")}$`))); +} + +test("multi-capture pack supports preview, use, replace, bypass, and unload", async ({ page }) => { + await page.goto(sourceFlowUrl()); + await seedHostTrack(page); + await expect.poll(() => readMonitorAndHistory(page)).toEqual({ + monitorEnabled: false, + isModified: false, + canUndo: false, + canRedo: false, + }); + + const packCard = page.locator(".tone-feed-row").filter({ hasText: PACK_TITLE }); + await expect(packCard).toHaveCount(1); + await expect(packCard).toContainText(/4 captures/i); + + const picker = page.locator('[data-qa="nam-tone-capture-picker"]:not([data-compact])'); + await expect(picker).toBeVisible(); + await expect(picker.locator(".nam-tone-capture-select")).toHaveCount(0); + await packCard.getByRole("button", { name: "View 4 Captures" }).click(); + await expect(picker).toContainText("4 captures"); + await expect(picker.locator(".nam-tone-capture-select")).toHaveCount(4); + + const raw01Select = picker.locator(".nam-tone-capture-select").filter({ hasText: "Headbangers Ball 01 RAW" }); + const ir01Select = picker.locator(".nam-tone-capture-select").filter({ hasText: "Headbangers Ball 01 IR" }); + const raw01 = raw01Select.locator(".."); + const ir01 = ir01Select.locator(".."); + await expect(raw01).toContainText("RAW / AMP ONLY"); + await expect(ir01).toContainText("CAB EMBEDDED"); + const baselineAmpPath = await readAmpPath(page); + expect(baselineAmpPath).not.toBe(""); + + await ir01Select.focus(); + await page.keyboard.press("Enter"); + await expect(ir01Select).toHaveAttribute("aria-pressed", "true"); + await expect(ir01).toHaveAttribute("data-selected", "true"); + await expect.poll(() => readAmpPath(page)).toBe(baselineAmpPath); + + await ir01.getByRole("button", { name: "Audition Headbangers Ball 01 IR" }).click(); + await expect(ir01).toHaveAttribute("data-audition", "true"); + await expectAmpPath(page, 6713902); + await expect.poll(() => readMonitorAndHistory(page)).toEqual({ + monitorEnabled: true, + isModified: false, + canUndo: false, + canRedo: false, + }); + + await raw01.getByRole("button", { name: "Audition Headbangers Ball 01 RAW" }).click(); + await expect(raw01).toHaveAttribute("data-audition", "true"); + await expect(ir01).not.toHaveAttribute("data-audition", "true"); + await expectAmpPath(page, 6713901); + await expect.poll(() => readMonitorAndHistory(page)).toEqual({ + monitorEnabled: true, + isModified: false, + canUndo: false, + canRedo: false, + }); + + await raw01.getByRole("button", { name: "Stop auditioning Headbangers Ball 01 RAW" }).click(); + await expect.poll(() => readAmpPath(page)).toBe(baselineAmpPath); + await expect.poll(() => readMonitorAndHistory(page)).toEqual({ + monitorEnabled: false, + isModified: false, + canUndo: false, + canRedo: false, + }); + + await raw01.getByRole("button", { name: "Audition Headbangers Ball 01 RAW" }).click(); + await expectAmpPath(page, 6713901); + await raw01.getByRole("button", { name: "Use Headbangers Ball 01 RAW" }).click(); + await expect.poll(() => readMonitorAndHistory(page)).toEqual({ + monitorEnabled: false, + isModified: false, + canUndo: false, + canRedo: false, + }); + + const nameplate = page.locator('[data-qa="nam-amp-capture-nameplate"]'); + await expect(nameplate).toHaveAttribute("data-state", "loaded"); + await expect(nameplate).toHaveAttribute("data-includes-cab", "false"); + await expect(nameplate).toContainText(/Headbangers Ball 01 RAW/i); + await expectAmpPath(page, 6713901); + + const ampPower = page.locator('[data-param-id="ampEnabled"][role]').first(); + await ampPower.focus(); + await page.keyboard.press("Enter"); + await expect.poll(async () => (await readRackState(page)).values?.ampEnabled).toBe(0); + await page.keyboard.press("Enter"); + await expect.poll(async () => (await readRackState(page)).values?.ampEnabled).toBe(1); + + await page.locator('[data-qa="nam-amp-capture-selector"]').click(); + await expect(picker).toBeVisible(); + const ir02 = picker.locator(".nam-tone-capture-select").filter({ hasText: "Headbangers Ball 02 IR" }).locator(".."); + await ir02.getByRole("button", { name: "Use Headbangers Ball 02 IR" }).click(); + + await expect(nameplate).toHaveAttribute("data-state", "loaded"); + await expect(nameplate).toHaveAttribute("data-includes-cab", "true"); + await expect(nameplate).toContainText(/Headbangers Ball 02 IR/i); + await expectAmpPath(page, 6713904); + await expect.poll(async () => (await readRackState(page)).values?.cabEnabled).toBe(0); + + await page.locator('[data-qa="nam-amp-capture-unload"]').click(); + await expect(nameplate).toHaveAttribute("data-state", "empty"); + await expect(nameplate).toContainText("No amp capture loaded"); + await expectAmpPath(page, null); +}); + +test("audition reports monitor bridge failures without dirtying history or pretending success", async ({ page }) => { + await page.goto(sourceFlowUrl()); + await seedHostTrack(page); + await page.evaluate(async () => { + const moduleUrl = "/src/services/NativeBridge.ts"; + const { nativeBridge } = await import(/* @vite-ignore */ moduleUrl); + nativeBridge.setTrackInputMonitoring = async () => false; + }); + + const packCard = page.locator(".tone-feed-row").filter({ hasText: PACK_TITLE }); + await packCard.getByRole("button", { name: "View 4 Captures" }).click(); + const picker = page.locator('[data-qa="nam-tone-capture-picker"]:not([data-compact])'); + const ir01 = picker.locator(".nam-tone-capture-select").filter({ hasText: "Headbangers Ball 01 IR" }).locator(".."); + await ir01.getByRole("button", { name: "Audition Headbangers Ball 01 IR" }).click(); + + await expectAmpPath(page, 6713902); + await expect(page.getByText(/track monitoring could not be enabled automatically/i).first()).toBeVisible(); + await expect.poll(() => readMonitorAndHistory(page)).toEqual({ + monitorEnabled: false, + isModified: false, + canUndo: false, + canRedo: false, + }); + + await ir01.getByRole("button", { name: "Stop auditioning Headbangers Ball 01 IR" }).click(); + await expect.poll(() => readMonitorAndHistory(page)).toEqual({ + monitorEnabled: false, + isModified: false, + canUndo: false, + canRedo: false, + }); +}); diff --git a/frontend/e2e/nam-rack-approved-surfaces.spec.ts b/frontend/e2e/nam-rack-approved-surfaces.spec.ts new file mode 100644 index 0000000..50c4b24 --- /dev/null +++ b/frontend/e2e/nam-rack-approved-surfaces.spec.ts @@ -0,0 +1,806 @@ +import { expect, test, type Page } from "@playwright/test"; +import { + faceplateControlHitRect, + faceplateControlVisualRect, + NAM_AMP_V4_FACEPLATE, + NAM_EQ_V4_FACEPLATE, + type FaceplateManifest, +} from "../src/components/namRackFaceplateGeometry"; + +const NAM_ADDRESS = { + trackId: "nam-approved-surface-qa", + chain: "track", + fxIndex: 0, +} as const; + +const PRE_EQ_PARAM_IDS = [ + "preEqEnabled", + "preEq120Db", + "preEq250Db", + "preEq500Db", + "preEq1kDb", + "preEq2k5Db", + "preEq5kDb", + "preEq8kDb", + "preEq12kDb", + "preEqHPFHz", + "preEqLPFHz", +] as const; + +const DRIVE_PARAM_IDS = [ + "precisionDriveEnabled", + "precisionDriveDrive", + "precisionDriveVolumeDb", + "precisionDriveBright", + "precisionDriveAttack", + "precisionDriveGate", +] as const; + +const AMP_PARAM_IDS = [ + "ampEnabled", + "ampBoost", + "ampVoice", + "ampGainDb", + "bassDb", + "midDb", + "trebleDb", + "presenceDb", + "ampMix", + "ampOutputDb", +] as const; + +const POST_EQ_BAND_IDS = [ + "eq65Db", + "eq125Db", + "eq250Db", + "eq500Db", + "eq1kDb", + "eq2kDb", + "eq4kDb", + "eq8kDb", + "eq16kDb", +] as const; + +const POST_EQ_PARAM_IDS = [ + "eqEnabled", + ...POST_EQ_BAND_IDS, + "eqHPFHz", + "eqLevelDb", + "eqLPFHz", +] as const; + +type RackSection = "pre" | "amp" | "eq"; + +function rackUrl(section: RackSection) { + const focus = section === "pre" ? "gate" : section; + const session = { + address: NAM_ADDRESS, + title: "OpenStudio NAM Rack", + fallbackName: "OpenStudio NAM Rack", + }; + const params = new URLSearchParams({ + window: "pluginEditor", + platform: "windows", + windowChrome: "native", + mockPlugin: "nam", + sessionId: JSON.stringify(session), + namView: "rack", + namFocus: focus, + namSection: section, + }); + return `/?${params.toString()}`; +} + +async function openRackSection(page: Page, section: RackSection) { + await page.goto(rackUrl(section)); + const host = page.locator( + `.nam-rack-design-port.nam-native-design-surface[data-design-section="${section}"]`, + ); + // The detached editor is bootstrapped through a dynamic import. On a cold + // Windows CI worker Vite can need longer than Playwright's 5 s assertion + // default to transform the full NAM Rack surface before its host mounts. + await expect(host).toBeVisible({ timeout: 15_000 }); + await expect(host.locator(".nam-rack-artboard")).toBeVisible(); + await page.evaluate(async () => { + if (document.fonts?.ready) await document.fonts.ready; + const images = Array.from( + document.querySelectorAll<HTMLImageElement>( + ".nam-rack-design-port [data-rack-design-asset-kind]", + ), + ); + await Promise.all(images.map(async (image) => { + if (!image.complete) { + await new Promise<void>((resolve) => { + image.addEventListener("load", () => resolve(), { once: true }); + image.addEventListener("error", () => resolve(), { once: true }); + }); + } + if (typeof image.decode === "function") await image.decode().catch(() => undefined); + })); + await new Promise<void>((resolve) => requestAnimationFrame(() => requestAnimationFrame(() => resolve()))); + }); + return host; +} + +async function readRackValues(page: Page): Promise<Record<string, number>> { + return page.evaluate(async (address) => { + const moduleUrl = "/src/services/NativeBridge.ts"; + const { nativeBridge } = await import(/* @vite-ignore */ moduleUrl); + const state = await nativeBridge.getBuiltInPluginState(address); + return state?.values ?? {}; + }, NAM_ADDRESS); +} + +async function interactiveParamIds(page: Page, moduleId: string) { + return page.locator(`[data-module="${moduleId}"]`).evaluate((module) => ( + Array.from(module.querySelectorAll<HTMLElement>("[data-param-id][role]")) + .filter((node) => { + const rect = node.getBoundingClientRect(); + const style = getComputedStyle(node); + return rect.width > 0 + && rect.height > 0 + && style.display !== "none" + && style.visibility !== "hidden" + && node.getAttribute("aria-disabled") !== "true"; + }) + .map((node) => node.dataset.paramId ?? "") + .filter(Boolean) + .sort() + )); +} + +async function surfaceGeometryFailures(page: Page, moduleId: string) { + return page.locator(`[data-module="${moduleId}"]`).evaluate((module) => { + const visible = (node: Element) => { + const rect = node.getBoundingClientRect(); + const style = getComputedStyle(node); + return rect.width > 0 + && rect.height > 0 + && style.display !== "none" + && style.visibility !== "hidden"; + }; + const overlapArea = (left: DOMRect, right: DOMRect) => ( + Math.max(0, Math.min(left.right, right.right) - Math.max(left.left, right.left)) + * Math.max(0, Math.min(left.bottom, right.bottom) - Math.max(left.top, right.top)) + ); + const moduleRect = module.getBoundingClientRect(); + const interactive = Array.from( + module.querySelectorAll<HTMLElement>("[data-param-id][role]"), + ).filter(visible); + const visibleSubjects = Array.from(module.querySelectorAll<HTMLElement>( + ".asset-control, .label, .module-title, .module-display, .fader, [data-param-id][role]", + )).filter(visible); + const labels = Array.from( + module.querySelectorAll<HTMLElement>(".label, .module-title"), + ).filter(visible); + const containment: string[] = []; + const hitOverlaps: string[] = []; + const labelOverlaps: string[] = []; + const textOverflow: string[] = []; + + for (const node of visibleSubjects) { + const rect = node.getBoundingClientRect(); + if (rect.left < moduleRect.left - 1 + || rect.top < moduleRect.top - 1 + || rect.right > moduleRect.right + 1 + || rect.bottom > moduleRect.bottom + 1) { + containment.push( + node.dataset.paramId + ?? node.textContent?.replace(/\s+/g, " ").trim() + ?? node.className, + ); + } + } + for (let leftIndex = 0; leftIndex < interactive.length; leftIndex += 1) { + for (let rightIndex = leftIndex + 1; rightIndex < interactive.length; rightIndex += 1) { + const area = overlapArea( + interactive[leftIndex].getBoundingClientRect(), + interactive[rightIndex].getBoundingClientRect(), + ); + if (area > 0.5) { + hitOverlaps.push( + `${interactive[leftIndex].dataset.paramId}:${interactive[rightIndex].dataset.paramId}:${area.toFixed(2)}`, + ); + } + } + } + for (let leftIndex = 0; leftIndex < labels.length; leftIndex += 1) { + if (labels[leftIndex].scrollWidth > labels[leftIndex].clientWidth + 1 + || labels[leftIndex].scrollHeight > labels[leftIndex].clientHeight + 1) { + textOverflow.push(labels[leftIndex].textContent?.replace(/\s+/g, " ").trim() ?? "label"); + } + for (let rightIndex = leftIndex + 1; rightIndex < labels.length; rightIndex += 1) { + const area = overlapArea( + labels[leftIndex].getBoundingClientRect(), + labels[rightIndex].getBoundingClientRect(), + ); + if (area > 0.5) { + labelOverlaps.push( + `${labels[leftIndex].textContent?.trim()}:${labels[rightIndex].textContent?.trim()}:${area.toFixed(2)}`, + ); + } + } + } + return { containment, hitOverlaps, labelOverlaps, textOverflow }; + }); +} + +async function manifestProjectionFailures( + page: Page, + moduleId: string, + manifest: FaceplateManifest, + ignoredControlIds: readonly string[] = [], +) { + const ignored = new Set(ignoredControlIds); + const controls = manifest.controls + .filter(({ id }) => !ignored.has(id)) + .map((control) => ({ + id: control.id, + paramId: control.paramId, + kind: control.kind, + hit: faceplateControlHitRect(control), + visual: faceplateControlVisualRect(control), + })); + return page.locator(`[data-module="${moduleId}"]`).evaluate( + (module, contract) => { + const frameNode = module.querySelector<HTMLElement>(".module-frame"); + const frame = frameNode?.getBoundingClientRect(); + if (!frame || !frameNode) return ["missing-module-frame"]; + const scaleX = frame.width / contract.assetSize.width; + const scaleY = frame.height / contract.assetSize.height; + const cssToViewportX = frame.width / Math.max(frameNode.offsetWidth, 1); + const cssToViewportY = frame.height / Math.max(frameNode.offsetHeight, 1); + const alpha = { + left: frame.left + contract.visibleAlpha.x * scaleX, + top: frame.top + contract.visibleAlpha.y * scaleY, + right: frame.left + (contract.visibleAlpha.x + contract.visibleAlpha.width) * scaleX, + bottom: frame.top + (contract.visibleAlpha.y + contract.visibleAlpha.height) * scaleY, + }; + const failures: string[] = []; + for (const expected of contract.controls) { + const candidates = Array.from( + module.querySelectorAll<HTMLElement>(`[data-param-id="${expected.paramId}"][role]`), + ); + const node = candidates.find((candidate) => { + if (expected.kind === "fader") return candidate.classList.contains("fader"); + return !candidate.classList.contains("fader"); + }); + if (!node) { + failures.push(`${expected.id}:missing-hit`); + continue; + } + const actual = node.getBoundingClientRect(); + const target = { + left: frame.left + expected.hit.x * scaleX, + top: frame.top + expected.hit.y * scaleY, + width: expected.hit.width * scaleX, + height: expected.hit.height * scaleY, + }; + const centreDelta = Math.hypot( + actual.left + actual.width / 2 - (target.left + target.width / 2), + actual.top + actual.height / 2 - (target.top + target.height / 2), + ); + if (centreDelta > 1.1 + || Math.abs(actual.width - target.width) > 1.1 + || Math.abs(actual.height - target.height) > 1.1) { + failures.push(`${expected.id}:hit-geometry`); + } + if (actual.left < alpha.left - 1 + || actual.top < alpha.top - 1 + || actual.right > alpha.right + 1 + || actual.bottom > alpha.bottom + 1) { + failures.push(`${expected.id}:hit-outside-painted-enclosure`); + } + + if (expected.kind !== "fader") { + let artwork = node.nextElementSibling as HTMLElement | null; + while (artwork && !artwork.classList.contains("asset-control")) { + artwork = artwork.nextElementSibling as HTMLElement | null; + } + if (!artwork) { + failures.push(`${expected.id}:missing-artwork`); + continue; + } + const artRect = artwork.getBoundingClientRect(); + const artStyle = getComputedStyle(artwork); + const untransformedWidth = Number.parseFloat(artStyle.width) * cssToViewportX; + const untransformedHeight = Number.parseFloat(artStyle.height) * cssToViewportY; + const visualTarget = { + left: frame.left + expected.visual.x * scaleX, + top: frame.top + expected.visual.y * scaleY, + width: expected.visual.width * scaleX, + height: expected.visual.height * scaleY, + }; + const visualCentreDelta = Math.hypot( + artRect.left + artRect.width / 2 - (visualTarget.left + visualTarget.width / 2), + artRect.top + artRect.height / 2 - (visualTarget.top + visualTarget.height / 2), + ); + if (visualCentreDelta > 1.1 + || Math.abs(untransformedWidth - visualTarget.width) > 1.1 + || Math.abs(untransformedHeight - visualTarget.height) > 1.1) { + failures.push( + `${expected.id}:artwork-geometry:` + + `${visualCentreDelta.toFixed(2)}:` + + `${untransformedWidth.toFixed(2)}x${untransformedHeight.toFixed(2)}:` + + `${visualTarget.width.toFixed(2)}x${visualTarget.height.toFixed(2)}`, + ); + } + if (artRect.left < alpha.left - 1 + || artRect.top < alpha.top - 1 + || artRect.right > alpha.right + 1 + || artRect.bottom > alpha.bottom + 1) { + failures.push(`${expected.id}:artwork-outside-painted-enclosure`); + } + } + } + return failures; + }, + { + assetSize: manifest.assetSize, + visibleAlpha: manifest.visibleAlphaBounds, + controls, + }, + ); +} + +test("approved Amp uses one control deck and retains all ten wrapper parameters", async ({ page }) => { + await page.setViewportSize({ width: 1366, height: 768 }); + const host = await openRackSection(page, "amp"); + const module = host.locator('[data-module="amp-head"]'); + + expect(await interactiveParamIds(page, "amp-head")) + .toEqual([...AMP_PARAM_IDS].sort()); + expect(await surfaceGeometryFailures(page, "amp-head")).toEqual({ + containment: [], + hitOverlaps: [], + labelOverlaps: [], + textOverflow: [], + }); + + const row = await module.locator("[data-param-id][role]").evaluateAll((nodes) => { + const centers = nodes.map((node) => { + const rect = node.getBoundingClientRect(); + return rect.top + rect.height / 2; + }); + return { + count: centers.length, + spread: Math.max(...centers) - Math.min(...centers), + }; + }); + expect(row).toEqual({ count: 10, spread: expect.any(Number) }); + expect(row.spread).toBeLessThanOrEqual(2); + await expect(module).not.toContainText(/\b(?:POST|MASTER)\b/i); + await expect(module.locator(".amp-gain-label-overlay")).toHaveCount(0); + await expect(module.locator('.module-skin[data-rack-design-asset-id="amp-head-body-v5"]')) + .toHaveCount(1); + const ampStatusLeds = module.locator( + '.asset-control.led[data-param-id][data-nam-exact-size-variant="panel-led"]', + ); + await expect(ampStatusLeds).toHaveCount(3); + for (const paramId of ["ampEnabled", "ampBoost", "ampVoice"] as const) { + const toggle = module.locator(`[data-param-id="${paramId}"][role="switch"]`); + const toggleArtwork = module.locator( + `.asset-control.toggle[data-param-id="${paramId}"]`, + ); + const led = module.locator(`.asset-control.led[data-param-id="${paramId}"]`); + await expect(toggle).toHaveCount(1); + await expect(toggleArtwork).toHaveCount(1); + await expect(led).toHaveCount(1); + const placement = await Promise.all([ + toggleArtwork.boundingBox(), + led.boundingBox(), + ]); + expect(placement[0]).not.toBeNull(); + expect(placement[1]).not.toBeNull(); + expect( + Math.abs( + placement[0]!.x + placement[0]!.width / 2 + - (placement[1]!.x + placement[1]!.width / 2), + ), + ).toBeLessThanOrEqual(1); + expect(placement[1]!.y + placement[1]!.height).toBeLessThan(placement[0]!.y); + } + await expect(module.locator('[data-param-id="ampGainDb"][role="slider"]')) + .toHaveAttribute("aria-label", /Capture Gain/i); + + const tight = module.locator('[data-param-id="ampBoost"][role="switch"]'); + await expect(tight).toHaveAttribute("aria-checked", "false"); + await expect(module.locator('.asset-control.led[data-param-id="ampBoost"]')) + .toHaveAttribute("data-rack-design-asset-id", "led-amber-off-panel-v4"); + await tight.focus(); + await page.keyboard.press("Enter"); + await expect(tight).toHaveAttribute("aria-checked", "true"); + await expect(module.locator('.asset-control.led[data-param-id="ampBoost"]')) + .toHaveAttribute("data-rack-design-asset-id", "led-amber-on-panel-v4"); + + const bass = module.locator('[data-param-id="bassDb"][role="slider"]'); + await bass.focus(); + await page.keyboard.press("End"); + await expect(bass).toHaveAttribute("aria-valuenow", "12"); + await expect.poll(async () => (await readRackValues(page)).ampBoost).toBe(1); + await expect.poll(async () => (await readRackValues(page)).bassDb).toBe(12); +}); + +test("approved post-cab EQ has nine faders and a three-rotary utility tier", async ({ page }) => { + await page.setViewportSize({ width: 1366, height: 768 }); + const host = await openRackSection(page, "eq"); + const module = host.locator('[data-module="eq-rack"]'); + + const background = await host.locator('.premium-stage-canvas[data-design-section="eq"]').evaluate( + (canvas) => ({ + ownImage: getComputedStyle(canvas).backgroundImage, + beforeImage: getComputedStyle(canvas, "::before").backgroundImage, + afterDisplay: getComputedStyle(canvas, "::after").display, + }), + ); + expect(background.ownImage).toContain("rack-studio-backdrop-v2"); + expect(background.beforeImage).not.toBe("none"); + expect(background.afterDisplay).not.toBe("none"); + const moduleSkin = module.locator(".module-skin"); + await expect(moduleSkin).toHaveCount(1); + await expect(moduleSkin).toHaveAttribute("data-rack-design-asset-id", "graphic-eq-body-v6"); + + expect(await interactiveParamIds(page, "eq-rack")) + .toEqual([...POST_EQ_PARAM_IDS].sort()); + expect(await surfaceGeometryFailures(page, "eq-rack")).toEqual({ + containment: [], + hitOverlaps: [], + labelOverlaps: [], + textOverflow: [], + }); + await expect(module.locator(".fader[data-param-id]")).toHaveCount(9); + for (const paramId of POST_EQ_BAND_IDS) { + await expect(module.locator(`.fader[data-param-id="${paramId}"]`)).toHaveCount(1); + } + await expect(module.locator('.fader[data-param-id="eqLevelDb"]')).toHaveCount(0); + for (const paramId of ["eqHPFHz", "eqLevelDb", "eqLPFHz"] as const) { + await expect(module.locator(`[data-param-id="${paramId}"][role="slider"]`)).toHaveCount(1); + } + await expect(module.locator(".eq-filter-readout")).toHaveCount(0); + await expect(module).not.toContainText("ACTIVE"); + + const level = module.locator('[data-param-id="eqLevelDb"][role="slider"]'); + await level.focus(); + await page.keyboard.press("End"); + await expect(level).toHaveAttribute("aria-valuenow", "12"); + const hpf = module.locator('[data-param-id="eqHPFHz"][role="slider"]'); + await hpf.focus(); + await page.keyboard.press("Home"); + await expect(hpf).toHaveAttribute("aria-valuetext", "OFF"); + await expect.poll(async () => (await readRackValues(page)).eqLevelDb).toBe(12); + await expect.poll(async () => (await readRackValues(page)).eqHPFHz).toBe(0); +}); + +test("Amp, EQ, EQ Boost, and Drive hardware remain inside their painted borders at every supported host size", async ({ page }) => { + // This matrix performs 15 full detached-editor navigations (three rack + // sections at five viewport sizes). Cold Windows CI workers can complete + // every mount and assertion correctly while exceeding Playwright's 30 s + // default whole-test budget. + test.setTimeout(90_000); + + const viewports = [ + { width: 920, height: 760 }, + { width: 1024, height: 700 }, + { width: 1366, height: 768 }, + { width: 1920, height: 1080 }, + { width: 3840, height: 2160 }, + ]; + + for (const viewport of viewports) { + await page.setViewportSize(viewport); + await openRackSection(page, "amp"); + expect( + await manifestProjectionFailures( + page, + "amp-head", + NAM_AMP_V4_FACEPLATE, + ["amp-power-led", "amp-tight-led", "amp-bright-led"], + ), + `Amp geometry at ${viewport.width}x${viewport.height}`, + ).toEqual([]); + + await openRackSection(page, "eq"); + expect( + await manifestProjectionFailures( + page, + "eq-rack", + NAM_EQ_V4_FACEPLATE, + // Power and its passive status LED intentionally share eqEnabled, so + // this generic param-id matcher cannot distinguish their hit nodes. + ["eq-led"], + ), + `EQ geometry at ${viewport.width}x${viewport.height}`, + ).toEqual([]); + + await openRackSection(page, "pre"); + expect( + await surfaceGeometryFailures(page, "eq-boost"), + `EQ Boost geometry at ${viewport.width}x${viewport.height}`, + ).toEqual({ + containment: [], + hitOverlaps: [], + labelOverlaps: [], + textOverflow: [], + }); + expect( + await surfaceGeometryFailures(page, "precision-drive"), + `Precision Drive geometry at ${viewport.width}x${viewport.height}`, + ).toEqual({ + containment: [], + hitOverlaps: [], + labelOverlaps: [], + textOverflow: [], + }); + } +}); + +test("compact-height hosts keep the rack frame symmetric without losing vertical scrolling", async ({ page }) => { + for (const height of [688, 699, 700]) { + await page.setViewportSize({ width: 360, height }); + const host = await openRackSection(page, "pre"); + const metrics = await host.evaluate((root) => { + const shell = root.querySelector<HTMLElement>(".premium-nam-shell"); + if (!shell) throw new Error("Missing premium NAM shell"); + const rootRect = root.getBoundingClientRect(); + const shellRect = shell.getBoundingClientRect(); + const style = getComputedStyle(root); + const maxScrollTop = Math.max(0, root.scrollHeight - root.clientHeight); + root.scrollTop = Math.min(12, maxScrollTop); + return { + clientWidth: root.clientWidth, + renderedWidth: rootRect.width, + scrollWidth: root.scrollWidth, + scrollHeight: root.scrollHeight, + clientHeight: root.clientHeight, + scrollTop: root.scrollTop, + leftInset: shellRect.left - rootRect.left, + rightInset: rootRect.right - shellRect.right, + overflowY: style.overflowY, + scrollbarGutter: style.scrollbarGutter, + scrollbarWidth: style.scrollbarWidth, + documentOverflow: + document.documentElement.scrollWidth + - document.documentElement.clientWidth, + }; + }); + + expect(metrics.clientWidth).toBeCloseTo(metrics.renderedWidth, 1); + expect(metrics.scrollWidth).toBe(metrics.clientWidth); + expect(metrics.leftInset).toBeCloseTo(metrics.rightInset, 1); + expect(metrics.documentOverflow).toBe(0); + + if (height < 700) { + expect(metrics.scrollHeight).toBeGreaterThan(metrics.clientHeight); + expect(metrics.scrollTop).toBeGreaterThan(0); + expect(metrics.overflowY).toBe("auto"); + expect(metrics.scrollbarGutter).toBe("auto"); + expect(metrics.scrollbarWidth).toBe("none"); + } else { + expect(metrics.scrollHeight).toBe(metrics.clientHeight); + expect(metrics.overflowY).toBe("hidden"); + } + } +}); + +test("EQ Boost and Drive expose separate controls without collisions", async ({ page }) => { + await page.setViewportSize({ width: 1366, height: 768 }); + await openRackSection(page, "pre"); + const eqBoost = page.locator('[data-module="eq-boost"]'); + const drive = page.locator('[data-module="precision-drive"]'); + + expect(await interactiveParamIds(page, "eq-boost")).toEqual([...PRE_EQ_PARAM_IDS].sort()); + expect(await interactiveParamIds(page, "precision-drive")).toEqual([...DRIVE_PARAM_IDS].sort()); + expect(await interactiveParamIds(page, "eq-boost")).toHaveLength(11); + expect(await interactiveParamIds(page, "precision-drive")).toHaveLength(6); + await expect(eqBoost.locator('[data-param-id="preEqLevelDb"]')).toHaveCount(0); + await expect(drive.locator('[data-param-id^="preEq"]')).toHaveCount(0); + await expect(eqBoost.locator('[data-param-id^="precisionDrive"]')).toHaveCount(0); + expect(await surfaceGeometryFailures(page, "eq-boost")).toEqual({ + containment: [], + hitOverlaps: [], + labelOverlaps: [], + textOverflow: [], + }); + expect(await surfaceGeometryFailures(page, "precision-drive")).toEqual({ + containment: [], + hitOverlaps: [], + labelOverlaps: [], + textOverflow: [], + }); + + await expect(eqBoost.locator(".combined-pre-eq-band-label")).toHaveCount(8); + await expect(eqBoost).toContainText("120"); + await expect(eqBoost).toContainText("2.5K"); + await expect(eqBoost).toContainText("12K"); + const bandAlignment = await eqBoost.locator(".combined-pre-eq-band").evaluateAll((rows) => ( + rows.map((row) => { + const label = row.querySelector<HTMLElement>(".combined-pre-eq-band-label"); + const track = row.querySelector<HTMLElement>(".horizontal-mini-fader-track"); + if (!label || !track) throw new Error("Incomplete EQ Boost band row"); + const labelRect = label.getBoundingClientRect(); + const trackRect = track.getBoundingClientRect(); + return { + gap: trackRect.left - labelRect.right, + verticalDelta: Math.abs( + labelRect.top + labelRect.height / 2 + - (trackRect.top + trackRect.height / 2), + ), + }; + }) + )); + expect(bandAlignment).toHaveLength(8); + for (const row of bandAlignment) { + expect(row.gap).toBeGreaterThanOrEqual(3); + expect(row.gap).toBeLessThanOrEqual(5); + expect(row.verticalDelta).toBeLessThanOrEqual(0.5); + } + const titleAlignment = await page.evaluate(() => { + const read = (moduleId: string) => { + const module = document.querySelector<HTMLElement>(`[data-module="${moduleId}"]`); + const title = module?.querySelector<HTMLElement>(".module-title"); + if (!module || !title) throw new Error(`Missing title for ${moduleId}`); + const moduleRect = module.getBoundingClientRect(); + const titleRect = title.getBoundingClientRect(); + return (titleRect.top + titleRect.height / 2 - moduleRect.top) / moduleRect.height; + }; + return { + compressor: read("compressor"), + eqBoost: read("eq-boost"), + distortion: read("distortion"), + }; + }); + expect(titleAlignment.eqBoost).toBeCloseTo(titleAlignment.compressor, 2); + expect(titleAlignment.eqBoost).toBeCloseTo(titleAlignment.distortion, 2); + + for (const paramId of PRE_EQ_PARAM_IDS.slice(1, 9)) { + await expect(eqBoost.locator(`[data-param-id="${paramId}"][role="slider"]`)).toHaveCount(1); + } + const firstBand = eqBoost.locator('[data-param-id="preEq120Db"][role="slider"]'); + await firstBand.focus(); + await page.keyboard.press("End"); + await expect(firstBand).toHaveAttribute("aria-valuenow", "12"); + await firstBand.hover(); + await expect(page.locator(".nam-rack-control-tooltip")).toBeVisible(); + await expect(page.locator(".nam-rack-control-tooltip")).toContainText("dB"); + + const preEqPower = eqBoost.locator('[data-param-id="preEqEnabled"][role="button"]'); + const drivePower = drive.locator('[data-param-id="precisionDriveEnabled"][role="button"]'); + await expect(preEqPower).toHaveAttribute("aria-pressed", "false"); + await expect(drivePower).toHaveAttribute("aria-pressed", "false"); + await preEqPower.focus(); + await page.keyboard.press("Enter"); + await expect(preEqPower).toHaveAttribute("aria-pressed", "true"); + await expect(drivePower).toHaveAttribute("aria-pressed", "false"); + await drivePower.focus(); + await page.keyboard.press("Enter"); + await expect(preEqPower).toHaveAttribute("aria-pressed", "true"); + await expect(drivePower).toHaveAttribute("aria-pressed", "true"); + + await expect.poll(async () => (await readRackValues(page)).preEq120Db).toBe(12); + await expect.poll(async () => (await readRackValues(page)).preEqEnabled).toBe(1); + await expect.poll(async () => (await readRackValues(page)).precisionDriveEnabled).toBe(1); + + const footStateStyles = await page.locator(".primary-foot-state").evaluateAll((nodes) => ( + nodes.map((node) => { + const style = getComputedStyle(node); + return { + backgroundColor: style.backgroundColor, + borderStyle: style.borderStyle, + borderRadius: style.borderRadius, + boxShadow: style.boxShadow, + paddingLeft: style.paddingLeft, + paddingRight: style.paddingRight, + }; + }) + )); + for (const style of footStateStyles) { + expect(style).toEqual({ + backgroundColor: "rgba(0, 0, 0, 0)", + borderStyle: "none", + borderRadius: "0px", + boxShadow: "none", + paddingLeft: "0px", + paddingRight: "0px", + }); + } +}); + +test("PRE row keeps five sibling pedals visible without horizontal scrolling", async ({ page }) => { + await page.setViewportSize({ width: 920, height: 760 }); + const host = await openRackSection(page, "pre"); + const expectedBoxes = { + compressor: { x: 85, y: 42, w: 156, h: 232 }, + octaver: { x: 251, y: 42, w: 120, h: 232 }, + "eq-boost": { x: 381, y: 42, w: 156, h: 232 }, + "precision-drive": { x: 547, y: 42, w: 120, h: 232 }, + distortion: { x: 677, y: 42, w: 156, h: 232 }, + } as const; + + const metrics = await host.evaluate((root, expected) => { + const artboard = root.querySelector<HTMLElement>(".nam-rack-artboard"); + if (!artboard) throw new Error("Missing PRE artboard"); + const modules = Object.fromEntries(Object.entries(expected).map(([id, box]) => { + const node = root.querySelector<HTMLElement>(`[data-module="${id}"]`); + if (!node) throw new Error(`Missing PRE module ${id}`); + const rect = node.getBoundingClientRect(); + return [id, { + logical: { + x: Number.parseFloat(node.style.left), + y: Number.parseFloat(node.style.top), + w: Number.parseFloat(node.style.width), + h: Number.parseFloat(node.style.height), + }, + rendered: { + left: rect.left, + right: rect.right, + width: rect.width, + height: rect.height, + }, + scaleX: rect.width / box.w, + scaleY: rect.height / box.h, + snapAlign: getComputedStyle(node).scrollSnapAlign, + }]; + })); + const scroller = root.querySelector<HTMLElement>('[data-qa="nam-pre-stage-scroll"]'); + if (!scroller) throw new Error("Missing local PRE row viewport"); + const scrollerRect = scroller.getBoundingClientRect(); + return { + artboardWidth: Number.parseFloat(getComputedStyle(artboard).width), + artboardHeight: Number.parseFloat(getComputedStyle(artboard).height), + modules, + scroller: { + clientWidth: scroller.clientWidth, + scrollWidth: scroller.scrollWidth, + scrollLeft: scroller.scrollLeft, + snapType: getComputedStyle(scroller).scrollSnapType, + overflowX: getComputedStyle(scroller).overflowX, + required: scroller.dataset.scrollRequired, + left: scrollerRect.left, + right: scrollerRect.right, + }, + rootPageOverflow: document.documentElement.scrollWidth > document.documentElement.clientWidth + 1, + }; + }, expectedBoxes); + + expect(metrics.artboardWidth).toBeCloseTo(918, 1); + expect(metrics.artboardHeight).toBeCloseTo(341, 1); + expect(metrics.rootPageOverflow).toBe(false); + expect(metrics.scroller.scrollWidth - metrics.scroller.clientWidth).toBeLessThanOrEqual(2); + expect(metrics.scroller.scrollLeft).toBe(0); + expect(metrics.scroller.snapType).toBe("none"); + expect(metrics.scroller.overflowX).toBe("hidden"); + expect(metrics.scroller.required).toBe("false"); + for (const [id, expected] of Object.entries(expectedBoxes)) { + const got = metrics.modules[id as keyof typeof metrics.modules]; + expect(got.logical).toEqual(expected); + expect(got.scaleX).toBeCloseTo(got.scaleY, 2); + expect(got.snapAlign).not.toBe(""); + } + const scaleValues = Object.values(metrics.modules).map((module) => module.scaleX); + expect(Math.max(...scaleValues) - Math.min(...scaleValues)).toBeLessThan(0.01); + const ordered = Object.values(metrics.modules); + for (let index = 1; index < ordered.length; index += 1) { + const logicalGap = (ordered[index].rendered.left - ordered[index - 1].rendered.right) + / ordered[index].scaleX; + expect(logicalGap).toBeCloseTo(10, 1); + } + await expect(host.locator(".nam-pre-stage-snap-anchor")).toHaveCount(5); + const compressorFootPadding = await host.locator('[data-module="compressor"]').evaluate((module) => { + const foot = module.querySelector<HTMLElement>( + '.asset-control.footswitch[data-param-id="compressorEnabled"]', + ); + if (!foot) throw new Error("Missing compressor footswitch artwork"); + const moduleRect = module.getBoundingClientRect(); + const footRect = foot.getBoundingClientRect(); + return { + gap: moduleRect.right - footRect.right, + designScale: moduleRect.width / 156, + }; + }); + expect(compressorFootPadding.gap / compressorFootPadding.designScale) + .toBeGreaterThanOrEqual(20); + await host.locator('[data-param-id="chaosTone"][role="slider"]').focus(); + await expect.poll(() => host.locator('[data-qa="nam-pre-stage-scroll"]').evaluate( + (scroller) => scroller.scrollLeft, + )).toBe(0); +}); diff --git a/frontend/e2e/profile-onboarding.spec.ts b/frontend/e2e/profile-onboarding.spec.ts new file mode 100644 index 0000000..3f143d2 --- /dev/null +++ b/frontend/e2e/profile-onboarding.spec.ts @@ -0,0 +1,314 @@ +import { expect, test } from "@playwright/test"; + +const PROFILE_SETTINGS_KEY = "openstudio.inputProfiles.v1"; +const CUSTOM_KEYBOARD_PROFILES_KEY = "openstudio.keyboardProfiles.v2"; +const MOUSE_MODIFIER_OVERRIDES_KEY = "openstudio.mouseModifierOverrides.v1"; +const IS_MAC_HOST = process.platform === "darwin"; +const PRIMARY_KEY = IS_MAC_HOST ? "Meta" : "Control"; +const PRIMARY_LABEL = IS_MAC_HOST ? "Cmd" : "Ctrl"; +const HOST_OVERRIDE_TARGET = IS_MAC_HOST ? "macos" : "windows"; + +test.beforeEach(async ({ page }) => { + await page.goto("/"); + await page.evaluate(({ settingsKey, customProfilesKey, mouseOverridesKey }) => { + localStorage.removeItem(settingsKey); + localStorage.removeItem(customProfilesKey); + localStorage.removeItem(mouseOverridesKey); + localStorage.removeItem("openstudio_essentialControlsDismissed"); + localStorage.removeItem("s13_customShortcuts"); + }, { + settingsKey: PROFILE_SETTINGS_KEY, + customProfilesKey: CUSTOM_KEYBOARD_PROFILES_KEY, + mouseOverridesKey: MOUSE_MODIFIER_OVERRIDES_KEY, + }); + await page.reload(); + await expect(page.getByRole("heading", { name: "Make OpenStudio feel familiar" })).toBeVisible(); +}); + +test("first-run chooser remains usable in a compact viewport", async ({ page }) => { + await page.setViewportSize({ width: 390, height: 620 }); + const chooser = page.getByRole("region", { name: "Choose input profiles" }); + await expect(chooser).toBeVisible(); + const bounds = await chooser.boundingBox(); + expect(bounds).not.toBeNull(); + expect(bounds!.x).toBeGreaterThanOrEqual(0); + expect(bounds!.y).toBeGreaterThanOrEqual(0); + expect(bounds!.x + bounds!.width).toBeLessThanOrEqual(390); + expect(bounds!.y + bounds!.height).toBeLessThanOrEqual(620); + + await page.getByLabel("Keyboard profile").selectOption("reaper"); + await page.getByLabel("Mouse & scroll profile").selectOption("logic_pro"); + await expect(page.getByLabel("Keyboard profile")).toHaveValue("reaper"); + await expect(page.getByLabel("Mouse & scroll profile")).toHaveValue("logic_pro"); +}); + +test("chooser exposes the additional platform-qualified DAW profiles", async ({ page }) => { + const keyboard = page.getByLabel("Keyboard profile"); + const mouse = page.getByLabel("Mouse & scroll profile"); + for (const [value, label] of [ + ["cakewalk_sonar", IS_MAC_HOST ? "Cakewalk / Sonar (cross-platform emulation)" : "Cakewalk / Sonar"], + ["garageband", IS_MAC_HOST ? "GarageBand" : "GarageBand (cross-platform emulation)"], + ["digital_performer", "Digital Performer"], + ["adobe_audition", "Adobe Audition"], + ["mixcraft", IS_MAC_HOST ? "Mixcraft (cross-platform emulation)" : "Mixcraft"], + ["waveform", "Waveform"], + ["renoise", "Renoise"], + ] as const) { + await expect(keyboard.locator(`option[value="${value}"]`)).toHaveText(label); + await expect(mouse.locator(`option[value="${value}"]`)).toHaveText(label); + } + + await keyboard.selectOption("cakewalk_sonar"); + await mouse.selectOption("digital_performer"); + await expect(keyboard).toHaveValue("cakewalk_sonar"); + await expect(mouse).toHaveValue("digital_performer"); +}); + +test("first-run profile choices persist independently across reload", async ({ page }) => { + await page.getByLabel("Keyboard profile").selectOption("reaper"); + await page.getByLabel("Mouse & scroll profile").selectOption("logic_pro"); + await page.getByRole("button", { name: "Use these profiles" }).click(); + + await expect(page.getByRole("region", { name: "Choose input profiles" })).toBeHidden(); + const persisted = await page.evaluate((settingsKey) => ( + JSON.parse(localStorage.getItem(settingsKey) ?? "{}") + ), PROFILE_SETTINGS_KEY); + expect(persisted).toMatchObject({ + schemaVersion: 1, + keyboardProfileId: "reaper", + mouseProfileId: "logic_pro", + onboardingSeen: true, + }); + + await page.reload(); + await expect(page.getByRole("heading", { name: "Make OpenStudio feel familiar" })).toHaveCount(0); +}); + +test("Review shortcuts carries selections into the full editor", async ({ page }) => { + await page.getByLabel("Keyboard profile").selectOption("pro_tools"); + await page.getByLabel("Mouse & scroll profile").selectOption("cubase"); + await page.getByRole("button", { name: "Review shortcuts" }).click(); + + const dialog = page.getByRole("dialog", { name: "Keyboard Shortcuts" }); + await expect(dialog).toBeVisible(); + await expect(dialog.getByLabel("Keyboard profile")).toHaveValue("pro_tools"); + await expect(dialog.getByLabel("Mouse & scroll profile")).toHaveValue("cubase"); + await expect(dialog.getByText(/Scoped bindings apply only in their named editors/)).toBeVisible(); + const recordRow = dialog.getByTitle("Record").locator(".."); + await expect(recordRow.getByText(`${PRIMARY_LABEL}+Space`, { exact: true })).toBeVisible(); + await expect(recordRow.getByText("F12", { exact: true })).toBeVisible(); +}); + +test("shortcut rows expose actions, unassigned state, rebinding status, and all scopes", async ({ page }) => { + await page.getByLabel("Keyboard profile").selectOption("pro_tools"); + await page.getByRole("button", { name: "Review shortcuts" }).click(); + + const dialog = page.getByRole("dialog", { name: "Keyboard Shortcuts" }); + const search = dialog.getByLabel("Search keyboard shortcuts"); + await search.fill("Split Tool"); + const splitAction = dialog.getByRole("button", { name: "Split Tool", exact: true }); + await expect(splitAction).toBeVisible(); + const splitRow = splitAction.locator(".."); + await expect(splitRow.getByText("Unassigned", { exact: true })).toBeVisible(); + + const rebind = splitRow.getByRole("button", { name: "Rebind Split Tool" }); + await rebind.focus(); + await expect(rebind).toBeFocused(); + await rebind.click(); + const captureStatus = dialog + .getByRole("status") + .filter({ hasText: "Press a key combination" }); + await expect(captureStatus).toBeVisible(); + await page.keyboard.press("Escape"); + await expect(captureStatus).toHaveCount(0); + + await search.fill("Mute / Unmute Selected Tracks"); + const multiScopeRow = dialog + .getByRole("button", { name: "Mute / Unmute Selected Tracks", exact: true }) + .locator(".."); + await expect(multiScopeRow.getByText("Track Control Panel, Mixer", { exact: true })).toBeVisible(); +}); + +test("profile-specific selected-track commands advertise their Timeline scope", async ({ page }) => { + await page.getByLabel("Keyboard profile").selectOption("garageband"); + await page.getByRole("button", { name: "Review shortcuts" }).click(); + + const dialog = page.getByRole("dialog", { name: "Keyboard Shortcuts" }); + await dialog.getByLabel("Search keyboard shortcuts").fill("Mute / Unmute Selected Tracks"); + const row = dialog + .getByRole("button", { name: "Mute / Unmute Selected Tracks", exact: true }) + .locator(".."); + await expect(row.getByText("Track Control Panel, Mixer, Timeline", { exact: true })).toBeVisible(); + await expect(row.getByText("M", { exact: true })).toBeVisible(); +}); + +test("selected mouse profile updates essential controls and help without reload", async ({ page }) => { + await page.getByLabel("Mouse & scroll profile").selectOption("reaper"); + await page.getByRole("button", { name: "Use these profiles" }).click(); + + const essentials = page.getByRole("complementary", { name: "Navigate the timeline quickly" }); + await expect(essentials).toContainText("REAPER mouse profile"); + await expect(essentials).toContainText("Scroll: zoom the timeline"); + await essentials.getByRole("button", { name: "Open Help" }).click(); + + const help = page.getByRole("dialog", { name: "Help Reference" }); + await expect(help).toContainText("REAPER: Scroll zoom the timeline"); + await expect(help).toContainText("REAPER mouse"); + await expect(help.getByLabel("Search help topics")).toBeFocused(); + await page.keyboard.press("Escape"); + await expect(help).toBeHidden(); +}); + +test("Preferences persists mouse profile and per-gesture override changes", async ({ page }) => { + await page.getByRole("button", { name: "Use these profiles" }).click(); + await page.getByRole("menuitem", { name: "Options menu" }).click(); + await page.getByRole("menuitem", { name: /Preferences/ }).click(); + + let dialog = page.getByRole("dialog", { name: "Preferences" }); + const generalTab = dialog.getByRole("tab", { name: "General" }); + await generalTab.focus(); + await generalTab.press("ArrowRight"); + await expect(dialog.getByRole("tab", { name: "Editing" })).toHaveAttribute("aria-selected", "true"); + + await dialog.getByRole("tab", { name: "Mouse" }).click(); + await expect(dialog.getByRole("table", { name: /Mouse modifier actions/ })).toBeVisible(); + await expect(dialog.getByLabel("Clip Drag, Click action")).toBeVisible(); + await dialog.getByLabel("Mouse & scroll profile").selectOption("logic_pro"); + await dialog.getByLabel("Clip Drag, Click action").selectOption("copy"); + await dialog.getByRole("button", { name: "Close", exact: true }).click(); + + await page.reload(); + await page.getByRole("menuitem", { name: "Options menu" }).click(); + await page.getByRole("menuitem", { name: /Preferences/ }).click(); + dialog = page.getByRole("dialog", { name: "Preferences" }); + await dialog.getByRole("tab", { name: "Mouse" }).click(); + await expect(dialog.getByLabel("Mouse & scroll profile")).toHaveValue("logic_pro"); + await expect(dialog.getByLabel("Clip Drag, Click action")).toHaveValue("copy"); + const persistedOverrides = await page.evaluate((storageKey) => ( + JSON.parse(localStorage.getItem(storageKey) ?? "{}") + ), MOUSE_MODIFIER_OVERRIDES_KEY); + expect(persistedOverrides).toMatchObject({ + schemaVersion: 1, + overrides: { clip_drag: { none: "copy" } }, + }); +}); + +test("selected profile updates shortcut hints outside the shortcut editor", async ({ page }) => { + await page.getByLabel("Keyboard profile").selectOption("pro_tools"); + await page.getByRole("button", { name: "Use these profiles" }).click(); + + await expect(page.getByTitle(`Toggle Mixer (${PRIMARY_LABEL}+=)`)).toBeVisible(); + await expect(page.getByTitle("Select Tool (Timeline: F7)")).toBeVisible(); +}); + +test("profile commands respect active timeline context and disabled native collisions", async ({ page }) => { + await page.getByLabel("Keyboard profile").selectOption("pro_tools"); + await page.getByRole("button", { name: "Use these profiles" }).click(); + + const splitTool = page.getByRole("button", { name: "Split Tool" }); + const selectTool = page.getByRole("button", { name: "Select Tool" }); + await splitTool.click(); + await expect(splitTool).toHaveAttribute("aria-pressed", "true"); + + await page.locator(".timeline-container").click({ position: { x: 300, y: 120 } }); + await page.keyboard.press("F6"); + await expect(splitTool).toHaveAttribute("aria-pressed", "true"); + await page.keyboard.press("F7"); + await expect(selectTool).toHaveAttribute("aria-pressed", "true"); +}); + +test("real timeline wheel uses the selected REAPER modifier map", async ({ page }) => { + await page.getByLabel("Mouse & scroll profile").selectOption("reaper"); + await page.getByRole("button", { name: "Use these profiles" }).click(); + await page.getByRole("button", { name: "Add new audio track" }).click(); + + const trackHeader = page.locator('[data-track-id] [data-shortcut-context="track_control_panel"]').first(); + await expect(trackHeader).toBeVisible(); + const initialHeight = (await trackHeader.boundingBox())?.height ?? 0; + expect(initialHeight).toBeGreaterThan(0); + + await page.locator(".timeline-container").dispatchEvent("wheel", { + deltaY: -100, + ctrlKey: !IS_MAC_HOST, + metaKey: IS_MAC_HOST, + bubbles: true, + cancelable: true, + }); + await expect.poll(async () => (await trackHeader.boundingBox())?.height ?? 0).toBeGreaterThan(initialHeight); +}); + +test("real mixer parameter controls own normal and fine wheel adjustment", async ({ page }) => { + await page.getByRole("button", { name: "Use these profiles" }).click(); + const pan = page.getByRole("slider", { name: /Pan for/i }).first(); + await expect(pan).toBeVisible(); + const initial = Number(await pan.getAttribute("aria-valuenow")); + + await pan.dispatchEvent("wheel", { deltaY: -100, cancelable: true, bubbles: true }); + await expect.poll(async () => Number(await pan.getAttribute("aria-valuenow"))).toBeGreaterThan(initial); + const afterNormal = Number(await pan.getAttribute("aria-valuenow")); + + await pan.dispatchEvent("wheel", { + deltaY: -100, + shiftKey: true, + cancelable: true, + bubbles: true, + }); + await expect.poll(async () => Number(await pan.getAttribute("aria-valuenow"))).toBeGreaterThan(afterNormal); + const afterFine = Number(await pan.getAttribute("aria-valuenow")); + expect(afterFine - afterNormal).toBeLessThan(afterNormal - initial); +}); + +test("named profiles keep multiple keys, platform unbinds, persistence, and export", async ({ page }) => { + await page.getByRole("button", { name: "Review shortcuts" }).click(); + const dialog = page.getByRole("dialog", { name: "Keyboard Shortcuts" }); + + const nameInput = dialog.getByLabel("Profile name", { exact: true }); + await nameInput.fill("Editing Keys"); + await dialog.getByRole("button", { name: "New", exact: true }).click(); + await expect(dialog.getByLabel("Keyboard profile").locator("option:checked")) + .toHaveText("Custom - Editing Keys"); + + await dialog.getByLabel("Search keyboard shortcuts").fill("Play / Pause"); + const playRow = dialog.getByRole("button", { name: "Play / Pause", exact: true }).locator(".."); + await playRow.getByRole("button", { name: "Rebind Play / Pause" }).click(); + await page.keyboard.press(`${PRIMARY_KEY}+Shift+F10`); + await expect(playRow.getByText(`${PRIMARY_LABEL}+Shift+F10`, { exact: true })).toBeVisible(); + + await playRow.getByRole("button", { name: "Rebind Play / Pause" }).click(); + await page.keyboard.press(`${PRIMARY_KEY}+Shift+F11`); + await expect(playRow.getByText(`${PRIMARY_LABEL}+Shift+F11`, { exact: true })).toBeVisible(); + + await dialog.getByLabel("Edit overrides for").selectOption(HOST_OVERRIDE_TARGET); + await playRow.getByRole("button", { name: "Disable" }).click(); + await expect(playRow.getByText("Disabled here", { exact: true })).toBeVisible(); + await expect(playRow.getByText("Unassigned (custom)", { exact: true })).toBeVisible(); + + const persisted = await page.evaluate((storageKey) => ( + JSON.parse(localStorage.getItem(storageKey) ?? "{}") + ), CUSTOM_KEYBOARD_PROFILES_KEY); + expect(persisted).toMatchObject({ + schemaVersion: 2, + profiles: [{ + name: "Editing Keys", + bindings: { + "transport.play": { + common: ["Ctrl+Shift+F10", "Ctrl+Shift+F11"], + [HOST_OVERRIDE_TARGET]: [], + }, + }, + }], + }); + + const downloadPromise = page.waitForEvent("download"); + await dialog.getByRole("button", { name: "Export", exact: true }).click(); + const download = await downloadPromise; + expect(download.suggestedFilename()).toBe("Editing-Keys.json"); + + await dialog.getByRole("button", { name: "Close", exact: true }).click(); + await page.reload(); + await page.getByRole("menuitem", { name: "Help menu" }).click(); + await page.getByRole("menuitem", { name: "Keyboard Shortcuts" }).click(); + const reopened = page.getByRole("dialog", { name: "Keyboard Shortcuts" }); + await expect(reopened.getByLabel("Keyboard profile").locator("option:checked")) + .toHaveText("Custom - Editing Keys"); +}); diff --git a/frontend/e2e/shortcut-foundations.spec.ts b/frontend/e2e/shortcut-foundations.spec.ts new file mode 100644 index 0000000..43c432c --- /dev/null +++ b/frontend/e2e/shortcut-foundations.spec.ts @@ -0,0 +1,305 @@ +import { expect, test, type Page } from "@playwright/test"; + +const PRIMARY_KEY = process.platform === "darwin" ? "Meta" : "Control"; + +interface SyntheticKeyOptions { + key: string; + code?: string; + location?: number; + ctrlKey?: boolean; + metaKey?: boolean; + altKey?: boolean; + shiftKey?: boolean; +} + +interface SyntheticWheelOptions { + deltaX?: number; + deltaY?: number; + deltaMode?: number; + ctrlKey?: boolean; + metaKey?: boolean; + altKey?: boolean; + shiftKey?: boolean; + clientX?: number; + clientY?: number; +} + +async function dispatchKey( + page: Page, + targetId: string, + options: SyntheticKeyOptions, +): Promise<{ dispatchReturned: boolean; defaultPrevented: boolean }> { + return page.evaluate( + ({ id, init }) => window.dispatchHarnessKey(id, init), + { id: targetId, init: options }, + ); +} + +async function dispatchWheel( + page: Page, + targetId: string, + options: SyntheticWheelOptions, +): Promise<{ + dispatch: { dispatchReturned: boolean; defaultPrevented: boolean }; + resolved: Record<string, unknown>; +}> { + return page.evaluate(({ id, init }) => { + const dispatch = window.dispatchHarnessWheel(id, init); + const raw = document.getElementById(id)?.dataset.lastWheelResult; + if (!raw) throw new Error(`No wheel result for ${id}`); + return { dispatch, resolved: JSON.parse(raw) as Record<string, unknown> }; + }, { id: targetId, init: options }); +} + +test.beforeEach(async ({ page }) => { + await page.goto("/shortcut-e2e.html"); + await expect(page.getByRole("heading", { name: "Shortcut and wheel test harness" })).toBeVisible(); +}); + +test("text inputs retain editing shortcuts and ordinary typing", async ({ page }) => { + const input = page.getByRole("textbox", { name: "Text input" }); + await input.focus(); + await page.keyboard.press(`${PRIMARY_KEY}+a`); + + await expect.poll(() => input.evaluate((node) => ({ + start: (node as HTMLInputElement).selectionStart, + end: (node as HTMLInputElement).selectionEnd, + length: (node as HTMLInputElement).value.length, + }))).toEqual({ start: 0, end: 16, length: 16 }); + await expect(page.getByLabel("Last shortcut result")).toContainText('"handled":false'); + + await page.keyboard.type("replacement"); + await expect(input).toHaveValue("replacement"); + await expect(page.getByLabel("Context hit counts")).toHaveText( + '{"timeline":0,"piano_roll":0,"pitch_editor":0}', + ); +}); + +test("transport Space is reserved while sliders keep native arrow behavior", async ({ page }) => { + const button = page.getByRole("button", { name: "Native button" }); + await button.focus(); + await page.keyboard.press("Space"); + await expect(page.locator("#button-click-count")).toHaveText("0"); + await expect(page.getByLabel("Last shortcut result")).toContainText('"owner":"registry"'); + await expect(page.getByLabel("Last shortcut result")).toContainText('"actionId":"transport.play"'); + + const slider = page.getByRole("slider", { name: "Native range" }); + await slider.focus(); + await page.keyboard.press("ArrowRight"); + await expect(slider).toHaveValue("6"); + await expect(page.getByLabel("Context hit counts")).toHaveText( + '{"timeline":0,"piano_roll":0,"pitch_editor":0}', + ); +}); + +test("the most recently focused editor context owns the same shortcut", async ({ page }) => { + await page.getByLabel("Active shortcut binding").selectOption("X"); + + const cases = [ + { label: "Timeline surface", context: "timeline", counts: { timeline: 1, piano_roll: 0, pitch_editor: 0 } }, + { label: "Piano roll surface", context: "piano_roll:e2e-piano", counts: { timeline: 1, piano_roll: 1, pitch_editor: 0 } }, + { label: "Pitch editor surface", context: "pitch_editor", counts: { timeline: 1, piano_roll: 1, pitch_editor: 1 } }, + { label: "Timeline surface", context: "timeline", counts: { timeline: 2, piano_roll: 1, pitch_editor: 1 } }, + ] as const; + + for (const entry of cases) { + await page.getByRole("region", { name: entry.label }).focus(); + await expect(page.getByLabel("Active context")).toHaveText(entry.context); + await page.keyboard.press("x"); + await expect(page.getByLabel("Context hit counts")).toHaveText(JSON.stringify(entry.counts)); + } +}); + +test("Windows Control bindings work through the shared dispatcher", async ({ page }) => { + await page.getByLabel("Keyboard platform").selectOption("windows"); + await page.getByLabel("Active shortcut binding").selectOption("Ctrl+X"); + await page.getByRole("region", { name: "Timeline surface" }).focus(); + + await page.keyboard.press("Control+x"); + + await expect(page.getByLabel("Last shortcut result")).toContainText('"owner":"timeline"'); + await expect(page.getByLabel("Last shortcut result")).toContainText('"platform":"windows"'); + await expect(page.getByLabel("Context hit counts")).toContainText('"timeline":1'); +}); + +test("simulated macOS Command, Option, and physical Control stay distinct", async ({ page }) => { + await page.getByLabel("Keyboard platform").selectOption("macos"); + + const cases = [ + { + binding: "Command+X", + event: { key: "x", code: "KeyX", metaKey: true }, + }, + { + binding: "Option+Code:KeyX", + event: { key: "≈", code: "KeyX", altKey: true }, + }, + { + binding: "Control+X", + event: { key: "x", code: "KeyX", ctrlKey: true }, + }, + ] as const; + + for (const entry of cases) { + await page.getByLabel("Active shortcut binding").selectOption(entry.binding); + const dispatched = await dispatchKey(page, "pitch-surface", entry.event); + expect(dispatched).toEqual({ dispatchReturned: false, defaultPrevented: true }); + } + + await expect(page.getByLabel("Context hit counts")).toHaveText( + '{"timeline":0,"piano_roll":0,"pitch_editor":3}', + ); +}); + +test("the host operating system emits its native primary and secondary modifiers", async ({ page }) => { + const isMacHost = process.platform === "darwin"; + await page.getByLabel("Keyboard platform").selectOption(isMacHost ? "macos" : "windows"); + await page.getByRole("region", { name: "Timeline surface" }).focus(); + + await page.getByLabel("Active shortcut binding").selectOption( + isMacHost ? "Command+X" : "Ctrl+X", + ); + await page.keyboard.press(isMacHost ? "Meta+x" : "Control+x"); + await expect(page.getByLabel("Context hit counts")).toContainText('"timeline":1'); + + if (isMacHost) { + await page.getByLabel("Active shortcut binding").selectOption("Option+Code:KeyX"); + await page.keyboard.press("Alt+x"); + await page.getByLabel("Active shortcut binding").selectOption("Control+X"); + await page.keyboard.press("Control+x"); + await expect(page.getByLabel("Context hit counts")).toContainText('"timeline":3'); + } +}); + +test("physical key-position and numpad bindings do not collapse to labels", async ({ page }) => { + await page.getByLabel("Keyboard platform").selectOption("windows"); + await page.getByLabel("Active shortcut binding").selectOption("Control+Code:KeyZ"); + + const physical = await dispatchKey(page, "piano-surface", { + key: "y", + code: "KeyZ", + ctrlKey: true, + }); + expect(physical.defaultPrevented).toBe(true); + await expect(page.getByLabel("Context hit counts")).toContainText('"piano_roll":1'); + + await page.getByLabel("Active shortcut binding").selectOption("Numpad1"); + const topRow = await dispatchKey(page, "piano-surface", { + key: "1", + code: "Digit1", + location: 0, + }); + expect(topRow.defaultPrevented).toBe(false); + await expect(page.getByLabel("Context hit counts")).toContainText('"piano_roll":1'); + + const numpad = await dispatchKey(page, "piano-surface", { + key: "1", + code: "Numpad1", + location: 3, + }); + expect(numpad).toEqual({ dispatchReturned: false, defaultPrevented: true }); + await expect(page.getByLabel("Context hit counts")).toContainText('"piano_roll":2'); +}); + +test("timeline wheel precedence covers Windows modifier combinations", async ({ page }) => { + await page.getByLabel("Wheel platform").selectOption("windows"); + const cases = [ + { init: { deltaY: 10 }, rule: "timeline.native-scroll", prevented: false }, + { init: { deltaY: 10, ctrlKey: true }, rule: "timeline.horizontal-zoom", prevented: true }, + { init: { deltaY: 10, ctrlKey: true, shiftKey: true }, rule: "timeline.waveform-amplitude", prevented: true }, + { init: { deltaY: 10, altKey: true }, rule: "timeline.track-height", prevented: true }, + { init: { deltaY: 10, shiftKey: true }, rule: "timeline.horizontal-scroll", prevented: true }, + { init: { deltaY: 10, ctrlKey: true, altKey: true }, rule: "timeline.horizontal-zoom", prevented: true }, + { init: { deltaY: 10, ctrlKey: true, altKey: true, shiftKey: true }, rule: "timeline.waveform-amplitude", prevented: true }, + { init: { deltaY: 10, metaKey: true }, rule: "timeline.native-scroll", prevented: false }, + ] as const; + + for (const entry of cases) { + const { dispatch, resolved } = await dispatchWheel(page, "wheel-timeline", entry.init); + expect(resolved.ruleId).toBe(entry.rule); + expect(resolved.eventDefaultPrevented).toBe(entry.prevented); + expect(dispatch.defaultPrevented).toBe(entry.prevented); + expect(dispatch.dispatchReturned).toBe(!entry.prevented); + } +}); + +test("timeline wheel precedence maps macOS Command, Option, and Control", async ({ page }) => { + await page.getByLabel("Wheel platform").selectOption("macos"); + const cases = [ + { init: { deltaY: 6, metaKey: true }, rule: "timeline.horizontal-zoom", prevented: true }, + { init: { deltaY: 6, metaKey: true, shiftKey: true }, rule: "timeline.waveform-amplitude", prevented: true }, + { init: { deltaY: 6, altKey: true }, rule: "timeline.track-height", prevented: true }, + { init: { deltaY: 6, ctrlKey: true }, rule: "timeline.native-scroll", prevented: false }, + { init: { deltaY: 6, shiftKey: true }, rule: "timeline.horizontal-scroll", prevented: true }, + { init: { deltaY: 6, metaKey: true, altKey: true }, rule: "timeline.horizontal-zoom", prevented: true }, + { init: { deltaY: 6, metaKey: true, ctrlKey: true }, rule: "timeline.horizontal-zoom", prevented: true }, + ] as const; + + for (const entry of cases) { + const { dispatch, resolved } = await dispatchWheel(page, "wheel-timeline", entry.init); + expect(resolved.ruleId).toBe(entry.rule); + expect(dispatch.defaultPrevented).toBe(entry.prevented); + } +}); + +test("wheel deltas normalize line/page units and preserve native browser scrolling", async ({ page }) => { + await page.getByLabel("Wheel platform").selectOption("windows"); + + const lineZoom = await dispatchWheel(page, "wheel-timeline", { + deltaY: 2, + deltaMode: 1, + ctrlKey: true, + clientX: 123, + clientY: 45, + }); + expect(lineZoom.resolved.ruleId).toBe("timeline.horizontal-zoom"); + expect(lineZoom.resolved.amount).toBe(32); + expect(lineZoom.resolved.anchor).toEqual({ + kind: "pointer", + clientX: 123, + clientY: 45, + targetId: "wheel-timeline", + }); + + const pageScroll = await dispatchWheel(page, "wheel-piano", { + deltaY: 1, + deltaMode: 2, + }); + expect(pageScroll.resolved.ruleId).toBe("piano-roll.dominant-axis-scroll"); + expect(pageScroll.resolved.amount).toBe(800); + expect(pageScroll.resolved.delta).toMatchObject({ y: 800, mode: "page" }); + expect(pageScroll.dispatch.defaultPrevented).toBe(true); + + const nativeBrowser = await dispatchWheel(page, "wheel-browser", { deltaY: 25 }); + expect(nativeBrowser.resolved.ruleId).toBe("browser.native-scroll"); + expect(nativeBrowser.dispatch).toEqual({ dispatchReturned: true, defaultPrevented: false }); + + const protectedBrowser = await dispatchWheel(page, "wheel-browser", { + deltaY: 25, + ctrlKey: true, + }); + expect(protectedBrowser.resolved.ruleId).toBe("browser.suppress-browser-zoom"); + expect(protectedBrowser.dispatch).toEqual({ dispatchReturned: false, defaultPrevented: true }); +}); + +test("parameter wheel owns normal and fine adjustment gestures", async ({ page }) => { + const normal = await dispatchWheel(page, "wheel-parameter", { deltaY: -8 }); + expect(normal.resolved).toMatchObject({ + ruleId: "parameter.adjust", + operation: "adjust", + precision: "normal", + eventDefaultPrevented: true, + }); + + const fine = await dispatchWheel(page, "wheel-parameter", { + deltaY: -8, + shiftKey: true, + }); + expect(fine.resolved).toMatchObject({ + ruleId: "parameter.fine-adjust", + operation: "adjust", + precision: "fine", + eventDefaultPrevented: true, + }); + expect(fine.dispatch).toEqual({ dispatchReturned: false, defaultPrevented: true }); +}); diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 84e3072..6a4e474 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -1,318 +1,39 @@ { - "name": "studio13-frontend", + "name": "openstudio-frontend", "version": "0.0.1", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "studio13-frontend", + "name": "openstudio-frontend", "version": "0.0.1", "dependencies": { "@dnd-kit/core": "^6.3.1", "@dnd-kit/sortable": "^10.0.0", "@dnd-kit/utilities": "^3.2.2", "@headlessui/react": "^2.2.9", - "@tailwindcss/vite": "^4.1.18", "classnames": "^2.5.1", "konva": "^9.3.22", "lucide-react": "^0.562.0", "react": "^19.2.3", "react-dom": "^19.2.3", "react-konva": "^19.2.1", - "tailwindcss": "^4.1.18", "zustand": "^5.0.10" }, "devDependencies": { + "@playwright/test": "^1.62.1", + "@tailwindcss/vite": "^4.3.3", "@types/react": "^19.2.0", "@types/react-dom": "^19.2.0", - "@vitejs/plugin-react": "^4.2.1", - "sharp": "^0.34.5", + "@vitejs/plugin-react": "^6.0.4", + "sharp": "^0.35.3", + "tailwindcss": "^4.3.3", "typescript": "^5.2.2", - "vite": "^5.0.8", + "vite": "^8.1.5", "vitest": "^4.1.2" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", - "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.28.5", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", - "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", - "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-compilation-targets": "^7.28.6", - "@babel/helper-module-transforms": "^7.28.6", - "@babel/helpers": "^7.28.6", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/traverse": "^7.29.0", - "@babel/types": "^7.29.0", - "@jridgewell/remapping": "^2.3.5", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.29.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", - "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.29.0", - "@babel/types": "^7.29.0", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", - "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.28.6", - "@babel/helper-validator-option": "^7.27.1", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-globals": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", - "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", - "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", - "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", - "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.28.6", - "@babel/types": "^7.29.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.0" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.27.1.tgz", - "integrity": "sha512-6UzkCs+ejGdZ5mFFC/OCUrv028ab2fp1znZmCZjAOBKiBK2jXD1O+BPSfX8X2qjJ75fZBMSnQn3Rq2mrBJK2mw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.27.1.tgz", - "integrity": "sha512-zbwoTsBruTeKB9hSq73ha66iFeJHuaFkUbwvqElnygoNbj/jHRsSeokowZFN3CZ64IvEqcmmkVe89OPXc7ldAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", - "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", - "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/types": "^7.29.0", - "debug": "^4.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" }, "engines": { - "node": ">=6.9.0" + "node": "^22.12.0 || >=24.0.0" } }, "node_modules/@dnd-kit/accessibility": { @@ -332,7 +53,6 @@ "resolved": "https://registry.npmjs.org/@dnd-kit/core/-/core-6.3.1.tgz", "integrity": "sha512-xkGBRQQab4RLwgXxoqETICr6S5JlogafbhNsidmrkVv2YRs5MLwpjoF2qpiGjQt8S9AoxtIV603s0GIUpY5eYQ==", "license": "MIT", - "peer": true, "dependencies": { "@dnd-kit/accessibility": "^3.1.1", "@dnd-kit/utilities": "^3.2.2", @@ -370,1069 +90,1405 @@ } }, "node_modules/@emnapi/core": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.2.tgz", - "integrity": "sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.3.tgz", + "integrity": "sha512-zLpS5asjEb7lq8jYLq37N6XKaE41DIexlY1rF/z4/tIl3wo13Sqm28fRyfIsKZD+NZ8mM5RoKkpW/rBcuoSZSg==", + "dev": true, "license": "MIT", "optional": true, "peer": true, "dependencies": { - "@emnapi/wasi-threads": "1.2.1", + "@emnapi/wasi-threads": "1.2.3", "tslib": "^2.4.0" } }, "node_modules/@emnapi/runtime": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.2.tgz", - "integrity": "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.3.tgz", + "integrity": "sha512-Xz4Tpyki7XyrpbUK1jR1AhdAdaXyhhY4lZ3neLodmhpuWfy2PAQN5B46sAiU4liOXGLkHypn/qU+jvfWSCYYLA==", + "dev": true, "license": "MIT", "optional": true, - "peer": true, "dependencies": { "tslib": "^2.4.0" } }, "node_modules/@emnapi/wasi-threads": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", - "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.3.tgz", + "integrity": "sha512-ELEBe8PsLvvJ6QMr0zLt8ffvOHW/dc1m3CEzNMg7aJUv3bMaoDtw2TXyDAwkYBuroxxuHEwhRTLJSe5sya547g==", + "dev": true, "license": "MIT", "optional": true, + "peer": true, "dependencies": { "tslib": "^2.4.0" } }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", - "cpu": [ - "ppc64" - ], + "node_modules/@floating-ui/core": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz", + "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" + "dependencies": { + "@floating-ui/utils": "^0.2.11" } }, - "node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "cpu": [ - "arm" - ], + "node_modules/@floating-ui/dom": { + "version": "1.7.6", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz", + "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" + "dependencies": { + "@floating-ui/core": "^1.7.5", + "@floating-ui/utils": "^0.2.11" } }, - "node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "cpu": [ - "arm64" - ], + "node_modules/@floating-ui/react": { + "version": "0.26.28", + "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.28.tgz", + "integrity": "sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==", "license": "MIT", - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "@floating-ui/react-dom": "^2.1.2", + "@floating-ui/utils": "^0.2.8", + "tabbable": "^6.0.0" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/react-dom": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.8.tgz", + "integrity": "sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "^1.7.6" + }, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz", + "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==", + "license": "MIT" + }, + "node_modules/@headlessui/react": { + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-2.2.9.tgz", + "integrity": "sha512-Mb+Un58gwBn0/yWZfyrCh0TJyurtT+dETj7YHleylHk5od3dv2XqETPGWMyQ5/7sYN7oWdyM1u9MvC0OC8UmzQ==", + "license": "MIT", + "dependencies": { + "@floating-ui/react": "^0.26.16", + "@react-aria/focus": "^3.20.2", + "@react-aria/interactions": "^3.25.0", + "@tanstack/react-virtual": "^3.13.9", + "use-sync-external-store": "^1.5.0" + }, "engines": { - "node": ">=12" + "node": ">=10" + }, + "peerDependencies": { + "react": "^18 || ^19 || ^19.0.0-rc", + "react-dom": "^18 || ^19 || ^19.0.0-rc" } }, - "node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "cpu": [ - "x64" - ], + "node_modules/@img/colour": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ], "engines": { - "node": ">=12" + "node": ">=18" } }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.35.3.tgz", + "integrity": "sha512-RMnFX7YQsMoh7lWfcM4NEHHymBX/rLuKNPVM84XE9ONPcaSCDgE7CHIHpSgPcO2xcRthgBy1HfNO319mwhIAkg==", "cpu": [ "arm64" ], - "license": "MIT", + "dev": true, + "license": "Apache-2.0", "optional": true, "os": [ "darwin" ], "engines": { - "node": ">=12" + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.3.2" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "node_modules/@img/sharp-darwin-x64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.35.3.tgz", + "integrity": "sha512-Xo+5uFBtLN0BKqieTxiFzFPQAUlBbbH5iBKyRX/z1JrbnYsHTfKJnUfL8+p2TPXr1pXqao4eeL4Rl144uDpK9w==", "cpu": [ "x64" ], - "license": "MIT", + "dev": true, + "license": "Apache-2.0", "optional": true, "os": [ "darwin" ], "engines": { - "node": ">=12" + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.3.2" + } + }, + "node_modules/@img/sharp-freebsd-wasm32": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-freebsd-wasm32/-/sharp-freebsd-wasm32-0.35.3.tgz", + "integrity": "sha512-lUxcqWIj2wMQ9BrwNjngcr1gWUr5xgaGThBRqPPalIC2n67Cqj1uPh8NnA/ZhAg8hUbKl+kVHKwgUIwe6ZYPrg==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "dependencies": { + "@img/sharp-wasm32": "0.35.3" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.3.2.tgz", + "integrity": "sha512-9J6ypZFpQBj4YnePGoq/S38w6nz+vqg5WZLrLGY4YuSemdMq47GMLBPO42MzwdGwpg/agZ7xzZcFHa48xlywfg==", "cpu": [ "arm64" ], - "license": "MIT", + "dev": true, + "license": "LGPL-3.0-or-later", "optional": true, "os": [ - "freebsd" + "darwin" ], - "engines": { - "node": ">=12" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.3.2.tgz", + "integrity": "sha512-m2pW1n6cns9VaubNwsZ+c3CRYjxNQWgJ5gPlnL1nbBcpkBvFm6SCFN5o0psFHI8w9n11NKhFkeEDns98tiqbEw==", "cpu": [ "x64" ], - "license": "MIT", + "dev": true, + "license": "LGPL-3.0-or-later", "optional": true, "os": [ - "freebsd" + "darwin" ], - "engines": { - "node": ">=12" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.3.2.tgz", + "integrity": "sha512-1eMLzy92I4J6rmi4mAT8yC3HxOtniyGELlzGbNMLLeqe052ahFQ0h6LFq+lh5DsDIdYViIDst08abvSbcEdLXQ==", "cpu": [ "arm" ], - "license": "MIT", + "dev": true, + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" ], - "engines": { - "node": ">=12" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.3.2.tgz", + "integrity": "sha512-dqVSFynCox4C/J8kT16V7SIFAns0IjgLwkvYT7p8LQVmJ5OS5b6tI9IGflxTeuBS//zXeFIUbwt5dwxyZ17cnA==", "cpu": [ "arm64" ], - "license": "MIT", + "dev": true, + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" ], - "engines": { - "node": ">=12" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.3.2.tgz", + "integrity": "sha512-3z0NHDxD6n5I9gc05U1eW1AyRm+Gznzq3naMrthPNqE6oYykcogW0l/jfpJdjYnuNl8R7yI9pNbE1XiUeyq0Aw==", "cpu": [ - "ia32" + "ppc64" ], - "license": "MIT", + "dev": true, + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" ], - "engines": { - "node": ">=12" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.3.2.tgz", + "integrity": "sha512-bsb4rI+NldGOsXuej2r8OdSS8+zXDVaCWxyWrcv6kneTOlgAHtZABRzBBCwdsPiD90J4myNJuHpg6kA20ImW/w==", "cpu": [ - "loong64" + "riscv64" ], - "license": "MIT", + "dev": true, + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" ], - "engines": { - "node": ">=12" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.3.2.tgz", + "integrity": "sha512-/ABshyj8gCpyIrNXnHn4LorDJ0HHm1VhXPBlxZ8zAtfVPAaSafXPGn+sUSIRiwaSBy0mmFjSjiXI5mkcwdChKQ==", "cpu": [ - "mips64el" + "s390x" ], - "license": "MIT", + "dev": true, + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" ], - "engines": { - "node": ">=12" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.3.2.tgz", + "integrity": "sha512-ITPEtgffGJ0S6G9dRyw/366tJQqFRcHWPHhC+Stpg3Z8AEMrDrTr2lhdz4f/Y/HMbRh//7Z5mBzEpVdi62Oc3w==", "cpu": [ - "ppc64" + "x64" ], - "license": "MIT", + "dev": true, + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" ], - "engines": { - "node": ">=12" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.3.2.tgz", + "integrity": "sha512-zE9EdiUzUmg5mDT5a1rk5fYJ6GWPloTwWBYDS14naqHsL+EaMpDj1AWnpLgh3u0YCORv2Tt50wrcrpYqkP97Kw==", "cpu": [ - "riscv64" + "arm64" ], - "license": "MIT", + "dev": true, + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" ], - "engines": { - "node": ">=12" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.3.2.tgz", + "integrity": "sha512-m0lrLiUt+lBYnCFr8qV/65yMR4E/c7/wf78I5eKTdkEakFAlZ9QlzEM3QIhhAwVeUhLAHLcCq7a7Vszq/oFNZQ==", "cpu": [ - "s390x" + "x64" ], - "license": "MIT", + "dev": true, + "license": "LGPL-3.0-or-later", "optional": true, "os": [ "linux" ], - "engines": { - "node": ">=12" + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "node_modules/@img/sharp-linux-arm": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.35.3.tgz", + "integrity": "sha512-affVWCTLooy8TSxbDx2qkzuDeaWLNVBA+P//FNBirHsXpP2fuBhk5AuboYUnrDnzoXes8GFjpTx0SBFOCRg+FA==", "cpu": [ - "x64" + "arm" ], - "license": "MIT", + "dev": true, + "license": "Apache-2.0", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.3.2" } }, - "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.7.tgz", - "integrity": "sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==", + "node_modules/@img/sharp-linux-arm64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.35.3.tgz", + "integrity": "sha512-QgKDspHPnrU+GQ55XPhGwyhC8acLVOOSyAvo1oVfFmrIXLkDNmGWzAfDZ4xK8oSA1qBQrALcHX0G5UZni/SuFQ==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", + "license": "Apache-2.0", "optional": true, "os": [ - "netbsd" + "linux" ], "engines": { - "node": ">=18" + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.3.2" } }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.35.3.tgz", + "integrity": "sha512-sMd8rDxmpLOwv/7N44klFjOD5DUO7FLdjiXDI0hoxYaf7Ar262dQIEkosE98bps+5HPLtp/EvNqeqQtOycP/IA==", "cpu": [ - "x64" + "ppc64" ], - "license": "MIT", + "dev": true, + "license": "Apache-2.0", "optional": true, "os": [ - "netbsd" + "linux" ], "engines": { - "node": ">=12" + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.3.2" } }, - "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.7.tgz", - "integrity": "sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==", + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.35.3.tgz", + "integrity": "sha512-0Eob78yjlYPfL5vMNWAW55l3R9Y6BQS/gOfe0ZcP9mEz9ohhKSt4im1hayiknXgf8AWrFqMvJcKIdmLmEe7yeQ==", "cpu": [ - "arm64" + "riscv64" ], "dev": true, - "license": "MIT", + "license": "Apache-2.0", "optional": true, "os": [ - "openbsd" + "linux" ], "engines": { - "node": ">=18" + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.3.2" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.35.3.tgz", + "integrity": "sha512-KgAxQ0DxpNOq1rG2t5cgTgShJFGSuU7XO45cqC+1NVOuZnP6tlgZRuSYOfNupGkHID0o3cJOsw4DVeJpMovcGw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.3.2" } }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "node_modules/@img/sharp-linux-x64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.35.3.tgz", + "integrity": "sha512-8pqvxubL2PGdhlPy6GLqzDYMUjyRmKAwKHYKixpdJYBUK7PJ0C029XdsnpFIdgRZG68fZiGdHVWcKPvtiPB4cA==", "cpu": [ "x64" ], - "license": "MIT", + "dev": true, + "license": "Apache-2.0", "optional": true, "os": [ - "openbsd" + "linux" ], "engines": { - "node": ">=12" + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.3.2" } }, - "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.7.tgz", - "integrity": "sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==", + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.35.3.tgz", + "integrity": "sha512-Vz0iQjzzcSX3HCbfwFfCSG/9SCIqyO0mH2sXyiHaAYfBk0cRsCWXRyQYX0ovCK/PAQBbTzQ0dsPQHh5MAFL59w==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", + "license": "Apache-2.0", "optional": true, "os": [ - "openharmony" + "linux" ], "engines": { - "node": ">=18" + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.3.2" } }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.35.3.tgz", + "integrity": "sha512-6O1NPKcDVj9QEdg7Hx549EX8U0rp6yXQERqru6yRN7fGBn32UvIRJUlWnk+8xDCiG76hXVBbX82NZ/ZKr0euIg==", "cpu": [ "x64" ], - "license": "MIT", + "dev": true, + "license": "Apache-2.0", "optional": true, "os": [ - "sunos" + "linux" ], "engines": { - "node": ">=12" + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.3.2" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.35.3.tgz", + "integrity": "sha512-cZ0XkcYGpHZkqW6iCkqTcmUC0CD9DhD5d/qeZlZkfRBn6GnHniZXLUo5+9xw8Iv76YE6LQFN9YNBlKREcCG76w==", + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.11.1" + }, + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "node_modules/@img/sharp-webcontainers-wasm32": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-webcontainers-wasm32/-/sharp-webcontainers-wasm32-0.35.3.tgz", + "integrity": "sha512-2rnq7bX3NzeR2T4YWgz8qiG4h3TSdMe+vN1iQXpJleSJ3SM5zQ8Fy2SyyXAWlbxpEZ2Y+Z4u1BePgJEYbSy80Q==", "cpu": [ - "arm64" + "wasm32" ], - "license": "MIT", + "dev": true, + "license": "Apache-2.0", "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "@img/sharp-wasm32": "0.35.3" + }, "engines": { - "node": ">=12" + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "node_modules/@img/sharp-win32-arm64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.35.3.tgz", + "integrity": "sha512-4bPwFdMbeC4JQ8L8LOyWp6nsHcboP5fxkp6iPOXz2Vg49R42TuMs2whkJ5OAP4/Ul035qOzy0AecOF9VOscn4w==", "cpu": [ - "ia32" + "arm64" ], - "license": "MIT", + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=12" + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "node_modules/@img/sharp-win32-ia32": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.35.3.tgz", + "integrity": "sha512-r53mXsBN6lFUDiST764SvgwUdHAqM4rPAiDzAmf4fLoB6X/rkfyTrLCg6+g17wJJiCmB3JYgHuUldCWUIRFSXw==", "cpu": [ - "x64" + "ia32" ], - "license": "MIT", + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=12" + "node": "^20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@floating-ui/core": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz", - "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==", + "node_modules/@img/sharp-win32-x64": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.35.3.tgz", + "integrity": "sha512-D4y1vNeZrIIJCN+uHaWVtH86B+aCrdMYYjicy9pXHvbGZeGYLLSd3wdVuC37FxVXlU1ARsk84eKWfWMXGYEqvA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, "license": "MIT", "dependencies": { - "@floating-ui/utils": "^0.2.11" + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@floating-ui/dom": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz", - "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==", + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, "license": "MIT", "dependencies": { - "@floating-ui/core": "^1.7.5", - "@floating-ui/utils": "^0.2.11" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "node_modules/@floating-ui/react": { - "version": "0.26.28", - "resolved": "https://registry.npmjs.org/@floating-ui/react/-/react-0.26.28.tgz", - "integrity": "sha512-yORQuuAtVpiRjpMhdc0wJj06b9JFjrYF4qp96j++v2NBpbi6SEGF7donUJ3TMieerQ6qVkAv1tgr7L4r5roTqw==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, "license": "MIT", "dependencies": { - "@floating-ui/react-dom": "^2.1.2", - "@floating-ui/utils": "^0.2.8", - "tabbable": "^6.0.0" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.6.tgz", + "integrity": "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.3" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" }, "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" } }, - "node_modules/@floating-ui/react-dom": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.8.tgz", - "integrity": "sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==", + "node_modules/@oxc-project/types": { + "version": "0.139.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.139.0.tgz", + "integrity": "sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==", + "dev": true, "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@playwright/test": { + "version": "1.62.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.62.1.tgz", + "integrity": "sha512-DTcUc8qii+cpHvtOwggMtBRMjKZHXYWdw8syRYu2vtzuq4Wxphqq4NfCs5Zt44L6mA8rfDfj+PHnxFc/FeK6mQ==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "@floating-ui/dom": "^1.7.6" + "playwright": "1.62.1" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/@react-aria/focus": { + "version": "3.21.5", + "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.21.5.tgz", + "integrity": "sha512-V18fwCyf8zqgJdpLQeDU5ZRNd9TeOfBbhLgmX77Zr5ae9XwaoJ1R3SFJG1wCJX60t34AW+aLZSEEK+saQElf3Q==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/interactions": "^3.27.1", + "@react-aria/utils": "^3.33.1", + "@react-types/shared": "^3.33.1", + "@swc/helpers": "^0.5.0", + "clsx": "^2.0.0" }, "peerDependencies": { - "react": ">=16.8.0", - "react-dom": ">=16.8.0" + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, - "node_modules/@floating-ui/utils": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz", - "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==", - "license": "MIT" + "node_modules/@react-aria/interactions": { + "version": "3.27.1", + "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.27.1.tgz", + "integrity": "sha512-M3wLpTTmDflI0QGNK0PJNUaBXXfeBXue8ZxLMngfc1piHNiH4G5lUvWd9W14XVbqrSCVY8i8DfGrNYpyyZu0tw==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/ssr": "^3.9.10", + "@react-aria/utils": "^3.33.1", + "@react-stately/flags": "^3.1.2", + "@react-types/shared": "^3.33.1", + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } }, - "node_modules/@headlessui/react": { - "version": "2.2.9", - "resolved": "https://registry.npmjs.org/@headlessui/react/-/react-2.2.9.tgz", - "integrity": "sha512-Mb+Un58gwBn0/yWZfyrCh0TJyurtT+dETj7YHleylHk5od3dv2XqETPGWMyQ5/7sYN7oWdyM1u9MvC0OC8UmzQ==", - "license": "MIT", + "node_modules/@react-aria/ssr": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.10.tgz", + "integrity": "sha512-hvTm77Pf+pMBhuBm760Li0BVIO38jv1IBws1xFm1NoL26PU+fe+FMW5+VZWyANR6nYL65joaJKZqOdTQMkO9IQ==", + "license": "Apache-2.0", "dependencies": { - "@floating-ui/react": "^0.26.16", - "@react-aria/focus": "^3.20.2", - "@react-aria/interactions": "^3.25.0", - "@tanstack/react-virtual": "^3.13.9", - "use-sync-external-store": "^1.5.0" + "@swc/helpers": "^0.5.0" }, "engines": { - "node": ">=10" + "node": ">= 12" }, "peerDependencies": { - "react": "^18 || ^19 || ^19.0.0-rc", - "react-dom": "^18 || ^19 || ^19.0.0-rc" + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" } }, - "node_modules/@img/colour": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", - "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "node_modules/@react-aria/utils": { + "version": "3.33.1", + "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.33.1.tgz", + "integrity": "sha512-kIx1Sj6bbAT0pdqCegHuPanR9zrLn5zMRiM7LN12rgRf55S19ptd9g3ncahArifYTRkfEU9VIn+q0HjfMqS9/w==", + "license": "Apache-2.0", + "dependencies": { + "@react-aria/ssr": "^3.9.10", + "@react-stately/flags": "^3.1.2", + "@react-stately/utils": "^3.11.0", + "@react-types/shared": "^3.33.1", + "@swc/helpers": "^0.5.0", + "clsx": "^2.0.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", + "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-stately/flags": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@react-stately/flags/-/flags-3.1.2.tgz", + "integrity": "sha512-2HjFcZx1MyQXoPqcBGALwWWmgFVUk2TuKVIQxCbRq7fPyWXIl6VHcakCLurdtYC2Iks7zizvz0Idv48MQ38DWg==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@react-stately/utils": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.11.0.tgz", + "integrity": "sha512-8LZpYowJ9eZmmYLpudbo/eclIRnbhWIJZ994ncmlKlouNzKohtM8qTC6B1w1pwUbiwGdUoyzLuQbeaIor5Dvcw==", + "license": "Apache-2.0", + "dependencies": { + "@swc/helpers": "^0.5.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@react-types/shared": { + "version": "3.33.1", + "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.33.1.tgz", + "integrity": "sha512-oJHtjvLG43VjwemQDadlR5g/8VepK56B/xKO2XORPHt9zlW6IZs3tZrYlvH29BMvoqC7RtE7E5UjgbnbFtDGag==", + "license": "Apache-2.0", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + } + }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.1.5.tgz", + "integrity": "sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=18" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@img/sharp-darwin-arm64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", - "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.1.5.tgz", + "integrity": "sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw==", "cpu": [ "arm64" ], "dev": true, - "license": "Apache-2.0", + "license": "MIT", "optional": true, "os": [ "darwin" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-arm64": "1.2.4" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@img/sharp-darwin-x64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", - "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.1.5.tgz", + "integrity": "sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g==", "cpu": [ "x64" ], "dev": true, - "license": "Apache-2.0", + "license": "MIT", "optional": true, "os": [ "darwin" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-darwin-x64": "1.2.4" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@img/sharp-libvips-darwin-arm64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", - "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.1.5.tgz", + "integrity": "sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA==", "cpu": [ - "arm64" + "x64" ], "dev": true, - "license": "LGPL-3.0-or-later", + "license": "MIT", "optional": true, "os": [ - "darwin" + "freebsd" ], - "funding": { - "url": "https://opencollective.com/libvips" + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@img/sharp-libvips-darwin-x64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", - "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.1.5.tgz", + "integrity": "sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw==", "cpu": [ - "x64" + "arm" ], "dev": true, - "license": "LGPL-3.0-or-later", + "license": "MIT", "optional": true, "os": [ - "darwin" + "linux" ], - "funding": { - "url": "https://opencollective.com/libvips" + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@img/sharp-libvips-linux-arm": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", - "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.1.5.tgz", + "integrity": "sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q==", "cpu": [ - "arm" + "arm64" ], "dev": true, - "license": "LGPL-3.0-or-later", + "license": "MIT", "optional": true, "os": [ "linux" ], - "funding": { - "url": "https://opencollective.com/libvips" + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@img/sharp-libvips-linux-arm64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", - "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.1.5.tgz", + "integrity": "sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA==", "cpu": [ "arm64" ], "dev": true, - "license": "LGPL-3.0-or-later", + "license": "MIT", "optional": true, "os": [ "linux" ], - "funding": { - "url": "https://opencollective.com/libvips" + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@img/sharp-libvips-linux-ppc64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", - "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.1.5.tgz", + "integrity": "sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg==", "cpu": [ "ppc64" ], "dev": true, - "license": "LGPL-3.0-or-later", + "license": "MIT", "optional": true, "os": [ "linux" ], - "funding": { - "url": "https://opencollective.com/libvips" + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@img/sharp-libvips-linux-riscv64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", - "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.1.5.tgz", + "integrity": "sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA==", "cpu": [ - "riscv64" + "s390x" ], "dev": true, - "license": "LGPL-3.0-or-later", + "license": "MIT", "optional": true, "os": [ "linux" ], - "funding": { - "url": "https://opencollective.com/libvips" + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@img/sharp-libvips-linux-s390x": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", - "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.1.5.tgz", + "integrity": "sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ==", "cpu": [ - "s390x" + "x64" ], "dev": true, - "license": "LGPL-3.0-or-later", + "license": "MIT", "optional": true, "os": [ "linux" ], - "funding": { - "url": "https://opencollective.com/libvips" + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@img/sharp-libvips-linux-x64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", - "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.1.5.tgz", + "integrity": "sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==", "cpu": [ "x64" ], "dev": true, - "license": "LGPL-3.0-or-later", + "license": "MIT", "optional": true, "os": [ "linux" ], - "funding": { - "url": "https://opencollective.com/libvips" + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@img/sharp-libvips-linuxmusl-arm64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", - "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.1.5.tgz", + "integrity": "sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw==", "cpu": [ "arm64" ], "dev": true, - "license": "LGPL-3.0-or-later", + "license": "MIT", "optional": true, "os": [ - "linux" + "openharmony" ], - "funding": { - "url": "https://opencollective.com/libvips" + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@img/sharp-libvips-linuxmusl-x64": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", - "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.1.5.tgz", + "integrity": "sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA==", "cpu": [ - "x64" + "wasm32" ], "dev": true, - "license": "LGPL-3.0-or-later", + "license": "MIT", "optional": true, - "os": [ - "linux" - ], - "funding": { - "url": "https://opencollective.com/libvips" + "dependencies": { + "@emnapi/core": "1.11.1", + "@emnapi/runtime": "1.11.1", + "@napi-rs/wasm-runtime": "^1.1.6" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@img/sharp-linux-arm": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", - "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "node_modules/@rolldown/binding-wasm32-wasi/node_modules/@emnapi/core": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.11.1.tgz", + "integrity": "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi/node_modules/@emnapi/runtime": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.11.1.tgz", + "integrity": "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi/node_modules/@emnapi/wasi-threads": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.2.tgz", + "integrity": "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.1.5.tgz", + "integrity": "sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw==", "cpu": [ - "arm" + "arm64" ], "dev": true, - "license": "Apache-2.0", + "license": "MIT", "optional": true, "os": [ - "linux" + "win32" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-arm": "1.2.4" + "node": "^20.19.0 || >=22.12.0" } }, - "node_modules/@img/sharp-linux-arm64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", - "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.1.5.tgz", + "integrity": "sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA==", "cpu": [ - "arm64" + "x64" ], "dev": true, - "license": "Apache-2.0", + "license": "MIT", "optional": true, "os": [ - "linux" + "win32" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.1.tgz", + "integrity": "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@swc/helpers": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.21.tgz", + "integrity": "sha512-jI/VAmtdjB/RnI8GTnokyX7Ug8c+g+ffD6QRLa6XQewtnGyukKkKSk3wLTM3b5cjt1jNh9x0jfVlagdN2gDKQg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.3.3.tgz", + "integrity": "sha512-/T8IKEsf9VTU6tLjgC7+sv2mOPtQxzE2jMw7u4Tt40Tx+QSZxpzh95/H6cMKoja9XuW7iMdLJYBB0o9G1CaAgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/remapping": "^2.3.5", + "enhanced-resolve": "^5.24.1", + "jiti": "^2.7.0", + "lightningcss": "1.32.0", + "magic-string": "^0.30.21", + "source-map-js": "^1.2.1", + "tailwindcss": "4.3.3" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.3.3.tgz", + "integrity": "sha512-krXjAikiaFSPaK/FkAQT5UTx3VormQaiZ5hBFlJZ9UFQGB/rwg1MZIhHAG9smMQRTdyJxP6Qt5MwMtdyU5FWrA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 20" }, "optionalDependencies": { - "@img/sharp-libvips-linux-arm64": "1.2.4" + "@tailwindcss/oxide-android-arm64": "4.3.3", + "@tailwindcss/oxide-darwin-arm64": "4.3.3", + "@tailwindcss/oxide-darwin-x64": "4.3.3", + "@tailwindcss/oxide-freebsd-x64": "4.3.3", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.3.3", + "@tailwindcss/oxide-linux-arm64-gnu": "4.3.3", + "@tailwindcss/oxide-linux-arm64-musl": "4.3.3", + "@tailwindcss/oxide-linux-x64-gnu": "4.3.3", + "@tailwindcss/oxide-linux-x64-musl": "4.3.3", + "@tailwindcss/oxide-wasm32-wasi": "4.3.3", + "@tailwindcss/oxide-win32-arm64-msvc": "4.3.3", + "@tailwindcss/oxide-win32-x64-msvc": "4.3.3" } }, - "node_modules/@img/sharp-linux-ppc64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", - "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.3.3.tgz", + "integrity": "sha512-Y85A2gmPSkl5Ve5qR86GL4HT509cFqQh1aes9p3sSkyTPwt0Pppf3GkwGe4JPACcRYjgJIEhQgM6dBClnr0NYw==", "cpu": [ - "ppc64" + "arm64" ], "dev": true, - "license": "Apache-2.0", + "license": "MIT", "optional": true, "os": [ - "linux" + "android" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-ppc64": "1.2.4" + "node": ">= 20" } }, - "node_modules/@img/sharp-linux-riscv64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", - "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.3.3.tgz", + "integrity": "sha512-BiaWatpBcERQFDlOjRDpIVXuFK5PJez5SA4JMg6VYZdBYU+qKfV/vqjcIs+IYmtitf1xYQZTwXvU/8y4lfZUGw==", "cpu": [ - "riscv64" + "arm64" ], "dev": true, - "license": "Apache-2.0", + "license": "MIT", "optional": true, "os": [ - "linux" + "darwin" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-riscv64": "1.2.4" + "node": ">= 20" } }, - "node_modules/@img/sharp-linux-s390x": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", - "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.3.3.tgz", + "integrity": "sha512-fAeUqfV5ndhxRwai8cXGzdLvul9utWOmeTkv69unv4ZXixjn61Z+p9lCWdwOwA3TYboG3BwdVuN/RDjhBRl0mw==", "cpu": [ - "s390x" + "x64" ], "dev": true, - "license": "Apache-2.0", + "license": "MIT", "optional": true, "os": [ - "linux" + "darwin" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-s390x": "1.2.4" + "node": ">= 20" } }, - "node_modules/@img/sharp-linux-x64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", - "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.3.3.tgz", + "integrity": "sha512-iyf5bV6+wnAlflVeEy7R25dupxTNECZN5QMI0qNT6eT+EgaGdZcKhGkr5SdoaWiLJ3spLqIY9VCeSGrwmtg4kw==", "cpu": [ "x64" ], "dev": true, - "license": "Apache-2.0", + "license": "MIT", "optional": true, "os": [ - "linux" + "freebsd" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linux-x64": "1.2.4" + "node": ">= 20" } }, - "node_modules/@img/sharp-linuxmusl-arm64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", - "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.3.3.tgz", + "integrity": "sha512-aAYUprJAJQWWbRrPvtjdroZ56Md+JM8pMiopS6xGEwDfLhqj+2ver2p4nU4Mb3CRqcMmNBjo8KkUgcxhkzVQGQ==", "cpu": [ - "arm64" + "arm" ], "dev": true, - "license": "Apache-2.0", + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + "node": ">= 20" } }, - "node_modules/@img/sharp-linuxmusl-x64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", - "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.3.3.tgz", + "integrity": "sha512-nDxldcEENOxZRzC2uu9jrutZdAAQtb+8WWDCSnWL1zvBk1+FN+x6MtDViPB5AJMfttVCUhehGWus3XBPgatM/w==", "cpu": [ - "x64" + "arm64" ], "dev": true, - "license": "Apache-2.0", + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-libvips-linuxmusl-x64": "1.2.4" - } - }, - "node_modules/@img/sharp-wasm32": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", - "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", - "cpu": [ - "wasm32" - ], - "dev": true, - "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", - "optional": true, - "dependencies": { - "@emnapi/runtime": "^1.7.0" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" + "node": ">= 20" } }, - "node_modules/@img/sharp-win32-arm64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", - "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.3.3.tgz", + "integrity": "sha512-Md44bD6veX/PC5iyF8cDVnw4HBIANZepRZZ7a8DQOvkfo5WUBwcp6iAuCUz23u+4SUkhJlD3eL7hNdW8ezd/kA==", "cpu": [ "arm64" ], "dev": true, - "license": "Apache-2.0 AND LGPL-3.0-or-later", + "license": "MIT", "optional": true, "os": [ - "win32" + "linux" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" + "node": ">= 20" } }, - "node_modules/@img/sharp-win32-ia32": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", - "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.3.3.tgz", + "integrity": "sha512-tx7us1muwOKAKWao2v/GaafFeQboE6aj88vC6ziN2NCGcRm8gWUhwjzg+YdVB1e4boAtdtma4L43onunI6NS4w==", "cpu": [ - "ia32" + "x64" ], "dev": true, - "license": "Apache-2.0 AND LGPL-3.0-or-later", + "license": "MIT", "optional": true, "os": [ - "win32" + "linux" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" + "node": ">= 20" } }, - "node_modules/@img/sharp-win32-x64": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", - "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.3.3.tgz", + "integrity": "sha512-SJxX60smvHgasZoBy11dX6YRjXJFovwWBoedhbQPOBzgFWBHGB+TVPWB9BxzR7TTxU8FQZAI2AyiNCMzFm8Img==", "cpu": [ "x64" ], "dev": true, - "license": "Apache-2.0 AND LGPL-3.0-or-later", + "license": "MIT", "optional": true, "os": [ - "win32" + "linux" ], "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" + "node": ">= 20" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.3.3.tgz", + "integrity": "sha512-jx1+rPhY/5Ympkktd656HBWEBLxP7dH06losBLjjf5vgCODXvi9KhtftWcMIwTFIDqBr7cRnQkdLnAG+IOlGvQ==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" + "@emnapi/core": "^1.11.1", + "@emnapi/runtime": "^1.11.1", + "@emnapi/wasi-threads": "^1.2.2", + "@napi-rs/wasm-runtime": "^1.1.4", + "@tybys/wasm-util": "^0.10.2", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=14.0.0" } }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/core": { + "version": "1.11.1", + "dev": true, + "inBundle": true, "license": "MIT", + "optional": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" + "@emnapi/wasi-threads": "1.2.2", + "tslib": "^2.4.0" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/runtime": { + "version": "1.11.1", + "dev": true, + "inBundle": true, "license": "MIT", - "engines": { - "node": ">=6.0.0" + "optional": true, + "dependencies": { + "tslib": "^2.4.0" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/wasi-threads": { + "version": "1.2.2", + "dev": true, + "inBundle": true, "license": "MIT", + "optional": true, "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "tslib": "^2.4.0" } }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.2.tgz", - "integrity": "sha512-sNXv5oLJ7ob93xkZ1XnxisYhGYXfaG9f65/ZgYuAu3qt7b3NadcOEhLvx28hv31PgX8SZJRYrAIPQilQmFpLVw==", + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.4", + "dev": true, + "inBundle": true, "license": "MIT", "optional": true, "dependencies": { @@ -1447,134 +1503,27 @@ "@emnapi/runtime": "^1.7.1" } }, - "node_modules/@oxc-project/types": { - "version": "0.122.0", - "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.122.0.tgz", - "integrity": "sha512-oLAl5kBpV4w69UtFZ9xqcmTi+GENWOcPF7FCrczTiBbmC0ibXxCwyvZGbO39rCVEuLGAZM84DH0pUIyyv/YJzA==", + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@tybys/wasm-util": { + "version": "0.10.2", "dev": true, + "inBundle": true, "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/Boshen" - } - }, - "node_modules/@react-aria/focus": { - "version": "3.21.5", - "resolved": "https://registry.npmjs.org/@react-aria/focus/-/focus-3.21.5.tgz", - "integrity": "sha512-V18fwCyf8zqgJdpLQeDU5ZRNd9TeOfBbhLgmX77Zr5ae9XwaoJ1R3SFJG1wCJX60t34AW+aLZSEEK+saQElf3Q==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/interactions": "^3.27.1", - "@react-aria/utils": "^3.33.1", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0", - "clsx": "^2.0.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/interactions": { - "version": "3.27.1", - "resolved": "https://registry.npmjs.org/@react-aria/interactions/-/interactions-3.27.1.tgz", - "integrity": "sha512-M3wLpTTmDflI0QGNK0PJNUaBXXfeBXue8ZxLMngfc1piHNiH4G5lUvWd9W14XVbqrSCVY8i8DfGrNYpyyZu0tw==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/ssr": "^3.9.10", - "@react-aria/utils": "^3.33.1", - "@react-stately/flags": "^3.1.2", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/ssr": { - "version": "3.9.10", - "resolved": "https://registry.npmjs.org/@react-aria/ssr/-/ssr-3.9.10.tgz", - "integrity": "sha512-hvTm77Pf+pMBhuBm760Li0BVIO38jv1IBws1xFm1NoL26PU+fe+FMW5+VZWyANR6nYL65joaJKZqOdTQMkO9IQ==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0" - }, - "engines": { - "node": ">= 12" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-aria/utils": { - "version": "3.33.1", - "resolved": "https://registry.npmjs.org/@react-aria/utils/-/utils-3.33.1.tgz", - "integrity": "sha512-kIx1Sj6bbAT0pdqCegHuPanR9zrLn5zMRiM7LN12rgRf55S19ptd9g3ncahArifYTRkfEU9VIn+q0HjfMqS9/w==", - "license": "Apache-2.0", - "dependencies": { - "@react-aria/ssr": "^3.9.10", - "@react-stately/flags": "^3.1.2", - "@react-stately/utils": "^3.11.0", - "@react-types/shared": "^3.33.1", - "@swc/helpers": "^0.5.0", - "clsx": "^2.0.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1", - "react-dom": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-stately/flags": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@react-stately/flags/-/flags-3.1.2.tgz", - "integrity": "sha512-2HjFcZx1MyQXoPqcBGALwWWmgFVUk2TuKVIQxCbRq7fPyWXIl6VHcakCLurdtYC2Iks7zizvz0Idv48MQ38DWg==", - "license": "Apache-2.0", - "dependencies": { - "@swc/helpers": "^0.5.0" - } - }, - "node_modules/@react-stately/utils": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@react-stately/utils/-/utils-3.11.0.tgz", - "integrity": "sha512-8LZpYowJ9eZmmYLpudbo/eclIRnbhWIJZ994ncmlKlouNzKohtM8qTC6B1w1pwUbiwGdUoyzLuQbeaIor5Dvcw==", - "license": "Apache-2.0", + "optional": true, "dependencies": { - "@swc/helpers": "^0.5.0" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" - } - }, - "node_modules/@react-types/shared": { - "version": "3.33.1", - "resolved": "https://registry.npmjs.org/@react-types/shared/-/shared-3.33.1.tgz", - "integrity": "sha512-oJHtjvLG43VjwemQDadlR5g/8VepK56B/xKO2XORPHt9zlW6IZs3tZrYlvH29BMvoqC7RtE7E5UjgbnbFtDGag==", - "license": "Apache-2.0", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 || ^19.0.0-rc.1" + "tslib": "^2.4.0" } }, - "node_modules/@rolldown/binding-android-arm64": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.12.tgz", - "integrity": "sha512-pv1y2Fv0JybcykuiiD3qBOBdz6RteYojRFY1d+b95WVuzx211CRh+ytI/+9iVyWQ6koTh5dawe4S/yRfOFjgaA==", - "cpu": [ - "arm64" - ], + "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/tslib": { + "version": "2.8.1", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } + "inBundle": true, + "license": "0BSD", + "optional": true }, - "node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.12.tgz", - "integrity": "sha512-cFYr6zTG/3PXXF3pUO+umXxt1wkRK/0AYT8lDwuqvRC+LuKYWSAQAQZjCWDQpAH172ZV6ieYrNnFzVVcnSflAg==", + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.3.3.tgz", + "integrity": "sha512-3rc292Ca2ceK6Ulcc/bAVnTs/3nDtoPhyEKlgPv+yQJQi/JS/AMJlqzxvlDacL1nekbrcf6bTqp/jV4qgnPxNQ==", "cpu": [ "arm64" ], @@ -1582,16 +1531,16 @@ "license": "MIT", "optional": true, "os": [ - "darwin" + "win32" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 20" } }, - "node_modules/@rolldown/binding-darwin-x64": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.12.tgz", - "integrity": "sha512-ZCsYknnHzeXYps0lGBz8JrF37GpE9bFVefrlmDrAQhOEi4IOIlcoU1+FwHEtyXGx2VkYAvhu7dyBf75EJQffBw==", + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.3.3.tgz", + "integrity": "sha512-yJ0pwIVc/nYeGoV02WtsN8KYyLQv7kyI2wDnkezyJlGGjkd4QLwDGAwl47YpPJeuI0M0ObaXGSPjvWDPeTPggw==", "cpu": [ "x64" ], @@ -1599,2823 +1548,1146 @@ "license": "MIT", "optional": true, "os": [ - "darwin" + "win32" ], "engines": { - "node": "^20.19.0 || >=22.12.0" + "node": ">= 20" } }, - "node_modules/@rolldown/binding-freebsd-x64": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.12.tgz", - "integrity": "sha512-dMLeprcVsyJsKolRXyoTH3NL6qtsT0Y2xeuEA8WQJquWFXkEC4bcu1rLZZSnZRMtAqwtrF/Ib9Ddtpa/Gkge9Q==", - "cpu": [ - "x64" - ], + "node_modules/@tailwindcss/vite": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.3.3.tgz", + "integrity": "sha512-yYU8cogLeSh/ms2jh8Fj7jaba/EWa7Ja6GoUqYZaraEuCI5YS6ms6ObZgjjedm+jm6XZjdNRWBpPP6Z86oOxcw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" + "dependencies": { + "@tailwindcss/node": "4.3.3", + "@tailwindcss/oxide": "4.3.3", + "tailwindcss": "4.3.3" + }, + "peerDependencies": { + "vite": "^5.2.0 || ^6 || ^7 || ^8" } }, - "node_modules/@rolldown/binding-linux-arm-gnueabihf": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.12.tgz", - "integrity": "sha512-YqWjAgGC/9M1lz3GR1r1rP79nMgo3mQiiA+Hfo+pvKFK1fAJ1bCi0ZQVh8noOqNacuY1qIcfyVfP6HoyBRZ85Q==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" + "node_modules/@tanstack/react-virtual": { + "version": "3.13.23", + "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.13.23.tgz", + "integrity": "sha512-XnMRnHQ23piOVj2bzJqHrRrLg4r+F86fuBcwteKfbIjJrtGxb4z7tIvPVAe4B+4UVwo9G4Giuz5fmapcrnZ0OQ==", + "license": "MIT", + "dependencies": { + "@tanstack/virtual-core": "3.13.23" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/@rolldown/binding-linux-arm64-gnu": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.12.tgz", - "integrity": "sha512-/I5AS4cIroLpslsmzXfwbe5OmWvSsrFuEw3mwvbQ1kDxJ822hFHIx+vsN/TAzNVyepI/j/GSzrtCIwQPeKCLIg==", - "cpu": [ - "arm64" - ], - "dev": true, + "node_modules/@tanstack/virtual-core": { + "version": "3.13.23", + "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.13.23.tgz", + "integrity": "sha512-zSz2Z2HNyLjCplANTDyl3BcdQJc2k1+yyFoKhNRmCr7V7dY8o8q5m8uFTI1/Pg1kL+Hgrz6u3Xo6eFUB7l66cg==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" } }, - "node_modules/@rolldown/binding-linux-arm64-musl": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.12.tgz", - "integrity": "sha512-V6/wZztnBqlx5hJQqNWwFdxIKN0m38p8Jas+VoSfgH54HSj9tKTt1dZvG6JRHcjh6D7TvrJPWFGaY9UBVOaWPw==", - "cpu": [ - "arm64" - ], + "node_modules/@tybys/wasm-util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.3.tgz", + "integrity": "sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==", "dev": true, "license": "MIT", "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" + "dependencies": { + "tslib": "^2.4.0" } }, - "node_modules/@rolldown/binding-linux-ppc64-gnu": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.12.tgz", - "integrity": "sha512-AP3E9BpcUYliZCxa3w5Kwj9OtEVDYK6sVoUzy4vTOJsjPOgdaJZKFmN4oOlX0Wp0RPV2ETfmIra9x1xuayFB7g==", - "cpu": [ - "ppc64" - ], + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" } }, - "node_modules/@rolldown/binding-linux-s390x-gnu": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.12.tgz", - "integrity": "sha512-nWwpvUSPkoFmZo0kQazZYOrT7J5DGOJ/+QHHzjvNlooDZED8oH82Yg67HvehPPLAg5fUff7TfWFHQS8IV1n3og==", - "cpu": [ - "s390x" - ], + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "19.2.14", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", + "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" + "dependencies": { + "csstype": "^3.2.2" } }, - "node_modules/@rolldown/binding-linux-x64-gnu": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.12.tgz", - "integrity": "sha512-RNrafz5bcwRy+O9e6P8Z/OCAJW/A+qtBczIqVYwTs14pf4iV1/+eKEjdOUta93q2TsT/FI0XYDP3TCky38LMAg==", - "cpu": [ - "x64" - ], + "node_modules/@types/react-dom": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", + "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" + "peerDependencies": { + "@types/react": "^19.2.0" } }, - "node_modules/@rolldown/binding-linux-x64-musl": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.12.tgz", - "integrity": "sha512-Jpw/0iwoKWx3LJ2rc1yjFrj+T7iHZn2JDg1Yny1ma0luviFS4mhAIcd1LFNxK3EYu3DHWCps0ydXQ5i/rrJ2ig==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/@types/react-reconciler": { + "version": "0.33.0", + "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.33.0.tgz", + "integrity": "sha512-HZOXsKT0tGI9LlUw2LuedXsVeB88wFa536vVL0M6vE8zN63nI+sSr1ByxmPToP5K5bukaVscyeCJcF9guVNJ1g==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" + "peerDependencies": { + "@types/react": "*" } }, - "node_modules/@rolldown/binding-openharmony-arm64": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.12.tgz", - "integrity": "sha512-vRugONE4yMfVn0+7lUKdKvN4D5YusEiPilaoO2sgUWpCvrncvWgPMzK00ZFFJuiPgLwgFNP5eSiUlv2tfc+lpA==", - "cpu": [ - "arm64" - ], + "node_modules/@vitejs/plugin-react": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-6.0.4.tgz", + "integrity": "sha512-XcCQz0TBpBgljhj0gMuuDj49i6Ytqh5q1osT/Gp5uAVJUCTWxyskk/l1jwYYiu2xcNHHipdMz40EGfM1VdamVg==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ], + "dependencies": { + "@rolldown/pluginutils": "^1.0.1" + }, "engines": { "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "@rolldown/plugin-babel": "^0.1.7 || ^0.2.0", + "babel-plugin-react-compiler": "^1.0.0", + "vite": "^8.0.0" + }, + "peerDependenciesMeta": { + "@rolldown/plugin-babel": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + } } }, - "node_modules/@rolldown/binding-wasm32-wasi": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.12.tgz", - "integrity": "sha512-ykGiLr/6kkiHc0XnBfmFJuCjr5ZYKKofkx+chJWDjitX+KsJuAmrzWhwyOMSHzPhzOHOy7u9HlFoa5MoAOJ/Zg==", - "cpu": [ - "wasm32" - ], + "node_modules/@vitest/expect": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.2.tgz", + "integrity": "sha512-gbu+7B0YgUJ2nkdsRJrFFW6X7NTP44WlhiclHniUhxADQJH5Szt9mZ9hWnJPJ8YwOK5zUOSSlSvyzRf0u1DSBQ==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { - "@napi-rs/wasm-runtime": "^1.1.1" + "@standard-schema/spec": "^1.1.0", + "@types/chai": "^5.2.2", + "@vitest/spy": "4.1.2", + "@vitest/utils": "4.1.2", + "chai": "^6.2.2", + "tinyrainbow": "^3.1.0" }, - "engines": { - "node": ">=14.0.0" + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/@rolldown/binding-win32-arm64-msvc": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.12.tgz", - "integrity": "sha512-5eOND4duWkwx1AzCxadcOrNeighiLwMInEADT0YM7xeEOOFcovWZCq8dadXgcRHSf3Ulh1kFo/qvzoFiCLOL1Q==", - "cpu": [ - "arm64" - ], + "node_modules/@vitest/pretty-format": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.2.tgz", + "integrity": "sha512-dwQga8aejqeuB+TvXCMzSQemvV9hNEtDDpgUKDzOmNQayl2OG241PSWeJwKRH3CiC+sESrmoFd49rfnq7T4RnA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" + "dependencies": { + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/@rolldown/binding-win32-x64-msvc": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.12.tgz", - "integrity": "sha512-PyqoipaswDLAZtot351MLhrlrh6lcZPo2LSYE+VDxbVk24LVKAGOuE4hb8xZQmrPAuEtTZW8E6D2zc5EUZX4Lw==", - "cpu": [ - "x64" - ], + "node_modules/@vitest/runner": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.2.tgz", + "integrity": "sha512-Gr+FQan34CdiYAwpGJmQG8PgkyFVmARK8/xSijia3eTFgVfpcpztWLuP6FttGNfPLJhaZVP/euvujeNYar36OQ==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" + "dependencies": { + "@vitest/utils": "4.1.2", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", - "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "node_modules/@vitest/snapshot": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.2.tgz", + "integrity": "sha512-g7yfUmxYS4mNxk31qbOYsSt2F4m1E02LFqO53Xpzg3zKMhLAPZAjjfyl9e6z7HrW6LvUdTwAQR3HHfLjpko16A==", "dev": true, - "license": "MIT" - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.1.tgz", - "integrity": "sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==", - "cpu": [ - "arm" - ], "license": "MIT", - "optional": true, - "os": [ - "android" - ] + "dependencies": { + "@vitest/pretty-format": "4.1.2", + "@vitest/utils": "4.1.2", + "magic-string": "^0.30.21", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.1.tgz", - "integrity": "sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==", - "cpu": [ - "arm64" - ], + "node_modules/@vitest/spy": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.2.tgz", + "integrity": "sha512-DU4fBnbVCJGNBwVA6xSToNXrkZNSiw59H8tcuUspVMsBDBST4nfvsPsEHDHGtWRRnqBERBQu7TrTKskmjqTXKA==", + "dev": true, "license": "MIT", - "optional": true, - "os": [ - "android" - ] + "funding": { + "url": "https://opencollective.com/vitest" + } }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.1.tgz", - "integrity": "sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==", - "cpu": [ - "arm64" - ], + "node_modules/@vitest/utils": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.2.tgz", + "integrity": "sha512-xw2/TiX82lQHA06cgbqRKFb5lCAy3axQ4H4SoUFhUsg+wztiet+co86IAMDtF6Vm1hc7J6j09oh/rgDn+JdKIQ==", + "dev": true, "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.1.tgz", - "integrity": "sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.1.tgz", - "integrity": "sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.1.tgz", - "integrity": "sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.1.tgz", - "integrity": "sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.1.tgz", - "integrity": "sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.1.tgz", - "integrity": "sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.1.tgz", - "integrity": "sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.1.tgz", - "integrity": "sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==", - "cpu": [ - "loong64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.1.tgz", - "integrity": "sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==", - "cpu": [ - "loong64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.1.tgz", - "integrity": "sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.1.tgz", - "integrity": "sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==", - "cpu": [ - "ppc64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.1.tgz", - "integrity": "sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.1.tgz", - "integrity": "sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==", - "cpu": [ - "riscv64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.1.tgz", - "integrity": "sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==", - "cpu": [ - "s390x" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.1.tgz", - "integrity": "sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.1.tgz", - "integrity": "sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.1.tgz", - "integrity": "sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ] - }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.1.tgz", - "integrity": "sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.1.tgz", - "integrity": "sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.1.tgz", - "integrity": "sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==", - "cpu": [ - "ia32" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.1.tgz", - "integrity": "sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.1.tgz", - "integrity": "sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@standard-schema/spec": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", - "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@swc/helpers": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.21.tgz", - "integrity": "sha512-jI/VAmtdjB/RnI8GTnokyX7Ug8c+g+ffD6QRLa6XQewtnGyukKkKSk3wLTM3b5cjt1jNh9x0jfVlagdN2gDKQg==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.8.0" - } - }, - "node_modules/@tailwindcss/node": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.2.2.tgz", - "integrity": "sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==", - "license": "MIT", - "dependencies": { - "@jridgewell/remapping": "^2.3.5", - "enhanced-resolve": "^5.19.0", - "jiti": "^2.6.1", - "lightningcss": "1.32.0", - "magic-string": "^0.30.21", - "source-map-js": "^1.2.1", - "tailwindcss": "4.2.2" - } - }, - "node_modules/@tailwindcss/oxide": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.2.2.tgz", - "integrity": "sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg==", - "license": "MIT", - "engines": { - "node": ">= 20" - }, - "optionalDependencies": { - "@tailwindcss/oxide-android-arm64": "4.2.2", - "@tailwindcss/oxide-darwin-arm64": "4.2.2", - "@tailwindcss/oxide-darwin-x64": "4.2.2", - "@tailwindcss/oxide-freebsd-x64": "4.2.2", - "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.2", - "@tailwindcss/oxide-linux-arm64-gnu": "4.2.2", - "@tailwindcss/oxide-linux-arm64-musl": "4.2.2", - "@tailwindcss/oxide-linux-x64-gnu": "4.2.2", - "@tailwindcss/oxide-linux-x64-musl": "4.2.2", - "@tailwindcss/oxide-wasm32-wasi": "4.2.2", - "@tailwindcss/oxide-win32-arm64-msvc": "4.2.2", - "@tailwindcss/oxide-win32-x64-msvc": "4.2.2" - } - }, - "node_modules/@tailwindcss/oxide-android-arm64": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.2.2.tgz", - "integrity": "sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-darwin-arm64": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.2.2.tgz", - "integrity": "sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-darwin-x64": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.2.2.tgz", - "integrity": "sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-freebsd-x64": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.2.2.tgz", - "integrity": "sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.2.2.tgz", - "integrity": "sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ==", - "cpu": [ - "arm" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.2.2.tgz", - "integrity": "sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-linux-arm64-musl": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.2.2.tgz", - "integrity": "sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-linux-x64-gnu": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.2.2.tgz", - "integrity": "sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-linux-x64-musl": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.2.2.tgz", - "integrity": "sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-wasm32-wasi": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.2.2.tgz", - "integrity": "sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q==", - "bundleDependencies": [ - "@napi-rs/wasm-runtime", - "@emnapi/core", - "@emnapi/runtime", - "@tybys/wasm-util", - "@emnapi/wasi-threads", - "tslib" - ], - "cpu": [ - "wasm32" - ], - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "^1.8.1", - "@emnapi/runtime": "^1.8.1", - "@emnapi/wasi-threads": "^1.1.0", - "@napi-rs/wasm-runtime": "^1.1.1", - "@tybys/wasm-util": "^0.10.1", - "tslib": "^2.8.1" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.2.2.tgz", - "integrity": "sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ==", - "cpu": [ - "arm64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/oxide-win32-x64-msvc": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.2.2.tgz", - "integrity": "sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA==", - "cpu": [ - "x64" - ], - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 20" - } - }, - "node_modules/@tailwindcss/vite": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@tailwindcss/vite/-/vite-4.2.2.tgz", - "integrity": "sha512-mEiF5HO1QqCLXoNEfXVA1Tzo+cYsrqV7w9Juj2wdUFyW07JRenqMG225MvPwr3ZD9N1bFQj46X7r33iHxLUW0w==", - "license": "MIT", - "dependencies": { - "@tailwindcss/node": "4.2.2", - "@tailwindcss/oxide": "4.2.2", - "tailwindcss": "4.2.2" - }, - "peerDependencies": { - "vite": "^5.2.0 || ^6 || ^7 || ^8" - } - }, - "node_modules/@tanstack/react-virtual": { - "version": "3.13.23", - "resolved": "https://registry.npmjs.org/@tanstack/react-virtual/-/react-virtual-3.13.23.tgz", - "integrity": "sha512-XnMRnHQ23piOVj2bzJqHrRrLg4r+F86fuBcwteKfbIjJrtGxb4z7tIvPVAe4B+4UVwo9G4Giuz5fmapcrnZ0OQ==", - "license": "MIT", - "dependencies": { - "@tanstack/virtual-core": "3.13.23" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/@tanstack/virtual-core": { - "version": "3.13.23", - "resolved": "https://registry.npmjs.org/@tanstack/virtual-core/-/virtual-core-3.13.23.tgz", - "integrity": "sha512-zSz2Z2HNyLjCplANTDyl3BcdQJc2k1+yyFoKhNRmCr7V7dY8o8q5m8uFTI1/Pg1kL+Hgrz6u3Xo6eFUB7l66cg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/tannerlinsley" - } - }, - "node_modules/@tybys/wasm-util": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", - "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", - "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", - "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.28.2" - } - }, - "node_modules/@types/chai": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", - "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/deep-eql": "*", - "assertion-error": "^2.0.1" - } - }, - "node_modules/@types/deep-eql": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", - "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "19.2.14", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.14.tgz", - "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", - "license": "MIT", - "peer": true, - "dependencies": { - "csstype": "^3.2.2" - } - }, - "node_modules/@types/react-dom": { - "version": "19.2.3", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-19.2.3.tgz", - "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@types/react": "^19.2.0" - } - }, - "node_modules/@types/react-reconciler": { - "version": "0.33.0", - "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.33.0.tgz", - "integrity": "sha512-HZOXsKT0tGI9LlUw2LuedXsVeB88wFa536vVL0M6vE8zN63nI+sSr1ByxmPToP5K5bukaVscyeCJcF9guVNJ1g==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*" - } - }, - "node_modules/@vitejs/plugin-react": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", - "integrity": "sha512-gUu9hwfWvvEDBBmgtAowQCojwZmJ5mcLn3aufeCsitijs3+f2NsrPtlAWIR6OPiqljl96GVCUbLe0HyqIpVaoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.28.0", - "@babel/plugin-transform-react-jsx-self": "^7.27.1", - "@babel/plugin-transform-react-jsx-source": "^7.27.1", - "@rolldown/pluginutils": "1.0.0-beta.27", - "@types/babel__core": "^7.20.5", - "react-refresh": "^0.17.0" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0" - } - }, - "node_modules/@vitest/expect": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.2.tgz", - "integrity": "sha512-gbu+7B0YgUJ2nkdsRJrFFW6X7NTP44WlhiclHniUhxADQJH5Szt9mZ9hWnJPJ8YwOK5zUOSSlSvyzRf0u1DSBQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@standard-schema/spec": "^1.1.0", - "@types/chai": "^5.2.2", - "@vitest/spy": "4.1.2", - "@vitest/utils": "4.1.2", - "chai": "^6.2.2", - "tinyrainbow": "^3.1.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/pretty-format": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.2.tgz", - "integrity": "sha512-dwQga8aejqeuB+TvXCMzSQemvV9hNEtDDpgUKDzOmNQayl2OG241PSWeJwKRH3CiC+sESrmoFd49rfnq7T4RnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "tinyrainbow": "^3.1.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/runner": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.1.2.tgz", - "integrity": "sha512-Gr+FQan34CdiYAwpGJmQG8PgkyFVmARK8/xSijia3eTFgVfpcpztWLuP6FttGNfPLJhaZVP/euvujeNYar36OQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/utils": "4.1.2", - "pathe": "^2.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/snapshot": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.1.2.tgz", - "integrity": "sha512-g7yfUmxYS4mNxk31qbOYsSt2F4m1E02LFqO53Xpzg3zKMhLAPZAjjfyl9e6z7HrW6LvUdTwAQR3HHfLjpko16A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "4.1.2", - "@vitest/utils": "4.1.2", - "magic-string": "^0.30.21", - "pathe": "^2.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/spy": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.2.tgz", - "integrity": "sha512-DU4fBnbVCJGNBwVA6xSToNXrkZNSiw59H8tcuUspVMsBDBST4nfvsPsEHDHGtWRRnqBERBQu7TrTKskmjqTXKA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/utils": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.2.tgz", - "integrity": "sha512-xw2/TiX82lQHA06cgbqRKFb5lCAy3axQ4H4SoUFhUsg+wztiet+co86IAMDtF6Vm1hc7J6j09oh/rgDn+JdKIQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "4.1.2", - "convert-source-map": "^2.0.0", - "tinyrainbow": "^3.1.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/assertion-error": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", - "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/baseline-browser-mapping": { - "version": "2.10.14", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.14.tgz", - "integrity": "sha512-fOVLPAsFTsQfuCkvahZkzq6nf8KvGWanlYoTh0SVA0A/PIUxQGU2AOZAoD95n2gFLVDW/jP6sbGLny95nmEuHA==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "baseline-browser-mapping": "dist/cli.cjs" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/browserslist": { - "version": "4.28.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", - "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "baseline-browser-mapping": "^2.10.12", - "caniuse-lite": "^1.0.30001782", - "electron-to-chromium": "^1.5.328", - "node-releases": "^2.0.36", - "update-browserslist-db": "^1.2.3" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001784", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001784.tgz", - "integrity": "sha512-WU346nBTklUV9YfUl60fqRbU5ZqyXlqvo1SgigE1OAXK5bFL8LL9q1K7aap3N739l4BvNqnkm3YrGHiY9sfUQw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/chai": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", - "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/classnames": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", - "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", - "license": "MIT" - }, - "node_modules/clsx": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", - "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true, - "license": "MIT" - }, - "node_modules/csstype": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", - "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", - "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/detect-libc": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", - "license": "Apache-2.0", - "engines": { - "node": ">=8" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.5.331", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.331.tgz", - "integrity": "sha512-IbxXrsTlD3hRodkLnbxAPP4OuJYdWCeM3IOdT+CpcMoIwIoDfCmRpEtSPfwBXxVkg9xmBeY7Lz2Eo2TDn/HC3Q==", - "dev": true, - "license": "ISC" - }, - "node_modules/enhanced-resolve": { - "version": "5.20.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz", - "integrity": "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.3.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/es-module-lexer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", - "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", - "dev": true, - "license": "MIT" - }, - "node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/expect-type": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", - "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "license": "ISC" - }, - "node_modules/its-fine": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/its-fine/-/its-fine-2.0.0.tgz", - "integrity": "sha512-KLViCmWx94zOvpLwSlsx6yOCeMhZYaxrJV87Po5k/FoZzcPSahvK5qJ7fYhS61sZi5ikmh2S3Hz55A2l3U69ng==", - "license": "MIT", - "dependencies": { - "@types/react-reconciler": "^0.28.9" - }, - "peerDependencies": { - "react": "^19.0.0" - } - }, - "node_modules/its-fine/node_modules/@types/react-reconciler": { - "version": "0.28.9", - "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.28.9.tgz", - "integrity": "sha512-HHM3nxyUZ3zAylX8ZEyrDNd2XZOnQ0D5XfunJF5FLQnZbHHYq4UWvW1QfelQNXv1ICNkwYhfxjwfnqivYB6bFg==", - "license": "MIT", - "peerDependencies": { - "@types/react": "*" - } - }, - "node_modules/jiti": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", - "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", - "license": "MIT", - "bin": { - "jiti": "lib/jiti-cli.mjs" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/konva": { - "version": "9.3.22", - "resolved": "https://registry.npmjs.org/konva/-/konva-9.3.22.tgz", - "integrity": "sha512-yQI5d1bmELlD/fowuyfOp9ff+oamg26WOCkyqUyc+nczD/lhRa3EvD2MZOoc4c1293TAubW9n34fSQLgSeEgSw==", - "funding": [ - { - "type": "patreon", - "url": "https://www.patreon.com/lavrton" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/konva" - }, - { - "type": "github", - "url": "https://github.com/sponsors/lavrton" - } - ], - "license": "MIT", - "peer": true - }, - "node_modules/lightningcss": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", - "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", - "license": "MPL-2.0", - "dependencies": { - "detect-libc": "^2.0.3" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "lightningcss-android-arm64": "1.32.0", - "lightningcss-darwin-arm64": "1.32.0", - "lightningcss-darwin-x64": "1.32.0", - "lightningcss-freebsd-x64": "1.32.0", - "lightningcss-linux-arm-gnueabihf": "1.32.0", - "lightningcss-linux-arm64-gnu": "1.32.0", - "lightningcss-linux-arm64-musl": "1.32.0", - "lightningcss-linux-x64-gnu": "1.32.0", - "lightningcss-linux-x64-musl": "1.32.0", - "lightningcss-win32-arm64-msvc": "1.32.0", - "lightningcss-win32-x64-msvc": "1.32.0" - } - }, - "node_modules/lightningcss-android-arm64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", - "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", - "cpu": [ - "arm64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-arm64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", - "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", - "cpu": [ - "arm64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-darwin-x64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", - "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", - "cpu": [ - "x64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-freebsd-x64": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", - "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", - "cpu": [ - "x64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", - "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", - "cpu": [ - "arm" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", - "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", - "cpu": [ - "arm64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", - "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", - "cpu": [ - "arm64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", - "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", - "cpu": [ - "x64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-linux-x64-musl": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", - "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", - "cpu": [ - "x64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", - "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", - "cpu": [ - "arm64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.32.0", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", - "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", - "cpu": [ - "x64" - ], - "license": "MPL-2.0", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/lucide-react": { - "version": "0.562.0", - "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.562.0.tgz", - "integrity": "sha512-82hOAu7y0dbVuFfmO4bYF1XEwYk/mEbM5E+b1jgci/udUBEE/R7LF5Ip0CCEmXe8AybRM8L+04eP+LGZeDvkiw==", - "license": "ISC", - "peerDependencies": { - "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" - } - }, - "node_modules/magic-string": { - "version": "0.30.21", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true, - "license": "MIT" - }, - "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/node-releases": { - "version": "2.0.37", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.37.tgz", - "integrity": "sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==", - "dev": true, - "license": "MIT" - }, - "node_modules/obug": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", - "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", - "dev": true, - "funding": [ - "https://github.com/sponsors/sxzz", - "https://opencollective.com/debug" - ], - "license": "MIT" - }, - "node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true, - "license": "MIT" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=12" + "dependencies": { + "@vitest/pretty-format": "4.1.2", + "convert-source-map": "^2.0.0", + "tinyrainbow": "^3.1.0" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://opencollective.com/vitest" } }, - "node_modules/postcss": { - "version": "8.5.8", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", - "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, "license": "MIT", - "dependencies": { - "nanoid": "^3.3.11", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, "engines": { - "node": "^10 || ^12 || >=14" + "node": ">=12" } }, - "node_modules/react": { - "version": "19.2.4", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", - "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", + "node_modules/chai": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", + "dev": true, "license": "MIT", - "peer": true, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "19.2.4", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", - "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", - "license": "MIT", - "peer": true, - "dependencies": { - "scheduler": "^0.27.0" - }, - "peerDependencies": { - "react": "^19.2.4" - } - }, - "node_modules/react-konva": { - "version": "19.2.3", - "resolved": "https://registry.npmjs.org/react-konva/-/react-konva-19.2.3.tgz", - "integrity": "sha512-VsO5CJZwUo12xFa33UEIDOQn6ZZBeE6jlkStGFvpR/3NiDA/9RPQTzw6Ri++C0Pnh3Arco1AehB8qJNv9YCRwg==", - "funding": [ - { - "type": "patreon", - "url": "https://www.patreon.com/lavrton" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/konva" - }, - { - "type": "github", - "url": "https://github.com/sponsors/lavrton" - } - ], - "license": "MIT", - "dependencies": { - "@types/react-reconciler": "^0.33.0", - "its-fine": "^2.0.0", - "react-reconciler": "0.33.0", - "scheduler": "0.27.0" - }, - "peerDependencies": { - "konva": "^8.0.1 || ^7.2.5 || ^9.0.0 || ^10.0.0", - "react": "^19.2.0", - "react-dom": "^19.2.0" + "node": ">=18" } }, - "node_modules/react-reconciler": { - "version": "0.33.0", - "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.33.0.tgz", - "integrity": "sha512-KetWRytFv1epdpJc3J4G75I4WrplZE5jOL7Yq0p34+OVOKF4Se7WrdIdVC45XsSSmUTlht2FM/fM1FZb1mfQeA==", - "license": "MIT", - "dependencies": { - "scheduler": "^0.27.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "peerDependencies": { - "react": "^19.2.0" - } + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", + "license": "MIT" }, - "node_modules/react-refresh": { - "version": "0.17.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", - "integrity": "sha512-z6F7K9bV85EfseRCp2bzrpyQ0Gkw1uLoCel9XBVWPg/TjRj94SkJzUTGfOa4bs7iJvBWtQG0Wq7wnI0syw3EBQ==", - "dev": true, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/rolldown": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.12.tgz", - "integrity": "sha512-yP4USLIMYrwpPHEFB5JGH1uxhcslv6/hL0OyvTuY+3qlOSJvZ7ntYnoWpehBxufkgN0cvXxppuTu5hHa/zPh+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@oxc-project/types": "=0.122.0", - "@rolldown/pluginutils": "1.0.0-rc.12" - }, - "bin": { - "rolldown": "bin/cli.mjs" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "optionalDependencies": { - "@rolldown/binding-android-arm64": "1.0.0-rc.12", - "@rolldown/binding-darwin-arm64": "1.0.0-rc.12", - "@rolldown/binding-darwin-x64": "1.0.0-rc.12", - "@rolldown/binding-freebsd-x64": "1.0.0-rc.12", - "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.12", - "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.12", - "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.12", - "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.12", - "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.12", - "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.12", - "@rolldown/binding-linux-x64-musl": "1.0.0-rc.12", - "@rolldown/binding-openharmony-arm64": "1.0.0-rc.12", - "@rolldown/binding-wasm32-wasi": "1.0.0-rc.12", - "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.12", - "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.12" - } - }, - "node_modules/rolldown/node_modules/@rolldown/pluginutils": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.12.tgz", - "integrity": "sha512-HHMwmarRKvoFsJorqYlFeFRzXZqCt2ETQlEDOb9aqssrnVBB1/+xgTGtuTrIk5vzLNX1MjMtTf7W9z3tsSbrxw==", + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true, "license": "MIT" }, - "node_modules/rollup": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.1.tgz", - "integrity": "sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==", - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.8" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.60.1", - "@rollup/rollup-android-arm64": "4.60.1", - "@rollup/rollup-darwin-arm64": "4.60.1", - "@rollup/rollup-darwin-x64": "4.60.1", - "@rollup/rollup-freebsd-arm64": "4.60.1", - "@rollup/rollup-freebsd-x64": "4.60.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.60.1", - "@rollup/rollup-linux-arm-musleabihf": "4.60.1", - "@rollup/rollup-linux-arm64-gnu": "4.60.1", - "@rollup/rollup-linux-arm64-musl": "4.60.1", - "@rollup/rollup-linux-loong64-gnu": "4.60.1", - "@rollup/rollup-linux-loong64-musl": "4.60.1", - "@rollup/rollup-linux-ppc64-gnu": "4.60.1", - "@rollup/rollup-linux-ppc64-musl": "4.60.1", - "@rollup/rollup-linux-riscv64-gnu": "4.60.1", - "@rollup/rollup-linux-riscv64-musl": "4.60.1", - "@rollup/rollup-linux-s390x-gnu": "4.60.1", - "@rollup/rollup-linux-x64-gnu": "4.60.1", - "@rollup/rollup-linux-x64-musl": "4.60.1", - "@rollup/rollup-openbsd-x64": "4.60.1", - "@rollup/rollup-openharmony-arm64": "4.60.1", - "@rollup/rollup-win32-arm64-msvc": "4.60.1", - "@rollup/rollup-win32-ia32-msvc": "4.60.1", - "@rollup/rollup-win32-x64-gnu": "4.60.1", - "@rollup/rollup-win32-x64-msvc": "4.60.1", - "fsevents": "~2.3.2" - } - }, - "node_modules/scheduler": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", - "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "license": "MIT" }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "license": "Apache-2.0", + "engines": { + "node": ">=8" } }, - "node_modules/sharp": { - "version": "0.34.5", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", - "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "node_modules/enhanced-resolve": { + "version": "5.24.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.24.3.tgz", + "integrity": "sha512-PwKooW9JUzh5chmYfHM3IQl5OkK2u2Nm011MgeZrss3JmFraUx/fqrf78kk8GUMYoibx/14MdwTl/1WKkG7TpQ==", "dev": true, - "hasInstallScript": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "@img/colour": "^1.0.0", - "detect-libc": "^2.1.2", - "semver": "^7.7.3" - }, - "engines": { - "node": "^18.17.0 || ^20.3.0 || >=21.0.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - }, - "optionalDependencies": { - "@img/sharp-darwin-arm64": "0.34.5", - "@img/sharp-darwin-x64": "0.34.5", - "@img/sharp-libvips-darwin-arm64": "1.2.4", - "@img/sharp-libvips-darwin-x64": "1.2.4", - "@img/sharp-libvips-linux-arm": "1.2.4", - "@img/sharp-libvips-linux-arm64": "1.2.4", - "@img/sharp-libvips-linux-ppc64": "1.2.4", - "@img/sharp-libvips-linux-riscv64": "1.2.4", - "@img/sharp-libvips-linux-s390x": "1.2.4", - "@img/sharp-libvips-linux-x64": "1.2.4", - "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", - "@img/sharp-libvips-linuxmusl-x64": "1.2.4", - "@img/sharp-linux-arm": "0.34.5", - "@img/sharp-linux-arm64": "0.34.5", - "@img/sharp-linux-ppc64": "0.34.5", - "@img/sharp-linux-riscv64": "0.34.5", - "@img/sharp-linux-s390x": "0.34.5", - "@img/sharp-linux-x64": "0.34.5", - "@img/sharp-linuxmusl-arm64": "0.34.5", - "@img/sharp-linuxmusl-x64": "0.34.5", - "@img/sharp-wasm32": "0.34.5", - "@img/sharp-win32-arm64": "0.34.5", - "@img/sharp-win32-ia32": "0.34.5", - "@img/sharp-win32-x64": "0.34.5" - } - }, - "node_modules/sharp/node_modules/semver": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", - "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "graceful-fs": "^4.2.4", + "tapable": "^2.3.3" }, "engines": { - "node": ">=10" + "node": ">=10.13.0" } }, - "node_modules/siginfo": { + "node_modules/es-module-lexer": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", - "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", - "dev": true, - "license": "ISC" - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/stackback": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", - "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", + "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", "dev": true, "license": "MIT" }, - "node_modules/std-env": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.0.0.tgz", - "integrity": "sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==", + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "dev": true, - "license": "MIT" - }, - "node_modules/tabbable": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.4.0.tgz", - "integrity": "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==", - "license": "MIT" - }, - "node_modules/tailwindcss": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.2.2.tgz", - "integrity": "sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==", - "license": "MIT" - }, - "node_modules/tapable": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.2.tgz", - "integrity": "sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==", "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "dependencies": { + "@types/estree": "^1.0.0" } }, - "node_modules/tinybench": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", - "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", - "dev": true, - "license": "MIT" - }, - "node_modules/tinyexec": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.4.tgz", - "integrity": "sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==", + "node_modules/expect-type": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", + "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "engines": { - "node": ">=18" + "node": ">=12.0.0" } }, - "node_modules/tinyglobby": { - "version": "0.2.15", - "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", - "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.3" - }, "engines": { "node": ">=12.0.0" }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, - "node_modules/tinyrainbow": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz", - "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==", + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, + "hasInstallScript": true, "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=14.0.0" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" - }, - "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "license": "ISC" + }, + "node_modules/its-fine": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/its-fine/-/its-fine-2.0.0.tgz", + "integrity": "sha512-KLViCmWx94zOvpLwSlsx6yOCeMhZYaxrJV87Po5k/FoZzcPSahvK5qJ7fYhS61sZi5ikmh2S3Hz55A2l3U69ng==", + "license": "MIT", + "dependencies": { + "@types/react-reconciler": "^0.28.9" }, - "engines": { - "node": ">=14.17" + "peerDependencies": { + "react": "^19.0.0" } }, - "node_modules/update-browserslist-db": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", - "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "node_modules/its-fine/node_modules/@types/react-reconciler": { + "version": "0.28.9", + "resolved": "https://registry.npmjs.org/@types/react-reconciler/-/react-reconciler-0.28.9.tgz", + "integrity": "sha512-HHM3nxyUZ3zAylX8ZEyrDNd2XZOnQ0D5XfunJF5FLQnZbHHYq4UWvW1QfelQNXv1ICNkwYhfxjwfnqivYB6bFg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*" + } + }, + "node_modules/jiti": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.7.0.tgz", + "integrity": "sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==", "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/konva": { + "version": "9.3.22", + "resolved": "https://registry.npmjs.org/konva/-/konva-9.3.22.tgz", + "integrity": "sha512-yQI5d1bmELlD/fowuyfOp9ff+oamg26WOCkyqUyc+nczD/lhRa3EvD2MZOoc4c1293TAubW9n34fSQLgSeEgSw==", "funding": [ { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" + "type": "patreon", + "url": "https://www.patreon.com/lavrton" }, { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" + "type": "opencollective", + "url": "https://opencollective.com/konva" }, { "type": "github", - "url": "https://github.com/sponsors/ai" + "url": "https://github.com/sponsors/lavrton" } ], - "license": "MIT", + "license": "MIT" + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "license": "MPL-2.0", "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" + "detect-libc": "^2.0.3" }, - "bin": { - "update-browserslist-db": "cli.js" + "engines": { + "node": ">= 12.0.0" }, - "peerDependencies": { - "browserslist": ">= 4.21.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" } }, - "node_modules/use-sync-external-store": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", - "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", - "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + "node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/vite": { - "version": "5.4.21", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", - "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", - "license": "MIT", - "peer": true, - "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" - }, - "bin": { - "vite": "bin/vite.js" - }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "^18.0.0 || >=20.0.0" + "node": ">= 12.0.0" }, "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/vitest": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.2.tgz", - "integrity": "sha512-xjR1dMTVHlFLh98JE3i/f/WePqJsah4A0FK9cc8Ehp9Udk0AZk6ccpIZhh1qJ/yxVWRZ+Q54ocnD8TXmkhspGg==", + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/expect": "4.1.2", - "@vitest/mocker": "4.1.2", - "@vitest/pretty-format": "4.1.2", - "@vitest/runner": "4.1.2", - "@vitest/snapshot": "4.1.2", - "@vitest/spy": "4.1.2", - "@vitest/utils": "4.1.2", - "es-module-lexer": "^2.0.0", - "expect-type": "^1.3.0", - "magic-string": "^0.30.21", - "obug": "^2.1.1", - "pathe": "^2.0.3", - "picomatch": "^4.0.3", - "std-env": "^4.0.0-rc.1", - "tinybench": "^2.9.0", - "tinyexec": "^1.0.2", - "tinyglobby": "^0.2.15", - "tinyrainbow": "^3.1.0", - "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", - "why-is-node-running": "^2.3.0" - }, - "bin": { - "vitest": "vitest.mjs" - }, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^20.0.0 || ^22.0.0 || >=24.0.0" + "node": ">= 12.0.0" }, "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "@edge-runtime/vm": "*", - "@opentelemetry/api": "^1.9.0", - "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", - "@vitest/browser-playwright": "4.1.2", - "@vitest/browser-preview": "4.1.2", - "@vitest/browser-webdriverio": "4.1.2", - "@vitest/ui": "4.1.2", - "happy-dom": "*", - "jsdom": "*", - "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" }, - "peerDependenciesMeta": { - "@edge-runtime/vm": { - "optional": true - }, - "@opentelemetry/api": { - "optional": true - }, - "@types/node": { - "optional": true - }, - "@vitest/browser-playwright": { - "optional": true - }, - "@vitest/browser-preview": { - "optional": true - }, - "@vitest/browser-webdriverio": { - "optional": true - }, - "@vitest/ui": { - "optional": true - }, - "happy-dom": { - "optional": true - }, - "jsdom": { - "optional": true - }, - "vite": { - "optional": false - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/vitest/node_modules/@esbuild/aix-ppc64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.7.tgz", - "integrity": "sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==", + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", "cpu": [ - "ppc64" + "x64" ], "dev": true, - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ - "aix" + "linux" ], "engines": { - "node": ">=18" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/vitest/node_modules/@esbuild/android-arm": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.7.tgz", - "integrity": "sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==", + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", "cpu": [ - "arm" + "x64" ], "dev": true, - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ - "android" + "linux" ], "engines": { - "node": ">=18" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/vitest/node_modules/@esbuild/android-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.7.tgz", - "integrity": "sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==", + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", "cpu": [ "arm64" ], "dev": true, - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ - "android" + "win32" ], "engines": { - "node": ">=18" + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/vitest/node_modules/@esbuild/android-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.7.tgz", - "integrity": "sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==", + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", "cpu": [ "x64" ], "dev": true, - "license": "MIT", + "license": "MPL-2.0", "optional": true, "os": [ - "android" + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lucide-react": { + "version": "0.562.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.562.0.tgz", + "integrity": "sha512-82hOAu7y0dbVuFfmO4bYF1XEwYk/mEbM5E+b1jgci/udUBEE/R7LF5Ip0CCEmXe8AybRM8L+04eP+LGZeDvkiw==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/nanoid": { + "version": "3.3.18", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", + "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/obug": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", + "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" ], + "license": "MIT" + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/playwright": { + "version": "1.62.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.62.1.tgz", + "integrity": "sha512-0M+L3LAD8/nm554LOla9Ayx0j0tmFZ0FBcoQ7F1VuVHpM/XpiC8RcDzBQB8W5+hA8L22THxELzeF+2WcUzvcLg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.62.1" + }, + "bin": { + "playwright": "cli.js" + }, "engines": { - "node": ">=18" + "node": ">=20" + }, + "optionalDependencies": { + "fsevents": "2.3.2" } }, - "node_modules/vitest/node_modules/@esbuild/darwin-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.7.tgz", - "integrity": "sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==", - "cpu": [ - "arm64" - ], + "node_modules/playwright-core": { + "version": "1.62.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.62.1.tgz", + "integrity": "sha512-wPYSwEBJY9GHraISXqyqtx0na0LpO3XEX7jNDhntbex7tzUS7kLnZsOlFruFJB4Hi/rhDMjXGqHewDZ68nYZVw==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, "engines": { - "node": ">=18" + "node": ">=20" } }, - "node_modules/vitest/node_modules/@esbuild/darwin-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.7.tgz", - "integrity": "sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==", - "cpu": [ - "x64" - ], + "node_modules/playwright/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, + "hasInstallScript": true, "license": "MIT", "optional": true, "os": [ "darwin" ], "engines": { - "node": ">=18" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/vitest/node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.7.tgz", - "integrity": "sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==", - "cpu": [ - "arm64" - ], + "node_modules/postcss": { + "version": "8.5.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.23.tgz", + "integrity": "sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.16", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, "engines": { - "node": ">=18" + "node": "^10 || ^12 || >=14" } }, - "node_modules/vitest/node_modules/@esbuild/freebsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.7.tgz", - "integrity": "sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==", - "cpu": [ - "x64" - ], - "dev": true, + "node_modules/react": { + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", + "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], "engines": { - "node": ">=18" + "node": ">=0.10.0" } }, - "node_modules/vitest/node_modules/@esbuild/linux-arm": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.7.tgz", - "integrity": "sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==", - "cpu": [ - "arm" - ], - "dev": true, + "node_modules/react-dom": { + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", + "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "scheduler": "^0.27.0" + }, + "peerDependencies": { + "react": "^19.2.4" } }, - "node_modules/vitest/node_modules/@esbuild/linux-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.7.tgz", - "integrity": "sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==", - "cpu": [ - "arm64" + "node_modules/react-konva": { + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react-konva/-/react-konva-19.2.3.tgz", + "integrity": "sha512-VsO5CJZwUo12xFa33UEIDOQn6ZZBeE6jlkStGFvpR/3NiDA/9RPQTzw6Ri++C0Pnh3Arco1AehB8qJNv9YCRwg==", + "funding": [ + { + "type": "patreon", + "url": "https://www.patreon.com/lavrton" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/konva" + }, + { + "type": "github", + "url": "https://github.com/sponsors/lavrton" + } ], - "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" + "dependencies": { + "@types/react-reconciler": "^0.33.0", + "its-fine": "^2.0.0", + "react-reconciler": "0.33.0", + "scheduler": "0.27.0" + }, + "peerDependencies": { + "konva": "^8.0.1 || ^7.2.5 || ^9.0.0 || ^10.0.0", + "react": "^19.2.0", + "react-dom": "^19.2.0" } }, - "node_modules/vitest/node_modules/@esbuild/linux-ia32": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.7.tgz", - "integrity": "sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==", - "cpu": [ - "ia32" - ], - "dev": true, + "node_modules/react-reconciler": { + "version": "0.33.0", + "resolved": "https://registry.npmjs.org/react-reconciler/-/react-reconciler-0.33.0.tgz", + "integrity": "sha512-KetWRytFv1epdpJc3J4G75I4WrplZE5jOL7Yq0p34+OVOKF4Se7WrdIdVC45XsSSmUTlht2FM/fM1FZb1mfQeA==", "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "scheduler": "^0.27.0" + }, "engines": { - "node": ">=18" + "node": ">=0.10.0" + }, + "peerDependencies": { + "react": "^19.2.0" } }, - "node_modules/vitest/node_modules/@esbuild/linux-loong64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.7.tgz", - "integrity": "sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==", - "cpu": [ - "loong64" - ], + "node_modules/rolldown": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.1.5.tgz", + "integrity": "sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "dependencies": { + "@oxc-project/types": "=0.139.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, "engines": { - "node": ">=18" + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.1.5", + "@rolldown/binding-darwin-arm64": "1.1.5", + "@rolldown/binding-darwin-x64": "1.1.5", + "@rolldown/binding-freebsd-x64": "1.1.5", + "@rolldown/binding-linux-arm-gnueabihf": "1.1.5", + "@rolldown/binding-linux-arm64-gnu": "1.1.5", + "@rolldown/binding-linux-arm64-musl": "1.1.5", + "@rolldown/binding-linux-ppc64-gnu": "1.1.5", + "@rolldown/binding-linux-s390x-gnu": "1.1.5", + "@rolldown/binding-linux-x64-gnu": "1.1.5", + "@rolldown/binding-linux-x64-musl": "1.1.5", + "@rolldown/binding-openharmony-arm64": "1.1.5", + "@rolldown/binding-wasm32-wasi": "1.1.5", + "@rolldown/binding-win32-arm64-msvc": "1.1.5", + "@rolldown/binding-win32-x64-msvc": "1.1.5" } }, - "node_modules/vitest/node_modules/@esbuild/linux-mips64el": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.7.tgz", - "integrity": "sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==", - "cpu": [ - "mips64el" - ], + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">=18" + "node": ">=10" } }, - "node_modules/vitest/node_modules/@esbuild/linux-ppc64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.7.tgz", - "integrity": "sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==", - "cpu": [ - "ppc64" - ], + "node_modules/sharp": { + "version": "0.35.3", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.35.3.tgz", + "integrity": "sha512-ej0zVHuZGHCiABXcNxeYhpRnPNPAcvbG8RMdBAhDAxLKkCRVSpK3Iyu7qbqw3JMzoj0REeM6f3tJLtVwl0023Q==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "Apache-2.0", + "dependencies": { + "@img/colour": "^1.1.0", + "detect-libc": "^2.1.2", + "semver": "^7.8.5" + }, "engines": { - "node": ">=18" + "node": ">=20.9.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.35.3", + "@img/sharp-darwin-x64": "0.35.3", + "@img/sharp-freebsd-wasm32": "0.35.3", + "@img/sharp-libvips-darwin-arm64": "1.3.2", + "@img/sharp-libvips-darwin-x64": "1.3.2", + "@img/sharp-libvips-linux-arm": "1.3.2", + "@img/sharp-libvips-linux-arm64": "1.3.2", + "@img/sharp-libvips-linux-ppc64": "1.3.2", + "@img/sharp-libvips-linux-riscv64": "1.3.2", + "@img/sharp-libvips-linux-s390x": "1.3.2", + "@img/sharp-libvips-linux-x64": "1.3.2", + "@img/sharp-libvips-linuxmusl-arm64": "1.3.2", + "@img/sharp-libvips-linuxmusl-x64": "1.3.2", + "@img/sharp-linux-arm": "0.35.3", + "@img/sharp-linux-arm64": "0.35.3", + "@img/sharp-linux-ppc64": "0.35.3", + "@img/sharp-linux-riscv64": "0.35.3", + "@img/sharp-linux-s390x": "0.35.3", + "@img/sharp-linux-x64": "0.35.3", + "@img/sharp-linuxmusl-arm64": "0.35.3", + "@img/sharp-linuxmusl-x64": "0.35.3", + "@img/sharp-webcontainers-wasm32": "0.35.3", + "@img/sharp-win32-arm64": "0.35.3", + "@img/sharp-win32-ia32": "0.35.3", + "@img/sharp-win32-x64": "0.35.3" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/vitest/node_modules/@esbuild/linux-riscv64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.7.tgz", - "integrity": "sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==", - "cpu": [ - "riscv64" - ], + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } + "license": "ISC" }, - "node_modules/vitest/node_modules/@esbuild/linux-s390x": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.7.tgz", - "integrity": "sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==", - "cpu": [ - "s390x" - ], + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], + "license": "BSD-3-Clause", "engines": { - "node": ">=18" + "node": ">=0.10.0" } }, - "node_modules/vitest/node_modules/@esbuild/linux-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.7.tgz", - "integrity": "sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==", - "cpu": [ - "x64" - ], + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-4.0.0.tgz", + "integrity": "sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/tabbable": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.4.0.tgz", + "integrity": "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==", + "license": "MIT" + }, + "node_modules/tailwindcss": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.3.3.tgz", + "integrity": "sha512-gOhV3P7ufE62QDGg1zVaTgCR+EtPv92k2nIhVcVKcLmxT1sUBsQGhnZj175j+MqRt4zLF7ic+sCYjfhxMxj7YQ==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=18" - } + "license": "MIT" }, - "node_modules/vitest/node_modules/@esbuild/netbsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.7.tgz", - "integrity": "sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==", - "cpu": [ - "x64" - ], + "node_modules/tapable": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], "engines": { - "node": ">=18" + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/vitest/node_modules/@esbuild/openbsd-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.7.tgz", - "integrity": "sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==", - "cpu": [ - "x64" - ], + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=18" - } + "license": "MIT" }, - "node_modules/vitest/node_modules/@esbuild/sunos-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.7.tgz", - "integrity": "sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==", - "cpu": [ - "x64" - ], + "node_modules/tinyexec": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.4.tgz", + "integrity": "sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], "engines": { "node": ">=18" } }, - "node_modules/vitest/node_modules/@esbuild/win32-arm64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.7.tgz", - "integrity": "sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==", - "cpu": [ - "arm64" - ], + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, "engines": { - "node": ">=18" + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/vitest/node_modules/@esbuild/win32-ia32": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.7.tgz", - "integrity": "sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==", - "cpu": [ - "ia32" - ], + "node_modules/tinyrainbow": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz", + "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==", "dev": true, "license": "MIT", - "optional": true, - "os": [ - "win32" - ], "engines": { - "node": ">=18" + "node": ">=14.0.0" } }, - "node_modules/vitest/node_modules/@esbuild/win32-x64": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.7.tgz", - "integrity": "sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==", - "cpu": [ - "x64" - ], + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/typescript": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, "engines": { - "node": ">=18" + "node": ">=14.17" } }, - "node_modules/vitest/node_modules/@vitest/mocker": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.2.tgz", - "integrity": "sha512-Ize4iQtEALHDttPRCmN+FKqOl2vxTiNUhzobQFFt/BM1lRUTG7zRCLOykG/6Vo4E4hnUdfVLo5/eqKPukcWW7Q==", - "dev": true, + "node_modules/use-sync-external-store": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz", + "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==", "license": "MIT", - "dependencies": { - "@vitest/spy": "4.1.2", - "estree-walker": "^3.0.3", - "magic-string": "^0.30.21" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, "peerDependencies": { - "msw": "^2.4.9", - "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "msw": { - "optional": true - }, - "vite": { - "optional": true - } + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, - "node_modules/vitest/node_modules/esbuild": { - "version": "0.27.7", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.7.tgz", - "integrity": "sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "peer": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.7", - "@esbuild/android-arm": "0.27.7", - "@esbuild/android-arm64": "0.27.7", - "@esbuild/android-x64": "0.27.7", - "@esbuild/darwin-arm64": "0.27.7", - "@esbuild/darwin-x64": "0.27.7", - "@esbuild/freebsd-arm64": "0.27.7", - "@esbuild/freebsd-x64": "0.27.7", - "@esbuild/linux-arm": "0.27.7", - "@esbuild/linux-arm64": "0.27.7", - "@esbuild/linux-ia32": "0.27.7", - "@esbuild/linux-loong64": "0.27.7", - "@esbuild/linux-mips64el": "0.27.7", - "@esbuild/linux-ppc64": "0.27.7", - "@esbuild/linux-riscv64": "0.27.7", - "@esbuild/linux-s390x": "0.27.7", - "@esbuild/linux-x64": "0.27.7", - "@esbuild/netbsd-arm64": "0.27.7", - "@esbuild/netbsd-x64": "0.27.7", - "@esbuild/openbsd-arm64": "0.27.7", - "@esbuild/openbsd-x64": "0.27.7", - "@esbuild/openharmony-arm64": "0.27.7", - "@esbuild/sunos-x64": "0.27.7", - "@esbuild/win32-arm64": "0.27.7", - "@esbuild/win32-ia32": "0.27.7", - "@esbuild/win32-x64": "0.27.7" - } - }, - "node_modules/vitest/node_modules/vite": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.3.tgz", - "integrity": "sha512-B9ifbFudT1TFhfltfaIPgjo9Z3mDynBTJSUYxTjOQruf/zHH+ezCQKcoqO+h7a9Pw9Nm/OtlXAiGT1axBgwqrQ==", + "node_modules/vite": { + "version": "8.1.5", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.1.5.tgz", + "integrity": "sha512-7ULLwsCdYx/nRyrpiEwvqb5TFHrMVZyBt+rg/OAXT7rgj/z+DtTDyKFeLAdDkubDVDKD8jOsndmy7m55XcfUsw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "lightningcss": "^1.32.0", - "picomatch": "^4.0.4", - "postcss": "^8.5.8", - "rolldown": "1.0.0-rc.12", - "tinyglobby": "^0.2.15" + "picomatch": "^4.0.5", + "postcss": "^8.5.17", + "rolldown": "~1.1.5", + "tinyglobby": "^0.2.17" }, "bin": { "vite": "bin/vite.js" @@ -4431,8 +2703,8 @@ }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", - "@vitejs/devtools": "^0.1.0", - "esbuild": "^0.27.0", + "@vitejs/devtools": "^0.3.0", + "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", @@ -4482,6 +2754,115 @@ } } }, + "node_modules/vitest": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.1.2.tgz", + "integrity": "sha512-xjR1dMTVHlFLh98JE3i/f/WePqJsah4A0FK9cc8Ehp9Udk0AZk6ccpIZhh1qJ/yxVWRZ+Q54ocnD8TXmkhspGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "4.1.2", + "@vitest/mocker": "4.1.2", + "@vitest/pretty-format": "4.1.2", + "@vitest/runner": "4.1.2", + "@vitest/snapshot": "4.1.2", + "@vitest/spy": "4.1.2", + "@vitest/utils": "4.1.2", + "es-module-lexer": "^2.0.0", + "expect-type": "^1.3.0", + "magic-string": "^0.30.21", + "obug": "^2.1.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "std-env": "^4.0.0-rc.1", + "tinybench": "^2.9.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.1.0", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@opentelemetry/api": "^1.9.0", + "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", + "@vitest/browser-playwright": "4.1.2", + "@vitest/browser-preview": "4.1.2", + "@vitest/browser-webdriverio": "4.1.2", + "@vitest/ui": "4.1.2", + "happy-dom": "*", + "jsdom": "*", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser-playwright": { + "optional": true + }, + "@vitest/browser-preview": { + "optional": true + }, + "@vitest/browser-webdriverio": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "vite": { + "optional": false + } + } + }, + "node_modules/vitest/node_modules/@vitest/mocker": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.1.2.tgz", + "integrity": "sha512-Ize4iQtEALHDttPRCmN+FKqOl2vxTiNUhzobQFFt/BM1lRUTG7zRCLOykG/6Vo4E4hnUdfVLo5/eqKPukcWW7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "4.1.2", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, "node_modules/why-is-node-running": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", @@ -4499,13 +2880,6 @@ "node": ">=8" } }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true, - "license": "ISC" - }, "node_modules/zustand": { "version": "5.0.12", "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.12.tgz", diff --git a/frontend/package.json b/frontend/package.json index 1ac08d8..c084bf1 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,12 +1,19 @@ { - "name": "studio13-frontend", + "name": "openstudio-frontend", "private": true, "version": "0.0.1", + "packageManager": "npm@10.9.8", + "engines": { + "node": "^22.12.0 || >=24.0.0" + }, "type": "module", "scripts": { "dev": "vite", "test": "vitest run", - "build": "tsc && vite build", + "test:e2e": "playwright test", + "notices:generate": "node scripts/generate-third-party-notices.mjs", + "notices:check": "node scripts/generate-third-party-notices.mjs --check", + "build": "npm run notices:check && tsc && vite build", "preview": "vite preview" }, "dependencies": { @@ -14,23 +21,24 @@ "@dnd-kit/sortable": "^10.0.0", "@dnd-kit/utilities": "^3.2.2", "@headlessui/react": "^2.2.9", - "@tailwindcss/vite": "^4.1.18", "classnames": "^2.5.1", "konva": "^9.3.22", "lucide-react": "^0.562.0", "react": "^19.2.3", "react-dom": "^19.2.3", "react-konva": "^19.2.1", - "tailwindcss": "^4.1.18", "zustand": "^5.0.10" }, "devDependencies": { + "@playwright/test": "^1.62.1", + "@tailwindcss/vite": "^4.3.3", "@types/react": "^19.2.0", "@types/react-dom": "^19.2.0", - "@vitejs/plugin-react": "^4.2.1", - "sharp": "^0.34.5", + "@vitejs/plugin-react": "^6.0.4", + "sharp": "^0.35.3", + "tailwindcss": "^4.3.3", "typescript": "^5.2.2", - "vite": "^5.0.8", + "vite": "^8.1.5", "vitest": "^4.1.2" } } diff --git a/frontend/playwright.config.ts b/frontend/playwright.config.ts new file mode 100644 index 0000000..d4d9e8b --- /dev/null +++ b/frontend/playwright.config.ts @@ -0,0 +1,28 @@ +import { defineConfig, devices } from "@playwright/test"; + +export default defineConfig({ + testDir: "./e2e", + fullyParallel: false, + forbidOnly: true, + retries: 0, + workers: 1, + reporter: "line", + outputDir: "../output/playwright/test-results", + use: { + baseURL: "http://127.0.0.1:5183", + trace: "retain-on-failure", + screenshot: "only-on-failure", + }, + projects: [ + { + name: "chromium", + use: { ...devices["Desktop Chrome"] }, + }, + ], + webServer: { + command: "npm run dev -- --host 127.0.0.1", + url: "http://127.0.0.1:5183", + reuseExistingServer: false, + timeout: 120_000, + }, +}); diff --git a/frontend/scripts/generate-third-party-notices.mjs b/frontend/scripts/generate-third-party-notices.mjs new file mode 100644 index 0000000..3b483fe --- /dev/null +++ b/frontend/scripts/generate-third-party-notices.mjs @@ -0,0 +1,278 @@ +import { readFile, readdir, writeFile } from 'node:fs/promises'; +import path from 'node:path'; +import process from 'node:process'; +import { fileURLToPath } from 'node:url'; + +const frontendDirectory = path.resolve( + path.dirname(fileURLToPath(import.meta.url)), + '..', +); +const lockfilePath = path.join(frontendDirectory, 'package-lock.json'); +const outputPath = path.join(frontendDirectory, 'THIRD_PARTY_NOTICES.txt'); +const nodeModulesDirectory = path.join(frontendDirectory, 'node_modules'); +const noticeFilePattern = /^(?:licen[cs]e|copying|notice)(?:\..+)?$/i; + +function fail(message) { + throw new Error(message); +} + +function normalizeLineEndings(text) { + return text.replace(/\r\n?/g, '\n'); +} + +function compareText(left, right) { + return left < right ? -1 : left > right ? 1 : 0; +} + +function formatMetadataValue(value) { + if (typeof value === 'string' && value.trim() !== '') { + return value.trim(); + } + + if (Array.isArray(value) && value.length > 0) { + return value.map(formatMetadataValue).join(' OR '); + } + + if (value && typeof value === 'object') { + if (typeof value.type === 'string' && value.type.trim() !== '') { + return value.type.trim(); + } + return JSON.stringify(value); + } + + return ''; +} + +function packageSource(packageJson, lockEntry) { + const repository = packageJson.repository; + if (typeof repository === 'string' && repository.trim() !== '') { + return repository.trim(); + } + + if (repository && typeof repository === 'object') { + const repositoryUrl = formatMetadataValue(repository.url); + if (repositoryUrl !== '') { + const repositoryDirectory = formatMetadataValue(repository.directory); + return repositoryDirectory === '' + ? repositoryUrl + : `${repositoryUrl} (directory: ${repositoryDirectory})`; + } + } + + const homepage = formatMetadataValue(packageJson.homepage); + if (homepage !== '') { + return homepage; + } + + return formatMetadataValue(lockEntry.resolved); +} + +function assertInsideNodeModules(packageDirectory, lockPath) { + const relativePath = path.relative(nodeModulesDirectory, packageDirectory); + if ( + relativePath === '' + || relativePath.startsWith(`..${path.sep}`) + || relativePath === '..' + || path.isAbsolute(relativePath) + ) { + fail(`Unsafe package path in package-lock.json: ${lockPath}`); + } +} + +function requiredLicenseFilename(declaredLicense) { + if (typeof declaredLicense !== 'string') { + return null; + } + + const match = declaredLicense.match(/^SEE LICEN[CS]E IN (.+)$/i); + return match?.[1]?.trim() || null; +} + +async function loadProductionPackages(lockfile) { + if (lockfile.lockfileVersion !== 3 || !lockfile.packages) { + fail('package-lock.json must use lockfileVersion 3 and contain a packages map.'); + } + + const packages = []; + for (const [lockPath, lockEntry] of Object.entries(lockfile.packages)) { + if ( + lockPath === '' + || !lockPath.startsWith('node_modules/') + || lockEntry.dev === true + ) { + continue; + } + + const packageDirectory = path.resolve(frontendDirectory, ...lockPath.split('/')); + assertInsideNodeModules(packageDirectory, lockPath); + + let packageJson; + try { + packageJson = JSON.parse( + await readFile(path.join(packageDirectory, 'package.json'), 'utf8'), + ); + } catch (error) { + fail(`Missing or invalid installed package metadata for ${lockPath}: ${error.message}`); + } + + const name = formatMetadataValue(packageJson.name); + const version = formatMetadataValue(packageJson.version); + if (name === '' || version === '') { + fail(`Installed package ${lockPath} is missing its name or version.`); + } + if (version !== lockEntry.version) { + fail( + `Installed version mismatch for ${name}: lockfile has ${lockEntry.version}, ` + + `node_modules has ${version}. Run npm ci.`, + ); + } + + const declaredLicense = formatMetadataValue(packageJson.license ?? lockEntry.license); + if (declaredLicense === '') { + fail(`Installed package ${name}@${version} has no declared license.`); + } + + const source = packageSource(packageJson, lockEntry); + if (source === '') { + fail(`Installed package ${name}@${version} has no source URL.`); + } + + let directoryEntries; + try { + directoryEntries = await readdir(packageDirectory, { withFileTypes: true }); + } catch (error) { + fail(`Cannot inspect installed package ${name}@${version}: ${error.message}`); + } + + const noticeFilenames = directoryEntries + .filter((entry) => entry.isFile() && noticeFilePattern.test(entry.name)) + .map((entry) => entry.name) + .sort(compareText); + + const specificallyRequiredLicense = requiredLicenseFilename(packageJson.license); + if ( + specificallyRequiredLicense + && !noticeFilenames.some( + (filename) => filename.toLowerCase() === specificallyRequiredLicense.toLowerCase(), + ) + ) { + fail( + `${name}@${version} declares "${packageJson.license}", but ` + + `${specificallyRequiredLicense} is missing.`, + ); + } + + if (noticeFilenames.length === 0) { + fail(`Installed package ${name}@${version} has no LICENSE, COPYING, or NOTICE file.`); + } + + const notices = []; + for (const filename of noticeFilenames) { + const noticeText = normalizeLineEndings( + await readFile(path.join(packageDirectory, filename), 'utf8'), + ); + if (noticeText.trim() === '') { + fail(`Installed package ${name}@${version} has an empty ${filename} file.`); + } + notices.push({ filename, text: noticeText }); + } + + packages.push({ + declaredLicense, + lockPath, + name, + notices, + source, + version, + }); + } + + packages.sort((left, right) => ( + compareText(left.name, right.name) + || compareText(left.version, right.version) + || compareText(left.lockPath, right.lockPath) + )); + + if (packages.length === 0) { + fail('No production packages were found in package-lock.json.'); + } + + return packages; +} + +function renderNotices(packages) { + const separator = '='.repeat(80); + const lines = [ + 'OpenStudio Frontend Third-Party Notices', + '', + 'This file is generated from frontend/package-lock.json and the exact license,', + 'copying, and notice files installed in frontend/node_modules. Do not edit it', + 'manually; run `npm run notices:generate` after changing production dependencies.', + '', + `Production package instances: ${packages.length}`, + ]; + + for (const packageInfo of packages) { + lines.push( + '', + separator, + `${packageInfo.name}@${packageInfo.version}`, + `Installed path: ${packageInfo.lockPath}`, + `Declared license: ${packageInfo.declaredLicense}`, + `Source: ${packageInfo.source}`, + ); + + for (const notice of packageInfo.notices) { + lines.push( + '', + `--- BEGIN ${notice.filename} (verbatim; line endings normalized to LF) ---`, + notice.text, + `--- END ${notice.filename} ---`, + ); + } + } + + return `${lines.join('\n')}\n`; +} + +async function main() { + const argumentsList = process.argv.slice(2); + const checkOnly = argumentsList.length === 1 && argumentsList[0] === '--check'; + if (argumentsList.length > 0 && !checkOnly) { + fail('Usage: node scripts/generate-third-party-notices.mjs [--check]'); + } + + const lockfile = JSON.parse(await readFile(lockfilePath, 'utf8')); + const packages = await loadProductionPackages(lockfile); + const generatedNotices = renderNotices(packages); + + if (checkOnly) { + let committedNotices; + try { + committedNotices = normalizeLineEndings(await readFile(outputPath, 'utf8')); + } catch (error) { + fail(`Cannot read ${path.basename(outputPath)}: ${error.message}`); + } + + if (committedNotices !== generatedNotices) { + fail( + `${path.basename(outputPath)} is stale. Run npm run notices:generate and commit the result.`, + ); + } + + process.stdout.write( + `${path.basename(outputPath)} is current (${packages.length} production package instances).\n`, + ); + return; + } + + await writeFile(outputPath, generatedNotices, 'utf8'); + process.stdout.write( + `Wrote ${path.basename(outputPath)} (${packages.length} production package instances).\n`, + ); +} + +main().catch((error) => { + process.stderr.write(`Third-party notice generation failed: ${error.message}\n`); + process.exitCode = 1; +}); diff --git a/frontend/shortcut-e2e.html b/frontend/shortcut-e2e.html new file mode 100644 index 0000000..44ce0d5 --- /dev/null +++ b/frontend/shortcut-e2e.html @@ -0,0 +1,183 @@ +<!doctype html> +<html lang="en"> + <head> + <meta charset="UTF-8" /> + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> + <title>OpenStudio shortcut foundations E2E harness + + + +
+

Shortcut and wheel test harness

+ +
+ Keyboard matching + + + +
+ +
+ Native focus owners + + + 0 + +
+ +
+

Active shortcut contexts

+
+
Application
+
Timeline
+
Piano roll
+
Pitch editor
+
Automation
+
+

Active context: application

+

Last shortcut result: none

+
{"timeline":0,"piano_roll":0,"pitch_editor":0}
+
+ +
+

Wheel resolver

+ + +
+
Timeline wheel target
+
Timeline ruler wheel target
+
Timeline track wheel target
+
Timeline clip wheel target
+
Automation lane wheel target
+
Piano-roll wheel target
+
Pitch-editor wheel target
+
+
Browser wheel target
+
+
Parameter wheel target
+
Console fader wheel target
+
Waveform scale target
+
+
none
+
+ +
+

Pointer modifier resolver

+
Clip drag pointer target
+
none
+
+ +
+

Nested editor controls

+
+
+
+
+
+
+
+
+
{"timeline":0,"piano_roll":0}
+
+ +
+

Detached profile snapshot parsing

+ none +
+ +
+

Track meter presentation

+
+
+
+ + + + diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 22b7691..a0d75d1 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -2,7 +2,11 @@ import React, { useCallback, useEffect, useMemo, useRef, useState, Suspense } fr import { useShallow } from "zustand/shallow"; import { ExternalLink, GripHorizontal, X } from "lucide-react"; import { nativeBridge, type NativeGlobalShortcutEvent } from "./services/NativeBridge"; -import { getGlobalShortcutConflicts } from "./store/actionRegistry"; +import { bootstrapTONE3000Session } from "./services/tone3000Session"; +import { + getGlobalShortcutConflicts, + getRegisteredAction, +} from "./store/actionRegistry"; import { useDAWStore, getEffectiveTrackHeight, @@ -11,20 +15,37 @@ import { getMasterTrackHeaderHeight, } from "./store/useDAWStore"; import { dispatchGlobalShortcut } from "./utils/globalShortcutDispatcher"; +import { + activateShortcutContext, + isEditableShortcutTarget, + isNonTextControlShortcutTarget, +} from "./utils/shortcutContext"; import { installModalContextMenuLeakGuard, shouldSuppressWorkspaceContextMenu, } from "./utils/modalEventGuards"; import { + flushPendingMixerRemoteEdit, publishCurrentMixerUISnapshot, startMixerUISync, } from "./utils/mixerWindowSync"; import { + flushPendingMidiRemoteEdits, publishMidiEditorSessionSnapshot, startMidiEditorUISync, } from "./utils/midiEditorWindowSync"; +import { + applyDetachedMidiQuantizeRequest, + applyDetachedLoopRegionRequest, + executeDetachedMainActionRequest, + isLiveDetachedMidiSessionId, +} from "./utils/detachedMainActionRouting"; import { maybeRunPitchRegressionDriver } from "./utils/pitchRegressionDriver"; import { shouldAutoStopPlayback } from "./utils/transportAutoStop"; +import { getShortcutPlatform } from "./utils/platform"; +import { getMouseBehaviorProfile, toMouseBehaviorPlatform } from "./utils/mouseBehaviorProfiles"; +import { resolveWheelGesture } from "./utils/wheelGestureResolver"; +import { installBrowserZoomWheelGuard } from "./utils/browserWheelGuard"; import { Button } from "./components/ui"; import { Timeline } from "./components/Timeline"; import { TimelineRuler } from "./components/TimelineRuler"; @@ -34,11 +55,13 @@ import { TransportBar as BottomTransportBar } from "./components/TransportBar"; import { MenuBar } from "./components/MenuBar"; import { MasterTrackHeader } from "./components/MasterTrackHeader"; import { ProjectTabBar } from "./components/ProjectTabBar"; -import { CustomToolbarStrip } from "./components/ToolbarEditor"; +import { CustomToolbarStrip, ToolbarEditor } from "./components/ToolbarEditor"; +import { PluginBrowser } from "./components/PluginBrowser"; import { SortableTrackHeader } from "./components/SortableTrackHeader"; import { AddMultipleTracksModal } from "./components/AddMultipleTracksModal"; import { ContextMenu, type MenuItem } from "./components/ContextMenu"; import { EssentialControlsCard } from "./components/EssentialControlsCard"; +import { InputProfileOnboardingCard } from "./components/InputProfileOnboardingCard"; import { UnsavedChangesDialog } from "./components/UnsavedChangesDialog"; import { createMultipleTracks, @@ -70,10 +93,8 @@ const ThemeEditor = React.lazy(() => import("./components/ThemeEditor").then(m = const VideoWindow = React.lazy(() => import("./components/VideoWindow").then(m => ({ default: m.VideoWindow }))); const ScriptEditor = React.lazy(() => import("./components/ScriptEditor").then(m => ({ default: m.ScriptEditor }))); const PitchEditorLowerZone = React.lazy(() => import("./components/PitchEditorLowerZone").then(m => ({ default: m.PitchEditorLowerZone }))); -const ToolbarEditor = React.lazy(() => import("./components/ToolbarEditor").then(m => ({ default: m.ToolbarEditor }))); const DDPExportModal = React.lazy(() => import("./components/DDPExportModal").then(m => ({ default: m.DDPExportModal }))); const ProjectCompareModal = React.lazy(() => import("./components/ProjectCompareModal").then(m => ({ default: m.ProjectCompareModal }))); -const PluginBrowser = React.lazy(() => import("./components/PluginBrowser").then(m => ({ default: m.PluginBrowser }))); const EnvelopeManagerModal = React.lazy(() => import("./components/EnvelopeManagerModal").then(m => ({ default: m.EnvelopeManagerModal }))); const ChannelStripEQModal = React.lazy(() => import("./components/ChannelStripEQModal").then(m => ({ default: m.ChannelStripEQModal }))); const TrackRoutingModal = React.lazy(() => import("./components/TrackRoutingModal").then(m => ({ default: m.TrackRoutingModal }))); @@ -100,6 +121,18 @@ import { function App() { const startupReadyReportedRef = useRef(false); + const autoSaveInFlightRef = useRef(false); + const [isStartupLoading, setIsStartupLoading] = useState(true); + const [startupLoadingMessage, setStartupLoadingMessage] = useState("Preparing OpenStudio..."); + + const reportStartupReady = useCallback((detail: string) => { + if (startupReadyReportedRef.current) { + return; + } + + startupReadyReportedRef.current = true; + window.dispatchEvent(new CustomEvent("openstudio:app-ready", { detail })); + }, []); // Use useShallow to prevent re-renders when unrelated state changes (like currentTime) const { @@ -170,6 +203,7 @@ function App() { showGettingStarted, showMissingMedia, missingMediaFiles, + resolveMissingNAMAsset, masterAutomationLanes, showMasterAutomation, showStemSeparation, @@ -246,6 +280,7 @@ function App() { showGettingStarted: state.showGettingStarted, showMissingMedia: state.showMissingMedia, missingMediaFiles: state.missingMediaFiles, + resolveMissingNAMAsset: state.resolveMissingNAMAsset, masterAutomationLanes: state.masterAutomationLanes, showMasterAutomation: state.showMasterAutomation, showStemSeparation: state.showStemSeparation, @@ -256,32 +291,6 @@ function App() { })) ); - useEffect(() => { - let cancelled = false; - - const markAppReady = (detail: string) => { - if (cancelled || startupReadyReportedRef.current) { - return; - } - - startupReadyReportedRef.current = true; - window.dispatchEvent(new CustomEvent("openstudio:app-ready", { detail })); - }; - - void (async () => { - try { - await hydrateRecentProjects(); - markAppReady("main-app-hydrated"); - } catch (error) { - console.error("[startup] Failed to hydrate recent projects:", error); - markAppReady("main-app-hydration-failed"); - } - })(); - - return () => { - cancelled = true; - }; - }, [hydrateRecentProjects]); // Compute visible tracks — hides children of collapsed folder tracks const visibleTracks = useMemo(() => { @@ -414,8 +423,91 @@ function App() { useEffect(() => startMidiEditorUISync(), []); useEffect(() => { - void refreshAiToolsStatus(true); - }, [refreshAiToolsStatus]); + let cancelled = false; + let finishTimer: number | undefined; + let readyDetail = "main-app-startup-ready"; + const startupGateStartedAt = performance.now(); + + const setStartupStep = (message: string) => { + if (!cancelled) { + setStartupLoadingMessage(message); + } + }; + + const finishStartupGate = () => { + if (cancelled) { + return; + } + + setStartupLoadingMessage("Opening workspace..."); + const remainingMs = Math.max(0, 650 - (performance.now() - startupGateStartedAt)); + finishTimer = window.setTimeout(() => { + if (cancelled) { + return; + } + + setIsStartupLoading(false); + reportStartupReady(readyDetail); + }, remainingMs); + }; + + const openLaunchProjectIfPresent = async () => { + const pendingProjectPath = await nativeBridge.consumePendingLaunchProjectPath(); + if (!pendingProjectPath || cancelled) { + return; + } + + const lowerPath = pendingProjectPath.toLowerCase(); + if (!lowerPath.endsWith(".osproj") && !lowerPath.endsWith(".s13")) { + return; + } + + const launchProjectName = pendingProjectPath.split(/[\\/]/).pop() || "project"; + setStartupStep(`Opening ${launchProjectName}...`); + const success = await useDAWStore.getState().requestOpenProject(pendingProjectPath); + if (!success) { + readyDetail = "main-app-launch-project-failed"; + console.error("[App] Failed to open launch project:", pendingProjectPath); + } + }; + + void (async () => { + try { + setStartupStep("Loading recent projects..."); + await hydrateRecentProjects(); + } catch (error) { + readyDetail = "main-app-startup-recovered"; + console.error("[startup] Failed to hydrate recent projects:", error); + } + + // Network-backed session refresh and optional AI runtime inspection must + // never hold the workspace behind the startup overlay. Both services + // publish their own busy/status state when their background checks finish. + void bootstrapTONE3000Session().catch((error) => { + console.warn("[startup] TONE3000 silent auth bootstrap failed:", error); + }); + void refreshAiToolsStatus(true).catch((error) => { + console.warn("[startup] AI tools status check failed:", error); + }); + + try { + setStartupStep("Checking startup project..."); + await openLaunchProjectIfPresent(); + } catch (error) { + readyDetail = "main-app-startup-recovered"; + console.error("[App] Failed to consume launch project path:", error); + } + + finishStartupGate(); + })(); + + return () => { + cancelled = true; + if (finishTimer !== undefined) { + window.clearTimeout(finishTimer); + } + }; + }, [hydrateRecentProjects, refreshAiToolsStatus, reportStartupReady]); useEffect(() => { const unsubscribe = nativeBridge.onAiToolsStatusUpdate((status) => { @@ -711,12 +803,35 @@ function App() { return; } - const state = useDAWStore.getState(); const command = typeof payload.command === "string" ? payload.command : ""; + const flushDetachedEdits = () => { + flushPendingMixerRemoteEdit(); + flushPendingMidiRemoteEdits(); + }; + if (command === "action.execute") { + executeDetachedMainActionRequest(payload, getRegisteredAction, { + flushPendingEdits: flushDetachedEdits, + }); + return; + } + + if (command === "transport.setLoopRegion") { + applyDetachedLoopRegionRequest(payload); + return; + } + + if (command === "automation.action") { + // Legacy senders are accepted only when they provide the same explicit + // selection payload as action.execute. Target-less packets are unsafe. + executeDetachedMainActionRequest({ + ...payload, + command: "action.execute", + }, getRegisteredAction, { flushPendingEdits: flushDetachedEdits }); + return; + } + + const state = useDAWStore.getState(); const sessionId = typeof payload.sessionId === "string" ? payload.sessionId : ""; - const session = sessionId - ? state.midiEditorSessions.find((candidate) => candidate.sessionId === sessionId) - : null; if (command === "transport.toggle") { if (state.transport.isRecording || state.transport.isPlaying) void state.stop(); @@ -735,12 +850,14 @@ function App() { } if (command === "transport.seek") { + if (sessionId && !isLiveDetachedMidiSessionId(sessionId)) return; const time = typeof payload.time === "number" ? payload.time : state.transport.currentTime; void state.seekTo(Math.max(0, time)); return; } if (command === "transport.seekPreview") { + if (sessionId && !isLiveDetachedMidiSessionId(sessionId)) return; const time = typeof payload.time === "number" ? payload.time : state.transport.currentTime; const clampedTime = Math.max(0, time); state.setCurrentTime(clampedTime); @@ -749,19 +866,20 @@ function App() { } if (command === "edit.undo") { - state.undo(); + flushDetachedEdits(); + useDAWStore.getState().undo(); return; } if (command === "edit.redo") { - state.redo(); + flushDetachedEdits(); + useDAWStore.getState().redo(); return; } if (command === "midi.quantize") { - const targetTrackId = session?.trackId || state.pianoRollTrackId || undefined; - const targetClipId = session?.clipId || state.pianoRollClipId || undefined; - state.quantizeSelectedMIDINotesUsingLast(targetTrackId, targetClipId); + flushDetachedEdits(); + applyDetachedMidiQuantizeRequest(payload); } }); @@ -858,11 +976,6 @@ function App() { if (autoStopDecision.stopTime !== null) { currentState.setCurrentTime(autoStopDecision.stopTime); } - console.log("[App] Auto-stopping silent playback", { - reason: autoStopDecision.reason, - stopTime: autoStopDecision.stopTime, - latestEndTime: autoStopDecision.bounds.latestEndTime, - }); void currentState.stop().catch((error) => { console.warn("[App] Auto-stop silent playback failed", error); autoStopInFlight = false; @@ -874,12 +987,6 @@ function App() { // Loop: wrap back to loopStart when reaching loopEnd const { loopEnabled, loopStart, loopEnd } = currentState.transport; if (loopEnabled && loopEnd > loopStart && newTime >= loopEnd) { - console.log("[App] Playback loop wrap", { - currentTime: currentState.transport.currentTime, - newTime, - loopStart, - loopEnd, - }); newTime = loopStart + (newTime - loopEnd); // Sync backend position on loop wrap nativeBridge.setTransportPosition(newTime); @@ -950,65 +1057,36 @@ function App() { return unsub; }, []); - // Auto-save with rotating backups (Sprint 20.8) + // Auto-save with rotating backups (Sprint 20.8). Preferences expose the + // autoBackup fields, so keep one reactive scheduler driven by that setting. + // The historical autoSave fields remain in persisted state for compatibility + // but no longer create a second competing timer. + const { autoBackupEnabled, autoBackupInterval } = useDAWStore(useShallow((s) => ({ + autoBackupEnabled: s.autoBackupEnabled, + autoBackupInterval: s.autoBackupInterval, + }))); + useEffect(() => { - const state = useDAWStore.getState(); - if (!state.autoBackupEnabled) return; + if (!autoBackupEnabled) return; const interval = setInterval(async () => { const s = useDAWStore.getState(); - if (s.isModified && s.projectPath) { + if (s.isModified + && s.projectPath + && !autoSaveInFlightRef.current) { + autoSaveInFlightRef.current = true; try { - const ok = await s.saveProject(false); - if (ok) console.log("[App] Auto-save completed"); + await s.saveProject(false); } catch { // Auto-save failure is non-critical + } finally { + autoSaveInFlightRef.current = false; } } - }, state.autoBackupInterval); + }, autoBackupInterval); return () => clearInterval(interval); - }, []); - - // Enhanced auto-save: uses autoSaveEnabled / autoSaveIntervalMinutes from store. - // Reactively subscribes to changes so toggling or changing interval takes effect immediately. - useEffect(() => { - const unsubscribe = useDAWStore.subscribe( - (state) => ({ enabled: state.autoSaveEnabled, minutes: state.autoSaveIntervalMinutes }), - ({ enabled, minutes }) => { - // Clear any previous timer first (handled below via closure) - // This subscription just triggers re-evaluation; the actual timer is managed - // by the outer effect dependencies. - void enabled; - void minutes; - }, - { equalityFn: (a, b) => a.enabled === b.enabled && a.minutes === b.minutes }, - ); - return unsubscribe; - }, []); - - // Separate interval effect for the improved auto-save - const autoSaveEnabled = useDAWStore((s) => s.autoSaveEnabled); - const autoSaveIntervalMinutes = useDAWStore((s) => s.autoSaveIntervalMinutes); - - useEffect(() => { - if (!autoSaveEnabled) return; - - const intervalMs = autoSaveIntervalMinutes * 60 * 1000; - const timerId = setInterval(async () => { - const s = useDAWStore.getState(); - if (s.isModified && s.projectPath) { - try { - const ok = await s.saveProject(false); - if (ok) console.log("[App] Auto-save completed"); - } catch { - // Auto-save failure is non-critical - } - } - }, intervalMs); - - return () => clearInterval(timerId); - }, [autoSaveEnabled, autoSaveIntervalMinutes]); + }, [autoBackupEnabled, autoBackupInterval]); // Event-based metering — single batched store update for all tracks + master useEffect(() => { @@ -1019,9 +1097,12 @@ function App() { const trackClipping: Record = data.trackClipping && typeof data.trackClipping === "object" && !Array.isArray(data.trackClipping) ? data.trackClipping : {}; + const midiInputLevels: Record = data.midiInputLevels && typeof data.midiInputLevels === "object" && !Array.isArray(data.midiInputLevels) + ? data.midiInputLevels + : {}; const masterLevel = typeof data.masterLevel === "number" ? data.masterLevel : 0; const masterClipping = data.masterClipping === true; - batchUpdateMeterLevels(trackLevels, masterLevel, trackClipping, masterClipping); + batchUpdateMeterLevels(trackLevels, masterLevel, trackClipping, masterClipping, midiInputLevels); }); }, [batchUpdateMeterLevels]); @@ -1033,36 +1114,12 @@ function App() { }, []); useEffect(() => { - let cancelled = false; - - const openLaunchProject = async () => { - const pendingProjectPath = await nativeBridge.consumePendingLaunchProjectPath(); - if (!pendingProjectPath || cancelled) return; - - const lowerPath = pendingProjectPath.toLowerCase(); - if (!lowerPath.endsWith(".osproj") && !lowerPath.endsWith(".s13")) return; - - try { - const success = await useDAWStore.getState().requestOpenProject(pendingProjectPath); - if (!success) { - console.error("[App] Failed to open launch project:", pendingProjectPath); - } - } catch (error) { - console.error("[App] Failed to consume launch project path:", error); - } - }; - - void openLaunchProject(); - - return () => { - cancelled = true; - }; + activateShortcutContext({ kind: "timeline" }); }, []); // Global keyboard shortcuts useEffect(() => { const handleKeyDown = (e: KeyboardEvent) => { - const target = e.target as HTMLElement | null; void dispatchGlobalShortcut({ key: e.key, code: e.code, @@ -1072,14 +1129,11 @@ function App() { metaKey: e.metaKey, repeat: e.repeat, source: "browser", - targetIsEditable: - !!target && - (target instanceof HTMLInputElement || - target instanceof HTMLSelectElement || - target instanceof HTMLTextAreaElement || - target.isContentEditable), + targetIsEditable: isEditableShortcutTarget(e.target), + targetIsNonTextControl: isNonTextControlShortcutTarget(e.target), preventDefault: () => e.preventDefault(), stopPropagation: () => e.stopPropagation(), + stopImmediatePropagation: () => e.stopImmediatePropagation(), }); }; @@ -1246,21 +1300,11 @@ function App() { return () => ro.disconnect(); }, []); - // Workspace wheel handler — only prevents browser default zoom (Ctrl+scroll). + // App-wide wheel guard — prevents WebView/browser zoom (Ctrl/Cmd+scroll) + // even when focus is in a modal, browser, detached-style panel, or control. // Actual zoom logic is handled by Timeline's RAF-batched handler. useEffect(() => { - const workspace = workspaceRef.current; - if (!workspace) return; - - const handleWheel = (e: WheelEvent) => { - if (e.ctrlKey || e.metaKey || e.altKey) { - // Prevent browser zoom / native scroll — let Timeline handle the rest - e.preventDefault(); - } - }; - - workspace.addEventListener("wheel", handleWheel, { passive: false, capture: true }); - return () => workspace.removeEventListener("wheel", handleWheel, { capture: true }); + return installBrowserZoomWheelGuard(document); }, []); const [showAddMultipleTracksModal, setShowAddMultipleTracksModal] = @@ -1415,7 +1459,17 @@ function App() { /> )} -
+
activateShortcutContext({ kind: "timeline" })} + onContextMenuCapture={() => activateShortcutContext({ kind: "timeline" })} + onFocusCapture={() => activateShortcutContext({ kind: "timeline" })} + data-shortcut-context="timeline" + > +
@@ -1441,14 +1495,23 @@ function App() { useDAWStore.getState().deselectAllTracks(); } }} onWheel={(e) => { - // Alt+scroll to resize track height (mirrors Timeline behavior) - if (e.altKey) { - e.preventDefault(); - e.stopPropagation(); + const shortcutPlatform = getShortcutPlatform(); + const behaviorProfile = getMouseBehaviorProfile( + useDAWStore.getState().mouseBehaviorProfileId, + shortcutPlatform, + ); + const gesture = resolveWheelGesture(e, { + surface: "tcp", + subtarget: "track", + platform: toMouseBehaviorPlatform(shortcutPlatform), + }, behaviorProfile.wheel); + if (gesture.preventDefault) e.preventDefault(); + if (gesture.stopPropagation) e.stopPropagation(); + if (gesture.operation === "resize" && gesture.target === "track-height" && gesture.amount !== 0) { const store = useDAWStore.getState(); const curHeight = store.trackHeight; - const delta = e.deltaY > 0 ? 0.9 : 1.1; - store.setTrackHeight(curHeight * delta); + const factor = gesture.amount > 0 ? 0.9 : 1.1; + store.setTrackHeight(curHeight * factor); } }}>
{ @@ -1624,7 +1687,20 @@ function App() { className="shrink-0 min-h-0 bg-neutral-950 border-t border-neutral-700 flex flex-col" style={{ height: lowerZoneHeight }} aria-label="Docked Piano Roll editor" + data-shortcut-context={`piano_roll:${dockedMidiEditorSession.sessionId}`} data-qa="docked-piano-roll" + onPointerDownCapture={() => activateShortcutContext({ + kind: "piano_roll", + sessionId: dockedMidiEditorSession.sessionId, + })} + onContextMenuCapture={() => activateShortcutContext({ + kind: "piano_roll", + sessionId: dockedMidiEditorSession.sessionId, + })} + onFocusCapture={() => activateShortcutContext({ + kind: "piano_roll", + sessionId: dockedMidiEditorSession.sessionId, + })} >
useDAWStore.getState().resolveMissingMedia(originalPath, newPath) } + onResolveNAMAsset={(target, newPath) => resolveMissingNAMAsset(target, newPath)} onResolveAll={() => useDAWStore.getState().closeMissingMedia()} /> @@ -2036,6 +2113,19 @@ function App() { )} + {/* Startup Loading Overlay */} + {isStartupLoading && ( +
+
+ +
+ )} + {/* Project Loading Overlay */} {isProjectLoading && (
diff --git a/frontend/src/MidiEditorWindowApp.tsx b/frontend/src/MidiEditorWindowApp.tsx index 153bdba..d0f8e27 100644 --- a/frontend/src/MidiEditorWindowApp.tsx +++ b/frontend/src/MidiEditorWindowApp.tsx @@ -6,6 +6,10 @@ import { PianoRoll } from "./components/PianoRoll"; import { nativeBridge, type NativeGlobalShortcutEvent } from "./services/NativeBridge"; import { useDAWStore } from "./store/useDAWStore"; import { dispatchGlobalShortcut } from "./utils/globalShortcutDispatcher"; +import { + isEditableShortcutTarget, + isNonTextControlShortcutTarget, +} from "./utils/shortcutContext"; import { installModalContextMenuLeakGuard } from "./utils/modalEventGuards"; import { windowSessionId } from "./utils/windowEnvironment"; import { @@ -14,9 +18,13 @@ import { startMidiEditorUISync, } from "./utils/midiEditorWindowSync"; import { startSharedTransportSync } from "./utils/sharedTransportSync"; +import { installBrowserZoomWheelGuard } from "./utils/browserWheelGuard"; +import { startDetachedInputProfileSync } from "./utils/inputProfileWindowSync"; export default function MidiEditorWindowApp() { const [hydrated, setHydrated] = useState(false); + useEffect(() => installBrowserZoomWheelGuard(document), []); + useEffect(() => startDetachedInputProfileSync(), []); const { tracks, pianoRollTrackId, @@ -66,7 +74,6 @@ export default function MidiEditorWindowApp() { useEffect(() => { const handleKeyDown = (e: KeyboardEvent) => { - const target = e.target as HTMLElement | null; void dispatchGlobalShortcut({ key: e.key, code: e.code, @@ -76,14 +83,11 @@ export default function MidiEditorWindowApp() { metaKey: e.metaKey, repeat: e.repeat, source: "browser", - targetIsEditable: - !!target && - (target instanceof HTMLInputElement || - target instanceof HTMLSelectElement || - target instanceof HTMLTextAreaElement || - target.isContentEditable), + targetIsEditable: isEditableShortcutTarget(e.target), + targetIsNonTextControl: isNonTextControlShortcutTarget(e.target), preventDefault: () => e.preventDefault(), stopPropagation: () => e.stopPropagation(), + stopImmediatePropagation: () => e.stopImmediatePropagation(), }); }; diff --git a/frontend/src/MixerWindowApp.tsx b/frontend/src/MixerWindowApp.tsx index d48730c..623d889 100644 --- a/frontend/src/MixerWindowApp.tsx +++ b/frontend/src/MixerWindowApp.tsx @@ -1,18 +1,27 @@ import { useEffect, useState } from "react"; +import { useShallow } from "zustand/shallow"; import { MixerPanel } from "./components/MixerPanel"; import { nativeBridge, type NativeGlobalShortcutEvent } from "./services/NativeBridge"; import { useDAWStore } from "./store/useDAWStore"; import { dispatchGlobalShortcut } from "./utils/globalShortcutDispatcher"; +import { + isEditableShortcutTarget, + isNonTextControlShortcutTarget, +} from "./utils/shortcutContext"; import { installModalContextMenuLeakGuard } from "./utils/modalEventGuards"; import { hydrateMixerUISnapshotFromNative, startMixerUISync, } from "./utils/mixerWindowSync"; import { startSharedTransportSync } from "./utils/sharedTransportSync"; +import { installBrowserZoomWheelGuard } from "./utils/browserWheelGuard"; export default function MixerWindowApp() { - const batchUpdateMeterLevels = useDAWStore((state) => state.batchUpdateMeterLevels); + const { batchUpdateMeterLevels } = useDAWStore(useShallow((state) => ({ + batchUpdateMeterLevels: state.batchUpdateMeterLevels, + }))); const [hydrated, setHydrated] = useState(false); + useEffect(() => installBrowserZoomWheelGuard(document), []); useEffect(() => { let cancelled = false; @@ -62,15 +71,20 @@ export default function MixerWindowApp() { !Array.isArray(data.trackClipping) ? data.trackClipping : {}; + const midiInputLevels: Record = + data.midiInputLevels && + typeof data.midiInputLevels === "object" && + !Array.isArray(data.midiInputLevels) + ? data.midiInputLevels + : {}; const masterLevel = typeof data.masterLevel === "number" ? data.masterLevel : 0; const masterClipping = data.masterClipping === true; - batchUpdateMeterLevels(trackLevels, masterLevel, trackClipping, masterClipping); + batchUpdateMeterLevels(trackLevels, masterLevel, trackClipping, masterClipping, midiInputLevels); }); }, [batchUpdateMeterLevels]); useEffect(() => { const handleKeyDown = (e: KeyboardEvent) => { - const target = e.target as HTMLElement | null; void dispatchGlobalShortcut({ key: e.key, code: e.code, @@ -80,14 +94,11 @@ export default function MixerWindowApp() { metaKey: e.metaKey, repeat: e.repeat, source: "browser", - targetIsEditable: - !!target && - (target instanceof HTMLInputElement || - target instanceof HTMLSelectElement || - target instanceof HTMLTextAreaElement || - target.isContentEditable), + targetIsEditable: isEditableShortcutTarget(e.target), + targetIsNonTextControl: isNonTextControlShortcutTarget(e.target), preventDefault: () => e.preventDefault(), stopPropagation: () => e.stopPropagation(), + stopImmediatePropagation: () => e.stopImmediatePropagation(), }); }; diff --git a/frontend/src/PluginEditorWindowApp.tsx b/frontend/src/PluginEditorWindowApp.tsx new file mode 100644 index 0000000..8209e7f --- /dev/null +++ b/frontend/src/PluginEditorWindowApp.tsx @@ -0,0 +1,127 @@ +import { useEffect, useMemo } from "react"; +import { BuiltInPluginPanel } from "./components/BuiltInPluginPanel"; +import { + nativeBridge, + type BuiltInPluginAddress, + type NativeGlobalShortcutEvent, +} from "./services/NativeBridge"; +import { bootstrapTONE3000Session } from "./services/tone3000Session"; +import { dispatchGlobalShortcut } from "./utils/globalShortcutDispatcher"; +import { installModalContextMenuLeakGuard } from "./utils/modalEventGuards"; +import { + isEditableShortcutTarget, + isNonTextControlShortcutTarget, +} from "./utils/shortcutContext"; +import { startSharedTransportSync } from "./utils/sharedTransportSync"; +import { windowSessionId } from "./utils/windowEnvironment"; +import { installBrowserZoomWheelGuard } from "./utils/browserWheelGuard"; +import { startDetachedInputProfileSync } from "./utils/inputProfileWindowSync"; +import "./components/FXChainPanel.css"; + +type BuiltInPluginEditorSession = { + address?: BuiltInPluginAddress; + title?: string; + fallbackName?: string; +}; + +function parseSession(): BuiltInPluginEditorSession | null { + if (!windowSessionId) return null; + const candidates = [windowSessionId]; + try { + const decoded = decodeURIComponent(windowSessionId); + if (decoded !== windowSessionId) candidates.push(decoded); + } catch { + // Keep the raw session candidate. + } + + for (const candidate of candidates) { + try { + const parsed = JSON.parse(candidate) as BuiltInPluginEditorSession; + if (!parsed.address || !parsed.address.chain) continue; + return parsed; + } catch { + // Try the next representation. + } + } + + return null; +} + +export default function PluginEditorWindowApp() { + useEffect(() => installBrowserZoomWheelGuard(document), []); + useEffect(() => startDetachedInputProfileSync(), []); + const session = useMemo(parseSession, []); + const title = session?.fallbackName || session?.title || "OpenStudio Plugin"; + + useEffect(() => { + return startSharedTransportSync(); + }, []); + + useEffect(() => { + void bootstrapTONE3000Session().catch((error) => { + console.warn("[pluginEditor] TONE3000 silent auth bootstrap failed:", error); + }); + }, []); + + useEffect(() => installModalContextMenuLeakGuard(), []); + + useEffect(() => { + const handleKeyDown = (e: KeyboardEvent) => { + void dispatchGlobalShortcut({ + key: e.key, + code: e.code, + ctrlKey: e.ctrlKey, + shiftKey: e.shiftKey, + altKey: e.altKey, + metaKey: e.metaKey, + repeat: e.repeat, + source: "browser", + targetIsEditable: isEditableShortcutTarget(e.target), + targetIsNonTextControl: isNonTextControlShortcutTarget(e.target), + preventDefault: () => e.preventDefault(), + stopPropagation: () => e.stopPropagation(), + stopImmediatePropagation: () => e.stopImmediatePropagation(), + }); + }; + + window.addEventListener("keydown", handleKeyDown, true); + const unsubscribeNativeShortcuts = nativeBridge.onNativeGlobalShortcut( + (event: NativeGlobalShortcutEvent) => { + void dispatchGlobalShortcut({ ...event, source: "pluginWindow" }); + }, + ); + + return () => { + window.removeEventListener("keydown", handleKeyDown, true); + unsubscribeNativeShortcuts(); + }; + }, []); + + if (!session?.address) { + return ( +
+
+
+ OpenStudio plugin editor unavailable + The editor window did not receive a valid plugin session. +
+
+
+ ); + } + + return ( +
+ { + void nativeBridge.closeBuiltInPluginEditorWindow( + windowSessionId, + "close", + ); + }} + /> +
+ ); +} diff --git a/frontend/src/__tests__/actionCatalogIntegrity.test.ts b/frontend/src/__tests__/actionCatalogIntegrity.test.ts new file mode 100644 index 0000000..1b85115 --- /dev/null +++ b/frontend/src/__tests__/actionCatalogIntegrity.test.ts @@ -0,0 +1,569 @@ +import { afterEach, describe, expect, it, vi } from "vitest"; +import { + executeActiveScopedAction, + getActionShortcutConflicts, + getActionShortcutScopes, + getDeferredActions, + getRegisteredAction, + getRegisteredActions, + registerScopedActionExecutor, + type ActionShortcutScope, +} from "../store/actionRegistry"; +import { useDAWStore } from "../store/useDAWStore"; +import { activateShortcutContext, type EditShortcutContext } from "../utils/shortcutContext"; + +const expectedExecutableInventory = [ + "file.saveNewVersion", + "file.openRecent", + "file.clearRecentProjects", + "file.loadTemplate", + "file.deleteTemplate", + "help.checkForUpdates", + "help.about", + "view.renderQueue", + "view.clipLauncher", + "view.stepSequencer", + "view.scriptConsole", + "view.aiToolsSetup", + "view.customToolbar", + "view.bigClockFormat", + "view.gridType.bar", + "view.gridType.beat", + "view.gridType.use-quantize", + "view.gridType.adapt-to-zoom", + "options.timecodeSettings", + "options.toggleItemLock", + "options.toggleEnvelopeLock", + "options.toggleTimeSelectionLock", + "insert.multipleTracks", + "insert.emptyMidiClip", + "track.selectAll", + "track.deselectAll", + "track.deleteSelected", + "track.toggleSelectedMute", + "track.toggleSelectedSolo", + "track.duplicateSelected", + "track.toggleSelectedArm", + "track.linkSelected", + "track.unlinkSelected", + "track.setSelectedColor", + "track.consolidateSelected", + "track.toggleSelectedFxBypass", + "track.toggleSelectedMonitor", + "track.toggleSelectedAutomationRead", + "track.toggleSelectedAutomationWrite", + "track.toggleSelectedPhaseInvert", + "track.moveSelectedToFolder", + "track.removeSelectedFromFolder", + "track.toggleSelectedFolders", + "track.toggleSelectedAutomation", + "track.toggleSelectedSpectralView", + "track.toggleSelectedFreeze", + "track.renderSelectedInPlace", + "track.saveSelectedAsTemplate", + "track.loadTemplate", + "track.openSelectedEnvelopeManager", + "track.openSelectedRouting", + "track.openSelectedPluginBrowser", + "track.openSelectedChannelEQ", + "clip.openSelectedInPianoRoll", + "clip.repeatSelected", + "clip.setSelectedColor", + "clip.resetSelectedMidiSourceOffset", + "clip.setSelectedMidiSourceLengthToItem", + "clip.setSelectedMidiSourceLengthToContent", + "clip.setSelectedMidiSourceLength", + "clip.humanizeSelectedMidi", + "clip.exportSelectedMidi", + "clip.renderSelectedInPlace", + "clip.separateSelectedStems", + "clip.createAIVariation", + "clip.inpaintSelection", + "clip.continueSelectedWithAI", + "midi.toggleStepInput", + "midi.toggleAudition", + "midi.detachEditor", + "midi.dockEditor", + "midi.invertSelection", + "midi.selectSamePitch", + "midi.humanizeSelected", + "midi.setSelectedVelocity", + "midi.randomizeSelectedVelocity", + "midi.setSelectedLength", + "midi.legatoSelected", + "midi.reverseSelected", + "midi.invertSelectedPitches", + "midi.mirrorSelectedPitches", + "midi.toggleSelectedMute", + "midi.cropClipToSelected", + "midi.insertChord", + "mixer.recallSnapshot", + "mixer.deleteSnapshot", + "mixer.toggleMasterMute", + "mixer.toggleMasterMono", + "mixer.detach", + "mixer.attach", + "track.openSelectedFxChain", + "clip.splitAtPointer", + "midi.loopFromSelectedNotes", + "midi.noteProperties", + "midi.configureControllerLanes", + "midi.toggleGhostReference", + "pitch.detectKeyScale", + "pitch.correctAllToScale", + "pitch.toggleAB", + "fx.removeSelected", + "fx.toggleSelectedBypass", + "fx.openSelectedEditor", + "fx.add", +] as const; + +const expectedDeferredInventory = [] as const; + +/** + * Visible buttons and menu/context-menu commands added by the final surface + * audit. Keeping the owning surface beside each id proves that a command is + * not merely in the palette: it can be discovered by the dispatcher while + * that part of the DAW owns keyboard focus. + */ +const auditedVisibleCommandSurfaces: ReadonlyArray<{ + scope: ActionShortcutScope; + actionIds: readonly string[]; +}> = [ + { + scope: "global", + actionIds: [ + "transport.pause", + "transport.metronome", + "transport.metronomeSettings", + "view.cycleTimecodeMode", + "view.openGridQuantizePanel", + "edit.applyCurrentQuantize", + "options.saveQuantizePreset", + "options.renameQuantizePreset", + "options.removeQuantizePreset", + "options.restoreFactoryQuantizePresets", + "options.themeReaperGray", + ], + }, + { + scope: "timeline", + actionIds: [ + "clip.quantizeSelectedMidi", + "clip.humanizeSelectedMidi", + "clip.transposeSelectedMidiUp", + "clip.transposeSelectedMidiDown", + "clip.transposeSelectedMidiOctaveUp", + "clip.transposeSelectedMidiOctaveDown", + "clip.setSelectedMidiVelocity", + "clip.increaseSelectedMidiVelocity", + "clip.decreaseSelectedMidiVelocity", + ], + }, + { + scope: "track_control_panel", + actionIds: [ + "automation.showAllSelectedTrackEnvelopes", + "automation.hideAllSelectedTrackEnvelopes", + "track.clearSelectedSamplerSample", + "track.removeSelectedInstrument", + "track.openSelectedNotes", + "track.loadSelectedSamplerSample", + ], + }, + { + scope: "mixer", + actionIds: [ + "mixer.toggleMasterAutomationRead", + "mixer.toggleMasterAutomationWrite", + "mixer.toggleMasterAutomationLanes", + "mixer.openMasterEnvelopeManager", + "mixer.openMasterFxChain", + "mixer.addMonitorFx", + ], + }, + { + scope: "piano_roll", + actionIds: [ + "midi.openQuantizePanel", + "midi.quantizeLength", + "midi.controllerLine", + "midi.controllerSineLfo", + "midi.controllerTriangleLfo", + "midi.controllerSquareLfo", + "midi.controllerSawUpLfo", + "midi.controllerSawDownLfo", + "midi.controllerTransform", + "midi.controllerThin", + "midi.copyControllerLane", + "midi.pasteControllerLane", + "midi.clearControllerLane", + ], + }, + { scope: "pitch_editor", actionIds: ["pitch.openCorrectionMacro"] }, + { + scope: "plugin", + actionIds: [ + "fx.toggleSelectedAB", + "fx.reloadSelectedScript", + "fx.toggleSelectedParameters", + "fx.toggleSelectedPresets", + "fx.openInstrumentEditor", + "fx.removeInstrument", + ], + }, + { + scope: "browser", + actionIds: [ + "browser.focusSearch", + "browser.toggleFavorites", + "browser.openUserEffectsFolder", + "browser.toggleScanFolders", + "browser.addScanFolder", + "browser.scanPlugins", + "browser.deepScanPlugins", + "browser.removeCurrentInstrument", + "browser.mediaNavigateUp", + "browser.mediaToggleRecent", + "browser.mediaFocusFilter", + ], + }, +]; + +const originalState = { + tracks: useDAWStore.getState().tracks, + selectedTrackId: useDAWStore.getState().selectedTrackId, + selectedTrackIds: useDAWStore.getState().selectedTrackIds, + trackGroups: useDAWStore.getState().trackGroups, + toggleRenderQueue: useDAWStore.getState().toggleRenderQueue, + toggleTrackMute: useDAWStore.getState().toggleTrackMute, + toggleTrackSolo: useDAWStore.getState().toggleTrackSolo, + toggleTrackArmed: useDAWStore.getState().toggleTrackArmed, + toggleTrackFXBypass: useDAWStore.getState().toggleTrackFXBypass, + toggleSelectedTracksMute: useDAWStore.getState().toggleSelectedTracksMute, + toggleSelectedTracksSolo: useDAWStore.getState().toggleSelectedTracksSolo, + toggleSelectedTracksArmed: useDAWStore.getState().toggleSelectedTracksArmed, + toggleSelectedTracksFXBypass: useDAWStore.getState().toggleSelectedTracksFXBypass, + unlinkTracksFromGroups: useDAWStore.getState().unlinkTracksFromGroups, + addTrackGroup: useDAWStore.getState().addTrackGroup, +}; + +afterEach(() => { + vi.restoreAllMocks(); + vi.unstubAllGlobals(); + activateShortcutContext({ kind: "application" }); + useDAWStore.setState(originalState); +}); + +describe("action catalog integrity", () => { + it("has unique stable ids across executable and deferred catalogs", () => { + const executableIds = getRegisteredActions().map((action) => action.id); + const deferredIds = getDeferredActions().map((action) => action.id); + const allIds = [...executableIds, ...deferredIds]; + + expect(new Set(executableIds).size).toBe(executableIds.length); + expect(new Set(deferredIds).size).toBe(deferredIds.length); + expect(new Set(allIds).size).toBe(allIds.length); + }); + + it("gives every executable action a real implementation, category and explicit scope", () => { + for (const action of getRegisteredActions()) { + expect(action.name.trim(), action.id).not.toBe(""); + expect(action.category.trim(), action.id).not.toBe(""); + expect(action.shortcutScope, action.id).toBeTruthy(); + expect(getActionShortcutScopes(action).length, action.id).toBeGreaterThan(0); + expect(action.execute, action.id).toBeTypeOf("function"); + expect(action.execute.toString().replace(/\s/g, ""), action.id).not.toMatch(/^(\(\))?=>\{\}$/); + } + }); + + it("contains the audited executable command inventory", () => { + const ids = new Set(getRegisteredActions().map((action) => action.id)); + for (const actionId of expectedExecutableInventory) { + expect(ids.has(actionId), actionId).toBe(true); + } + }); + + it("registers every audited visible command in a dispatcher-reachable surface", () => { + for (const { scope, actionIds } of auditedVisibleCommandSurfaces) { + for (const actionId of actionIds) { + const action = getRegisteredAction(actionId); + expect(action, actionId).toBeDefined(); + expect(getActionShortcutScopes(action!), actionId).toContain(scope); + } + } + }); + + it("keeps unsafe/local commands visible as truthful non-executable metadata", () => { + const deferred = new Map(getDeferredActions().map((action) => [action.id, action])); + expect(deferred.size).toBe(expectedDeferredInventory.length); + for (const actionId of expectedDeferredInventory) { + const action = deferred.get(actionId); + expect(action, actionId).toBeDefined(); + expect(action?.reasonDetail.trim(), actionId).not.toBe(""); + expect(getRegisteredAction(actionId), actionId).toBeUndefined(); + } + expect(getRegisteredAction("track.toggleSelectedArm")).toMatchObject({ + shortcut: "R", + shortcutScope: "track_control_panel", + }); + expect(getDeferredActions().filter((action) => action.reason === "requires_undo_support")) + .toEqual([]); + }); + + it("has no invalid same-scope factory shortcut conflicts", () => { + expect(getActionShortcutConflicts()).toEqual([]); + }); + + it("declares editor mode conditions for intentional Piano Roll key reuse", () => { + expect(getRegisteredAction("midi.tool.draw")?.shortcutWhen).toBe("step_input_disabled"); + expect(getRegisteredAction("midi.stepInputD")?.shortcutWhen).toBe("step_input_enabled"); + }); + + it("executes selected-track actions against the current multi-selection", () => { + const toggleRenderQueue = vi.fn(); + const toggleSelectedTracksMute = vi.fn(); + const toggleSelectedTracksSolo = vi.fn(); + useDAWStore.setState({ + selectedTrackId: "track-a", + selectedTrackIds: ["track-a", "track-b"], + toggleRenderQueue, + toggleSelectedTracksMute, + toggleSelectedTracksSolo, + }); + + getRegisteredAction("view.renderQueue")?.execute(); + getRegisteredAction("track.toggleSelectedMute")?.execute(); + getRegisteredAction("track.toggleSelectedSolo")?.execute(); + + expect(toggleRenderQueue).toHaveBeenCalledTimes(1); + expect(toggleSelectedTracksMute).toHaveBeenCalledTimes(1); + expect(toggleSelectedTracksSolo).toHaveBeenCalledTimes(1); + }); + + it("routes linked selected-track controls through one selection transaction", () => { + const toggleSelectedTracksMute = vi.fn(); + const toggleSelectedTracksSolo = vi.fn(); + const toggleSelectedTracksArmed = vi.fn(); + const toggleSelectedTracksFXBypass = vi.fn(); + useDAWStore.setState({ + tracks: [ + { id: "track-a", armed: false, recordSafe: false }, + { id: "track-b", armed: false, recordSafe: false }, + { id: "track-c", armed: false, recordSafe: false }, + ] as never, + selectedTrackId: "track-a", + selectedTrackIds: ["track-a", "track-b", "track-c"], + trackGroups: [{ + id: "group-a", + name: "Linked pair", + leadTrackId: "track-a", + memberTrackIds: ["track-a", "track-b"], + linkedParams: ["mute", "solo", "armed", "fxBypass"], + }], + toggleSelectedTracksMute, + toggleSelectedTracksSolo, + toggleSelectedTracksArmed, + toggleSelectedTracksFXBypass, + }); + + getRegisteredAction("track.toggleSelectedMute")?.execute(); + getRegisteredAction("track.toggleSelectedSolo")?.execute(); + getRegisteredAction("track.toggleSelectedArm")?.execute(); + getRegisteredAction("track.toggleSelectedFxBypass")?.execute(); + + expect(toggleSelectedTracksMute).toHaveBeenCalledTimes(1); + expect(toggleSelectedTracksSolo).toHaveBeenCalledTimes(1); + expect(toggleSelectedTracksArmed).toHaveBeenCalledTimes(1); + expect(toggleSelectedTracksFXBypass).toHaveBeenCalledTimes(1); + }); + + it("routes link and unlink commands through selection-level store transactions", () => { + const addTrackGroup = vi.fn(); + const unlinkTracksFromGroups = vi.fn(); + useDAWStore.setState({ + tracks: [ + { id: "track-a" }, + { id: "track-b" }, + ] as never, + selectedTrackId: "track-a", + selectedTrackIds: ["track-a", "track-b"], + trackGroups: [], + addTrackGroup, + unlinkTracksFromGroups, + }); + + getRegisteredAction("track.linkSelected")?.execute(); + expect(addTrackGroup).toHaveBeenCalledWith( + "Group", + "track-a", + ["track-a", "track-b"], + ["volume", "pan", "mute", "solo", "armed", "fxBypass"], + ); + + useDAWStore.setState({ + trackGroups: [{ + id: "group-a", + name: "Group", + leadTrackId: "track-a", + memberTrackIds: ["track-a", "track-b"], + linkedParams: ["mute"], + }], + }); + getRegisteredAction("track.unlinkSelected")?.execute(); + expect(unlinkTracksFromGroups).toHaveBeenCalledWith(["track-a", "track-b"]); + }); + + it("routes component-owned catalog actions through the exact active scoped executor", () => { + const cases: Array<{ + context: EditShortcutContext; + actionIds: readonly string[]; + }> = [ + { context: { kind: "timeline" }, actionIds: ["clip.splitAtPointer"] }, + { + context: { kind: "piano_roll", sessionId: "catalog-test" }, + actionIds: [ + "midi.loopFromSelectedNotes", + "midi.noteProperties", + "midi.toggleGhostReference", + "midi.openQuantizePanel", + "midi.quantizeLength", + "midi.controllerLine", + "midi.controllerSineLfo", + "midi.controllerTriangleLfo", + "midi.controllerSquareLfo", + "midi.controllerSawUpLfo", + "midi.controllerSawDownLfo", + "midi.controllerTransform", + "midi.controllerThin", + "midi.copyControllerLane", + "midi.pasteControllerLane", + "midi.clearControllerLane", + ], + }, + { + context: { kind: "pitch_editor" }, + actionIds: ["pitch.detectKeyScale", "pitch.correctAllToScale", "pitch.toggleAB", "pitch.openCorrectionMacro"], + }, + { + context: { kind: "track_control_panel" }, + actionIds: [ + "track.openSelectedFxChain", + "track.openSelectedNotes", + "track.loadSelectedSamplerSample", + "mixer.openMasterFxChain", + ], + }, + { + context: { kind: "mixer" }, + actionIds: ["track.openSelectedFxChain", "mixer.openMasterFxChain", "mixer.addMonitorFx"], + }, + { + context: { kind: "plugin", sessionId: "catalog-test" }, + actionIds: [ + "fx.removeSelected", + "fx.toggleSelectedBypass", + "fx.openSelectedEditor", + "fx.toggleSelectedAB", + "fx.reloadSelectedScript", + "fx.toggleSelectedParameters", + "fx.toggleSelectedPresets", + "fx.openInstrumentEditor", + "fx.removeInstrument", + ], + }, + { + context: { kind: "browser" }, + actionIds: [ + "browser.focusSearch", + "browser.toggleFavorites", + "browser.openUserEffectsFolder", + "browser.toggleScanFolders", + "browser.addScanFolder", + "browser.scanPlugins", + "browser.deepScanPlugins", + "browser.removeCurrentInstrument", + "browser.mediaNavigateUp", + "browser.mediaToggleRecent", + "browser.mediaFocusFilter", + ], + }, + ]; + + for (const { context, actionIds } of cases) { + const executor = vi.fn((_actionId: string) => "handled" as const); + const unregister = registerScopedActionExecutor(context, executor); + activateShortcutContext(context); + try { + for (const actionId of actionIds) getRegisteredAction(actionId)?.execute(); + expect(executor.mock.calls.map(([actionId]) => actionId)).toEqual(actionIds); + } finally { + unregister(); + } + } + + expect(executeActiveScopedAction("fx.removeSelected")).toBe("unmatched"); + }); + + it("keeps shell-owned global commands reachable after an editor takes focus", () => { + const applicationExecutor = vi.fn((actionId: string) => ( + actionId === "transport.metronomeSettings" + || actionId === "view.openGridQuantizePanel" + || actionId === "edit.applyCurrentQuantize" + ? "handled" as const + : "unmatched" as const + )); + const timelineExecutor = vi.fn(() => "unmatched" as const); + const unregisterApplication = registerScopedActionExecutor( + { kind: "application" }, + applicationExecutor, + ); + const unregisterTimeline = registerScopedActionExecutor( + { kind: "timeline" }, + timelineExecutor, + ); + activateShortcutContext({ kind: "timeline" }); + + try { + getRegisteredAction("transport.metronomeSettings")?.execute(); + getRegisteredAction("view.openGridQuantizePanel")?.execute(); + getRegisteredAction("edit.applyCurrentQuantize")?.execute(); + expect(applicationExecutor.mock.calls.map(([actionId]) => actionId)).toEqual([ + "transport.metronomeSettings", + "view.openGridQuantizePanel", + "edit.applyCurrentQuantize", + ]); + } finally { + unregisterTimeline(); + unregisterApplication(); + } + }); + + it("falls through co-owned surface executors until one recognizes the action", () => { + const owner = vi.fn(() => "handled" as const); + const unrelatedOwner = vi.fn(() => "unmatched" as const); + const unregisterOwner = registerScopedActionExecutor({ kind: "browser" }, owner); + const unregisterUnrelated = registerScopedActionExecutor({ kind: "browser" }, unrelatedOwner); + activateShortcutContext({ kind: "browser" }); + + try { + expect(executeActiveScopedAction("browser.mediaNavigateUp")).toBe("handled"); + expect(unrelatedOwner).toHaveBeenCalledWith("browser.mediaNavigateUp"); + expect(owner).toHaveBeenCalledWith("browser.mediaNavigateUp"); + } finally { + unregisterUnrelated(); + unregisterOwner(); + } + }); + + it("exposes track commands in both TCP and Mixer without widening them globally", () => { + expect(getActionShortcutScopes(getRegisteredAction("track.toggleSelectedMute")!)) + .toEqual(["track_control_panel", "mixer"]); + expect(getActionShortcutScopes(getRegisteredAction("track.renderSelectedInPlace")!)) + .toEqual(["track_control_panel", "mixer", "timeline"]); + expect(getActionShortcutScopes(getRegisteredAction("track.toggleSelectedAutomationRead")!)) + .toEqual(["automation", "track_control_panel", "mixer"]); + expect(getActionShortcutScopes(getRegisteredAction("track.toggleSelectedFxBypass")!)) + .toEqual(["track_control_panel", "mixer", "plugin"]); + }); +}); diff --git a/frontend/src/__tests__/aiGenerationStore.test.ts b/frontend/src/__tests__/aiGenerationStore.test.ts index 2851a85..e1c90ec 100644 --- a/frontend/src/__tests__/aiGenerationStore.test.ts +++ b/frontend/src/__tests__/aiGenerationStore.test.ts @@ -38,7 +38,7 @@ describe("AI generation store actions", () => { vi.spyOn(nativeBridge, "addTrack").mockResolvedValue("track-added"); vi.spyOn(nativeBridge, "removeTrack").mockResolvedValue(true); vi.spyOn(nativeBridge, "addPlaybackClip").mockResolvedValue(true); - vi.spyOn(nativeBridge, "removePlaybackClip").mockResolvedValue(true); + vi.spyOn(nativeBridge, "removePlaybackClipById").mockResolvedValue(true); vi.spyOn(nativeBridge, "refreshWaveformPeaks").mockResolvedValue(true); }); diff --git a/frontend/src/__tests__/aiToolsFeatureInstaller.test.ts b/frontend/src/__tests__/aiToolsFeatureInstaller.test.ts index 4330a8e..e097b1e 100644 --- a/frontend/src/__tests__/aiToolsFeatureInstaller.test.ts +++ b/frontend/src/__tests__/aiToolsFeatureInstaller.test.ts @@ -39,7 +39,11 @@ describe("AI feature installer contract", () => { expect(modalSource).toContain("STABLE_AUDIO_MODEL_URL"); expect(modalSource).toContain("Open Hugging Face Model Page"); expect(modalSource).toContain("Proceed with Setup"); - expect(modalSource).toContain("Use Downloads Folder"); + expect(modalSource).toContain("STABLE_AUDIO_FOLDER_EXAMPLE"); + expect(modalSource).toContain("nativeBridge.browseForFolder"); + expect(modalSource).not.toContain("C:\\\\Users\\\\"); + expect(modalSource).not.toContain("srvds"); + expect(modalSource).not.toContain("Use Downloads Folder"); expect(modalSource).toContain("Cancel Setup"); expect(modalSource).toContain("stableAudioSelectedFolder"); expect(modalSource).toContain("modelId: STABLE_AUDIO_3_MODEL_ID"); diff --git a/frontend/src/__tests__/atomicShortcutMutations.test.ts b/frontend/src/__tests__/atomicShortcutMutations.test.ts new file mode 100644 index 0000000..8d1c3c0 --- /dev/null +++ b/frontend/src/__tests__/atomicShortcutMutations.test.ts @@ -0,0 +1,1321 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { getRegisteredAction } from "../store/actionRegistry"; +import { commandManager } from "../store/commands"; +import { nativeBridge } from "../services/NativeBridge"; +import { + createDefaultTrack, + type AudioClip, + type MIDIClip, + type MidiEditorSession, + useDAWStore, +} from "../store/useDAWStore"; + +const originalState = useDAWStore.getState(); + +function audioClip(id: string, overrides: Partial = {}): AudioClip { + return { + id, + filePath: `C:/audio/${id}.wav`, + name: id, + startTime: 0, + duration: 1, + offset: 0, + color: "#224466", + volumeDB: 0, + fadeIn: 0, + fadeOut: 0, + ...overrides, + }; +} + +function midiClip(id: string, overrides: Partial = {}): MIDIClip { + return { + id, + name: id, + startTime: 0, + duration: 1, + sourceLength: 1, + loopLength: 1, + events: [], + ccEvents: [], + color: "#664422", + ...overrides, + }; +} + +function midiSession(clipId: string): MidiEditorSession { + return { + sessionId: `session-${clipId}`, + trackId: "midi", + clipId, + mode: "docked", + selectedNoteIds: ["note-a"], + midiEditRange: { startTime: 0, endTime: 1, minNote: 36, maxNote: 84, includeCC: true }, + editCursorTime: 0.5, + activeTool: "select", + visibleLanes: [], + activeLaneId: "velocity", + scrollY: 0, + windowPixelsPerSecond: 100, + windowScrollX: 0, + openedAt: 1, + updatedAt: 1, + }; +} + +function resetProject() { + commandManager.clear(); + useDAWStore.setState({ + tracks: [], + trackGroups: [], + selectedTrackId: null, + selectedTrackIds: [], + lastSelectedTrackId: null, + selectedClipId: null, + selectedClipIds: [], + selectedNoteIds: [], + selectedAutomationTarget: null, + selectedRegionIds: [], + timeSelection: null, + razorEdits: [], + midiEditRange: null, + pianoRollEditCursorTime: null, + midiEditorSessions: [], + activeMidiEditorSessionId: null, + dockedMidiEditorSessionId: null, + detachedPanels: [], + showPianoRoll: false, + pianoRollTrackId: null, + pianoRollClipId: null, + showPitchEditor: false, + pitchEditorTrackId: null, + pitchEditorClipId: null, + pitchEditorFxIndex: 0, + rippleMode: "off", + globalLocked: false, + lockSettings: { items: false, envelopes: false, timeSelection: false, markers: false }, + canUndo: false, + canRedo: false, + syncClipsWithBackend: vi.fn(async () => undefined), + syncMIDITrackToBackend: vi.fn(async () => undefined), + }); +} + +beforeEach(resetProject); + +afterEach(() => { + vi.restoreAllMocks(); + vi.unstubAllGlobals(); + commandManager.clear(); + useDAWStore.setState(originalState); +}); + +describe("atomic Timeline shortcut mutations", () => { + it("deselects zero-time cursors and selection stored in every MIDI editor session", () => { + const session = { + ...midiSession("midi-clip"), + selectedNoteIds: ["session-note"], + editCursorTime: 0, + }; + useDAWStore.setState({ + selectedNoteIds: [], + midiEditRange: null, + pianoRollEditCursorTime: 0, + midiEditorSessions: [session], + }); + + const action = getRegisteredAction("edit.deselectAll")!; + expect(action.canHandleShortcut?.()).toBe(true); + action.execute(); + + const state = useDAWStore.getState(); + expect(state.pianoRollEditCursorTime).toBeNull(); + expect(state.midiEditorSessions[0].selectedNoteIds).toEqual([]); + expect(state.midiEditorSessions[0].midiEditRange).toBeNull(); + expect(state.midiEditorSessions[0].editCursorTime).toBeNull(); + }); + + it("keeps a selected track safe when the higher-priority clip selection is locked", () => { + const track = createDefaultTrack("audio", "Audio", "#111", "audio", []); + track.clips = [audioClip("locked-clip", { locked: true })]; + const deleteSelectedTracks = vi.fn(async () => undefined); + useDAWStore.setState({ + tracks: [track], + selectedTrackId: track.id, + selectedTrackIds: [track.id], + selectedClipId: "locked-clip", + selectedClipIds: ["locked-clip"], + deleteSelectedTracks, + }); + + const action = getRegisteredAction("edit.delete")!; + expect(action.canHandleShortcut?.()).toBe(false); + action.execute(); + + expect(useDAWStore.getState().tracks).toHaveLength(1); + expect(useDAWStore.getState().tracks[0].clips.map((clip) => clip.id)).toEqual(["locked-clip"]); + expect(deleteSelectedTracks).not.toHaveBeenCalled(); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it("keeps lower-priority clip and track selections safe when razor content is locked", () => { + const track = createDefaultTrack("audio", "Audio", "#111", "audio", []); + track.clips = [ + audioClip("razor-locked", { startTime: 0, duration: 1, locked: true }), + audioClip("lower-priority", { startTime: 2, duration: 1 }), + ]; + const deleteSelectedTracks = vi.fn(async () => undefined); + useDAWStore.setState({ + tracks: [track], + selectedTrackId: track.id, + selectedTrackIds: [track.id], + selectedClipId: "lower-priority", + selectedClipIds: ["lower-priority"], + razorEdits: [{ trackId: track.id, start: 0, end: 1 }], + deleteSelectedTracks, + }); + + const action = getRegisteredAction("edit.delete")!; + expect(action.canHandleShortcut?.()).toBe(false); + action.execute(); + + expect(useDAWStore.getState().tracks[0].clips.map((clip) => clip.id)).toEqual([ + "razor-locked", + "lower-priority", + ]); + expect(deleteSelectedTracks).not.toHaveBeenCalled(); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it("keeps a selected track safe when the higher-priority time selection is locked", () => { + const track = createDefaultTrack("audio", "Audio", "#111", "audio", []); + track.clips = [audioClip("time-target", { startTime: 0, duration: 2 })]; + const deleteSelectedTracks = vi.fn(async () => undefined); + useDAWStore.setState({ + tracks: [track], + selectedTrackId: track.id, + selectedTrackIds: [track.id], + timeSelection: { start: 0, end: 1 }, + lockSettings: { items: true, envelopes: false, timeSelection: false, markers: false }, + deleteSelectedTracks, + }); + + const action = getRegisteredAction("edit.delete")!; + expect(action.canHandleShortcut?.()).toBe(false); + action.execute(); + + expect(useDAWStore.getState().tracks).toHaveLength(1); + expect(useDAWStore.getState().tracks[0].clips.map((clip) => clip.id)).toEqual(["time-target"]); + expect(deleteSelectedTracks).not.toHaveBeenCalled(); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it("applies one Global Lock policy to structural track hotkeys in Timeline, TCP, and mixer contexts", async () => { + const first = createDefaultTrack("first", "First", "#111", "audio", []); + const second = createDefaultTrack("second", "Second", "#222", "audio", [first]); + const removeTrack = vi.spyOn(nativeBridge, "removeTrack").mockResolvedValue(true); + const addTrack = vi.spyOn(nativeBridge, "addTrack") + .mockImplementation(async (explicitId) => explicitId || "generated-track"); + useDAWStore.setState({ + tracks: [first, second], + selectedTrackId: "second", + selectedTrackIds: ["second"], + globalLocked: true, + }); + + const timelineDelete = getRegisteredAction("edit.delete")!; + const tcpDelete = getRegisteredAction("track.deleteSelected")!; + const duplicate = getRegisteredAction("track.duplicateSelected")!; + const group = getRegisteredAction("track.groupSelectedIntoFolder")!; + const moveUp = getRegisteredAction("track.moveSelectedUp")!; + for (const action of [timelineDelete, tcpDelete, duplicate, group, moveUp]) { + expect(action.canHandleShortcut?.()).toBe(false); + action.execute(); + } + await useDAWStore.getState().deleteSelectedTracks(); + await useDAWStore.getState().duplicateSelectedTracks(); + expect(useDAWStore.getState().groupSelectedTracksIntoFolder()).toBe(false); + expect(useDAWStore.getState().moveSelectedTracks("up")).toBe(false); + + expect(useDAWStore.getState().tracks.map((track) => track.id)).toEqual(["first", "second"]); + expect(removeTrack).not.toHaveBeenCalled(); + expect(addTrack).not.toHaveBeenCalled(); + expect(commandManager.getUndoStack()).toHaveLength(0); + + const muteAction = getRegisteredAction("track.toggleSelectedMute")!; + expect(muteAction.canHandleShortcut?.()).toBe(true); + muteAction.execute(); + expect(useDAWStore.getState().tracks[1].muted).toBe(true); + expect(commandManager.getUndoStack()).toHaveLength(1); + }); + + it("inserts an empty audio item only on an eligible track with one stable undo", () => { + const audio = createDefaultTrack("audio", "Audio", "#111", "audio", []); + const midi = createDefaultTrack("midi", "MIDI", "#222", "midi", [audio]); + useDAWStore.setState({ + tracks: [audio, midi], + selectedTrackId: "midi", + selectedTrackIds: ["midi"], + transport: { ...useDAWStore.getState().transport, currentTime: -5 }, + }); + + const action = getRegisteredAction("insert.emptyItem")!; + expect(action.canHandleShortcut?.()).toBe(true); + action.execute(); + let state = useDAWStore.getState(); + expect(state.tracks[0].clips).toHaveLength(1); + expect(state.tracks[0].clips[0]).toMatchObject({ startTime: 0, duration: 4, filePath: "" }); + expect(state.tracks[1].clips).toHaveLength(0); + const clipId = state.tracks[0].clips[0].id; + expect(commandManager.getUndoStack()).toHaveLength(1); + + state.undo(); + expect(useDAWStore.getState().tracks[0].clips).toHaveLength(0); + state.redo(); + expect(useDAWStore.getState().tracks[0].clips[0].id).toBe(clipId); + + useDAWStore.getState().undo(); + commandManager.clear(); + useDAWStore.setState({ globalLocked: true, canUndo: false, canRedo: false }); + expect(action.canHandleShortcut?.()).toBe(false); + action.execute(); + expect(useDAWStore.getState().tracks[0].clips).toHaveLength(0); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it("inserts an empty MIDI clip only when item editing and its target track are available", () => { + const midi = createDefaultTrack("midi", "MIDI", "#222", "midi", []); + midi.frozen = true; + useDAWStore.setState({ + tracks: [midi], + selectedTrackId: midi.id, + selectedTrackIds: [midi.id], + transport: { ...useDAWStore.getState().transport, currentTime: 2 }, + }); + const action = getRegisteredAction("insert.emptyMidiClip")!; + expect(action.canHandleShortcut?.()).toBe(false); + action.execute(); + expect(useDAWStore.getState().tracks[0].midiClips).toEqual([]); + + useDAWStore.setState((state) => ({ + tracks: state.tracks.map((track) => ({ ...track, frozen: false })), + lockSettings: { ...state.lockSettings, items: true }, + })); + expect(action.canHandleShortcut?.()).toBe(false); + action.execute(); + expect(commandManager.getUndoStack()).toHaveLength(0); + + useDAWStore.setState((state) => ({ + lockSettings: { ...state.lockSettings, items: false }, + })); + expect(action.canHandleShortcut?.()).toBe(true); + action.execute(); + let state = useDAWStore.getState(); + expect(state.tracks[0].midiClips).toHaveLength(1); + expect(state.tracks[0].midiClips[0]).toMatchObject({ startTime: 2, duration: 4 }); + const clipId = state.tracks[0].midiClips[0].id; + expect(commandManager.getUndoStack()).toHaveLength(1); + state.undo(); + expect(useDAWStore.getState().tracks[0].midiClips).toEqual([]); + state.redo(); + expect(useDAWStore.getState().tracks[0].midiClips[0].id).toBe(clipId); + }); + + it("deletes a mixed clip selection before selected tracks in one undo step", () => { + const audio = createDefaultTrack("audio", "Audio", "#111", "audio", []); + audio.clips = [ + audioClip("audio-open"), + audioClip("audio-locked", { startTime: 2, locked: true }), + ]; + const midi = createDefaultTrack("midi", "MIDI", "#222", "midi", []); + midi.midiClips = [midiClip("midi-open")]; + const session = midiSession("midi-open"); + const deleteSelectedTracks = vi.fn(async () => undefined); + useDAWStore.setState({ + tracks: [audio, midi], + selectedTrackId: "audio", + selectedTrackIds: ["audio"], + selectedClipId: "midi-open", + selectedClipIds: ["audio-open", "audio-locked", "midi-open"], + midiEditorSessions: [session], + activeMidiEditorSessionId: session.sessionId, + dockedMidiEditorSessionId: session.sessionId, + showPianoRoll: true, + pianoRollTrackId: "midi", + pianoRollClipId: "midi-open", + selectedNoteIds: ["note-a"], + deleteSelectedTracks, + }); + + getRegisteredAction("edit.delete")!.execute(); + let state = useDAWStore.getState(); + expect(state.tracks[0].clips.map((clip) => clip.id)).toEqual(["audio-locked"]); + expect(state.tracks[1].midiClips).toEqual([]); + expect(state.selectedClipIds).toEqual(["audio-locked"]); + expect(state.midiEditorSessions).toEqual([]); + expect(deleteSelectedTracks).not.toHaveBeenCalled(); + expect(commandManager.getUndoStack()).toHaveLength(1); + + state.undo(); + state = useDAWStore.getState(); + expect(state.tracks[0].clips.map((clip) => clip.id)).toEqual(["audio-open", "audio-locked"]); + expect(state.tracks[1].midiClips.map((clip) => clip.id)).toEqual(["midi-open"]); + expect(state.selectedClipIds).toEqual(["audio-open", "audio-locked", "midi-open"]); + expect(state.midiEditorSessions.map((entry) => entry.sessionId)).toEqual([session.sessionId]); + expect(commandManager.getUndoStack()).toHaveLength(0); + + state.redo(); + expect(useDAWStore.getState().tracks[1].midiClips).toEqual([]); + expect(commandManager.getUndoStack()).toHaveLength(1); + }); + + it("duplicates mixed audio/MIDI clips with stable ids as one command", () => { + const audio = createDefaultTrack("audio", "Audio", "#111", "audio", []); + audio.clips = [audioClip("audio-source", { startTime: 1, duration: 2 })]; + const midi = createDefaultTrack("midi", "MIDI", "#222", "midi", []); + midi.midiClips = [midiClip("midi-source", { startTime: 4, duration: 3 })]; + useDAWStore.setState({ + tracks: [audio, midi], + selectedClipId: "midi-source", + selectedClipIds: ["audio-source", "midi-source"], + }); + + getRegisteredAction("edit.duplicateClips")!.execute(); + let state = useDAWStore.getState(); + const duplicateIds = [...state.selectedClipIds]; + expect(duplicateIds).toHaveLength(2); + expect(state.tracks[0].clips[1]).toMatchObject({ id: duplicateIds[0], startTime: 3 }); + expect(state.tracks[1].midiClips[1]).toMatchObject({ id: duplicateIds[1], startTime: 7 }); + expect(commandManager.getUndoStack()).toHaveLength(1); + + state.undo(); + expect(useDAWStore.getState().selectedClipIds).toEqual(["audio-source", "midi-source"]); + expect(useDAWStore.getState().tracks[0].clips).toHaveLength(1); + state.redo(); + state = useDAWStore.getState(); + expect(state.selectedClipIds).toEqual(duplicateIds); + expect(state.tracks[0].clips[1].id).toBe(duplicateIds[0]); + expect(state.tracks[1].midiClips[1].id).toBe(duplicateIds[1]); + }); + + it("deep-clones nested audio takes/envelopes and MIDI source data", () => { + const audio = createDefaultTrack("audio", "Audio", "#111", "audio", []); + audio.clips = [audioClip("audio-source", { + gainEnvelope: [{ time: 0.25, gain: 0.75 }], + takes: [audioClip("nested-take", { + gainEnvelope: [{ time: 0.5, gain: 0.5 }], + })], + })]; + const midi = createDefaultTrack("midi", "MIDI", "#222", "midi", []); + midi.midiClips = [midiClip("midi-source", { + events: [{ timestamp: 0, type: "noteOn", note: 60, velocity: 100 }], + ccEvents: [{ cc: 1, time: 0, value: 64 }], + quantizeBackup: { + events: [{ timestamp: 0.1, type: "noteOn", note: 61, velocity: 90 }], + ccEvents: [{ cc: 11, time: 0.1, value: 80 }], + }, + })]; + useDAWStore.setState({ + tracks: [audio, midi], + selectedClipId: "midi-source", + selectedClipIds: ["audio-source", "midi-source"], + }); + + const duplicateIds = useDAWStore.getState().duplicateSelectedClips(); + const state = useDAWStore.getState(); + const sourceAudio = state.tracks[0].clips[0]; + const duplicateAudio = state.tracks[0].clips[1]; + const sourceMidi = state.tracks[1].midiClips[0]; + const duplicateMidi = state.tracks[1].midiClips[1]; + expect(duplicateAudio.gainEnvelope).not.toBe(sourceAudio.gainEnvelope); + expect(duplicateAudio.takes).not.toBe(sourceAudio.takes); + expect(duplicateAudio.takes?.[0]).not.toBe(sourceAudio.takes?.[0]); + expect(duplicateAudio.takes?.[0].id).not.toBe(sourceAudio.takes?.[0].id); + expect(duplicateMidi.events).not.toBe(sourceMidi.events); + expect(duplicateMidi.events[0]).not.toBe(sourceMidi.events[0]); + expect(duplicateMidi.ccEvents).not.toBe(sourceMidi.ccEvents); + expect(duplicateMidi.quantizeBackup).not.toBe(sourceMidi.quantizeBackup); + + duplicateAudio.gainEnvelope![0].gain = 1.5; + duplicateAudio.takes![0].gainEnvelope![0].gain = 1.25; + duplicateMidi.events[0].note = 72; + duplicateMidi.ccEvents![0].value = 127; + duplicateMidi.quantizeBackup!.events[0].note = 73; + expect(sourceAudio.gainEnvelope![0].gain).toBe(0.75); + expect(sourceAudio.takes![0].gainEnvelope![0].gain).toBe(0.5); + expect(sourceMidi.events[0].note).toBe(60); + expect(sourceMidi.ccEvents![0].value).toBe(64); + expect(sourceMidi.quantizeBackup!.events[0].note).toBe(61); + + state.undo(); + state.redo(); + expect(useDAWStore.getState().selectedClipIds).toEqual(duplicateIds); + }); + + it("closes deleted native MIDI windows and pitch ownership without phantom undo state", () => { + const audio = createDefaultTrack("audio", "Audio", "#111", "audio", []); + audio.clips = [audioClip("pitch-source")]; + const midi = createDefaultTrack("midi", "MIDI", "#222", "midi", []); + midi.midiClips = [midiClip("midi-source")]; + const session = { ...midiSession("midi-source"), mode: "windowed" as const }; + const closeMidiEditorWindow = vi.spyOn(nativeBridge, "closeMidiEditorWindow").mockResolvedValue(true); + const closePitchEditor = vi.fn(() => useDAWStore.setState({ + showPitchEditor: false, + pitchEditorTrackId: null, + pitchEditorClipId: null, + pitchEditorFxIndex: 0, + })); + useDAWStore.setState({ + tracks: [audio, midi], + selectedClipId: "midi-source", + selectedClipIds: ["pitch-source", "midi-source"], + midiEditorSessions: [session], + activeMidiEditorSessionId: session.sessionId, + dockedMidiEditorSessionId: null, + detachedPanels: ["midiEditor"], + showPianoRoll: false, + pianoRollTrackId: "midi", + pianoRollClipId: "midi-source", + showPitchEditor: true, + pitchEditorTrackId: "audio", + pitchEditorClipId: "pitch-source", + closePitchEditor, + }); + + expect(useDAWStore.getState().deleteSelectedClips()).toBe(true); + expect(closeMidiEditorWindow).toHaveBeenCalledWith(session.sessionId, "sourceDelete"); + expect(closePitchEditor).toHaveBeenCalledTimes(1); + expect(useDAWStore.getState().midiEditorSessions).toEqual([]); + expect(useDAWStore.getState().showPitchEditor).toBe(false); + + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks[0].clips[0].id).toBe("pitch-source"); + expect(useDAWStore.getState().tracks[1].midiClips[0].id).toBe("midi-source"); + expect(useDAWStore.getState().midiEditorSessions).toEqual([]); + expect(useDAWStore.getState().detachedPanels).not.toContain("midiEditor"); + expect(useDAWStore.getState().showPitchEditor).toBe(false); + }); + + it("groups and ungroups mixed audio/MIDI items with shared selection semantics", () => { + const audio = createDefaultTrack("audio", "Audio", "#111", "audio", []); + audio.clips = [audioClip("audio-source")]; + const midi = createDefaultTrack("midi", "MIDI", "#222", "midi", []); + midi.midiClips = [midiClip("midi-source")]; + useDAWStore.setState({ + tracks: [audio, midi], + selectedClipId: "midi-source", + selectedClipIds: ["audio-source", "midi-source"], + }); + + expect(useDAWStore.getState().groupSelectedClips()).toBe(true); + const groupId = useDAWStore.getState().tracks[0].clips[0].groupId; + expect(groupId).toBeTruthy(); + expect(useDAWStore.getState().tracks[1].midiClips[0].groupId).toBe(groupId); + expect(commandManager.getUndoStack()).toHaveLength(1); + + useDAWStore.getState().selectClip("midi-source"); + expect(useDAWStore.getState().selectedClipIds).toEqual(["audio-source", "midi-source"]); + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks[0].clips[0].groupId).toBeUndefined(); + expect(useDAWStore.getState().tracks[1].midiClips[0].groupId).toBeUndefined(); + + useDAWStore.getState().redo(); + commandManager.clear(); + expect(useDAWStore.getState().ungroupSelectedClips()).toBe(true); + expect(commandManager.getUndoStack()).toHaveLength(1); + expect(useDAWStore.getState().tracks[0].clips[0].groupId).toBeUndefined(); + expect(useDAWStore.getState().tracks[1].midiClips[0].groupId).toBeUndefined(); + }); + + it("quantizes unlocked audio and MIDI timeline items in one undo step", () => { + const audio = createDefaultTrack("audio", "Audio", "#111", "audio", []); + audio.clips = [ + audioClip("audio-source", { startTime: 0.13 }), + audioClip("locked", { startTime: 0.37, locked: true }), + ]; + audio.automationLanes = [{ + id: "volume-lane", + param: "volume", + points: [{ id: "point", time: 0.2, value: 0.5 }], + visible: true, + mode: "read", + armed: false, + readEnabled: true, + }]; + const midi = createDefaultTrack("midi", "MIDI", "#222", "midi", []); + midi.midiClips = [midiClip("midi-source", { startTime: 0.26 })]; + const syncAudio = vi.fn(async () => undefined); + const syncMIDI = vi.fn(async () => undefined); + useDAWStore.setState((current) => ({ + tracks: [audio, midi], + selectedClipId: "midi-source", + selectedClipIds: ["audio-source", "locked", "midi-source"], + transport: { ...current.transport, tempo: 120 }, + gridSize: "1/16", + quantizePresetId: "factory-1/16", + moveEnvelopesWithItems: true, + syncClipsWithBackend: syncAudio, + syncMIDITrackToBackend: syncMIDI, + })); + + expect(useDAWStore.getState().quantizeSelectedClips()).toBe(true); + expect(useDAWStore.getState().tracks[0].clips.map((clip) => clip.startTime)) + .toEqual([0.125, 0.37]); + expect(useDAWStore.getState().tracks[1].midiClips[0].startTime).toBe(0.25); + expect(useDAWStore.getState().tracks[0].automationLanes[0].points[0].time).toBeCloseTo(0.195); + expect(commandManager.getUndoStack()).toHaveLength(1); + expect(syncAudio).toHaveBeenCalledTimes(1); + expect(syncMIDI).toHaveBeenCalledWith("midi", { debounce: false }); + + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks[0].clips[0].startTime).toBe(0.13); + expect(useDAWStore.getState().tracks[1].midiClips[0].startTime).toBe(0.26); + expect(useDAWStore.getState().tracks[0].automationLanes[0].points[0].time).toBe(0.2); + }); + + it("toggles mute and lock per eligible item with one undo each", () => { + const track = createDefaultTrack("audio", "Audio", "#111", "audio", []); + track.clips = [ + audioClip("plain"), + audioClip("muted", { muted: true }), + audioClip("locked", { locked: true }), + ]; + useDAWStore.setState({ + tracks: [track], + selectedClipId: "locked", + selectedClipIds: ["plain", "muted", "locked"], + }); + + getRegisteredAction("edit.muteClips")!.execute(); + expect(useDAWStore.getState().tracks[0].clips.map((clip) => [clip.id, !!clip.muted])) + .toEqual([["plain", true], ["muted", false], ["locked", false]]); + expect(commandManager.getUndoStack()).toHaveLength(1); + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks[0].clips.map((clip) => [clip.id, !!clip.muted])) + .toEqual([["plain", false], ["muted", true], ["locked", false]]); + + commandManager.clear(); + useDAWStore.setState({ canUndo: false, canRedo: false }); + getRegisteredAction("edit.toggleClipLock")!.execute(); + expect(useDAWStore.getState().tracks[0].clips.map((clip) => [clip.id, !!clip.locked])) + .toEqual([["plain", true], ["muted", true], ["locked", false]]); + expect(commandManager.getUndoStack()).toHaveLength(1); + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks[0].clips.map((clip) => [clip.id, !!clip.locked])) + .toEqual([["plain", false], ["muted", false], ["locked", true]]); + }); + + it("does not create history when every selected edit target is missing or locked", () => { + const track = createDefaultTrack("audio", "Audio", "#111", "audio", []); + track.clips = [audioClip("locked", { locked: true })]; + useDAWStore.setState({ + tracks: [track], + selectedClipId: "locked", + selectedClipIds: ["missing", "locked"], + }); + expect(useDAWStore.getState().deleteSelectedClips()).toBe(false); + expect(useDAWStore.getState().toggleSelectedClipsMuted()).toBe(false); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it("enforces global, item, and per-clip locks in keyboard, wheel, and direct mutation paths", () => { + const track = createDefaultTrack("audio", "Audio", "#111", "audio", []); + track.clips = [audioClip("clip", { startTime: 1, volumeDB: 0, fadeIn: 0, fadeOut: 0 })]; + useDAWStore.setState({ + tracks: [track], + selectedClipId: "clip", + selectedClipIds: ["clip"], + }); + + const attemptAllEntrypoints = () => { + const state = useDAWStore.getState(); + state.setClipVolume("clip", 6); // Timeline wheel and volume-line endpoint. + state.beginClipFadeEdit("clip"); + state.previewClipFades("clip", 0.25, 0.25); + state.commitClipFadeEdit("clip"); + state.toggleClipMute("clip"); + state.nudgeClips("right", false); + state.setClipColor("clip", "#abcdef"); + getRegisteredAction("edit.muteClips")!.execute(); + }; + const expectUnchanged = () => { + expect(useDAWStore.getState().tracks[0].clips[0]).toMatchObject({ + startTime: 1, + volumeDB: 0, + fadeIn: 0, + fadeOut: 0, + color: "#224466", + }); + expect(Boolean(useDAWStore.getState().tracks[0].clips[0].muted)).toBe(false); + expect(commandManager.getUndoStack()).toHaveLength(0); + }; + + useDAWStore.setState({ globalLocked: true }); + attemptAllEntrypoints(); + expectUnchanged(); + + useDAWStore.setState({ + globalLocked: false, + lockSettings: { ...useDAWStore.getState().lockSettings, items: true }, + }); + attemptAllEntrypoints(); + expectUnchanged(); + + useDAWStore.setState((state) => ({ + lockSettings: { ...state.lockSettings, items: false }, + tracks: state.tracks.map((candidate) => ({ + ...candidate, + clips: candidate.clips.map((clip) => ({ ...clip, locked: true })), + })), + })); + attemptAllEntrypoints(); + expectUnchanged(); + }); +}); + +describe("selection semantics", () => { + it("clears every main-realm selection without creating undo history", () => { + const track = createDefaultTrack("track", "Track", "#111", "midi", []); + track.midiClips = [midiClip("clip")]; + const session = midiSession("clip"); + useDAWStore.setState({ + tracks: [track], + selectedTrackId: "track", + selectedTrackIds: ["track"], + lastSelectedTrackId: "track", + selectedClipId: "clip", + selectedClipIds: ["clip"], + selectedNoteIds: ["note-a"], + selectedAutomationTarget: { kind: "track", trackId: "track", laneId: "lane", pointId: "point" }, + selectedRegionIds: ["region"], + timeSelection: { start: 1, end: 2 }, + razorEdits: [{ trackId: "track", start: 1, end: 2 }], + midiEditRange: { startTime: 0, endTime: 1, minNote: 36, maxNote: 84, includeCC: true }, + pianoRollEditCursorTime: 0.5, + midiEditorSessions: [session], + }); + + getRegisteredAction("edit.deselectAll")!.execute(); + expect(useDAWStore.getState()).toMatchObject({ + selectedTrackId: null, + selectedTrackIds: [], + lastSelectedTrackId: null, + selectedClipId: null, + selectedClipIds: [], + selectedNoteIds: [], + selectedAutomationTarget: null, + selectedRegionIds: [], + timeSelection: null, + razorEdits: [], + midiEditRange: null, + pianoRollEditCursorTime: null, + }); + expect(useDAWStore.getState().midiEditorSessions[0]).toMatchObject({ + selectedNoteIds: [], + midiEditRange: null, + editCursorTime: null, + }); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); +}); + +describe("atomic selected-track shortcuts", () => { + it("inserts multiple native tracks with one stable undo command", async () => { + const addTrack = vi.spyOn(nativeBridge, "addTrack") + .mockImplementation(async (explicitId) => explicitId || "generated-track"); + const removeTrack = vi.spyOn(nativeBridge, "removeTrack").mockResolvedValue(true); + const ids = await useDAWStore.getState().addTracksBatch([ + { id: "batch-a", name: "Audio 1", type: "audio" }, + { id: "batch-b", name: "MIDI 2", type: "midi" }, + ]); + expect(ids).toEqual(["batch-a", "batch-b"]); + expect(useDAWStore.getState().tracks.map((track) => track.id)).toEqual(ids); + expect(commandManager.getUndoStack()).toHaveLength(1); + expect(addTrack).toHaveBeenCalledWith("batch-a", "audio"); + expect(addTrack).toHaveBeenCalledWith("batch-b", "midi"); + + useDAWStore.getState().undo(); + await vi.waitFor(() => expect(useDAWStore.getState().tracks).toEqual([])); + expect(removeTrack.mock.calls.map(([trackId]) => trackId)).toEqual(["batch-b", "batch-a"]); + useDAWStore.getState().redo(); + await vi.waitFor(() => expect(useDAWStore.getState().tracks.map((track) => track.id)).toEqual(ids)); + expect(commandManager.getUndoStack()).toHaveLength(1); + }); + + it("coalesces selected folder, automation, and spectral view toggles", () => { + const first = createDefaultTrack("first", "First", "#111", "audio", []); + const second = createDefaultTrack("second", "Second", "#222", "audio", [first]); + first.isFolder = true; + second.isFolder = true; + useDAWStore.setState({ + tracks: [first, second], + selectedTrackId: "second", + selectedTrackIds: ["first", "second"], + }); + + for (const actionId of [ + "track.toggleSelectedFolders", + "track.toggleSelectedAutomation", + "track.toggleSelectedSpectralView", + ]) { + commandManager.clear(); + useDAWStore.setState({ canUndo: false, canRedo: false }); + getRegisteredAction(actionId)!.execute(); + expect(commandManager.getUndoStack(), actionId).toHaveLength(1); + useDAWStore.getState().undo(); + expect(commandManager.getUndoStack(), actionId).toHaveLength(0); + } + }); + + it("toggles linked and unlinked track booleans in one undo step", async () => { + const first = createDefaultTrack("first", "First", "#111", "audio", []); + const linked = createDefaultTrack("linked", "Linked", "#222", "audio", [first]); + const third = createDefaultTrack("third", "Third", "#333", "audio", [first, linked]); + third.muted = true; + third.soloed = true; + third.monitorEnabled = true; + third.phaseInverted = true; + useDAWStore.setState({ + tracks: [first, linked, third], + selectedTrackId: "first", + selectedTrackIds: ["first", "linked", "third"], + trackGroups: [{ + id: "linked-group", + name: "Linked", + leadTrackId: "first", + memberTrackIds: ["first", "linked"], + linkedParams: ["mute", "solo", "armed", "fxBypass"], + }], + }); + + getRegisteredAction("track.toggleSelectedMute")!.execute(); + expect(useDAWStore.getState().tracks.map((track) => track.muted)).toEqual([true, true, false]); + expect(commandManager.getUndoStack()).toHaveLength(1); + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks.map((track) => track.muted)).toEqual([false, false, true]); + useDAWStore.getState().redo(); + expect(useDAWStore.getState().tracks.map((track) => track.muted)).toEqual([true, true, false]); + + const cases: Array<[string, keyof typeof first, boolean[]]> = [ + ["track.toggleSelectedSolo", "soloed", [true, true, false]], + ["track.toggleSelectedMonitor", "monitorEnabled", [true, true, false]], + ["track.toggleSelectedPhaseInvert", "phaseInverted", [true, true, false]], + ["track.toggleSelectedFxBypass", "fxBypassed", [true, true, true]], + ]; + for (const [actionId, field, expected] of cases) { + commandManager.clear(); + useDAWStore.setState({ canUndo: false, canRedo: false }); + getRegisteredAction(actionId)!.execute(); + await vi.waitFor(() => { + expect(useDAWStore.getState().tracks.map((track) => Boolean(track[field])), actionId) + .toEqual(expected); + }); + expect(commandManager.getUndoStack(), actionId).toHaveLength(1); + useDAWStore.getState().undo(); + expect(commandManager.getUndoStack(), actionId).toHaveLength(0); + if (actionId === "track.toggleSelectedMonitor") { + await vi.waitFor(() => { + expect(useDAWStore.getState().tracks.map((track) => track.monitorEnabled)) + .toEqual([false, false, true]); + }); + } + } + }); + + it("arms eligible linked tracks atomically while leaving record-safe tracks untouched", () => { + const first = createDefaultTrack("first", "First", "#111", "audio", []); + const safe = createDefaultTrack("safe", "Safe", "#222", "audio", [first]); + safe.recordSafe = true; + useDAWStore.setState({ + tracks: [first, safe], + selectedTrackId: "first", + selectedTrackIds: ["first", "safe"], + trackGroups: [{ + id: "arm-group", + name: "Arm", + leadTrackId: "first", + memberTrackIds: ["first", "safe"], + linkedParams: ["armed"], + }], + }); + getRegisteredAction("track.toggleSelectedArm")!.execute(); + expect(useDAWStore.getState().tracks.map((track) => track.armed)).toEqual([true, false]); + expect(commandManager.getUndoStack()).toHaveLength(1); + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks.map((track) => track.armed)).toEqual([false, false]); + }); + + it("duplicates a multi-track selection with stable ids in one command", async () => { + vi.spyOn(nativeBridge, "getTrackInputFX").mockResolvedValue([]); + vi.spyOn(nativeBridge, "getTrackFX").mockResolvedValue([]); + const first = createDefaultTrack("first", "First", "#111", "audio", []); + const second = createDefaultTrack("second", "Second", "#222", "midi", [first]); + useDAWStore.setState({ + tracks: [first, second], + selectedTrackId: "second", + selectedTrackIds: ["first", "second"], + }); + + const duplicateIds = await useDAWStore.getState().duplicateSelectedTracks(); + expect(duplicateIds).toHaveLength(2); + expect(useDAWStore.getState().tracks.map((track) => track.id)) + .toEqual(["first", duplicateIds[0], "second", duplicateIds[1]]); + expect(commandManager.getUndoStack()).toHaveLength(1); + + useDAWStore.getState().undo(); + await vi.waitFor(() => expect(useDAWStore.getState().tracks.map((track) => track.id)) + .toEqual(["first", "second"])); + expect(useDAWStore.getState().selectedTrackIds).toEqual(["first", "second"]); + useDAWStore.getState().redo(); + await vi.waitFor(() => expect(useDAWStore.getState().tracks.map((track) => track.id)) + .toEqual(["first", duplicateIds[0], "second", duplicateIds[1]])); + expect(useDAWStore.getState().selectedTrackIds).toEqual(duplicateIds); + }); + + it("deletes a selected folder subtree and restores it as one native-safe command", async () => { + vi.spyOn(nativeBridge, "getTrackInputFX").mockResolvedValue([]); + vi.spyOn(nativeBridge, "getTrackFX").mockResolvedValue([]); + const addTrack = vi.spyOn(nativeBridge, "addTrack") + .mockImplementation(async (explicitId) => explicitId || "generated-track"); + const removeTrack = vi.spyOn(nativeBridge, "removeTrack").mockResolvedValue(true); + const folder = createDefaultTrack("folder", "Folder", "#111", "audio", []); + folder.isFolder = true; + folder.clips = [audioClip("pitch-source")]; + const child = createDefaultTrack("child", "Child", "#222", "midi", [folder]); + child.parentFolderId = "folder"; + child.midiClips = [midiClip("child-clip")]; + const outside = createDefaultTrack("outside", "Outside", "#333", "audio", [folder, child]); + const session = { ...midiSession("child-clip"), trackId: "child", mode: "windowed" as const }; + const closeMidiEditorWindow = vi.spyOn(nativeBridge, "closeMidiEditorWindow").mockResolvedValue(true); + const closePitchEditor = vi.fn(() => useDAWStore.setState({ + showPitchEditor: false, + pitchEditorTrackId: null, + pitchEditorClipId: null, + pitchEditorFxIndex: 0, + })); + useDAWStore.setState({ + tracks: [folder, child, outside], + selectedTrackId: "folder", + selectedTrackIds: ["folder"], + selectedClipId: "child-clip", + selectedClipIds: ["child-clip"], + midiEditorSessions: [session], + activeMidiEditorSessionId: session.sessionId, + detachedPanels: ["midiEditor"], + pianoRollTrackId: "child", + pianoRollClipId: "child-clip", + showPitchEditor: true, + pitchEditorTrackId: "folder", + pitchEditorClipId: "pitch-source", + closePitchEditor, + }); + + await useDAWStore.getState().deleteSelectedTracks(); + expect(useDAWStore.getState().tracks.map((track) => track.id)).toEqual(["outside"]); + expect(useDAWStore.getState().selectedClipIds).toEqual([]); + expect(commandManager.getUndoStack()).toHaveLength(1); + expect(removeTrack.mock.calls.map(([trackId]) => trackId)).toEqual(["child", "folder"]); + expect(closeMidiEditorWindow).toHaveBeenCalledWith(session.sessionId, "sourceTrackDelete"); + expect(closePitchEditor).toHaveBeenCalledTimes(1); + + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks.map((track) => track.id)) + .toEqual(["folder", "child", "outside"]); + expect(useDAWStore.getState().tracks[1].parentFolderId).toBe("folder"); + expect(useDAWStore.getState().selectedTrackIds).toEqual(["folder"]); + expect(useDAWStore.getState().midiEditorSessions).toEqual([]); + expect(useDAWStore.getState().detachedPanels).not.toContain("midiEditor"); + expect(useDAWStore.getState().showPitchEditor).toBe(false); + await vi.waitFor(() => expect(addTrack).toHaveBeenCalledWith("folder", "audio")); + expect(commandManager.getUndoStack()).toHaveLength(0); + + useDAWStore.getState().redo(); + await vi.waitFor(() => expect(useDAWStore.getState().tracks.map((track) => track.id)) + .toEqual(["outside"])); + expect(commandManager.getUndoStack()).toHaveLength(1); + }); + + it("creates a bus with all selected-track sends as one rollback-safe command", async () => { + const first = createDefaultTrack("first", "First", "#111", "audio", []); + const second = createDefaultTrack("second", "Second", "#222", "midi", [first]); + const addTrack = vi.spyOn(nativeBridge, "addTrack") + .mockImplementation(async (explicitId) => explicitId || "generated-track"); + const removeTrack = vi.spyOn(nativeBridge, "removeTrack").mockResolvedValue(true); + const addTrackSend = vi.spyOn(nativeBridge, "addTrackSend").mockResolvedValue(0); + const removeTrackSend = vi.spyOn(nativeBridge, "removeTrackSend").mockResolvedValue(true); + useDAWStore.setState({ + tracks: [first, second], + selectedTrackId: "second", + selectedTrackIds: ["first", "second"], + }); + + const createBusAction = getRegisteredAction("insert.bus")!; + expect(createBusAction.canHandleShortcut?.()).toBe(true); + createBusAction.execute(); + await vi.waitFor(() => expect(useDAWStore.getState().tracks.some((track) => track.type === "bus")).toBe(true)); + let state = useDAWStore.getState(); + const bus = state.tracks.find((track) => track.type === "bus")!; + expect(bus).toBeDefined(); + expect(state.tracks.slice(0, 2).map((track) => track.sends.map((send) => send.destTrackId))) + .toEqual([[bus.id], [bus.id]]); + expect(addTrack).toHaveBeenCalledWith(bus.id, "bus"); + expect(addTrackSend.mock.calls).toEqual([["first", bus.id], ["second", bus.id]]); + expect(commandManager.getUndoStack()).toHaveLength(1); + + state.undo(); + expect(useDAWStore.getState().tracks.map((track) => track.id)).toEqual(["first", "second"]); + expect(useDAWStore.getState().tracks.every((track) => track.sends.length === 0)).toBe(true); + await vi.waitFor(() => expect(removeTrack).toHaveBeenCalledWith(bus.id)); + expect(removeTrackSend.mock.calls).toEqual([["second", 0], ["first", 0]]); + + useDAWStore.getState().redo(); + await vi.waitFor(() => expect(useDAWStore.getState().tracks.some((track) => track.id === bus.id)).toBe(true)); + expect(useDAWStore.getState().tracks.slice(0, 2).map((track) => track.sends.map((send) => send.destTrackId))) + .toEqual([[bus.id], [bus.id]]); + expect(addTrack.mock.calls.filter(([trackId]) => trackId === bus.id)).toHaveLength(2); + + useDAWStore.getState().undo(); + await vi.waitFor(() => expect(removeTrack.mock.calls.filter(([trackId]) => trackId === bus.id)).toHaveLength(2)); + commandManager.clear(); + useDAWStore.setState({ + tracks: [first, second], + selectedTrackId: "second", + selectedTrackIds: ["first", "second"], + canUndo: false, + canRedo: false, + }); + addTrackSend.mockReset().mockResolvedValueOnce(0).mockResolvedValueOnce(-1); + removeTrackSend.mockClear(); + removeTrack.mockClear(); + + await useDAWStore.getState().createBusFromSelectedTracks(); + expect(useDAWStore.getState().tracks.map((track) => track.id)).toEqual(["first", "second"]); + expect(useDAWStore.getState().tracks.every((track) => track.sends.length === 0)).toBe(true); + expect(removeTrackSend).toHaveBeenCalledWith("first", 0); + expect(removeTrack).toHaveBeenCalledTimes(1); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it("clears every eligible selected sampler atomically and rolls a partial native failure back", async () => { + const first = createDefaultTrack("sampler-a", "Sampler A", "#111", "instrument", []); + first.samplerSamplePath = "C:/samples/a.wav"; + first.samplerRootNote = 48; + first.samplerSourceType = "audio"; + const second = createDefaultTrack("sampler-b", "Sampler B", "#222", "instrument", [first]); + second.samplerSamplePath = "C:/samples/b.sf2"; + second.samplerRootNote = 60; + second.samplerSourceType = "soundfont"; + const empty = createDefaultTrack("empty", "Empty", "#333", "instrument", [first, second]); + const clearSample = vi.spyOn(nativeBridge, "clearTrackSamplerSample").mockResolvedValue(true); + const restoreSample = vi.spyOn(nativeBridge, "setTrackSamplerSample").mockResolvedValue(true); + useDAWStore.setState({ + tracks: [first, second, empty], + selectedTrackId: "empty", + selectedTrackIds: ["sampler-a", "sampler-b", "empty"], + }); + + expect(await useDAWStore.getState().clearSelectedTrackSamplerSamples()).toBe(true); + expect(useDAWStore.getState().tracks.map((track) => track.samplerSamplePath)) + .toEqual([undefined, undefined, undefined]); + expect(clearSample.mock.calls.map(([trackId]) => trackId)).toEqual(["sampler-a", "sampler-b"]); + expect(commandManager.getUndoStack()).toHaveLength(1); + + useDAWStore.getState().undo(); + await vi.waitFor(() => expect(useDAWStore.getState().tracks.map((track) => track.samplerSamplePath)) + .toEqual(["C:/samples/a.wav", "C:/samples/b.sf2", undefined])); + expect(restoreSample).toHaveBeenCalledWith("sampler-a", "C:/samples/a.wav", 48); + useDAWStore.getState().redo(); + await vi.waitFor(() => expect(useDAWStore.getState().tracks[0].samplerSamplePath).toBeUndefined()); + + commandManager.clear(); + useDAWStore.setState({ + tracks: [first, second], + selectedTrackId: "sampler-b", + selectedTrackIds: ["sampler-a", "sampler-b"], + canUndo: false, + canRedo: false, + }); + clearSample.mockReset() + .mockResolvedValueOnce(true) + .mockResolvedValueOnce(false); + restoreSample.mockClear(); + expect(await useDAWStore.getState().clearSelectedTrackSamplerSamples()).toBe(false); + expect(useDAWStore.getState().tracks.map((track) => track.samplerSamplePath)) + .toEqual(["C:/samples/a.wav", "C:/samples/b.sf2"]); + expect(restoreSample).toHaveBeenCalledWith("sampler-a", "C:/samples/a.wav", 48); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it("removes plugin and built-in instruments as one reversible selected-track command", async () => { + const plugin = createDefaultTrack("plugin", "Plugin", "#111", "instrument", []); + plugin.instrumentPlugin = "C:/plugins/synth.vst3"; + const builtIn = createDefaultTrack("builtin", "Built-in", "#222", "instrument", [plugin]); + builtIn.builtInInstrument = "piano"; + const plain = createDefaultTrack("plain", "Plain", "#333", "midi", [plugin, builtIn]); + vi.spyOn(nativeBridge, "getInstrumentState").mockResolvedValue("saved-state"); + const removeInstrument = vi.spyOn(nativeBridge, "removeInstrument").mockResolvedValue(true); + const setTrackType = vi.spyOn(nativeBridge, "setTrackType").mockResolvedValue(true); + const loadInstrument = vi.spyOn(nativeBridge, "loadInstrument").mockResolvedValue(true); + const setInstrumentState = vi.spyOn(nativeBridge, "setInstrumentState").mockResolvedValue(true); + const setBuiltIn = vi.spyOn(nativeBridge, "setBuiltInPluginParam").mockResolvedValue(true); + useDAWStore.setState({ + tracks: [plugin, builtIn, plain], + selectedTrackId: "plain", + selectedTrackIds: ["plugin", "builtin", "plain"], + }); + + expect(await useDAWStore.getState().removeSelectedTrackInstruments()).toBe(true); + expect(useDAWStore.getState().tracks.map((track) => [track.type, track.instrumentPlugin, track.builtInInstrument])) + .toEqual([ + ["midi", undefined, undefined], + ["midi", undefined, undefined], + ["midi", undefined, undefined], + ]); + expect(removeInstrument).toHaveBeenCalledWith("plugin"); + expect(setTrackType).toHaveBeenCalledWith("builtin", "midi"); + expect(commandManager.getUndoStack()).toHaveLength(1); + + useDAWStore.getState().undo(); + await vi.waitFor(() => expect(useDAWStore.getState().tracks[0].instrumentPlugin) + .toBe("C:/plugins/synth.vst3")); + expect(useDAWStore.getState().tracks[1].builtInInstrument).toBe("piano"); + expect(loadInstrument).toHaveBeenCalledWith("plugin", "C:/plugins/synth.vst3"); + expect(setInstrumentState).toHaveBeenCalledWith("plugin", "saved-state"); + expect(setBuiltIn).toHaveBeenCalledWith( + { trackId: "builtin", chain: "instrument", fxIndex: -1 }, + "instrumentMode", + 1, + ); + }); + + it("rolls back selected instrument removal after a partial native failure", async () => { + const first = createDefaultTrack("plugin-a", "Plugin A", "#111", "instrument", []); + first.instrumentPlugin = "C:/plugins/a.vst3"; + const second = createDefaultTrack("plugin-b", "Plugin B", "#222", "instrument", [first]); + second.instrumentPlugin = "C:/plugins/b.vst3"; + vi.spyOn(nativeBridge, "getInstrumentState").mockResolvedValue("state"); + vi.spyOn(nativeBridge, "removeInstrument") + .mockResolvedValueOnce(true) + .mockResolvedValueOnce(false); + const loadInstrument = vi.spyOn(nativeBridge, "loadInstrument").mockResolvedValue(true); + vi.spyOn(nativeBridge, "setTrackType").mockResolvedValue(true); + vi.spyOn(nativeBridge, "setInstrumentState").mockResolvedValue(true); + useDAWStore.setState({ + tracks: [first, second], + selectedTrackId: "plugin-b", + selectedTrackIds: ["plugin-a", "plugin-b"], + }); + + expect(await useDAWStore.getState().removeSelectedTrackInstruments()).toBe(false); + expect(useDAWStore.getState().tracks.map((track) => track.instrumentPlugin)) + .toEqual(["C:/plugins/a.vst3", "C:/plugins/b.vst3"]); + expect(loadInstrument).toHaveBeenCalledWith("plugin-a", "C:/plugins/a.vst3"); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it("freezes audio and MIDI selections with one stable command and safe editor cleanup", async () => { + const audio = createDefaultTrack("audio", "Audio", "#111", "audio", []); + audio.clips = [audioClip("pitch-source", { startTime: 1, duration: 2 })]; + audio.trackFxCount = 1; + const midi = createDefaultTrack("midi", "MIDI", "#222", "instrument", [audio]); + midi.midiClips = [midiClip("midi-source", { startTime: 2, duration: 3 })]; + const empty = createDefaultTrack("empty", "Empty", "#333", "audio", [audio, midi]); + const docked = { ...midiSession("midi-source"), sessionId: "docked", mode: "docked" as const }; + const windowed = { ...midiSession("midi-source"), sessionId: "windowed", mode: "windowed" as const }; + vi.spyOn(nativeBridge, "getTrackInputFX").mockResolvedValue([]); + vi.spyOn(nativeBridge, "getTrackFX").mockImplementation(async (trackId) => + trackId === "audio" ? [{ bypassed: false }] : []); + const freezeTrack = vi.spyOn(nativeBridge, "freezeTrack").mockImplementation(async (trackId) => ({ + success: true, + filePath: `C:/freeze/${trackId}.wav`, + startTime: trackId === "audio" ? 1 : 2, + duration: trackId === "audio" ? 2 : 3, + sampleRate: 48000, + })); + const unfreezeTrack = vi.spyOn(nativeBridge, "unfreezeTrack").mockResolvedValue(true); + const bypassTrackFX = vi.spyOn(nativeBridge, "bypassTrackFX").mockResolvedValue(true); + const closeMidiEditorWindow = vi.spyOn(nativeBridge, "closeMidiEditorWindow").mockResolvedValue(true); + const closePitchEditor = vi.fn(() => useDAWStore.setState({ + showPitchEditor: false, + pitchEditorTrackId: null, + pitchEditorClipId: null, + pitchEditorFxIndex: 0, + })); + useDAWStore.setState({ + tracks: [audio, midi, empty], + selectedTrackId: "empty", + selectedTrackIds: ["audio", "midi", "empty"], + midiEditorSessions: [docked, windowed], + activeMidiEditorSessionId: windowed.sessionId, + dockedMidiEditorSessionId: docked.sessionId, + detachedPanels: ["midiEditor"], + showPianoRoll: true, + pianoRollTrackId: "midi", + pianoRollClipId: "midi-source", + showPitchEditor: true, + pitchEditorTrackId: "audio", + pitchEditorClipId: "pitch-source", + closePitchEditor, + }); + + expect(await useDAWStore.getState().toggleSelectedTracksFreeze()).toBe(true); + let state = useDAWStore.getState(); + expect(state.tracks.map((track) => track.frozen)).toEqual([true, true, false]); + expect(state.tracks[0].clips[0]).toMatchObject({ id: "audio_freeze", filePath: "C:/freeze/audio.wav" }); + expect(state.tracks[1].clips[0]).toMatchObject({ id: "midi_freeze", filePath: "C:/freeze/midi.wav" }); + expect(state.tracks[1].midiClips).toEqual([]); + expect(state.tracks[1].frozenOriginalMIDIClips?.map((clip) => clip.id)).toEqual(["midi-source"]); + expect(state.midiEditorSessions).toEqual([]); + expect(closeMidiEditorWindow).toHaveBeenCalledWith("windowed", "sourceFreeze"); + expect(closePitchEditor).toHaveBeenCalledTimes(1); + expect(bypassTrackFX).toHaveBeenCalledWith("audio", 0, true); + expect(commandManager.getUndoStack()).toHaveLength(1); + + state.undo(); + await vi.waitFor(() => expect(useDAWStore.getState().tracks[0].frozen).toBe(false)); + state = useDAWStore.getState(); + expect(state.tracks[0].clips.map((clip) => clip.id)).toEqual(["pitch-source"]); + expect(state.tracks[1].midiClips.map((clip) => clip.id)).toEqual(["midi-source"]); + expect(state.midiEditorSessions.map((session) => session.sessionId)).toEqual(["docked"]); + expect(state.midiEditorSessions.some((session) => session.mode === "windowed")).toBe(false); + expect(state.showPitchEditor).toBe(false); + expect(unfreezeTrack).toHaveBeenCalledWith("audio"); + expect(bypassTrackFX).toHaveBeenCalledWith("audio", 0, false); + + state.redo(); + await vi.waitFor(() => expect( + freezeTrack.mock.calls.filter(([trackId]) => trackId === "audio"), + ).toHaveLength(2)); + expect(useDAWStore.getState().tracks[0].frozen).toBe(true); + expect(useDAWStore.getState().tracks[0].clips[0].id).toBe("audio_freeze"); + }); + + it("captures freeze targets at invocation and leaves an empty selection as a true no-op", async () => { + const first = createDefaultTrack("first", "First", "#111", "audio", []); + first.clips = [audioClip("first-clip")]; + const second = createDefaultTrack("second", "Second", "#222", "audio", [first]); + second.clips = [audioClip("second-clip")]; + let resolveFreeze: ((value: { success: boolean; filePath: string; duration: number; sampleRate: number }) => void) | null = null; + vi.spyOn(nativeBridge, "getTrackInputFX").mockResolvedValue([]); + vi.spyOn(nativeBridge, "getTrackFX").mockResolvedValue([]); + vi.spyOn(nativeBridge, "freezeTrack").mockImplementation(() => new Promise((resolve) => { + resolveFreeze = resolve; + })); + vi.spyOn(nativeBridge, "unfreezeTrack").mockResolvedValue(true); + useDAWStore.setState({ + tracks: [first, second], + selectedTrackId: "first", + selectedTrackIds: ["first"], + }); + + const pending = useDAWStore.getState().toggleSelectedTracksFreeze(); + await vi.waitFor(() => expect(resolveFreeze).not.toBeNull()); + useDAWStore.setState({ selectedTrackId: "second", selectedTrackIds: ["second"] }); + resolveFreeze!({ success: true, filePath: "C:/freeze/first.wav", duration: 1, sampleRate: 48000 }); + expect(await pending).toBe(true); + expect(useDAWStore.getState().tracks.map((track) => track.frozen)).toEqual([true, false]); + expect(useDAWStore.getState().selectedTrackIds).toEqual(["second"]); + + commandManager.clear(); + useDAWStore.setState({ + tracks: [createDefaultTrack("empty", "Empty", "#333", "audio", [])], + selectedTrackId: "empty", + selectedTrackIds: ["empty"], + canUndo: false, + canRedo: false, + }); + expect(await useDAWStore.getState().toggleSelectedTracksFreeze()).toBe(false); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it("keeps project state/history unchanged when a multi-track freeze render partially fails", async () => { + const first = createDefaultTrack("first", "First", "#111", "audio", []); + first.clips = [audioClip("first-clip")]; + const second = createDefaultTrack("second", "Second", "#222", "midi", [first]); + second.midiClips = [midiClip("second-clip")]; + vi.spyOn(nativeBridge, "getTrackInputFX").mockResolvedValue([]); + vi.spyOn(nativeBridge, "getTrackFX").mockResolvedValue([]); + vi.spyOn(nativeBridge, "freezeTrack") + .mockResolvedValueOnce({ success: true, filePath: "C:/freeze/first.wav", duration: 1, sampleRate: 48000 }) + .mockResolvedValueOnce({ success: false, error: "render failed" }); + useDAWStore.setState({ + tracks: [first, second], + selectedTrackId: "second", + selectedTrackIds: ["first", "second"], + }); + + expect(await useDAWStore.getState().toggleSelectedTracksFreeze()).toBe(false); + expect(useDAWStore.getState().tracks.map((track) => track.frozen)).toEqual([false, false]); + expect(useDAWStore.getState().tracks[0].clips.map((clip) => clip.id)).toEqual(["first-clip"]); + expect(useDAWStore.getState().tracks[1].midiClips.map((clip) => clip.id)).toEqual(["second-clip"]); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); +}); + +describe("atomic multi-item catalog actions", () => { + it("repeats and recolors mixed selected clips as one undo gesture", () => { + const audio = createDefaultTrack("audio", "Audio", "#111", "audio", []); + audio.clips = [audioClip("audio-source")]; + const midi = createDefaultTrack("midi", "MIDI", "#222", "midi", []); + midi.midiClips = [midiClip("midi-source")]; + useDAWStore.setState({ + tracks: [audio, midi], + selectedClipId: "midi-source", + selectedClipIds: ["audio-source", "midi-source"], + }); + vi.stubGlobal("prompt", vi.fn(() => "2")); + + getRegisteredAction("clip.repeatSelected")!.execute(); + expect(useDAWStore.getState().tracks[0].clips).toHaveLength(3); + expect(useDAWStore.getState().tracks[1].midiClips).toHaveLength(3); + expect(commandManager.getUndoStack()).toHaveLength(1); + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks[0].clips).toHaveLength(1); + expect(useDAWStore.getState().tracks[1].midiClips).toHaveLength(1); + expect(useDAWStore.getState().selectedClipIds).toEqual(["audio-source", "midi-source"]); + + commandManager.clear(); + useDAWStore.setState({ canUndo: false, canRedo: false }); + vi.stubGlobal("prompt", vi.fn(() => "#abcdef")); + getRegisteredAction("clip.setSelectedColor")!.execute(); + expect(useDAWStore.getState().tracks[0].clips[0].color).toBe("#abcdef"); + expect(useDAWStore.getState().tracks[1].midiClips[0].color).toBe("#abcdef"); + expect(commandManager.getUndoStack()).toHaveLength(1); + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks[0].clips[0].color).toBe("#224466"); + expect(useDAWStore.getState().tracks[1].midiClips[0].color).toBe("#664422"); + }); + + it("batches MIDI source-window and selected-note transforms across clips", () => { + const midi = createDefaultTrack("midi", "MIDI", "#222", "midi", []); + const noteEvents = (note: number) => [ + { timestamp: 0, type: "noteOn" as const, note, velocity: 100 }, + { timestamp: 0.5, type: "noteOff" as const, note, velocity: 0 }, + ]; + midi.midiClips = [ + midiClip("first-midi", { offset: 0.25, loopOffset: 0.25, events: noteEvents(60) }), + midiClip("second-midi", { offset: 0.5, loopOffset: 0.5, events: noteEvents(64) }), + ]; + useDAWStore.setState({ + tracks: [midi], + selectedClipId: "second-midi", + selectedClipIds: ["first-midi", "second-midi"], + }); + + getRegisteredAction("clip.resetSelectedMidiSourceOffset")!.execute(); + expect(useDAWStore.getState().tracks[0].midiClips.map((clip) => clip.offset)).toEqual([0, 0]); + expect(commandManager.getUndoStack()).toHaveLength(1); + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks[0].midiClips.map((clip) => clip.offset)).toEqual([0.25, 0.5]); + + commandManager.clear(); + useDAWStore.setState({ canUndo: false, canRedo: false }); + getRegisteredAction("clip.transposeSelectedMidiUp")!.execute(); + expect(useDAWStore.getState().tracks[0].midiClips.map((clip) => clip.events[0].note)) + .toEqual([61, 65]); + expect(commandManager.getUndoStack()).toHaveLength(1); + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks[0].midiClips.map((clip) => clip.events[0].note)) + .toEqual([60, 64]); + }); +}); diff --git a/frontend/src/__tests__/audioBufferOptions.test.ts b/frontend/src/__tests__/audioBufferOptions.test.ts new file mode 100644 index 0000000..8aa9392 --- /dev/null +++ b/frontend/src/__tests__/audioBufferOptions.test.ts @@ -0,0 +1,46 @@ +import { describe, expect, it } from "vitest"; +import { + resolveAudioBufferSizeOptions, + resolveAudioBufferSizeRequest, +} from "../utils/audioBufferOptions"; + +describe("audio-buffer options", () => { + it("keeps every driver-reported size, including 8 samples", () => { + expect(resolveAudioBufferSizeOptions([ + 8, + 16, + 32, + 64, + 128, + 256, + 512, + ])).toEqual([8, 16, 32, 64, 128, 256, 512]); + }); + + it("normalizes duplicate and invalid capability values only", () => { + expect(resolveAudioBufferSizeOptions([ + 256, + 8, + 64, + 8, + 0, + Number.NaN, + ])).toEqual([8, 64, 256]); + }); + + it("includes the active size when the driver capability list omits it", () => { + expect(resolveAudioBufferSizeOptions([64, 128, 256], 32)) + .toEqual([32, 64, 128, 256]); + }); + + it("preserves a supported low-latency user choice without coercion", () => { + expect(resolveAudioBufferSizeRequest(8, [8, 16, 32, 64])) + .toBe(8); + }); + + it("uses a fallback only when the requested and reported data are absent", () => { + expect(resolveAudioBufferSizeOptions([])).toEqual([512]); + expect(resolveAudioBufferSizeRequest(undefined, [64, 128])) + .toBe(64); + }); +}); diff --git a/frontend/src/__tests__/audioDeadlineStatus.test.ts b/frontend/src/__tests__/audioDeadlineStatus.test.ts new file mode 100644 index 0000000..ceb590c --- /dev/null +++ b/frontend/src/__tests__/audioDeadlineStatus.test.ts @@ -0,0 +1,88 @@ +import { describe, expect, it } from "vitest"; +import { resolveAudioDeadlineStatus } from "../utils/audioDeadlineStatus"; + +const base = { + blockSize: 480, + sampleRate: 48000, + lastCallbackCounter: 1000, + lastAudioCallbackDeadlineMissWhileRecording: false, +}; + +describe("audio deadline warning state", () => { + it("stays quiet without deadline misses", () => { + expect(resolveAudioDeadlineStatus(base)).toMatchObject({ + recent: false, + recording: false, + shouldWarn: false, + }); + }); + + it("keeps one recent idle miss in diagnostics without raising the banner", () => { + expect(resolveAudioDeadlineStatus({ + ...base, + audioCallbackDeadlineMissCount: 1, + audioCallbackDeadlineMissBurstCount: 1, + lastAudioCallbackDeadlineMissCounter: 999, + lastAudioCallbackDeadlineMissProcessMs: 10.4, + })).toMatchObject({ + recent: true, + burstMissCount: 1, + lastMissProcessMs: 10.4, + shouldWarn: false, + }); + }); + + it("warns for a recent repeated idle burst", () => { + expect(resolveAudioDeadlineStatus({ + ...base, + audioCallbackDeadlineMissCount: 3, + audioCallbackDeadlineMissBurstCount: 3, + lastAudioCallbackDeadlineMissCounter: 995, + })).toMatchObject({ + recent: true, + burstMissCount: 3, + shouldWarn: true, + }); + }); + + it("warns after one recent miss while actively recording", () => { + expect(resolveAudioDeadlineStatus({ + ...base, + lastAudioCallbackDeadlineMissWhileRecording: true, + audioCallbackDeadlineMissCount: 1, + audioCallbackDeadlineMissBurstCount: 1, + lastAudioCallbackDeadlineMissCounter: 999, + })).toMatchObject({ + recent: true, + recording: true, + shouldWarn: true, + }); + }); + + it("automatically clears an old burst while retaining its session count", () => { + const status = resolveAudioDeadlineStatus({ + ...base, + lastCallbackCounter: 2000, + audioCallbackDeadlineMissCount: 4, + audioCallbackDeadlineMissBurstCount: 4, + lastAudioCallbackDeadlineMissCounter: 1, + }); + + expect(status.deviceSessionMissCount).toBe(4); + expect(status.recent).toBe(false); + expect(status.shouldWarn).toBe(false); + }); + + it("fails quiet for incomplete or reset telemetry", () => { + expect(resolveAudioDeadlineStatus({ + ...base, + audioCallbackDeadlineMissCount: 2, + audioCallbackDeadlineMissBurstCount: 2, + lastAudioCallbackDeadlineMissCounter: 1001, + }).shouldWarn).toBe(false); + expect(resolveAudioDeadlineStatus({ + audioCallbackDeadlineMissCount: 2, + audioCallbackDeadlineMissBurstCount: 2, + }).shouldWarn).toBe(false); + }); +}); diff --git a/frontend/src/__tests__/automationActionRegistryRouting.test.ts b/frontend/src/__tests__/automationActionRegistryRouting.test.ts new file mode 100644 index 0000000..3d0ad4d --- /dev/null +++ b/frontend/src/__tests__/automationActionRegistryRouting.test.ts @@ -0,0 +1,466 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { nativeBridge } from "../services/NativeBridge"; +import { + getActionShortcutScopes, + getRegisteredAction, + isRemoteAutomationActionId, + routeAutomationAction, +} from "../store/actionRegistry"; +import { executeDetachedMainActionRequest } from "../utils/detachedMainActionRouting"; +import { commandManager } from "../store/commands"; +import { + createDefaultTrack, + type AutomationLane, + type Track, + useDAWStore, +} from "../store/useDAWStore"; + +const originalState = useDAWStore.getState(); + +const stableAutomationActionIds = [ + "automation.toggleArrangementView", + "automation.writeBehavior.touch", + "automation.writeBehavior.latch", + "automation.writeBehavior.overwrite", + ...(["off", "read", "write", "touch", "latch"] as const).flatMap((mode) => [ + `automation.selectedTracks.mode.${mode}`, + `automation.master.mode.${mode}`, + `automation.selectedLane.mode.${mode}`, + ]), + "automation.selectedTracks.toggleOffRead", + "automation.selectedTracks.toggleLatchRead", + "automation.allTracks.mode.off", + "automation.allTracks.mode.read", + "automation.allTracks.mode.touch", + "automation.allTracks.mode.latch", + "automation.allTracks.writeOff", + "automation.allTracks.toggleRead", + ...(["show", "hide", "readOn", "readOff", "writeOn", "writeOff"] as const).flatMap((operation) => [ + `automation.selectedTracks.${operation}`, + `automation.master.${operation}`, + `automation.selectedLane.${operation}`, + ]), + "automation.point.selectNext", + "automation.point.selectPrevious", + "automation.point.deleteSelected", + "automation.point.nudgeTimeLeft", + "automation.point.nudgeTimeRight", + "automation.point.nudgeValueUp", + "automation.point.nudgeValueDown", + "automation.point.addAtPlayhead", + "automation.selectedLane.clear", + "automation.suspend", + "automation.resume", +] as const; + +function volumeLane(): AutomationLane { + return { + id: "volume-lane", + param: "volume", + points: [{ id: "point-a", time: 1, value: 0.5 }], + visible: true, + mode: "read", + armed: false, + readEnabled: true, + }; +} + +function automationTrack(id: string): Track { + return { + ...createDefaultTrack(id, id, "#14b8a6", "audio", []), + automationReadEnabled: true, + automationWriteEnabled: false, + automationEnabled: true, + automationLanes: [volumeLane()], + }; +} + +beforeEach(() => { + commandManager.clear(); + useDAWStore.setState({ + ...originalState, + tracks: [automationTrack("track-a"), automationTrack("track-b")], + selectedTrackId: "track-a", + selectedTrackIds: ["track-a", "track-b"], + selectedClipId: null, + selectedClipIds: [], + timeSelection: null, + selectedAutomationTarget: { + kind: "track", + trackId: "track-a", + laneId: "volume-lane", + pointId: "point-a", + }, + canUndo: false, + canRedo: false, + }); +}); + +afterEach(() => { + vi.restoreAllMocks(); + commandManager.clear(); + useDAWStore.setState(originalState); +}); + +describe("automation action registry", () => { + it("registers every stable action ID but forwards only authoritatively targetable automation", () => { + for (const actionId of stableAutomationActionIds) { + expect(getRegisteredAction(actionId), actionId).toBeDefined(); + const targetNeedsExactLaneOrPoint = actionId.startsWith("automation.selectedLane.") + || actionId.startsWith("automation.point."); + expect(isRemoteAutomationActionId(actionId), actionId).toBe(!targetNeedsExactLaneOrPoint); + } + + expect(isRemoteAutomationActionId("edit.delete")).toBe(false); + expect(isRemoteAutomationActionId("automation.not-a-real-action")).toBe(false); + }); + + it("keeps adjacent-lane selection local to the focused automation window", () => { + for (const actionId of [ + "automation.lane.selectPrevious", + "automation.lane.selectNext", + ]) { + const action = getRegisteredAction(actionId); + expect(action).toMatchObject({ shortcutScope: "automation" }); + expect(action?.shortcut).toBeUndefined(); + expect(isRemoteAutomationActionId(actionId)).toBe(false); + } + + const selectAdjacentAutomationLane = vi.fn(); + useDAWStore.setState({ selectAdjacentAutomationLane }); + getRegisteredAction("automation.lane.selectPrevious")?.execute(); + getRegisteredAction("automation.lane.selectNext")?.execute(); + expect(selectAdjacentAutomationLane.mock.calls).toEqual([["previous"], ["next"]]); + }); + + it("lets adjacent-lane actions recover a stale selection instead of consuming a no-op", () => { + useDAWStore.setState({ + selectedAutomationTarget: { + kind: "track", + trackId: "missing-track", + laneId: "missing-lane", + pointId: null, + }, + }); + const nextLane = getRegisteredAction("automation.lane.selectNext")!; + expect(nextLane.canHandleShortcut?.()).toBe(true); + + nextLane.execute(); + + expect(useDAWStore.getState().selectedAutomationTarget).toEqual({ + kind: "track", + trackId: "track-a", + laneId: "volume-lane", + pointId: null, + }); + }); + + it("keeps arrangement A surface-scoped and declares the point-editing defaults", () => { + const arrangement = getRegisteredAction("automation.toggleArrangementView")!; + expect(arrangement).toMatchObject({ shortcut: "A", shortcutScope: "timeline" }); + expect(getActionShortcutScopes(arrangement)).toEqual(["timeline", "automation"]); + expect(getActionShortcutScopes(arrangement)).not.toContain("global"); + + expect(getRegisteredAction("automation.point.selectNext")).toMatchObject({ shortcut: "Tab", shortcutScope: "automation" }); + expect(getRegisteredAction("automation.point.selectPrevious")).toMatchObject({ shortcut: "Shift+Tab", shortcutScope: "automation" }); + expect(getRegisteredAction("automation.point.deleteSelected")).toMatchObject({ + shortcut: "Delete", + shortcutAliases: ["Backspace"], + shortcutScope: "automation", + }); + expect(getRegisteredAction("automation.point.nudgeTimeLeft")?.shortcut).toBe("Left"); + expect(getRegisteredAction("automation.point.nudgeTimeRight")?.shortcut).toBe("Right"); + expect(getRegisteredAction("automation.point.nudgeValueUp")?.shortcut).toBe("Up"); + expect(getRegisteredAction("automation.point.nudgeValueDown")?.shortcut).toBe("Down"); + expect(getRegisteredAction("automation.point.addAtPlayhead")?.shortcut).toBe("Ctrl+Enter"); + expect(getRegisteredAction("automation.selectedLane.clear")?.shortcut).toBe("Ctrl+Delete"); + }); + + it("routes selected-track modes through one atomic store command", () => { + getRegisteredAction("automation.selectedTracks.mode.write")?.execute(); + + const state = useDAWStore.getState(); + expect(state.tracks.map((track) => track.automationWriteEnabled)).toEqual([true, true]); + expect(state.tracks.flatMap((track) => track.automationLanes.map((lane) => lane.mode))) + .toEqual(["write", "write"]); + expect(commandManager.getUndoStack()).toHaveLength(1); + + state.undo(); + expect(useDAWStore.getState().tracks.map((track) => track.automationWriteEnabled)) + .toEqual([false, false]); + }); + + it("routes Logic/Cakewalk selected and all-track actions through one batch API call", () => { + const toggleTracksAutomationModes = vi.fn(); + const setTracksAutomationMode = vi.fn(); + const setTracksAutomationWrite = vi.fn(); + const toggleTracksAutomationRead = vi.fn(); + useDAWStore.setState({ + toggleTracksAutomationModes, + setTracksAutomationMode, + setTracksAutomationWrite, + toggleTracksAutomationRead, + }); + + getRegisteredAction("automation.selectedTracks.toggleOffRead")?.execute(); + getRegisteredAction("automation.selectedTracks.toggleLatchRead")?.execute(); + for (const mode of ["off", "read", "touch", "latch"] as const) { + getRegisteredAction(`automation.allTracks.mode.${mode}`)?.execute(); + } + getRegisteredAction("automation.allTracks.writeOff")?.execute(); + getRegisteredAction("automation.allTracks.toggleRead")?.execute(); + + expect(toggleTracksAutomationModes.mock.calls).toEqual([ + [["track-a", "track-b"], "off", "read"], + [["track-a", "track-b"], "latch", "read"], + ]); + expect(setTracksAutomationMode.mock.calls).toEqual([ + [["track-a", "track-b"], "off"], + [["track-a", "track-b"], "read"], + [["track-a", "track-b"], "touch"], + [["track-a", "track-b"], "latch"], + ]); + expect(setTracksAutomationWrite).toHaveBeenCalledOnce(); + expect(setTracksAutomationWrite).toHaveBeenCalledWith(["track-a", "track-b"], false); + expect(toggleTracksAutomationRead).toHaveBeenCalledOnce(); + expect(toggleTracksAutomationRead).toHaveBeenCalledWith(["track-a", "track-b"]); + }); + + it("keeps repeated all-track mode and one-way write commands no-op safe", () => { + getRegisteredAction("automation.allTracks.mode.touch")?.execute(); + expect(useDAWStore.getState().tracks.map((track) => track.automationWriteEnabled)) + .toEqual([true, true]); + expect(commandManager.getUndoStack()).toHaveLength(1); + + getRegisteredAction("automation.allTracks.mode.touch")?.execute(); + expect(commandManager.getUndoStack()).toHaveLength(1); + + commandManager.clear(); + getRegisteredAction("automation.allTracks.writeOff")?.execute(); + expect(useDAWStore.getState().tracks.map((track) => track.automationWriteEnabled)) + .toEqual([false, false]); + expect(commandManager.getUndoStack()).toHaveLength(1); + + getRegisteredAction("automation.allTracks.writeOff")?.execute(); + expect(commandManager.getUndoStack()).toHaveLength(1); + }); + + it("commits each selected-track two-mode toggle as one undo command", () => { + getRegisteredAction("automation.selectedTracks.toggleOffRead")?.execute(); + expect(useDAWStore.getState().tracks.flatMap((track) => track.automationLanes.map((lane) => lane.mode))) + .toEqual(["off", "off"]); + expect(commandManager.getUndoStack()).toHaveLength(1); + + getRegisteredAction("automation.selectedTracks.toggleOffRead")?.execute(); + expect(useDAWStore.getState().tracks.flatMap((track) => track.automationLanes.map((lane) => lane.mode))) + .toEqual(["read", "read"]); + expect(commandManager.getUndoStack()).toHaveLength(2); + + commandManager.clear(); + getRegisteredAction("automation.selectedTracks.toggleLatchRead")?.execute(); + expect(useDAWStore.getState().tracks.flatMap((track) => track.automationLanes.map((lane) => lane.mode))) + .toEqual(["latch", "latch"]); + expect(commandManager.getUndoStack()).toHaveLength(1); + }); + + it("shows and hides every selected track with one idempotent history entry", () => { + getRegisteredAction("automation.selectedTracks.show")?.execute(); + expect(useDAWStore.getState().tracks.map((track) => track.showAutomation)) + .toEqual([true, true]); + expect(commandManager.getUndoStack()).toHaveLength(1); + + getRegisteredAction("automation.selectedTracks.show")?.execute(); + expect(commandManager.getUndoStack()).toHaveLength(1); + + getRegisteredAction("automation.selectedTracks.hide")?.execute(); + expect(useDAWStore.getState().tracks.map((track) => track.showAutomation)) + .toEqual([false, false]); + expect(commandManager.getUndoStack()).toHaveLength(2); + + getRegisteredAction("automation.selectedTracks.hide")?.execute(); + expect(commandManager.getUndoStack()).toHaveLength(2); + }); + + it("keeps master one-way show/hide/read/write actions idempotent", () => { + useDAWStore.setState({ + showMasterAutomation: false, + masterAutomationLanes: [{ ...volumeLane(), visible: false }], + masterAutomationReadEnabled: true, + masterAutomationWriteEnabled: false, + masterAutomationEnabled: true, + }); + + getRegisteredAction("automation.master.show")?.execute(); + expect(useDAWStore.getState().showMasterAutomation).toBe(true); + expect(commandManager.getUndoStack()).toHaveLength(1); + getRegisteredAction("automation.master.show")?.execute(); + expect(commandManager.getUndoStack()).toHaveLength(1); + + getRegisteredAction("automation.master.hide")?.execute(); + expect(useDAWStore.getState().showMasterAutomation).toBe(false); + expect(commandManager.getUndoStack()).toHaveLength(2); + getRegisteredAction("automation.master.hide")?.execute(); + expect(commandManager.getUndoStack()).toHaveLength(2); + + commandManager.clear(); + getRegisteredAction("automation.master.readOn")?.execute(); + expect(commandManager.getUndoStack()).toHaveLength(0); + getRegisteredAction("automation.master.readOff")?.execute(); + expect(useDAWStore.getState().masterAutomationReadEnabled).toBe(false); + expect(commandManager.getUndoStack()).toHaveLength(1); + getRegisteredAction("automation.master.readOff")?.execute(); + expect(commandManager.getUndoStack()).toHaveLength(1); + + commandManager.clear(); + getRegisteredAction("automation.master.writeOff")?.execute(); + expect(commandManager.getUndoStack()).toHaveLength(0); + getRegisteredAction("automation.master.writeOn")?.execute(); + expect(useDAWStore.getState().masterAutomationWriteEnabled).toBe(true); + expect(commandManager.getUndoStack()).toHaveLength(1); + getRegisteredAction("automation.master.writeOn")?.execute(); + expect(commandManager.getUndoStack()).toHaveLength(1); + }); + + it("does not claim point-edit shortcuts for a stale or locked selection", () => { + const remove = getRegisteredAction("automation.point.deleteSelected")!; + expect(remove.canHandleShortcut?.()).toBe(true); + + useDAWStore.setState((state) => ({ + lockSettings: { ...state.lockSettings, envelopes: true }, + })); + expect(remove.canHandleShortcut?.()).toBe(false); + + useDAWStore.setState((state) => ({ + lockSettings: { ...state.lockSettings, envelopes: false }, + selectedAutomationTarget: null, + })); + expect(remove.canHandleShortcut?.()).toBe(false); + }); + + it.each(["global", "envelope"] as const)( + "does not claim automation mode/read/write commands under %s lock", + (lockKind) => { + useDAWStore.setState((state) => ({ + globalLocked: lockKind === "global", + lockSettings: { + ...state.lockSettings, + envelopes: lockKind === "envelope", + }, + })); + + const nonMutatingStableIds = new Set([ + "automation.toggleArrangementView", + "automation.point.selectNext", + "automation.point.selectPrevious", + ]); + for (const actionId of [ + ...stableAutomationActionIds.filter((id) => !nonMutatingStableIds.has(id)), + "track.toggleSelectedAutomationRead", + "track.toggleSelectedAutomationWrite", + "track.toggleSelectedAutomation", + "automation.showAllSelectedTrackEnvelopes", + "automation.hideAllSelectedTrackEnvelopes", + "mixer.toggleMasterAutomationRead", + "mixer.toggleMasterAutomationWrite", + "mixer.toggleMasterAutomationLanes", + ]) { + expect(getRegisteredAction(actionId)?.canHandleShortcut?.(), actionId).toBe(false); + } + + expect(getRegisteredAction("automation.toggleArrangementView")?.canHandleShortcut?.()).toBe(true); + expect(getRegisteredAction("automation.point.selectNext")?.canHandleShortcut?.()).toBe(true); + expect(getRegisteredAction("automation.point.selectPrevious")?.canHandleShortcut?.()).toBe(true); + }, + ); +}); + +describe("detached automation action routing", () => { + it("publishes the exact selected tracks and defers project mutation to the main realm", async () => { + const publish = vi.spyOn(nativeBridge, "publishAppCommand").mockResolvedValue(true); + const detachedMutation = vi.fn(); + + routeAutomationAction( + "automation.selectedTracks.mode.write", + detachedMutation, + "mixer", + ); + + expect(detachedMutation).not.toHaveBeenCalled(); + expect(publish).toHaveBeenCalledTimes(1); + expect(publish).toHaveBeenCalledWith({ + command: "action.execute", + actionId: "automation.selectedTracks.mode.write", + selectedTrackIds: ["track-a", "track-b"], + selectedClipIds: [], + timeSelection: null, + }); + + const payload = publish.mock.calls[0][0] as { actionId: string }; + expect(isRemoteAutomationActionId(payload.actionId)).toBe(true); + expect(executeDetachedMainActionRequest(payload, getRegisteredAction, { role: "main" })).toBe(true); + + expect(commandManager.getUndoStack()).toHaveLength(1); + expect(useDAWStore.getState().tracks.map((track) => track.automationWriteEnabled)) + .toEqual([true, true]); + await Promise.resolve(); + }); + + it("allowlists a QA all-track mutation and executes it once in the main realm", () => { + const publish = vi.spyOn(nativeBridge, "publishAppCommand").mockResolvedValue(true); + + routeAutomationAction("automation.allTracks.mode.latch", () => { + throw new Error("detached realm must not mutate project state"); + }, "mixer"); + + expect(publish).toHaveBeenCalledOnce(); + const payload = publish.mock.calls[0][0] as { actionId: string }; + expect(payload.actionId).toBe("automation.allTracks.mode.latch"); + expect(executeDetachedMainActionRequest(payload, getRegisteredAction, { role: "main" })).toBe(true); + expect(commandManager.getUndoStack()).toHaveLength(1); + expect(useDAWStore.getState().tracks.flatMap((track) => track.automationLanes.map((lane) => lane.mode))) + .toEqual(["latch", "latch"]); + }); + + it("does not forward or execute IDs outside the explicit allowlist", () => { + const publish = vi.spyOn(nativeBridge, "publishAppCommand").mockResolvedValue(true); + const localMutation = vi.fn(); + + routeAutomationAction("edit.delete", localMutation, "mixer"); + + expect(publish).not.toHaveBeenCalled(); + expect(localMutation).not.toHaveBeenCalled(); + }); + + it("executes an allowlisted action locally exactly once in the main role", () => { + const publish = vi.spyOn(nativeBridge, "publishAppCommand").mockResolvedValue(true); + const mainMutation = vi.fn(); + + routeAutomationAction( + "automation.selectedTracks.mode.write", + mainMutation, + "main", + ); + + expect(mainMutation).toHaveBeenCalledTimes(1); + expect(publish).not.toHaveBeenCalled(); + }); + + it("behaviorally rejects an invalid receiver ID without mutation", () => { + const beforeTracks = useDAWStore.getState().tracks; + + expect(executeDetachedMainActionRequest({ + command: "action.execute", + actionId: "edit.delete", + selectedTrackIds: [], + selectedClipIds: [], + timeSelection: null, + }, getRegisteredAction, { role: "main" })).toBe(false); + expect(executeDetachedMainActionRequest({ + command: "action.execute", + actionId: "automation.not-a-real-action", + selectedTrackIds: [], + }, getRegisteredAction, { role: "main" })).toBe(false); + expect(useDAWStore.getState().tracks).toBe(beforeTracks); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); +}); diff --git a/frontend/src/__tests__/automationAudioMidiNamTrackFX.test.ts b/frontend/src/__tests__/automationAudioMidiNamTrackFX.test.ts new file mode 100644 index 0000000..0469fc2 --- /dev/null +++ b/frontend/src/__tests__/automationAudioMidiNamTrackFX.test.ts @@ -0,0 +1,270 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import fxChainPanelSource from "../components/FXChainPanel.tsx?raw"; +import { nativeBridge } from "../services/NativeBridge"; +import { commandManager } from "../store/commands"; +import { + createDefaultTrack, + type AutomationLane, + type Track, + useDAWStore, +} from "../store/useDAWStore"; +import { + removeTrackFXAutomationLanes, + reorderTrackFXAutomationLanes, +} from "../store/actions/automation"; + +const initialState = useDAWStore.getState(); + +function makeTrack(id: string, type: "audio" | "midi", lanes: AutomationLane[] = []): Track { + return { + ...createDefaultTrack(id, id, "#4488cc", type, []), + automationLanes: lanes, + }; +} + +function lane(id: string, param: string, value = 0.5): AutomationLane { + return { + id, + param, + points: [{ id: `${id}-point`, time: 1, value }], + visible: true, + mode: "read", + armed: false, + readEnabled: true, + }; +} + +function resetStore(tracks: Track[]) { + commandManager.clear(); + useDAWStore.setState({ + tracks, + selectedTrackId: tracks[0]?.id ?? null, + selectedTrackIds: tracks[0] ? [tracks[0].id] : [], + globalLocked: false, + lockSettings: { ...useDAWStore.getState().lockSettings, envelopes: false }, + canUndo: false, + canRedo: false, + isModified: false, + }); +} + +beforeEach(() => { + vi.spyOn(nativeBridge, "setAutomationPoints").mockResolvedValue(true); + vi.spyOn(nativeBridge, "setAutomationMode").mockResolvedValue(true); +}); + +afterEach(() => { + vi.restoreAllMocks(); + commandManager.clear(); + useDAWStore.setState(initialState); +}); + +describe("audio and MIDI track automation flows", () => { + it.each([ + ["audio", "volume", 0.75, 1, -6], + ["midi", "midi_velocity_scale", 0.75, 1, 1.5], + ["midi", "midi_pitch_bend", 0.75, 1, 0.5], + ["midi", "midi_channel_pressure", 0.75, 1, 95.25], + ["midi", "midi_cc_74", 0.75, 1, 95.25], + ] as const)( + "creates, edits, syncs and undoes a %s %s lane", + (trackType, param, value, time, expectedBackendValue) => { + const track = makeTrack(`track-${trackType}-${param}`, trackType); + resetStore([track]); + + const laneId = useDAWStore.getState().addAutomationLane(track.id, param); + expect(laneId).toBeTruthy(); + useDAWStore.getState().addAutomationPoint(track.id, laneId!, time, value); + + const updatedLane = useDAWStore.getState().tracks[0].automationLanes[0]; + expect(updatedLane).toMatchObject({ param, mode: "read", readEnabled: true }); + expect(updatedLane.points).toHaveLength(1); + expect(nativeBridge.setAutomationPoints).toHaveBeenLastCalledWith( + track.id, + param, + [{ time, value: expectedBackendValue }], + ); + expect(nativeBridge.setAutomationMode).toHaveBeenLastCalledWith(track.id, param, "read"); + + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks[0].automationLanes[0].points).toEqual([]); + useDAWStore.getState().redo(); + expect(useDAWStore.getState().tracks[0].automationLanes[0].points) + .toMatchObject([{ time, value }]); + }, + ); + + it("records one MIDI CC write pass and restores it with one undo", () => { + const midiTrack = makeTrack("midi-write", "midi", [ + lane("cc74", "midi_cc_74", 0.2), + ]); + midiTrack.automationReadEnabled = true; + midiTrack.automationWriteEnabled = true; + midiTrack.automationLanes[0].mode = "touch"; + midiTrack.automationLanes[0].armed = true; + resetStore([midiTrack]); + useDAWStore.setState({ + transport: { ...useDAWStore.getState().transport, isPlaying: true, currentTime: 2 }, + }); + + useDAWStore.getState().beginAutomationParamTouch(midiTrack.id, "midi_cc_74"); + useDAWStore.getState().setAutomationWriteValue(midiTrack.id, "midi_cc_74", 0.8); + useDAWStore.getState().recordAutomationWriteTick(Date.now() + 1000); + useDAWStore.getState().endAutomationParamTouch(midiTrack.id, "midi_cc_74"); + useDAWStore.getState().endAutomationWriteSession(); + + const written = useDAWStore.getState().tracks[0].automationLanes[0].points; + expect(written.some((point) => point.time === 2 && point.value === 0.8)).toBe(true); + expect(commandManager.getUndoStack()).toHaveLength(1); + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks[0].automationLanes[0].points) + .toEqual(midiTrack.automationLanes[0].points); + }); + + it.each(["audio", "midi"] as const)("blocks direct %s automation edits under both automation locks", (type) => { + const track = makeTrack(`locked-${type}`, type, [lane("locked", type === "midi" ? "midi_cc_1" : "volume")]); + resetStore([track]); + + for (const lockedState of [ + { globalLocked: true, envelopes: false }, + { globalLocked: false, envelopes: true }, + ]) { + commandManager.clear(); + useDAWStore.setState({ + globalLocked: lockedState.globalLocked, + lockSettings: { ...useDAWStore.getState().lockSettings, envelopes: lockedState.envelopes }, + }); + useDAWStore.getState().addAutomationPoint(track.id, "locked", 4, 0.9); + useDAWStore.getState().setTrackAutomationMode(track.id, "write"); + expect(useDAWStore.getState().tracks[0].automationLanes[0].points).toEqual(track.automationLanes[0].points); + expect(commandManager.getUndoStack()).toHaveLength(0); + } + }); +}); + +describe("NAM Rack automation in a track FX chain", () => { + it("routes add and reorder UI operations through undo-aware store actions", () => { + expect(fxChainPanelSource).toContain("addTrackBuiltInFXWithUndo("); + expect(fxChainPanelSource).toContain("reorderTrackFXWithUndo("); + expect(fxChainPanelSource).not.toContain("success = await nativeBridge.addTrackBuiltInFX("); + expect(fxChainPanelSource).not.toContain("success = await nativeBridge.reorderTrackFX("); + }); + + it("remaps built-in and hosted automation identities without changing lane or point identity", () => { + const lanes = [ + lane("nam", "builtin_track_0_ampGainDb", 0.75), + lane("hosted", "plugin_track_1_17", 0.25), + lane("input", "builtin_input_0_mix", 0.5), + lane("volume", "volume", 0.5), + ]; + const reordered = reorderTrackFXAutomationLanes(lanes, "track", 0, 1); + expect(reordered.map((entry) => entry.param)).toEqual([ + "builtin_track_1_ampGainDb", + "plugin_track_0_17", + "builtin_input_0_mix", + "volume", + ]); + expect(reordered[0].id).toBe("nam"); + expect(reordered[0].points[0].id).toBe("nam-point"); + + const removed = removeTrackFXAutomationLanes(reordered, "track", 1); + expect(removed.map((entry) => entry.param)).toEqual([ + "plugin_track_0_17", + "builtin_input_0_mix", + "volume", + ]); + }); + + it("adds, automates, reorders, removes and restores the exact NAM Rack instance", async () => { + let slots: Array> = []; + vi.spyOn(nativeBridge, "getTrackFX").mockImplementation(async () => slots.map((slot) => ({ ...slot }))); + vi.spyOn(nativeBridge, "getTrackInputFX").mockResolvedValue([]); + vi.spyOn(nativeBridge, "addTrackBuiltInFX").mockImplementation(async (_trackId, name) => { + slots.push({ index: slots.length, name, pluginPath: name, type: "builtin", bypassed: false, precisionOverride: "auto" }); + return true; + }); + vi.spyOn(nativeBridge, "removeTrackFX").mockImplementation(async (_trackId, index) => { + if (!slots[index]) return false; + slots.splice(index, 1); + slots = slots.map((slot, slotIndex) => ({ ...slot, index: slotIndex })); + return true; + }); + vi.spyOn(nativeBridge, "reorderTrackFX").mockImplementation(async (_trackId, from, to) => { + if (!slots[from] || !slots[to]) return false; + const [moved] = slots.splice(from, 1); + slots.splice(to, 0, moved); + slots = slots.map((slot, slotIndex) => ({ ...slot, index: slotIndex })); + return true; + }); + vi.spyOn(nativeBridge, "getPluginState").mockResolvedValue("NAM-STATE"); + vi.spyOn(nativeBridge, "setPluginState").mockResolvedValue(true); + vi.spyOn(nativeBridge, "bypassTrackFX").mockResolvedValue(true); + vi.spyOn(nativeBridge, "setTrackPluginPrecisionOverride").mockResolvedValue(true); + + const track = makeTrack("nam-track", "audio"); + resetStore([track]); + expect(await useDAWStore.getState().addTrackBuiltInFXWithUndo( + track.id, + "OpenStudio NAM Rack", + "track", + )).toBe(true); + expect(slots.map((slot) => slot.name)).toEqual(["OpenStudio NAM Rack"]); + expect(commandManager.getUndoStack()).toHaveLength(1); + + const namLaneId = useDAWStore.getState().addAutomationLane( + track.id, + "builtin_track_0_ampGainDb", + "Amp Gain", + ); + expect(namLaneId).toBeTruthy(); + useDAWStore.getState().addAutomationPoint(track.id, namLaneId!, 1, 0.75); + expect(nativeBridge.setAutomationPoints).toHaveBeenLastCalledWith( + track.id, + "builtin_track_0_ampGainDb", + [{ time: 1, value: 0.75 }], + ); + const originalLane = structuredClone( + useDAWStore.getState().tracks[0].automationLanes[0], + ); + slots.push({ index: 1, name: "OpenStudio Delay", pluginPath: "OpenStudio Delay", type: "builtin", bypassed: false, precisionOverride: "auto" }); + commandManager.clear(); + + expect(await useDAWStore.getState().reorderTrackFXWithUndo(track.id, 0, 1, "track")).toBe(true); + expect(slots.map((slot) => slot.name)).toEqual(["OpenStudio Delay", "OpenStudio NAM Rack"]); + expect(useDAWStore.getState().tracks[0].automationLanes[0]).toMatchObject({ + id: namLaneId, + param: "builtin_track_1_ampGainDb", + }); + expect(commandManager.getUndoStack()).toHaveLength(1); + + useDAWStore.getState().undo(); + await vi.waitFor(() => { + expect(slots.map((slot) => slot.name)).toEqual(["OpenStudio NAM Rack", "OpenStudio Delay"]); + expect(useDAWStore.getState().tracks[0].automationLanes[0].param).toBe("builtin_track_0_ampGainDb"); + }); + useDAWStore.getState().redo(); + await vi.waitFor(() => { + expect(slots.map((slot) => slot.name)).toEqual(["OpenStudio Delay", "OpenStudio NAM Rack"]); + expect(useDAWStore.getState().tracks[0].automationLanes[0].param).toBe("builtin_track_1_ampGainDb"); + }); + + commandManager.clear(); + const reorderedLane = structuredClone( + useDAWStore.getState().tracks[0].automationLanes[0], + ); + expect(await useDAWStore.getState().removeTrackFXWithUndo(track.id, 1, "track")).toBe(true); + expect(slots.map((slot) => slot.name)).toEqual(["OpenStudio Delay"]); + expect(useDAWStore.getState().tracks[0].automationLanes).toEqual([]); + expect(commandManager.getUndoStack()).toHaveLength(1); + + useDAWStore.getState().undo(); + await vi.waitFor(() => expect(slots.map((slot) => slot.name)).toEqual(["OpenStudio Delay", "OpenStudio NAM Rack"])); + expect(useDAWStore.getState().tracks[0].automationLanes[0]).toMatchObject({ + id: namLaneId, + param: "builtin_track_1_ampGainDb", + }); + expect(useDAWStore.getState().tracks[0].automationLanes[0]).toEqual(reorderedLane); + expect(originalLane).toMatchObject({ id: namLaneId, param: "builtin_track_0_ampGainDb" }); + expect(nativeBridge.setPluginState).toHaveBeenCalledWith(track.id, 1, false, "NAM-STATE"); + }); +}); diff --git a/frontend/src/__tests__/automationCubaseReadWrite.test.ts b/frontend/src/__tests__/automationCubaseReadWrite.test.ts index bb9ca26..65d0841 100644 --- a/frontend/src/__tests__/automationCubaseReadWrite.test.ts +++ b/frontend/src/__tests__/automationCubaseReadWrite.test.ts @@ -32,6 +32,15 @@ function volumeLane(overrides: Partial = {}): AutomationLane { }; } +function expectStablePointValues( + points: AutomationLane["points"] | undefined, + expected: Array<{ time: number; value: number }>, +) { + expect(points?.map(({ time, value }) => ({ time, value }))).toEqual(expected); + expect(points?.every((point) => typeof point.id === "string" && point.id.length > 0)).toBe(true); + expect(new Set(points?.map((point) => point.id)).size).toBe(expected.length); +} + function loadTrack(track: Track, isPlaying = false, currentTime = 1) { useDAWStore.setState({ tracks: [track], @@ -172,7 +181,7 @@ describe("Cubase-style automation read/write state", () => { expect(updated.automationLanes).toHaveLength(1); expect(updated.automationLanes[0].readEnabled).toBe(true); expect(updated.automationLanes[0].mode).toBe("off"); - expect(updated.automationLanes[0].points).toEqual([{ time: 2, value: 0.75 }]); + expectStablePointValues(updated.automationLanes[0].points, [{ time: 2, value: 0.75 }]); }); it("write enabled with no touched parameter writes no points", () => { @@ -253,7 +262,7 @@ describe("Cubase-style automation read/write state", () => { expect(updated.showAutomation).toBe(true); expect(lane?.visible).toBe(true); expect(lane?.readEnabled).toBe(true); - expect(lane?.points).toEqual([{ time: 3, value: 0.75 }]); + expectStablePointValues(lane?.points, [{ time: 3, value: 0.75 }]); }); it("continuous touch writing simplifies simple ramps into sparse points", () => { @@ -281,7 +290,8 @@ describe("Cubase-style automation read/write state", () => { const points = useDAWStore.getState().tracks[0].automationLanes[0].points; expect(points.length).toBeLessThanOrEqual(6); - expect(points[0]).toEqual({ time: 0, value: 0 }); + expect(points[0]).toMatchObject({ time: 0, value: 0 }); + expect(points.every((point) => typeof point.id === "string" && point.id.length > 0)).toBe(true); expect(points[points.length - 1].time).toBeCloseTo(2); expect(points[points.length - 1].value).toBeCloseTo(1); }); @@ -322,7 +332,7 @@ describe("Cubase-style automation read/write state", () => { let updated = useDAWStore.getState().tracks[0]; expect(updated.automationReadEnabled).toBe(true); expect(updated.automationLanes[0].readEnabled).toBe(true); - expect(updated.automationLanes[0].points).toEqual([{ time: 1.25, value: 0.5 }]); + expectStablePointValues(updated.automationLanes[0].points, [{ time: 1.25, value: 0.5 }]); useDAWStore.getState().undo(); @@ -354,7 +364,7 @@ describe("Cubase-style automation read/write state", () => { const updated = useDAWStore.getState().tracks[0]; expect(updated.automationWriteEnabled).toBe(true); - expect(updated.automationLanes[0].points).toEqual([{ time: 1.25, value: 0.5 }]); + expectStablePointValues(updated.automationLanes[0].points, [{ time: 1.25, value: 0.5 }]); expect(_automationTouchedParams.has(key)).toBe(false); expect(_automationLatchedParams.has(key)).toBe(false); expect(_automationWriteValues.has(key)).toBe(false); @@ -385,7 +395,7 @@ describe("Cubase-style automation read/write state", () => { let updated = useDAWStore.getState().tracks[0]; expect(updated.automationWriteEnabled).toBe(true); expect(updated.automationLanes[0].readEnabled).toBe(true); - expect(updated.automationLanes[0].points).toEqual([ + expectStablePointValues(updated.automationLanes[0].points, [ { time: 1, value: 0.25 }, { time: 1.5, value: 0.75 }, ]); @@ -410,7 +420,7 @@ describe("Cubase-style automation read/write state", () => { const updated = useDAWStore.getState().tracks[0]; const muteLane = updated.automationLanes.find((lane) => lane.param === "mute"); expect(updated.muted).toBe(true); - expect(muteLane?.points).toEqual([{ time: 5, value: 1 }]); + expectStablePointValues(muteLane?.points, [{ time: 5, value: 1 }]); }); it("toggle mute does not create write data while stopped", async () => { @@ -476,7 +486,7 @@ describe("Cubase-style automation read/write state", () => { useDAWStore.getState().endAutomationParamTouch("master", "pan"); const lane = useDAWStore.getState().masterAutomationLanes.find((candidate) => candidate.param === "pan"); - expect(lane?.points).toEqual([{ time: 7, value: 0.625 }]); + expectStablePointValues(lane?.points, [{ time: 7, value: 0.625 }]); }); it("master write while stopped does not create automation lanes", async () => { @@ -526,6 +536,6 @@ describe("Cubase-style automation read/write state", () => { expect(state.masterAutomationReadEnabled).toBe(false); expect(state.masterAutomationWriteEnabled).toBe(true); expect(lane?.mode).toBe("off"); - expect(lane?.points).toEqual([{ time: 9, value: 60 / 72 }]); + expectStablePointValues(lane?.points, [{ time: 9, value: 60 / 72 }]); }); }); diff --git a/frontend/src/__tests__/automationInteractionCommands.test.ts b/frontend/src/__tests__/automationInteractionCommands.test.ts new file mode 100644 index 0000000..380c153 --- /dev/null +++ b/frontend/src/__tests__/automationInteractionCommands.test.ts @@ -0,0 +1,673 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { nativeBridge } from "../services/NativeBridge"; +import { getRegisteredAction } from "../store/actionRegistry"; +import { commandManager } from "../store/commands"; +import { + _autoRecordTimers, + _automationLatchedParams, + _automationTouchedParams, + _automationWriteValues, +} from "../store/actions/storeHelpers"; +import { + createDefaultTrack, + type AutomationLane, + type AutomationPoint, + type AutomationSelectionTarget, + type Track, + useDAWStore, +} from "../store/useDAWStore"; + +const originalState = useDAWStore.getState(); + +function point(id: string, time: number, value: number): AutomationPoint { + return { id, time, value }; +} + +function lane( + id: string, + param: string, + points: AutomationPoint[] = [], + overrides: Partial = {}, +): AutomationLane { + return { + id, + param, + points, + visible: true, + mode: "read", + armed: false, + readEnabled: true, + ...overrides, + }; +} + +function track( + id: string, + automationLanes: AutomationLane[], + overrides: Partial = {}, +): Track { + return { + ...createDefaultTrack(id, id, "#14b8a6", "audio", []), + automationLanes, + showAutomation: true, + automationReadEnabled: true, + automationWriteEnabled: false, + automationEnabled: true, + suspendedAutomationState: null, + ...overrides, + }; +} + +function trackLane(trackId = "track-a", laneId = "track-volume") { + return useDAWStore.getState().tracks + .find((candidate) => candidate.id === trackId) + ?.automationLanes.find((candidate) => candidate.id === laneId); +} + +function resetAutomationRuntime() { + useDAWStore.getState().cancelAutomationPointEdit?.(); + useDAWStore.getState().endAutomationWriteSession?.(); + _automationTouchedParams.clear(); + _automationLatchedParams.clear(); + _automationWriteValues.clear(); + _autoRecordTimers.clear(); + commandManager.clear(); +} + +beforeEach(() => { + resetAutomationRuntime(); + vi.spyOn(nativeBridge, "setAutomationPoints").mockResolvedValue(true); + vi.spyOn(nativeBridge, "setAutomationMode").mockResolvedValue(true); + vi.spyOn(nativeBridge, "clearAutomation").mockResolvedValue(true); + vi.spyOn(nativeBridge, "replaceAutomationPointsInRange").mockResolvedValue(true); + useDAWStore.setState({ + tracks: [], + selectedTrackId: null, + selectedTrackIds: [], + selectedAutomationTarget: null, + masterAutomationLanes: [], + showMasterAutomation: false, + masterAutomationReadEnabled: false, + masterAutomationWriteEnabled: false, + masterAutomationEnabled: false, + suspendedMasterAutomationState: null, + automationWriteBehavior: "touch", + globalLocked: false, + lockSettings: { + ...useDAWStore.getState().lockSettings, + envelopes: false, + }, + transport: { + ...useDAWStore.getState().transport, + isPlaying: false, + currentTime: 0, + }, + canUndo: false, + canRedo: false, + isModified: false, + }); +}); + +afterEach(() => { + resetAutomationRuntime(); + vi.restoreAllMocks(); + useDAWStore.setState(originalState); +}); + +describe("automation point identity and edit transactions", () => { + it("keeps the selected point ID when it crosses neighbours and commits one undo command", () => { + const originalPoints = [ + point("moving", 1, 0.1), + point("middle", 2, 0.2), + point("last", 3, 0.3), + ]; + useDAWStore.setState({ + tracks: [track("track-a", [lane("track-volume", "volume", originalPoints)])], + }); + const target: AutomationSelectionTarget = { + kind: "track", + trackId: "track-a", + laneId: "track-volume", + pointId: "moving", + }; + + expect(useDAWStore.getState().beginAutomationPointEdit(target)).toBe(true); + expect(useDAWStore.getState().previewAutomationPointEdit(4, 0.9)).toBe(true); + expect(commandManager.getUndoStack()).toHaveLength(0); + expect(useDAWStore.getState().commitAutomationPointEdit()).toBe(true); + + expect(trackLane()?.points).toEqual([ + point("middle", 2, 0.2), + point("last", 3, 0.3), + point("moving", 4, 0.9), + ]); + expect(useDAWStore.getState().selectedAutomationTarget).toEqual(target); + expect(commandManager.getUndoStack()).toHaveLength(1); + + useDAWStore.getState().undo(); + expect(trackLane()?.points).toEqual(originalPoints); + expect(useDAWStore.getState().selectedAutomationTarget).toEqual(target); + + useDAWStore.getState().redo(); + expect(trackLane()?.points.map((candidate) => candidate.id)).toEqual([ + "middle", + "last", + "moving", + ]); + }); + + it("restores the exact preview snapshot on cancel without creating history", () => { + const originalPoints = [point("first", 1, 0.2), point("second", 2, 0.8)]; + useDAWStore.setState({ + tracks: [track("track-a", [lane("track-volume", "volume", originalPoints)])], + isModified: false, + }); + const target: AutomationSelectionTarget = { + kind: "track", + trackId: "track-a", + laneId: "track-volume", + pointId: "second", + }; + + expect(useDAWStore.getState().beginAutomationPointEdit(target)).toBe(true); + expect(useDAWStore.getState().previewAutomationPointEdit(0.25, 0.1)).toBe(true); + expect(trackLane()?.points).not.toEqual(originalPoints); + expect(useDAWStore.getState().cancelAutomationPointEdit()).toBe(true); + + expect(trackLane()?.points).toEqual(originalPoints); + expect(useDAWStore.getState().isModified).toBe(false); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it("uses the same one-command stable-ID transaction for master points", () => { + const originalPoints = [point("master-first", 1, 0.25), point("master-moving", 2, 0.75)]; + useDAWStore.setState({ + masterAutomationLanes: [lane("master-volume", "volume", originalPoints)], + }); + const target: AutomationSelectionTarget = { + kind: "master", + laneId: "master-volume", + pointId: "master-moving", + }; + + expect(useDAWStore.getState().beginAutomationPointEdit(target)).toBe(true); + expect(useDAWStore.getState().previewAutomationPointEdit(0.5, 0.6)).toBe(true); + expect(useDAWStore.getState().commitAutomationPointEdit()).toBe(true); + + expect(useDAWStore.getState().masterAutomationLanes[0].points).toEqual([ + point("master-moving", 0.5, 0.6), + point("master-first", 1, 0.25), + ]); + expect(commandManager.getUndoStack()).toHaveLength(1); + useDAWStore.getState().undo(); + expect(useDAWStore.getState().masterAutomationLanes[0].points).toEqual(originalPoints); + }); +}); + +describe("automation envelope locking", () => { + it("blocks track and master point mutations while envelopes are locked", () => { + const trackPoints = [point("track-point", 1, 0.25)]; + const masterPoints = [point("master-point", 2, 0.75)]; + useDAWStore.setState({ + tracks: [track("track-a", [lane("track-volume", "volume", trackPoints)])], + masterAutomationLanes: [lane("master-volume", "volume", masterPoints)], + selectedAutomationTarget: { + kind: "track", + trackId: "track-a", + laneId: "track-volume", + pointId: "track-point", + }, + lockSettings: { ...useDAWStore.getState().lockSettings, envelopes: true }, + }); + + useDAWStore.getState().addAutomationPoint("track-a", "track-volume", 3, 0.5); + useDAWStore.getState().removeAutomationPoint("track-a", "track-volume", 0); + useDAWStore.getState().moveAutomationPoint("track-a", "track-volume", 0, 4, 1); + useDAWStore.getState().clearAutomationLane("track-a", "track-volume"); + useDAWStore.getState().deleteSelectedAutomationPoint(); + useDAWStore.getState().addMasterAutomationPoint("master-volume", 3, 0.5); + useDAWStore.getState().removeMasterAutomationPoint("master-volume", 0); + useDAWStore.getState().moveMasterAutomationPoint("master-volume", 0, 4, 0); + useDAWStore.getState().clearMasterAutomationLane("master-volume"); + + expect(useDAWStore.getState().beginAutomationPointEdit({ + kind: "master", + laneId: "master-volume", + pointId: "master-point", + })).toBe(false); + expect(trackLane()?.points).toEqual(trackPoints); + expect(useDAWStore.getState().masterAutomationLanes[0].points).toEqual(masterPoints); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it("allows existing point commands to undo after the envelope lock is enabled", () => { + useDAWStore.setState({ + tracks: [track("track-a", [lane("track-volume", "volume", [point("track-point", 1, 0.25)])])], + masterAutomationLanes: [lane("master-volume", "volume", [point("master-point", 2, 0.75)])], + }); + + useDAWStore.getState().moveAutomationPoint("track-a", "track-volume", 0, 3, 0.5); + useDAWStore.getState().moveMasterAutomationPoint("master-volume", 0, 4, 0.25); + expect(commandManager.getUndoStack()).toHaveLength(2); + + useDAWStore.setState({ + lockSettings: { ...useDAWStore.getState().lockSettings, envelopes: true }, + }); + useDAWStore.getState().undo(); + useDAWStore.getState().undo(); + + expect(trackLane()?.points).toEqual([point("track-point", 1, 0.25)]); + expect(useDAWStore.getState().masterAutomationLanes[0].points).toEqual([ + point("master-point", 2, 0.75), + ]); + }); + + it("treats Global Lock as an umbrella for track/master point, draw, copy, write, and suspend paths", () => { + const trackPoints = [point("track-point", 1, 0.25)]; + const masterPoints = [point("master-point", 2, 0.75)]; + useDAWStore.setState({ + tracks: [track("track-a", [lane("track-volume", "volume", trackPoints)], { + automationWriteEnabled: true, + })], + masterAutomationLanes: [lane("master-volume", "volume", masterPoints)], + masterAutomationReadEnabled: true, + masterAutomationWriteEnabled: true, + masterAutomationEnabled: true, + selectedAutomationTarget: { + kind: "track", + trackId: "track-a", + laneId: "track-volume", + pointId: "track-point", + }, + globalLocked: true, + transport: { + ...useDAWStore.getState().transport, + isPlaying: true, + currentTime: 3, + }, + }); + + useDAWStore.getState().addAutomationPoint("track-a", "track-volume", 3, 0.5); + useDAWStore.getState().removeAutomationPoint("track-a", "track-volume", 0); + useDAWStore.getState().moveAutomationPoint("track-a", "track-volume", 0, 4, 1); + useDAWStore.getState().setAutomationLanePoints("track-a", "track-volume", []); + useDAWStore.getState().deleteSelectedAutomationPoint(); + useDAWStore.getState().addAutomationPointAtPlayhead(); + expect(useDAWStore.getState().beginAutomationPointEdit({ + kind: "track", + trackId: "track-a", + laneId: "track-volume", + pointId: "track-point", + })).toBe(false); + expect(useDAWStore.getState().beginAutomationPointCopyEdit({ + kind: "track", + trackId: "track-a", + laneId: "track-volume", + pointId: "track-point", + })).toBe(false); + + useDAWStore.getState().addMasterAutomationPoint("master-volume", 3, 0.5); + useDAWStore.getState().removeMasterAutomationPoint("master-volume", 0); + useDAWStore.getState().moveMasterAutomationPoint("master-volume", 0, 4, 0); + useDAWStore.getState().clearMasterAutomationLane("master-volume"); + expect(useDAWStore.getState().addAutomationLane("track-a", "pan")).toBeNull(); + expect(useDAWStore.getState().addMasterAutomationLane("pan")).toBeNull(); + + useDAWStore.getState().beginAutomationParamTouch("track-a", "volume"); + useDAWStore.getState().setAutomationWriteValue("track-a", "volume", 0.9); + useDAWStore.getState().recordAutomationWriteTick(1_000); + useDAWStore.getState().suspendAutomation(); + + expect(getRegisteredAction("automation.point.deleteSelected")!.canHandleShortcut?.()).toBe(false); + expect(getRegisteredAction("automation.selectedLane.clear")!.canHandleShortcut?.()).toBe(false); + expect(getRegisteredAction("automation.suspend")!.canHandleShortcut?.()).toBe(false); + + expect(trackLane()?.points).toEqual(trackPoints); + expect(useDAWStore.getState().masterAutomationLanes[0].points).toEqual(masterPoints); + expect(useDAWStore.getState().tracks[0].automationLanes).toHaveLength(1); + expect(useDAWStore.getState().masterAutomationLanes).toHaveLength(1); + expect(useDAWStore.getState().tracks[0].suspendedAutomationState).toBeNull(); + expect(useDAWStore.getState().suspendedMasterAutomationState).toBeNull(); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it.each([ + ["Global Lock", { globalLocked: true }], + ["Envelope Lock", { lockSettings: { envelopes: true } }], + ] as const)("blocks every track/master automation mode mutation under %s", (_label, lock) => { + const trackLanes = [ + lane("track-volume", "volume", [point("track-point", 1, 0.25)], { armed: true }), + lane("track-pan", "pan", [], { armed: false }), + ]; + const masterLanes = [ + lane("master-volume", "volume", [point("master-point", 2, 0.75)], { armed: true }), + lane("master-pan", "pan", [], { armed: false }), + ]; + useDAWStore.setState((state) => ({ + tracks: [track("track-a", trackLanes)], + selectedTrackId: "track-a", + selectedTrackIds: ["track-a"], + selectedAutomationTarget: { + kind: "track", + trackId: "track-a", + laneId: "track-volume", + pointId: "track-point", + }, + masterAutomationLanes: masterLanes, + masterAutomationReadEnabled: true, + masterAutomationWriteEnabled: false, + masterAutomationEnabled: true, + globalLocked: "globalLocked" in lock ? lock.globalLocked : false, + lockSettings: { + ...state.lockSettings, + envelopes: "lockSettings" in lock ? lock.lockSettings.envelopes : false, + }, + })); + + const automationSnapshot = () => { + const state = useDAWStore.getState(); + return JSON.stringify({ + automationWriteBehavior: state.automationWriteBehavior, + tracks: state.tracks, + masterAutomationLanes: state.masterAutomationLanes, + showMasterAutomation: state.showMasterAutomation, + masterAutomationReadEnabled: state.masterAutomationReadEnabled, + masterAutomationWriteEnabled: state.masterAutomationWriteEnabled, + masterAutomationEnabled: state.masterAutomationEnabled, + }); + }; + const before = automationSnapshot(); + const state = useDAWStore.getState(); + + state.setAutomationWriteBehavior("latch"); + state.setTrackAutomationRead("track-a", false); + state.toggleTrackAutomationRead("track-a"); + state.setTrackAutomationWrite("track-a", true); + state.toggleTrackAutomationWrite("track-a"); + state.setAutomationLaneRead("track-a", "track-volume", false); + state.setAutomationLaneMode("track-a", "track-volume", "write"); + state.toggleTrackAutomation("track-a"); + state.toggleAutomationLaneVisibility("track-a", "track-volume"); + state.setSelectedAutomationLaneVisibility(false); + state.setTrackAutomationMode("track-a", "write"); + state.armAutomationLane("track-a", "track-volume", false); + state.armAllVisibleAutomationLanes("track-a"); + state.disarmAllAutomationLanes("track-a"); + state.setTracksAutomationRead(["track-a"], false); + state.toggleTracksAutomationRead(["track-a"]); + state.setTracksAutomationWrite(["track-a"], true); + state.toggleTracksAutomationWrite(["track-a"]); + state.setTracksAutomationMode(["track-a"], "latch"); + state.setTracksAutomationVisibility(["track-a"], false); + state.setMasterAutomationRead(false); + state.toggleMasterAutomationRead(); + state.setMasterAutomationWrite(true); + state.toggleMasterAutomationWrite(); + state.setMasterAutomationLaneRead("master-volume", false); + state.setMasterAutomationLaneMode("master-volume", "write"); + state.armMasterAutomationLane("master-volume", false); + state.toggleMasterAutomation(); + state.toggleMasterAutomationLaneVisibility("master-volume"); + state.setMasterTrackAutomationMode("latch"); + state.armAllVisibleMasterAutomationLanes(); + state.disarmAllMasterAutomationLanes(); + + expect(automationSnapshot()).toBe(before); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it("keeps only non-project arrangement and selection navigation available while locked", () => { + useDAWStore.setState((state) => ({ + tracks: [track("track-a", [lane("track-volume", "volume")], { showAutomation: true })], + selectedTrackId: "track-a", + selectedTrackIds: ["track-a"], + selectedAutomationTarget: { + kind: "track", + trackId: "track-a", + laneId: "track-volume", + pointId: null, + }, + lockSettings: { ...state.lockSettings, envelopes: true }, + })); + + expect(getRegisteredAction("automation.selectedTracks.show")?.canHandleShortcut?.()).toBe(false); + expect(getRegisteredAction("automation.selectedLane.show")?.canHandleShortcut?.()).toBe(false); + expect(getRegisteredAction("automation.toggleArrangementView")?.canHandleShortcut?.()).toBe(true); + expect(getRegisteredAction("automation.lane.selectNext")?.canHandleShortcut?.()).toBe(true); + + getRegisteredAction("automation.toggleArrangementView")?.execute(); + expect(useDAWStore.getState().tracks[0].showAutomation).toBe(false); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); +}); + +describe("automation project commands", () => { + it("clears a newly-added track lane from the backend when lane creation is undone", () => { + useDAWStore.setState({ tracks: [track("track-a", [], { + showAutomation: false, + automationReadEnabled: false, + automationEnabled: false, + })] }); + const clearSpy = vi.mocked(nativeBridge.clearAutomation); + + const laneId = useDAWStore.getState().addAutomationLane("track-a", "volume"); + expect(laneId).toBeTypeOf("string"); + expect(commandManager.getUndoStack()).toHaveLength(1); + useDAWStore.getState().undo(); + + expect(trackLane("track-a", laneId as string)).toBeUndefined(); + expect(clearSpy).toHaveBeenCalledWith("track-a", "volume"); + }); + + it("clears a newly-added master lane from the backend when lane creation is undone", () => { + const clearSpy = vi.mocked(nativeBridge.clearAutomation); + + const laneId = useDAWStore.getState().addMasterAutomationLane("pan"); + expect(laneId).toBe("master-pan"); + expect(commandManager.getUndoStack()).toHaveLength(1); + useDAWStore.getState().undo(); + + expect(useDAWStore.getState().masterAutomationLanes).toHaveLength(0); + expect(clearSpy).toHaveBeenCalledWith("master", "pan"); + }); + + it("applies selected-track mode and visibility changes atomically and skips no-ops", () => { + const tracks = ["track-a", "track-b"].map((trackId) => track( + trackId, + [lane(`${trackId}-volume`, "volume", [point(`${trackId}-point`, 1, 0.5)], { + visible: false, + })], + { showAutomation: false }, + )); + useDAWStore.setState({ tracks }); + + useDAWStore.getState().setTracksAutomationMode(["track-a", "track-b"], "write"); + useDAWStore.getState().setTracksAutomationMode(["track-a", "track-b"], "write"); + expect(commandManager.getUndoStack()).toHaveLength(1); + expect(useDAWStore.getState().tracks.every((candidate) => ( + candidate.automationReadEnabled + && candidate.automationWriteEnabled + && candidate.automationLanes[0].mode === "write" + && candidate.automationLanes[0].armed + ))).toBe(true); + + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks.every((candidate) => ( + candidate.automationLanes[0].mode === "read" && !candidate.automationWriteEnabled + ))).toBe(true); + + commandManager.clear(); + useDAWStore.setState({ canUndo: false, canRedo: false }); + useDAWStore.getState().setTracksAutomationVisibility(["track-a", "track-b"], true); + useDAWStore.getState().setTracksAutomationVisibility(["track-a", "track-b"], true); + expect(commandManager.getUndoStack()).toHaveLength(1); + expect(useDAWStore.getState().tracks.every((candidate) => ( + candidate.showAutomation && candidate.automationLanes[0].visible + ))).toBe(true); + + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks.every((candidate) => ( + !candidate.showAutomation && !candidate.automationLanes[0].visible + ))).toBe(true); + }); + + it("toggles arrangement automation as view state without changing lane visibility or history", () => { + useDAWStore.setState({ + tracks: [track("track-a", [lane("track-volume", "volume", [], { visible: false })])], + showMasterAutomation: false, + masterAutomationLanes: [lane("master-pan", "pan", [], { visible: true })], + }); + + useDAWStore.getState().toggleArrangementAutomationView(); + expect(useDAWStore.getState().tracks[0].showAutomation).toBe(false); + expect(useDAWStore.getState().showMasterAutomation).toBe(false); + expect(trackLane()?.visible).toBe(false); + expect(useDAWStore.getState().masterAutomationLanes[0].visible).toBe(true); + expect(commandManager.getUndoStack()).toHaveLength(0); + + useDAWStore.getState().toggleArrangementAutomationView(); + expect(useDAWStore.getState().tracks[0].showAutomation).toBe(true); + expect(useDAWStore.getState().showMasterAutomation).toBe(true); + expect(trackLane()?.visible).toBe(false); + expect(useDAWStore.getState().masterAutomationLanes[0].visible).toBe(true); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it("suspends and resumes track and master automation without duplicate history", () => { + useDAWStore.setState({ + tracks: [track("track-a", [lane("track-volume", "volume", [point("track-point", 1, 0.4)], { + mode: "touch", + armed: true, + })], { automationWriteEnabled: true })], + showMasterAutomation: true, + masterAutomationReadEnabled: true, + masterAutomationWriteEnabled: true, + masterAutomationEnabled: true, + masterAutomationLanes: [lane("master-pan", "pan", [point("master-point", 1, 0.6)], { + mode: "latch", + armed: true, + })], + }); + + useDAWStore.getState().suspendAutomation(); + useDAWStore.getState().suspendAutomation(); + expect(commandManager.getUndoStack()).toHaveLength(1); + expect(trackLane()?.mode).toBe("off"); + expect(trackLane()?.readEnabled).toBe(false); + expect(useDAWStore.getState()).toMatchObject({ + masterAutomationReadEnabled: false, + masterAutomationWriteEnabled: false, + masterAutomationEnabled: false, + }); + expect(useDAWStore.getState().tracks[0].suspendedAutomationState).not.toBeNull(); + expect(useDAWStore.getState().suspendedMasterAutomationState).not.toBeNull(); + + useDAWStore.getState().resumeAutomation(); + useDAWStore.getState().resumeAutomation(); + expect(commandManager.getUndoStack()).toHaveLength(2); + expect(trackLane()).toMatchObject({ mode: "touch", readEnabled: true, armed: true }); + expect(useDAWStore.getState().masterAutomationLanes[0]).toMatchObject({ + mode: "latch", + readEnabled: true, + armed: true, + }); + expect(useDAWStore.getState().tracks[0].suspendedAutomationState).toBeNull(); + expect(useDAWStore.getState().suspendedMasterAutomationState).toBeNull(); + + useDAWStore.getState().undo(); + expect(trackLane()?.mode).toBe("off"); + useDAWStore.getState().undo(); + expect(trackLane()).toMatchObject({ mode: "touch", readEnabled: true, armed: true }); + }); +}); + +describe("automation selection and recorded passes", () => { + it("cycles lanes and point IDs, wraps lanes, and clears stale targets safely", () => { + useDAWStore.setState({ + tracks: [track("track-a", [ + lane("lane-a", "volume", [point("a1", 1, 0.1), point("a2", 2, 0.2)]), + lane("lane-b", "pan", [point("b1", 1, 0.3)]), + ])], + }); + useDAWStore.getState().setSelectedAutomationLane({ + kind: "track", + trackId: "track-a", + laneId: "lane-a", + }); + + useDAWStore.getState().selectAdjacentAutomationPoint("next"); + expect(useDAWStore.getState().selectedAutomationTarget?.pointId).toBe("a1"); + useDAWStore.getState().selectAdjacentAutomationPoint("next"); + expect(useDAWStore.getState().selectedAutomationTarget?.pointId).toBe("a2"); + useDAWStore.getState().selectAdjacentAutomationLane("next"); + expect(useDAWStore.getState().selectedAutomationTarget).toMatchObject({ + laneId: "lane-b", + pointId: null, + }); + useDAWStore.getState().selectAdjacentAutomationLane("next"); + expect(useDAWStore.getState().selectedAutomationTarget?.laneId).toBe("lane-a"); + useDAWStore.getState().selectAdjacentAutomationLane("previous"); + expect(useDAWStore.getState().selectedAutomationTarget?.laneId).toBe("lane-b"); + + useDAWStore.setState({ + selectedAutomationTarget: { + kind: "track", + trackId: "missing", + laneId: "missing", + pointId: "missing", + }, + }); + useDAWStore.getState().selectAdjacentAutomationPoint("next"); + expect(useDAWStore.getState().selectedAutomationTarget).toBeNull(); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it("records track and master write data as one undoable pass", () => { + const beforeTrack = [point("track-before", 0, 0.2)]; + const beforeMaster = [point("master-before", 0, 0.4)]; + useDAWStore.setState({ + tracks: [track("track-a", [lane("track-volume", "volume", beforeTrack, { + mode: "touch", + })], { automationWriteEnabled: true })], + masterAutomationReadEnabled: true, + masterAutomationWriteEnabled: true, + masterAutomationEnabled: true, + masterAutomationLanes: [lane("master-pan", "pan", beforeMaster, { mode: "touch" })], + transport: { + ...useDAWStore.getState().transport, + isPlaying: true, + currentTime: 2, + }, + }); + + useDAWStore.getState().beginAutomationParamTouch("track-a", "volume"); + useDAWStore.getState().beginAutomationParamTouch("master", "pan"); + useDAWStore.getState().setAutomationWriteValue("track-a", "volume", 0.7); + useDAWStore.getState().setAutomationWriteValue("master", "pan", 0.8); + useDAWStore.getState().recordAutomationWriteTick(1_000); + expect(commandManager.getUndoStack()).toHaveLength(0); + useDAWStore.getState().endAutomationWriteSession(); + + expect(commandManager.getUndoStack()).toHaveLength(1); + expect(commandManager.getUndoStack()[0]?.type).toBe("RECORD_AUTOMATION_WRITE_PASS"); + expect(trackLane()?.points.map(({ time, value }) => ({ time, value }))).toEqual([ + { time: 0, value: 0.2 }, + { time: 2, value: 0.7 }, + ]); + expect(useDAWStore.getState().masterAutomationLanes[0].points + .map(({ time, value }) => ({ time, value }))).toEqual([ + { time: 0, value: 0.4 }, + { time: 2, value: 0.8 }, + ]); + + useDAWStore.getState().undo(); + expect(trackLane()?.points).toEqual(beforeTrack); + expect(useDAWStore.getState().masterAutomationLanes[0].points).toEqual(beforeMaster); + useDAWStore.getState().redo(); + const redoneTrackPoints = trackLane()?.points ?? []; + const redoneMasterPoints = useDAWStore.getState().masterAutomationLanes[0].points; + expect(redoneTrackPoints[redoneTrackPoints.length - 1]).toMatchObject({ time: 2, value: 0.7 }); + expect(redoneMasterPoints[redoneMasterPoints.length - 1]) + .toMatchObject({ time: 2, value: 0.8 }); + }); +}); diff --git a/frontend/src/__tests__/automationLaneHeightIntegration.test.tsx b/frontend/src/__tests__/automationLaneHeightIntegration.test.tsx new file mode 100644 index 0000000..8361342 --- /dev/null +++ b/frontend/src/__tests__/automationLaneHeightIntegration.test.tsx @@ -0,0 +1,47 @@ +import { afterEach, beforeEach, describe, expect, it } from "vitest"; +import { renderToStaticMarkup } from "react-dom/server"; +import { TrackHeader } from "../components/TrackHeader"; +import { commandManager } from "../store/commands"; +import { createDefaultTrack, useDAWStore } from "../store/useDAWStore"; + +const initialState = useDAWStore.getState(); + +beforeEach(() => { + commandManager.clear(); +}); + +afterEach(() => { + commandManager.clear(); + useDAWStore.setState(initialState); +}); + +describe("automation lane height UI integration", () => { + it("renders the hovered lane at the height stored by the wheel action", () => { + const track = createDefaultTrack("track-1", "Track 1", "#3b82f6", "audio"); + track.showAutomation = true; + track.automationLanes = [{ + id: "volume-lane", + param: "volume", + points: [], + visible: true, + mode: "read", + armed: false, + readEnabled: true, + }]; + useDAWStore.setState({ tracks: [track] }); + + const state = useDAWStore.getState(); + state.beginAutomationLaneHeightEdit("track-1", "volume-lane"); + state.setAutomationLaneHeight("track-1", "volume-lane", 96); + state.commitAutomationLaneHeightEdit("track-1", "volume-lane"); + const updatedTrack = useDAWStore.getState().tracks[0]; + const html = renderToStaticMarkup( + , + ); + + expect(html).toContain('data-automation-lane-id="volume-lane"'); + expect(html).toMatch( + /data-automation-lane-id="volume-lane"[^>]*style="height:96px"/, + ); + }); +}); diff --git a/frontend/src/__tests__/automationMoveWithItems.test.ts b/frontend/src/__tests__/automationMoveWithItems.test.ts new file mode 100644 index 0000000..bccfaa1 --- /dev/null +++ b/frontend/src/__tests__/automationMoveWithItems.test.ts @@ -0,0 +1,522 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { nativeBridge } from "../services/NativeBridge"; +import { commandManager } from "../store/commands"; +import { + copyAutomationPointsWithClips, + moveAutomationPointsWithClips, + shouldInvertAutomationFollowForClipDrag, + shouldMoveAutomationWithItems, + type AutomationClipMove, +} from "../store/actions/clipEditing"; +import { + createDefaultTrack, + type AudioClip, + type AutomationLane, + type AutomationPoint, + type Track, + useDAWStore, +} from "../store/useDAWStore"; + +const originalState = useDAWStore.getState(); + +function clip(id: string, startTime: number, duration = 2): AudioClip { + return { + id, + name: id, + filePath: `C:/audio/${id}.wav`, + startTime, + duration, + offset: 0, + color: "#38bdf8", + volumeDB: 0, + fadeIn: 0, + fadeOut: 0, + }; +} + +function lane(points: AutomationPoint[], id = "volume-lane"): AutomationLane { + return { + id, + param: "volume", + points, + visible: true, + mode: "read", + armed: false, + readEnabled: true, + }; +} + +function track( + id: string, + clips: AudioClip[], + points: AutomationPoint[], + includeLane = true, +): Track { + return { + ...createDefaultTrack(id, id, "#38bdf8", "audio", []), + clips, + automationLanes: includeLane ? [lane(points, `${id}-volume`)] : [], + showAutomation: true, + automationReadEnabled: true, + automationEnabled: true, + }; +} + +function cloneTracks(tracks: Track[]): Track[] { + return tracks.map((candidate) => ({ + ...candidate, + clips: candidate.clips.map((item) => ({ ...item })), + midiClips: candidate.midiClips.map((item) => ({ ...item })), + automationLanes: candidate.automationLanes.map((automationLane) => ({ + ...automationLane, + points: automationLane.points.map((point) => ({ ...point })), + })), + })); +} + +function pointTimes(trackId: string) { + return useDAWStore.getState().tracks + .find((candidate) => candidate.id === trackId) + ?.automationLanes.find((candidate) => candidate.param === "volume") + ?.points.map((point) => [point.id, Number(point.time.toFixed(6))]); +} + +beforeEach(() => { + commandManager.clear(); + vi.spyOn(nativeBridge, "setAutomationPoints").mockResolvedValue(true); + vi.spyOn(nativeBridge, "setAutomationMode").mockResolvedValue(true); + vi.spyOn(nativeBridge, "clearAutomation").mockResolvedValue(true); + useDAWStore.setState({ + tracks: [], + selectedClipId: null, + selectedClipIds: [], + moveEnvelopesWithItems: true, + autoCrossfade: false, + lockSettings: { + ...useDAWStore.getState().lockSettings, + envelopes: false, + }, + syncClipsWithBackend: vi.fn().mockResolvedValue(undefined), + canUndo: false, + canRedo: false, + }); +}); + +afterEach(() => { + commandManager.clear(); + vi.restoreAllMocks(); + useDAWStore.setState(originalState); +}); + +describe("automation follows item movement", () => { + it("fans one source interval out to every repeat with fresh stable point ids", () => { + const source = [track("track-a", [clip("clip-a", 1, 1)], [ + { id: "source", time: 1.5, value: 0.5 }, + { id: "outside", time: 5, value: 0.8 }, + ])]; + const current = cloneTracks(source); + current[0].clips.push(clip("copy-a", 2, 1), clip("copy-b", 3, 1)); + const copied = copyAutomationPointsWithClips(current, [ + { + clipId: "clip-a", + sourceTrackId: "track-a", + targetTrackId: "track-a", + originalStartTime: 1, + newStartTime: 2, + duration: 1, + }, + { + clipId: "clip-a", + sourceTrackId: "track-a", + targetTrackId: "track-a", + originalStartTime: 1, + newStartTime: 3, + duration: 1, + }, + ], source); + + const points = copied[0].automationLanes[0].points; + expect(points.map((point: AutomationPoint) => point.time)).toEqual([1.5, 2.5, 3.5, 5]); + const copiedIds = points.filter((point: AutomationPoint) => point.time === 2.5 || point.time === 3.5) + .map((point: AutomationPoint) => point.id); + expect(new Set(copiedIds).size).toBe(2); + expect(copiedIds).not.toContain("source"); + }); + + it("duplicates and repeats item automation atomically with stable redo identities", () => { + useDAWStore.setState({ + tracks: [track("track-a", [clip("clip-a", 1, 1)], [ + { id: "source", time: 1.5, value: 0.5 }, + { id: "destination-old", time: 2.5, value: 0.1 }, + { id: "outside", time: 5, value: 0.8 }, + ])], + selectedClipId: "clip-a", + selectedClipIds: ["clip-a"], + moveEnvelopesWithItems: true, + }); + + const duplicateIds = useDAWStore.getState().duplicateSelectedClips(); + expect(duplicateIds).toHaveLength(1); + let duplicatedPoints = useDAWStore.getState().tracks[0].automationLanes[0].points; + expect(duplicatedPoints.map((point) => point.time)).toEqual([1.5, 2.5, 5]); + const duplicatedPointId = duplicatedPoints.find((point) => point.time === 2.5)!.id; + expect(duplicatedPointId).not.toBe("source"); + expect(duplicatedPointId).not.toBe("destination-old"); + expect(commandManager.getUndoStack()).toHaveLength(1); + + useDAWStore.getState().undo(); + expect(pointTimes("track-a")).toEqual([ + ["source", 1.5], + ["destination-old", 2.5], + ["outside", 5], + ]); + useDAWStore.getState().redo(); + expect(useDAWStore.getState().tracks[0].automationLanes[0].points + .find((point) => point.time === 2.5)?.id).toBe(duplicatedPointId); + + useDAWStore.getState().undo(); + commandManager.clear(); + useDAWStore.setState({ canUndo: false, canRedo: false }); + useDAWStore.getState().repeatClip("clip-a", 2); + const repeatedPoints = useDAWStore.getState().tracks[0].automationLanes[0].points; + expect(repeatedPoints.map((point) => point.time)).toEqual([1.5, 2.5, 3.5, 5]); + const repeatedIds = repeatedPoints + .filter((point) => point.time === 2.5 || point.time === 3.5) + .map((point) => point.id); + expect(new Set(repeatedIds).size).toBe(2); + expect(commandManager.getUndoStack()).toHaveLength(1); + useDAWStore.getState().undo(); + useDAWStore.getState().redo(); + expect(useDAWStore.getState().tracks[0].automationLanes[0].points + .filter((point) => point.time === 2.5 || point.time === 3.5) + .map((point) => point.id)).toEqual(repeatedIds); + }); + + it("keeps deleted-item automation timeline-fixed and ripple-moves only surviving item ranges", () => { + const locked = { ...clip("locked", 5, 1), locked: true }; + useDAWStore.setState({ + tracks: [track("track-a", [clip("delete", 1, 1), clip("move", 3, 1), locked], [ + { id: "outside", time: 0.5, value: 0.1 }, + { id: "deleted", time: 1.5, value: 0.2 }, + { id: "moving", time: 3.5, value: 0.3 }, + { id: "locked-point", time: 5.5, value: 0.4 }, + ])], + selectedClipId: "delete", + selectedClipIds: ["delete"], + moveEnvelopesWithItems: true, + rippleMode: "per_track", + }); + + expect(useDAWStore.getState().deleteSelectedClips()).toBe(true); + expect(useDAWStore.getState().tracks[0].clips.map((item) => [item.id, item.startTime])) + .toEqual([["move", 2], ["locked", 5]]); + expect(pointTimes("track-a")).toEqual([ + ["outside", 0.5], + ["deleted", 1.5], + ["moving", 2.5], + ["locked-point", 5.5], + ]); + expect(commandManager.getUndoStack()).toHaveLength(1); + + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks[0].clips.map((item) => [item.id, item.startTime])) + .toEqual([["delete", 1], ["move", 3], ["locked", 5]]); + expect(pointTimes("track-a")).toEqual([ + ["outside", 0.5], + ["deleted", 1.5], + ["moving", 3.5], + ["locked-point", 5.5], + ]); + useDAWStore.getState().redo(); + expect(pointTimes("track-a")).toEqual([ + ["outside", 0.5], + ["deleted", 1.5], + ["moving", 2.5], + ["locked-point", 5.5], + ]); + }); + + it("moves only points in the original item interval and preserves stable IDs", () => { + const source = [track("track-a", [clip("clip-a", 1)], [ + { id: "before", time: 0.5, value: 0.1 }, + { id: "start", time: 1, value: 0.2 }, + { id: "middle", time: 2, value: 0.3 }, + { id: "end", time: 3, value: 0.4 }, + { id: "after", time: 3.5, value: 0.5 }, + ])]; + const current = cloneTracks(source); + current[0].clips[0].startTime = 4; + + const result = moveAutomationPointsWithClips(current, [{ + clipId: "clip-a", + sourceTrackId: "track-a", + targetTrackId: "track-a", + originalStartTime: 1, + newStartTime: 4, + duration: 2, + }], source); + + expect(result[0].automationLanes[0].points.map((point: AutomationPoint) => [point.id, point.time])).toEqual([ + ["before", 0.5], + ["after", 3.5], + ["start", 4], + ["middle", 5], + ["end", 6], + ]); + }); + + it("moves multiple item ranges across tracks without moving a point twice", () => { + const source = [ + track("track-a", [clip("clip-a", 1, 1), clip("clip-b", 4, 1)], [ + { id: "outside-a", time: 0.5, value: 0.1 }, + { id: "a", time: 1.25, value: 0.2 }, + { id: "a-end", time: 2, value: 0.3 }, + { id: "between", time: 2.5, value: 0.4 }, + { id: "b", time: 4.5, value: 0.5 }, + { id: "b-end", time: 5, value: 0.6 }, + { id: "outside-b", time: 6, value: 0.7 }, + ]), + track("track-b", [], [{ id: "target-existing", time: 1, value: 0.8 }]), + ]; + const current = cloneTracks(source); + current[0].clips = []; + current[1].clips = [clip("clip-a", 10, 1), clip("clip-b", 20, 1)]; + const moves: AutomationClipMove[] = [ + { + clipId: "clip-a", + sourceTrackId: "track-a", + targetTrackId: "track-b", + originalStartTime: 1, + newStartTime: 10, + duration: 1, + }, + { + clipId: "clip-b", + sourceTrackId: "track-a", + targetTrackId: "track-b", + originalStartTime: 4, + newStartTime: 20, + duration: 1, + }, + ]; + + const result = moveAutomationPointsWithClips(current, moves, source); + + expect(result[0].automationLanes[0].points.map((point: AutomationPoint) => [point.id, point.time])).toEqual([ + ["outside-a", 0.5], + ["between", 2.5], + ["outside-b", 6], + ]); + expect(result[1].automationLanes[0].points.map((point: AutomationPoint) => [point.id, point.time])).toEqual([ + ["target-existing", 1], + ["a", 10.25], + ["a-end", 11], + ["b", 20.5], + ["b-end", 21], + ]); + expect(result[1].automationLanes[0].id).toBe("track-b-volume"); + }); + + it("creates a matching target lane on a cross-track move", () => { + const source = [ + track("track-a", [clip("clip-a", 1)], [{ id: "moving", time: 2, value: 0.4 }]), + track("track-b", [], [], false), + ]; + const current = cloneTracks(source); + current[0].clips = []; + current[1].clips = [clip("clip-a", 5)]; + + const result = moveAutomationPointsWithClips(current, [{ + clipId: "clip-a", + sourceTrackId: "track-a", + targetTrackId: "track-b", + originalStartTime: 1, + newStartTime: 5, + duration: 2, + }], source); + + expect(result[0].automationLanes[0].points).toEqual([]); + expect(result[1].automationLanes).toHaveLength(1); + expect(result[1].automationLanes[0]).toMatchObject({ + id: "lane_volume_track-b", + param: "volume", + points: [{ id: "moving", time: 6, value: 0.4 }], + }); + }); + + it("returns the original collection for invalid or non-intersecting moves", () => { + const source = [track("track-a", [clip("clip-a", 1)], [ + { id: "outside", time: 10, value: 0.4 }, + ])]; + expect(moveAutomationPointsWithClips(source, [], source)).toBe(source); + expect(moveAutomationPointsWithClips(source, [{ + clipId: "clip-a", + sourceTrackId: "track-a", + targetTrackId: "track-a", + originalStartTime: Number.NaN, + newStartTime: 4, + duration: 2, + }], source)).toBe(source); + expect(moveAutomationPointsWithClips(source, [{ + clipId: "clip-a", + sourceTrackId: "track-a", + targetTrackId: "track-a", + originalStartTime: 1, + newStartTime: 4, + duration: 2, + }], source)).toBe(source); + }); + + it.each([ + { preference: true, locked: false, follows: true }, + { preference: false, locked: false, follows: false }, + { preference: true, locked: true, follows: false }, + ])("nudges clip and automation atomically when follows=$follows", ({ preference, locked, follows }) => { + useDAWStore.setState({ + tracks: [track("track-a", [clip("clip-a", 1)], [ + { id: "inside", time: 2, value: 0.5 }, + { id: "outside", time: 4, value: 0.8 }, + ])], + selectedClipId: "clip-a", + selectedClipIds: ["clip-a"], + moveEnvelopesWithItems: preference, + lockSettings: { + ...useDAWStore.getState().lockSettings, + envelopes: locked, + }, + }); + + useDAWStore.getState().nudgeClips("right", true); + + expect(useDAWStore.getState().tracks[0].clips[0].startTime).toBe(1.01); + expect(pointTimes("track-a")).toEqual([ + ["inside", follows ? 2.01 : 2], + ["outside", 4], + ]); + expect(commandManager.getUndoStack()).toHaveLength(1); + + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks[0].clips[0].startTime).toBe(1); + expect(pointTimes("track-a")).toEqual([ + ["inside", 2], + ["outside", 4], + ]); + expect(commandManager.getRedoStack()).toHaveLength(1); + }); + + it("nudges multiple selected clips and their points in one undo command", () => { + useDAWStore.setState({ + tracks: [track("track-a", [clip("clip-a", 1, 1), clip("clip-b", 4, 1)], [ + { id: "a", time: 1.5, value: 0.3 }, + { id: "b", time: 4.5, value: 0.7 }, + ])], + selectedClipId: "clip-a", + selectedClipIds: ["clip-a", "clip-b"], + moveEnvelopesWithItems: true, + }); + + useDAWStore.getState().nudgeClips("right", true); + + expect(useDAWStore.getState().tracks[0].clips.map((item) => item.startTime)).toEqual([1.01, 4.01]); + expect(pointTimes("track-a")).toEqual([ + ["a", 1.51], + ["b", 4.51], + ]); + expect(commandManager.getUndoStack()).toHaveLength(1); + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks[0].clips.map((item) => item.startTime)).toEqual([1, 4]); + expect(pointTimes("track-a")).toEqual([ + ["a", 1.5], + ["b", 4.5], + ]); + useDAWStore.getState().redo(); + expect(useDAWStore.getState().tracks[0].clips.map((item) => item.startTime)).toEqual([1.01, 4.01]); + expect(pointTimes("track-a")).toEqual([ + ["a", 1.51], + ["b", 4.51], + ]); + }); + + it("moves a clip and its interval automation across tracks in one undo command", async () => { + useDAWStore.setState({ + tracks: [ + track("track-a", [clip("clip-a", 1)], [ + { id: "outside-before", time: 0.5, value: 0.1 }, + { id: "inside", time: 2, value: 0.5 }, + { id: "outside-after", time: 4, value: 0.9 }, + ]), + track("track-b", [], [{ id: "existing", time: 1, value: 0.4 }]), + ], + moveEnvelopesWithItems: true, + }); + + await useDAWStore.getState().moveClipToTrack("clip-a", "track-b", 5); + + expect(useDAWStore.getState().tracks[0].clips).toEqual([]); + expect(useDAWStore.getState().tracks[1].clips[0]).toMatchObject({ id: "clip-a", startTime: 5 }); + expect(pointTimes("track-a")).toEqual([ + ["outside-before", 0.5], + ["outside-after", 4], + ]); + expect(pointTimes("track-b")).toEqual([ + ["existing", 1], + ["inside", 6], + ]); + expect(commandManager.getUndoStack()).toHaveLength(1); + + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks[0].clips[0]).toMatchObject({ id: "clip-a", startTime: 1 }); + expect(useDAWStore.getState().tracks[1].clips).toEqual([]); + expect(pointTimes("track-a")).toEqual([ + ["outside-before", 0.5], + ["inside", 2], + ["outside-after", 4], + ]); + expect(pointTimes("track-b")).toEqual([["existing", 1]]); + + useDAWStore.getState().redo(); + expect(useDAWStore.getState().tracks[0].clips).toEqual([]); + expect(useDAWStore.getState().tracks[1].clips[0]).toMatchObject({ id: "clip-a", startTime: 5 }); + expect(pointTimes("track-a")).toEqual([ + ["outside-before", 0.5], + ["outside-after", 4], + ]); + expect(pointTimes("track-b")).toEqual([ + ["existing", 1], + ["inside", 6], + ]); + expect(useDAWStore.getState().tracks[1].automationLanes[0].id).toBe("track-b-volume"); + }); + + it("does not create history for missing targets or unchanged clip positions", async () => { + useDAWStore.setState({ + tracks: [track("track-a", [clip("clip-a", 1)], [ + { id: "inside", time: 2, value: 0.5 }, + ])], + moveEnvelopesWithItems: true, + }); + + await useDAWStore.getState().moveClipToTrack("missing", "track-a", 4); + await useDAWStore.getState().moveClipToTrack("clip-a", "missing-track", 4); + await useDAWStore.getState().moveClipToTrack("clip-a", "track-a", 1); + + expect(commandManager.getUndoStack()).toHaveLength(0); + expect(useDAWStore.getState().tracks[0].clips[0].startTime).toBe(1); + expect(pointTimes("track-a")).toEqual([["inside", 2]]); + }); +}); + +describe("Cubase momentary automation-follow inversion", () => { + it("XORs physical Shift with the persisted preference and never bypasses envelope lock", () => { + expect(shouldInvertAutomationFollowForClipDrag("cubase", true, true)).toBe(true); + expect(shouldInvertAutomationFollowForClipDrag("cubase", false, true)).toBe(false); + expect(shouldInvertAutomationFollowForClipDrag("reaper", true, true)).toBe(false); + expect(shouldInvertAutomationFollowForClipDrag("cubase", true, false)).toBe(false); + + expect(shouldMoveAutomationWithItems(true, false, false)).toBe(true); + expect(shouldMoveAutomationWithItems(true, true, false)).toBe(false); + expect(shouldMoveAutomationWithItems(false, false, false)).toBe(false); + expect(shouldMoveAutomationWithItems(false, true, false)).toBe(true); + expect(shouldMoveAutomationWithItems(false, true, true)).toBe(false); + }); +}); diff --git a/frontend/src/__tests__/automationPointDrag.test.ts b/frontend/src/__tests__/automationPointDrag.test.ts new file mode 100644 index 0000000..9cfc712 --- /dev/null +++ b/frontend/src/__tests__/automationPointDrag.test.ts @@ -0,0 +1,414 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { nativeBridge } from "../services/NativeBridge"; +import { commandManager } from "../store/commands"; +import { + createDefaultTrack, + type AutomationPoint, + useDAWStore, +} from "../store/useDAWStore"; +import { + resolveAutomationPointDrag, + type AutomationPointDragGesture, +} from "../utils/automationPointDrag"; +import { snapTimeByType } from "../utils/snapToGrid"; + +const originalState = useDAWStore.getState(); + +const gesture = ( + action: AutomationPointDragGesture["action"], + overrides: Partial = {}, +): AutomationPointDragGesture => ({ + action, + originalX: 125, + originalY: 50, + originalTime: 1.25, + originalValue: 0.5, + axisLock: null, + ...overrides, +}); + +const resolve = ( + action: AutomationPointDragGesture["action"], + overrides: Partial[1]> = {}, + gestureOverrides: Partial = {}, +) => resolveAutomationPointDrag(gesture(action, gestureOverrides), { + rawX: 137, + rawY: 20, + scrollX: 0, + pixelsPerSecond: 100, + laneTop: 0, + laneHeight: 100, + snapEnabled: false, + snapTime: (time) => time, + ...overrides, +}); + +describe("automation point drag geometry", () => { + it("snaps ordinary time movement through the active Timeline grid resolver", () => { + const snapTime = vi.fn((time: number, originalTime: number) => snapTimeByType({ + time, + originalTime, + tempo: 120, + timeSignature: { numerator: 4, denominator: 4 }, + gridSize: "beat", + snapType: "grid", + })); + + const result = resolve("move", { snapEnabled: true, snapTime }); + + expect(snapTime).toHaveBeenCalledOnce(); + expect(snapTime).toHaveBeenCalledWith(1.37, 1.25); + expect(result).toMatchObject({ + time: 1.5, + value: 0.8, + x: 150, + snapApplied: true, + timeLocked: false, + valueLocked: false, + }); + expect(result.y).toBeCloseTo(20); + }); + + it("preserves raw time for the explicit snap-bypass action", () => { + const snapTime = vi.fn(() => 99); + + const result = resolve("bypass_snap", { snapEnabled: true, snapTime }); + + expect(snapTime).not.toHaveBeenCalled(); + expect(result.time).toBeCloseTo(1.37); + expect(result.x).toBeCloseTo(137); + expect(result.value).toBeCloseTo(0.8); + expect(result.snapApplied).toBe(false); + }); + + it("defines constrain_x as time-only movement and constrain_y as value-only movement", () => { + const snapTime = vi.fn(() => 1.5); + const horizontal = resolve("constrain_x", { snapEnabled: true, snapTime }); + expect(horizontal).toMatchObject({ + time: 1.5, + value: 0.5, + x: 150, + y: 50, + timeLocked: false, + valueLocked: true, + snapApplied: true, + }); + + snapTime.mockClear(); + const vertical = resolve("constrain_y", { snapEnabled: true, snapTime }); + expect(vertical).toMatchObject({ + time: 1.25, + value: 0.8, + x: 125, + timeLocked: true, + valueLocked: false, + snapApplied: false, + }); + expect(vertical.y).toBeCloseTo(20); + expect(snapTime).not.toHaveBeenCalled(); + }); + + it("preserves both meanings for fine/axis plus snap-bypass compounds", () => { + const snapTime = vi.fn(() => 99); + const horizontal = resolve("constrain_x_bypass_snap", { + snapEnabled: true, + snapTime, + }); + expect(horizontal.time).toBeCloseTo(1.37); + expect(horizontal.value).toBe(0.5); + expect(horizontal).toMatchObject({ valueLocked: true, snapApplied: false }); + + const vertical = resolve("constrain_y_bypass_snap", { + snapEnabled: true, + snapTime, + }); + expect(vertical.time).toBe(1.25); + expect(vertical.value).toBeCloseTo(0.8); + expect(vertical).toMatchObject({ timeLocked: true, snapApplied: false }); + + const fine = resolve("fine_bypass_snap", { + rawX: 225, + rawY: -50, + snapEnabled: true, + snapTime, + }); + expect(fine.time).toBeCloseTo(1.35); + expect(fine.value).toBeCloseTo(0.6); + expect(fine.snapApplied).toBe(false); + + const dominant = resolve("constrain_axis_bypass_snap", { + rawX: 137, + rawY: 47, + snapEnabled: true, + snapTime, + }); + expect(dominant).toMatchObject({ + axisLock: "time", + value: 0.5, + valueLocked: true, + snapApplied: false, + }); + expect(dominant.time).toBeCloseTo(1.37); + expect(snapTime).not.toHaveBeenCalled(); + }); + + it("treats Reason copy movement like ordinary movement and preserves its axis constraint", () => { + const copied = resolve("copy", { + snapEnabled: true, + snapTime: () => 1.5, + }); + expect(copied).toMatchObject({ + time: 1.5, + value: 0.8, + snapApplied: true, + timeLocked: false, + valueLocked: false, + }); + + const constrainedCopy = resolve("copy_constrain_axis", { + rawX: 140, + rawY: 47, + snapEnabled: false, + }); + expect(constrainedCopy).toMatchObject({ + axisLock: "time", + value: 0.5, + valueLocked: true, + }); + expect(constrainedCopy.time).toBeCloseTo(1.4); + }); + + it("chooses and then preserves the dominant axis after the movement threshold", () => { + const undecided = resolve("constrain_axis", { + rawX: 126, + rawY: 49, + }); + expect(undecided.axisLock).toBeNull(); + expect(undecided.valueLocked).toBe(false); + expect(undecided.timeLocked).toBe(false); + + const horizontal = resolve("constrain_axis", { + rawX: 130, + rawY: 47, + }); + expect(horizontal).toMatchObject({ axisLock: "time", valueLocked: true }); + expect(horizontal.value).toBe(0.5); + + const stillHorizontal = resolve( + "constrain_axis", + { rawX: 126, rawY: 5 }, + { axisLock: horizontal.axisLock }, + ); + expect(stillHorizontal).toMatchObject({ axisLock: "time", valueLocked: true }); + expect(stillHorizontal.value).toBe(0.5); + + const vertical = resolve("constrain_axis", { + rawX: 127, + rawY: 40, + }); + expect(vertical).toMatchObject({ + axisLock: "value", + timeLocked: true, + time: 1.25, + }); + }); + + it("applies fine movement before snapping and clamps time/value safely", () => { + const fine = resolve("fine", { + rawX: 225, + rawY: -50, + snapEnabled: false, + }); + expect(fine.time).toBeCloseTo(1.35); + expect(fine.value).toBeCloseTo(0.6); + + const clamped = resolve("bypass_snap", { + rawX: -1_000, + rawY: 1_000, + scrollX: 50, + }); + expect(clamped).toMatchObject({ time: 0, value: 0, x: -50, y: 100 }); + }); +}); + +describe("automation point drag transaction", () => { + const point = (id: string, time: number, value: number): AutomationPoint => ({ + id, + time, + value, + }); + + beforeEach(() => { + useDAWStore.getState().cancelAutomationPointEdit(); + commandManager.clear(); + vi.spyOn(nativeBridge, "setAutomationPoints").mockResolvedValue(true); + useDAWStore.setState({ + tracks: [{ + ...createDefaultTrack("track-a", "Track A", "#fff", "audio", []), + showAutomation: true, + automationLanes: [{ + id: "track-volume", + param: "volume", + points: [point("stable-point", 1.25, 0.5)], + visible: true, + mode: "read", + armed: false, + readEnabled: true, + }], + }], + masterAutomationLanes: [], + selectedAutomationTarget: null, + lockSettings: { + ...useDAWStore.getState().lockSettings, + envelopes: false, + }, + isModified: false, + canUndo: false, + canRedo: false, + }); + }); + + afterEach(() => { + useDAWStore.getState().cancelAutomationPointEdit(); + commandManager.clear(); + vi.restoreAllMocks(); + useDAWStore.setState(originalState); + }); + + const target = { + kind: "track" as const, + trackId: "track-a", + laneId: "track-volume", + pointId: "stable-point", + }; + + const currentPoint = () => useDAWStore.getState().tracks[0].automationLanes[0].points[0]; + + it("commits a snapped preview with its stable ID as exactly one undo command", () => { + const preview = resolve("move", { + snapEnabled: true, + snapTime: () => 1.5, + }); + + expect(useDAWStore.getState().beginAutomationPointEdit(target)).toBe(true); + expect(useDAWStore.getState().previewAutomationPointEdit(preview.time, preview.value)).toBe(true); + expect(commandManager.getUndoStack()).toHaveLength(0); + expect(useDAWStore.getState().commitAutomationPointEdit()).toBe(true); + expect(currentPoint()).toEqual(point("stable-point", 1.5, 0.8)); + expect(commandManager.getUndoStack()).toHaveLength(1); + + useDAWStore.getState().undo(); + expect(currentPoint()).toEqual(point("stable-point", 1.25, 0.5)); + }); + + it("restores cancellation exactly and creates no history for cancellation or a no-op drag", () => { + expect(useDAWStore.getState().beginAutomationPointEdit(target)).toBe(true); + expect(useDAWStore.getState().previewAutomationPointEdit(2, 0.9)).toBe(true); + expect(useDAWStore.getState().cancelAutomationPointEdit()).toBe(true); + expect(currentPoint()).toEqual(point("stable-point", 1.25, 0.5)); + expect(useDAWStore.getState().isModified).toBe(false); + expect(commandManager.getUndoStack()).toHaveLength(0); + + expect(useDAWStore.getState().beginAutomationPointEdit(target)).toBe(true); + expect(useDAWStore.getState().previewAutomationPointEdit(1.25, 0.5)).toBe(true); + expect(useDAWStore.getState().commitAutomationPointEdit()).toBe(false); + expect(currentPoint()).toEqual(point("stable-point", 1.25, 0.5)); + expect(useDAWStore.getState().isModified).toBe(false); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it("copy-drags a stable point while preserving a new stable-ID source copy in one command", () => { + expect(useDAWStore.getState().beginAutomationPointCopyEdit(target)).toBe(true); + let points = useDAWStore.getState().tracks[0].automationLanes[0].points; + expect(points).toHaveLength(2); + const preservedCopy = points.find((candidate) => candidate.id !== "stable-point"); + expect(preservedCopy).toMatchObject({ time: 1.25, value: 0.5 }); + expect(preservedCopy?.id).toBeTypeOf("string"); + + expect(useDAWStore.getState().previewAutomationPointEdit(2, 0.75)).toBe(true); + expect(commandManager.getUndoStack()).toHaveLength(0); + expect(useDAWStore.getState().commitAutomationPointEdit()).toBe(true); + + points = useDAWStore.getState().tracks[0].automationLanes[0].points; + expect(points).toHaveLength(2); + expect(points.find((candidate) => candidate.id === "stable-point")).toEqual( + point("stable-point", 2, 0.75), + ); + expect(points.find((candidate) => candidate.id === preservedCopy?.id)).toEqual(preservedCopy); + expect(commandManager.getUndoStack()).toHaveLength(1); + + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks[0].automationLanes[0].points).toEqual([ + point("stable-point", 1.25, 0.5), + ]); + useDAWStore.getState().redo(); + expect(useDAWStore.getState().tracks[0].automationLanes[0].points).toEqual(points); + }); + + it("removes a provisional source copy exactly on cancel and on snapped no-op commit", () => { + expect(useDAWStore.getState().beginAutomationPointCopyEdit(target)).toBe(true); + expect(useDAWStore.getState().previewAutomationPointEdit(2, 0.75)).toBe(true); + expect(useDAWStore.getState().cancelAutomationPointEdit()).toBe(true); + expect(useDAWStore.getState().tracks[0].automationLanes[0].points).toEqual([ + point("stable-point", 1.25, 0.5), + ]); + expect(useDAWStore.getState().isModified).toBe(false); + expect(commandManager.getUndoStack()).toHaveLength(0); + + expect(useDAWStore.getState().beginAutomationPointCopyEdit(target)).toBe(true); + expect(useDAWStore.getState().previewAutomationPointEdit(1.25, 0.5)).toBe(true); + expect(useDAWStore.getState().commitAutomationPointEdit()).toBe(false); + expect(useDAWStore.getState().tracks[0].automationLanes[0].points).toEqual([ + point("stable-point", 1.25, 0.5), + ]); + expect(useDAWStore.getState().isModified).toBe(false); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it("uses the same atomic copy transaction for a master automation point", () => { + useDAWStore.setState({ + masterAutomationLanes: [{ + id: "master-volume", + param: "volume", + points: [point("master-stable", 1, 0.25)], + visible: true, + mode: "read", + armed: false, + readEnabled: true, + }], + }); + const masterTarget = { + kind: "master" as const, + laneId: "master-volume", + pointId: "master-stable", + }; + + expect(useDAWStore.getState().beginAutomationPointCopyEdit(masterTarget)).toBe(true); + expect(useDAWStore.getState().previewAutomationPointEdit(2, 0.75)).toBe(true); + expect(useDAWStore.getState().commitAutomationPointEdit()).toBe(true); + expect(useDAWStore.getState().masterAutomationLanes[0].points).toHaveLength(2); + expect(useDAWStore.getState().masterAutomationLanes[0].points).toContainEqual( + point("master-stable", 2, 0.75), + ); + expect(commandManager.getUndoStack()).toHaveLength(1); + + useDAWStore.getState().undo(); + expect(useDAWStore.getState().masterAutomationLanes[0].points).toEqual([ + point("master-stable", 1, 0.25), + ]); + }); + + it("rejects a transaction while envelope locking is enabled", () => { + useDAWStore.setState({ + lockSettings: { + ...useDAWStore.getState().lockSettings, + envelopes: true, + }, + }); + + expect(useDAWStore.getState().beginAutomationPointEdit(target)).toBe(false); + expect(useDAWStore.getState().beginAutomationPointCopyEdit(target)).toBe(false); + expect(currentPoint()).toEqual(point("stable-point", 1.25, 0.5)); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); +}); diff --git a/frontend/src/__tests__/automationProfileBindings.test.ts b/frontend/src/__tests__/automationProfileBindings.test.ts new file mode 100644 index 0000000..e8fa5bd --- /dev/null +++ b/frontend/src/__tests__/automationProfileBindings.test.ts @@ -0,0 +1,138 @@ +import { describe, expect, it } from "vitest"; +import { getActionShortcutScopes, getRegisteredAction } from "../store/actionRegistry"; +import { + KEYBOARD_SHORTCUT_PROFILES, + getProfileActionBindings, +} from "../utils/shortcutProfiles"; + +describe("source-DAW automation shortcut profiles", () => { + it.each(["logic_pro", "garageband", "ableton_live"] as const)( + "maps %s A to the implemented arrangement automation view", + (profileId) => { + expect(getProfileActionBindings( + profileId, + "automation.toggleArrangementView", + "macos", + )).toEqual(["A"]); + }, + ); + + it("does not leak OpenStudio's arrangement A into other vendor profiles", () => { + const verifiedArrangementProfiles = new Set(["logic_pro", "garageband", "ableton_live"]); + for (const profile of KEYBOARD_SHORTCUT_PROFILES) { + if (profile.id === "openstudio" || verifiedArrangementProfiles.has(profile.id)) continue; + expect( + getProfileActionBindings(profile.id, "automation.toggleArrangementView", "macos"), + `${profile.id} must explicitly own or unbind arrangement automation`, + ).toEqual([]); + } + }); + + it("maps Ableton's point and envelope navigation without changing modifier meaning", () => { + expect(getProfileActionBindings("ableton_live", "automation.point.selectNext", "macos")) + .toEqual(["Tab", "Option+Right"]); + expect(getProfileActionBindings("ableton_live", "automation.point.selectNext", "windows")) + .toEqual(["Tab", "Alt+Right"]); + expect(getProfileActionBindings("ableton_live", "automation.point.selectPrevious", "macos")) + .toEqual(["Shift+Tab", "Option+Left"]); + expect(getProfileActionBindings("ableton_live", "automation.point.deleteSelected", "windows")) + .toEqual(["Delete"]); + expect(getProfileActionBindings("ableton_live", "automation.point.addAtPlayhead", "macos")) + .toEqual(["Enter"]); + expect(getProfileActionBindings("ableton_live", "automation.lane.selectPrevious", "macos")) + .toEqual(["Option+Up"]); + expect(getProfileActionBindings("ableton_live", "automation.lane.selectNext", "windows")) + .toEqual(["Alt+Down"]); + }); + + it("maps only exact implemented Studio One automation commands", () => { + expect(getProfileActionBindings("studio_one", "track.toggleSelectedAutomation", "windows")) + .toEqual(["A"]); + expect(getProfileActionBindings("studio_one", "track.toggleSelectedAutomationRead", "windows")) + .toEqual(["J"]); + expect(getProfileActionBindings("studio_one", "automation.selectedTracks.mode.touch", "windows")) + .toEqual(["K"]); + expect(getProfileActionBindings("studio_one", "automation.toggleArrangementView", "windows")) + .toEqual([]); + expect(getActionShortcutScopes( + getRegisteredAction("track.toggleSelectedAutomation")!, + "studio_one", + )).toContain("timeline"); + }); + + it("maps Logic's selected-track and all-track mode commands without changing scope", () => { + expect(getProfileActionBindings( + "logic_pro", + "automation.selectedTracks.toggleOffRead", + "macos", + )).toEqual(["Control+Command+O"]); + expect(getProfileActionBindings( + "logic_pro", + "automation.selectedTracks.toggleLatchRead", + "windows", + )).toEqual(["Control+Meta+A"]); + + const allTrackModes = { + off: "O", + read: "R", + touch: "T", + latch: "L", + } as const; + for (const [mode, key] of Object.entries(allTrackModes)) { + expect(getProfileActionBindings( + "logic_pro", + `automation.allTracks.mode.${mode}`, + "macos", + )).toEqual([`Control+Command+Shift+${key}`]); + expect(getProfileActionBindings( + "logic_pro", + `automation.allTracks.mode.${mode}`, + "windows", + )).toEqual([`Control+Meta+Shift+${key}`]); + } + }); + + it("maps Cakewalk's global write-off and read-toggle commands exactly", () => { + expect(getProfileActionBindings( + "cakewalk_sonar", + "automation.allTracks.writeOff", + "windows", + )).toEqual(["F12"]); + expect(getProfileActionBindings( + "cakewalk_sonar", + "automation.allTracks.toggleRead", + "windows", + )).toEqual(["Ctrl+F12"]); + // Profiles remain portable even when their source DAW is platform-specific. + expect(getProfileActionBindings( + "cakewalk_sonar", + "automation.allTracks.toggleRead", + "macos", + )).toEqual(["Ctrl+F12"]); + }); + + it("keeps every mapped automation identity backed by an executable registry action", () => { + for (const actionId of [ + "automation.toggleArrangementView", + "automation.point.selectNext", + "automation.point.selectPrevious", + "automation.point.deleteSelected", + "automation.point.addAtPlayhead", + "automation.lane.selectPrevious", + "automation.lane.selectNext", + "track.toggleSelectedAutomation", + "track.toggleSelectedAutomationRead", + "automation.selectedTracks.mode.touch", + "automation.selectedTracks.toggleOffRead", + "automation.selectedTracks.toggleLatchRead", + "automation.allTracks.mode.off", + "automation.allTracks.mode.read", + "automation.allTracks.mode.touch", + "automation.allTracks.mode.latch", + "automation.allTracks.writeOff", + "automation.allTracks.toggleRead", + ]) { + expect(getRegisteredAction(actionId), actionId).toBeDefined(); + } + }); +}); diff --git a/frontend/src/__tests__/automationShortcutContextIntegration.test.ts b/frontend/src/__tests__/automationShortcutContextIntegration.test.ts new file mode 100644 index 0000000..eec0b8c --- /dev/null +++ b/frontend/src/__tests__/automationShortcutContextIntegration.test.ts @@ -0,0 +1,170 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { nativeBridge } from "../services/NativeBridge"; +import { commandManager } from "../store/commands"; +import { + createDefaultTrack, + type AudioClip, + type AutomationLane, + useDAWStore, +} from "../store/useDAWStore"; +import { activateAutomationLaneShortcutContext } from "../utils/automationShortcutContext"; +import { dispatchGlobalShortcut } from "../utils/globalShortcutDispatcher"; +import { + getActiveShortcutContext, + resetShortcutContextForTests, +} from "../utils/shortcutContext"; + +const originalState = useDAWStore.getState(); + +function clip(): AudioClip { + return { + id: "selected-clip", + name: "Selected clip", + filePath: "C:/audio/selected.wav", + startTime: 0, + duration: 4, + offset: 0, + color: "#38bdf8", + volumeDB: 0, + fadeIn: 0, + fadeOut: 0, + }; +} + +function emptyLane(id: string): AutomationLane { + return { + id, + param: "volume", + points: [], + visible: true, + mode: "read", + armed: false, + readEnabled: true, + }; +} + +beforeEach(() => { + commandManager.clear(); + resetShortcutContextForTests(); + vi.spyOn(nativeBridge, "setAutomationPoints").mockResolvedValue(true); + vi.spyOn(nativeBridge, "setAutomationMode").mockResolvedValue(true); + vi.spyOn(nativeBridge, "clearAutomation").mockResolvedValue(true); + const automationLane = emptyLane("track-volume"); + const track = { + ...createDefaultTrack("track-a", "Track A", "#38bdf8", "audio", []), + clips: [clip()], + automationLanes: [automationLane], + showAutomation: true, + automationReadEnabled: true, + automationEnabled: true, + }; + useDAWStore.setState({ + tracks: [track], + selectedTrackId: "track-a", + selectedTrackIds: ["track-a"], + selectedClipId: "selected-clip", + selectedClipIds: ["selected-clip"], + selectedAutomationTarget: null, + masterAutomationLanes: [emptyLane("master-volume")], + showMasterAutomation: true, + masterAutomationReadEnabled: true, + masterAutomationEnabled: true, + customShortcuts: { + "automation.point.addAtPlayhead": "Ctrl+Shift+P", + }, + lockSettings: { + ...useDAWStore.getState().lockSettings, + envelopes: false, + }, + transport: { + ...useDAWStore.getState().transport, + currentTime: 2, + isPlaying: false, + }, + canUndo: false, + canRedo: false, + }); +}); + +afterEach(() => { + commandManager.clear(); + resetShortcutContextForTests(); + vi.restoreAllMocks(); + useDAWStore.setState(originalState); +}); + +describe("automation lane focus and shortcut precedence", () => { + it("runs a custom automation chord after an empty track-lane click and keeps Delete off the selected clip", () => { + expect(activateAutomationLaneShortcutContext({ + kind: "track", + trackId: "track-a", + laneId: "track-volume", + })).toBe(true); + expect(getActiveShortcutContext()).toEqual({ kind: "automation" }); + + expect(dispatchGlobalShortcut({ + key: "p", + ctrlKey: true, + shiftKey: true, + source: "browser", + }, "windows")).toBe(true); + + let state = useDAWStore.getState(); + expect(state.tracks[0].automationLanes[0].points).toHaveLength(1); + expect(state.tracks[0].automationLanes[0].points[0].time).toBe(2); + expect(state.selectedAutomationTarget).toMatchObject({ + kind: "track", + trackId: "track-a", + laneId: "track-volume", + }); + expect(state.selectedAutomationTarget?.pointId).toEqual(expect.any(String)); + expect(commandManager.getUndoStack()).toHaveLength(1); + + expect(dispatchGlobalShortcut({ key: "Delete", source: "browser" }, "windows")).toBe(true); + state = useDAWStore.getState(); + expect(state.tracks[0].automationLanes[0].points).toEqual([]); + expect(state.tracks[0].clips.map((candidate) => candidate.id)).toEqual(["selected-clip"]); + expect(state.selectedClipIds).toEqual(["selected-clip"]); + expect(commandManager.getUndoStack()).toHaveLength(2); + + state.undo(); + expect(useDAWStore.getState().tracks[0].automationLanes[0].points).toHaveLength(1); + expect(useDAWStore.getState().tracks[0].clips).toHaveLength(1); + }); + + it("provides the same empty-lane custom shortcut and Delete behavior for master", () => { + expect(activateAutomationLaneShortcutContext({ + kind: "master", + laneId: "master-volume", + })).toBe(true); + + expect(dispatchGlobalShortcut({ + key: "p", + ctrlKey: true, + shiftKey: true, + source: "browser", + }, "windows")).toBe(true); + let state = useDAWStore.getState(); + expect(state.masterAutomationLanes[0].points).toHaveLength(1); + expect(state.selectedAutomationTarget).toMatchObject({ + kind: "master", + laneId: "master-volume", + }); + + expect(dispatchGlobalShortcut({ key: "Backspace", source: "browser" }, "windows")).toBe(true); + state = useDAWStore.getState(); + expect(state.masterAutomationLanes[0].points).toEqual([]); + expect(state.tracks[0].clips).toHaveLength(1); + expect(commandManager.getUndoStack()).toHaveLength(2); + }); + + it("does not activate automation for a stale lane target", () => { + expect(activateAutomationLaneShortcutContext({ + kind: "track", + trackId: "missing-track", + laneId: "missing-lane", + })).toBe(false); + expect(getActiveShortcutContext()).toEqual({ kind: "application" }); + expect(useDAWStore.getState().selectedAutomationTarget).toBeNull(); + }); +}); diff --git a/frontend/src/__tests__/browserWheelGuard.test.ts b/frontend/src/__tests__/browserWheelGuard.test.ts new file mode 100644 index 0000000..e4212a5 --- /dev/null +++ b/frontend/src/__tests__/browserWheelGuard.test.ts @@ -0,0 +1,67 @@ +import { describe, expect, it, vi } from "vitest"; +import { + installBrowserZoomWheelGuard, + resolveBrowserWheelGesture, + shouldSuppressBrowserZoomWheel, +} from "../utils/browserWheelGuard"; + +describe("app-wide browser zoom wheel guard", () => { + it.each([ + { platform: "Windows", event: { ctrlKey: true }, expected: true }, + { platform: "Windows physical Meta", event: { metaKey: true }, expected: true }, + { platform: "macOS Command", event: { metaKey: true }, expected: true }, + { platform: "macOS physical Control / pinch", event: { ctrlKey: true }, expected: true }, + { platform: "macOS both modifiers", event: { ctrlKey: true, metaKey: true }, expected: true }, + { platform: "ordinary scroll", event: {}, expected: false }, + { platform: "ordinary Shift scroll", event: { shiftKey: true }, expected: false }, + ])("returns $expected for $platform", ({ event, expected }) => { + expect(shouldSuppressBrowserZoomWheel(event)).toBe(expected); + }); + + it("prevents browser zoom without stopping child DAW wheel propagation", () => { + expect(resolveBrowserWheelGesture({ deltaY: 3, ctrlKey: true })).toMatchObject({ + operation: "suppress", + preventDefault: true, + stopPropagation: false, + }); + expect(resolveBrowserWheelGesture({ deltaY: 3, metaKey: true })).toMatchObject({ + operation: "suppress", + preventDefault: true, + stopPropagation: false, + }); + }); + + it("preserves ordinary browser/list scrolling", () => { + expect(resolveBrowserWheelGesture({ deltaY: 3 })).toMatchObject({ + operation: "native-scroll", + preventDefault: false, + stopPropagation: false, + }); + }); + + it("prevents at capture without consuming propagation to a child handler", () => { + let listener: EventListener | null = null; + const target = { + addEventListener: vi.fn((_type: string, next: EventListener) => { + listener = next; + }), + removeEventListener: vi.fn(), + } as unknown as Document; + const preventDefault = vi.fn(); + const stopPropagation = vi.fn(); + const cleanup = installBrowserZoomWheelGuard(target); + + expect(listener).not.toBeNull(); + (listener as unknown as EventListener)({ + ctrlKey: true, + deltaY: 1, + preventDefault, + stopPropagation, + } as unknown as Event); + expect(preventDefault).toHaveBeenCalledOnce(); + expect(stopPropagation).not.toHaveBeenCalled(); + + cleanup(); + expect(target.removeEventListener).toHaveBeenCalledOnce(); + }); +}); diff --git a/frontend/src/__tests__/builtInAutomationIdentity.test.ts b/frontend/src/__tests__/builtInAutomationIdentity.test.ts new file mode 100644 index 0000000..b01e45a --- /dev/null +++ b/frontend/src/__tests__/builtInAutomationIdentity.test.ts @@ -0,0 +1,15 @@ +import { describe, expect, it } from "vitest"; +import { builtInAutomationParamId, pluginAutomationParamId } from "../store/automationParams"; + +describe("stable built-in automation ids", () => { + it("uses the schema parameter id instead of a fragile parameter-array index", () => { + expect(builtInAutomationParamId(false, 2, "ampGainDb")) + .toBe("builtin_track_2_ampGainDb"); + expect(builtInAutomationParamId(true, 0, "band0.freq")) + .toBe("builtin_input_0_band0.freq"); + }); + + it("keeps third-party plugin automation ids backward compatible", () => { + expect(pluginAutomationParamId(false, 2, 17)).toBe("plugin_track_2_17"); + }); +}); diff --git a/frontend/src/__tests__/builtInParamValue.test.ts b/frontend/src/__tests__/builtInParamValue.test.ts new file mode 100644 index 0000000..7b18047 --- /dev/null +++ b/frontend/src/__tests__/builtInParamValue.test.ts @@ -0,0 +1,56 @@ +import { describe, expect, it } from "vitest"; +import type { BuiltInParamDescriptor } from "../services/NativeBridge"; +import { + chorusRateHzFromNormalized, + chorusRateNormalizedFromHz, + migrateLegacyChorusRateAutomationValue, + normalizeParamValue, + quantizeParamValue, +} from "../utils/builtInParamValue"; + +const chorusRateParam: BuiltInParamDescriptor = { + id: "chorusRateHz", + label: "Chorus Rate", + type: "continuous", + value: 1, + min: 0.01, + max: 8, + defaultValue: 0.75, + unit: "Hz", + automatable: true, + graphRole: "modulation", +}; + +describe("NAM Rack chorus rate curve", () => { + it("lands exactly on 0.01, 1, and 8 Hz", () => { + expect(chorusRateHzFromNormalized(0)).toBeCloseTo(0.01, 8); + expect(chorusRateHzFromNormalized(0.5)).toBeCloseTo(1, 8); + expect(chorusRateHzFromNormalized(1)).toBeCloseTo(8, 8); + }); + + it("matches the intended smooth representative values", () => { + expect(chorusRateHzFromNormalized(0.25)).toBeCloseTo(0.1545, 3); + expect(chorusRateHzFromNormalized(0.75)).toBeCloseTo(3.4423, 3); + }); + + it("round-trips raw Hz through the knob position", () => { + for (const rate of [0.01, 0.0438, 0.1545, 0.4382, 1, 1.9487, 3.4423, 5.5118, 8]) { + expect(chorusRateHzFromNormalized(chorusRateNormalizedFromHz(rate))).toBeCloseTo(rate, 5); + } + expect(normalizeParamValue(chorusRateParam, 1)).toBeCloseTo(0.5, 8); + }); + + it("quantizes in knob space so the slow range keeps useful resolution", () => { + const quantized = quantizeParamValue(chorusRateParam, 0.011); + expect(quantized).toBeGreaterThanOrEqual(0.01); + expect(quantized).toBeLessThan(0.02); + }); + + it("migrates legacy linear automation without changing its audible Hz value", () => { + for (const legacyNormalized of [0, 0.25, 0.5, 0.75, 1]) { + const legacyRate = 0.05 + legacyNormalized * 7.95; + const migrated = migrateLegacyChorusRateAutomationValue(legacyNormalized); + expect(chorusRateHzFromNormalized(migrated)).toBeCloseTo(legacyRate, 5); + } + }); +}); diff --git a/frontend/src/__tests__/builtInPluginPanel.test.tsx b/frontend/src/__tests__/builtInPluginPanel.test.tsx index de5dbc6..b664534 100644 --- a/frontend/src/__tests__/builtInPluginPanel.test.tsx +++ b/frontend/src/__tests__/builtInPluginPanel.test.tsx @@ -1,15 +1,17 @@ import { renderToStaticMarkup } from "react-dom/server"; -// @ts-expect-error The app tsconfig does not include Node builtin typings, but Vitest runs this file in Node. -import { readFileSync } from "node:fs"; import { describe, expect, it } from "vitest"; import { BuiltInPluginPanel, BuiltInParamControl, + createFrameCoalescedParamWriter, + createParamWriteReconciler, + createSchemaRequestGate, formatParamValue, getPluginKind, groupLabel, groupSortWeight, primaryParamIdsForKind, + shouldReadBackAfterParamWrite, stepForParam, } from "../components/BuiltInPluginPanel"; import type { BuiltInParamDescriptor, BuiltInPluginSchema } from "../services/NativeBridge"; @@ -61,6 +63,34 @@ function schemaWithParams(name: string, category: string, params: BuiltInParamDe }; } +function createFrameHarness() { + let nextFrameId = 1; + const callbacks = new Map(); + return { + requestFrame(callback: FrameRequestCallback) { + const frameId = nextFrameId; + nextFrameId += 1; + callbacks.set(frameId, callback); + return frameId; + }, + cancelFrame(frameId: number) { + callbacks.delete(frameId); + }, + runFrame() { + const frameCallbacks = [...callbacks.values()]; + callbacks.clear(); + for (const callback of frameCallbacks) callback(0); + }, + pendingFrames() { + return callbacks.size; + }, + }; +} + +async function flushMicrotasks() { + for (let index = 0; index < 6; index += 1) await Promise.resolve(); +} + function continuous(id: string, label: string, value: number, min = 0, max = 1, graphRole = "controls", unit = "") { return param({ id, label, value, min, max, graphRole, unit }); } @@ -125,7 +155,7 @@ const panelSchemas = [ continuous("rate", "Rate", 1, 0.01, 20, "modulation", "Hz"), continuous("depth", "Depth", 0.5, 0, 1, "modulation"), continuous("mix", "Mix", 0.5, 0, 1, "mix"), - choice("characterMode", "Character", 1, ["Clean", "Ensemble", "BBD"], "character"), + choice("characterMode", "Character", 1, ["Clean", "Ensemble"], "character"), ]), schemaWithParams("S13 Saturator", "Saturation", [ choice("satType", "Type", 1, ["Tape", "Tube", "Console"], "character"), @@ -165,6 +195,271 @@ const panelSchemas = [ ]; describe("BuiltInPluginPanel schema model", () => { + it("coalesces NAM parameter writes only within an animation frame", async () => { + const frames = createFrameHarness(); + const writes: Array<[string, number]> = []; + const writer = createFrameCoalescedParamWriter({ + write: async (paramId, value) => { + writes.push([paramId, value]); + return true; + }, + requestFrame: frames.requestFrame, + cancelFrame: frames.cancelFrame, + }); + + writer.enqueue("reverbMix", 0.1); + writer.enqueue("reverbMix", 0.2); + writer.enqueue("reverbMix", 0.2); + writer.enqueue("reverbDecaySec", 3.5); + + expect(frames.pendingFrames()).toBe(2); + frames.runFrame(); + await flushMicrotasks(); + + expect(writes).toEqual([ + ["reverbMix", 0.2], + ["reverbDecaySec", 3.5], + ]); + + writer.enqueue("reverbMix", 0.2); + expect(frames.pendingFrames()).toBe(1); + frames.runFrame(); + await flushMicrotasks(); + expect(writes).toEqual([ + ["reverbMix", 0.2], + ["reverbDecaySec", 3.5], + ["reverbMix", 0.2], + ]); + writer.dispose(); + }); + + it("sends the first toggle after a preset changes native state outside the writer", async () => { + const writes: Array<[string, number]> = []; + const writer = createFrameCoalescedParamWriter({ + write: async (paramId, value) => { + writes.push([paramId, value]); + return true; + }, + }); + + writer.writeImmediately("delayEnabled", 0); + await flushMicrotasks(); + + // A preset now enables Delay directly in native state. The editor's next + // off click has the same value as its previous successful write, but it + // must still reach native code because the preset bypassed this writer. + writer.writeImmediately("delayEnabled", 0); + await flushMicrotasks(); + + expect(writes).toEqual([ + ["delayEnabled", 0], + ["delayEnabled", 0], + ]); + writer.dispose(); + }); + + it("retains the trailing knob value while an earlier native write is in flight", async () => { + const frames = createFrameHarness(); + const writes: number[] = []; + let finishFirstWrite: ((ok: boolean) => void) | undefined; + const firstWrite = new Promise((resolve) => { + finishFirstWrite = resolve; + }); + const writer = createFrameCoalescedParamWriter({ + write: async (_paramId, value) => { + writes.push(value); + return writes.length === 1 ? firstWrite : true; + }, + requestFrame: frames.requestFrame, + cancelFrame: frames.cancelFrame, + }); + + writer.enqueue("chorusDepth", 0.2); + frames.runFrame(); + writer.enqueue("chorusDepth", 0.6); + writer.enqueue("chorusDepth", 0.8); + expect(writes).toEqual([0.2]); + expect(frames.pendingFrames()).toBe(0); + + finishFirstWrite?.(true); + await flushMicrotasks(); + expect(frames.pendingFrames()).toBe(1); + + frames.runFrame(); + await flushMicrotasks(); + expect(writes).toEqual([0.2, 0.8]); + writer.dispose(); + }); + + it("recovers only when a failed write is still the final requested value", async () => { + const frames = createFrameHarness(); + const failures: Array<[string, number]> = []; + let finishFirstWrite: ((ok: boolean) => void) | undefined; + const firstWrite = new Promise((resolve) => { + finishFirstWrite = resolve; + }); + let writeCount = 0; + const writer = createFrameCoalescedParamWriter({ + write: async (_paramId, _value) => { + writeCount += 1; + return writeCount === 1 ? firstWrite : writeCount === 2; + }, + onFailure: (paramId, value) => failures.push([paramId, value]), + requestFrame: frames.requestFrame, + cancelFrame: frames.cancelFrame, + }); + + writer.enqueue("delayFeedback", 0.3); + frames.runFrame(); + writer.enqueue("delayFeedback", 0.5); + finishFirstWrite?.(false); + await flushMicrotasks(); + expect(failures).toEqual([]); + + frames.runFrame(); + await flushMicrotasks(); + expect(failures).toEqual([]); + + writer.enqueue("delayFeedback", 0.7); + frames.runFrame(); + await flushMicrotasks(); + expect(failures).toEqual([["delayFeedback", 0.7]]); + writer.dispose(); + }); + + it("flushes the final queued value when the panel is disposed before the next frame", async () => { + const frames = createFrameHarness(); + const writes: number[] = []; + const writer = createFrameCoalescedParamWriter({ + write: async (_paramId, value) => { + writes.push(value); + return true; + }, + requestFrame: frames.requestFrame, + cancelFrame: frames.cancelFrame, + }); + + writer.enqueue("drive", 0.25); + writer.enqueue("drive", 0.75); + writer.dispose(true); + await flushMicrotasks(); + + expect(frames.pendingFrames()).toBe(0); + expect(writes).toEqual([0.75]); + }); + + it("drains queued and in-flight parameter writes before a preset snapshot", async () => { + const frames = createFrameHarness(); + const writes: number[] = []; + let finishFirstWrite: ((ok: boolean) => void) | undefined; + const firstWrite = new Promise((resolve) => { + finishFirstWrite = resolve; + }); + const writer = createFrameCoalescedParamWriter({ + write: async (_paramId, value) => { + writes.push(value); + return writes.length === 1 ? firstWrite : true; + }, + requestFrame: frames.requestFrame, + cancelFrame: frames.cancelFrame, + }); + + writer.enqueue("reverbDecaySec", 4); + frames.runFrame(); + writer.enqueue("reverbDecaySec", 10); + const flushed = writer.flush(); + + expect(frames.pendingFrames()).toBe(0); + expect(writes).toEqual([4]); + finishFirstWrite?.(true); + await flushMicrotasks(); + + await expect(flushed).resolves.toBe(true); + expect(writes).toEqual([4, 10]); + writer.dispose(); + }); + + it("tracks immediate toggle writes and rejects a preset flush after a final native failure", async () => { + const frames = createFrameHarness(); + const failures: Array<[string, number]> = []; + const writer = createFrameCoalescedParamWriter({ + write: async () => false, + onFailure: (paramId, value) => failures.push([paramId, value]), + requestFrame: frames.requestFrame, + cancelFrame: frames.cancelFrame, + }); + + writer.writeImmediately("reverbEnabled", 1); + + await expect(writer.flush()).resolves.toBe(false); + expect(frames.pendingFrames()).toBe(0); + expect(failures).toEqual([["reverbEnabled", 1]]); + writer.dispose(); + }); + + it("restores the last confirmed native value after a final optimistic toggle write fails", () => { + const nativeOff = schemaWithParams("OpenStudio NAM Rack", "NAM", [ + toggle("reverbPad", "Pad", 0, "space"), + ]); + const reconciler = createParamWriteReconciler(nativeOff); + + reconciler.beginOptimisticWrite("reverbPad", 1, 0); + const optimisticSchema = reconciler.applyToFallbackSchema(nativeOff); + expect(optimisticSchema?.parameters[0]?.value).toBe(1); + + expect(reconciler.resolveFailedWrite("reverbPad", 1)).toEqual({ + matched: true, + rollbackValue: 0, + }); + expect(reconciler.applyToFallbackSchema(nativeOff)?.parameters[0]?.value).toBe(0); + }); + + it("does not let an older failed write roll back a newer optimistic value", () => { + const nativeOff = schemaWithParams("OpenStudio NAM Rack", "NAM", [ + toggle("reverbPad", "Pad", 0, "space"), + ]); + const reconciler = createParamWriteReconciler(nativeOff); + + reconciler.beginOptimisticWrite("reverbPad", 1, 0); + reconciler.beginOptimisticWrite("reverbPad", 0, 1); + + expect(reconciler.resolveFailedWrite("reverbPad", 1)).toEqual({ matched: false }); + expect(reconciler.applyToFallbackSchema({ + ...nativeOff, + parameters: [{ ...nativeOff.parameters[0], value: 1 }], + })?.parameters[0]?.value).toBe(0); + }); + + it("requests one-shot readback for discrete writes and accepts the returned native value", () => { + const nativeOff = schemaWithParams("OpenStudio NAM Rack", "NAM", [ + toggle("reverbPad", "Pad", 0, "space"), + choice("reverbVoice", "Voice", 0, ["Studio", "Plate"], "space"), + continuous("reverbMix", "Mix", 0.3, 0, 1, "space"), + ]); + const reconciler = createParamWriteReconciler(nativeOff); + + expect(shouldReadBackAfterParamWrite(nativeOff, "reverbPad")).toBe(true); + expect(shouldReadBackAfterParamWrite(nativeOff, "reverbVoice")).toBe(true); + expect(shouldReadBackAfterParamWrite(nativeOff, "reverbMix")).toBe(false); + + reconciler.beginOptimisticWrite("reverbPad", 1, 0); + expect(reconciler.resolveSuccessfulWrite("reverbPad", 1)).toBe(true); + const readbackSchema = reconciler.acceptNativeSchema(nativeOff); + expect(readbackSchema?.parameters[0]?.value).toBe(0); + }); + + it("rejects stale schema refreshes so an old empty rack cannot replace a loaded capture", () => { + const gate = createSchemaRequestGate(); + const emptyRackRequest = gate.begin(); + const loadedRackRequest = gate.begin(); + + expect(gate.isLatest(emptyRackRequest)).toBe(false); + expect(gate.isLatest(loadedRackRequest)).toBe(true); + + gate.invalidate(); + expect(gate.isLatest(loadedRackRequest)).toBe(false); + }); + it("classifies built-in plugin schemas and selects primary controls", () => { const drums = schema("OpenStudio Drums", "Instrument"); const reverb = schema("S13 Reverb", "Reverb"); @@ -229,15 +524,4 @@ describe("BuiltInPluginPanel schema model", () => { } }); - it("keeps responsive CSS contracts for desktop, tablet, and narrow plugin panels", () => { - const css = readFileSync(new URL("../components/FXChainPanel.css", import.meta.url), "utf8"); - - expect(css).toContain("grid-template-columns: 400px 1fr"); - expect(css).toContain("grid-template-columns: repeat(auto-fit, minmax(164px, 1fr))"); - expect(css).toContain("@media (max-width: 900px)"); - expect(css).toContain("grid-template-columns: 1fr"); - expect(css).toContain("grid-template-rows: minmax(260px, 44vh) minmax(0, 1fr)"); - expect(css).toContain("@media (max-width: 520px)"); - expect(css).toContain("height: 112px"); - }); }); diff --git a/frontend/src/__tests__/channelStripEQIntegration.test.ts b/frontend/src/__tests__/channelStripEQIntegration.test.ts new file mode 100644 index 0000000..07cd5fa --- /dev/null +++ b/frontend/src/__tests__/channelStripEQIntegration.test.ts @@ -0,0 +1,31 @@ +// @ts-nocheck -- Vitest supplies Node globals/types outside the WebView build. +import { describe, expect, it } from "vitest"; +import { readFileSync } from "node:fs"; + +const read = (relative: string) => + readFileSync(new URL(relative, import.meta.url), "utf8"); + +describe("Channel Strip EQ bridge integration", () => { + it("loads and writes EQ power, phase, DC filter, and all six packed bands", () => { + const modal = read("../components/ChannelStripEQModal.tsx"); + expect(modal).toContain("nativeBridge.getChannelStripEQEnabled(trackId)"); + expect(modal).toContain("nativeBridge.getTrackPhaseInvert(trackId)"); + expect(modal).toContain("nativeBridge.getTrackDCOffset(trackId)"); + expect(modal).toContain("nativeBridge.setChannelStripEQEnabled(trackId, next)"); + expect(modal).toContain("nativeBridge.setTrackPhaseInvert(trackId, next)"); + expect(modal).toContain("nativeBridge.setTrackDCOffset(trackId, next)"); + expect(modal).toContain("const paramIndex = bandIndex * 4 + offset"); + expect(modal).toContain("EQ_BANDS.length * 4"); + expect(modal).toContain("Promise.all(parameterReads)"); + expect(modal).toContain("EQ_BANDS.map((definition, i)"); + }); + + it("maps the packed bridge onto real S13EQ band state instead of an empty parameter list", () => { + const processor = read("../../../Source/TrackProcessor.cpp"); + expect(processor).toContain("channelStripEQBandCount * channelStripEQValuesPerBand"); + expect(processor).toContain("channelStripEQ.bands[static_cast(surfaceBand)]"); + expect(processor).not.toMatch( + /setChannelStripEQParam[\s\S]{0,800}getParameters\(\)/, + ); + }); +}); diff --git a/frontend/src/__tests__/clipAndRoutingControlTransactions.test.ts b/frontend/src/__tests__/clipAndRoutingControlTransactions.test.ts new file mode 100644 index 0000000..78e3286 --- /dev/null +++ b/frontend/src/__tests__/clipAndRoutingControlTransactions.test.ts @@ -0,0 +1,410 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import clipPropertiesSource from "../components/ClipPropertiesPanel.tsx?raw"; +import routingMatrixSource from "../components/RoutingMatrix.tsx?raw"; +import trackRoutingSource from "../components/TrackRoutingModal.tsx?raw"; +import { + beginEditTransaction, + commitEditTransaction, + createEditTransactionLifecycle, +} from "../components/ui/editTransactionLifecycle"; +import { nativeBridge } from "../services/NativeBridge"; +import { commandManager } from "../store/commands"; +import { + createDefaultTrack, + type AudioClip, + type Track, + useDAWStore, +} from "../store/useDAWStore"; + +const originalState = useDAWStore.getState(); + +function audioClip(overrides: Partial = {}): AudioClip { + return { + id: "clip", + name: "Clip", + filePath: "C:/audio/clip.wav", + startTime: 0, + duration: 4, + offset: 0, + color: "#111111", + volumeDB: -6, + fadeIn: 0.2, + fadeOut: 0.3, + ...overrides, + }; +} + +function routingTrack(overrides: Partial = {}): Track { + return { + ...createDefaultTrack("source", "Source", "#111111", "audio", []), + sends: [{ + destTrackId: "dest", + level: 0.5, + pan: -0.25, + enabled: true, + preFader: false, + phaseInvert: false, + }], + clips: [audioClip()], + ...overrides, + }; +} + +function currentClip() { + const clip = useDAWStore.getState().tracks[0]?.clips[0]; + if (!clip) throw new Error("Missing test clip"); + return clip; +} + +function currentSend() { + const send = useDAWStore.getState().tracks[0]?.sends[0]; + if (!send) throw new Error("Missing test send"); + return send; +} + +function currentTrack() { + const track = useDAWStore.getState().tracks[0]; + if (!track) throw new Error("Missing test track"); + return track; +} + +beforeEach(() => { + commandManager.clear(); + useDAWStore.setState({ + tracks: [routingTrack()], + selectedClipId: "clip", + selectedClipIds: ["clip"], + canUndo: false, + canRedo: false, + isModified: false, + }); +}); + +afterEach(() => { + vi.restoreAllMocks(); + commandManager.clear(); + useDAWStore.setState(originalState); +}); + +describe("clip property edit transactions", () => { + it("renames a clip as one project-state command without unnecessary playback resync", () => { + const syncClips = vi.fn().mockResolvedValue(undefined); + useDAWStore.setState({ syncClipsWithBackend: syncClips }); + + useDAWStore.getState().setClipName("clip", "Verse"); + expect(currentClip().name).toBe("Verse"); + expect(useDAWStore.getState().isModified).toBe(true); + expect(commandManager.getUndoStack().map((command) => command.type)) + .toEqual(["SET_CLIP_NAME"]); + expect(syncClips).not.toHaveBeenCalled(); + useDAWStore.getState().undo(); + expect(currentClip().name).toBe("Clip"); + useDAWStore.getState().redo(); + expect(currentClip().name).toBe("Verse"); + + commandManager.clear(); + useDAWStore.getState().setClipName("clip", "Verse"); + useDAWStore.getState().setClipName("missing", "Missing"); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it("groups multi-packet gain and fade edits and synchronizes commit, undo, and redo", () => { + const syncClips = vi.fn().mockResolvedValue(undefined); + useDAWStore.setState({ syncClipsWithBackend: syncClips }); + + let state = useDAWStore.getState(); + state.beginClipVolumeEdit("clip"); + state.setClipVolume("clip", -4); + state.setClipVolume("clip", -2); + expect(commandManager.getUndoStack()).toHaveLength(0); + state.commitClipVolumeEdit("clip"); + expect(currentClip().volumeDB).toBe(-2); + expect(commandManager.getUndoStack().map((command) => command.type)) + .toEqual(["SET_CLIP_VOLUME"]); + expect(syncClips).toHaveBeenCalledTimes(1); + + useDAWStore.getState().undo(); + expect(currentClip().volumeDB).toBe(-6); + expect(syncClips).toHaveBeenCalledTimes(2); + useDAWStore.getState().redo(); + expect(currentClip().volumeDB).toBe(-2); + expect(syncClips).toHaveBeenCalledTimes(3); + + commandManager.clear(); + useDAWStore.setState({ canUndo: false, canRedo: false }); + state = useDAWStore.getState(); + state.beginClipFadeEdit("clip"); + state.previewClipFades("clip", 0.4, 0.3); + state.previewClipFades("clip", 0.7, 0.8); + expect(commandManager.getUndoStack()).toHaveLength(0); + state.commitClipFadeEdit("clip"); + expect([currentClip().fadeIn, currentClip().fadeOut]).toEqual([0.7, 0.8]); + expect(commandManager.getUndoStack().map((command) => command.type)) + .toEqual(["SET_CLIP_FADES"]); + expect(syncClips).toHaveBeenCalledTimes(4); + + useDAWStore.getState().undo(); + expect([currentClip().fadeIn, currentClip().fadeOut]).toEqual([0.2, 0.3]); + useDAWStore.getState().redo(); + expect([currentClip().fadeIn, currentClip().fadeOut]).toEqual([0.7, 0.8]); + expect(syncClips).toHaveBeenCalledTimes(6); + }); + + it("makes resets discrete transactions and rejects no-op or invalid edits", () => { + const syncClips = vi.fn().mockResolvedValue(undefined); + useDAWStore.setState({ syncClipsWithBackend: syncClips }); + const state = useDAWStore.getState(); + + state.beginClipVolumeEdit("clip"); + state.setClipVolume("clip", 0); + state.commitClipVolumeEdit("clip"); + expect(currentClip().volumeDB).toBe(0); + expect(commandManager.getUndoStack()).toHaveLength(1); + + commandManager.clear(); + state.beginClipFadeEdit("clip"); + state.previewClipFades("clip", 0, 0.3); + state.commitClipFadeEdit("clip"); + expect(currentClip().fadeIn).toBe(0); + expect(commandManager.getUndoStack()).toHaveLength(1); + + commandManager.clear(); + state.beginClipFadeEdit("clip"); + state.previewClipFades("clip", 0, 0.3); + state.commitClipFadeEdit("clip"); + state.beginClipVolumeEdit("clip"); + state.setClipVolume("clip", Number.NaN); + state.commitClipVolumeEdit("clip"); + state.beginClipFadeEdit("missing"); + state.previewClipFades("missing", 1, 1); + state.commitClipFadeEdit("missing"); + expect(commandManager.getUndoStack()).toHaveLength(0); + expect(syncClips).toHaveBeenCalledTimes(2); + }); + + it("closes a cancel/unmount lifecycle exactly once with one undo command", () => { + const syncClips = vi.fn().mockResolvedValue(undefined); + useDAWStore.setState({ syncClipsWithBackend: syncClips }); + const lifecycle = createEditTransactionLifecycle(); + + expect(beginEditTransaction( + lifecycle, + () => useDAWStore.getState().beginClipVolumeEdit("clip"), + () => useDAWStore.getState().commitClipVolumeEdit("clip"), + )).toBe(true); + useDAWStore.getState().setClipVolume("clip", -1); + useDAWStore.getState().setClipVolume("clip", 2); + expect(commitEditTransaction(lifecycle)).toBe(true); + expect(commitEditTransaction(lifecycle)).toBe(false); + expect(commandManager.getUndoStack()).toHaveLength(1); + expect(currentClip().volumeDB).toBe(2); + expect(syncClips).toHaveBeenCalledTimes(1); + }); +}); + +describe("routing send edit transactions", () => { + it("groups level and pan packets separately with exact native undo/redo synchronization", async () => { + const levelBridge = vi.spyOn(nativeBridge, "setTrackSendLevel").mockResolvedValue(true); + const panBridge = vi.spyOn(nativeBridge, "setTrackSendPan").mockResolvedValue(true); + let state = useDAWStore.getState(); + + state.beginTrackSendLevelEdit("source", 0); + await state.setTrackSendLevel("source", 0, 0.6); + await state.setTrackSendLevel("source", 0, 0.8); + state.commitTrackSendLevelEdit("source", 0); + expect(currentSend().level).toBe(0.8); + expect(commandManager.getUndoStack().map((command) => command.type)) + .toEqual(["SET_TRACK_SEND_LEVEL"]); + + state = useDAWStore.getState(); + state.beginTrackSendPanEdit("source", 0); + await state.setTrackSendPan("source", 0, 0.1); + await state.setTrackSendPan("source", 0, 0.75); + state.commitTrackSendPanEdit("source", 0); + expect(currentSend().pan).toBe(0.75); + expect(commandManager.getUndoStack().map((command) => command.type)) + .toEqual(["SET_TRACK_SEND_LEVEL", "SET_TRACK_SEND_PAN"]); + + useDAWStore.getState().undo(); + expect(currentSend().pan).toBe(-0.25); + expect(panBridge).toHaveBeenLastCalledWith("source", 0, -0.25); + useDAWStore.getState().undo(); + expect(currentSend().level).toBe(0.5); + expect(levelBridge).toHaveBeenLastCalledWith("source", 0, 0.5); + useDAWStore.getState().redo(); + useDAWStore.getState().redo(); + expect([currentSend().level, currentSend().pan]).toEqual([0.8, 0.75]); + expect(levelBridge).toHaveBeenLastCalledWith("source", 0, 0.8); + expect(panBridge).toHaveBeenLastCalledWith("source", 0, 0.75); + }); + + it("tracks direct resets, clamps bounds, and skips no-op or missing sends", async () => { + const levelBridge = vi.spyOn(nativeBridge, "setTrackSendLevel").mockResolvedValue(true); + const panBridge = vi.spyOn(nativeBridge, "setTrackSendPan").mockResolvedValue(true); + + await useDAWStore.getState().setTrackSendLevel("source", 0, 4); + await useDAWStore.getState().setTrackSendPan("source", 0, -4); + expect([currentSend().level, currentSend().pan]).toEqual([1, -1]); + expect(commandManager.getUndoStack().map((command) => command.type)) + .toEqual(["SET_TRACK_SEND_LEVEL", "SET_TRACK_SEND_PAN"]); + expect(levelBridge).toHaveBeenCalledWith("source", 0, 1); + expect(panBridge).toHaveBeenCalledWith("source", 0, -1); + + commandManager.clear(); + await useDAWStore.getState().setTrackSendLevel("source", 0, 1); + await useDAWStore.getState().setTrackSendPan("source", 0, Number.NaN); + await useDAWStore.getState().setTrackSendLevel("missing", 0, 0.2); + await useDAWStore.getState().setTrackSendPan("source", 5, 0.2); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it("closes cancellation/unmount once and drops a transaction whose send disappeared", async () => { + vi.spyOn(nativeBridge, "setTrackSendLevel").mockResolvedValue(true); + const lifecycle = createEditTransactionLifecycle(); + expect(beginEditTransaction( + lifecycle, + () => useDAWStore.getState().beginTrackSendLevelEdit("source", 0), + () => useDAWStore.getState().commitTrackSendLevelEdit("source", 0), + )).toBe(true); + await useDAWStore.getState().setTrackSendLevel("source", 0, 0.75); + expect(commitEditTransaction(lifecycle)).toBe(true); + expect(commitEditTransaction(lifecycle)).toBe(false); + expect(commandManager.getUndoStack()).toHaveLength(1); + + commandManager.clear(); + useDAWStore.getState().beginTrackSendLevelEdit("source", 0); + await useDAWStore.getState().setTrackSendLevel("source", 0, 0.9); + useDAWStore.setState((state) => ({ + tracks: state.tracks.map((track) => track.id === "source" + ? { ...track, sends: [] } + : track), + })); + useDAWStore.getState().commitTrackSendLevelEdit("source", 0); + expect(commandManager.getUndoStack()).toHaveLength(0); + + useDAWStore.setState({ tracks: [routingTrack()] }); + const state = useDAWStore.getState(); + state.beginTrackSendLevelEdit("source", 0); + await state.setTrackSendLevel("source", 0, 0.7); + state.commitTrackSendLevelEdit("source", 0); + expect(commandManager.getUndoStack()).toHaveLength(1); + }); + + it("groups the modal track pan and stereo-width controls with exact backend replay", async () => { + const panBridge = vi.spyOn(nativeBridge, "setTrackPan").mockResolvedValue(true); + const widthBridge = vi.spyOn(nativeBridge, "setTrackStereoWidth").mockResolvedValue(true); + let state = useDAWStore.getState(); + + state.beginTrackPanEdit("source"); + await state.setTrackPan("source", 0.2); + await state.setTrackPan("source", 0.6); + state.commitTrackPanEdit("source"); + expect(currentTrack().pan).toBe(0.6); + expect(commandManager.getUndoStack().map((command) => command.type)) + .toEqual(["SET_TRACK_PAN"]); + expect(panBridge).toHaveBeenCalledTimes(2); + + state = useDAWStore.getState(); + state.beginTrackStereoWidthEdit("source"); + await state.setTrackStereoWidth("source", 125); + await state.setTrackStereoWidth("source", 150); + state.commitTrackStereoWidthEdit("source"); + expect(currentTrack().stereoWidth).toBe(150); + expect(commandManager.getUndoStack().map((command) => command.type)) + .toEqual(["SET_TRACK_PAN", "SET_TRACK_STEREO_WIDTH"]); + expect(widthBridge).toHaveBeenCalledTimes(2); + + useDAWStore.getState().undo(); + expect(currentTrack().stereoWidth).toBe(100); + expect(widthBridge).toHaveBeenLastCalledWith("source", 100); + useDAWStore.getState().undo(); + expect(currentTrack().pan).toBe(0); + expect(panBridge).toHaveBeenLastCalledWith("source", 0); + useDAWStore.getState().redo(); + useDAWStore.getState().redo(); + expect([currentTrack().pan, currentTrack().stereoWidth]).toEqual([0.6, 150]); + expect(panBridge).toHaveBeenLastCalledWith("source", 0.6); + expect(widthBridge).toHaveBeenLastCalledWith("source", 150); + }); + + it("commits a typed track dB value once and skips unchanged or invalid control values", async () => { + const volumeBridge = vi.spyOn(nativeBridge, "setTrackVolume").mockResolvedValue(true); + const widthBridge = vi.spyOn(nativeBridge, "setTrackStereoWidth").mockResolvedValue(true); + const state = useDAWStore.getState(); + + state.beginTrackVolumeEdit("source"); + await state.setTrackVolume("source", -12); + state.commitTrackVolumeEdit("source"); + expect(currentTrack().volumeDB).toBe(-12); + expect(commandManager.getUndoStack().map((command) => command.type)) + .toEqual(["SET_TRACK_VOLUME"]); + expect(volumeBridge).toHaveBeenCalledTimes(1); + useDAWStore.getState().undo(); + expect(currentTrack().volumeDB).toBe(0); + useDAWStore.getState().redo(); + expect(currentTrack().volumeDB).toBe(-12); + + commandManager.clear(); + const volumeCalls = volumeBridge.mock.calls.length; + state.beginTrackVolumeEdit("source"); + await state.setTrackVolume("source", -12); + state.commitTrackVolumeEdit("source"); + state.beginTrackVolumeEdit("source"); + await state.setTrackVolume("source", Number.NaN); + state.commitTrackVolumeEdit("source"); + state.beginTrackStereoWidthEdit("source"); + await state.setTrackStereoWidth("source", 100); + state.commitTrackStereoWidthEdit("source"); + expect(commandManager.getUndoStack()).toHaveLength(0); + expect(volumeBridge).toHaveBeenCalledTimes(volumeCalls); + expect(widthBridge).not.toHaveBeenCalled(); + }); +}); + +describe("clip and routing control wiring", () => { + it("wires Clip Properties to stable begin/live/commit callbacks and reset defaults", () => { + expect(clipPropertiesSource).toContain("function ClipNameField("); + expect(clipPropertiesSource).toContain("useDAWStore.getState().setClipName(clipId, nextName)"); + expect(clipPropertiesSource).toContain('event.key === "Enter"'); + expect(clipPropertiesSource).toContain('event.key === "Escape"'); + expect(clipPropertiesSource).toContain(''); + expect(clipPropertiesSource).not.toContain("useDAWStore.setState((s) =>"); + expect(clipPropertiesSource).toContain("const beginVolumeEdit = useCallback"); + expect(clipPropertiesSource).toContain("const changeFadeIn = useCallback"); + expect(clipPropertiesSource).toContain("const changeFadeOut = useCallback"); + expect(clipPropertiesSource).toContain("onBeginEdit={beginVolumeEdit}"); + expect(clipPropertiesSource).toContain("onCommitEdit={commitVolumeEdit}"); + expect(clipPropertiesSource).toContain("onBeginEdit={beginFadeEdit}"); + expect(clipPropertiesSource).toContain("onCommitEdit={commitFadeEdit}"); + expect(clipPropertiesSource).toContain("previewClipFades(clipId, fadeIn, latestClip.fadeOut)"); + expect(clipPropertiesSource).toContain("previewClipFades(clipId, latestClip.fadeIn, fadeOut)"); + expect(clipPropertiesSource.match(/defaultValue=\{0\}/g)).toHaveLength(3); + expect(clipPropertiesSource).not.toContain("setClipFades(clip!"); + }); + + it("wires Routing Matrix and both routing-modal directions through shared transactions", () => { + expect(routingMatrixSource).toContain("const handleLevelEditBegin = useCallback"); + expect(routingMatrixSource).toContain("const handleLevelEditCommit = useCallback"); + expect(routingMatrixSource).toContain("onBeginEdit={handleLevelEditBegin}"); + expect(routingMatrixSource).toContain("onCommitEdit={handleLevelEditCommit}"); + expect(routingMatrixSource).toContain("defaultValue={50}"); + + expect(trackRoutingSource).toContain("function SendLevelSlider("); + expect(trackRoutingSource).toContain("function SendPanSlider("); + expect(trackRoutingSource).toContain("function TrackPanSlider("); + expect(trackRoutingSource).toContain("function TrackStereoWidthSlider("); + expect(trackRoutingSource).toContain("function TrackVolumeDbField("); + expect(trackRoutingSource).toContain("onBeginEdit={beginEdit}"); + expect(trackRoutingSource).toContain("onCommitEdit={commitEdit}"); + expect(trackRoutingSource.match(/'); + expect(trackRoutingSource).toContain(''); + expect(trackRoutingSource).toContain(''); + expect(trackRoutingSource).toContain('event.key === "Enter"'); + expect(trackRoutingSource).toContain('event.key === "Escape"'); + expect(trackRoutingSource).toContain("useDAWStore.getState().commitTrackVolumeEdit(trackId)"); + expect(trackRoutingSource).not.toContain("dbToLinear"); + expect(trackRoutingSource).not.toMatch(/onChange=\{\(e\) => setTrackSend(Level|Pan)/); + }); +}); diff --git a/frontend/src/__tests__/clipNormalization.test.ts b/frontend/src/__tests__/clipNormalization.test.ts new file mode 100644 index 0000000..ed823b3 --- /dev/null +++ b/frontend/src/__tests__/clipNormalization.test.ts @@ -0,0 +1,344 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { nativeBridge } from "../services/NativeBridge"; +import { getRegisteredAction } from "../store/actionRegistry"; +import { commandManager } from "../store/commands"; +import { + createDefaultTrack, + type AudioClip, + type MIDIClip, + type Track, + useDAWStore, +} from "../store/useDAWStore"; +import { dispatchGlobalShortcut } from "../utils/globalShortcutDispatcher"; +import { + activateShortcutContext, + resetShortcutContextForTests, +} from "../utils/shortcutContext"; +import type { KeyboardShortcutProfileId } from "../utils/shortcutProfiles"; +import type { ShortcutPlatform } from "../utils/platform"; + +const originalState = useDAWStore.getState(); + +function audioClip(id: string, overrides: Partial = {}): AudioClip { + return { + id, + filePath: `C:/audio/${id}.wav`, + name: id, + startTime: 0, + duration: 2, + offset: 0, + color: "#123456", + volumeDB: 0, + fadeIn: 0, + fadeOut: 0, + ...overrides, + }; +} + +function midiClip(id: string): MIDIClip { + return { + id, + name: id, + startTime: 0, + duration: 2, + sourceLength: 2, + loopLength: 2, + events: [], + ccEvents: [], + color: "#654321", + }; +} + +function track(id: string, clips: AudioClip[] = [], midiClips: MIDIClip[] = []): Track { + return { + ...createDefaultTrack(id, id, "#222222", "audio", []), + clips, + midiClips, + }; +} + +function currentAudioClip(id: string): AudioClip | undefined { + return useDAWStore.getState().tracks.flatMap((candidate) => candidate.clips) + .find((clip) => clip.id === id); +} + +beforeEach(() => { + commandManager.clear(); + resetShortcutContextForTests(); + useDAWStore.setState({ + tracks: [], + selectedClipId: null, + selectedClipIds: [], + selectedTrackId: null, + selectedTrackIds: [], + keyboardShortcutProfileId: "openstudio", + customShortcuts: {}, + canUndo: false, + canRedo: false, + isModified: false, + syncClipsWithBackend: vi.fn(async () => {}), + }); +}); + +afterEach(() => { + vi.restoreAllMocks(); + commandManager.clear(); + resetShortcutContextForTests(); + useDAWStore.setState(originalState); +}); + +describe("selected audio clip peak normalization", () => { + it("analyzes each exact trimmed range and atomically normalizes only eligible audio", async () => { + const first = audioClip("first", { offset: 1.25, duration: 2.5, volumeDB: -3 }); + const second = audioClip("second", { offset: 0.5, duration: 1, volumeDB: 4 }); + const locked = audioClip("locked", { locked: true, volumeDB: -8 }); + const invalid = audioClip("invalid", { duration: 0, volumeDB: -9 }); + const midi = midiClip("midi"); + useDAWStore.setState({ + tracks: [track("track", [first, second, locked, invalid], [midi])], + selectedClipId: first.id, + selectedClipIds: [first.id, second.id, locked.id, invalid.id, midi.id], + }); + const peak = vi.spyOn(nativeBridge, "getAudioPeakAmplitude") + .mockResolvedValueOnce(0.5) + .mockResolvedValueOnce(2); + const sync = useDAWStore.getState().syncClipsWithBackend as ReturnType; + + await expect(useDAWStore.getState().normalizeSelectedClips()).resolves.toBe(true); + + expect(peak.mock.calls).toEqual([ + [first.filePath, 1.25, 2.5], + [second.filePath, 0.5, 1], + ]); + expect(currentAudioClip(first.id)?.volumeDB).toBeCloseTo(6.020599913, 8); + expect(currentAudioClip(second.id)?.volumeDB).toBeCloseTo(-6.020599913, 8); + expect(currentAudioClip(locked.id)?.volumeDB).toBe(-8); + expect(currentAudioClip(invalid.id)?.volumeDB).toBe(-9); + expect(commandManager.getUndoStack()).toHaveLength(1); + expect(sync).toHaveBeenCalledTimes(1); + + useDAWStore.getState().undo(); + expect(currentAudioClip(first.id)?.volumeDB).toBe(-3); + expect(currentAudioClip(second.id)?.volumeDB).toBe(4); + expect(sync).toHaveBeenCalledTimes(2); + + useDAWStore.getState().redo(); + expect(currentAudioClip(first.id)?.volumeDB).toBeCloseTo(6.020599913, 8); + expect(currentAudioClip(second.id)?.volumeDB).toBeCloseTo(-6.020599913, 8); + expect(sync).toHaveBeenCalledTimes(3); + expect(commandManager.getUndoStack()).toHaveLength(1); + }); + + it("clamps extreme gain, accepts the primary-selection fallback, and skips silent or missing files", async () => { + const quiet = audioClip("quiet"); + useDAWStore.setState({ + tracks: [track("track", [quiet])], + selectedClipId: quiet.id, + selectedClipIds: [], + }); + vi.spyOn(nativeBridge, "getAudioPeakAmplitude").mockResolvedValue(0.001); + await expect(useDAWStore.getState().normalizeSelectedClips()).resolves.toBe(true); + expect(currentAudioClip(quiet.id)?.volumeDB).toBe(12); + + commandManager.clear(); + useDAWStore.setState({ canUndo: false, canRedo: false }); + vi.mocked(nativeBridge.getAudioPeakAmplitude).mockResolvedValue(0); + await expect(useDAWStore.getState().normalizeSelectedClips()).resolves.toBe(false); + expect(currentAudioClip(quiet.id)?.volumeDB).toBe(12); + expect(commandManager.canUndo()).toBe(false); + + vi.mocked(nativeBridge.getAudioPeakAmplitude).mockResolvedValue(null); + await expect(useDAWStore.getState().normalizeSelectedClips()).resolves.toBe(false); + expect(commandManager.canUndo()).toBe(false); + + vi.mocked(nativeBridge.getAudioPeakAmplitude).mockResolvedValue(10000); + await expect(useDAWStore.getState().normalizeSelectedClips()).resolves.toBe(true); + expect(currentAudioClip(quiet.id)?.volumeDB).toBe(-60); + }); + + it("does not create history when the calculated gain is already applied", async () => { + const normalized = audioClip("normalized", { volumeDB: 0 }); + useDAWStore.setState({ + tracks: [track("track", [normalized])], + selectedClipId: normalized.id, + selectedClipIds: [normalized.id], + }); + vi.spyOn(nativeBridge, "getAudioPeakAmplitude").mockResolvedValue(1); + + await expect(useDAWStore.getState().normalizeSelectedClips()).resolves.toBe(false); + expect(commandManager.canUndo()).toBe(false); + expect(useDAWStore.getState().syncClipsWithBackend).not.toHaveBeenCalled(); + }); + + it("skips a clip changed while analysis is pending", async () => { + let resolvePeak: (peak: number | null) => void = () => {}; + const pendingPeak = new Promise((resolve) => { resolvePeak = resolve; }); + const clip = audioClip("changed", { offset: 1 }); + useDAWStore.setState({ + tracks: [track("track", [clip])], + selectedClipId: clip.id, + selectedClipIds: [clip.id], + }); + vi.spyOn(nativeBridge, "getAudioPeakAmplitude").mockReturnValue(pendingPeak); + + const normalization = useDAWStore.getState().normalizeSelectedClips(); + useDAWStore.setState((state) => ({ + tracks: state.tracks.map((candidate) => ({ + ...candidate, + clips: candidate.clips.map((entry) => entry.id === clip.id + ? { ...entry, offset: 1.5 } + : entry), + })), + })); + resolvePeak(0.5); + + await expect(normalization).resolves.toBe(false); + expect(currentAudioClip(clip.id)?.offset).toBe(1.5); + expect(currentAudioClip(clip.id)?.volumeDB).toBe(0); + expect(commandManager.canUndo()).toBe(false); + }); + + it("does not apply a result to a clip removed from the selection while analysis is pending", async () => { + let resolvePeak: (peak: number | null) => void = () => {}; + const pendingPeak = new Promise((resolve) => { resolvePeak = resolve; }); + const clip = audioClip("deselected"); + useDAWStore.setState({ + tracks: [track("track", [clip])], + selectedClipId: clip.id, + selectedClipIds: [clip.id], + }); + vi.spyOn(nativeBridge, "getAudioPeakAmplitude").mockReturnValue(pendingPeak); + + const normalization = useDAWStore.getState().normalizeSelectedClips(); + useDAWStore.setState({ selectedClipId: null, selectedClipIds: [] }); + resolvePeak(0.5); + + await expect(normalization).resolves.toBe(false); + expect(currentAudioClip(clip.id)?.volumeDB).toBe(0); + expect(commandManager.canUndo()).toBe(false); + }); + + it("lets only the latest overlapping request mutate the same clip", async () => { + let resolveFirst: (peak: number | null) => void = () => {}; + let resolveSecond: (peak: number | null) => void = () => {}; + const firstPeak = new Promise((resolve) => { resolveFirst = resolve; }); + const secondPeak = new Promise((resolve) => { resolveSecond = resolve; }); + const clip = audioClip("race"); + useDAWStore.setState({ + tracks: [track("track", [clip])], + selectedClipId: clip.id, + selectedClipIds: [clip.id], + }); + vi.spyOn(nativeBridge, "getAudioPeakAmplitude") + .mockReturnValueOnce(firstPeak) + .mockReturnValueOnce(secondPeak); + + const firstRequest = useDAWStore.getState().normalizeSelectedClips(); + const secondRequest = useDAWStore.getState().normalizeSelectedClips(); + resolveSecond(0.5); + await expect(secondRequest).resolves.toBe(true); + resolveFirst(0.25); + await expect(firstRequest).resolves.toBe(false); + + expect(currentAudioClip(clip.id)?.volumeDB).toBeCloseTo(6.020599913, 8); + expect(commandManager.getUndoStack()).toHaveLength(1); + }); +}); + +describe("normalization shortcut profiles", () => { + const cases: Array<{ + profile: KeyboardShortcutProfileId; + platform: ShortcutPlatform; + event: { key: string; code: string; ctrlKey?: boolean; metaKey?: boolean; altKey?: boolean }; + }> = [ + { profile: "reaper", platform: "windows", event: { key: "n", code: "KeyN" } }, + { profile: "reaper", platform: "macos", event: { key: "n", code: "KeyN" } }, + { profile: "studio_one", platform: "windows", event: { key: "n", code: "KeyN", altKey: true } }, + { profile: "studio_one", platform: "macos", event: { key: "n", code: "KeyN", altKey: true } }, + { profile: "mixcraft", platform: "windows", event: { key: "k", code: "KeyK", ctrlKey: true } }, + { profile: "mixcraft", platform: "macos", event: { key: "k", code: "KeyK", metaKey: true } }, + ]; + + it.each(cases)("dispatches $profile peak normalization on $platform", ({ profile, platform, event }) => { + const clip = audioClip("dispatch"); + useDAWStore.setState({ + tracks: [track("track", [clip])], + selectedClipId: clip.id, + selectedClipIds: [clip.id], + keyboardShortcutProfileId: profile, + }); + activateShortcutContext({ kind: "timeline" }); + const actionIds: string[] = []; + const preventDefault = vi.fn(); + + expect(dispatchGlobalShortcut( + { ...event, preventDefault, source: "clip-normalization-test" }, + platform, + { executeAction: (action) => actionIds.push(action.id) }, + )).toBe(true); + expect(actionIds).toEqual(["edit.normalizeClips"]); + expect(preventDefault).toHaveBeenCalledOnce(); + }); + + it("is timeline-only and unavailable for global/item/clip locks, frozen tracks, MIDI-only, or invalid selections", () => { + const locked = audioClip("locked", { locked: true }); + const midi = midiClip("midi"); + useDAWStore.setState({ + tracks: [track("track", [locked], [midi])], + selectedClipId: locked.id, + selectedClipIds: [locked.id, midi.id], + }); + const action = getRegisteredAction("edit.normalizeClips")!; + const executeAction = vi.fn(); + const expectShortcutUnavailable = () => { + activateShortcutContext({ kind: "timeline" }); + useDAWStore.setState({ keyboardShortcutProfileId: "reaper" }); + expect(dispatchGlobalShortcut( + { key: "n", code: "KeyN", source: "clip-normalization-lock-test" }, + "windows", + { executeAction }, + )).toBe(false); + expect(executeAction).not.toHaveBeenCalled(); + }; + expect(action.shortcutScope).toBe("timeline"); + expect(action.canHandleShortcut?.()).toBe(false); + expectShortcutUnavailable(); + + const valid = audioClip("valid"); + const validTrack = track("track", [valid]); + useDAWStore.setState({ + tracks: [validTrack], + selectedClipId: valid.id, + selectedClipIds: [valid.id], + globalLocked: true, + }); + expect(action.canHandleShortcut?.()).toBe(false); + expectShortcutUnavailable(); + useDAWStore.setState({ + globalLocked: false, + lockSettings: { ...useDAWStore.getState().lockSettings, items: true }, + }); + expect(action.canHandleShortcut?.()).toBe(false); + expectShortcutUnavailable(); + useDAWStore.setState({ + lockSettings: { ...useDAWStore.getState().lockSettings, items: false }, + tracks: [{ ...validTrack, frozen: true }], + }); + expect(action.canHandleShortcut?.()).toBe(false); + expectShortcutUnavailable(); + + useDAWStore.setState({ + tracks: [track("track", [audioClip("valid")])], + selectedClipId: "valid", + selectedClipIds: ["valid"], + }); + expect(action.canHandleShortcut?.()).toBe(true); + activateShortcutContext({ kind: "mixer" }); + useDAWStore.setState({ keyboardShortcutProfileId: "reaper" }); + expect(dispatchGlobalShortcut( + { key: "n", code: "KeyN", source: "clip-normalization-test" }, + "windows", + { executeAction: () => { throw new Error("must not dispatch"); } }, + )).toBe(false); + }); +}); diff --git a/frontend/src/__tests__/clipNormalizationNativeContract.test.ts b/frontend/src/__tests__/clipNormalizationNativeContract.test.ts new file mode 100644 index 0000000..bac6b65 --- /dev/null +++ b/frontend/src/__tests__/clipNormalizationNativeContract.test.ts @@ -0,0 +1,28 @@ +import { describe, expect, it } from "vitest"; +import audioEngineHeader from "../../../Source/AudioEngine.h?raw"; +import audioEngineSource from "../../../Source/AudioEngine.cpp?raw"; +import mainComponentHeader from "../../../Source/MainComponent.h?raw"; +import mainComponentSource from "../../../Source/MainComponent.cpp?raw"; +import nativeBridgeSource from "../services/NativeBridge.ts?raw"; + +describe("clip normalization native contract", () => { + it("exposes an asynchronous exact-range peak bridge from TypeScript through JUCE", () => { + expect(nativeBridgeSource).toContain("getAudioPeakAmplitude?: ("); + expect(nativeBridgeSource).toContain("window.__JUCE__.backend.getAudioPeakAmplitude("); + expect(mainComponentSource).toContain('.withNativeFunction ("getAudioPeakAmplitude"'); + expect(mainComponentSource).toContain("clipPeakAnalysisPool.addJob"); + expect(mainComponentSource).toContain("audioEngine.getAudioPeakAmplitude("); + expect(mainComponentHeader).toContain("juce::ThreadPool clipPeakAnalysisPool"); + expect(audioEngineHeader).toContain("double getAudioPeakAmplitude(const juce::String& filePath"); + }); + + it("reads the trimmed sample window in blocks and inspects every channel", () => { + expect(audioEngineSource).toContain("std::floor(exactStart)"); + expect(audioEngineSource).toContain("std::ceil(juce::jmin("); + expect(audioEngineSource).toContain("for (juce::int64 blockStart = startSample; blockStart < endSample;)"); + expect(audioEngineSource).toContain("for (int channel = 0; channel < numChannels; ++channel)"); + expect(audioEngineSource).toContain("for (int sample = 0; sample < samplesThisBlock; ++sample)"); + expect(audioEngineSource).toContain("peak = juce::jmax(peak, static_cast(std::abs(value)))"); + expect(audioEngineSource).toContain("if (! std::isfinite(value))"); + }); +}); diff --git a/frontend/src/__tests__/commandSurfaceReachability.test.ts b/frontend/src/__tests__/commandSurfaceReachability.test.ts new file mode 100644 index 0000000..bfef318 --- /dev/null +++ b/frontend/src/__tests__/commandSurfaceReachability.test.ts @@ -0,0 +1,460 @@ +import { afterEach, describe, expect, it, vi } from "vitest"; +import { + executeActiveScopedAction, + getActionShortcutScopes, + getRegisteredAction, + registerScopedActionExecutor, +} from "../store/actionRegistry"; +import { useDAWStore } from "../store/useDAWStore"; +import { + dispatchGlobalShortcut, + matchesActionShortcut, + resolveRegistryShortcutAction, +} from "../utils/globalShortcutDispatcher"; +import { + registerModalShortcutScope, + registerTransientOverlayShortcutScope, + routeModalShortcutEvent, +} from "../utils/modalShortcutScope"; +import { getProfileActionBindings } from "../utils/shortcutProfiles"; +import { + activateShortcutContext, + getActiveShortcutContext, + resetShortcutContextForTests, +} from "../utils/shortcutContext"; +import { getShortcutPlatform } from "../utils/platform"; + +const cleanup: Array<() => void> = []; +const originalInputState = { + keyboardShortcutProfileId: useDAWStore.getState().keyboardShortcutProfileId, + customShortcuts: useDAWStore.getState().customShortcuts, +}; + +function hostPrimaryModifier(): { ctrlKey: true } | { metaKey: true } { + return getShortcutPlatform() === "macos" ? { metaKey: true } : { ctrlKey: true }; +} + +class ShortcutTestTarget extends EventTarget { + constructor(private readonly editable = false) { + super(); + } + + closest(): object | null { + return this.editable ? {} : null; + } +} + +function createShortcutEvent( + key: string, + modifiers: { ctrlKey?: boolean; metaKey?: boolean; altKey?: boolean; shiftKey?: boolean } = {}, +): Event { + const event = new Event("keydown", { bubbles: true, cancelable: true }); + Object.defineProperties(event, { + key: { value: key }, + code: { value: key }, + ctrlKey: { value: Boolean(modifiers.ctrlKey) }, + metaKey: { value: Boolean(modifiers.metaKey) }, + altKey: { value: Boolean(modifiers.altKey) }, + shiftKey: { value: Boolean(modifiers.shiftKey) }, + }); + return event; +} + +afterEach(() => { + while (cleanup.length > 0) cleanup.pop()?.(); + resetShortcutContextForTests(); + useDAWStore.setState(originalInputState); + vi.restoreAllMocks(); +}); + +describe("visible component command reachability", () => { + it("registers each newly audited command in its owning surface", () => { + const expected = new Map([ + ["modal.close", "modal"], + ["script.runCurrent", "modal"], + ["script.saveCurrent", "modal"], + ["script.clearConsole", "modal"], + ["script.refreshFiles", "modal"], + ["script.openFolder", "modal"], + ["script.showEditorTab", "modal"], + ["script.showFilesTab", "modal"], + ["browser.close", "browser"], + ["fx.close", "plugin"], + ["mixer.close", "mixer"], + ]); + + for (const [actionId, scope] of expected) { + const action = getRegisteredAction(actionId); + expect(action, actionId).toBeDefined(); + expect(getActionShortcutScopes(action!), actionId).toContain(scope); + } + expect(getRegisteredAction("modal.close")?.shortcut).toBe("Esc"); + expect(getRegisteredAction("script.runCurrent")?.shortcut).toBe("Ctrl+Enter"); + expect(getRegisteredAction("browser.close")?.shortcut).toBeUndefined(); + expect(getRegisteredAction("fx.close")?.shortcut).toBeUndefined(); + expect(getRegisteredAction("mixer.close")?.shortcut).toBeUndefined(); + }); + + it("closes only the top nested modal and restores the exact previous owner", () => { + activateShortcutContext({ kind: "timeline" }); + const outerClose = vi.fn(); + const innerClose = vi.fn(); + const unregisterOuter = registerModalShortcutScope(outerClose); + cleanup.push(unregisterOuter); + const unregisterInner = registerModalShortcutScope(innerClose); + cleanup.push(unregisterInner); + + expect(getActiveShortcutContext()).toEqual({ kind: "modal" }); + expect(executeActiveScopedAction("modal.close")).toBe("handled"); + expect(innerClose).toHaveBeenCalledTimes(1); + expect(outerClose).not.toHaveBeenCalled(); + + cleanup.pop()?.(); + expect(getActiveShortcutContext()).toEqual({ kind: "modal" }); + expect(executeActiveScopedAction("modal.close")).toBe("handled"); + expect(outerClose).toHaveBeenCalledTimes(1); + + cleanup.pop()?.(); + expect(getActiveShortcutContext()).toEqual({ kind: "timeline" }); + }); + + it("does not leak a blocked top-modal close command to the dialog underneath", () => { + const outerClose = vi.fn(); + const innerClose = vi.fn(); + cleanup.push(registerModalShortcutScope(outerClose)); + cleanup.push(registerModalShortcutScope(innerClose, { canClose: () => false })); + + expect(executeActiveScopedAction("modal.close")).toBe("claimed_noop"); + expect(innerClose).not.toHaveBeenCalled(); + expect(outerClose).not.toHaveBeenCalled(); + }); + + it("gives a nested transient overlay one close command and restores its underlay", () => { + useDAWStore.setState({ keyboardShortcutProfileId: "openstudio", customShortcuts: {} }); + const target = new ShortcutTestTarget(); + const outerClose = vi.fn(); + const innerClose = vi.fn(); + const unregisterOuter = registerTransientOverlayShortcutScope(outerClose, { eventTarget: target }); + cleanup.push(unregisterOuter); + const unregisterInner = registerTransientOverlayShortcutScope(innerClose, { eventTarget: target }); + cleanup.push(unregisterInner); + + target.dispatchEvent(createShortcutEvent("Escape")); + expect(innerClose).toHaveBeenCalledTimes(1); + expect(outerClose).not.toHaveBeenCalled(); + + cleanup.pop()?.(); + target.dispatchEvent(createShortcutEvent("Escape")); + expect(outerClose).toHaveBeenCalledTimes(1); + }); + + it("honors transient close unbinding and an editable rebound command", () => { + const close = vi.fn(); + const editableTarget = new ShortcutTestTarget(true); + useDAWStore.setState({ + keyboardShortcutProfileId: "openstudio", + customShortcuts: { + "modal.close": { windows: [], macos: [] }, + }, + }); + cleanup.push(registerTransientOverlayShortcutScope(close, { eventTarget: editableTarget })); + + const unassignedEscape = createShortcutEvent("Escape"); + editableTarget.dispatchEvent(unassignedEscape); + expect(close).not.toHaveBeenCalled(); + expect(unassignedEscape.defaultPrevented).toBe(false); + + cleanup.pop()?.(); + useDAWStore.setState({ + customShortcuts: { + "modal.close": { windows: ["Control+F9"], macos: ["Command+F9"] }, + }, + }); + cleanup.push(registerTransientOverlayShortcutScope(close, { eventTarget: editableTarget })); + editableTarget.dispatchEvent(createShortcutEvent("Escape")); + expect(close).not.toHaveBeenCalled(); + + const rebound = createShortcutEvent("F9", hostPrimaryModifier()); + editableTarget.dispatchEvent(rebound); + expect(close).toHaveBeenCalledTimes(1); + expect(rebound.defaultPrevented).toBe(true); + }); + + it("preserves a native editable chord even when assigned to transient close", () => { + const close = vi.fn(); + const editableTarget = new ShortcutTestTarget(true); + useDAWStore.setState({ + keyboardShortcutProfileId: "openstudio", + customShortcuts: { + "modal.close": { windows: ["Control+C"], macos: ["Command+C"] }, + }, + }); + cleanup.push(registerTransientOverlayShortcutScope(close, { eventTarget: editableTarget })); + + const copy = createShortcutEvent("c", hostPrimaryModifier()); + editableTarget.dispatchEvent(copy); + expect(close).not.toHaveBeenCalled(); + expect(copy.defaultPrevented).toBe(false); + }); + + it("does not let a Script Editor binding consume keys in an unrelated modal", () => { + cleanup.push(registerModalShortcutScope(vi.fn())); + expect(getRegisteredAction("modal.close")?.canHandleShortcut?.()).toBe(true); + expect(getRegisteredAction("script.runCurrent")?.canHandleShortcut?.()).toBe(false); + + const run = vi.fn(() => "handled" as const); + cleanup.push(registerScopedActionExecutor( + { kind: "modal" }, + run, + ["script.runCurrent"], + )); + expect(getRegisteredAction("script.runCurrent")?.canHandleShortcut?.()).toBe(true); + getRegisteredAction("script.runCurrent")?.execute(); + expect(run).toHaveBeenCalledWith("script.runCurrent"); + }); + + it("does not consume a plug-in command unless the exact active owner advertises it", () => { + const builtInOwner = vi.fn((actionId: string) => ( + actionId === "fx.close" ? "handled" as const : "unmatched" as const + )); + cleanup.push(registerScopedActionExecutor( + { kind: "plugin", sessionId: "builtin-editor" }, + builtInOwner, + ["fx.close"], + )); + activateShortcutContext({ kind: "plugin", sessionId: "builtin-editor" }); + useDAWStore.setState({ + keyboardShortcutProfileId: "openstudio", + customShortcuts: { + "fx.add": { windows: ["Control+F8"], macos: ["Command+F8"] }, + }, + }); + const event = { key: "F8", code: "F8", ctrlKey: true }; + + expect(getRegisteredAction("fx.add")?.canHandleShortcut?.()).toBe(false); + expect(resolveRegistryShortcutAction(event, "windows")).toBeNull(); + expect(dispatchGlobalShortcut({ ...event, source: "browser" }, "windows")).toBe(false); + expect(builtInOwner).not.toHaveBeenCalled(); + + const chainOwner = vi.fn(() => "handled" as const); + cleanup.push(registerScopedActionExecutor( + { kind: "plugin", sessionId: "builtin-editor" }, + chainOwner, + ["fx.add"], + )); + expect(getRegisteredAction("fx.add")?.canHandleShortcut?.()).toBe(true); + expect(dispatchGlobalShortcut({ ...event, source: "browser" }, "windows")).toBe(true); + expect(chainOwner).toHaveBeenCalledWith("fx.add"); + }); + + it("leaves editable Escape to the dialog and dispatches non-editable Escape once", () => { + const close = vi.fn(); + cleanup.push(registerModalShortcutScope(close)); + + expect(dispatchGlobalShortcut({ + key: "Escape", + code: "Escape", + source: "browser", + targetIsEditable: true, + }, "windows")).toBe(false); + expect(close).not.toHaveBeenCalled(); + + const preventDefault = vi.fn(); + const stopImmediatePropagation = vi.fn(); + expect(dispatchGlobalShortcut({ + key: "Escape", + code: "Escape", + source: "browser", + targetIsEditable: false, + preventDefault, + stopImmediatePropagation, + }, "windows")).toBe(true); + expect(close).toHaveBeenCalledTimes(1); + expect(preventDefault).toHaveBeenCalledTimes(1); + expect(stopImmediatePropagation).toHaveBeenCalledTimes(1); + }); + + it("routes editable modal close locally without double-firing and honors close blocking", () => { + const close = vi.fn(); + cleanup.push(registerModalShortcutScope(close)); + const editableTarget = { + closest: vi.fn(() => ({})), + } as unknown as EventTarget; + const preventDefault = vi.fn(); + const stopImmediatePropagation = vi.fn(); + + const routed = routeModalShortcutEvent({ + key: "Escape", + code: "Escape", + target: editableTarget, + preventDefault, + stopImmediatePropagation, + }, "windows"); + + expect(routed).toEqual({ + matched: true, + preservedEditableCommand: false, + result: "handled", + suppressedHeadlessEscape: true, + }); + expect(close).toHaveBeenCalledTimes(1); + expect(preventDefault).toHaveBeenCalledTimes(1); + expect(stopImmediatePropagation).toHaveBeenCalledTimes(1); + + cleanup.pop()?.(); + cleanup.push(registerModalShortcutScope(close, { canClose: () => false })); + expect(routeModalShortcutEvent({ + key: "Escape", + code: "Escape", + target: editableTarget, + }, "windows").result).toBe("claimed_noop"); + expect(close).toHaveBeenCalledTimes(1); + }); + + it("preserves an editable unmatched Escape and suppresses Headless UI raw close", () => { + const close = vi.fn(); + cleanup.push(registerModalShortcutScope(close)); + useDAWStore.setState({ + customShortcuts: { + "modal.close": { + windows: [], + macos: [], + }, + }, + }); + const preventDefault = vi.fn(); + const stopImmediatePropagation = vi.fn(); + const routed = routeModalShortcutEvent({ + key: "Escape", + code: "Escape", + target: { closest: () => ({}) } as unknown as EventTarget, + preventDefault, + stopImmediatePropagation, + }, "windows"); + + expect(routed).toEqual({ + matched: false, + preservedEditableCommand: false, + result: "unmatched", + suppressedHeadlessEscape: true, + }); + expect(close).not.toHaveBeenCalled(); + expect(preventDefault).not.toHaveBeenCalled(); + expect(stopImmediatePropagation).toHaveBeenCalledTimes(1); + }); + + it("uses a rebound modal close key and leaves raw Escape unassigned", () => { + const close = vi.fn(); + cleanup.push(registerModalShortcutScope(close)); + useDAWStore.setState({ + customShortcuts: { + "modal.close": { + windows: ["Control+F9"], + macos: ["Command+F9"], + }, + }, + }); + const editableTarget = { closest: () => ({}) } as unknown as EventTarget; + + expect(routeModalShortcutEvent({ + key: "Escape", + code: "Escape", + target: editableTarget, + }, "windows")).toMatchObject({ matched: false, result: "unmatched" }); + expect(close).not.toHaveBeenCalled(); + + expect(routeModalShortcutEvent({ + key: "F9", + code: "F9", + ctrlKey: true, + target: editableTarget, + }, "windows")).toMatchObject({ matched: true, result: "handled" }); + expect(close).toHaveBeenCalledTimes(1); + }); + + it("retains an explicitly documented Esc safety binding in every strict profile", () => { + for (const profileId of ["digital_performer", "waveform", "renoise"] as const) { + expect(getProfileActionBindings(profileId, "modal.close", "windows"), profileId) + .toEqual(["Esc"]); + expect(getProfileActionBindings(profileId, "modal.close", "macos"), profileId) + .toEqual(["Esc"]); + } + }); + + it("resolves the Script Editor run chord on Windows and macOS and honors custom bindings", () => { + useDAWStore.setState({ + keyboardShortcutProfileId: "openstudio", + customShortcuts: {}, + }); + expect(matchesActionShortcut({ + key: "Enter", + code: "Enter", + ctrlKey: true, + }, "script.runCurrent", "windows")).toBe(true); + expect(matchesActionShortcut({ + key: "Enter", + code: "Enter", + metaKey: true, + }, "script.runCurrent", "macos")).toBe(true); + + useDAWStore.setState({ + customShortcuts: { + "script.runCurrent": { + windows: ["Control+F9"], + macos: ["Command+F9"], + }, + }, + }); + expect(matchesActionShortcut({ + key: "F9", + code: "F9", + ctrlKey: true, + }, "script.runCurrent", "windows")).toBe(true); + expect(matchesActionShortcut({ + key: "F9", + code: "F9", + metaKey: true, + }, "script.runCurrent", "macos")).toBe(true); + expect(matchesActionShortcut({ + key: "Enter", + code: "Enter", + ctrlKey: true, + }, "script.runCurrent", "windows")).toBe(false); + }); + + it("routes close commands to the exact active browser and plug-in owner", () => { + const browserUnderlay = vi.fn(() => "handled" as const); + const browserTop = vi.fn(() => "handled" as const); + cleanup.push(registerScopedActionExecutor( + { kind: "browser" }, + browserUnderlay, + ["browser.close"], + )); + cleanup.push(registerScopedActionExecutor( + { kind: "browser" }, + browserTop, + ["browser.close"], + )); + activateShortcutContext({ kind: "browser" }); + expect(executeActiveScopedAction("browser.close")).toBe("handled"); + expect(browserTop).toHaveBeenCalledWith("browser.close"); + expect(browserUnderlay).not.toHaveBeenCalled(); + + const dockedFx = vi.fn(() => "handled" as const); + const detachedFx = vi.fn(() => "handled" as const); + cleanup.push(registerScopedActionExecutor( + { kind: "plugin", sessionId: "docked" }, + dockedFx, + ["fx.close"], + )); + cleanup.push(registerScopedActionExecutor( + { kind: "plugin", sessionId: "detached" }, + detachedFx, + ["fx.close"], + )); + activateShortcutContext({ kind: "plugin", sessionId: "detached" }); + expect(executeActiveScopedAction("fx.close")).toBe("handled"); + expect(detachedFx).toHaveBeenCalledWith("fx.close"); + expect(dockedFx).not.toHaveBeenCalled(); + }); +}); diff --git a/frontend/src/__tests__/componentScopedActionExecutors.test.ts b/frontend/src/__tests__/componentScopedActionExecutors.test.ts new file mode 100644 index 0000000..c0719ed --- /dev/null +++ b/frontend/src/__tests__/componentScopedActionExecutors.test.ts @@ -0,0 +1,283 @@ +import { afterEach, describe, expect, it, vi } from "vitest"; +import timelineSource from "../components/Timeline.tsx?raw"; +import pianoRollSource from "../components/PianoRoll.tsx?raw"; +import pitchEditorSource from "../components/PitchEditorLowerZone.tsx?raw"; +import trackHeaderSource from "../components/TrackHeader.tsx?raw"; +import aiTrackHeaderSource from "../components/AITrackHeader.tsx?raw"; +import fxChainSource from "../components/FXChainPanel.tsx?raw"; +import transportBarSource from "../components/TransportBar.tsx?raw"; +import mainToolbarSource from "../components/MainToolbar.tsx?raw"; +import mixerPanelSource from "../components/MixerPanel.tsx?raw"; +import masterTrackHeaderSource from "../components/MasterTrackHeader.tsx?raw"; +import channelStripSource from "../components/ChannelStrip.tsx?raw"; +import pluginBrowserSource from "../components/PluginBrowser.tsx?raw"; +import mediaExplorerSource from "../components/MediaExplorer.tsx?raw"; +import aiTrackSource from "../components/AITrackHeader.tsx?raw"; +import aiWorkflowModalSource from "../components/AIWorkflowModal.tsx?raw"; +import aiWorkflowParamSource from "../components/AIWorkflowParamField.tsx?raw"; +import { + executeActiveScopedAction, + registerScopedActionExecutor, +} from "../store/actionRegistry"; +import { + activateShortcutContext, + type EditShortcutContext, +} from "../utils/shortcutContext"; + +const cleanups: Array<() => void> = []; + +function normalizeSourceText(source: string): string { + return source.replace(/\r\n?/g, "\n"); +} + +afterEach(() => { + while (cleanups.length > 0) cleanups.pop()?.(); + activateShortcutContext({ kind: "application" }); +}); + +describe("component-owned scoped action wiring", () => { + it("splits only the clip and pointer captured by the active Timeline instance", () => { + expect(timelineSource).toContain('actionId !== "clip.splitAtPointer"'); + expect(timelineSource).toContain("const menu = clipContextMenu"); + expect(timelineSource).toContain("state.splitMIDIClipAtPosition(menu.clipId, menu.time)"); + expect(timelineSource).toContain("state.splitClipAtPosition(menu.clipId, menu.time)"); + expect(normalizeSourceText(timelineSource)).toContain('registerScopedActionExecutor(\n context,'); + expect(timelineSource).toContain('matchesActionShortcut(event, "clip.splitAtPointer")'); + }); + + it("executes selection-dependent Piano Roll actions inside the exact editor session", () => { + for (const actionId of [ + "midi.loopFromSelectedNotes", + "midi.noteProperties", + "midi.toggleGhostReference", + "midi.configureControllerLanes", + "midi.openQuantizePanel", + "midi.quantizeLength", + "midi.controllerLine", + "midi.controllerTransform", + "midi.controllerThin", + "midi.copyControllerLane", + "midi.pasteControllerLane", + "midi.clearControllerLane", + ]) { + expect(pianoRollSource).toContain(`actionId === "${actionId}"`); + } + expect(pianoRollSource).toContain("parseNotePairs(getLatestClipEvents())"); + expect(pianoRollSource).toContain("setLoopRegion(clipStartTime + start, clipStartTime + end)"); + expect(pianoRollSource).toContain("setTransformDialog({ type: \"velocity\", value: selectedPair.velocity })"); + expect(pianoRollSource).toContain("setShowGhostMIDIClips((visible) => !visible)"); + expect(pianoRollSource).toContain("const controllerLaneSelectorRef = useRef(null)"); + expect(pianoRollSource).toContain("selector.focus()"); + expect(pianoRollSource).toContain("selector.showPicker?.()"); + expect(pianoRollSource).toContain("ref={controllerLaneSelectorRef}"); + expect(pianoRollSource).toContain("pianoShortcutContext,"); + }); + + it("routes pitch actions through the active editor store and its undo-aware correction", () => { + expect(pitchEditorSource).toContain('actionId === "pitch.detectKeyScale"'); + expect(pitchEditorSource).toContain("autoDetectScale()"); + expect(pitchEditorSource).toContain('actionId === "pitch.correctAllToScale"'); + expect(pitchEditorSource).toContain("correctAllToScale()"); + expect(pitchEditorSource).toContain('actionId === "pitch.toggleAB"'); + expect(pitchEditorSource).toContain("toggleABCompare()"); + expect(pitchEditorSource).toContain('actionId === "pitch.openCorrectionMacro"'); + expect(pitchEditorSource).toContain("toggleCorrectPitchModal()"); + expect(normalizeSourceText(pitchEditorSource)).toContain('registerScopedActionExecutor(\n context,'); + }); + + it("opens only the primary selected standard or AI TrackHeader and supports the main mixer context", () => { + for (const source of [trackHeaderSource, aiTrackHeaderSource].map(normalizeSourceText)) { + expect(source).toContain("if (!isSelected || selectedTrackId !== track.id) return"); + expect(source).toContain("if (selectedId !== track.id) return \"claimed_noop\""); + expect(source).toContain('registerScopedActionExecutor(\n { kind: "track_control_panel" }'); + expect(source).toContain('registerScopedActionExecutor(\n { kind: "mixer" }'); + expect(source).toContain("setShowFXChain(true)"); + expect(source).toContain('data-shortcut-context="track_control_panel"'); + } + expect(trackHeaderSource).toContain('actionId === "track.openSelectedFxChain"'); + expect(aiTrackHeaderSource).toContain('actionId !== "track.openSelectedFxChain"'); + expect(trackHeaderSource).toContain('actionId === "track.openSelectedNotes"'); + expect(trackHeaderSource).toContain('actionId === "track.loadSelectedSamplerSample"'); + }); + + it("keeps FX actions on the selected slot and reuses undo-aware mutations", () => { + expect(fxChainSource).toContain("const [selectedFxIndex, setSelectedFxIndex]"); + expect(fxChainSource).toContain('actionId === "fx.add"'); + expect(fxChainSource).toContain('actionId === "fx.removeSelected"'); + expect(fxChainSource).toContain('actionId === "fx.toggleSelectedBypass"'); + expect(fxChainSource).toContain('actionId !== "fx.openSelectedEditor"'); + for (const actionId of [ + "fx.toggleSelectedAB", + "fx.reloadSelectedScript", + "fx.toggleSelectedParameters", + "fx.toggleSelectedPresets", + "fx.openInstrumentEditor", + "fx.removeInstrument", + ]) { + expect(fxChainSource).toContain(`actionId === "${actionId}"`); + } + expect(fxChainSource).toContain("removeTrackFXWithUndo(trackId, fxIndex, chainType)"); + expect(fxChainSource).toContain("removeMasterFXWithUndo(fxIndex)"); + expect(fxChainSource).toContain("toggleFXSlotBypassWithUndo(trackId, fxIndex, chainType)"); + expect(fxChainSource).not.toContain('if (chainType === "master") return "claimed_noop"'); + expect(fxChainSource).toContain('selectedFx.type === "builtin"'); + expect(fxChainSource).toContain("handleOpenEditor(selectedFx.index)"); + expect(fxChainSource).toContain('data-shortcut-context={`plugin:${fxShortcutSessionId}`}'); + }); + + it("opens the exact FX panel's chooser without guessing a plug-in", () => { + expect(fxChainSource).toContain("const availablePluginSearchRef = useRef(null)"); + expect(fxChainSource).toContain("searchInput.scrollIntoView({ block: \"nearest\", inline: \"nearest\" })"); + expect(fxChainSource).toContain("searchInput.focus()"); + expect(fxChainSource).toContain("searchInput.select()"); + expect(fxChainSource).toContain("ref={availablePluginSearchRef}"); + const addActionBranch = fxChainSource.slice( + fxChainSource.indexOf('if (actionId === "fx.add")'), + fxChainSource.indexOf("const selectedFx = selectedFxIndex"), + ); + expect(addActionBranch).not.toContain("handleAddPlugin("); + }); + + it("wires shell, mixer, browser, and media commands to their real UI owners", () => { + expect(transportBarSource).toContain('actionId !== "transport.metronomeSettings"'); + expect(transportBarSource).toContain("setShowMetronomeSettings(true)"); + expect(mainToolbarSource).toContain('actionId === "view.openGridQuantizePanel"'); + expect(mainToolbarSource).toContain("setShowQuantizePanel(true)"); + expect(mainToolbarSource).toContain('actionId === "edit.applyCurrentQuantize"'); + expect(mainToolbarSource).toContain("handleApplyQuantize()"); + + expect(mixerPanelSource).toContain('actionId === "mixer.addMonitorFx"'); + expect(mixerPanelSource).toContain('actionId === "mixer.close"'); + expect(normalizeSourceText(mixerPanelSource)).toContain('registerShortcutSurface(\n context,'); + expect(mixerPanelSource).toContain('activateShortcutContext({ kind: "mixer" })'); + expect(masterTrackHeaderSource).toContain('actionId !== "mixer.openMasterFxChain"'); + expect(channelStripSource).toContain('actionId === "mixer.openMasterFxChain"'); + + for (const actionId of [ + "browser.focusSearch", + "browser.toggleFavorites", + "browser.openUserEffectsFolder", + "browser.toggleScanFolders", + "browser.addScanFolder", + "browser.scanPlugins", + "browser.deepScanPlugins", + "browser.removeCurrentInstrument", + ]) { + expect(pluginBrowserSource).toContain(`actionId === "${actionId}"`); + } + for (const actionId of [ + "browser.mediaNavigateUp", + "browser.mediaToggleRecent", + "browser.mediaFocusFilter", + ]) { + expect(mediaExplorerSource).toContain(`actionId === "${actionId}"`); + } + for (const source of [pluginBrowserSource, mediaExplorerSource]) { + expect(source).toContain('registerShortcutSurface(context, () => "unmatched", fallback)'); + expect(source).toContain('registerScopedActionExecutor('); + expect(source).toContain('activateShortcutContext({ kind: "browser" })'); + } + }); + + it("connects wheel-edited faders to one reusable begin/commit transaction", () => { + expect(channelStripSource).toContain("const beginVolumeEdit = useCallback"); + expect(channelStripSource).toContain("const commitVolumeEdit = useCallback"); + expect(channelStripSource).toContain("const beginPanEdit = useCallback"); + expect(channelStripSource).toContain("const commitPanEdit = useCallback"); + expect(channelStripSource).toContain("onBeginEdit={beginVolumeEdit}"); + expect(channelStripSource).toContain("onCommitEdit={commitVolumeEdit}"); + expect(channelStripSource).toContain("onBeginEdit={beginPanEdit}"); + expect(channelStripSource).toContain("onCommitEdit={commitPanEdit}"); + expect(channelStripSource).toContain("beginMasterVolumeEdit()"); + expect(channelStripSource).toContain("commitMasterVolumeEdit()"); + expect(channelStripSource).toContain("beginMasterPanEdit()"); + expect(channelStripSource).toContain("commitMasterPanEdit()"); + expect(channelStripSource).toContain('gesture.ruleId === "cakewalk-sonar.console-all-faders"'); + expect(channelStripSource).toContain('gesture.ruleId === "cakewalk-sonar.console-selected-faders"'); + expect(channelStripSource).toContain("state.selectedTrackIds"); + expect(channelStripSource).toContain("beginTrackVolumeBatchEdit(targetIds)"); + expect(channelStripSource).toContain("adjustTrackVolumeBatch(deltaDB)"); + expect(channelStripSource).toContain("commitTrackVolumeBatchEdit()"); + expect(channelStripSource).toContain("if (isMaster) return;"); + expect(channelStripSource).toContain("onWheel={handleGroupedVolumeWheel}"); + expect(channelStripSource).not.toContain("handleVolumePointerDown"); + expect(channelStripSource).not.toContain("handlePanPointerDown"); + expect(trackHeaderSource).toContain("onBeginEdit={beginInlineFaderEdit}"); + expect(trackHeaderSource).toContain("onCommitEdit={commitInlineFaderEdit}"); + expect(trackHeaderSource).not.toContain("document.addEventListener(\"pointerup\", commitOnce"); + }); + + it("coalesces continuous AI workflow parameter controls through store edit sessions", () => { + expect(aiTrackSource).toContain("beginAITrackParamsEdit: state.beginAITrackParamsEdit"); + expect(aiTrackSource).toContain("commitAITrackParamsEdit: state.commitAITrackParamsEdit"); + expect(aiTrackSource).toContain("onBeginParamsEdit={() => beginAITrackParamsEdit(track.id)}"); + expect(aiTrackSource).toContain("onCommitParamsEdit={() => commitAITrackParamsEdit(track.id)}"); + expect(aiWorkflowModalSource).toContain("onBeginEdit={onBeginParamsEdit}"); + expect(aiWorkflowModalSource).toContain("onCommitEdit={onCommitParamsEdit}"); + expect(aiWorkflowParamSource).toContain("onBeginEdit={onBeginEdit}"); + expect(aiWorkflowParamSource).toContain("onCommitEdit={onCommitEdit}"); + }); +}); + +describe("scoped executor context ownership", () => { + function register( + context: EditShortcutContext, + execute: (actionId: string) => "handled" | "claimed_noop" | "unmatched", + ) { + cleanups.push(registerScopedActionExecutor(context, execute)); + } + + it("never dispatches an action to a different editor session or surface", () => { + const timeline = vi.fn(() => "handled" as const); + const dockedPiano = vi.fn(() => "handled" as const); + const detachedPiano = vi.fn(() => "handled" as const); + const pitch = vi.fn(() => "handled" as const); + const trackHeader = vi.fn(() => "handled" as const); + const mixer = vi.fn(() => "handled" as const); + const fxPanel = vi.fn(() => "handled" as const); + const detachedPlugin = vi.fn(() => "handled" as const); + + register({ kind: "timeline" }, timeline); + register({ kind: "piano_roll", sessionId: "docked" }, dockedPiano); + register({ kind: "piano_roll", sessionId: "detached" }, detachedPiano); + register({ kind: "pitch_editor" }, pitch); + register({ kind: "track_control_panel" }, trackHeader); + register({ kind: "mixer" }, mixer); + register({ kind: "plugin", sessionId: "fx-chain:track:track-a" }, fxPanel); + register({ kind: "plugin", sessionId: "detached-plugin" }, detachedPlugin); + + const cases: Array<{ + context: EditShortcutContext; + actionId: string; + expected: ReturnType; + }> = [ + { context: { kind: "timeline" }, actionId: "clip.splitAtPointer", expected: timeline }, + { context: { kind: "piano_roll", sessionId: "docked" }, actionId: "midi.noteProperties", expected: dockedPiano }, + { context: { kind: "piano_roll", sessionId: "detached" }, actionId: "midi.configureControllerLanes", expected: detachedPiano }, + { context: { kind: "pitch_editor" }, actionId: "pitch.toggleAB", expected: pitch }, + { context: { kind: "track_control_panel" }, actionId: "track.openSelectedFxChain", expected: trackHeader }, + { context: { kind: "mixer" }, actionId: "track.openSelectedFxChain", expected: mixer }, + { context: { kind: "plugin", sessionId: "fx-chain:track:track-a" }, actionId: "fx.openSelectedEditor", expected: fxPanel }, + { context: { kind: "plugin", sessionId: "detached-plugin" }, actionId: "fx.add", expected: detachedPlugin }, + ]; + + for (const [index, testCase] of cases.entries()) { + activateShortcutContext(testCase.context); + expect(executeActiveScopedAction(testCase.actionId)).toBe("handled"); + for (const executor of [timeline, dockedPiano, detachedPiano, pitch, trackHeader, mixer, fxPanel, detachedPlugin]) { + expect(executor).toHaveBeenCalledTimes(executor === testCase.expected ? 1 : 0); + executor.mockClear(); + } + expect(index).toBeGreaterThanOrEqual(0); + } + }); + + it("does not fall back to another plugin instance when the active session has no executor", () => { + const fxPanel = vi.fn(() => "handled" as const); + register({ kind: "plugin", sessionId: "fx-chain:track:track-a" }, fxPanel); + + activateShortcutContext({ kind: "plugin", sessionId: "detached-plugin" }); + expect(executeActiveScopedAction("fx.removeSelected")).toBe("unmatched"); + expect(fxPanel).not.toHaveBeenCalled(); + }); +}); diff --git a/frontend/src/__tests__/contextWheelBehaviors.test.ts b/frontend/src/__tests__/contextWheelBehaviors.test.ts new file mode 100644 index 0000000..5a74eae --- /dev/null +++ b/frontend/src/__tests__/contextWheelBehaviors.test.ts @@ -0,0 +1,367 @@ +import { afterEach, describe, expect, it, vi } from "vitest"; +import { + computeAnchoredVerticalWheelZoom, + computeSpectrogramBandGeometry, + computeWheelResizedSize, + createWheelEditBurstController, + DEFAULT_TIMELINE_VERTICAL_SCALE_VIEW, + getAccumulatedWheelNudgeDirection, + getAccumulatedWheelStepCount, + getMidiNoteHeightZoomPointerOffset, + getTimelineHorizontalScrollMax, + getTimelineVerticalScaleSubtarget, + getTimelineVisibleContentEnd, + getWheelNudgeDirection, + getWheelStepCount, + updateTimelineVerticalScaleView, +} from "../utils/contextWheelBehaviors"; +import { createWheelDeltaAccumulator } from "../utils/wheelDeltaAccumulator"; + +afterEach(() => { + vi.useRealTimers(); +}); + +describe("context-specific wheel behavior helpers", () => { + it.each([ + { amount: -100, expected: 1 }, + { amount: 100, expected: -1 }, + { amount: -250, expected: 2.5 }, + { amount: -1, expected: 0.01 }, + { amount: 0, expected: 0 }, + { amount: Number.NaN, expected: 0 }, + ])("converts $amount to $expected parameter steps", ({ amount, expected }) => { + expect(getWheelStepCount(amount)).toBe(expected); + }); + + it("accumulates fractional context steps and discrete nudges per target", () => { + const smooth = createWheelDeltaAccumulator({ quantum: 1 }); + expect(getAccumulatedWheelStepCount(smooth, "fade:a", -0.5)).toBe(0); + expect(getAccumulatedWheelStepCount(smooth, "fade:a", -0.5)).toBe(0.01); + expect(getAccumulatedWheelStepCount(smooth, "fade:b", -0.5)).toBe(0); + + const discrete = createWheelDeltaAccumulator({ quantum: 100 }); + expect(getAccumulatedWheelNudgeDirection(discrete, "clip:a", 25)).toBe(0); + expect(getAccumulatedWheelNudgeDirection(discrete, "clip:a", 25)).toBe(0); + expect(getAccumulatedWheelNudgeDirection(discrete, "clip:a", 25)).toBe(0); + expect(getAccumulatedWheelNudgeDirection(discrete, "clip:a", 25)).toBe(1); + smooth.dispose(); + discrete.dispose(); + }); + + it("isolates accumulated edit bursts across target, direction, and disposal", () => { + const events: string[] = []; + const controller = createWheelEditBurstController({ + idleMs: 180, + getKey: (target: { id: string }) => target.id, + onBegin: (target) => events.push(`begin:${target.id}`), + onCommit: (target) => events.push(`commit:${target.id}`), + }); + const accumulator = createWheelDeltaAccumulator({ + quantum: 100, + idleMs: 180, + onReset: ({ hadOutput }) => { + if (hadOutput) controller.commit(); + }, + }); + const dispatchPacket = (id: string, amount: number) => { + const direction = getAccumulatedWheelNudgeDirection( + accumulator, + `note-nudge:${id}`, + amount, + ); + if (direction === 0) { + const pending = controller.getActiveTarget(); + if (pending?.id === id) controller.touch(pending); + return; + } + controller.touch({ id }); + events.push(`output:${id}:${direction}`); + }; + + dispatchPacket("a", 100); + dispatchPacket("a", 25); + dispatchPacket("b", 75); + dispatchPacket("b", 25); + dispatchPacket("b", -25); + dispatchPacket("b", -75); + accumulator.dispose(); + controller.dispose(); + + expect(events).toEqual([ + "begin:a", + "output:a:1", + "commit:a", + "begin:b", + "output:b:1", + "commit:b", + "begin:b", + "output:b:-1", + "commit:b", + ]); + }); + + it.each([ + { amount: -120, expected: -1 }, + { amount: 120, expected: 1 }, + { amount: 0, expected: 0 }, + { amount: Number.POSITIVE_INFINITY, expected: 0 }, + ] as const)("maps $amount to nudge direction $expected", ({ amount, expected }) => { + expect(getWheelNudgeDirection(amount)).toBe(expected); + }); + + it("keeps the MIDI row under the pointer stable while changing note height", () => { + const before = { itemHeight: 12, scrollOffset: 480, pointerOffset: 120 }; + const rowAtPointer = (before.scrollOffset + before.pointerOffset) / before.itemHeight; + const result = computeAnchoredVerticalWheelZoom({ + ...before, + amount: -120, + minItemHeight: 6, + maxItemHeight: 36, + maxScrollOffset: 4_000, + }); + + expect(result.itemHeight).toBeGreaterThan(before.itemHeight); + expect((result.scrollOffset + before.pointerOffset) / result.itemHeight) + .toBeCloseTo(rowAtPointer, 10); + }); + + it.each([ + { amount: -100_000, expected: 36 }, + { amount: 100_000, expected: 6 }, + ])("clamps extreme note-height zoom to $expected", ({ amount, expected }) => { + const result = computeAnchoredVerticalWheelZoom({ + itemHeight: 12, + scrollOffset: 0, + pointerOffset: 0, + amount, + minItemHeight: 6, + maxItemHeight: 36, + maxScrollOffset: 4_000, + }); + expect(result.itemHeight).toBe(expected); + }); + + it.each([ + { target: "grid" as const, pointer: 0 }, + { target: "grid" as const, pointer: 120 }, + { target: "grid" as const, pointer: 240 }, + { target: "keyboard" as const, pointer: 0 }, + { target: "keyboard" as const, pointer: 120 }, + { target: "keyboard" as const, pointer: 240 }, + ])("anchors $target MIDI note-height zoom at pointer Y $pointer", ({ target, pointer }) => { + const pointerOffset = getMidiNoteHeightZoomPointerOffset({ + target, + stagePointerOffset: target === "grid" ? pointer : undefined, + keyboardPointerOffset: target === "keyboard" ? pointer : undefined, + gridHeight: 240, + }); + const rowBefore = (480 + pointerOffset) / 12; + const result = computeAnchoredVerticalWheelZoom({ + itemHeight: 12, + scrollOffset: 480, + pointerOffset, + amount: -120, + minItemHeight: 6, + maxItemHeight: 36, + maxScrollOffset: 4_000, + }); + + expect(pointerOffset).toBe(pointer); + expect((result.scrollOffset + pointerOffset) / result.itemHeight) + .toBeCloseTo(rowBefore, 10); + }); + + it.each([ + { target: "grid" as const, stagePointerOffset: -50, keyboardPointerOffset: undefined, expected: 0 }, + { target: "grid" as const, stagePointerOffset: 500, keyboardPointerOffset: undefined, expected: 240 }, + { target: "keyboard" as const, stagePointerOffset: undefined, keyboardPointerOffset: -50, expected: 0 }, + { target: "keyboard" as const, stagePointerOffset: undefined, keyboardPointerOffset: 500, expected: 240 }, + ])("clamps $target pointer coordinates to the note grid", (entry) => { + expect(getMidiNoteHeightZoomPointerOffset({ + ...entry, + gridHeight: 240, + })).toBe(entry.expected); + }); + + it.each([ + { amount: -120, relation: "grow" }, + { amount: 120, relation: "shrink" }, + { amount: 0, relation: "same" }, + ])("resizes a hovered lane in the expected direction for $amount", ({ amount, relation }) => { + const result = computeWheelResizedSize({ + currentSize: 60, + amount, + minSize: 24, + maxSize: 240, + }); + if (relation === "grow") expect(result).toBeGreaterThan(60); + if (relation === "shrink") expect(result).toBeLessThan(60); + if (relation === "same") expect(result).toBe(60); + }); + + it.each([ + { amount: -100_000, expected: 240 }, + { amount: 100_000, expected: 24 }, + { amount: Number.NaN, expected: 60 }, + ])("clamps or sanitizes lane resizing for $amount", ({ amount, expected }) => { + expect(computeWheelResizedSize({ + currentSize: 60, + amount, + minSize: 24, + maxSize: 240, + })).toBe(expected); + }); + + it("uses MIDI clips when calculating horizontal Timeline wheel extent", () => { + expect(getTimelineVisibleContentEnd([ + { + clips: [{ startTime: 1, duration: 2 }], + midiClips: [{ startTime: 12, duration: 4 }], + }, + ])).toBe(16); + expect(getTimelineVisibleContentEnd([ + { + clips: [], + midiClips: [{ startTime: 20, duration: 3 }], + }, + ])).toBe(23); + }); + + it("includes active recording extent and ignores malformed clip geometry", () => { + expect(getTimelineVisibleContentEnd([ + { + clips: [ + { startTime: Number.NaN, duration: 10 }, + { startTime: 8, duration: -4 }, + ], + midiClips: [{ startTime: 2, duration: Number.POSITIVE_INFINITY }], + }, + ], 14)).toBe(14); + }); + + it("shares one finite horizontal scroll extent between Timeline content and ruler", () => { + const tracks = [{ + clips: [{ startTime: 4, duration: 2 }], + midiClips: [{ startTime: 20, duration: 5 }], + }]; + expect(getTimelineHorizontalScrollMax(tracks, 30, 10, 500)).toBe(2_800); + expect(getTimelineHorizontalScrollMax(tracks, undefined, 10, 500)).toBe(2_750); + expect(getTimelineHorizontalScrollMax(tracks, undefined, Number.NaN, 500)).toBe(0); + }); + + it.each([ + { stageX: -0.01, expected: undefined }, + { stageX: 0, expected: "spectrogram_scale" }, + { stageX: 27.99, expected: "spectrogram_scale" }, + { stageX: 28, expected: undefined }, + ])("limits the spectrogram scale target to its exact strip at x=$stageX", ({ stageX, expected }) => { + expect(getTimelineVerticalScaleSubtarget({ + stageX, + scaleStripWidth: 28, + trackType: "audio", + spectralView: true, + })).toBe(expected); + }); + + it("keeps spectrogram zoom, pan, and dB floor as independent coexisting view state", () => { + const zoomed = updateTimelineVerticalScaleView( + DEFAULT_TIMELINE_VERTICAL_SCALE_VIEW, + "zoom", + -120, + ); + const panned = updateTimelineVerticalScaleView(zoomed, "pan", 100); + const adjusted = updateTimelineVerticalScaleView(panned, "db-floor", -200); + + expect(adjusted.spectrogramScale).toBeGreaterThan(1); + expect(adjusted.verticalOffset).toBeCloseTo(0.2); + expect(adjusted.spectrogramDbFloor).toBe(-70); + }); + + it("clamps every spectrogram scale-strip view dimension", () => { + const zoomedIn = updateTimelineVerticalScaleView( + DEFAULT_TIMELINE_VERTICAL_SCALE_VIEW, + "zoom", + -100_000, + ); + const zoomedOut = updateTimelineVerticalScaleView(zoomedIn, "zoom", 100_000); + const panned = updateTimelineVerticalScaleView(zoomedOut, "pan", 100_000); + const floored = updateTimelineVerticalScaleView(panned, "db-floor", -100_000); + + expect(zoomedIn.spectrogramScale).toBe(8); + expect(zoomedOut.spectrogramScale).toBe(0.25); + expect(panned.verticalOffset).toBe(1); + expect(floored.spectrogramDbFloor).toBe(-120); + }); + + it("changes rendered spectrogram band geometry when its scale changes", () => { + const normal = computeSpectrogramBandGeometry({ + height: 80, + bandCount: 8, + scale: 1, + verticalOffset: 0, + }); + const zoomed = computeSpectrogramBandGeometry({ + height: 80, + bandCount: 8, + scale: 2, + verticalOffset: 0, + }); + const panned = computeSpectrogramBandGeometry({ + height: 80, + bandCount: 8, + scale: 1, + verticalOffset: 0.5, + }); + + expect(normal[3]).toEqual({ bandIndex: 3, y: 40, height: 10 }); + expect(zoomed[3]).toEqual({ bandIndex: 3, y: 40, height: 20 }); + expect(panned[3].y).toBe(50); + expect(zoomed).not.toEqual(normal); + }); + + it("groups one target's wheel burst and commits it after the full idle delay", () => { + vi.useFakeTimers(); + const events: string[] = []; + const controller = createWheelEditBurstController({ + idleMs: 180, + getKey: (target: { id: string }) => target.id, + onBegin: (target) => events.push(`begin:${target.id}`), + onCommit: (target) => events.push(`commit:${target.id}`), + }); + + controller.touch({ id: "lane-a" }); + vi.advanceTimersByTime(100); + controller.touch({ id: "lane-a" }); + expect(events).toEqual(["begin:lane-a"]); + + vi.advanceTimersByTime(179); + expect(events).toEqual(["begin:lane-a"]); + vi.advanceTimersByTime(1); + expect(events).toEqual(["begin:lane-a", "commit:lane-a"]); + expect(controller.getActiveTarget()).toBeNull(); + }); + + it("commits when switching targets and when the owning UI is disposed", () => { + vi.useFakeTimers(); + const events: string[] = []; + const controller = createWheelEditBurstController({ + idleMs: 180, + getKey: (target: { id: string }) => target.id, + onBegin: (target) => events.push(`begin:${target.id}`), + onCommit: (target) => events.push(`commit:${target.id}`), + }); + + controller.touch({ id: "lane-a" }); + controller.touch({ id: "lane-b" }); + controller.dispose(); + + expect(events).toEqual([ + "begin:lane-a", + "commit:lane-a", + "begin:lane-b", + "commit:lane-b", + ]); + vi.runAllTimers(); + expect(events).toHaveLength(4); + }); +}); diff --git a/frontend/src/__tests__/contextWheelStoreMutations.test.ts b/frontend/src/__tests__/contextWheelStoreMutations.test.ts new file mode 100644 index 0000000..3e83f68 --- /dev/null +++ b/frontend/src/__tests__/contextWheelStoreMutations.test.ts @@ -0,0 +1,587 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { commandManager } from "../store/commands"; +import { + createDefaultTrack, + getEffectiveTrackHeight, + getTrackAtY, + getTrackYPositions, + type AudioClip, + type MIDIClip, + useDAWStore, +} from "../store/useDAWStore"; +import { + createWheelEditBurstController, + getAccumulatedWheelNudgeDirection, +} from "../utils/contextWheelBehaviors"; +import { createWheelDeltaAccumulator } from "../utils/wheelDeltaAccumulator"; + +const originalState = useDAWStore.getState(); + +function audioClip(id: string, startTime: number, locked = false): AudioClip { + return { + id, + name: id, + filePath: `C:/audio/${id}.wav`, + startTime, + duration: 2, + offset: 0, + color: "#38bdf8", + volumeDB: 0, + fadeIn: 0, + fadeOut: 0, + locked, + }; +} + +function midiClip(id: string, startTime: number, locked = false): MIDIClip { + return { + id, + name: id, + startTime, + duration: 2, + offset: 0, + sourceStart: 0, + sourceLength: 2, + loopEnabled: false, + loopOffset: 0, + loopLength: 2, + events: [ + { timestamp: 0.5, type: "noteOn", note: 60, velocity: 90 }, + { timestamp: 1, type: "noteOff", note: 60, velocity: 0 }, + ], + ccEvents: [], + color: "#f72585", + locked, + }; +} + +beforeEach(() => { + commandManager.clear(); + const audioTrack = createDefaultTrack("audio", "Audio", "#38bdf8", "audio"); + audioTrack.clips = [audioClip("audio-clip", 1), audioClip("locked-audio", 2, true)]; + const midiTrack = createDefaultTrack("midi", "MIDI", "#f72585", "midi"); + midiTrack.midiClips = [midiClip("midi-clip", 1), midiClip("locked-midi", 2, true)]; + useDAWStore.setState({ + tracks: [audioTrack, midiTrack], + selectedClipId: null, + selectedClipIds: [], + canUndo: false, + canRedo: false, + syncMIDITrackToBackend: vi.fn().mockResolvedValue(undefined), + }); +}); + +afterEach(() => { + vi.useRealTimers(); + vi.restoreAllMocks(); + commandManager.clear(); + useDAWStore.setState(originalState); +}); + +describe("wheel-triggered store mutations", () => { + it("groups FL Playlist track reorder packets into one exact-order command", () => { + const thirdTrack = createDefaultTrack("audio-2", "Audio 2", "#22c55e", "audio"); + useDAWStore.setState((state) => ({ tracks: [...state.tracks, thirdTrack] })); + const state = useDAWStore.getState(); + + state.beginTrackReorderEdit("audio"); + expect(state.previewTrackReorder("audio", 1)).toBe(true); + expect(state.previewTrackReorder("audio", 1)).toBe(true); + state.commitTrackReorderEdit("audio"); + expect(useDAWStore.getState().tracks.map((track) => track.id)).toEqual([ + "midi", + "audio-2", + "audio", + ]); + expect(commandManager.getUndoStack()).toHaveLength(1); + + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks.map((track) => track.id)).toEqual([ + "audio", + "midi", + "audio-2", + ]); + useDAWStore.getState().redo(); + expect(useDAWStore.getState().tracks.map((track) => track.id)).toEqual([ + "midi", + "audio-2", + "audio", + ]); + }); + + it("accumulates precision Playlist packets into native steps and one undo burst", () => { + vi.useFakeTimers(); + const thirdTrack = createDefaultTrack("audio-2", "Audio 2", "#22c55e", "audio"); + useDAWStore.setState((state) => ({ tracks: [...state.tracks, thirdTrack] })); + const target = { kind: "track" as const, id: "audio" }; + const controller = createWheelEditBurstController({ + idleMs: 180, + getKey: (value: typeof target) => `${value.kind}:${value.id}`, + onBegin: (value) => useDAWStore.getState().beginTrackReorderEdit(value.id), + onCommit: (value) => useDAWStore.getState().commitTrackReorderEdit(value.id), + }); + const accumulator = createWheelDeltaAccumulator({ + quantum: 100, + idleMs: 180, + onReset: ({ hadOutput }) => { + if (hadOutput) controller.commit(); + }, + }); + const dispatchPacket = (amount: number) => { + const direction = getAccumulatedWheelNudgeDirection( + accumulator, + `track-reorder:${target.id}`, + amount, + ); + if (direction === 0) { + const pending = controller.getActiveTarget(); + if (pending) controller.touch(pending); + return; + } + controller.touch(target); + expect(useDAWStore.getState().previewTrackReorder(target.id, direction)).toBe(true); + }; + + dispatchPacket(25); + dispatchPacket(25); + dispatchPacket(25); + expect(useDAWStore.getState().tracks.map((track) => track.id)).toEqual([ + "audio", + "midi", + "audio-2", + ]); + dispatchPacket(25); + expect(useDAWStore.getState().tracks.map((track) => track.id)).toEqual([ + "midi", + "audio", + "audio-2", + ]); + + vi.advanceTimersByTime(100); + dispatchPacket(25); + vi.advanceTimersByTime(100); + dispatchPacket(25); + dispatchPacket(25); + dispatchPacket(25); + expect(useDAWStore.getState().tracks.map((track) => track.id)).toEqual([ + "midi", + "audio-2", + "audio", + ]); + expect(commandManager.getUndoStack()).toHaveLength(0); + + vi.advanceTimersByTime(179); + expect(commandManager.getUndoStack()).toHaveLength(0); + vi.advanceTimersByTime(1); + expect(commandManager.getUndoStack()).toHaveLength(1); + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks.map((track) => track.id)).toEqual([ + "audio", + "midi", + "audio-2", + ]); + useDAWStore.getState().redo(); + expect(useDAWStore.getState().tracks.map((track) => track.id)).toEqual([ + "midi", + "audio-2", + "audio", + ]); + + accumulator.dispose(); + controller.dispose(); + }); + + it("rejects invalid and boundary-only Playlist reorder previews without history", () => { + const state = useDAWStore.getState(); + expect(state.previewTrackReorder("audio", 1)).toBe(false); + state.beginTrackReorderEdit("missing-track"); + expect(state.previewTrackReorder("missing-track", 1)).toBe(false); + state.commitTrackReorderEdit("missing-track"); + state.beginTrackReorderEdit("audio"); + expect(state.previewTrackReorder("audio", -1)).toBe(false); + state.commitTrackReorderEdit("audio"); + expect(commandManager.getUndoStack()).toHaveLength(0); + expect(useDAWStore.getState().tracks.map((track) => track.id)).toEqual(["audio", "midi"]); + }); + + it("groups FL clip nudge packets and restores the exact pre-gesture selection", () => { + useDAWStore.setState((state) => ({ + tracks: state.tracks.map((track) => track.id !== "audio" + ? track + : { + ...track, + clips: track.clips.map((clip) => ({ ...clip, groupId: "group-a" })), + }), + selectedClipId: "midi-clip", + selectedClipIds: ["midi-clip"], + })); + const state = useDAWStore.getState(); + state.beginClipNudgeEdit("audio-clip"); + expect(useDAWStore.getState().selectedClipIds).toEqual(["audio-clip", "locked-audio"]); + expect(state.previewClipNudge("audio-clip", "right", true)).toBe(true); + expect(state.previewClipNudge("audio-clip", "right", true)).toBe(true); + state.commitClipNudgeEdit("audio-clip"); + expect(useDAWStore.getState().tracks[0].clips.map((clip) => clip.startTime)).toEqual([1.02, 2]); + expect(commandManager.getUndoStack()).toHaveLength(1); + + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks[0].clips.map((clip) => clip.startTime)).toEqual([1, 2]); + expect(useDAWStore.getState().selectedClipIds).toEqual(["midi-clip"]); + useDAWStore.getState().redo(); + expect(useDAWStore.getState().tracks[0].clips.map((clip) => clip.startTime)).toEqual([1.02, 2]); + expect(useDAWStore.getState().selectedClipIds).toEqual(["audio-clip", "locked-audio"]); + }); + + it("rejects invalid, locked, and boundary-only clip nudge sessions", () => { + useDAWStore.setState((state) => ({ + tracks: state.tracks.map((track) => ({ + ...track, + clips: track.clips.map((clip) => clip.id === "audio-clip" + ? { ...clip, startTime: 0 } + : clip), + })), + })); + const state = useDAWStore.getState(); + expect(state.previewClipNudge("audio-clip", "right", true)).toBe(false); + state.beginClipNudgeEdit("missing-clip"); + state.commitClipNudgeEdit("missing-clip"); + state.beginClipNudgeEdit("locked-audio"); + state.commitClipNudgeEdit("locked-audio"); + state.beginClipNudgeEdit("audio-clip"); + expect(state.previewClipNudge("audio-clip", "left", true)).toBe(false); + state.commitClipNudgeEdit("audio-clip"); + expect(commandManager.getUndoStack()).toHaveLength(0); + expect(useDAWStore.getState().tracks[0].clips[0].startTime).toBe(0); + }); + + it("restores surviving clip previews when a nudge target disappears mid-burst", () => { + useDAWStore.setState((state) => ({ + tracks: state.tracks.map((track) => track.id !== "audio" + ? track + : { + ...track, + clips: track.clips.map((clip) => ({ ...clip, groupId: "group-a", locked: false })), + }), + })); + const state = useDAWStore.getState(); + state.beginClipNudgeEdit("audio-clip"); + expect(state.previewClipNudge("audio-clip", "right", true)).toBe(true); + useDAWStore.setState((current) => ({ + tracks: current.tracks.map((track) => track.id !== "audio" + ? track + : { ...track, clips: track.clips.filter((clip) => clip.id !== "locked-audio") }), + })); + + state.commitClipNudgeEdit("audio-clip"); + + expect(useDAWStore.getState().tracks[0].clips[0].startTime).toBe(1); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it("commits exact FL wheel transactions on target switch and owner disposal", () => { + const thirdTrack = createDefaultTrack("audio-2", "Audio 2", "#22c55e", "audio"); + useDAWStore.setState((state) => ({ tracks: [...state.tracks, thirdTrack] })); + type Target = + | { kind: "track"; id: string } + | { kind: "clip"; id: string }; + const controller = createWheelEditBurstController({ + idleMs: 180, + getKey: (target) => `${target.kind}:${target.id}`, + onBegin: (target) => { + const state = useDAWStore.getState(); + if (target.kind === "track") state.beginTrackReorderEdit(target.id); + else state.beginClipNudgeEdit(target.id); + }, + onCommit: (target) => { + const state = useDAWStore.getState(); + if (target.kind === "track") state.commitTrackReorderEdit(target.id); + else state.commitClipNudgeEdit(target.id); + }, + }); + + controller.touch({ kind: "track", id: "audio" }); + expect(useDAWStore.getState().previewTrackReorder("audio", 1)).toBe(true); + controller.touch({ kind: "clip", id: "audio-clip" }); + expect(commandManager.getUndoStack()).toHaveLength(1); + expect(useDAWStore.getState().previewClipNudge("audio-clip", "right", true)).toBe(true); + controller.dispose(); + expect(commandManager.getUndoStack()).toHaveLength(2); + + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks + .flatMap((track) => track.clips) + .find((clip) => clip.id === "audio-clip")?.startTime).toBe(1); + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks.map((track) => track.id)).toEqual([ + "audio", + "midi", + "audio-2", + ]); + useDAWStore.getState().redo(); + useDAWStore.getState().redo(); + expect(useDAWStore.getState().tracks.map((track) => track.id)).toEqual([ + "midi", + "audio", + "audio-2", + ]); + expect(useDAWStore.getState().tracks + .flatMap((track) => track.clips) + .find((clip) => clip.id === "audio-clip")?.startTime).toBe(1.01); + }); + + it("nudges selected audio and MIDI clips in one undoable transaction", () => { + useDAWStore.setState({ + selectedClipIds: ["audio-clip", "midi-clip", "locked-audio", "locked-midi"], + }); + + useDAWStore.getState().nudgeClips("right", true); + expect(useDAWStore.getState().tracks[0].clips.map((clip) => clip.startTime)).toEqual([1.01, 2]); + expect(useDAWStore.getState().tracks[1].midiClips.map((clip) => clip.startTime)).toEqual([1.01, 2]); + expect(commandManager.getUndoStack()).toHaveLength(1); + + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks[0].clips[0].startTime).toBe(1); + expect(useDAWStore.getState().tracks[1].midiClips[0].startTime).toBe(1); + + useDAWStore.getState().redo(); + expect(useDAWStore.getState().tracks[0].clips[0].startTime).toBe(1.01); + expect(useDAWStore.getState().tracks[1].midiClips[0].startTime).toBe(1.01); + }); + + it("does not create history for a locked or left-boundary-only nudge", () => { + useDAWStore.setState((state) => ({ + tracks: state.tracks.map((track) => ({ + ...track, + clips: track.clips.map((clip) => clip.id === "audio-clip" ? { ...clip, startTime: 0 } : clip), + })), + selectedClipIds: ["audio-clip", "locked-audio"], + })); + + useDAWStore.getState().nudgeClips("left", true); + expect(useDAWStore.getState().tracks[0].clips.map((clip) => clip.startTime)).toEqual([0, 2]); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it("commits Cubase-style fade and event-volume wheel edits as undoable actions", () => { + const state = useDAWStore.getState(); + state.beginClipFadeEdit("audio-clip"); + state.previewClipFades("audio-clip", 0.1, 0); + state.previewClipFades("audio-clip", 0.25, 0); + expect(commandManager.getUndoStack()).toHaveLength(0); + state.commitClipFadeEdit("audio-clip"); + expect(useDAWStore.getState().tracks[0].clips[0].fadeIn).toBe(0.25); + expect(commandManager.getUndoStack()).toHaveLength(1); + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks[0].clips[0].fadeIn).toBe(0); + useDAWStore.getState().redo(); + expect(useDAWStore.getState().tracks[0].clips[0].fadeIn).toBe(0.25); + + commandManager.clear(); + state.beginClipVolumeEdit("audio-clip"); + state.setClipVolume("audio-clip", 0.5); + state.setClipVolume("audio-clip", 1); + state.commitClipVolumeEdit("audio-clip"); + expect(commandManager.getUndoStack()).toHaveLength(1); + expect(useDAWStore.getState().tracks[0].clips[0].volumeDB).toBe(1); + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks[0].clips[0].volumeDB).toBe(0); + useDAWStore.getState().redo(); + expect(useDAWStore.getState().tracks[0].clips[0].volumeDB).toBe(1); + }); + + it("commits a multi-packet Cubase fade burst only after the idle timeout", () => { + vi.useFakeTimers(); + const controller = createWheelEditBurstController({ + idleMs: 180, + getKey: (clipId: string) => clipId, + onBegin: (clipId) => useDAWStore.getState().beginClipFadeEdit(clipId), + onCommit: (clipId) => useDAWStore.getState().commitClipFadeEdit(clipId), + }); + + controller.touch("audio-clip"); + useDAWStore.getState().previewClipFades("audio-clip", 0.1, 0); + vi.advanceTimersByTime(100); + controller.touch("audio-clip"); + useDAWStore.getState().previewClipFades("audio-clip", 0.25, 0); + vi.advanceTimersByTime(179); + expect(commandManager.getUndoStack()).toHaveLength(0); + vi.advanceTimersByTime(1); + expect(commandManager.getUndoStack()).toHaveLength(1); + expect(useDAWStore.getState().tracks[0].clips[0].fadeIn).toBe(0.25); + + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks[0].clips[0].fadeIn).toBe(0); + useDAWStore.getState().redo(); + expect(useDAWStore.getState().tracks[0].clips[0].fadeIn).toBe(0.25); + }); + + it("guards fade previews without a valid transaction and skips no-op history", () => { + const state = useDAWStore.getState(); + state.previewClipFades("audio-clip", 0.5, 0); + expect(useDAWStore.getState().tracks[0].clips[0].fadeIn).toBe(0); + + state.beginClipFadeEdit("missing-clip"); + state.previewClipFades("missing-clip", 0.5, 0); + state.commitClipFadeEdit("missing-clip"); + state.beginClipFadeEdit("audio-clip"); + state.previewClipFades("audio-clip", 0, 0); + state.commitClipFadeEdit("audio-clip"); + expect(commandManager.getUndoStack()).toHaveLength(0); + + state.beginClipFadeEdit("audio-clip"); + state.previewClipFades("audio-clip", 0.5, 0); + state.cancelClipFadeEdit("audio-clip"); + expect(useDAWStore.getState().tracks[0].clips[0].fadeIn).toBe(0); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it("commits a hovered MIDI note property edit and restores it on undo", () => { + const oldEvents = useDAWStore.getState().tracks[1].midiClips[0].events.map((event) => ({ ...event })); + const firstPreview = oldEvents.map((event) => event.type === "noteOn" + ? { ...event, velocity: 91 } + : event); + const nextEvents = firstPreview.map((event) => event.type === "noteOn" + ? { ...event, velocity: 92 } + : event); + + useDAWStore.getState().previewMIDIClipEvents("midi", "midi-clip", firstPreview); + useDAWStore.getState().previewMIDIClipEvents("midi", "midi-clip", nextEvents); + useDAWStore.getState().commitMIDIClipEvents( + "midi", + "midi-clip", + oldEvents, + nextEvents, + "Adjust MIDI note velocity", + ); + expect(useDAWStore.getState().tracks[1].midiClips[0].events[0].velocity).toBe(92); + expect(commandManager.getUndoStack()).toHaveLength(1); + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks[1].midiClips[0].events[0].velocity).toBe(90); + useDAWStore.getState().redo(); + expect(useDAWStore.getState().tracks[1].midiClips[0].events[0].velocity).toBe(92); + }); + + it("commits a multi-packet MIDI note nudge as one undo command", () => { + const oldEvents = useDAWStore.getState().tracks[1].midiClips[0].events.map((event) => ({ ...event })); + const firstPreview = oldEvents.map((event) => ({ + ...event, + timestamp: event.timestamp + 0.01, + })); + const finalEvents = firstPreview.map((event) => ({ + ...event, + timestamp: event.timestamp + 0.01, + })); + + useDAWStore.getState().previewMIDIClipEvents("midi", "midi-clip", firstPreview); + useDAWStore.getState().previewMIDIClipEvents("midi", "midi-clip", finalEvents); + expect(commandManager.getUndoStack()).toHaveLength(0); + useDAWStore.getState().commitMIDIClipEvents( + "midi", + "midi-clip", + oldEvents, + finalEvents, + "Nudge MIDI note", + ); + expect(commandManager.getUndoStack()).toHaveLength(1); + expect(useDAWStore.getState().tracks[1].midiClips[0].events[0].timestamp).toBeCloseTo(0.52); + + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks[1].midiClips[0].events[0].timestamp).toBe(0.5); + useDAWStore.getState().redo(); + expect(useDAWStore.getState().tracks[1].midiClips[0].events[0].timestamp).toBeCloseTo(0.52); + }); + + it("commits one automation-lane resize transaction with undo and redo", () => { + useDAWStore.setState((state) => ({ + tracks: state.tracks.map((track, index) => index !== 0 + ? track + : { + ...track, + showAutomation: true, + automationLanes: [{ + id: "volume-lane", + param: "volume", + points: [], + visible: true, + mode: "read" as const, + armed: false, + readEnabled: true, + }], + }), + })); + + const state = useDAWStore.getState(); + state.setAutomationLaneHeight("audio", "volume-lane", 96); + expect(useDAWStore.getState().tracks[0].automationLanes[0].height).toBeUndefined(); + + state.beginAutomationLaneHeightEdit("audio", "volume-lane"); + state.setAutomationLaneHeight("audio", "volume-lane", 80); + state.setAutomationLaneHeight("audio", "volume-lane", 96); + expect(commandManager.getUndoStack()).toHaveLength(0); + state.commitAutomationLaneHeightEdit("audio", "volume-lane"); + expect(commandManager.getUndoStack()).toHaveLength(1); + + let tracks = useDAWStore.getState().tracks; + expect(tracks[0].automationLanes[0].height).toBe(96); + expect(getEffectiveTrackHeight(tracks[0], 100)).toBe(196); + + const { trackYs } = getTrackYPositions(tracks, 100); + expect(trackYs[1]).toBe(196); + expect(getTrackAtY(170, tracks, trackYs, 100)).toEqual({ + trackIndex: 0, + isInClipArea: false, + laneIndex: 0, + }); + expect(getTrackAtY(197, tracks, trackYs, 100)).toEqual({ + trackIndex: 1, + isInClipArea: true, + laneIndex: -1, + }); + + useDAWStore.getState().undo(); + tracks = useDAWStore.getState().tracks; + expect(tracks[0].automationLanes[0].height).toBeUndefined(); + expect(getEffectiveTrackHeight(tracks[0], 100)).toBe(160); + + useDAWStore.getState().redo(); + tracks = useDAWStore.getState().tracks; + expect(tracks[0].automationLanes[0].height).toBe(96); + expect(getEffectiveTrackHeight(tracks[0], 100)).toBe(196); + }); + + it("does not create lane-height history for a no-op or invalid target", () => { + useDAWStore.setState((state) => ({ + tracks: state.tracks.map((track, index) => index !== 0 + ? track + : { + ...track, + showAutomation: true, + automationLanes: [{ + id: "volume-lane", + param: "volume", + points: [], + visible: true, + mode: "read" as const, + armed: false, + readEnabled: true, + }], + }), + })); + + const state = useDAWStore.getState(); + state.beginAutomationLaneHeightEdit("audio", "volume-lane"); + state.setAutomationLaneHeight("audio", "volume-lane", 60); + state.commitAutomationLaneHeightEdit("audio", "volume-lane"); + expect(commandManager.getUndoStack()).toHaveLength(0); + expect(useDAWStore.getState().tracks[0].automationLanes[0].height).toBeUndefined(); + + state.beginAutomationLaneHeightEdit("missing-track", "volume-lane"); + state.setAutomationLaneHeight("missing-track", "volume-lane", 96); + state.commitAutomationLaneHeightEdit("missing-track", "volume-lane"); + state.beginAutomationLaneHeightEdit("audio", "missing-lane"); + state.setAutomationLaneHeight("audio", "missing-lane", 96); + state.commitAutomationLaneHeightEdit("audio", "missing-lane"); + expect(commandManager.getUndoStack()).toHaveLength(0); + expect(useDAWStore.getState().tracks[0].automationLanes).toHaveLength(1); + }); +}); diff --git a/frontend/src/__tests__/crossPlatformControlGestures.test.ts b/frontend/src/__tests__/crossPlatformControlGestures.test.ts new file mode 100644 index 0000000..42248de --- /dev/null +++ b/frontend/src/__tests__/crossPlatformControlGestures.test.ts @@ -0,0 +1,36 @@ +import { describe, expect, it } from "vitest"; +import scriptEditorSource from "../components/ScriptEditor.tsx?raw"; +import timelineSource from "../components/Timeline.tsx?raw"; +import sliderSource from "../components/ui/Slider/Slider.tsx?raw"; +import { matchesActionShortcut } from "../utils/globalShortcutDispatcher"; +import { useDAWStore } from "../store/useDAWStore"; + +describe("cross-platform component gestures", () => { + it("runs scripts with the platform primary modifier", () => { + useDAWStore.setState({ + keyboardShortcutProfileId: "openstudio", + customShortcuts: {}, + }); + expect(matchesActionShortcut( + { key: "Enter", code: "Enter", ctrlKey: true }, + "script.runCurrent", + "windows", + )).toBe(true); + expect(matchesActionShortcut( + { key: "Enter", code: "Enter", metaKey: true }, + "script.runCurrent", + "macos", + )).toBe(true); + expect(scriptEditorSource).toContain("matchesActionShortcut(e.nativeEvent, actionId)"); + }); + + it("resets both native and custom sliders with Ctrl or Command", () => { + expect(sliderSource.match(/e\.ctrlKey \|\| e\.metaKey/g)).toHaveLength(2); + }); + + it("lets both Ctrl and Command bypass snap for timeline split/context actions", () => { + expect(timelineSource).not.toContain("ctrlBypass: Boolean(e.evt?.ctrlKey),"); + expect(timelineSource.match(/Boolean\(e\.evt\?\.ctrlKey \|\| e\.evt\?\.metaKey\)/g)?.length) + .toBeGreaterThanOrEqual(5); + }); +}); diff --git a/frontend/src/__tests__/customKeyboardProfileStore.test.ts b/frontend/src/__tests__/customKeyboardProfileStore.test.ts new file mode 100644 index 0000000..48e1b95 --- /dev/null +++ b/frontend/src/__tests__/customKeyboardProfileStore.test.ts @@ -0,0 +1,389 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { useDAWStore } from "../store/useDAWStore"; +import { + CUSTOM_KEYBOARD_PROFILE_STORAGE_KEY, + MAX_CUSTOM_KEYBOARD_PROFILES, + MAX_CUSTOM_SHORTCUT_ACTIONS_PER_PROFILE, + MAX_CUSTOM_SHORTCUT_BINDINGS_PER_TARGET, + parsePersistedCustomKeyboardProfiles, + type CustomKeyboardShortcutProfile, + type CustomShortcutMap, +} from "../utils/customShortcutProfiles"; + +const INPUT_PROFILE_SETTINGS_KEY = "openstudio.inputProfiles.v1"; + +describe("custom keyboard profile store", () => { + let storage: Storage; + let previousState: Pick< + ReturnType, + | "customShortcuts" + | "customKeyboardProfiles" + | "activeCustomKeyboardProfileId" + | "keyboardShortcutProfileId" + | "mouseBehaviorProfileId" + | "inputProfileOnboardingSeen" + >; + + beforeEach(() => { + const values = new Map(); + storage = { + get length() { return values.size; }, + clear: () => values.clear(), + getItem: (key) => values.get(key) ?? null, + key: (index) => [...values.keys()][index] ?? null, + removeItem: (key) => { values.delete(key); }, + setItem: (key, value) => { values.set(key, String(value)); }, + }; + vi.stubGlobal("localStorage", storage); + const state = useDAWStore.getState(); + previousState = { + customShortcuts: state.customShortcuts, + customKeyboardProfiles: state.customKeyboardProfiles, + activeCustomKeyboardProfileId: state.activeCustomKeyboardProfileId, + keyboardShortcutProfileId: state.keyboardShortcutProfileId, + mouseBehaviorProfileId: state.mouseBehaviorProfileId, + inputProfileOnboardingSeen: state.inputProfileOnboardingSeen, + }; + useDAWStore.setState({ + customShortcuts: {}, + customKeyboardProfiles: [], + activeCustomKeyboardProfileId: null, + keyboardShortcutProfileId: "reaper", + mouseBehaviorProfileId: "logic_pro", + inputProfileOnboardingSeen: true, + }); + }); + + afterEach(() => { + useDAWStore.setState(previousState); + vi.unstubAllGlobals(); + }); + + it("creates a named overlay automatically and persists multi-platform binding lists", () => { + const state = useDAWStore.getState(); + state.setCustomShortcutBindings("transport.record", ["Ctrl+R", "F12"], "common"); + useDAWStore.getState().setCustomShortcutBindings("transport.record", [], "windows"); + + const updated = useDAWStore.getState(); + expect(updated.activeCustomKeyboardProfileId).toBeTruthy(); + expect(updated.customShortcuts["transport.record"]).toEqual({ + common: ["Ctrl+R", "F12"], + windows: [], + }); + const persisted = JSON.parse(storage.getItem(CUSTOM_KEYBOARD_PROFILE_STORAGE_KEY) ?? "{}"); + expect(persisted).toMatchObject({ + schemaVersion: 2, + activeProfileId: updated.activeCustomKeyboardProfileId, + profiles: [{ + baseProfileId: "reaper", + bindings: updated.customShortcuts, + }], + }); + }); + + it("creates, duplicates independently, renames uniquely, activates, and deletes profiles", () => { + const firstId = useDAWStore.getState().createCustomKeyboardProfile("Editing"); + useDAWStore.getState().addCustomShortcutBinding("edit.copy", "Ctrl+C"); + const copyId = useDAWStore.getState().duplicateKeyboardProfile("Editing"); + expect(firstId).toBeTruthy(); + expect(copyId).toBeTruthy(); + if (!firstId || !copyId) return; + useDAWStore.getState().addCustomShortcutBinding("edit.copy", "F8"); + + const profiles = useDAWStore.getState().customKeyboardProfiles; + expect(profiles.find((profile) => profile.id === firstId)?.name).toBe("Editing"); + expect(profiles.find((profile) => profile.id === copyId)?.name).toBe("Editing 2"); + expect(profiles.find((profile) => profile.id === firstId)?.bindings["edit.copy"]) + .toEqual({ common: ["Ctrl+C"] }); + expect(profiles.find((profile) => profile.id === copyId)?.bindings["edit.copy"]) + .toEqual({ common: ["Ctrl+C", "F8"] }); + + expect(useDAWStore.getState().renameCustomKeyboardProfile(copyId, "Keys")).toBe(true); + expect(useDAWStore.getState().activateCustomKeyboardProfile(firstId)).toBe(true); + expect(useDAWStore.getState().customShortcuts["edit.copy"]).toEqual({ common: ["Ctrl+C"] }); + expect(useDAWStore.getState().deleteCustomKeyboardProfile(firstId)).toBe(true); + expect(useDAWStore.getState().activeCustomKeyboardProfileId).toBeNull(); + expect(useDAWStore.getState().customShortcuts).toEqual({}); + }); + + it("switches from a custom overlay to a built-in keyboard profile as one transaction", () => { + const profileId = useDAWStore.getState().createCustomKeyboardProfile("Editing", "cubase"); + expect(profileId).toBeTruthy(); + useDAWStore.getState().addCustomShortcutBinding("edit.copy", "F8"); + + useDAWStore.getState().setKeyboardShortcutProfile("pro_tools"); + + expect(useDAWStore.getState()).toMatchObject({ + keyboardShortcutProfileId: "pro_tools", + activeCustomKeyboardProfileId: null, + customShortcuts: {}, + }); + expect(JSON.parse(storage.getItem(INPUT_PROFILE_SETTINGS_KEY) ?? "{}")).toMatchObject({ + schemaVersion: 1, + keyboardProfileId: "pro_tools", + }); + expect(JSON.parse(storage.getItem(CUSTOM_KEYBOARD_PROFILE_STORAGE_KEY) ?? "{}")).toMatchObject({ + schemaVersion: 2, + activeProfileId: null, + }); + }); + + it("exports and imports a validated profile with a fresh ID and preserves independent mouse choice", () => { + const originalId = useDAWStore.getState().createCustomKeyboardProfile("Portable", "cubase"); + useDAWStore.getState().setCustomShortcutBindings("edit.copy", ["Ctrl+C", "F6"], "macos"); + const serialized = useDAWStore.getState().exportActiveCustomKeyboardProfile(); + expect(serialized).toContain("openstudio-keyboard-profile"); + + const result = useDAWStore.getState().importCustomKeyboardProfile( + serialized ?? "", + ["edit.copy"], + ); + expect(result.success).toBe(true); + if (!result.success) return; + expect(result.profile.id).not.toBe(originalId); + expect(useDAWStore.getState()).toMatchObject({ + activeCustomKeyboardProfileId: result.profile.id, + keyboardShortcutProfileId: "cubase", + mouseBehaviorProfileId: "logic_pro", + }); + }); + + it("keeps explicit unbind compatibility for the legacy setter", () => { + useDAWStore.getState().setCustomShortcut("transport.loop", ""); + expect(useDAWStore.getState().customShortcuts["transport.loop"]) + .toEqual({ common: [] }); + }); + + it("keeps deduplicated profile names unique at the 64-character boundary", () => { + const longName = "A".repeat(64); + const firstId = useDAWStore.getState().createCustomKeyboardProfile(longName); + const secondId = useDAWStore.getState().createCustomKeyboardProfile(longName); + expect(firstId).toBeTruthy(); + expect(secondId).toBeTruthy(); + const names = useDAWStore.getState().customKeyboardProfiles.map((profile) => profile.name); + expect(names).toEqual([longName, `${"A".repeat(62)} 2`]); + expect(new Set(names).size).toBe(2); + expect(names.every((name) => name.length <= 64)).toBe(true); + }); + + it("keeps profile growth within the persisted collection limit", () => { + const profiles: CustomKeyboardShortcutProfile[] = Array.from( + { length: MAX_CUSTOM_KEYBOARD_PROFILES }, + (_, index) => ({ + id: `custom-cap-${index}`, + name: `Profile ${index}`, + baseProfileId: "reaper", + bindings: {}, + createdAt: index, + updatedAt: index, + }), + ); + useDAWStore.setState({ + customKeyboardProfiles: profiles, + activeCustomKeyboardProfileId: null, + customShortcuts: {}, + }); + storage.setItem(CUSTOM_KEYBOARD_PROFILE_STORAGE_KEY, JSON.stringify({ + schemaVersion: 2, + activeProfileId: null, + profiles, + })); + const rawBeforeRejectedGrowth = storage.getItem(CUSTOM_KEYBOARD_PROFILE_STORAGE_KEY); + + expect(useDAWStore.getState().createCustomKeyboardProfile("Too many")).toBeNull(); + expect(useDAWStore.getState().duplicateKeyboardProfile()).toBeNull(); + useDAWStore.getState().addCustomShortcutBinding("edit.copy", "F1"); + expect(useDAWStore.getState().customKeyboardProfiles).toHaveLength(MAX_CUSTOM_KEYBOARD_PROFILES); + expect(useDAWStore.getState().customShortcuts).toEqual({}); + + const imported = useDAWStore.getState().importCustomKeyboardProfile(JSON.stringify({ + schemaVersion: 2, + type: "openstudio-keyboard-profile", + profile: { + ...profiles[0], + id: "custom-import-source", + name: "Import source", + }, + })); + expect(imported).toMatchObject({ success: false }); + expect(useDAWStore.getState()).toMatchObject({ + keyboardShortcutProfileId: "reaper", + mouseBehaviorProfileId: "logic_pro", + activeCustomKeyboardProfileId: null, + }); + expect(storage.getItem(CUSTOM_KEYBOARD_PROFILE_STORAGE_KEY)).toBe(rawBeforeRejectedGrowth); + + expect(useDAWStore.getState().deleteCustomKeyboardProfile(profiles[0].id)).toBe(true); + expect(useDAWStore.getState().createCustomKeyboardProfile("Allowed again")).toBeTruthy(); + expect(useDAWStore.getState().customKeyboardProfiles).toHaveLength(MAX_CUSTOM_KEYBOARD_PROFILES); + }); + + it("rejects binding and action growth that could not be loaded next launch", () => { + const profileId = useDAWStore.getState().createCustomKeyboardProfile("Bounded"); + expect(profileId).toBeTruthy(); + const bindingsAtLimit = Array.from( + { length: MAX_CUSTOM_SHORTCUT_BINDINGS_PER_TARGET }, + (_, index) => `F${index + 1}`, + ); + useDAWStore.getState().setCustomShortcutBindings("edit.copy", bindingsAtLimit); + useDAWStore.getState().addCustomShortcutBinding("edit.copy", "F13"); + expect(useDAWStore.getState().customShortcuts["edit.copy"]) + .toEqual({ common: bindingsAtLimit }); + useDAWStore.getState().addCustomShortcutBinding("edit.copy", "F1"); + expect(useDAWStore.getState().customShortcuts["edit.copy"]) + .toEqual({ common: bindingsAtLimit }); + useDAWStore.getState().setCustomShortcutBindings("edit.copy", ["F13"], "windows"); + expect(useDAWStore.getState().customShortcuts["edit.copy"]) + .toEqual({ common: bindingsAtLimit, windows: ["F13"] }); + useDAWStore.getState().setCustomShortcutBindings( + "edit.copy", + [...bindingsAtLimit, "F13"], + ); + expect(useDAWStore.getState().customShortcuts["edit.copy"]) + .toEqual({ common: bindingsAtLimit, windows: ["F13"] }); + + const actionsAtLimit = Object.fromEntries(Array.from( + { length: MAX_CUSTOM_SHORTCUT_ACTIONS_PER_PROFILE }, + (_, index) => [`custom.action.${index}`, { common: ["F1"] }], + )) as CustomShortcutMap; + const active = useDAWStore.getState().customKeyboardProfiles.find( + (profile) => profile.id === profileId, + ); + expect(active).toBeTruthy(); + useDAWStore.setState({ + customShortcuts: actionsAtLimit, + customKeyboardProfiles: useDAWStore.getState().customKeyboardProfiles.map((profile) => ( + profile.id === profileId ? { ...profile, bindings: actionsAtLimit } : profile + )), + }); + useDAWStore.getState().setCustomShortcut("custom.action.0", "F2"); + useDAWStore.getState().setCustomShortcut("custom.action.overflow", "F2"); + expect(Object.keys(useDAWStore.getState().customShortcuts)) + .toHaveLength(MAX_CUSTOM_SHORTCUT_ACTIONS_PER_PROFILE); + + const persisted = JSON.parse(storage.getItem(CUSTOM_KEYBOARD_PROFILE_STORAGE_KEY) ?? "null"); + expect(parsePersistedCustomKeyboardProfiles(persisted)).not.toBeNull(); + }); + + it("keeps profile state atomic when local storage rejects a write", () => { + const profileId = useDAWStore.getState().createCustomKeyboardProfile("Durable"); + expect(profileId).toBeTruthy(); + useDAWStore.getState().setCustomShortcutBindings("edit.copy", ["Ctrl+C"]); + const serialized = useDAWStore.getState().exportActiveCustomKeyboardProfile(); + expect(serialized).toBeTruthy(); + + const before = useDAWStore.getState(); + const profilesBefore = before.customKeyboardProfiles; + const shortcutsBefore = before.customShortcuts; + const activeBefore = before.activeCustomKeyboardProfileId; + const keyboardBefore = before.keyboardShortcutProfileId; + const persistedInputBefore = storage.getItem(INPUT_PROFILE_SETTINGS_KEY); + const persistedBefore = storage.getItem(CUSTOM_KEYBOARD_PROFILE_STORAGE_KEY); + vi.spyOn(storage, "setItem").mockImplementation(() => { + throw new Error("quota exceeded"); + }); + + useDAWStore.getState().addCustomShortcutBinding("edit.paste", "F9"); + expect(useDAWStore.getState().createCustomKeyboardProfile("Rejected")).toBeNull(); + expect(useDAWStore.getState().duplicateKeyboardProfile("Rejected copy")).toBeNull(); + expect(useDAWStore.getState().renameCustomKeyboardProfile(profileId!, "Rejected rename")).toBe(false); + expect(useDAWStore.getState().deleteCustomKeyboardProfile(profileId!)).toBe(false); + expect(useDAWStore.getState().activateCustomKeyboardProfile(null)).toBe(false); + const imported = useDAWStore.getState().importCustomKeyboardProfile(serialized ?? ""); + + expect(imported).toMatchObject({ success: false }); + expect(useDAWStore.getState()).toMatchObject({ + customKeyboardProfiles: profilesBefore, + customShortcuts: shortcutsBefore, + activeCustomKeyboardProfileId: activeBefore, + keyboardShortcutProfileId: keyboardBefore, + }); + expect(useDAWStore.getState().customKeyboardProfiles).toBe(profilesBefore); + expect(useDAWStore.getState().customShortcuts).toBe(shortcutsBefore); + expect(storage.getItem(INPUT_PROFILE_SETTINGS_KEY)).toBe(persistedInputBefore); + expect(storage.getItem(CUSTOM_KEYBOARD_PROFILE_STORAGE_KEY)).toBe(persistedBefore); + }); + + it("rolls back both persistence records when the second profile write exceeds quota", () => { + const firstId = useDAWStore.getState().createCustomKeyboardProfile("First", "cubase"); + const secondId = useDAWStore.getState().createCustomKeyboardProfile("Second", "reaper"); + expect(firstId).toBeTruthy(); + expect(secondId).toBeTruthy(); + if (!firstId || !secondId) return; + expect(useDAWStore.getState().activateCustomKeyboardProfile(firstId)).toBe(true); + const serialized = useDAWStore.getState().exportActiveCustomKeyboardProfile(); + expect(serialized).toBeTruthy(); + + const attempts: Array<{ + name: string; + invoke: () => unknown; + assertRejected: (result: unknown) => void; + }> = [ + { + name: "create", + invoke: () => useDAWStore.getState().createCustomKeyboardProfile("Rejected create"), + assertRejected: (result) => expect(result).toBeNull(), + }, + { + name: "duplicate", + invoke: () => useDAWStore.getState().duplicateKeyboardProfile("Rejected duplicate"), + assertRejected: (result) => expect(result).toBeNull(), + }, + { + name: "activate", + invoke: () => useDAWStore.getState().activateCustomKeyboardProfile(secondId), + assertRejected: (result) => expect(result).toBe(false), + }, + { + name: "deactivate", + invoke: () => useDAWStore.getState().activateCustomKeyboardProfile(null), + assertRejected: (result) => expect(result).toBe(false), + }, + { + name: "select built-in", + invoke: () => useDAWStore.getState().setKeyboardShortcutProfile("pro_tools"), + assertRejected: (result) => expect(result).toBeUndefined(), + }, + { + name: "delete active", + invoke: () => useDAWStore.getState().deleteCustomKeyboardProfile(firstId), + assertRejected: (result) => expect(result).toBe(false), + }, + { + name: "import", + invoke: () => useDAWStore.getState().importCustomKeyboardProfile(serialized ?? ""), + assertRejected: (result) => expect(result).toMatchObject({ success: false }), + }, + ]; + + for (const attempt of attempts) { + const before = useDAWStore.getState(); + const profilesBefore = before.customKeyboardProfiles; + const shortcutsBefore = before.customShortcuts; + const activeBefore = before.activeCustomKeyboardProfileId; + const keyboardBefore = before.keyboardShortcutProfileId; + const persistedInputBefore = storage.getItem(INPUT_PROFILE_SETTINGS_KEY); + const persistedProfilesBefore = storage.getItem(CUSTOM_KEYBOARD_PROFILE_STORAGE_KEY); + const realSetItem = storage.setItem.bind(storage); + const setItemSpy = vi.spyOn(storage, "setItem").mockImplementation((key, value) => { + if (key === CUSTOM_KEYBOARD_PROFILE_STORAGE_KEY) { + throw new DOMException(`${attempt.name} quota exceeded`, "QuotaExceededError"); + } + realSetItem(key, value); + }); + + const result = attempt.invoke(); + attempt.assertRejected(result); + setItemSpy.mockRestore(); + + expect(useDAWStore.getState().customKeyboardProfiles).toBe(profilesBefore); + expect(useDAWStore.getState().customShortcuts).toBe(shortcutsBefore); + expect(useDAWStore.getState()).toMatchObject({ + activeCustomKeyboardProfileId: activeBefore, + keyboardShortcutProfileId: keyboardBefore, + }); + expect(storage.getItem(INPUT_PROFILE_SETTINGS_KEY)).toBe(persistedInputBefore); + expect(storage.getItem(CUSTOM_KEYBOARD_PROFILE_STORAGE_KEY)).toBe(persistedProfilesBefore); + } + }); +}); diff --git a/frontend/src/__tests__/customShortcutProfiles.test.ts b/frontend/src/__tests__/customShortcutProfiles.test.ts new file mode 100644 index 0000000..307a50b --- /dev/null +++ b/frontend/src/__tests__/customShortcutProfiles.test.ts @@ -0,0 +1,195 @@ +import { describe, expect, it, vi } from "vitest"; +import { + CUSTOM_KEYBOARD_PROFILE_SCHEMA_VERSION, + MAX_CUSTOM_KEYBOARD_PROFILES, + MAX_CUSTOM_SHORTCUT_BINDINGS_PER_TARGET, + exportCustomKeyboardProfile, + getCustomShortcutTargetBindings, + hasCustomShortcutOverride, + migrateLegacyCustomShortcuts, + parseImportedCustomKeyboardProfile, + parsePersistedCustomKeyboardProfiles, + removeCustomShortcutTarget, + resolveCustomShortcutBindings, + setCustomShortcutTargetBindings, + type CustomKeyboardShortcutProfile, + type CustomShortcutMap, +} from "../utils/customShortcutProfiles"; + +describe("custom keyboard shortcut profiles", () => { + it("migrates legacy single-string bindings and preserves explicit unbinds", () => { + const migrated = migrateLegacyCustomShortcuts({ + "transport.record": "Ctrl+R", + "transport.loop": "", + "invalid action id!": "Ctrl+X", + }, "reaper", 123); + + expect(migrated).toMatchObject({ + schemaVersion: 2, + activeProfileId: "custom-migrated-shortcuts", + profiles: [{ + name: "My Shortcuts", + baseProfileId: "reaper", + createdAt: 123, + bindings: { + "transport.record": { common: ["Ctrl+R"] }, + "transport.loop": { common: [] }, + }, + }], + }); + }); + + it("resolves platform lists before common and distinguishes missing from empty", () => { + const bindings: CustomShortcutMap = { + "transport.record": { + common: ["Ctrl+R", "F12"], + macos: ["Command+Code:KeyR"], + windows: [], + }, + "transport.loop": { macos: [] }, + }; + + expect(resolveCustomShortcutBindings(bindings, "transport.record", "macos")) + .toEqual(["Command+Code:KeyR"]); + expect(resolveCustomShortcutBindings(bindings, "transport.record", "windows")).toEqual([]); + expect(resolveCustomShortcutBindings(bindings, "transport.record", "linux")) + .toEqual(["Ctrl+R", "F12"]); + expect(resolveCustomShortcutBindings(bindings, "transport.record", "other")) + .toEqual(["Ctrl+R", "F12"]); + expect(resolveCustomShortcutBindings(bindings, "transport.loop", "windows")).toBeUndefined(); + expect(resolveCustomShortcutBindings(bindings, "transport.loop", "macos")).toEqual([]); + expect(hasCustomShortcutOverride(bindings, "transport.loop", "windows")).toBe(false); + expect(hasCustomShortcutOverride(bindings, "transport.loop", "macos")).toBe(true); + }); + + it("adds, normalizes, removes, and explicitly empties one target without disturbing others", () => { + let bindings = setCustomShortcutTargetBindings({}, "edit.copy", "common", ["ctrl+c", "Ctrl+C"]); + bindings = setCustomShortcutTargetBindings(bindings, "edit.copy", "macos", ["Command+Code:KeyC"]); + expect(getCustomShortcutTargetBindings(bindings["edit.copy"], "common")).toEqual(["Ctrl+C"]); + expect(getCustomShortcutTargetBindings(bindings["edit.copy"], "macos")) + .toEqual(["Command+Code:KeyC"]); + + bindings = setCustomShortcutTargetBindings(bindings, "edit.copy", "macos", []); + expect(resolveCustomShortcutBindings(bindings, "edit.copy", "macos")).toEqual([]); + bindings = removeCustomShortcutTarget(bindings, "edit.copy", "macos"); + expect(resolveCustomShortcutBindings(bindings, "edit.copy", "macos")).toEqual(["Ctrl+C"]); + bindings = removeCustomShortcutTarget(bindings, "edit.copy"); + expect(bindings).toEqual({}); + }); + + it("round-trips a versioned export and assigns imports a new local identity", () => { + vi.spyOn(Date, "now").mockReturnValue(999); + const profile: CustomKeyboardShortcutProfile = { + id: "custom-source", + name: "Editing Keys", + baseProfileId: "cubase", + bindings: { + "edit.splitAtCursor": { + common: ["Ctrl+E", "Code:KeyS"], + windows: [], + }, + }, + createdAt: 10, + updatedAt: 20, + }; + const parsed = parseImportedCustomKeyboardProfile( + exportCustomKeyboardProfile(profile), + new Set(["edit.splitAtCursor"]), + ); + expect(parsed.success).toBe(true); + if (!parsed.success) return; + expect(parsed.profile.id).not.toBe(profile.id); + expect(parsed.profile).toMatchObject({ + name: "Editing Keys", + baseProfileId: "cubase", + createdAt: 999, + updatedAt: 999, + bindings: profile.bindings, + }); + vi.restoreAllMocks(); + }); + + it("rejects malformed, unsupported, unknown-action, and invalid-key imports", () => { + const envelope = (bindings: unknown) => JSON.stringify({ + schemaVersion: CUSTOM_KEYBOARD_PROFILE_SCHEMA_VERSION, + type: "openstudio-keyboard-profile", + profile: { + id: "custom-import", + name: "Imported", + baseProfileId: "openstudio", + bindings, + createdAt: 1, + updatedAt: 1, + }, + }); + + expect(parseImportedCustomKeyboardProfile("not json")).toMatchObject({ success: false }); + expect(parseImportedCustomKeyboardProfile(JSON.stringify({ schemaVersion: 1 }))) + .toMatchObject({ success: false }); + expect(parseImportedCustomKeyboardProfile( + envelope({ "unknown.action": { common: ["Ctrl+K"] } }), + new Set(["known.action"]), + )).toMatchObject({ success: false }); + expect(parseImportedCustomKeyboardProfile( + envelope({ "known.action": { common: ["Ctrl+"] } }), + new Set(["known.action"]), + )).toMatchObject({ success: false }); + }); + + it("rejects corrupted persisted collections without selecting dangling IDs", () => { + expect(parsePersistedCustomKeyboardProfiles({ + schemaVersion: 2, + activeProfileId: "missing", + profiles: [], + })).toEqual({ + schemaVersion: 2, + activeProfileId: null, + profiles: [], + }); + expect(parsePersistedCustomKeyboardProfiles({ + schemaVersion: 2, + activeProfileId: null, + profiles: [{ id: "bad id with spaces" }], + })).toBeNull(); + }); + + it("accepts persisted collections at their limits and rejects values beyond them", () => { + const profile = (index: number, bindings: CustomShortcutMap = {}): CustomKeyboardShortcutProfile => ({ + id: `custom-limit-${index}`, + name: `Profile ${index}`, + baseProfileId: "openstudio", + bindings, + createdAt: index, + updatedAt: index, + }); + const profiles = Array.from( + { length: MAX_CUSTOM_KEYBOARD_PROFILES }, + (_, index) => profile(index), + ); + expect(parsePersistedCustomKeyboardProfiles({ + schemaVersion: 2, + activeProfileId: profiles[0].id, + profiles, + })?.profiles).toHaveLength(MAX_CUSTOM_KEYBOARD_PROFILES); + expect(parsePersistedCustomKeyboardProfiles({ + schemaVersion: 2, + activeProfileId: null, + profiles: [...profiles, profile(MAX_CUSTOM_KEYBOARD_PROFILES)], + })).toBeNull(); + + const atLimit = Array.from( + { length: MAX_CUSTOM_SHORTCUT_BINDINGS_PER_TARGET }, + (_, index) => `F${index + 1}`, + ); + expect(parsePersistedCustomKeyboardProfiles({ + schemaVersion: 2, + activeProfileId: "custom-bindings", + profiles: [profile(0, { "edit.copy": { common: atLimit } })], + })).not.toBeNull(); + expect(parsePersistedCustomKeyboardProfiles({ + schemaVersion: 2, + activeProfileId: "custom-bindings", + profiles: [profile(0, { "edit.copy": { common: [...atLimit, "F13"] } })], + })).toBeNull(); + }); +}); diff --git a/frontend/src/__tests__/detachedWindowAuthority.test.ts b/frontend/src/__tests__/detachedWindowAuthority.test.ts new file mode 100644 index 0000000..ea7dbba --- /dev/null +++ b/frontend/src/__tests__/detachedWindowAuthority.test.ts @@ -0,0 +1,827 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { nativeBridge } from "../services/NativeBridge"; +import { getRegisteredAction, getRegisteredActions } from "../store/actionRegistry"; +import { commandManager } from "../store/commands"; +import { + createDefaultTrack, + type AudioClip, + type MIDIClip, + type MIDIEvent, + type MidiEditorSession, + type Track, + useDAWStore, +} from "../store/useDAWStore"; +import { + applyDetachedMidiQuantizeRequest, + applyDetachedLoopRegionRequest, + executeDetachedMainActionRequest, + getDetachedActionOwnership, + isLiveDetachedMidiSessionId, + isDetachedMainActionId, + parseDetachedMainActionRequest, + setDetachedMainActionAvailability, +} from "../utils/detachedMainActionRouting"; +import { noteIdFor } from "../utils/midiNotes"; +import { dispatchGlobalShortcut, getEffectiveActionShortcuts } from "../utils/globalShortcutDispatcher"; +import { activateShortcutContext, resetShortcutContextForTests } from "../utils/shortcutContext"; +import { KEYBOARD_SHORTCUT_PROFILES } from "../utils/shortcutProfiles"; +import { + applyRemoteMixerUISnapshot, + cancelPendingMixerRemoteEdit, + extractMixerUISnapshot, + flushPendingMixerRemoteEdit, +} from "../utils/mixerWindowSync"; +import { + applyMidiEditorUISnapshot, + cancelPendingMidiRemoteEdits, + extractMidiEditorUISnapshot, + flushPendingMidiRemoteEdits, + parseMidiEditorUISnapshot, +} from "../utils/midiEditorWindowSync"; + +const originalState = useDAWStore.getState(); + +function audioClip(id: string): AudioClip { + return { + id, + filePath: `C:/audio/${id}.wav`, + name: id, + startTime: 0, + duration: 2, + offset: 0, + color: "#123456", + volumeDB: 0, + fadeIn: 0, + fadeOut: 0, + }; +} + +function noteEvents(velocity: number): MIDIEvent[] { + return [ + { type: "noteOn", timestamp: 0.25, note: 60, velocity, channel: 1 }, + { type: "noteOff", timestamp: 0.75, note: 60, velocity: 0, channel: 1 }, + ]; +} + +function midiClip(id: string, velocity = 60): MIDIClip { + return { + id, + name: id, + startTime: 10, + duration: 4, + sourceLength: 4, + loopLength: 4, + events: noteEvents(velocity), + ccEvents: [], + color: "#654321", + }; +} + +function windowedMidiSession( + trackId: string, + clipId: string, + sessionId = "midi-window-session", +): MidiEditorSession { + return { + sessionId, + trackId, + clipId, + mode: "windowed", + selectedNoteIds: [], + midiEditRange: null, + editCursorTime: null, + activeTool: "select", + visibleLanes: [], + activeLaneId: "velocity", + scrollY: 0, + windowPixelsPerSecond: 100, + windowScrollX: 0, + openedAt: 1, + updatedAt: 1, + }; +} + +function resetProject(): void { + cancelPendingMixerRemoteEdit(); + cancelPendingMidiRemoteEdits(); + commandManager.clear(); + resetShortcutContextForTests(); + useDAWStore.setState({ + tracks: [], + trackGroups: [], + selectedTrackId: null, + selectedTrackIds: [], + lastSelectedTrackId: null, + selectedClipId: null, + selectedClipIds: [], + selectedNoteIds: [], + midiEditorSessions: [], + activeMidiEditorSessionId: null, + dockedMidiEditorSessionId: null, + pianoRollTrackId: null, + pianoRollClipId: null, + showPianoRoll: false, + globalLocked: false, + lockSettings: { items: false, envelopes: false, timeSelection: false, markers: false }, + timeSelection: null, + canUndo: false, + canRedo: false, + isModified: false, + }); +} + +function currentMidiClip(trackId: string, clipId: string): MIDIClip { + return useDAWStore.getState().tracks + .find((track) => track.id === trackId)! + .midiClips.find((clip) => clip.id === clipId)!; +} + +beforeEach(resetProject); + +afterEach(() => { + vi.restoreAllMocks(); + cancelPendingMixerRemoteEdit(); + cancelPendingMidiRemoteEdits(); + commandManager.clear(); + useDAWStore.setState(originalState); +}); + +describe("authoritative detached-window project routing", () => { + it("classifies every catalog action and every macOS/Windows profile binding for detached ownership", () => { + const actions = getRegisteredActions(); + for (const profile of KEYBOARD_SHORTCUT_PROFILES) { + useDAWStore.setState({ + keyboardShortcutProfileId: profile.id, + activeCustomKeyboardProfileId: null, + customShortcuts: {}, + }); + for (const action of actions) { + const ownership = getDetachedActionOwnership(action.id); + expect(ownership, `${profile.id}:${action.id}`).not.toBeNull(); + expect( + isDetachedMainActionId(action.id), + `${profile.id}:${action.id}`, + ).toBe(ownership !== "local-editor"); + for (const platform of ["macos", "windows"] as const) { + for (const binding of getEffectiveActionShortcuts(action, platform)) { + expect(ownership, `${profile.id}:${platform}:${binding}:${action.id}`).not.toBeNull(); + } + } + } + } + }); + + it.each([ + ["mixer", { kind: "mixer" } as const], + ["midi", { kind: "piano_roll", sessionId: "detached-midi" } as const], + ["plugin", { kind: "plugin", sessionId: "detached-plugin" } as const], + ])("forwards a project transport binding from the detached %s realm without local mutation", ( + role, + context, + ) => { + useDAWStore.setState({ + keyboardShortcutProfileId: "openstudio", + activeCustomKeyboardProfileId: null, + customShortcuts: {}, + transport: { ...useDAWStore.getState().transport, currentTime: 5 }, + }); + setDetachedMainActionAvailability(["transport.rewind"]); + activateShortcutContext(context); + const publish = vi.spyOn(nativeBridge, "publishAppCommand").mockResolvedValue(true); + const preventDefault = vi.fn(); + + expect(dispatchGlobalShortcut({ + key: "Home", + code: "Home", + source: "browser", + preventDefault, + }, "windows", { role })).toBe(true); + expect(preventDefault).toHaveBeenCalledOnce(); + expect(publish).toHaveBeenCalledWith(expect.objectContaining({ + command: "action.execute", + actionId: "transport.rewind", + })); + expect(useDAWStore.getState().transport.currentTime).toBe(5); + }); + + it("rejects arbitrary action payloads and filters track selection in the main realm", () => { + expect(parseDetachedMainActionRequest({ + command: "action.execute", + actionId: "internal.runAnything", + selectedTrackIds: [], + })).toBeNull(); + expect(parseDetachedMainActionRequest({ + command: "action.execute", + actionId: "track.toggleSelectedMute", + selectedTrackIds: "track-a", + })).toBeNull(); + + const track = createDefaultTrack("track-a", "A", "#111", "audio", []); + useDAWStore.setState({ tracks: [track] }); + const execute = vi.fn(); + expect(executeDetachedMainActionRequest({ + command: "action.execute", + actionId: "track.toggleSelectedMute", + selectedTrackIds: ["missing", "track-a", "track-a"], + }, () => ({ + canHandleShortcut: () => useDAWStore.getState().selectedTrackIds.length > 0, + execute, + }))).toBe(true); + expect(execute).toHaveBeenCalledOnce(); + expect(useDAWStore.getState().selectedTrackIds).toEqual(["track-a"]); + }); + + it("runs a mixer structural shortcut in main against the complete source track", async () => { + const source = createDefaultTrack("source", "Source", "#111", "audio", []); + source.clips = [audioClip("full-audio")]; + useDAWStore.setState({ + tracks: [source], + selectedTrackId: null, + selectedTrackIds: [], + lastSelectedTrackId: null, + }); + const duplicateSelectedTracks = vi.fn(async () => { + const state = useDAWStore.getState(); + const selected = state.tracks.find((track) => track.id === state.selectedTrackIds[0])!; + expect(selected.clips.map((clip) => clip.id)).toEqual(["full-audio"]); + const duplicate: Track = { + ...structuredClone(selected), + id: "source-copy", + clips: selected.clips.map((clip) => ({ ...clip, id: `${clip.id}-copy` })), + }; + useDAWStore.setState({ tracks: [selected, duplicate] }); + return [duplicate.id]; + }); + useDAWStore.setState({ duplicateSelectedTracks }); + + expect(executeDetachedMainActionRequest({ + command: "action.execute", + actionId: "track.duplicateSelected", + selectedTrackIds: ["source"], + }, getRegisteredAction)).toBe(true); + await Promise.resolve(); + + expect(duplicateSelectedTracks).toHaveBeenCalledOnce(); + expect(useDAWStore.getState().tracks[1].clips[0].id).toBe("full-audio-copy"); + }); + + it("preserves clip content and coalesces a detached mixer fader burst into one undo", () => { + const track = createDefaultTrack("track-a", "A", "#111", "audio", []); + track.clips = [audioClip("audio-a")]; + useDAWStore.setState({ tracks: [track] }); + const first = structuredClone(extractMixerUISnapshot()); + first.tracks[0].volumeDB = -3; + first.tracks[0].volume = 0.7; + applyRemoteMixerUISnapshot(first); + const second = structuredClone(first); + second.tracks[0].volumeDB = -9; + second.tracks[0].volume = 0.35; + applyRemoteMixerUISnapshot(second); + + expect(flushPendingMixerRemoteEdit()).toBe(true); + expect(commandManager.getUndoStack()).toHaveLength(1); + expect(useDAWStore.getState().tracks[0]).toMatchObject({ volumeDB: -9, volume: 0.35 }); + expect(useDAWStore.getState().tracks[0].clips.map((clip) => clip.id)).toEqual(["audio-a"]); + + // A main-window clip mutation after the mixer packet is outside the + // detached mixer's ownership and must survive mixer undo/redo. + useDAWStore.setState((state) => ({ + tracks: state.tracks.map((candidate) => candidate.id === track.id + ? { ...candidate, clips: candidate.clips.map((clip) => ({ ...clip, name: "main-edit" })) } + : candidate), + })); + + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks[0]).toMatchObject({ volumeDB: 0, volume: 0.8 }); + expect(useDAWStore.getState().tracks[0].clips[0]).toMatchObject({ id: "audio-a", name: "main-edit" }); + useDAWStore.getState().redo(); + expect(useDAWStore.getState().tracks[0]).toMatchObject({ volumeDB: -9, volume: 0.35 }); + expect(useDAWStore.getState().tracks[0].clips[0].name).toBe("main-edit"); + }); + + it("splits rapid detached mixer edits when the target or parameter changes", () => { + const firstTrack = createDefaultTrack("track-a", "A", "#111", "audio", []); + const secondTrack = createDefaultTrack("track-b", "B", "#222", "audio", []); + useDAWStore.setState({ tracks: [firstTrack, secondTrack] }); + const panPacket = structuredClone(extractMixerUISnapshot()); + panPacket.tracks[0].pan = 0.4; + applyRemoteMixerUISnapshot(panPacket); + const volumePacket = structuredClone(panPacket); + volumePacket.tracks[1].volumeDB = -6; + volumePacket.tracks[1].volume = 0.5; + applyRemoteMixerUISnapshot(volumePacket); + + expect(commandManager.getUndoStack()).toHaveLength(1); + expect(flushPendingMixerRemoteEdit()).toBe(true); + expect(commandManager.getUndoStack()).toHaveLength(2); + + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks[0].pan).toBe(0.4); + expect(useDAWStore.getState().tracks[1]).toMatchObject({ volumeDB: 0, volume: 0.8 }); + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks[0].pan).toBe(0); + }); + + it("does not create mixer history when a detached gesture returns to its start", () => { + const track = createDefaultTrack("track-a", "A", "#111", "audio", []); + useDAWStore.setState({ tracks: [track] }); + const changed = structuredClone(extractMixerUISnapshot()); + changed.tracks[0].pan = 0.5; + applyRemoteMixerUISnapshot(changed); + const restored = structuredClone(changed); + restored.tracks[0].pan = 0; + applyRemoteMixerUISnapshot(restored); + + expect(flushPendingMixerRemoteEdit()).toBe(false); + expect(commandManager.getUndoStack()).toHaveLength(0); + expect(useDAWStore.getState().tracks[0].pan).toBe(0); + }); + + it("uses boundary-only mixer packets to commit two quick gestures on the same target", () => { + const track = createDefaultTrack("track-a", "A", "#111", "audio", []); + useDAWStore.setState({ tracks: [track] }); + + const firstPreview = structuredClone(extractMixerUISnapshot()); + firstPreview.editBoundaryToken = "remote-mixer:0"; + firstPreview.tracks[0].pan = 0.25; + applyRemoteMixerUISnapshot(firstPreview); + const firstCommit = structuredClone(firstPreview); + firstCommit.editBoundaryToken = "remote-mixer:1"; + applyRemoteMixerUISnapshot(firstCommit); + + const secondPreview = structuredClone(firstCommit); + secondPreview.tracks[0].pan = 0.75; + applyRemoteMixerUISnapshot(secondPreview); + const secondCommit = structuredClone(secondPreview); + secondCommit.editBoundaryToken = "remote-mixer:2"; + applyRemoteMixerUISnapshot(secondCommit); + + expect(commandManager.getUndoStack()).toHaveLength(2); + expect(flushPendingMixerRemoteEdit()).toBe(false); + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks[0].pan).toBe(0.25); + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks[0].pan).toBe(0); + }); + + it("coalesces multiple MIDI preview packets and supports authoritative undo/redo", () => { + const track = createDefaultTrack("midi-track", "MIDI", "#222", "midi", []); + track.midiClips = [midiClip("midi-clip", 60)]; + const session = windowedMidiSession(track.id, "midi-clip"); + useDAWStore.setState({ + tracks: [track], + midiEditorSessions: [session], + activeMidiEditorSessionId: session.sessionId, + pianoRollTrackId: track.id, + pianoRollClipId: "midi-clip", + selectedTrackIds: ["unrelated-main-selection"], + selectedClipIds: ["unrelated-main-clip"], + }); + const first = structuredClone(extractMidiEditorUISnapshot(useDAWStore.getState(), session.sessionId)!); + first.tracks[0].midiClips[0].events = noteEvents(72); + first.selectedTrackIds = [track.id]; + first.selectedClipIds = ["midi-clip"]; + applyMidiEditorUISnapshot(first); + const second = structuredClone(first); + second.tracks[0].midiClips[0].events = noteEvents(88); + applyMidiEditorUISnapshot(second); + + expect(flushPendingMidiRemoteEdits()).toBe(1); + expect(commandManager.getUndoStack()).toHaveLength(1); + expect(currentMidiClip(track.id, "midi-clip").events[0].velocity).toBe(88); + expect(useDAWStore.getState().selectedTrackIds).toEqual(["unrelated-main-selection"]); + expect(useDAWStore.getState().selectedClipIds).toEqual(["unrelated-main-clip"]); + + useDAWStore.getState().undo(); + expect(currentMidiClip(track.id, "midi-clip").events[0].velocity).toBe(60); + useDAWStore.getState().redo(); + expect(currentMidiClip(track.id, "midi-clip").events[0].velocity).toBe(88); + }); + + it("does not create MIDI history when a multi-packet gesture is cancelled", () => { + const track = createDefaultTrack("midi-track", "MIDI", "#222", "midi", []); + track.midiClips = [midiClip("midi-clip", 60)]; + const session = windowedMidiSession(track.id, "midi-clip"); + useDAWStore.setState({ + tracks: [track], + midiEditorSessions: [session], + activeMidiEditorSessionId: session.sessionId, + pianoRollTrackId: track.id, + pianoRollClipId: "midi-clip", + }); + const changed = structuredClone(extractMidiEditorUISnapshot(useDAWStore.getState(), session.sessionId)!); + changed.tracks[0].midiClips[0].events = noteEvents(91); + applyMidiEditorUISnapshot(changed); + const restored = structuredClone(changed); + restored.tracks[0].midiClips[0].events = noteEvents(60); + applyMidiEditorUISnapshot(restored); + + expect(flushPendingMidiRemoteEdits()).toBe(0); + expect(commandManager.getUndoStack()).toHaveLength(0); + expect(currentMidiClip(track.id, "midi-clip").events[0].velocity).toBe(60); + }); + + it("splits rapid MIDI edits when their semantic property target changes", () => { + const track = createDefaultTrack("midi-track", "MIDI", "#222", "midi", []); + track.midiClips = [midiClip("midi-clip", 60)]; + const session = windowedMidiSession(track.id, "midi-clip"); + useDAWStore.setState({ + tracks: [track], + midiEditorSessions: [session], + activeMidiEditorSessionId: session.sessionId, + pianoRollTrackId: track.id, + pianoRollClipId: "midi-clip", + }); + const velocityPacket = structuredClone(extractMidiEditorUISnapshot(useDAWStore.getState(), session.sessionId)!); + velocityPacket.tracks[0].midiClips[0].events = noteEvents(75); + applyMidiEditorUISnapshot(velocityPacket); + const timingPacket = structuredClone(velocityPacket); + timingPacket.tracks[0].midiClips[0].events = timingPacket.tracks[0].midiClips[0].events.map( + (event) => ({ ...event, timestamp: event.timestamp + 0.1 }), + ); + applyMidiEditorUISnapshot(timingPacket); + + expect(commandManager.getUndoStack()).toHaveLength(1); + expect(flushPendingMidiRemoteEdits()).toBe(1); + expect(commandManager.getUndoStack()).toHaveLength(2); + + useDAWStore.getState().undo(); + expect(currentMidiClip(track.id, "midi-clip").events[0]).toMatchObject({ + timestamp: 0.25, + velocity: 75, + }); + useDAWStore.getState().undo(); + expect(currentMidiClip(track.id, "midi-clip").events[0]).toMatchObject({ + timestamp: 0.25, + velocity: 60, + }); + }); + + it("uses boundary-only MIDI packets to commit two quick edits on the same property", () => { + const track = createDefaultTrack("midi-track", "MIDI", "#222", "midi", []); + track.midiClips = [midiClip("midi-clip", 60)]; + const session = windowedMidiSession(track.id, "midi-clip"); + useDAWStore.setState({ + tracks: [track], + midiEditorSessions: [session], + activeMidiEditorSessionId: session.sessionId, + pianoRollTrackId: track.id, + pianoRollClipId: "midi-clip", + }); + + const firstPreview = structuredClone(extractMidiEditorUISnapshot(useDAWStore.getState(), session.sessionId)!); + firstPreview.editBoundaryToken = "remote-midi:0"; + firstPreview.tracks[0].midiClips[0].events = noteEvents(70); + applyMidiEditorUISnapshot(firstPreview); + const firstCommit = structuredClone(firstPreview); + firstCommit.editBoundaryToken = "remote-midi:1"; + applyMidiEditorUISnapshot(firstCommit); + + const secondPreview = structuredClone(firstCommit); + secondPreview.tracks[0].midiClips[0].events = noteEvents(90); + applyMidiEditorUISnapshot(secondPreview); + const secondCommit = structuredClone(secondPreview); + secondCommit.editBoundaryToken = "remote-midi:2"; + applyMidiEditorUISnapshot(secondCommit); + + expect(commandManager.getUndoStack()).toHaveLength(2); + expect(flushPendingMidiRemoteEdits()).toBe(0); + useDAWStore.getState().undo(); + expect(currentMidiClip(track.id, "midi-clip").events[0].velocity).toBe(70); + useDAWStore.getState().undo(); + expect(currentMidiClip(track.id, "midi-clip").events[0].velocity).toBe(60); + }); + + it("accepts only MIDI event content and preserves main-owned clip structure", () => { + const track = createDefaultTrack("midi-track", "MIDI", "#222", "midi", []); + track.midiClips = [{ + ...midiClip("midi-clip", 60), + name: "Authoritative name", + startTime: 10, + duration: 4, + sourceLength: 4, + color: "#112233", + groupId: "main-group", + muted: false, + locked: false, + }]; + const session = windowedMidiSession(track.id, "midi-clip"); + useDAWStore.setState({ + tracks: [track], + midiEditorSessions: [session], + activeMidiEditorSessionId: session.sessionId, + }); + + const packet = structuredClone(extractMidiEditorUISnapshot(useDAWStore.getState(), session.sessionId)!); + Object.assign(packet.tracks[0].midiClips[0], { + name: "Stale detached name", + startTime: 99, + duration: 99, + sourceLength: 99, + color: "#ffffff", + groupId: "detached-group", + muted: true, + locked: true, + events: noteEvents(96), + ccEvents: [{ cc: 1, time: 0.5, value: 100 }], + quantizeBackup: { events: noteEvents(60), ccEvents: [] }, + }); + + expect(applyMidiEditorUISnapshot(packet)).toBe(true); + expect(currentMidiClip(track.id, "midi-clip")).toMatchObject({ + id: "midi-clip", + name: "Authoritative name", + startTime: 10, + duration: 4, + sourceLength: 4, + color: "#112233", + groupId: "main-group", + muted: false, + locked: false, + events: noteEvents(96), + ccEvents: [{ cc: 1, time: 0.5, value: 100 }], + }); + expect(currentMidiClip(track.id, "midi-clip").quantizeBackup?.events).toEqual(noteEvents(60)); + }); + + it("preserves a concurrent main structural edit on the same MIDI clip through detached undo/redo", () => { + const track = createDefaultTrack("midi-track", "MIDI", "#222", "midi", []); + track.midiClips = [midiClip("midi-clip", 60)]; + const session = windowedMidiSession(track.id, "midi-clip"); + useDAWStore.setState({ tracks: [track], midiEditorSessions: [session] }); + const packet = structuredClone(extractMidiEditorUISnapshot(useDAWStore.getState(), session.sessionId)!); + packet.tracks[0].midiClips[0].events = noteEvents(91); + expect(applyMidiEditorUISnapshot(packet)).toBe(true); + expect(flushPendingMidiRemoteEdits()).toBe(1); + + useDAWStore.setState((state) => ({ + tracks: state.tracks.map((candidate) => candidate.id === track.id + ? { + ...candidate, + midiClips: candidate.midiClips.map((clip) => clip.id === "midi-clip" + ? { ...clip, name: "Main rename", startTime: 24, duration: 8, locked: true } + : clip), + } + : candidate), + })); + useDAWStore.getState().undo(); + expect(currentMidiClip(track.id, "midi-clip")).toMatchObject({ + name: "Main rename", + startTime: 24, + duration: 8, + locked: true, + events: noteEvents(60), + }); + useDAWStore.getState().redo(); + expect(currentMidiClip(track.id, "midi-clip")).toMatchObject({ + name: "Main rename", + startTime: 24, + duration: 8, + locked: true, + events: noteEvents(91), + }); + }); + + it.each([ + ["global lock", { globalLocked: true }], + ["item lock", { lockSettings: { items: true, envelopes: false, timeSelection: false, markers: false } }], + ["frozen track", { frozen: true }], + ["clip lock", { clipLocked: true }], + ])("rejects detached MIDI content under %s without history", (_label, condition) => { + const track = createDefaultTrack("midi-track", "MIDI", "#222", "midi", []); + track.frozen = "frozen" in condition ? Boolean(condition.frozen) : false; + track.midiClips = [{ + ...midiClip("midi-clip", 60), + locked: "clipLocked" in condition ? Boolean(condition.clipLocked) : false, + }]; + const session = windowedMidiSession(track.id, "midi-clip"); + useDAWStore.setState({ + tracks: [track], + midiEditorSessions: [session], + activeMidiEditorSessionId: session.sessionId, + ...("globalLocked" in condition ? { globalLocked: condition.globalLocked } : {}), + ...("lockSettings" in condition ? { lockSettings: condition.lockSettings } : {}), + }); + const packet = structuredClone(extractMidiEditorUISnapshot(useDAWStore.getState(), session.sessionId)!); + packet.tracks[0].midiClips[0].events = noteEvents(99); + + expect(applyMidiEditorUISnapshot(packet)).toBe(false); + expect(currentMidiClip(track.id, "midi-clip").events).toEqual(noteEvents(60)); + expect(flushPendingMidiRemoteEdits()).toBe(0); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it("cancels and restores an uncommitted MIDI preview when a lock engages mid-gesture", () => { + const track = createDefaultTrack("midi-track", "MIDI", "#222", "midi", []); + track.midiClips = [{ ...midiClip("midi-clip", 60), locked: false }]; + const session = windowedMidiSession(track.id, "midi-clip"); + useDAWStore.setState({ + tracks: [track], + midiEditorSessions: [session], + activeMidiEditorSessionId: session.sessionId, + }); + const preview = structuredClone(extractMidiEditorUISnapshot(useDAWStore.getState(), session.sessionId)!); + preview.editBoundaryToken = "remote-midi:preview"; + preview.tracks[0].midiClips[0].events = noteEvents(78); + expect(applyMidiEditorUISnapshot(preview)).toBe(true); + expect(currentMidiClip(track.id, "midi-clip").events).toEqual(noteEvents(78)); + + useDAWStore.setState((state) => ({ + tracks: state.tracks.map((candidate) => candidate.id === track.id + ? { + ...candidate, + midiClips: candidate.midiClips.map((clip) => clip.id === "midi-clip" + ? { ...clip, locked: true } + : clip), + } + : candidate), + })); + const latePacket = structuredClone(preview); + latePacket.tracks[0].midiClips[0].events = noteEvents(101); + expect(applyMidiEditorUISnapshot(latePacket)).toBe(false); + + expect(currentMidiClip(track.id, "midi-clip")).toMatchObject({ + locked: true, + events: noteEvents(60), + }); + expect(flushPendingMidiRemoteEdits()).toBe(0); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it("revalidates MIDI editability at idle commit even without another detached packet", () => { + const track = createDefaultTrack("midi-track", "MIDI", "#222", "midi", []); + track.midiClips = [midiClip("midi-clip", 60)]; + const session = windowedMidiSession(track.id, "midi-clip"); + useDAWStore.setState({ + tracks: [track], + midiEditorSessions: [session], + activeMidiEditorSessionId: session.sessionId, + }); + const preview = structuredClone(extractMidiEditorUISnapshot(useDAWStore.getState(), session.sessionId)!); + preview.tracks[0].midiClips[0].events = noteEvents(84); + expect(applyMidiEditorUISnapshot(preview)).toBe(true); + expect(currentMidiClip(track.id, "midi-clip").events).toEqual(noteEvents(84)); + + useDAWStore.setState({ globalLocked: true }); + expect(flushPendingMidiRemoteEdits()).toBe(0); + expect(currentMidiClip(track.id, "midi-clip").events).toEqual(noteEvents(60)); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it("rejects stale or mismatched detached MIDI sessions", () => { + const track = createDefaultTrack("midi-track", "MIDI", "#222", "midi", []); + track.midiClips = [midiClip("midi-clip", 60)]; + const session = windowedMidiSession(track.id, "midi-clip"); + useDAWStore.setState({ tracks: [track], midiEditorSessions: [session] }); + const base = structuredClone(extractMidiEditorUISnapshot(useDAWStore.getState(), session.sessionId)!); + base.tracks[0].midiClips[0].events = noteEvents(90); + + expect(applyMidiEditorUISnapshot({ ...base, sessionId: "stale-session" })).toBe(false); + expect(applyMidiEditorUISnapshot({ ...base, mode: "docked" })).toBe(false); + expect(applyMidiEditorUISnapshot({ + ...base, + trackId: "wrong-track", + tracks: [{ ...base.tracks[0], id: "wrong-track" }], + })).toBe(false); + expect(currentMidiClip(track.id, "midi-clip").events).toEqual(noteEvents(60)); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it("quantizes only the validated selection owned by the sending MIDI session", () => { + const firstTrack = createDefaultTrack("midi-a", "MIDI A", "#111", "midi", []); + const secondTrack = createDefaultTrack("midi-b", "MIDI B", "#222", "midi", []); + firstTrack.midiClips = [midiClip("clip-a")]; + secondTrack.midiClips = [midiClip("clip-b")]; + const firstSession = windowedMidiSession(firstTrack.id, "clip-a", "session-a"); + const secondSession = windowedMidiSession(secondTrack.id, "clip-b", "session-b"); + const originalMainSelection = [noteIdFor("clip-b", 0.25, 60)]; + const quantize = vi.fn((trackId?: string, clipId?: string) => { + expect(trackId).toBe("midi-a"); + expect(clipId).toBe("clip-a"); + expect(useDAWStore.getState().selectedNoteIds).toEqual([ + noteIdFor("clip-a", 0.25, 60), + ]); + return [noteIdFor("clip-a", 0, 60)]; + }); + useDAWStore.setState({ + tracks: [firstTrack, secondTrack], + midiEditorSessions: [firstSession, secondSession], + activeMidiEditorSessionId: secondSession.sessionId, + pianoRollTrackId: secondTrack.id, + pianoRollClipId: "clip-b", + selectedNoteIds: originalMainSelection, + quantizeSelectedMIDINotesUsingLast: quantize, + }); + + expect(applyDetachedMidiQuantizeRequest({ + command: "midi.quantize", + sessionId: firstSession.sessionId, + selectedNoteIds: [noteIdFor("clip-a", 0.25, 60)], + midiEditRange: null, + }, "main")).toBe(true); + expect(quantize).toHaveBeenCalledOnce(); + expect(useDAWStore.getState().selectedNoteIds).toEqual(originalMainSelection); + expect(useDAWStore.getState().midiEditorSessions.find((entry) => entry.sessionId === "session-a")?.selectedNoteIds) + .toEqual([noteIdFor("clip-a", 0, 60)]); + + expect(applyDetachedMidiQuantizeRequest({ + command: "midi.quantize", + sessionId: secondSession.sessionId, + selectedNoteIds: [noteIdFor("clip-a", 0.25, 60)], + midiEditRange: null, + }, "main")).toBe(false); + expect(applyDetachedMidiQuantizeRequest({ + command: "midi.quantize", + sessionId: "stale-session", + selectedNoteIds: [], + midiEditRange: null, + }, "main")).toBe(false); + expect(isLiveDetachedMidiSessionId("stale-session", "main")).toBe(false); + }); + + it("validates MIDI payloads and applies loop-from-selection only to its live windowed clip", () => { + expect(parseMidiEditorUISnapshot({ sessionId: "bad", tracks: [] })).toBeNull(); + const track = createDefaultTrack("midi-track", "MIDI", "#222", "midi", []); + track.midiClips = [midiClip("midi-clip")]; + const session = windowedMidiSession(track.id, "midi-clip"); + useDAWStore.setState({ tracks: [track], midiEditorSessions: [session] }); + + expect(applyDetachedLoopRegionRequest({ + command: "transport.setLoopRegion", + sessionId: session.sessionId, + start: 10.25, + end: 10.75, + })).toBe(true); + expect(useDAWStore.getState().transport).toMatchObject({ + loopStart: 10.25, + loopEnd: 10.75, + }); + expect(applyDetachedLoopRegionRequest({ + command: "transport.setLoopRegion", + sessionId: "other-session", + start: 10.25, + end: 10.75, + })).toBe(false); + expect(applyDetachedLoopRegionRequest({ + command: "transport.setLoopRegion", + sessionId: session.sessionId, + start: 9, + end: 15, + })).toBe(false); + }); + + it("flushes a live detached gesture before executing main undo", () => { + const track = createDefaultTrack("track-a", "A", "#111", "audio", []); + useDAWStore.setState({ tracks: [track] }); + const changed = structuredClone(extractMixerUISnapshot()); + changed.tracks[0].pan = -0.75; + applyRemoteMixerUISnapshot(changed); + expect(commandManager.getUndoStack()).toHaveLength(0); + + expect(executeDetachedMainActionRequest({ + command: "action.execute", + actionId: "edit.undo", + selectedTrackIds: [], + }, getRegisteredAction, { + flushPendingEdits: () => { flushPendingMixerRemoteEdit(); }, + })).toBe(true); + expect(useDAWStore.getState().tracks[0].pan).toBe(0); + expect(commandManager.getRedoStack()).toHaveLength(1); + }); + + it("routes detached Ctrl+Z while both replica and advertised undo availability are stale", () => { + const track = createDefaultTrack("track-a", "A", "#111", "audio", []); + useDAWStore.setState({ tracks: [track], canUndo: false, canRedo: false }); + const changed = structuredClone(extractMixerUISnapshot()); + changed.editBoundaryToken = "remote-mixer:live-preview"; + changed.tracks[0].pan = -0.6; + applyRemoteMixerUISnapshot(changed); + expect(commandManager.getUndoStack()).toHaveLength(0); + setDetachedMainActionAvailability([]); + activateShortcutContext({ kind: "mixer" }); + + const publish = vi.spyOn(nativeBridge, "publishAppCommand").mockResolvedValue(true); + const preventDefault = vi.fn(); + expect(dispatchGlobalShortcut({ + key: "z", + code: "KeyZ", + ctrlKey: true, + source: "browser", + preventDefault, + }, "windows", { + role: "mixer", + canHandleAction: () => false, + })).toBe(true); + expect(preventDefault).toHaveBeenCalledOnce(); + expect(publish).toHaveBeenCalledOnce(); + const request = publish.mock.calls[0][0]; + expect(request).toMatchObject({ command: "action.execute", actionId: "edit.undo" }); + + expect(executeDetachedMainActionRequest(request, getRegisteredAction, { + role: "main", + flushPendingEdits: () => { flushPendingMixerRemoteEdit(); }, + })).toBe(true); + expect(useDAWStore.getState().tracks[0].pan).toBe(0); + expect(commandManager.getRedoStack()).toHaveLength(1); + }); +}); diff --git a/frontend/src/__tests__/editorParityActions.test.ts b/frontend/src/__tests__/editorParityActions.test.ts new file mode 100644 index 0000000..92684ed --- /dev/null +++ b/frontend/src/__tests__/editorParityActions.test.ts @@ -0,0 +1,437 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import pianoRollSource from "../components/PianoRoll.tsx?raw"; +import { nativeBridge } from "../services/NativeBridge"; +import { + getRegisteredAction, + registerScopedActionExecutor, +} from "../store/actionRegistry"; +import { commandManager } from "../store/commands"; +import { + createDefaultTrack, + getMinimumVisibleTrackHeight, + type AudioClip, + type MIDIClip, + type MIDIEvent, + type Track, + useDAWStore, +} from "../store/useDAWStore"; +import { noteIdFor, parseMIDINotePairs } from "../utils/midiNotes"; +import { + activateShortcutContext, + resetShortcutContextForTests, +} from "../utils/shortcutContext"; + +const originalState = useDAWStore.getState(); +const scopedCleanups: Array<() => void> = []; + +function audioClip(id: string, overrides: Partial = {}): AudioClip { + return { + id, + filePath: `C:/audio/${id}.wav`, + name: id, + startTime: 0, + duration: 1, + offset: 0, + color: "#123456", + volumeDB: 0, + fadeIn: 0, + fadeOut: 0, + ...overrides, + }; +} + +function midiClip(id: string, events: MIDIEvent[] = [], overrides: Partial = {}): MIDIClip { + return { + id, + name: id, + startTime: 0, + duration: 2, + sourceLength: 2, + loopLength: 2, + events, + ccEvents: [], + color: "#654321", + ...overrides, + }; +} + +function track(id: string, type: Track["type"] = "audio", overrides: Partial = {}): Track { + return { + ...createDefaultTrack(id, id, "#222222", type, []), + ...overrides, + }; +} + +function noteEvents(note: number, start: number, end: number, channel = 1): MIDIEvent[] { + return [ + { type: "noteOn", timestamp: start, note, velocity: 90, channel }, + { type: "noteOff", timestamp: end, note, velocity: 7, releaseVelocity: 7, channel }, + ]; +} + +beforeEach(() => { + commandManager.clear(); + resetShortcutContextForTests(); + activateShortcutContext({ kind: "application" }); + useDAWStore.setState({ + tracks: [], + selectedTrackId: null, + selectedTrackIds: [], + lastSelectedTrackId: null, + selectedClipId: null, + selectedClipIds: [], + selectedNoteIds: [], + midiEditRange: null, + midiEditorSessions: [], + activeMidiEditorSessionId: null, + dockedMidiEditorSessionId: null, + showPianoRoll: false, + pianoRollTrackId: null, + pianoRollClipId: null, + canUndo: false, + canRedo: false, + isModified: false, + trackHeight: 100, + tcpWidth: 250, + }); +}); + +afterEach(() => { + while (scopedCleanups.length > 0) scopedCleanups.pop()?.(); + vi.restoreAllMocks(); + commandManager.clear(); + resetShortcutContextForTests(); + useDAWStore.setState(originalState); +}); + +describe("vendor-parity editor action catalog", () => { + it("registers exact actions and does not invent unsupported source-only behavior", () => { + const scopedExpectations = new Map([ + ["view.verticalZoomIn", "timeline"], + ["view.verticalZoomOut", "timeline"], + ["edit.selectPreviousClip", "timeline"], + ["edit.selectNextClip", "timeline"], + ["edit.muteSelectedClips", "timeline"], + ["edit.unmuteSelectedClips", "timeline"], + ["track.moveSelectedUp", "track_control_panel"], + ["track.moveSelectedDown", "track_control_panel"], + ["midi.deselectAll", "piano_roll"], + ["midi.selectNextNote", "piano_roll"], + ["midi.selectPreviousNote", "piano_roll"], + ["midi.glueSelectedNotes", "piano_roll"], + ]); + expect(getRegisteredAction("view.togglePianoRoll")?.shortcutScope).toBe("global"); + scopedExpectations.forEach((scope, actionId) => { + expect(getRegisteredAction(actionId)?.shortcutScope, actionId).toBe(scope); + }); + + for (const unsupportedId of [ + "edit.toggleSelectedClipLoop", + "midi.tool.paint", + "midi.tool.playback", + "edit.joinSelectedClipsOrNotes", + "edit.consolidateSelectedClips", + "view.toggleWaveformMultitrackEditor", + "edit.cropSelectedClips", + ]) { + expect(getRegisteredAction(unsupportedId), unsupportedId).toBeUndefined(); + } + }); +}); + +describe("Piano Roll routing and view actions", () => { + it("opens the selected MIDI clip, closes the docked editor, and no-ops without an eligible clip", () => { + useDAWStore.setState({ + tracks: [track("midi-track", "midi", { midiClips: [midiClip("midi-clip")] })], + selectedClipId: "midi-clip", + selectedClipIds: ["midi-clip"], + }); + const action = getRegisteredAction("view.togglePianoRoll")!; + expect(action.canHandleShortcut?.()).toBe(true); + action.execute(); + expect(useDAWStore.getState()).toMatchObject({ + showPianoRoll: true, + pianoRollTrackId: "midi-track", + pianoRollClipId: "midi-clip", + }); + + action.execute(); + expect(useDAWStore.getState().showPianoRoll).toBe(false); + + useDAWStore.setState({ + tracks: [track("audio-track", "audio", { clips: [audioClip("audio-clip")] })], + selectedClipId: "audio-clip", + selectedClipIds: ["audio-clip"], + }); + expect(action.canHandleShortcut?.()).toBe(false); + action.execute(); + expect(useDAWStore.getState().showPianoRoll).toBe(false); + }); + + it("closes only the active detached editor even without main-window Piano Roll state", () => { + const firstClose = vi.fn((_actionId: string) => "handled" as const); + const secondClose = vi.fn((_actionId: string) => "handled" as const); + scopedCleanups.push(registerScopedActionExecutor( + { kind: "piano_roll", sessionId: "first" }, + firstClose, + ["view.togglePianoRoll"], + )); + scopedCleanups.push(registerScopedActionExecutor( + { kind: "piano_roll", sessionId: "second" }, + secondClose, + ["view.togglePianoRoll"], + )); + activateShortcutContext({ kind: "piano_roll", sessionId: "second" }); + useDAWStore.setState({ + showPianoRoll: false, + tracks: [], + selectedClipId: null, + selectedClipIds: [], + }); + + const action = getRegisteredAction("view.togglePianoRoll")!; + expect(action.canHandleShortcut?.()).toBe(true); + action.execute(); + expect(secondClose).toHaveBeenCalledExactlyOnceWith("view.togglePianoRoll"); + expect(firstClose).not.toHaveBeenCalled(); + expect(useDAWStore.getState().showPianoRoll).toBe(false); + }); + + it("routes MIDI selection commands to the exact active editor instance", () => { + const first = vi.fn((_actionId: string) => "handled" as const); + const second = vi.fn((_actionId: string) => "handled" as const); + const ids = ["midi.deselectAll", "midi.selectNextNote", "midi.selectPreviousNote", "midi.glueSelectedNotes"]; + scopedCleanups.push(registerScopedActionExecutor( + { kind: "piano_roll", sessionId: "first" }, + first, + ids, + )); + scopedCleanups.push(registerScopedActionExecutor( + { kind: "piano_roll", sessionId: "second" }, + second, + ids, + )); + activateShortcutContext({ kind: "piano_roll", sessionId: "second" }); + + ids.forEach((actionId) => getRegisteredAction(actionId)?.execute()); + expect(first).not.toHaveBeenCalled(); + expect(second.mock.calls.map(([actionId]) => actionId)).toEqual(ids); + for (const actionId of ids) expect(pianoRollSource).toContain(`actionId === "${actionId}"`); + }); + + it("zooms track height vertically with exact clamping and no undo entry", () => { + const zoomIn = getRegisteredAction("view.verticalZoomIn")!; + const zoomOut = getRegisteredAction("view.verticalZoomOut")!; + zoomIn.execute(); + expect(useDAWStore.getState().trackHeight).toBe(120); + zoomOut.execute(); + expect(useDAWStore.getState().trackHeight).toBe(100); + expect(useDAWStore.getState().canUndo).toBe(false); + + const minimum = getMinimumVisibleTrackHeight([], useDAWStore.getState().tcpWidth); + useDAWStore.setState({ trackHeight: minimum }); + expect(zoomOut.canHandleShortcut?.()).toBe(false); + zoomOut.execute(); + expect(useDAWStore.getState().trackHeight).toBe(minimum); + + useDAWStore.setState({ trackHeight: 500 }); + expect(zoomIn.canHandleShortcut?.()).toBe(false); + zoomIn.execute(); + expect(useDAWStore.getState().trackHeight).toBe(500); + }); +}); + +describe("timeline clip navigation and directional mute", () => { + it("selects adjacent audio/MIDI clips in deterministic time and track order", () => { + useDAWStore.setState({ + tracks: [ + track("first", "midi", { + clips: [audioClip("late", { startTime: 2 })], + midiClips: [midiClip("first-at-one", [], { startTime: 1 })], + }), + track("second", "audio", { clips: [audioClip("second-at-one", { startTime: 1 })] }), + ], + selectedClipId: "first-at-one", + selectedClipIds: ["first-at-one"], + }); + + expect(useDAWStore.getState().selectAdjacentClip("next")).toBe(true); + expect(useDAWStore.getState().selectedClipId).toBe("second-at-one"); + expect(getRegisteredAction("edit.selectNextClip")?.canHandleShortcut?.()).toBe(true); + getRegisteredAction("edit.selectNextClip")?.execute(); + expect(useDAWStore.getState().selectedClipId).toBe("late"); + expect(getRegisteredAction("edit.selectNextClip")?.canHandleShortcut?.()).toBe(false); + expect(useDAWStore.getState().selectAdjacentClip("next")).toBe(false); + + expect(useDAWStore.getState().selectAdjacentClip("previous")).toBe(true); + expect(useDAWStore.getState().selectedClipId).toBe("second-at-one"); + useDAWStore.setState({ selectedClipId: null, selectedClipIds: [] }); + expect(useDAWStore.getState().selectAdjacentClip("previous")).toBe(false); + }); + + it("mutes mixed audio/MIDI selection in one undo step and skips locked clips", () => { + const syncAudio = vi.fn(async () => undefined); + const syncMIDI = vi.fn(async () => undefined); + useDAWStore.setState({ + tracks: [ + track("audio", "audio", { + clips: [ + audioClip("audio-open"), + audioClip("audio-locked", { locked: true }), + ], + }), + track("midi", "midi", { + midiClips: [ + midiClip("midi-open"), + midiClip("midi-already", [], { muted: true }), + ], + }), + ], + selectedClipId: "midi-already", + selectedClipIds: ["audio-open", "audio-locked", "midi-open", "midi-already"], + syncClipsWithBackend: syncAudio, + syncMIDITrackToBackend: syncMIDI, + }); + + expect(useDAWStore.getState().setSelectedClipsMuted(true)).toBe(true); + const muted = useDAWStore.getState().tracks; + expect(muted[0].clips.map((clip) => clip.muted)).toEqual([true, undefined]); + expect(muted[1].midiClips.map((clip) => clip.muted)).toEqual([true, true]); + expect(useDAWStore.getState().canUndo).toBe(true); + expect(syncAudio).toHaveBeenCalledTimes(1); + expect(syncMIDI).toHaveBeenCalledWith("midi", { debounce: false }); + + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks[0].clips.map((clip) => clip.muted)).toEqual([undefined, undefined]); + expect(useDAWStore.getState().tracks[1].midiClips.map((clip) => clip.muted)).toEqual([undefined, true]); + expect(useDAWStore.getState().canUndo).toBe(false); + useDAWStore.getState().redo(); + expect(useDAWStore.getState().tracks[0].clips[0].muted).toBe(true); + + commandManager.clear(); + useDAWStore.setState({ canUndo: false, canRedo: false }); + expect(useDAWStore.getState().setSelectedClipsMuted(true)).toBe(false); + expect(useDAWStore.getState().canUndo).toBe(false); + expect(getRegisteredAction("edit.muteSelectedClips")?.canHandleShortcut?.()).toBe(false); + expect(getRegisteredAction("edit.unmuteSelectedClips")?.canHandleShortcut?.()).toBe(true); + }); +}); + +describe("atomic track reordering", () => { + it("moves a selected folder with its descendants and restores one exact snapshot", () => { + const reorderSpy = vi.spyOn(nativeBridge, "reorderTrack").mockResolvedValue(true); + useDAWStore.setState({ + tracks: [ + track("folder", "audio", { isFolder: true }), + track("child-a", "audio", { parentFolderId: "folder" }), + track("child-b", "midi", { parentFolderId: "folder" }), + track("outside"), + ], + selectedTrackId: "folder", + selectedTrackIds: ["folder"], + }); + + expect(useDAWStore.getState().canMoveSelectedTracks("down")).toBe(true); + expect(useDAWStore.getState().moveSelectedTracks("down")).toBe(true); + expect(useDAWStore.getState().tracks.map((candidate) => candidate.id)) + .toEqual(["outside", "folder", "child-a", "child-b"]); + expect(useDAWStore.getState().tracks.filter((candidate) => candidate.parentFolderId).map((candidate) => candidate.parentFolderId)) + .toEqual(["folder", "folder"]); + expect(useDAWStore.getState().canUndo).toBe(true); + expect(reorderSpy).toHaveBeenCalledTimes(4); + + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks.map((candidate) => candidate.id)) + .toEqual(["folder", "child-a", "child-b", "outside"]); + expect(useDAWStore.getState().canUndo).toBe(false); + useDAWStore.getState().redo(); + expect(useDAWStore.getState().tracks.map((candidate) => candidate.id)) + .toEqual(["outside", "folder", "child-a", "child-b"]); + }); + + it("moves multi-selection as an ordered block and prevents children crossing folder boundaries", () => { + vi.spyOn(nativeBridge, "reorderTrack").mockResolvedValue(true); + useDAWStore.setState({ + tracks: [track("a"), track("b"), track("c"), track("d")], + selectedTrackId: "c", + selectedTrackIds: ["b", "c"], + }); + expect(useDAWStore.getState().moveSelectedTracks("down")).toBe(true); + expect(useDAWStore.getState().tracks.map((candidate) => candidate.id)).toEqual(["a", "d", "b", "c"]); + + commandManager.clear(); + useDAWStore.setState({ + tracks: [ + track("folder", "audio", { isFolder: true }), + track("child-a", "audio", { parentFolderId: "folder" }), + track("child-b", "audio", { parentFolderId: "folder" }), + track("outside"), + ], + selectedTrackId: "child-b", + selectedTrackIds: ["child-b"], + canUndo: false, + canRedo: false, + }); + expect(useDAWStore.getState().canMoveSelectedTracks("down")).toBe(false); + expect(useDAWStore.getState().moveSelectedTracks("down")).toBe(false); + expect(useDAWStore.getState().tracks.map((candidate) => candidate.id)) + .toEqual(["folder", "child-a", "child-b", "outside"]); + expect(useDAWStore.getState().canUndo).toBe(false); + }); +}); + +describe("Piano Roll glue transaction", () => { + it("glues eligible same-pitch/channel notes once and undoes/redoes exactly", () => { + const events = [ + ...noteEvents(60, 0, 0.4), + ...noteEvents(60, 0.5, 1), + ...noteEvents(64, 0.25, 0.75), + ]; + const syncMIDI = vi.fn(async () => undefined); + useDAWStore.setState({ + tracks: [track("midi", "midi", { midiClips: [midiClip("clip", events)] })], + syncMIDITrackToBackend: syncMIDI, + }); + const selection = [noteIdFor("clip", 0, 60), noteIdFor("clip", 0.5, 60)]; + const nextIds = useDAWStore.getState().glueSelectedMIDINotes("midi", "clip", selection); + expect(nextIds).toEqual([noteIdFor("clip", 0, 60)]); + let pairs = parseMIDINotePairs(useDAWStore.getState().tracks[0].midiClips[0].events, "clip"); + expect(pairs.map((pair) => [pair.noteNumber, pair.startTime, pair.duration])) + .toEqual([[60, 0, 1], [64, 0.25, 0.5]]); + expect(useDAWStore.getState().canUndo).toBe(true); + + useDAWStore.getState().undo(); + pairs = parseMIDINotePairs(useDAWStore.getState().tracks[0].midiClips[0].events, "clip"); + expect(pairs.filter((pair) => pair.noteNumber === 60)).toHaveLength(2); + expect(useDAWStore.getState().canUndo).toBe(false); + useDAWStore.getState().redo(); + pairs = parseMIDINotePairs(useDAWStore.getState().tracks[0].midiClips[0].events, "clip"); + expect(pairs.filter((pair) => pair.noteNumber === 60)).toHaveLength(1); + }); + + it("is undo-safe for no selection, mixed pitches/channels, and locked clips", () => { + const events = [ + ...noteEvents(60, 0, 0.4, 1), + ...noteEvents(60, 0.5, 1, 2), + ...noteEvents(64, 0.25, 0.75, 1), + ]; + useDAWStore.setState({ + tracks: [track("midi", "midi", { midiClips: [midiClip("clip", events)] })], + }); + expect(useDAWStore.getState().glueSelectedMIDINotes("midi", "clip", [])).toEqual([]); + expect(useDAWStore.getState().glueSelectedMIDINotes("midi", "clip", [ + noteIdFor("clip", 0, 60), + noteIdFor("clip", 0.25, 64), + ])).toEqual([]); + expect(useDAWStore.getState().canUndo).toBe(false); + + useDAWStore.setState({ + tracks: [track("midi", "midi", { midiClips: [midiClip("clip", events, { locked: true })] })], + }); + expect(useDAWStore.getState().glueSelectedMIDINotes("midi", "clip", [ + noteIdFor("clip", 0, 60), + noteIdFor("clip", 0.5, 60), + ])).toEqual([]); + expect(useDAWStore.getState().canUndo).toBe(false); + }); +}); diff --git a/frontend/src/__tests__/editorShortcutRegistry.test.ts b/frontend/src/__tests__/editorShortcutRegistry.test.ts new file mode 100644 index 0000000..5755ebf --- /dev/null +++ b/frontend/src/__tests__/editorShortcutRegistry.test.ts @@ -0,0 +1,234 @@ +import { afterEach, describe, expect, it, vi } from "vitest"; +import { + getRegisteredAction, + getRegisteredActions, + registerScopedActionExecutor, +} from "../store/actionRegistry"; +import { useDAWStore } from "../store/useDAWStore"; +import { + dispatchGlobalShortcut, + matchesActionShortcut, +} from "../utils/globalShortcutDispatcher"; +import { + activateShortcutContext, + registerShortcutSurface, + resetShortcutContextForTests, +} from "../utils/shortcutContext"; +import { getShortcutPlatform } from "../utils/platform"; + +const originalStoreState = { + customShortcuts: useDAWStore.getState().customShortcuts, + deleteRazorEditContent: useDAWStore.getState().deleteRazorEditContent, + deleteSelectedTracks: useDAWStore.getState().deleteSelectedTracks, + deleteWithinTimeSelection: useDAWStore.getState().deleteWithinTimeSelection, + deleteSelectedClips: useDAWStore.getState().deleteSelectedClips, + duplicateSelectedClips: useDAWStore.getState().duplicateSelectedClips, + moveMIDINotes: useDAWStore.getState().moveMIDINotes, + scaleSelectedMIDINoteVelocity: useDAWStore.getState().scaleSelectedMIDINoteVelocity, + setSelectedNoteIds: useDAWStore.getState().setSelectedNoteIds, + pianoRollTrackId: useDAWStore.getState().pianoRollTrackId, + pianoRollClipId: useDAWStore.getState().pianoRollClipId, + selectedClipIds: useDAWStore.getState().selectedClipIds, + selectedTrackIds: useDAWStore.getState().selectedTrackIds, + razorEdits: useDAWStore.getState().razorEdits, + timeSelection: useDAWStore.getState().timeSelection, + toggleMixer: useDAWStore.getState().toggleMixer, +}; + +const cleanups: Array<() => void> = []; + +function hostPrimaryModifier(): { ctrlKey: true } | { metaKey: true } { + return getShortcutPlatform() === "macos" ? { metaKey: true } : { ctrlKey: true }; +} + +afterEach(() => { + vi.unstubAllGlobals(); + while (cleanups.length > 0) cleanups.pop()?.(); + resetShortcutContextForTests(); + useDAWStore.setState(originalStoreState); +}); + +describe("editor shortcut registry", () => { + it("keeps every central action id unique", () => { + const actionIds = getRegisteredActions().map((action) => action.id); + expect(new Set(actionIds).size).toBe(actionIds.length); + }); + + it("centrally defines the formerly hard-coded timeline bindings", () => { + const duplicate = getRegisteredAction("edit.duplicateClips"); + const deleteAction = getRegisteredAction("edit.delete"); + + expect(duplicate).toMatchObject({ shortcut: "Ctrl+D", shortcutScope: "timeline" }); + expect(deleteAction).toMatchObject({ + shortcut: "Delete", + shortcutAliases: ["Backspace"], + shortcutScope: "timeline", + }); + }); + + it("executes duplicate and preserves the timeline delete precedence", () => { + const duplicateSelectedClips = vi.fn(); + const deleteRazorEditContent = vi.fn(); + const deleteSelectedTracks = vi.fn(); + const deleteSelectedClips = vi.fn(); + const deleteWithinTimeSelection = vi.fn(); + useDAWStore.setState({ + duplicateSelectedClips, + deleteRazorEditContent, + deleteSelectedTracks, + deleteSelectedClips, + deleteWithinTimeSelection, + selectedClipIds: ["clip-a", "clip-b"], + selectedTrackIds: ["track-a"], + razorEdits: [{ trackId: "track-a", start: 0, end: 1 }], + timeSelection: { start: 0, end: 1 }, + }); + + getRegisteredAction("edit.duplicateClips")?.execute(); + expect(duplicateSelectedClips).toHaveBeenCalledTimes(1); + + getRegisteredAction("edit.delete")?.execute(); + expect(deleteRazorEditContent).toHaveBeenCalledTimes(1); + expect(deleteSelectedTracks).not.toHaveBeenCalled(); + expect(deleteSelectedClips).not.toHaveBeenCalled(); + expect(deleteWithinTimeSelection).not.toHaveBeenCalled(); + + useDAWStore.setState({ razorEdits: [] }); + getRegisteredAction("edit.delete")?.execute(); + expect(deleteSelectedClips).toHaveBeenCalledTimes(1); + expect(deleteSelectedTracks).not.toHaveBeenCalled(); + + useDAWStore.setState({ selectedClipIds: [] }); + getRegisteredAction("edit.delete")?.execute(); + expect(deleteWithinTimeSelection).toHaveBeenCalledTimes(1); + expect(deleteSelectedTracks).not.toHaveBeenCalled(); + + useDAWStore.setState({ timeSelection: null }); + getRegisteredAction("edit.delete")?.execute(); + expect(deleteSelectedTracks).toHaveBeenCalledTimes(1); + }); + + it("registers Piano Roll tools, edits, movement, and step input in piano scope", () => { + const expected = [ + ["midi.tool.draw", "D"], + ["midi.repeatSelection", "Shift+R"], + ["midi.selectAll", "Ctrl+A"], + ["midi.copySelection", "Ctrl+C"], + ["midi.deleteSelection", "Delete"], + ["midi.movePitchOctaveUp", "Shift+Up"], + ["midi.stepInputC", "C"], + ["midi.stepInputCSharp", "Shift+C"], + ["midi.closeEditor", "Esc"], + ]; + + for (const [actionId, shortcut] of expected) { + expect(getRegisteredAction(actionId)).toMatchObject({ + shortcut, + shortcutScope: "piano_roll", + }); + } + expect(getRegisteredAction("midi.deleteSelection")?.shortcutAliases).toEqual(["Backspace"]); + }); + + it("registers Pitch Editor selection, correction, movement, merge, and tools", () => { + const expected = [ + ["pitch.selectAll", "Ctrl+A"], + ["pitch.correctSelectedToScale", "Q"], + ["pitch.moveUp", "Up"], + ["pitch.moveUpFine", "Shift+Up"], + ["pitch.mergeSelectedNotes", "Ctrl+J"], + ["pitch.tool.select", "1"], + ["pitch.tool.split", "6"], + ["pitch.closeEditor", "Esc"], + ]; + + for (const [actionId, shortcut] of expected) { + expect(getRegisteredAction(actionId)).toMatchObject({ + shortcut, + shortcutScope: "pitch_editor", + }); + } + }); + + it("executes the formerly empty transpose and velocity actions through undo-aware store APIs", () => { + const moveMIDINotes = vi.fn(() => ["moved-note"]); + const scaleSelectedMIDINoteVelocity = vi.fn(); + const setSelectedNoteIds = vi.fn(); + const promptMock = vi.fn() + .mockReturnValueOnce("2.6") + .mockReturnValueOnce("125"); + vi.stubGlobal("prompt", promptMock); + useDAWStore.setState({ + moveMIDINotes, + scaleSelectedMIDINoteVelocity, + setSelectedNoteIds, + pianoRollTrackId: "track-a", + pianoRollClipId: "clip-a", + selectedNoteIds: ["note-a"], + }); + + getRegisteredAction("edit.transpose")?.execute(); + expect(moveMIDINotes).toHaveBeenCalledWith( + "track-a", + "clip-a", + ["note-a"], + 0, + 3, + ); + expect(setSelectedNoteIds).toHaveBeenCalledWith(["moved-note"]); + + getRegisteredAction("edit.velocityScale")?.execute(); + expect(scaleSelectedMIDINoteVelocity).toHaveBeenCalledWith( + "track-a", + "clip-a", + 1.25, + ); + expect(getRegisteredAction("midi.transpose")?.execute).toBeTypeOf("function"); + }); + + it("routes registry execution to only the active editor session", () => { + const first = vi.fn(() => "handled" as const); + const second = vi.fn(() => "handled" as const); + cleanups.push(registerScopedActionExecutor( + { kind: "piano_roll", sessionId: "first" }, + first, + )); + cleanups.push(registerScopedActionExecutor( + { kind: "piano_roll", sessionId: "second" }, + second, + )); + + activateShortcutContext({ kind: "piano_roll", sessionId: "second" }); + getRegisteredAction("midi.tool.draw")?.execute(); + + expect(first).not.toHaveBeenCalled(); + expect(second).toHaveBeenCalledWith("midi.tool.draw"); + }); + + it("honors custom scoped bindings and lets the editor win a global conflict", () => { + const toggleMixer = vi.fn(); + const pianoAction = vi.fn(); + useDAWStore.setState({ + toggleMixer, + customShortcuts: { "midi.tool.line": "Ctrl+M" }, + }); + cleanups.push(registerShortcutSurface( + { kind: "piano_roll", sessionId: "custom" }, + (event) => { + if (!matchesActionShortcut(event, "midi.tool.line")) return "unmatched"; + pianoAction(); + return "handled"; + }, + )); + activateShortcutContext({ kind: "piano_roll", sessionId: "custom" }); + + expect(dispatchGlobalShortcut({ + key: "m", + ...hostPrimaryModifier(), + source: "browser", + })).toBe(true); + expect(pianoAction).toHaveBeenCalledTimes(1); + expect(toggleMixer).not.toHaveBeenCalled(); + expect(matchesActionShortcut({ key: "l" }, "midi.tool.line")).toBe(false); + }); +}); diff --git a/frontend/src/__tests__/exhaustiveInputProfileDispatch.test.ts b/frontend/src/__tests__/exhaustiveInputProfileDispatch.test.ts new file mode 100644 index 0000000..35bc981 --- /dev/null +++ b/frontend/src/__tests__/exhaustiveInputProfileDispatch.test.ts @@ -0,0 +1,748 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { + getActionShortcutScopes, + getRegisteredAction, + getRegisteredActions, + type ActionDef, + type ActionShortcutScope, +} from "../store/actionRegistry"; +import { createDefaultTrack, useDAWStore } from "../store/useDAWStore"; +import { + dispatchGlobalShortcut, + getEffectiveActionShortcuts, + resolveRegistryShortcutAction, + type GlobalShortcutPayload, +} from "../utils/globalShortcutDispatcher"; +import { + MOUSE_MODIFIER_CONTEXTS, + resolveMouseModifier, + type MouseModifierCombination, + type PointerModifierEventLike, +} from "../utils/mouseModifierResolver"; +import { getMouseBehaviorProfile } from "../utils/mouseBehaviorProfiles"; +import { + normalizeShortcutBinding, + shortcutMatchesEvent, + type ShortcutPlatform, +} from "../utils/platform"; +import { + KEYBOARD_SHORTCUT_PROFILES, + getProfileActionBindings, +} from "../utils/shortcutProfiles"; +import { + activateShortcutContext, + registerShortcutSurface, + resetShortcutContextForTests, + type EditShortcutContext, +} from "../utils/shortcutContext"; +import { + resolveWheelGesture, + type WheelBehaviorRule, + type WheelEventLike, + type WheelInputDevice, + type WheelPlatform, + type WheelSubtarget, + type WheelSurface, +} from "../utils/wheelGestureResolver"; + +const TEST_PLATFORMS = ["macos", "windows"] as const satisfies readonly ShortcutPlatform[]; + +const WHEEL_SURFACES = [ + "timeline", + "tcp", + "piano_roll", + "pitch_editor", + "browser", + "parameter", +] as const satisfies readonly WheelSurface[]; + +const WHEEL_SUBTARGETS = [ + "content", + "ruler", + "track", + "clip", + "empty", + "grid", + "note", + "sidebar", + "keyboard", + "controller_lane", + "waveform_scale", + "spectrogram_scale", + "automation_lane", + "fade_handle", + "event_volume", + "list", + "tree", + "preview", + "control", + "graph", + "console_fader", +] as const satisfies readonly WheelSubtarget[]; + +const WHEEL_DEVICES = ["mouse", "trackpad", "unknown"] as const satisfies readonly WheelInputDevice[]; + +interface ParsedBinding { + modifiers: readonly string[]; + key: string; +} + +type SyntheticGlobalShortcutPayload = GlobalShortcutPayload & { + location?: number; + getModifierState?: (key: string) => boolean; +}; + +function parseNormalizedBinding(binding: string): ParsedBinding { + const normalized = normalizeShortcutBinding(binding); + if (!normalized) throw new Error(`Invalid shortcut binding: ${binding}`); + const segments = normalized.split("+"); + const modifierNames = new Set([ + "Ctrl", + "Control", + "Command", + "Alt", + "Option", + "Meta", + "AltGraph", + "Shift", + ]); + const modifiers: string[] = []; + let index = 0; + while (index < segments.length && modifierNames.has(segments[index])) { + modifiers.push(segments[index]); + index += 1; + } + const key = segments.slice(index).join("+"); + if (!key) throw new Error(`Binding has no key: ${binding}`); + return { modifiers, key }; +} + +function keyEventIdentity(rawKey: string): Pick { + if (rawKey.startsWith("Code:")) { + const code = rawKey.slice(5); + return keyEventIdentityFromCode(code); + } + const key = rawKey.startsWith("Key:") ? rawKey.slice(4) : rawKey; + if (/^Numpad/.test(key)) return keyEventIdentityFromCode(key); + if (/^[A-Z]$/.test(key)) return { key: key.toLowerCase(), code: `Key${key}` }; + if (/^\d$/.test(key)) return { key, code: `Digit${key}` }; + if (/^F\d{1,2}$/.test(key)) return { key, code: key }; + + const named: Readonly>> = { + Space: { key: " ", code: "Space" }, + Enter: { key: "Enter", code: "Enter" }, + Esc: { key: "Escape", code: "Escape" }, + Tab: { key: "Tab", code: "Tab" }, + Backspace: { key: "Backspace", code: "Backspace" }, + Delete: { key: "Delete", code: "Delete" }, + Insert: { key: "Insert", code: "Insert" }, + Home: { key: "Home", code: "Home" }, + End: { key: "End", code: "End" }, + PageUp: { key: "PageUp", code: "PageUp" }, + PageDown: { key: "PageDown", code: "PageDown" }, + Up: { key: "ArrowUp", code: "ArrowUp" }, + Down: { key: "ArrowDown", code: "ArrowDown" }, + Left: { key: "ArrowLeft", code: "ArrowLeft" }, + Right: { key: "ArrowRight", code: "ArrowRight" }, + Pause: { key: "Pause", code: "Pause" }, + Equal: { key: "=", code: "Equal" }, + Minus: { key: "-", code: "Minus" }, + "=": { key: "=", code: "Equal" }, + "+": { key: "+", code: "Equal" }, + "-": { key: "-", code: "Minus" }, + "[": { key: "[", code: "BracketLeft" }, + "]": { key: "]", code: "BracketRight" }, + ";": { key: ";", code: "Semicolon" }, + "'": { key: "'", code: "Quote" }, + ",": { key: ",", code: "Comma" }, + ".": { key: ".", code: "Period" }, + "/": { key: "/", code: "Slash" }, + "\\": { key: "\\", code: "Backslash" }, + "`": { key: "`", code: "Backquote" }, + }; + const identity = named[key]; + if (!identity) throw new Error(`No synthetic KeyboardEvent mapping for ${rawKey}`); + return identity; +} + +function keyEventIdentityFromCode(code: string): Pick { + if (/^Key[A-Z]$/.test(code)) return { key: code.slice(-1).toLowerCase(), code }; + if (/^Digit\d$/.test(code)) return { key: code.slice(-1), code }; + if (/^Numpad\d$/.test(code)) return { key: code.slice(-1), code, location: 3 }; + const numpadKeys: Readonly> = { + NumpadAdd: "+", + NumpadComma: ",", + NumpadDecimal: ".", + NumpadDivide: "/", + NumpadEnter: "Enter", + NumpadEqual: "=", + NumpadMultiply: "*", + NumpadSubtract: "-", + }; + if (code in numpadKeys) return { key: numpadKeys[code], code, location: 3 }; + const codeKeys: Readonly> = { + Space: "Space", + Enter: "Enter", + Escape: "Esc", + Tab: "Tab", + Backspace: "Backspace", + Delete: "Delete", + Insert: "Insert", + Home: "Home", + End: "End", + PageUp: "PageUp", + PageDown: "PageDown", + ArrowUp: "Up", + ArrowDown: "Down", + ArrowLeft: "Left", + ArrowRight: "Right", + Equal: "=", + Minus: "-", + BracketLeft: "[", + BracketRight: "]", + Semicolon: ";", + Quote: "'", + Comma: ",", + Period: ".", + Slash: "/", + Backslash: "\\", + Backquote: "`", + }; + if (code in codeKeys) { + return { ...keyEventIdentity(codeKeys[code]), code }; + } + return keyEventIdentity(code); +} + +function eventForBinding(binding: string, platform: ShortcutPlatform): SyntheticGlobalShortcutPayload { + const parsed = parseNormalizedBinding(binding); + const event: SyntheticGlobalShortcutPayload = { + ...keyEventIdentity(parsed.key), + source: "exhaustive-profile-test", + }; + for (const modifier of parsed.modifiers) { + if (platform === "macos") { + if (modifier === "Ctrl" || modifier === "Command") event.metaKey = true; + else if (modifier === "Alt" || modifier === "Control") event.ctrlKey = true; + else if (modifier === "Option") event.altKey = true; + else if (modifier === "Shift") event.shiftKey = true; + else if (modifier === "AltGraph") { + event.altKey = true; + event.ctrlKey = true; + event.getModifierState = (name) => name === "AltGraph"; + } else throw new Error(`${modifier} is not reachable on macOS`); + } else { + if (modifier === "Ctrl" || modifier === "Control") event.ctrlKey = true; + else if (modifier === "Alt") event.altKey = true; + else if (modifier === "Meta") event.metaKey = true; + else if (modifier === "Shift") event.shiftKey = true; + else if (modifier === "AltGraph") { + event.altKey = true; + event.ctrlKey = true; + event.getModifierState = (name) => name === "AltGraph"; + } else throw new Error(`${modifier} is not reachable on Windows`); + } + } + return event; +} + +function contextForScope(scope: ActionShortcutScope): EditShortcutContext { + switch (scope) { + case "global": return { kind: "application" }; + case "timeline": return { kind: "timeline" }; + case "timeline_ruler": return { kind: "timeline_ruler" }; + case "track_control_panel": return { kind: "track_control_panel" }; + case "mixer": return { kind: "mixer" }; + case "pitch_editor": return { kind: "pitch_editor" }; + case "piano_roll": return { kind: "piano_roll", sessionId: "exhaustive-profile" }; + case "automation": return { kind: "automation" }; + case "browser": return { kind: "browser" }; + case "plugin": return { kind: "plugin", sessionId: "exhaustive-profile" }; + case "modal": return { kind: "modal" }; + // Contextual commands are tried whenever a concrete editor context is active. + case "contextual": return { kind: "timeline" }; + } +} + +function activateCondition(action: ActionDef): void { + const state = useDAWStore.getState(); + const transport = { + ...state.transport, + isPlaying: action.shortcutWhen === "transport_running", + isRecording: false, + }; + useDAWStore.setState({ + transport, + stepInputEnabled: action.shortcutWhen === "step_input_enabled", + }); +} + +function pointerModifierCombinations(): Array<{ + combination: MouseModifierCombination; + event: PointerModifierEventLike; +}> { + const logical = ["primary", "secondary", "alt", "shift"] as const; + return Array.from({ length: 16 }, (_, bits) => { + const active = logical.filter((_, index) => Boolean(bits & (1 << index))); + return { + combination: (active.length === 0 ? "none" : active.join("+")) as MouseModifierCombination, + event: {}, + }; + }); +} + +function rawPointerEvent( + combination: MouseModifierCombination, + platform: ShortcutPlatform, +): PointerModifierEventLike { + const modifiers = new Set(combination === "none" ? [] : combination.split("+")); + return { + ctrlKey: platform === "macos" ? modifiers.has("secondary") : modifiers.has("primary"), + metaKey: platform === "macos" ? modifiers.has("primary") : modifiers.has("secondary"), + altKey: modifiers.has("alt"), + shiftKey: modifiers.has("shift"), + }; +} + +function rawWheelModifierCombinations(platform: ShortcutPlatform): WheelEventLike[] { + return Array.from({ length: 16 }, (_, bits) => { + const primary = Boolean(bits & 1); + const secondary = Boolean(bits & 2); + return { + deltaX: 30, + deltaY: 120, + ctrlKey: platform === "macos" ? secondary : primary, + metaKey: platform === "macos" ? primary : secondary, + altKey: Boolean(bits & 4), + shiftKey: Boolean(bits & 8), + clientX: 41, + clientY: 73, + }; + }); +} + +function ruleMatches( + rule: WheelBehaviorRule, + surface: WheelSurface, + subtarget: WheelSubtarget, + event: WheelEventLike, + platform: WheelPlatform, + device: WheelInputDevice, +): boolean { + if (rule.surface !== surface) return false; + if (rule.subtargets && !rule.subtargets.includes(subtarget)) return false; + if (rule.devices && !rule.devices.includes(device)) return false; + const normalized = { + primary: platform === "macos" ? Boolean(event.metaKey) : Boolean(event.ctrlKey), + secondary: platform === "macos" ? Boolean(event.ctrlKey) : Boolean(event.metaKey), + alt: Boolean(event.altKey), + shift: Boolean(event.shiftKey), + }; + return Object.entries(rule.modifiers ?? {}).every( + ([name, expected]) => normalized[name as keyof typeof normalized] === expected, + ); +} + +describe("exhaustive keyboard, wheel, and pointer profiles", () => { + const original = { + keyboardShortcutProfileId: useDAWStore.getState().keyboardShortcutProfileId, + customShortcuts: useDAWStore.getState().customShortcuts, + tracks: useDAWStore.getState().tracks, + selectedClipId: useDAWStore.getState().selectedClipId, + selectedClipIds: useDAWStore.getState().selectedClipIds, + globalLocked: useDAWStore.getState().globalLocked, + lockSettings: useDAWStore.getState().lockSettings, + transport: useDAWStore.getState().transport, + stepInputEnabled: useDAWStore.getState().stepInputEnabled, + }; + + beforeEach(() => { + resetShortcutContextForTests(); + useDAWStore.setState({ customShortcuts: {} }); + }); + + afterEach(() => { + resetShortcutContextForTests(); + useDAWStore.setState(original); + vi.restoreAllMocks(); + }); + + it("dispatches every effective built-in binding to its intended action on macOS and Windows", () => { + const registeredIds = new Set(getRegisteredActions().map((action) => action.id)); + let verifiedBindings = 0; + + for (const profile of KEYBOARD_SHORTCUT_PROFILES) { + for (const configuredActionId of Object.keys(profile.bindings)) { + expect( + registeredIds.has(configuredActionId), + `${profile.id} binds missing action ${configuredActionId}`, + ).toBe(true); + } + + for (const platform of TEST_PLATFORMS) { + useDAWStore.setState({ + keyboardShortcutProfileId: profile.id, + customShortcuts: {}, + }); + const actions = getRegisteredActions(); + for (const action of actions) { + const bindings = getEffectiveActionShortcuts(action, platform); + for (const binding of bindings) { + const event = eventForBinding(binding, platform); + expect( + shortcutMatchesEvent(event, binding, platform), + `${profile.id}/${platform}/${action.id}: ${binding} is not physically synthesizable`, + ).toBe(true); + activateCondition(action); + const canHandle = !action.canHandleShortcut || action.canHandleShortcut(); + + for (const scope of getActionShortcutScopes(action, profile.id)) { + resetShortcutContextForTests(); + activateShortcutContext(contextForScope(scope)); + const controlled = resolveRegistryShortcutAction(event, platform, { + canHandleAction: (candidate) => candidate.id === action.id, + }); + expect( + controlled?.action.id, + `${profile.id}/${platform}/${scope}/${binding}: controlled availability`, + ).toBe(action.id); + const resolved = resolveRegistryShortcutAction(event, platform); + if (canHandle) { + expect( + resolved?.action.id, + `${profile.id}/${platform}/${scope}/${binding}`, + ).toBe(action.id); + } else { + expect( + resolved?.action.id, + `${profile.id}/${platform}/${scope}/${binding}: unavailable action consumed chord`, + ).not.toBe(action.id); + } + + const preventDefault = vi.fn(); + const executed: string[] = []; + const handled = dispatchGlobalShortcut( + { ...event, preventDefault }, + platform, + { executeAction: (matched) => executed.push(matched.id) }, + ); + if (canHandle) { + expect(handled, `${profile.id}/${platform}/${scope}/${binding}`).toBe(true); + expect(preventDefault, `${profile.id}/${platform}/${scope}/${binding}`).toHaveBeenCalled(); + } + // canHandle/repeat/debounce guards may deliberately suppress the + // body, but they must never execute a different action. + expect(executed, `${profile.id}/${platform}/${scope}/${binding}`).toSatisfy( + (ids: string[]) => ids.length === 0 + || (ids.length === 1 && ids[0] === resolved?.action.id), + ); + verifiedBindings += 1; + } + } + } + } + } + + expect(verifiedBindings).toBeGreaterThan(2_000); + }, 120_000); + + it("keeps explicit profile unbinds unassigned and unable to reclaim their factory key", () => { + for (const profile of KEYBOARD_SHORTCUT_PROFILES) { + for (const platform of TEST_PLATFORMS) { + useDAWStore.setState({ keyboardShortcutProfileId: profile.id, customShortcuts: {} }); + for (const [actionId] of Object.entries(profile.bindings)) { + const configured = getProfileActionBindings(profile.id, actionId, platform); + if (configured === undefined || configured.length > 0) continue; + const action = getRegisteredAction(actionId); + expect(action, `${profile.id}: missing ${actionId}`).toBeDefined(); + if (!action) continue; + expect(getEffectiveActionShortcuts(action, platform), `${profile.id}/${platform}/${actionId}`).toEqual([]); + for (const factoryBinding of [action.shortcut, ...(action.shortcutAliases ?? [])]) { + if (!factoryBinding || factoryBinding.includes("(")) continue; + let event: SyntheticGlobalShortcutPayload; + try { + event = eventForBinding(factoryBinding, platform); + } catch { + continue; + } + for (const scope of getActionShortcutScopes(action, profile.id)) { + resetShortcutContextForTests(); + activateShortcutContext(contextForScope(scope)); + const resolved = resolveRegistryShortcutAction(event, platform); + expect( + resolved?.action.id, + `${profile.id}/${platform}/${scope}: ${actionId} leaked through ${factoryBinding}`, + ).not.toBe(actionId); + const executed: string[] = []; + dispatchGlobalShortcut(event, platform, { + executeAction: (matched) => executed.push(matched.id), + }); + expect( + executed, + `${profile.id}/${platform}/${scope}: dispatched unbound ${actionId}`, + ).not.toContain(actionId); + } + } + } + } + } + }, 30_000); + + it("makes every registered action custom-bindable in every declared scope on both platforms", () => { + let verifiedRoutes = 0; + for (const platform of TEST_PLATFORMS) { + const binding = platform === "macos" + ? "Command+Shift+F11" + : "Control+Shift+F11"; + const event: SyntheticGlobalShortcutPayload = { + key: "F11", + code: "F11", + shiftKey: true, + metaKey: platform === "macos", + ctrlKey: platform === "windows", + source: "custom-bindability-matrix", + }; + + for (const action of getRegisteredActions()) { + useDAWStore.setState({ + keyboardShortcutProfileId: "openstudio", + customShortcuts: { [action.id]: binding }, + }); + activateCondition(action); + expect(getEffectiveActionShortcuts(action, platform), `${platform}/${action.id}`) + .toEqual([binding]); + + for (const scope of getActionShortcutScopes(action)) { + resetShortcutContextForTests(); + activateShortcutContext(contextForScope(scope)); + const controlledAvailability = (candidate: ActionDef) => candidate.id === action.id; + expect(resolveRegistryShortcutAction(event, platform, { + canHandleAction: controlledAvailability, + })?.action.id, `${platform}/${scope}/${action.id}`).toBe(action.id); + + const executed: string[] = []; + const preventDefault = vi.fn(); + expect(dispatchGlobalShortcut( + { ...event, preventDefault }, + platform, + { + canHandleAction: controlledAvailability, + executeAction: (candidate) => executed.push(candidate.id), + }, + ), `${platform}/${scope}/${action.id}`).toBe(true); + expect(preventDefault, `${platform}/${scope}/${action.id}`).toHaveBeenCalled(); + expect(executed, `${platform}/${scope}/${action.id}`).toSatisfy( + (ids: string[]) => ids.length === 0 + || (ids.length === 1 && ids[0] === action.id), + ); + verifiedRoutes += 1; + } + } + } + + expect(verifiedRoutes).toBeGreaterThan(700); + }, 120_000); + + it("gives an active surface action precedence over a same-key global action", () => { + const split = getRegisteredAction("edit.splitAtCursor"); + const play = getRegisteredAction("transport.play"); + expect(split).toBeDefined(); + expect(play).toBeDefined(); + const track = createDefaultTrack("precedence-track", "Precedence", "#123456", "audio", []); + track.clips = [{ + id: "precedence-clip", + filePath: "C:/precedence.wav", + name: "Precedence", + startTime: 0, + duration: 2, + offset: 0, + color: "#123456", + volumeDB: 0, + fadeIn: 0, + fadeOut: 0, + }]; + useDAWStore.setState((state) => ({ + keyboardShortcutProfileId: "openstudio", + customShortcuts: { + "edit.splitAtCursor": "Code:KeyK", + "transport.play": "Code:KeyK", + }, + tracks: [track], + selectedClipId: "precedence-clip", + selectedClipIds: ["precedence-clip"], + globalLocked: false, + lockSettings: { ...state.lockSettings, items: false }, + transport: { ...state.transport, currentTime: 1 }, + })); + const event = { key: "k", code: "KeyK", source: "precedence-test" }; + + activateShortcutContext({ kind: "timeline" }); + expect(resolveRegistryShortcutAction(event, "windows")?.action.id).toBe("edit.splitAtCursor"); + + activateShortcutContext({ kind: "application" }); + expect(resolveRegistryShortcutAction(event, "windows")?.action.id).toBe("transport.play"); + }); + + it("skips an unavailable same-scope owner and dispatches the next valid match", () => { + const track = createDefaultTrack("fallback-track", "Fallback", "#654321", "audio", []); + track.clips = [{ + id: "fallback-clip", + filePath: "C:/fallback.wav", + name: "Fallback", + startTime: 0, + duration: 2, + offset: 0, + color: "#654321", + volumeDB: 0, + fadeIn: 0, + fadeOut: 0, + }]; + useDAWStore.setState((state) => ({ + keyboardShortcutProfileId: "openstudio", + customShortcuts: { + "edit.cut": "Code:KeyK", + "edit.splitAtCursor": "Code:KeyK", + }, + tracks: [track], + selectedClipId: null, + selectedClipIds: [], + globalLocked: false, + lockSettings: { ...state.lockSettings, items: false }, + transport: { ...state.transport, currentTime: 1 }, + })); + activateShortcutContext({ kind: "timeline" }); + const event = { key: "k", code: "KeyK", source: "can-handle-fallback" }; + expect(resolveRegistryShortcutAction(event, "windows")?.action.id).toBe("edit.splitAtCursor"); + + const executed: string[] = []; + expect(dispatchGlobalShortcut(event, "windows", { + executeAction: (action) => executed.push(action.id), + })).toBe(true); + expect(executed).toEqual(["edit.splitAtCursor"]); + }); + + it("retains active component-handler precedence over registry actions", () => { + useDAWStore.setState({ + keyboardShortcutProfileId: "openstudio", + customShortcuts: { "edit.splitAtCursor": "Code:KeyK" }, + }); + const surfaceHandler = vi.fn(() => "handled" as const); + registerShortcutSurface({ kind: "timeline" }, surfaceHandler); + activateShortcutContext({ kind: "timeline" }); + const executed: string[] = []; + + expect(dispatchGlobalShortcut( + { key: "k", code: "KeyK", source: "component-precedence" }, + "windows", + { executeAction: (action) => executed.push(action.id) }, + )).toBe(true); + expect(surfaceHandler).toHaveBeenCalledOnce(); + expect(executed).toEqual([]); + }); + + it("reaches every wheel rule and checks every surface, subtarget, device, modifier, and platform", () => { + for (const profile of KEYBOARD_SHORTCUT_PROFILES) { + for (const platform of TEST_PLATFORMS) { + const behavior = getMouseBehaviorProfile(profile.id, platform); + const rules = behavior.wheel.rules; + const ids = rules.map((rule) => rule.id); + expect(new Set(ids).size, `${profile.id}/${platform}: duplicate wheel rule ID`).toBe(ids.length); + const reached = new Set(); + + for (const surface of WHEEL_SURFACES) { + for (const subtarget of WHEEL_SUBTARGETS) { + for (const device of WHEEL_DEVICES) { + for (const event of rawWheelModifierCombinations(platform)) { + const matches = rules.filter((rule) => ruleMatches( + rule, + surface, + subtarget, + event, + platform, + device, + )); + const expected = matches[0]; + const resolved = resolveWheelGesture(event, { + surface, + subtarget, + platform, + deviceHint: device, + hoveredTargetId: "exhaustive-target", + }, behavior.wheel); + + expect( + resolved.ruleId, + `${profile.id}/${platform}/${surface}/${subtarget}/${device}`, + ).toBe(expected?.id ?? null); + if (!expected) { + expect(resolved).toMatchObject({ + matched: false, + operation: "native-scroll", + target: "native", + preventDefault: false, + stopPropagation: false, + }); + continue; + } + + reached.add(expected.id); + expect(resolved).toMatchObject({ + profileId: behavior.wheel.id, + matched: true, + operation: expected.operation, + target: expected.target, + preventDefault: expected.preventDefault, + stopPropagation: expected.stopPropagation, + precision: expected.precision ?? "normal", + anchor: { + kind: expected.anchor ?? "none", + }, + }); + } + } + } + } + + expect( + [...reached].sort(), + `${profile.id}/${platform}: shadowed or unreachable wheel rule`, + ).toEqual([...ids].sort()); + } + } + }, 120_000); + + it("resolves all 16 pointer combinations in every context without vendor fallthrough", () => { + const combinations = pointerModifierCombinations(); + for (const profile of KEYBOARD_SHORTCUT_PROFILES) { + for (const platform of TEST_PLATFORMS) { + const behavior = getMouseBehaviorProfile(profile.id, platform); + for (const context of MOUSE_MODIFIER_CONTEXTS) { + const mapping = behavior.modifiers.mappings[context] as Readonly>; + for (const { combination } of combinations) { + const resolved = resolveMouseModifier( + rawPointerEvent(combination, platform), + context, + { platform, profile: behavior.modifiers }, + ); + expect(resolved.profileId).toBe(profile.id); + expect(resolved.context).toBe(context); + expect(resolved.modifiers.combination).toBe(combination); + expect(resolved.isNoop).toBe(resolved.action === "none"); + if (profile.id !== "openstudio") { + expect( + Object.prototype.hasOwnProperty.call(mapping, combination), + `${profile.id}/${platform}/${context}/${combination}: implicit vendor fallback`, + ).toBe(true); + expect(resolved).toMatchObject({ + source: "profile", + matchKind: "exact", + matchedCombination: combination, + matched: true, + }); + } + } + } + } + } + }); +}); diff --git a/frontend/src/__tests__/externalURLSafety.test.ts b/frontend/src/__tests__/externalURLSafety.test.ts new file mode 100644 index 0000000..0629d81 --- /dev/null +++ b/frontend/src/__tests__/externalURLSafety.test.ts @@ -0,0 +1,104 @@ +// @ts-expect-error The app tsconfig omits Node builtin typings, while Vitest runs this source audit in Node. +import { readFileSync } from "node:fs"; +import { afterEach, describe, expect, it, vi } from "vitest"; +import { + isAllowedExternalBrowserURL, + nativeBridge, +} from "../services/NativeBridge"; + +const nativeSource = readFileSync( + new URL("../../../Source/MainComponent.cpp", import.meta.url), + "utf8", +).replace(/\r\n?/g, "\n"); +const bridgeSource = readFileSync( + new URL("../services/NativeBridge.ts", import.meta.url), + "utf8", +).replace(/\r\n?/g, "\n"); +const aiSetupSource = readFileSync( + new URL("../components/AiToolsSetupModal.tsx", import.meta.url), + "utf8", +).replace(/\r\n?/g, "\n"); + +describe("external URL safety policy", () => { + afterEach(() => { + vi.unstubAllGlobals(); + }); + + it.each([ + "https://www.tone3000.com/tones/example-1", + "http://127.0.0.1:5183/help", + " HTTPS://example.com/path?q=1 ", + ])("allows an absolute HTTP(S) URL: %s", (url) => { + expect(isAllowedExternalBrowserURL(url)).toBe(true); + }); + + it.each([ + "javascript:alert(document.domain)", + "data:text/html,", + "file:///C:/Users/example/log.txt", + "mailto:support@example.com", + "shell:AppsFolder", + "ms-settings:privacy-microphone", + "//tone3000.com/tones/example-1", + "/relative/help", + "https:example.com", + "https://exa\tmple.com", + "", + ])("rejects a non-web or malformed external URL: %s", (url) => { + expect(isAllowedExternalBrowserURL(url)).toBe(false); + }); + + it("does not forward a rejected URL to the web fallback", async () => { + const open = vi.fn(); + vi.stubGlobal("window", { open }); + + await expect(nativeBridge.openExternalURL("javascript:alert(1)")) + .resolves.toBe(false); + expect(open).not.toHaveBeenCalled(); + }); + + it("normalizes and forwards an allowed URL to the web fallback", async () => { + const open = vi.fn(); + vi.stubGlobal("window", { open }); + + await expect(nativeBridge.openExternalURL(" https://example.com/docs ")) + .resolves.toBe(true); + expect(open).toHaveBeenCalledWith( + "https://example.com/docs", + "_blank", + "noopener,noreferrer", + ); + }); + + it("mirrors the HTTP(S)-only gate in the native bridge before launch", () => { + expect(nativeSource).toContain("bool isAllowedExternalBrowserURL(juce::String rawURL)"); + expect(nativeSource).toContain('rawURL.startsWithIgnoreCase("https://")'); + expect(nativeSource).toContain('rawURL.startsWithIgnoreCase("http://")'); + expect(nativeSource).toContain("if (! isAllowedExternalBrowserURL(url))"); + + const registrationStart = nativeSource.indexOf('.withNativeFunction ("openExternalURL"'); + const registrationEnd = nativeSource.indexOf('.withNativeFunction ("revealLocalPath"', registrationStart); + const registration = nativeSource.slice(registrationStart, registrationEnd); + expect(registration).toContain("launchInDefaultBrowser()"); + expect(registration.indexOf("isAllowedExternalBrowserURL")) + .toBeLessThan(registration.indexOf("launchInDefaultBrowser")); + }); + + it("routes install-log access through a reveal-only native API", async () => { + expect(aiSetupSource).toContain("nativeBridge.revealLocalPath(installLogPath)"); + expect(aiSetupSource).not.toContain("openExternalURL(toFileUrl"); + expect(bridgeSource).toContain("async revealLocalPath(path: string): Promise"); + + const registrationStart = nativeSource.indexOf('.withNativeFunction ("revealLocalPath"'); + const registrationEnd = nativeSource.indexOf('.withNativeFunction ("createTONE3000AuthRequest"', registrationStart); + const registration = nativeSource.slice(registrationStart, registrationEnd); + expect(registration).toContain("juce::File::isAbsolutePath(path)"); + expect(registration).toContain("localPath.existsAsFile()"); + expect(registration).toContain("localPath.revealToUser()"); + expect(registration).not.toContain("startAsProcess"); + expect(registration).not.toContain("launchInDefaultBrowser"); + + await expect(nativeBridge.revealLocalPath("C:\\OpenStudio\\install.log")) + .resolves.toBe(false); + }); +}); diff --git a/frontend/src/__tests__/frontendStyleArchitecture.test.ts b/frontend/src/__tests__/frontendStyleArchitecture.test.ts new file mode 100644 index 0000000..b7c8af8 --- /dev/null +++ b/frontend/src/__tests__/frontendStyleArchitecture.test.ts @@ -0,0 +1,29 @@ +import { describe, expect, it } from "vitest"; + +const sourceFiles = import.meta.glob( + ["../**/*.css", "../**/*.ts", "../**/*.tsx", "!../__tests__/**"], + { eager: true, query: "?raw", import: "default" }, +) as Record; + +describe("frontend style architecture", () => { + it("does not use forced cascade declarations", () => { + const forbiddenToken = "!" + "important"; + const offenders = Object.entries(sourceFiles) + .filter(([, source]) => source.includes(forbiddenToken)) + .map(([path]) => path); + + expect(offenders).toEqual([]); + }); + + it("keeps stylesheets out of TypeScript template strings and JSX style tags", () => { + const stylesheetConstant = /const\s+[A-Z][A-Z0-9_]*(?:CSS|STYLES?)\s*=\s*`/; + const offenders = Object.entries(sourceFiles).flatMap(([path, source]) => { + if (!path.endsWith(".tsx") && !path.endsWith(".ts")) return []; + return /)/.test(source) || stylesheetConstant.test(source) + ? [path] + : []; + }); + + expect(offenders).toEqual([]); + }); +}); diff --git a/frontend/src/__tests__/globalLockStructuralActions.test.ts b/frontend/src/__tests__/globalLockStructuralActions.test.ts new file mode 100644 index 0000000..af7b1ec --- /dev/null +++ b/frontend/src/__tests__/globalLockStructuralActions.test.ts @@ -0,0 +1,295 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { nativeBridge } from "../services/NativeBridge"; +import { getRegisteredAction } from "../store/actionRegistry"; +import { commandManager } from "../store/commands"; +import { + createDefaultTrack, + type AudioClip, + useDAWStore, +} from "../store/useDAWStore"; +import { createTrackOfType } from "../utils/trackCreation"; + +const originalState = useDAWStore.getState(); + +function clip(id = "clip", overrides: Partial = {}): AudioClip { + return { + id, + filePath: `C:/audio/${id}.wav`, + name: id, + startTime: 0, + duration: 1, + offset: 0, + color: "#224466", + volumeDB: 0, + fadeIn: 0, + fadeOut: 0, + ...overrides, + }; +} + +function editableTrack() { + const track = createDefaultTrack("track", "Track", "#224466", "audio", []); + track.clips = [clip()]; + return track; +} + +function deferred() { + let resolve!: (value: T) => void; + const promise = new Promise((settle) => { resolve = settle; }); + return { promise, resolve }; +} + +beforeEach(() => { + commandManager.clear(); + useDAWStore.setState({ + tracks: [], + selectedTrackId: null, + selectedTrackIds: [], + lastSelectedTrackId: null, + selectedClipId: null, + selectedClipIds: [], + globalLocked: false, + lockSettings: { items: false, envelopes: false, timeSelection: false, markers: false }, + showPluginBrowser: false, + pluginBrowserTrackId: null, + canUndo: false, + canRedo: false, + syncClipsWithBackend: vi.fn(async () => undefined), + syncMIDITrackToBackend: vi.fn(async () => undefined), + }); +}); + +afterEach(() => { + vi.restoreAllMocks(); + commandManager.clear(); + useDAWStore.setState(originalState); +}); + +describe("Global Lock structural action contract", () => { + it.each([ + "insert.audioTrack", + "insert.midiTrack", + "insert.instrumentTrack", + "insert.aiTrack", + "insert.quickAddInstrument", + "insert.folderTrack", + "insert.multipleTracks", + "insert.busTrack", + "track.setSelectedColor", + "track.consolidateSelected", + "track.toggleSelectedFreeze", + "track.renderSelectedInPlace", + "clip.renderSelectedInPlace", + "insert.bus", + ])("does not advertise %s while Global Lock is enabled", (actionId) => { + const track = editableTrack(); + useDAWStore.setState({ + tracks: [track], + selectedTrackId: track.id, + selectedTrackIds: [track.id], + selectedClipId: track.clips[0].id, + selectedClipIds: [track.clips[0].id], + globalLocked: true, + }); + + expect(getRegisteredAction(actionId)?.canHandleShortcut?.()).toBe(false); + }); + + it("rejects direct track creation/color entry points without phantom UI or history", async () => { + const track = editableTrack(); + useDAWStore.setState({ + tracks: [track], + selectedTrackId: track.id, + selectedTrackIds: [track.id], + globalLocked: true, + }); + + useDAWStore.getState().addTrack({ id: "new", name: "New", type: "audio" }); + useDAWStore.getState().createFolderTrack("Folder"); + useDAWStore.getState().setTracksColorWithUndo([track.id], "#ff0000"); + const created = await createTrackOfType("instrument", { openInstrumentBrowser: true }); + + const state = useDAWStore.getState(); + expect(created).toBeNull(); + expect(state.tracks).toHaveLength(1); + expect(state.tracks[0].color).toBe("#224466"); + expect(state.selectedTrackIds).toEqual([track.id]); + expect(state.showPluginBrowser).toBe(false); + expect(state.pluginBrowserTrackId).toBeNull(); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it.each([ + ["track.consolidateSelected", "items"], + ["track.toggleSelectedFreeze", "items"], + ["track.renderSelectedInPlace", "items"], + ["clip.renderSelectedInPlace", "items"], + ] as const)("does not advertise %s under the %s lock", (actionId, _lockKind) => { + const track = editableTrack(); + useDAWStore.setState({ + tracks: [track], + selectedTrackId: track.id, + selectedTrackIds: [track.id], + selectedClipId: "clip", + selectedClipIds: ["clip"], + lockSettings: { items: true, envelopes: false, timeSelection: false, markers: false }, + }); + expect(getRegisteredAction(actionId)?.canHandleShortcut?.()).toBe(false); + }); + + it.each([ + "track.consolidateSelected", + "track.renderSelectedInPlace", + "clip.renderSelectedInPlace", + ])("does not advertise %s for a frozen target", (actionId) => { + const track = editableTrack(); + track.frozen = true; + useDAWStore.setState({ + tracks: [track], + selectedTrackId: track.id, + selectedTrackIds: [track.id], + selectedClipId: "clip", + selectedClipIds: ["clip"], + }); + expect(getRegisteredAction(actionId)?.canHandleShortcut?.()).toBe(false); + }); + + it.each([ + "track.consolidateSelected", + "track.renderSelectedInPlace", + "clip.renderSelectedInPlace", + ])("does not advertise %s for a clip-locked target", (actionId) => { + const track = editableTrack(); + track.clips[0].locked = true; + useDAWStore.setState({ + tracks: [track], + selectedTrackId: track.id, + selectedTrackIds: [track.id], + selectedClipId: "clip", + selectedClipIds: ["clip"], + }); + expect(getRegisteredAction(actionId)?.canHandleShortcut?.()).toBe(false); + }); + + it("rolls back a batch add if Global Lock engages during the native add", async () => { + const add = deferred(); + vi.spyOn(nativeBridge, "addTrack").mockReturnValueOnce(add.promise); + const removeTrack = vi.spyOn(nativeBridge, "removeTrack").mockResolvedValue(true); + + const pending = useDAWStore.getState().addTracksBatch([ + { id: "late-track", name: "Late", type: "audio" }, + ]); + useDAWStore.setState({ globalLocked: true }); + add.resolve("late-track"); + + await expect(pending).resolves.toEqual([]); + expect(removeTrack).toHaveBeenCalledWith("late-track"); + expect(useDAWStore.getState().tracks).toEqual([]); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it("rolls back a bus if Global Lock engages during native creation", async () => { + const source = editableTrack(); + const add = deferred(); + vi.spyOn(nativeBridge, "addTrack").mockReturnValueOnce(add.promise); + const removeTrack = vi.spyOn(nativeBridge, "removeTrack").mockResolvedValue(true); + const addTrackSend = vi.spyOn(nativeBridge, "addTrackSend").mockResolvedValue(0); + useDAWStore.setState({ + tracks: [source], + selectedTrackId: source.id, + selectedTrackIds: [source.id], + }); + + const pending = Promise.resolve(useDAWStore.getState().createBusFromSelectedTracks()); + useDAWStore.setState({ globalLocked: true }); + add.resolve("bus"); + + await expect(pending).resolves.toBe(false); + expect(addTrackSend).not.toHaveBeenCalled(); + expect(removeTrack).toHaveBeenCalledTimes(1); + expect(useDAWStore.getState().tracks).toEqual([source]); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it("rolls back native freeze if Global Lock engages while rendering", async () => { + const track = editableTrack(); + const freeze = deferred<{ success: boolean; filePath: string; duration: number; sampleRate: number }>(); + vi.spyOn(nativeBridge, "getTrackInputFX").mockResolvedValue([]); + vi.spyOn(nativeBridge, "getTrackFX").mockResolvedValue([]); + vi.spyOn(nativeBridge, "freezeTrack").mockReturnValueOnce(freeze.promise); + const unfreeze = vi.spyOn(nativeBridge, "unfreezeTrack").mockResolvedValue(true); + useDAWStore.setState({ tracks: [track], selectedTrackId: track.id, selectedTrackIds: [track.id] }); + + const pending = useDAWStore.getState().toggleSelectedTracksFreeze(); + await vi.waitFor(() => expect(nativeBridge.freezeTrack).toHaveBeenCalled()); + useDAWStore.setState({ globalLocked: true }); + freeze.resolve({ + success: true, + filePath: "C:/freeze/track.wav", + duration: 1, + sampleRate: 48_000, + }); + + await expect(pending).resolves.toBe(false); + expect(unfreeze).toHaveBeenCalledWith(track.id); + expect(useDAWStore.getState().tracks[0]).toBe(track); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it.each([ + ["consolidate", (trackId: string) => useDAWStore.getState().consolidateTrack(trackId)], + ["render-track", (trackId: string) => useDAWStore.getState().renderTrackInPlace(trackId)], + ["render-clip", (_trackId: string) => useDAWStore.getState().renderClipInPlace("clip")], + ] as const)("aborts %s if Global Lock engages while its dialog is open", async (_label, invoke) => { + const track = editableTrack(); + const dialog = deferred(); + vi.spyOn(nativeBridge, "showRenderSaveDialog").mockReturnValueOnce(dialog.promise); + const render = vi.spyOn(nativeBridge, "renderProject").mockResolvedValue(true); + useDAWStore.setState({ tracks: [track] }); + + const pending = invoke(track.id); + useDAWStore.setState({ globalLocked: true }); + dialog.resolve("C:/renders/result.wav"); + await pending; + + expect(render).not.toHaveBeenCalled(); + expect(useDAWStore.getState().tracks).toEqual([track]); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it("still replays an already-created track command after Global Lock is enabled", async () => { + vi.spyOn(nativeBridge, "addTrack").mockResolvedValue("new"); + vi.spyOn(nativeBridge, "removeTrack").mockResolvedValue(true); + await useDAWStore.getState().addTracksBatch([{ id: "new", name: "New", type: "audio" }]); + expect(useDAWStore.getState().tracks.map((track) => track.id)).toEqual(["new"]); + + useDAWStore.setState({ globalLocked: true }); + useDAWStore.getState().undo(); + await vi.waitFor(() => expect(useDAWStore.getState().tracks).toEqual([])); + useDAWStore.getState().redo(); + await vi.waitFor(() => expect(useDAWStore.getState().tracks.map((track) => track.id)).toEqual(["new"])); + }); + + it("still replays an already-created freeze command after Global Lock is enabled", async () => { + const track = editableTrack(); + const freeze = vi.spyOn(nativeBridge, "freezeTrack").mockResolvedValue({ + success: true, + filePath: "C:/freeze/track.wav", + duration: 1, + sampleRate: 48_000, + }); + const unfreeze = vi.spyOn(nativeBridge, "unfreezeTrack").mockResolvedValue(true); + vi.spyOn(nativeBridge, "getTrackInputFX").mockResolvedValue([]); + vi.spyOn(nativeBridge, "getTrackFX").mockResolvedValue([]); + useDAWStore.setState({ tracks: [track], selectedTrackId: track.id, selectedTrackIds: [track.id] }); + + await expect(useDAWStore.getState().toggleSelectedTracksFreeze()).resolves.toBe(true); + useDAWStore.setState({ globalLocked: true }); + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks[0].frozen).toBe(false); + await vi.waitFor(() => expect(unfreeze).toHaveBeenCalled()); + useDAWStore.getState().redo(); + expect(useDAWStore.getState().tracks[0].frozen).toBe(true); + await vi.waitFor(() => expect(freeze).toHaveBeenCalledTimes(2)); + }); +}); diff --git a/frontend/src/__tests__/hotkeyFocusRegression.test.ts b/frontend/src/__tests__/hotkeyFocusRegression.test.ts new file mode 100644 index 0000000..49ebc95 --- /dev/null +++ b/frontend/src/__tests__/hotkeyFocusRegression.test.ts @@ -0,0 +1,294 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import mainSource from "../../../Source/Main.cpp?raw"; +import { nativeBridge } from "../services/NativeBridge"; +import { useDAWStore } from "../store/useDAWStore"; +import { dispatchGlobalShortcut } from "../utils/globalShortcutDispatcher"; +import { resetShortcutContextForTests } from "../utils/shortcutContext"; + +const originalState = { + keyboardShortcutProfileId: useDAWStore.getState().keyboardShortcutProfileId, + activeCustomKeyboardProfileId: useDAWStore.getState().activeCustomKeyboardProfileId, + customShortcuts: useDAWStore.getState().customShortcuts, + transport: useDAWStore.getState().transport, + recordSession: useDAWStore.getState().recordSession, + play: useDAWStore.getState().play, + stop: useDAWStore.getState().stop, + toggleLoop: useDAWStore.getState().toggleLoop, +}; + +let syntheticNow = 10_000_000; + +function setTransportState(state: "stopped" | "playing" | "recording") { + const current = useDAWStore.getState(); + useDAWStore.setState({ + transport: { + ...current.transport, + isPlaying: state !== "stopped", + isPaused: false, + isRecording: state === "recording", + }, + recordSession: state === "recording" + ? { id: "focus-regression-recording", startTime: 0, trackIds: [] } + : null, + }); +} + +function dispatchSpace(options: { + role?: string; + editable?: boolean; + nonTextControl?: boolean; + repeat?: boolean; + source?: "browser" | "pluginWindow"; +} = {}) { + const preventDefault = vi.fn(); + const handled = dispatchGlobalShortcut({ + key: " ", + code: "Space", + source: options.source ?? "browser", + repeat: options.repeat, + targetIsEditable: options.editable, + targetIsNonTextControl: options.nonTextControl, + preventDefault, + }, "windows", { role: options.role ?? "main" }); + return { handled, preventDefault }; +} + +beforeEach(() => { + syntheticNow += 1_000; + vi.spyOn(Date, "now").mockImplementation(() => syntheticNow); + resetShortcutContextForTests(); + useDAWStore.setState({ + keyboardShortcutProfileId: "openstudio", + activeCustomKeyboardProfileId: null, + customShortcuts: {}, + transport: { + ...originalState.transport, + isPlaying: false, + isPaused: false, + isRecording: false, + }, + recordSession: null, + play: vi.fn().mockResolvedValue(undefined), + stop: vi.fn().mockResolvedValue(undefined), + toggleLoop: vi.fn(), + }); +}); + +afterEach(() => { + resetShortcutContextForTests(); + useDAWStore.setState(originalState); + vi.restoreAllMocks(); +}); + +describe("hotkey focus and window regression contract", () => { + it.each([ + ["stopped", "play"], + ["playing", "stop"], + ["recording", "stop"], + ] as const)( + "reserves active-profile Space for transport from a focused non-text control while %s", + (transportState, expectedAction) => { + const play = vi.fn().mockResolvedValue(undefined); + const stop = vi.fn().mockResolvedValue(undefined); + useDAWStore.setState({ play, stop }); + setTransportState(transportState); + + const { handled, preventDefault } = dispatchSpace({ nonTextControl: true }); + + expect(handled).toBe(true); + expect(preventDefault).toHaveBeenCalledOnce(); + expect(play).toHaveBeenCalledTimes(expectedAction === "play" ? 1 : 0); + expect(stop).toHaveBeenCalledTimes(expectedAction === "stop" ? 1 : 0); + }, + ); + + it.each([ + ["main maximize button", "main"], + ["NAM Rack control", "pluginEditor"], + ["detached MIDI control", "midiEditor"], + ["detached Mixer control", "mixer"], + ])("claims Space instead of leaving it with a focused %s", (_label, role) => { + const publish = vi.spyOn(nativeBridge, "publishAppCommand").mockResolvedValue(true); + const { handled, preventDefault } = dispatchSpace({ role, nonTextControl: true }); + + expect(handled).toBe(true); + expect(preventDefault).toHaveBeenCalledOnce(); + if (role === "main") { + expect(useDAWStore.getState().play).toHaveBeenCalledOnce(); + expect(publish).not.toHaveBeenCalled(); + } else { + expect(publish).toHaveBeenCalledOnce(); + expect(publish).toHaveBeenCalledWith(expect.objectContaining({ + command: "transport.toggle", + })); + expect(useDAWStore.getState().play).not.toHaveBeenCalled(); + } + }); + + it("returns Space to a focused control when Play is explicitly unbound", () => { + useDAWStore.setState({ + customShortcuts: { "transport.play": { common: [] } }, + }); + const { handled, preventDefault } = dispatchSpace({ nonTextControl: true }); + + expect(handled).toBe(false); + expect(preventDefault).not.toHaveBeenCalled(); + expect(useDAWStore.getState().play).not.toHaveBeenCalled(); + }); + + it("uses a remapped Play key from a focused control and leaves Space native", () => { + useDAWStore.setState({ + customShortcuts: { "transport.play": { common: ["P"] } }, + }); + + const space = dispatchSpace({ nonTextControl: true }); + expect(space.handled).toBe(false); + expect(space.preventDefault).not.toHaveBeenCalled(); + + const preventDefault = vi.fn(); + expect(dispatchGlobalShortcut({ + key: "p", + code: "KeyP", + source: "browser", + targetIsNonTextControl: true, + preventDefault, + }, "windows", { role: "main" })).toBe(true); + expect(preventDefault).toHaveBeenCalledOnce(); + expect(useDAWStore.getState().play).toHaveBeenCalledOnce(); + }); + + it("does not let another global action assigned to Space steal native control activation", () => { + useDAWStore.setState({ + customShortcuts: { + "transport.play": { common: [] }, + "transport.loop": { common: ["Space"] }, + }, + }); + const { handled, preventDefault } = dispatchSpace({ nonTextControl: true }); + + expect(handled).toBe(false); + expect(preventDefault).not.toHaveBeenCalled(); + expect(useDAWStore.getState().toggleLoop).not.toHaveBeenCalled(); + }); + + it("preserves stopped editable Space but consumes the active Play binding while running", () => { + const stop = vi.fn().mockResolvedValue(undefined); + useDAWStore.setState({ stop }); + + setTransportState("stopped"); + const stopped = dispatchSpace({ editable: true }); + expect(stopped.handled).toBe(false); + expect(stopped.preventDefault).not.toHaveBeenCalled(); + + syntheticNow += 1_000; + setTransportState("playing"); + const playing = dispatchSpace({ editable: true }); + expect(playing.handled).toBe(true); + expect(playing.preventDefault).toHaveBeenCalledOnce(); + expect(stop).toHaveBeenCalledOnce(); + + syntheticNow += 1_000; + setTransportState("recording"); + const recording = dispatchSpace({ editable: true }); + expect(recording.handled).toBe(true); + expect(recording.preventDefault).toHaveBeenCalledOnce(); + expect(stop).toHaveBeenCalledTimes(2); + }); + + it("honors unbound and remapped Play inside an editable field", () => { + const stop = vi.fn().mockResolvedValue(undefined); + useDAWStore.setState({ + stop, + customShortcuts: { "transport.play": { common: [] } }, + }); + setTransportState("playing"); + + const unboundSpace = dispatchSpace({ editable: true }); + expect(unboundSpace.handled).toBe(false); + expect(stop).not.toHaveBeenCalled(); + + useDAWStore.setState({ + customShortcuts: { "transport.play": { common: ["P"] } }, + }); + const stoppedEditableP = vi.fn(); + setTransportState("stopped"); + expect(dispatchGlobalShortcut({ + key: "p", + code: "KeyP", + source: "browser", + targetIsEditable: true, + preventDefault: stoppedEditableP, + }, "windows", { role: "main" })).toBe(false); + expect(stoppedEditableP).not.toHaveBeenCalled(); + + setTransportState("playing"); + const runningEditableP = vi.fn(); + expect(dispatchGlobalShortcut({ + key: "p", + code: "KeyP", + source: "browser", + targetIsEditable: true, + preventDefault: runningEditableP, + }, "windows", { role: "main" })).toBe(true); + expect(runningEditableP).toHaveBeenCalledOnce(); + expect(stop).toHaveBeenCalledOnce(); + }); + + it.each(["pluginEditor", "midiEditor", "mixer"])( + "forwards an editable-field stop from the detached %s exactly once", + (role) => { + const publish = vi.spyOn(nativeBridge, "publishAppCommand").mockResolvedValue(true); + setTransportState("recording"); + + const { handled, preventDefault } = dispatchSpace({ role, editable: true }); + + expect(handled).toBe(true); + expect(preventDefault).toHaveBeenCalledOnce(); + expect(publish).toHaveBeenCalledOnce(); + expect(publish).toHaveBeenCalledWith(expect.objectContaining({ + command: "transport.stop", + })); + }, + ); + + it("consumes key repeat without replaying transport locally or remotely", () => { + const publish = vi.spyOn(nativeBridge, "publishAppCommand").mockResolvedValue(true); + + const main = dispatchSpace({ nonTextControl: true, repeat: true }); + expect(main.handled).toBe(true); + expect(main.preventDefault).toHaveBeenCalledOnce(); + expect(useDAWStore.getState().play).not.toHaveBeenCalled(); + + const detached = dispatchSpace({ + role: "pluginEditor", + nonTextControl: true, + repeat: true, + }); + expect(detached.handled).toBe(true); + expect(detached.preventDefault).toHaveBeenCalledOnce(); + expect(publish).not.toHaveBeenCalled(); + }); + + it("deduplicates a browser/native double delivery into one transport action", () => { + const play = vi.fn().mockResolvedValue(undefined); + useDAWStore.setState({ play }); + setTransportState("stopped"); + + const browser = dispatchSpace({ nonTextControl: true, source: "browser" }); + syntheticNow += 25; + const native = dispatchSpace({ source: "pluginWindow" }); + + expect(browser.handled).toBe(true); + expect(native.handled).toBe(true); + expect(browser.preventDefault).toHaveBeenCalledOnce(); + expect(native.preventDefault).toHaveBeenCalledOnce(); + expect(play).toHaveBeenCalledOnce(); + }); + + it("routes native plug-in shortcuts only to the authoritative main WebView", () => { + expect(mainSource).toMatch( + /broadcastEventToRole\s*\(\s*MainComponent::WindowRole::main\s*,\s*"nativeGlobalShortcut"/, + ); + expect(mainSource).not.toContain('broadcastEventToAll("nativeGlobalShortcut", payload)'); + }); +}); diff --git a/frontend/src/__tests__/inputProfileHelp.test.ts b/frontend/src/__tests__/inputProfileHelp.test.ts new file mode 100644 index 0000000..f7d33f2 --- /dev/null +++ b/frontend/src/__tests__/inputProfileHelp.test.ts @@ -0,0 +1,142 @@ +import { afterEach, describe, expect, it } from "vitest"; +import { useDAWStore } from "../store/useDAWStore"; +import { + getEffectiveShortcutLabel, + getTimelineWheelHelp, +} from "../utils/inputProfileHelp"; + +afterEach(() => { + useDAWStore.setState({ + customShortcuts: {}, + keyboardShortcutProfileId: "openstudio", + mouseBehaviorProfileId: "openstudio", + }); +}); + +describe("input profile help", () => { + it("describes the selected REAPER timeline rules instead of OpenStudio defaults", () => { + expect(getTimelineWheelHelp("reaper", "windows").items).toEqual([ + { gesture: "Scroll", action: "zoom the timeline" }, + { gesture: "Ctrl+Scroll", action: "resize track height" }, + { gesture: "Alt+Scroll", action: "scroll horizontally" }, + { gesture: "Ctrl+Alt+Scroll", action: "scroll vertically" }, + ]); + }); + + it("distinguishes physical Control from Command for Logic on macOS", () => { + expect(getTimelineWheelHelp("logic_pro", "macos").items).toEqual([ + { gesture: "Ctrl+Option+Scroll", action: "zoom the timeline" }, + { gesture: "Other wheel gestures", action: "use native scrolling" }, + ]); + expect(getTimelineWheelHelp("logic_pro", "windows").items[0]).toEqual({ + gesture: "Ctrl+Alt+Scroll", + action: "zoom the timeline", + }); + }); + + it("describes FL Studio wheel actions only at their exact Playlist hit targets", () => { + expect(getTimelineWheelHelp("fl_studio", "windows").items).toEqual([ + { + gesture: "Shift+Scroll over a track", + action: "reorder the hovered track", + }, + { + gesture: "Alt+Shift+Scroll over a clip", + action: "nudge the hovered clip", + }, + { + gesture: "Other wheel gestures", + action: "use native scrolling", + }, + ]); + }); + + it("does not invent GarageBand wheel behavior and keeps DP physical modifiers visible", () => { + expect(getTimelineWheelHelp("garageband", "macos").items).toEqual([ + { + gesture: "Wheel gestures", + action: "use native scrolling when no supported item-specific action matches", + }, + ]); + expect(getTimelineWheelHelp("digital_performer", "macos").items).toEqual([ + { gesture: "Option+Scroll", action: "zoom the timeline" }, + { gesture: "Ctrl+Option+Scroll", action: "resize track height" }, + { gesture: "Other wheel gestures", action: "use native scrolling" }, + ]); + expect(getTimelineWheelHelp("digital_performer", "windows").items[1]).toEqual({ + gesture: "Win+Alt+Scroll", + action: "resize track height", + }); + }); + + it("describes Cakewalk's exact Clips-pane zoom combinations", () => { + expect(getTimelineWheelHelp("cakewalk_sonar", "windows").items).toEqual([ + { gesture: "Alt+Scroll", action: "zoom the timeline" }, + { gesture: "Alt+Shift+Scroll", action: "zoom the timeline faster" }, + { gesture: "Ctrl+Alt+Scroll", action: "resize track height" }, + { gesture: "Other wheel gestures", action: "use native scrolling" }, + ]); + }); + + it("describes the new profiles without broadening their documented wheel scopes", () => { + expect(getTimelineWheelHelp("adobe_audition", "windows").items).toEqual([ + { gesture: "Scroll over the ruler", action: "zoom the timeline" }, + ]); + expect(getTimelineWheelHelp("mixcraft", "windows").items).toEqual([ + { gesture: "Scroll", action: "zoom the timeline" }, + { gesture: "Ctrl+Scroll", action: "scroll horizontally" }, + { gesture: "Shift+Scroll", action: "scroll vertically" }, + ]); + expect(getTimelineWheelHelp("waveform", "macos").items).toEqual([ + { gesture: "Scroll", action: "zoom the timeline" }, + { gesture: "Cmd+Scroll", action: "resize track height" }, + ]); + expect(getTimelineWheelHelp("renoise", "windows").items).toEqual([ + { + gesture: "Wheel gestures", + action: "use native scrolling when no supported item-specific action matches", + }, + ]); + }); + + it("names exact lane, scale, fade, and event-volume targets without generic placeholders", () => { + expect(getTimelineWheelHelp("ableton_live", "windows", 8).items).toContainEqual({ + gesture: "Alt+Scroll over an automation lane", + action: "resize the hovered automation lane", + }); + + const audacityItems = getTimelineWheelHelp("audacity", "windows", 10).items; + expect(audacityItems).toContainEqual({ + gesture: "Shift+Scroll over a waveform scale", + action: "pan the waveform scale vertically", + }); + expect(audacityItems).toContainEqual({ + gesture: "Ctrl+Shift+Scroll over a spectrogram scale", + action: "adjust the spectrogram lower dB limit", + }); + + const cubaseItems = getTimelineWheelHelp("cubase", "windows", 10).items; + expect(cubaseItems).toContainEqual({ + gesture: "Scroll over a fade handle", + action: "adjust the hovered fade length", + }); + expect(cubaseItems).toContainEqual({ + gesture: "Scroll over an event-volume handle", + action: "adjust the hovered event volume", + }); + }); + + it("labels custom and profile-owned empty bindings as unassigned", () => { + useDAWStore.setState({ + keyboardShortcutProfileId: "openstudio", + customShortcuts: { "transport.record": "" }, + }); + expect(getEffectiveShortcutLabel("transport.record", "Ctrl+R")).toBe("Unassigned"); + + useDAWStore.setState({ + keyboardShortcutProfileId: "pro_tools", + customShortcuts: {}, + }); + expect(getEffectiveShortcutLabel("tools.splitTool", "B")).toBe("Unassigned"); + }); +}); diff --git a/frontend/src/__tests__/inputProfileStore.test.ts b/frontend/src/__tests__/inputProfileStore.test.ts new file mode 100644 index 0000000..c281a05 --- /dev/null +++ b/frontend/src/__tests__/inputProfileStore.test.ts @@ -0,0 +1,178 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { useDAWStore } from "../store/useDAWStore"; +import { + MOUSE_MODIFIER_OVERRIDES_STORAGE_KEY, + loadStoredMouseModifierOverrides, + parsePersistedMouseModifierOverrides, +} from "../utils/mouseModifierPersistence"; + +const SETTINGS_KEY = "openstudio.inputProfiles.v1"; + +describe("input profile persistence", () => { + let storage: Storage; + let previousState: Pick< + ReturnType, + | "keyboardShortcutProfileId" + | "mouseBehaviorProfileId" + | "inputProfileOnboardingSeen" + | "mouseModifiers" + | "showToast" + >; + + beforeEach(() => { + const values = new Map(); + storage = { + get length() { return values.size; }, + clear: () => values.clear(), + getItem: (key) => values.get(key) ?? null, + key: (index) => [...values.keys()][index] ?? null, + removeItem: (key) => { values.delete(key); }, + setItem: (key, value) => { values.set(key, String(value)); }, + }; + vi.stubGlobal("localStorage", storage); + const state = useDAWStore.getState(); + previousState = { + keyboardShortcutProfileId: state.keyboardShortcutProfileId, + mouseBehaviorProfileId: state.mouseBehaviorProfileId, + inputProfileOnboardingSeen: state.inputProfileOnboardingSeen, + mouseModifiers: state.mouseModifiers, + showToast: state.showToast, + }; + storage.removeItem(SETTINGS_KEY); + useDAWStore.setState({ + keyboardShortcutProfileId: "openstudio", + mouseBehaviorProfileId: "openstudio", + inputProfileOnboardingSeen: false, + mouseModifiers: {}, + }); + }); + + afterEach(() => { + useDAWStore.setState(previousState); + storage.removeItem(SETTINGS_KEY); + vi.unstubAllGlobals(); + }); + + it("persists keyboard and mouse profiles independently with a schema version", () => { + useDAWStore.getState().setKeyboardShortcutProfile("reaper"); + useDAWStore.getState().setMouseBehaviorProfile("logic_pro"); + + expect(useDAWStore.getState().keyboardShortcutProfileId).toBe("reaper"); + expect(useDAWStore.getState().mouseBehaviorProfileId).toBe("logic_pro"); + expect(JSON.parse(storage.getItem(SETTINGS_KEY) ?? "{}")).toMatchObject({ + schemaVersion: 1, + keyboardProfileId: "reaper", + mouseProfileId: "logic_pro", + onboardingSeen: false, + }); + }); + + it("records completion of the first-run profile prompt", () => { + useDAWStore.getState().markInputProfileOnboardingSeen(); + expect(useDAWStore.getState().inputProfileOnboardingSeen).toBe(true); + expect(JSON.parse(storage.getItem(SETTINGS_KEY) ?? "{}").onboardingSeen).toBe(true); + }); + + it("keeps keyboard, mouse, and onboarding state atomic when storage is unavailable", () => { + const showToast = vi.fn(); + useDAWStore.setState({ showToast }); + vi.stubGlobal("localStorage", undefined); + + useDAWStore.getState().setKeyboardShortcutProfile("reaper"); + useDAWStore.getState().setMouseBehaviorProfile("logic_pro"); + useDAWStore.getState().markInputProfileOnboardingSeen(); + + expect(useDAWStore.getState()).toMatchObject({ + keyboardShortcutProfileId: "openstudio", + mouseBehaviorProfileId: "openstudio", + inputProfileOnboardingSeen: false, + }); + expect(showToast).toHaveBeenNthCalledWith( + 1, + "The keyboard profile could not be saved to local storage.", + "error", + ); + expect(showToast).toHaveBeenNthCalledWith( + 2, + "The mouse profile could not be saved to local storage.", + "error", + ); + expect(showToast).toHaveBeenNthCalledWith( + 3, + "Input profile setup could not be saved to local storage.", + "error", + ); + }); + + it("keeps keyboard, mouse, and onboarding state atomic when storage throws", () => { + const showToast = vi.fn(); + useDAWStore.setState({ showToast }); + vi.spyOn(storage, "setItem").mockImplementation(() => { + throw new Error("quota exceeded"); + }); + + useDAWStore.getState().setKeyboardShortcutProfile("cubase"); + useDAWStore.getState().setMouseBehaviorProfile("studio_one"); + useDAWStore.getState().markInputProfileOnboardingSeen(); + + expect(useDAWStore.getState()).toMatchObject({ + keyboardShortcutProfileId: "openstudio", + mouseBehaviorProfileId: "openstudio", + inputProfileOnboardingSeen: false, + }); + expect(showToast).toHaveBeenCalledTimes(3); + expect(storage.getItem(SETTINGS_KEY)).toBeNull(); + }); + + it("rejects invalid profile IDs received from untrusted persisted/UI data", () => { + useDAWStore.getState().setKeyboardShortcutProfile("deleted-profile" as never); + useDAWStore.getState().setMouseBehaviorProfile("deleted-profile" as never); + expect(useDAWStore.getState().keyboardShortcutProfileId).toBe("openstudio"); + expect(useDAWStore.getState().mouseBehaviorProfileId).toBe("openstudio"); + }); + + it("persists validated mouse overrides and resets them durably", () => { + useDAWStore.getState().setMouseModifier("clip_drag", "ctrl", "copy"); + useDAWStore.getState().setMouseModifier("timeline_click", "alt", "razor"); + + expect(useDAWStore.getState().mouseModifiers).toEqual({ + clip_drag: { primary: "copy" }, + timeline_click: { alt: "razor" }, + }); + const persisted = JSON.parse( + storage.getItem(MOUSE_MODIFIER_OVERRIDES_STORAGE_KEY) ?? "null", + ); + expect(parsePersistedMouseModifierOverrides(persisted)?.overrides) + .toEqual(useDAWStore.getState().mouseModifiers); + expect(loadStoredMouseModifierOverrides(storage)) + .toEqual(useDAWStore.getState().mouseModifiers); + + useDAWStore.getState().resetMouseModifiers(); + expect(useDAWStore.getState().mouseModifiers).toEqual({}); + expect(loadStoredMouseModifierOverrides(storage)).toEqual({}); + }); + + it("rejects malformed mouse overrides and keeps state atomic on storage failure", () => { + useDAWStore.getState().setMouseModifier("clip_drag", "primary", "copy"); + const overridesBefore = useDAWStore.getState().mouseModifiers; + const persistedBefore = storage.getItem(MOUSE_MODIFIER_OVERRIDES_STORAGE_KEY); + + useDAWStore.getState().setMouseModifier("clip_drag", "primary", "not-an-action"); + expect(useDAWStore.getState().mouseModifiers).toBe(overridesBefore); + + vi.spyOn(storage, "setItem").mockImplementation(() => { + throw new Error("quota exceeded"); + }); + useDAWStore.getState().setMouseModifier("clip_drag", "shift", "constrain"); + useDAWStore.getState().resetMouseModifiers(); + + expect(useDAWStore.getState().mouseModifiers).toBe(overridesBefore); + expect(storage.getItem(MOUSE_MODIFIER_OVERRIDES_STORAGE_KEY)).toBe(persistedBefore); + expect(loadStoredMouseModifierOverrides({ + getItem: () => JSON.stringify({ + schemaVersion: 1, + overrides: { clip_drag: { primary: "delete" } }, + }), + })).toEqual({}); + }); +}); diff --git a/frontend/src/__tests__/inputProfileWindowSync.test.ts b/frontend/src/__tests__/inputProfileWindowSync.test.ts new file mode 100644 index 0000000..4291566 --- /dev/null +++ b/frontend/src/__tests__/inputProfileWindowSync.test.ts @@ -0,0 +1,189 @@ +import { afterEach, describe, expect, it, vi } from "vitest"; +import { nativeBridge } from "../services/NativeBridge"; +import { useDAWStore } from "../store/useDAWStore"; +import type { CustomKeyboardShortcutProfile } from "../utils/customShortcutProfiles"; +import { + applyMixerUISnapshot, + extractMixerUISnapshot, +} from "../utils/mixerWindowSync"; +import { + hydrateInputProfilesFromNative, + startDetachedInputProfileSync, +} from "../utils/inputProfileWindowSync"; + +const originalState = useDAWStore.getState(); + +function customProfile( + id: string, + baseProfileId: "reaper" | "cubase" = "reaper", +): CustomKeyboardShortcutProfile { + return { + id, + name: "Detached profile", + baseProfileId, + bindings: { + "transport.playPause": { common: ["Code:KeyP"] }, + }, + createdAt: 10, + updatedAt: 20, + }; +} + +afterEach(() => { + vi.restoreAllMocks(); + useDAWStore.setState(originalState); +}); + +describe("detached-window input profile synchronization", () => { + it("carries built-in and active custom profile state in the retained mixer snapshot", () => { + const profile = customProfile("custom-detached"); + useDAWStore.setState({ + keyboardShortcutProfileId: "reaper", + mouseBehaviorProfileId: "ableton_live", + customKeyboardProfiles: [profile], + activeCustomKeyboardProfileId: profile.id, + customShortcuts: profile.bindings, + mouseModifiers: { clip_drag: { primary: "copy" } }, + }); + const snapshot = extractMixerUISnapshot(); + + useDAWStore.setState({ + keyboardShortcutProfileId: "openstudio", + mouseBehaviorProfileId: "openstudio", + customKeyboardProfiles: [], + activeCustomKeyboardProfileId: null, + customShortcuts: {}, + mouseModifiers: {}, + }); + applyMixerUISnapshot(snapshot); + + expect(useDAWStore.getState()).toMatchObject({ + keyboardShortcutProfileId: "reaper", + mouseBehaviorProfileId: "ableton_live", + activeCustomKeyboardProfileId: "custom-detached", + customShortcuts: profile.bindings, + mouseModifiers: { clip_drag: { primary: "copy" } }, + }); + }); + + it("hydrates a reopened MIDI/plugin window from native retained state without localStorage", async () => { + const profile = customProfile("custom-reopen", "cubase"); + const retained = { + ...extractMixerUISnapshot(), + keyboardShortcutProfileId: "cubase" as const, + mouseBehaviorProfileId: "logic_pro" as const, + customKeyboardProfiles: [profile], + activeCustomKeyboardProfileId: profile.id, + customShortcuts: profile.bindings, + mouseModifiers: { timeline_click: { alt: "razor" } }, + }; + vi.spyOn(nativeBridge, "getMixerUISnapshot").mockResolvedValue({ + originWindowId: "main", + revision: 7, + payload: retained, + }); + useDAWStore.setState({ + keyboardShortcutProfileId: "openstudio", + mouseBehaviorProfileId: "openstudio", + customKeyboardProfiles: [], + activeCustomKeyboardProfileId: null, + customShortcuts: {}, + mouseModifiers: {}, + }); + + await expect(hydrateInputProfilesFromNative()).resolves.toBe(true); + expect(useDAWStore.getState()).toMatchObject({ + keyboardShortcutProfileId: "cubase", + mouseBehaviorProfileId: "logic_pro", + activeCustomKeyboardProfileId: "custom-reopen", + customShortcuts: profile.bindings, + mouseModifiers: { timeline_click: { alt: "razor" } }, + }); + }); + + it("applies live main-window changes and rejects a slower stale retained read", async () => { + const listenerRef: { current?: (value: unknown) => void } = {}; + const unsubscribe = vi.fn(); + vi.spyOn(nativeBridge, "subscribe").mockImplementation((eventId, callback) => { + expect(eventId).toBe("mixerUISync"); + listenerRef.current = callback; + return unsubscribe; + }); + + const retainedResolverRef: { current?: (value: unknown) => void } = {}; + vi.spyOn(nativeBridge, "getMixerUISnapshot").mockImplementation(() => ( + new Promise((resolve) => { retainedResolverRef.current = resolve; }) + )); + + const stop = startDetachedInputProfileSync(); + const live = { + ...extractMixerUISnapshot(), + keyboardShortcutProfileId: "pro_tools" as const, + mouseBehaviorProfileId: "cakewalk_sonar" as const, + customKeyboardProfiles: [], + activeCustomKeyboardProfileId: null, + customShortcuts: {}, + }; + listenerRef.current?.({ originWindowId: "main", revision: 9, payload: live }); + expect(useDAWStore.getState()).toMatchObject({ + keyboardShortcutProfileId: "pro_tools", + mouseBehaviorProfileId: "cakewalk_sonar", + }); + + retainedResolverRef.current?.({ + originWindowId: "main", + revision: 8, + payload: { + ...live, + keyboardShortcutProfileId: "audacity", + mouseBehaviorProfileId: "audacity", + }, + }); + await Promise.resolve(); + expect(useDAWStore.getState()).toMatchObject({ + keyboardShortcutProfileId: "pro_tools", + mouseBehaviorProfileId: "cakewalk_sonar", + }); + + stop(); + expect(unsubscribe).toHaveBeenCalledTimes(1); + }); + + it("ignores malformed remote profile and custom-binding payloads", async () => { + vi.spyOn(nativeBridge, "getMixerUISnapshot").mockResolvedValue({ + originWindowId: "main", + revision: 1, + payload: { + ...extractMixerUISnapshot(), + keyboardShortcutProfileId: "not-a-profile", + customKeyboardProfiles: [{ id: "broken" }], + }, + }); + useDAWStore.setState({ + keyboardShortcutProfileId: "openstudio", + mouseBehaviorProfileId: "openstudio", + }); + + await expect(hydrateInputProfilesFromNative()).resolves.toBe(false); + expect(useDAWStore.getState()).toMatchObject({ + keyboardShortcutProfileId: "openstudio", + mouseBehaviorProfileId: "openstudio", + }); + }); + + it("rejects malformed remote mouse overrides", async () => { + vi.spyOn(nativeBridge, "getMixerUISnapshot").mockResolvedValue({ + originWindowId: "main", + revision: 2, + payload: { + ...extractMixerUISnapshot(), + mouseModifiers: { clip_drag: { primary: "delete" } }, + }, + }); + const mouseModifiers = { fade_handle: { shift: "symmetric" } }; + useDAWStore.setState({ mouseModifiers }); + + await expect(hydrateInputProfilesFromNative()).resolves.toBe(false); + expect(useDAWStore.getState().mouseModifiers).toBe(mouseModifiers); + }); +}); diff --git a/frontend/src/__tests__/interactionSafetyGuards.test.ts b/frontend/src/__tests__/interactionSafetyGuards.test.ts index 867def0..9870854 100644 --- a/frontend/src/__tests__/interactionSafetyGuards.test.ts +++ b/frontend/src/__tests__/interactionSafetyGuards.test.ts @@ -1,38 +1,128 @@ -import { describe, expect, it } from "vitest"; +import { describe, expect, it, vi } from "vitest"; import appSource from "../App.tsx?raw"; import mixerWindowSource from "../MixerWindowApp.tsx?raw"; import midiWindowSource from "../MidiEditorWindowApp.tsx?raw"; +import pluginWindowSource from "../PluginEditorWindowApp.tsx?raw"; import contextMenuSource from "../components/ContextMenu.tsx?raw"; import modalSource from "../components/ui/Modal/Modal.tsx?raw"; import pianoRollSource from "../components/PianoRoll.tsx?raw"; +import timelineSource from "../components/Timeline.tsx?raw"; import shortcutSource from "../utils/globalShortcutDispatcher.ts?raw"; import modalGuardSource from "../utils/modalEventGuards.ts?raw"; +import { isEditorWheelOwnedTarget } from "../utils/modalEventGuards"; +import { + isEditableShortcutTarget, + isNonTextControlShortcutTarget, + shouldPreserveEditableShortcut, + shouldPreserveNonTextControlShortcut, +} from "../utils/shortcutContext"; + +function targetMatching(selectorFragment: string): EventTarget { + return { + closest: (selector: string) => selector.includes(selectorFragment) ? {} : null, + } as unknown as EventTarget; +} describe("interaction safety guards", () => { it("lets Space stop active transport from focused inputs without stealing idle text entry", () => { const editableBranchIndex = shortcutSource.indexOf("if (payload.targetIsEditable)"); - const customShortcutsIndex = shortcutSource.indexOf("const customShortcuts"); expect(editableBranchIndex).toBeGreaterThan(-1); - expect(customShortcutsIndex).toBeGreaterThan(-1); - expect(editableBranchIndex).toBeLessThan(customShortcutsIndex); expect(shortcutSource).toContain( - "isPlainSpacebar(payload) && (state.transport.isRecording || state.transport.isPlaying)", + "matchesTransportPlay && (state.transport.isRecording || state.transport.isPlaying)", ); + expect(shortcutSource).toContain("shouldPreserveEditableShortcut("); expect(shortcutSource).toContain('publishDetachedCommand("transport.stop")'); expect(shortcutSource).toContain("else state.stop()"); expect(shortcutSource).toContain("return false;"); }); it("captures keyboard shortcuts before focused controls stop propagation", () => { - for (const source of [appSource, mixerWindowSource, midiWindowSource]) { - expect(source).toContain("target instanceof HTMLSelectElement"); + for (const source of [ + appSource, + mixerWindowSource, + midiWindowSource, + pluginWindowSource, + ]) { + expect(source).toContain("isEditableShortcutTarget(e.target)"); + expect(source).toContain("isNonTextControlShortcutTarget(e.target)"); expect(source).toContain("stopPropagation: () => e.stopPropagation()"); + expect(source).toContain("stopImmediatePropagation: () => e.stopImmediatePropagation()"); expect(source).toContain('window.addEventListener("keydown", handleKeyDown, true)'); expect(source).toContain('window.removeEventListener("keydown", handleKeyDown, true)'); } }); + it("routes shortcuts from plugin controls without stealing native control keys", () => { + expect(pluginWindowSource).not.toContain("NON_TEXT_PLUGIN_CONTROL_SELECTOR"); + expect(pluginWindowSource).toContain( + "targetIsNonTextControl: isNonTextControlShortcutTarget(e.target)", + ); + expect(pluginWindowSource).toContain("isEditableShortcutTarget(e.target)"); + expect(shortcutSource).toContain("shouldPreserveNonTextControlShortcut(payload)"); + }); + + it("classifies text, selection, and ARIA editing targets consistently", () => { + for (const selector of [ + "input[type='text']", + "input[type='number']", + "[contenteditable='true']", + "select", + "[role='combobox']", + ]) { + expect(isEditableShortcutTarget(targetMatching(selector))).toBe(true); + } + + for (const selector of [ + "button", + "input[type='range']", + "[role='slider']", + ]) { + expect(isNonTextControlShortcutTarget(targetMatching(selector))).toBe(true); + } + }); + + it("preserves native control navigation while allowing registered chords", () => { + const nativeControlKeys = [ + " ", + "Enter", + "Tab", + "ArrowLeft", + "ArrowRight", + "ArrowUp", + "ArrowDown", + "Home", + "End", + "PageUp", + "PageDown", + ]; + + for (const key of nativeControlKeys) { + expect(shouldPreserveNonTextControlShortcut({ key })).toBe(true); + expect(shouldPreserveEditableShortcut({ key })).toBe(true); + } + + expect(shouldPreserveNonTextControlShortcut({ key: "s", ctrlKey: true })).toBe(false); + expect(shouldPreserveEditableShortcut({ key: "s", ctrlKey: true })).toBe(false); + }); + + it("activates the docked MIDI session from editor chrome interactions", () => { + expect(appSource).toContain('data-shortcut-context={`piano_roll:${dockedMidiEditorSession.sessionId}`}'); + expect(appSource).toContain("onPointerDownCapture={() => activateShortcutContext({"); + expect(appSource).toContain("onContextMenuCapture={() => activateShortcutContext({"); + expect(appSource).toContain("onFocusCapture={() => activateShortcutContext({"); + }); + + it("wires audio copy-drag and modified click through the semantic gesture path", () => { + expect(timelineSource).toContain( + "isTimelineClipCopyAction(modifierAction)", + ); + expect(timelineSource).toContain("shouldStartTimelineCopyDrag(true, dragType, clipEditLocked)"); + expect(timelineSource).toContain("if (!copyOnDrag && !isAlreadyInMultiSelection)"); + expect(timelineSource).toContain("selectClip(clip.id, { ctrl: true });"); + expect(timelineSource).toContain("previewStartTime: clip.startTime"); + }); + it("blocks workspace context menus while modal layers are open", () => { expect(modalGuardSource).toContain("installModalContextMenuLeakGuard"); expect(modalGuardSource).toContain('window.addEventListener("contextmenu", handleContextMenu, true)'); @@ -57,6 +147,57 @@ describe("interaction safety guards", () => { expect(modalGuardSource).toContain("event.preventDefault();"); }); + it.each([ + ["native input, including range", "input"], + ["select", "select"], + ["textarea", "textarea"], + ["button or nested button content", "button"], + ["ARIA parameter slider", "[role='slider']"], + ["modal content", "[data-modal-root='true']"], + ["modal panel", "[data-modal-panel='true']"], + ])("yields editor wheel propagation to %s", (_label, selector) => { + const event = { + target: targetMatching(selector), + preventDefault: vi.fn(), + stopPropagation: vi.fn(), + }; + const resolveParentGesture = vi.fn(); + const handleParentWheel = () => { + if (isEditorWheelOwnedTarget(event.target)) return; + resolveParentGesture(); + event.preventDefault(); + event.stopPropagation(); + }; + + handleParentWheel(); + + expect(resolveParentGesture).not.toHaveBeenCalled(); + expect(event.preventDefault).not.toHaveBeenCalled(); + expect(event.stopPropagation).not.toHaveBeenCalled(); + }); + + it("lets Timeline and Piano Roll yield before resolving or consuming wheel input", () => { + const timelineWheel = timelineSource.slice( + timelineSource.indexOf("const handleWheel = (e: WheelEvent) =>"), + timelineSource.indexOf('container.addEventListener("wheel", handleWheel'), + ); + const pianoWheel = pianoRollSource.slice( + pianoRollSource.indexOf("const handleWheel = (event: WheelEvent) =>"), + pianoRollSource.indexOf('container.addEventListener("wheel", handleWheel'), + ); + + for (const [source, guard] of [ + [timelineWheel, "if (isEditorWheelOwnedTarget(e.target)) return;"], + [pianoWheel, "if (isEditorWheelOwnedTarget(event.target)) return;"], + ] as const) { + const guardIndex = source.indexOf(guard); + expect(guardIndex).toBeGreaterThan(-1); + expect(guardIndex).toBeLessThan(source.indexOf("resolveWheelGesture(")); + expect(guardIndex).toBeLessThan(source.indexOf("preventDefault()")); + expect(guardIndex).toBeLessThan(source.indexOf("stopPropagation()")); + } + }); + it("keeps context submenus open while crossing into the submenu", () => { expect(contextMenuSource).toContain("submenuCloseTimerRef"); expect(contextMenuSource).toContain("scheduleSubmenuClose"); diff --git a/frontend/src/__tests__/keyboardShortcutsModalAvailability.test.ts b/frontend/src/__tests__/keyboardShortcutsModalAvailability.test.ts new file mode 100644 index 0000000..d9f58ee --- /dev/null +++ b/frontend/src/__tests__/keyboardShortcutsModalAvailability.test.ts @@ -0,0 +1,208 @@ +import { afterEach, describe, expect, it, vi } from "vitest"; +import { shallow } from "zustand/shallow"; +import type { ActionDef } from "../store/actionRegistry"; +import { useDAWStore } from "../store/useDAWStore"; +import { + executeShortcutActionFromModal, + getShortcutActionAvailability, + selectShortcutAvailabilityInputs, +} from "../components/KeyboardShortcutsModal"; +import keyboardShortcutsModalSource from "../components/KeyboardShortcutsModal.tsx?raw"; + +const originalTransport = useDAWStore.getState().transport; +const originalStepInputEnabled = useDAWStore.getState().stepInputEnabled; + +function action(overrides: Partial = {}): ActionDef { + return { + id: "test.modal-action", + name: "Modal action", + category: "Test", + execute: vi.fn(), + ...overrides, + }; +} + +afterEach(() => { + useDAWStore.setState({ + transport: originalTransport, + stepInputEnabled: originalStepInputEnabled, + }); + vi.restoreAllMocks(); +}); + +describe("KeyboardShortcutsModal action availability", () => { + it("projects every store input used by shortcut availability guards", () => { + const base = useDAWStore.getState(); + type StoreSnapshot = typeof base; + const withPatch = (patch: Partial): StoreSnapshot => ({ + ...base, + ...patch, + }); + const alternateEditRange = { + startTime: 0, + endTime: 1, + minNote: 48, + maxNote: 72, + includeCC: false, + }; + const cases: Array<[string, StoreSnapshot]> = [ + ["tracks", withPatch({ tracks: [...base.tracks] })], + ["trackGroups", withPatch({ trackGroups: [...base.trackGroups] })], + ["selectedTrackId", withPatch({ selectedTrackId: base.selectedTrackId ? null : "projection-track" })], + ["selectedTrackIds", withPatch({ selectedTrackIds: [...base.selectedTrackIds] })], + ["selectedClipId", withPatch({ selectedClipId: base.selectedClipId ? null : "projection-clip" })], + ["selectedClipIds", withPatch({ selectedClipIds: [...base.selectedClipIds] })], + ["selectedNoteIds", withPatch({ selectedNoteIds: [...base.selectedNoteIds] })], + ["selectedRegionIds", withPatch({ selectedRegionIds: [...base.selectedRegionIds] })], + ["selectedAutomationTarget", withPatch({ + selectedAutomationTarget: base.selectedAutomationTarget + ? null + : { kind: "master", laneId: "projection-lane", pointId: null }, + })], + ["razorEdits", withPatch({ razorEdits: [...base.razorEdits] })], + ["midiEditRange", withPatch({ + midiEditRange: base.midiEditRange ? null : alternateEditRange, + })], + ["pianoRollEditCursorTime", withPatch({ + pianoRollEditCursorTime: base.pianoRollEditCursorTime === null + ? 1 + : base.pianoRollEditCursorTime + 1, + })], + ["midiEditorSessions", withPatch({ midiEditorSessions: [...base.midiEditorSessions] })], + ["timeSelection", withPatch({ + timeSelection: base.timeSelection ? null : { start: 0, end: 1 }, + })], + ["clipboard", withPatch({ clipboard: { ...base.clipboard } })], + ["markers", withPatch({ markers: [...base.markers] })], + ["regions", withPatch({ regions: [...base.regions] })], + ["transport.currentTime", withPatch({ + transport: { ...base.transport, currentTime: base.transport.currentTime + 1 }, + })], + ["transport.tempo", withPatch({ + transport: { ...base.transport, tempo: base.transport.tempo + 1 }, + })], + ["transport.isPlaying", withPatch({ + transport: { ...base.transport, isPlaying: !base.transport.isPlaying }, + })], + ["transport.isRecording", withPatch({ + transport: { ...base.transport, isRecording: !base.transport.isRecording }, + })], + ["recordSession", withPatch({ + recordSession: base.recordSession + ? null + : { id: "projection-session", startTime: 0, trackIds: [] }, + })], + ["recordingClips", withPatch({ recordingClips: [...base.recordingClips] })], + ["stepInputEnabled", withPatch({ stepInputEnabled: !base.stepInputEnabled })], + ["canUndo", withPatch({ canUndo: !base.canUndo })], + ["canRedo", withPatch({ canRedo: !base.canRedo })], + ["globalLocked", withPatch({ globalLocked: !base.globalLocked })], + ["lockSettings", withPatch({ lockSettings: { ...base.lockSettings } })], + ["timeSignature", withPatch({ timeSignature: { ...base.timeSignature } })], + ["gridSize", withPatch({ gridSize: base.gridSize === "1/4" ? "1/8" : "1/4" })], + ["pixelsPerSecond", withPatch({ pixelsPerSecond: base.pixelsPerSecond + 1 })], + ["quantizePresets", withPatch({ quantizePresets: [...base.quantizePresets] })], + ["quantizePresetId", withPatch({ quantizePresetId: `${base.quantizePresetId}-projection` })], + ["masterAutomationLanes", withPatch({ masterAutomationLanes: [...base.masterAutomationLanes] })], + ["masterAutomationReadEnabled", withPatch({ + masterAutomationReadEnabled: !base.masterAutomationReadEnabled, + })], + ["masterAutomationWriteEnabled", withPatch({ + masterAutomationWriteEnabled: !base.masterAutomationWriteEnabled, + })], + ["suspendedMasterAutomationState", withPatch({ + suspendedMasterAutomationState: base.suspendedMasterAutomationState + ? null + : { showAutomation: false, lanes: {} }, + })], + ["mixerSnapshots", withPatch({ mixerSnapshots: [...base.mixerSnapshots] })], + ["detachedPanels", withPatch({ detachedPanels: [...base.detachedPanels] })], + ["recentProjects", withPatch({ recentProjects: [...base.recentProjects] })], + ["projectTemplates", withPatch({ projectTemplates: [...base.projectTemplates] })], + ["customToolbars", withPatch({ customToolbars: [...base.customToolbars] })], + ["trackTemplates", withPatch({ trackTemplates: [...base.trackTemplates] })], + ["activeMidiEditorSessionId", withPatch({ + activeMidiEditorSessionId: base.activeMidiEditorSessionId ? null : "projection-editor", + })], + ["pianoRollTrackId", withPatch({ pianoRollTrackId: base.pianoRollTrackId ? null : "projection-track" })], + ["pianoRollClipId", withPatch({ pianoRollClipId: base.pianoRollClipId ? null : "projection-clip" })], + ["showPianoRoll", withPatch({ showPianoRoll: !base.showPianoRoll })], + ["showPitchEditor", withPatch({ showPitchEditor: !base.showPitchEditor })], + ["pitchEditorTrackId", withPatch({ pitchEditorTrackId: base.pitchEditorTrackId ? null : "projection-track" })], + ["pitchEditorClipId", withPatch({ pitchEditorClipId: base.pitchEditorClipId ? null : "projection-clip" })], + ["trackHeight", withPatch({ trackHeight: base.trackHeight + 1 })], + ["tcpWidth", withPatch({ tcpWidth: base.tcpWidth + 1 })], + ]; + + const baseline = selectShortcutAvailabilityInputs(base); + for (const [dependency, state] of cases) { + expect( + shallow(baseline, selectShortcutAvailabilityInputs(state)), + `${dependency} must invalidate the availability projection`, + ).toBe(false); + } + }); + + it("exposes the unavailable state and reason to assistive technology", () => { + expect(keyboardShortcutsModalSource).toContain("aria-disabled={!availability.available || undefined}"); + expect(keyboardShortcutsModalSource).toContain("aria-describedby={!availability.available ? unavailableReasonId : undefined}"); + expect(keyboardShortcutsModalSource).toMatch(/role="status"\s+aria-live="polite"/); + expect(keyboardShortcutsModalSource).toContain("{availability.reason}"); + + const actionButtonStart = keyboardShortcutsModalSource.indexOf("aria-describedby={!availability.available ? unavailableReasonId : undefined}"); + const actionButtonEnd = keyboardShortcutsModalSource.indexOf("", actionButtonStart); + const reasonNode = keyboardShortcutsModalSource.indexOf("id={unavailableReasonId}", actionButtonStart); + expect(actionButtonStart).toBeGreaterThan(-1); + expect(actionButtonEnd).toBeGreaterThan(actionButtonStart); + expect(reasonNode).toBeGreaterThan(actionButtonEnd); + }); + + it("does not execute or close for a failed canHandleShortcut guard", () => { + const execute = vi.fn(); + const onClose = vi.fn(); + const result = executeShortcutActionFromModal(action({ + execute, + canHandleShortcut: () => false, + }), onClose); + + expect(result).toEqual({ + available: false, + reason: "Unavailable in the current context", + }); + expect(execute).not.toHaveBeenCalled(); + expect(onClose).not.toHaveBeenCalled(); + }); + + it("does not execute or close when shortcutWhen is inactive", () => { + useDAWStore.setState((state) => ({ + transport: { ...state.transport, isPlaying: false, isRecording: false }, + })); + const execute = vi.fn(); + const onClose = vi.fn(); + const guarded = action({ execute, shortcutWhen: "transport_running" }); + + expect(getShortcutActionAvailability(guarded)).toEqual({ + available: false, + reason: "Available while transport is running", + }); + expect(executeShortcutActionFromModal(guarded, onClose).available).toBe(false); + expect(execute).not.toHaveBeenCalled(); + expect(onClose).not.toHaveBeenCalled(); + }); + + it("executes and closes only when condition and contextual guard both pass", () => { + useDAWStore.setState((state) => ({ + transport: { ...state.transport, isPlaying: true, isRecording: false }, + })); + const execute = vi.fn(); + const onClose = vi.fn(); + + expect(executeShortcutActionFromModal(action({ + execute, + shortcutWhen: "transport_running", + canHandleShortcut: () => true, + }), onClose)).toEqual({ available: true }); + expect(execute).toHaveBeenCalledOnce(); + expect(onClose).toHaveBeenCalledOnce(); + }); +}); diff --git a/frontend/src/__tests__/keyboardShortcutsPrintSafety.test.ts b/frontend/src/__tests__/keyboardShortcutsPrintSafety.test.ts new file mode 100644 index 0000000..2d556a0 --- /dev/null +++ b/frontend/src/__tests__/keyboardShortcutsPrintSafety.test.ts @@ -0,0 +1,14 @@ +import { describe, expect, it } from "vitest"; +import { escapePrintHtml } from "../components/KeyboardShortcutsModal"; +import keyboardShortcutsSource from "../components/KeyboardShortcutsModal.tsx?raw"; + +describe("keyboard shortcut print safety", () => { + it("escapes imported shortcut labels before inserting printable markup", () => { + expect(escapePrintHtml(` &`)).toBe( + "<img src=x onerror="alert('x')"> &", + ); + expect(keyboardShortcutsSource).toContain("escapePrintHtml(item.shortcut)"); + expect(keyboardShortcutsSource).toContain("escapePrintHtml(item.name)"); + expect(keyboardShortcutsSource).toContain("printWindow.opener = null"); + }); +}); diff --git a/frontend/src/__tests__/markerRegionActionSemantics.test.ts b/frontend/src/__tests__/markerRegionActionSemantics.test.ts new file mode 100644 index 0000000..50f8816 --- /dev/null +++ b/frontend/src/__tests__/markerRegionActionSemantics.test.ts @@ -0,0 +1,155 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { getRegisteredAction } from "../store/actionRegistry"; +import { commandManager } from "../store/commands"; +import { useDAWStore } from "../store/useDAWStore"; +import { dispatchGlobalShortcut } from "../utils/globalShortcutDispatcher"; +import { activateShortcutContext, resetShortcutContextForTests } from "../utils/shortcutContext"; + +const originalState = useDAWStore.getState(); + +beforeEach(() => { + commandManager.clear(); + resetShortcutContextForTests(); + activateShortcutContext({ kind: "application" }); + useDAWStore.setState({ + markers: [], + regions: [], + timeSelection: null, + globalLocked: false, + lockSettings: { ...originalState.lockSettings, markers: false }, + transport: { ...originalState.transport, currentTime: 3.5 }, + keyboardShortcutProfileId: "openstudio", + customShortcuts: {}, + canUndo: false, + canRedo: false, + isModified: false, + }); +}); + +afterEach(() => { + vi.restoreAllMocks(); + vi.unstubAllGlobals(); + commandManager.clear(); + resetShortcutContextForTests(); + useDAWStore.setState(originalState); +}); + +describe("marker and region command semantics", () => { + it("adds a marker from the hotkey as one undoable command with a stable id", () => { + const action = getRegisteredAction("insert.marker")!; + expect(action.canHandleShortcut?.()).toBe(true); + expect(dispatchGlobalShortcut({ key: "m", code: "KeyM", source: "browser" }, "windows")) + .toBe(true); + + const marker = useDAWStore.getState().markers[0]; + expect(marker).toMatchObject({ time: 3.5, name: "Marker 1" }); + expect(useDAWStore.getState().isModified).toBe(true); + expect(commandManager.getUndoStack()).toHaveLength(1); + + useDAWStore.getState().undo(); + expect(useDAWStore.getState().markers).toEqual([]); + useDAWStore.getState().redo(); + expect(useDAWStore.getState().markers).toEqual([marker]); + expect(commandManager.getUndoStack()).toHaveLength(1); + }); + + it("adds only a non-empty named marker and a normalized non-empty region", () => { + const prompt = vi.fn() + .mockReturnValueOnce(" ") + .mockReturnValueOnce(" Chorus "); + vi.stubGlobal("prompt", prompt); + const named = getRegisteredAction("insert.markerNamed")!; + named.execute(); + expect(useDAWStore.getState().markers).toEqual([]); + expect(commandManager.getUndoStack()).toHaveLength(0); + named.execute(); + expect(useDAWStore.getState().markers[0]).toMatchObject({ name: "Chorus", time: 3.5 }); + + useDAWStore.setState({ timeSelection: { start: 8, end: 2 } }); + const region = getRegisteredAction("insert.regionFromSelection")!; + expect(region.canHandleShortcut?.()).toBe(true); + region.execute(); + expect(useDAWStore.getState().regions[0]).toMatchObject({ + name: "Region 1", + startTime: 2, + endTime: 8, + }); + expect(commandManager.getUndoStack()).toHaveLength(2); + }); + + it("updates and removes marker/region data with one reversible command each", () => { + useDAWStore.getState().addMarker(1, "Verse"); + useDAWStore.getState().addRegion(2, 6, "Body"); + commandManager.clear(); + useDAWStore.setState({ canUndo: false, canRedo: false }); + const marker = useDAWStore.getState().markers[0]; + const region = useDAWStore.getState().regions[0]; + + useDAWStore.getState().updateMarker(marker.id, { name: "Intro", time: -2, id: "spoofed" }); + expect(useDAWStore.getState().markers[0]).toMatchObject({ id: marker.id, name: "Intro", time: 0 }); + expect(commandManager.getUndoStack()).toHaveLength(1); + useDAWStore.getState().undo(); + expect(useDAWStore.getState().markers[0]).toEqual(marker); + useDAWStore.getState().redo(); + expect(useDAWStore.getState().markers[0].id).toBe(marker.id); + + useDAWStore.getState().updateRegion(region.id, { startTime: 9, endTime: 3, id: "spoofed" }); + expect(useDAWStore.getState().regions[0]).toMatchObject({ id: region.id, startTime: 3, endTime: 9 }); + useDAWStore.getState().removeMarker(marker.id); + useDAWStore.getState().removeRegion(region.id); + expect(commandManager.getUndoStack()).toHaveLength(4); + expect(useDAWStore.getState()).toMatchObject({ markers: [], regions: [] }); + + useDAWStore.getState().undo(); + expect(useDAWStore.getState().regions[0].id).toBe(region.id); + useDAWStore.getState().undo(); + expect(useDAWStore.getState().markers[0].id).toBe(marker.id); + }); + + it("rejects invalid/no-op mutations and leaves insert chords unavailable while marker editing is locked", () => { + useDAWStore.getState().addMarker(1, "One"); + useDAWStore.getState().addRegion(2, 4, "Range"); + const marker = useDAWStore.getState().markers[0]; + const region = useDAWStore.getState().regions[0]; + commandManager.clear(); + + useDAWStore.getState().updateMarker(marker.id, { name: marker.name }); + useDAWStore.getState().updateMarker(marker.id, { time: Number.NaN }); + useDAWStore.getState().updateRegion(region.id, { startTime: region.startTime }); + useDAWStore.getState().updateRegion(region.id, { endTime: Number.POSITIVE_INFINITY }); + useDAWStore.getState().removeMarker("missing"); + useDAWStore.getState().removeRegion("missing"); + useDAWStore.getState().addMarker(Number.NaN); + useDAWStore.getState().addRegion(2, 2); + expect(commandManager.getUndoStack()).toHaveLength(0); + + useDAWStore.setState((state) => ({ + lockSettings: { ...state.lockSettings, markers: true }, + timeSelection: { start: 2, end: 4 }, + })); + expect(getRegisteredAction("insert.marker")?.canHandleShortcut?.()).toBe(false); + expect(getRegisteredAction("insert.markerNamed")?.canHandleShortcut?.()).toBe(false); + expect(getRegisteredAction("insert.regionFromSelection")?.canHandleShortcut?.()).toBe(false); + expect(dispatchGlobalShortcut({ key: "m", code: "KeyM", source: "browser" }, "windows")) + .toBe(false); + expect(useDAWStore.getState().markers).toEqual([marker]); + getRegisteredAction("insert.regionFromSelection")?.execute(); + useDAWStore.getState().removeMarker(marker.id); + useDAWStore.getState().removeRegion(region.id); + expect(useDAWStore.getState().markers).toEqual([marker]); + expect(useDAWStore.getState().regions).toEqual([region]); + expect(commandManager.getUndoStack()).toHaveLength(0); + + useDAWStore.setState((state) => ({ + lockSettings: { ...state.lockSettings, markers: false }, + globalLocked: true, + })); + expect(getRegisteredAction("insert.marker")?.canHandleShortcut?.()).toBe(false); + expect(getRegisteredAction("insert.regionFromSelection")?.canHandleShortcut?.()).toBe(false); + expect(dispatchGlobalShortcut({ key: "m", code: "KeyM", source: "browser" }, "windows")) + .toBe(false); + getRegisteredAction("insert.marker")?.execute(); + expect(useDAWStore.getState().markers).toEqual([marker]); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); +}); diff --git a/frontend/src/__tests__/masterAutomationPointUndo.test.ts b/frontend/src/__tests__/masterAutomationPointUndo.test.ts new file mode 100644 index 0000000..b2bca1a --- /dev/null +++ b/frontend/src/__tests__/masterAutomationPointUndo.test.ts @@ -0,0 +1,243 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { nativeBridge } from "../services/NativeBridge"; +import { commandManager } from "../store/commands"; +import { + type AutomationLane, + type AutomationPoint, + useDAWStore, +} from "../store/useDAWStore"; + +const originalState = useDAWStore.getState(); + +function masterLane(points: AutomationPoint[] = [], overrides: Partial = {}): AutomationLane { + return { + id: "master-volume", + param: "volume", + points, + visible: true, + mode: "read", + armed: false, + readEnabled: true, + ...overrides, + }; +} + +function currentPoints(): AutomationPoint[] { + return useDAWStore.getState().masterAutomationLanes[0]?.points ?? []; +} + +function expectCurrentPointValues(expected: Array<{ time: number; value: number }>) { + const points = currentPoints(); + expect(points.map(({ time, value }) => ({ time, value }))).toEqual(expected); + expect(points.every((point) => typeof point.id === "string" && point.id.length > 0)).toBe(true); + expect(new Set(points.map((point) => point.id)).size).toBe(expected.length); +} + +beforeEach(() => { + commandManager.clear(); + vi.spyOn(nativeBridge, "setAutomationPoints").mockResolvedValue(true); + vi.spyOn(nativeBridge, "setAutomationMode").mockResolvedValue(true); + useDAWStore.setState({ + masterAutomationLanes: [], + masterAutomationReadEnabled: false, + masterAutomationWriteEnabled: false, + masterAutomationEnabled: false, + automationWriteBehavior: "touch", + globalLocked: false, + lockSettings: { ...useDAWStore.getState().lockSettings, envelopes: false }, + canUndo: false, + canRedo: false, + isModified: false, + }); +}); + +afterEach(() => { + vi.restoreAllMocks(); + commandManager.clear(); + useDAWStore.setState(originalState); +}); + +describe("undo-aware master automation points", () => { + it("adds a clamped point, enables read, and restores the exact prior state", () => { + const originalPoints = [ + { id: "stacked-a", time: 1, value: 0.8 }, + { id: "stacked-b", time: 1, value: 0.2 }, + ]; + useDAWStore.setState({ + masterAutomationLanes: [masterLane(originalPoints, { mode: "off", readEnabled: false })], + masterAutomationReadEnabled: false, + masterAutomationWriteEnabled: false, + masterAutomationEnabled: false, + }); + + useDAWStore.getState().addMasterAutomationPoint("master-volume", -4, 2); + + expectCurrentPointValues([ + { time: 0, value: 1 }, + { time: 1, value: 0.8 }, + { time: 1, value: 0.2 }, + ]); + expect(useDAWStore.getState()).toMatchObject({ + masterAutomationReadEnabled: true, + masterAutomationEnabled: true, + canUndo: true, + }); + expect(useDAWStore.getState().masterAutomationLanes[0]).toMatchObject({ + mode: "read", + readEnabled: true, + }); + + useDAWStore.getState().undo(); + expect(currentPoints()).toEqual(originalPoints); + expect(useDAWStore.getState()).toMatchObject({ + masterAutomationReadEnabled: false, + masterAutomationWriteEnabled: false, + masterAutomationEnabled: false, + }); + expect(useDAWStore.getState().masterAutomationLanes[0]).toMatchObject({ + mode: "off", + readEnabled: false, + }); + + useDAWStore.getState().redo(); + expectCurrentPointValues([ + { time: 0, value: 1 }, + { time: 1, value: 0.8 }, + { time: 1, value: 0.2 }, + ]); + }); + + it("removes exactly the requested stacked point and restores its order on undo", () => { + const originalPoints = [ + { id: "stacked-a", time: 1, value: 0.1 }, + { id: "stacked-b", time: 1, value: 0.2 }, + { id: "later", time: 2, value: 0.3 }, + ]; + useDAWStore.setState({ masterAutomationLanes: [masterLane(originalPoints)] }); + + useDAWStore.getState().removeMasterAutomationPoint("master-volume", 1); + expectCurrentPointValues([ + { time: 1, value: 0.1 }, + { time: 2, value: 0.3 }, + ]); + expect(commandManager.getUndoStack()).toHaveLength(1); + + useDAWStore.getState().undo(); + expect(currentPoints()).toEqual(originalPoints); + useDAWStore.getState().redo(); + expectCurrentPointValues([ + { time: 1, value: 0.1 }, + { time: 2, value: 0.3 }, + ]); + }); + + it("moves a point through neighbours in one command and restores index identity", () => { + const originalPoints = [ + { id: "moving", time: 1, value: 0.1 }, + { id: "middle", time: 2, value: 0.2 }, + { id: "last", time: 3, value: 0.3 }, + ]; + useDAWStore.setState({ masterAutomationLanes: [masterLane(originalPoints)] }); + + useDAWStore.getState().moveMasterAutomationPoint("master-volume", 0, 4, 0.9); + expectCurrentPointValues([ + { time: 2, value: 0.2 }, + { time: 3, value: 0.3 }, + { time: 4, value: 0.9 }, + ]); + expect(currentPoints().map((point) => point.id)).toEqual(["middle", "last", "moving"]); + expect(commandManager.getUndoStack()).toHaveLength(1); + + useDAWStore.getState().undo(); + expect(currentPoints()).toEqual(originalPoints); + useDAWStore.getState().redo(); + expectCurrentPointValues([ + { time: 2, value: 0.2 }, + { time: 3, value: 0.3 }, + { time: 4, value: 0.9 }, + ]); + }); + + it("keeps equal-time point ordering stable after a move", () => { + useDAWStore.setState({ + masterAutomationLanes: [masterLane([ + { id: "first", time: 1, value: 0.1 }, + { id: "second", time: 1, value: 0.2 }, + { id: "moving", time: 3, value: 0.3 }, + ])], + }); + + useDAWStore.getState().moveMasterAutomationPoint("master-volume", 2, 1, 0.9); + expectCurrentPointValues([ + { time: 1, value: 0.1 }, + { time: 1, value: 0.2 }, + { time: 1, value: 0.9 }, + ]); + expect(currentPoints().map((point) => point.id)).toEqual(["first", "second", "moving"]); + }); + + it("sanitizes non-finite movement and does not record malformed or missing targets", () => { + useDAWStore.setState({ masterAutomationLanes: [masterLane([{ id: "stable", time: 2, value: 0.5 }])] }); + + for (const pointIndex of [-1, 0.5, 2, Number.NaN]) { + useDAWStore.getState().moveMasterAutomationPoint( + "master-volume", + pointIndex, + 4, + 0.8, + ); + useDAWStore.getState().removeMasterAutomationPoint("master-volume", pointIndex); + } + useDAWStore.getState().addMasterAutomationPoint("missing", 1, 0.5); + useDAWStore.getState().moveMasterAutomationPoint("missing", 0, 1, 0.5); + useDAWStore.getState().removeMasterAutomationPoint("missing", 0); + expect(commandManager.getUndoStack()).toHaveLength(0); + expectCurrentPointValues([{ time: 2, value: 0.5 }]); + + useDAWStore.setState({ + masterAutomationLanes: [{ + ...masterLane(), + points: undefined, + } as unknown as AutomationLane], + }); + expect(() => { + useDAWStore.getState().moveMasterAutomationPoint("master-volume", 0, 1, 0.5); + useDAWStore.getState().removeMasterAutomationPoint("master-volume", 0); + }).not.toThrow(); + expect(commandManager.getUndoStack()).toHaveLength(0); + + useDAWStore.setState({ masterAutomationLanes: [masterLane([{ id: "stable", time: 2, value: 0.5 }])] }); + + useDAWStore.getState().moveMasterAutomationPoint( + "master-volume", + 0, + Number.NaN, + Number.POSITIVE_INFINITY, + ); + expectCurrentPointValues([{ time: 2, value: 0.5 }]); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it("does not create an undo entry for a no-op move", () => { + useDAWStore.setState({ masterAutomationLanes: [masterLane([{ id: "stable", time: 2, value: 0.5 }])] }); + + useDAWStore.getState().moveMasterAutomationPoint("master-volume", 0, 2, 0.5); + + expect(commandManager.getUndoStack()).toHaveLength(0); + expect(useDAWStore.getState().canUndo).toBe(false); + }); + + it("synchronizes execute, undo, and redo to the master backend lane", () => { + useDAWStore.setState({ masterAutomationLanes: [masterLane([{ id: "stable", time: 2, value: 0.5 }])] }); + const pointsSpy = vi.mocked(nativeBridge.setAutomationPoints); + + useDAWStore.getState().moveMasterAutomationPoint("master-volume", 0, 3, 0.75); + useDAWStore.getState().undo(); + useDAWStore.getState().redo(); + + expect(pointsSpy).toHaveBeenCalledTimes(3); + expect(pointsSpy.mock.calls.every(([trackId, param]) => ( + trackId === "master" && param === "volume" + ))).toBe(true); + }); +}); diff --git a/frontend/src/__tests__/masterFXRemovalContract.test.ts b/frontend/src/__tests__/masterFXRemovalContract.test.ts new file mode 100644 index 0000000..71622cd --- /dev/null +++ b/frontend/src/__tests__/masterFXRemovalContract.test.ts @@ -0,0 +1,53 @@ +import { describe, expect, it } from "vitest"; +import audioEngineHeaderSource from "../../../Source/AudioEngine.h?raw"; +import audioEngineSource from "../../../Source/AudioEngine.cpp?raw"; +import mainComponentSource from "../../../Source/MainComponent.cpp?raw"; +import nativeBridgeSource from "../services/NativeBridge.ts?raw"; +import automationActionsSource from "../store/actions/automation.ts?raw"; +import fxChainPanelSource from "../components/FXChainPanel.tsx?raw"; + +describe("master FX removal contracts", () => { + it("publishes a state-synchronized master-stage reorder through the C++ bridge", () => { + expect(audioEngineHeaderSource).toContain("bool reorderMasterFX(int fromIndex, int toIndex);"); + const functionStart = audioEngineSource.indexOf( + "bool AudioEngine::reorderMasterFX(int fromIndex, int toIndex)", + ); + const nextFunction = audioEngineSource.indexOf( + "void AudioEngine::openMasterFXEditor", + functionStart, + ); + expect(functionStart).toBeGreaterThan(-1); + expect(nextFunction).toBeGreaterThan(functionStart); + const reorderBody = audioEngineSource.slice(functionStart, nextFunction); + expect(reorderBody).toContain("specCopy = desiredMasterStageSpec;"); + expect(reorderBody).toContain("syncStageSpecStateFromActive(specCopy, activeStage);"); + expect(reorderBody).toContain("specCopy.slots.erase"); + expect(reorderBody).toContain("specCopy.slots.insert"); + expect(reorderBody).toContain("publishMasterStageSpec(specCopy)"); + + expect(mainComponentSource).toContain('.withNativeFunction ("reorderMasterFX"'); + expect(mainComponentSource).toContain("completion(audioEngine.reorderMasterFX((int)args[0], (int)args[1]))"); + }); + + it("keeps the TypeScript bridge and undo restore contract complete", () => { + expect(nativeBridgeSource).toContain("reorderMasterFX?: (fromIndex: number, toIndex: number) => Promise;"); + expect(nativeBridgeSource).toContain("async reorderMasterFX(fromIndex: number, toIndex: number): Promise"); + expect(nativeBridgeSource).toContain("window.__JUCE__.backend.reorderMasterFX(fromIndex, toIndex)"); + + expect(automationActionsSource).toContain("removeMasterFXWithUndo: async (fxIndex: number)"); + expect(automationActionsSource).toContain("getMasterPluginState(fxIndex)"); + expect(automationActionsSource).toContain("addMasterBuiltInFX(pluginReference)"); + expect(automationActionsSource).toContain("addMasterS13FX(pluginReference)"); + expect(automationActionsSource).toContain("addMasterFX(pluginReference)"); + expect(automationActionsSource).toContain("setMasterPluginState(appendedIndex, savedState)"); + expect(automationActionsSource).toContain("setMasterFXPrecisionOverride("); + expect(automationActionsSource).toContain("reorderMasterFX(appendedIndex, fxIndex)"); + }); + + it("routes selected master-slot removal through the undo-aware store action", () => { + expect(fxChainPanelSource).toContain("removeMasterFXWithUndo: s.removeMasterFXWithUndo"); + expect(fxChainPanelSource).toContain("success = await removeMasterFXWithUndo(fxIndex)"); + expect(fxChainPanelSource).not.toContain("await nativeBridge.removeMasterFX(fxIndex)"); + expect(fxChainPanelSource).not.toContain('if (chainType === "master") return "claimed_noop"'); + }); +}); diff --git a/frontend/src/__tests__/midiEditLockSafety.test.ts b/frontend/src/__tests__/midiEditLockSafety.test.ts new file mode 100644 index 0000000..8b4d226 --- /dev/null +++ b/frontend/src/__tests__/midiEditLockSafety.test.ts @@ -0,0 +1,167 @@ +import { afterEach, beforeEach, describe, expect, it } from "vitest"; +import { commandManager } from "../store/commands"; +import { + createDefaultTrack, + type MIDICCEvent, + type MIDIClip, + type MIDIEvent, + useDAWStore, +} from "../store/useDAWStore"; +import { noteIdFor } from "../utils/midiNotes"; + +const originalState = useDAWStore.getState(); +const TRACK_ID = "midi-lock-track"; +const CLIP_ID = "midi-lock-clip"; +const firstNoteId = noteIdFor(CLIP_ID, 0.25, 60); +const secondNoteId = noteIdFor(CLIP_ID, 1, 64); + +const originalEvents: MIDIEvent[] = [ + { type: "noteOn", timestamp: 0.25, note: 60, velocity: 90 }, + { type: "noteOff", timestamp: 0.75, note: 60, velocity: 0 }, + { type: "noteOn", timestamp: 1, note: 64, velocity: 84 }, + { type: "noteOff", timestamp: 1.5, note: 64, velocity: 0 }, +]; +const originalCCEvents: MIDICCEvent[] = [{ cc: 1, time: 0.5, value: 64 }]; + +type StoreState = ReturnType; +type MutationCase = readonly [string, (state: StoreState) => unknown]; + +function seedEditableMidiTarget(lock: "global" | "items" | "clip" | "frozen") { + const clip: MIDIClip = { + id: CLIP_ID, + name: "Lock target", + startTime: 0, + duration: 4, + sourceLength: 4, + loopLength: 4, + events: originalEvents.map((event) => ({ ...event })), + ccEvents: originalCCEvents.map((event) => ({ ...event })), + quantizeBackup: { + events: originalEvents.map((event) => ({ ...event })), + ccEvents: originalCCEvents.map((event) => ({ ...event })), + }, + color: "#4361ee", + locked: lock === "clip", + }; + const track = createDefaultTrack(TRACK_ID, "MIDI Lock", "#4361ee", "midi", []); + track.midiClips = [clip]; + track.frozen = lock === "frozen"; + + useDAWStore.setState((state) => ({ + tracks: [track], + selectedTrackId: TRACK_ID, + selectedTrackIds: [TRACK_ID], + selectedClipId: CLIP_ID, + selectedClipIds: [CLIP_ID], + selectedNoteIds: [firstNoteId, secondNoteId], + pianoRollTrackId: TRACK_ID, + pianoRollClipId: CLIP_ID, + midiEditRange: { + startTime: 0, + endTime: 2, + minNote: 0, + maxNote: 127, + includeCC: true, + }, + midiNoteClipboard: { + notes: [{ startTime: 0, noteNumber: 67, duration: 0.5, velocity: 88 }], + sourceTrackId: TRACK_ID, + sourceClipId: CLIP_ID, + isCut: false, + }, + midiRangeClipboard: { + rangeLength: 1, + notes: [{ startTime: 0, noteNumber: 67, duration: 0.5, velocity: 88 }], + ccEvents: [{ cc: 1, time: 0.25, value: 90 }], + sourceTrackId: TRACK_ID, + sourceClipId: CLIP_ID, + isCut: false, + }, + globalLocked: lock === "global", + lockSettings: { ...state.lockSettings, items: lock === "items" }, + isModified: false, + canUndo: false, + canRedo: false, + } as Partial)); +} + +function mutationSnapshot() { + const state = useDAWStore.getState(); + return JSON.stringify({ + tracks: state.tracks, + selectedNoteIds: state.selectedNoteIds, + midiNoteClipboard: state.midiNoteClipboard, + midiRangeClipboard: state.midiRangeClipboard, + isModified: state.isModified, + }); +} + +const changedEvents: MIDIEvent[] = [ + { type: "noteOn", timestamp: 0.5, note: 72, velocity: 100 }, + { type: "noteOff", timestamp: 1, note: 72, velocity: 0 }, +]; +const changedCC: MIDICCEvent[] = [{ cc: 1, time: 0.75, value: 100 }]; + +const mutationCases: readonly MutationCase[] = [ + ["preview events", (s) => s.previewMIDIClipEvents(TRACK_ID, CLIP_ID, changedEvents)], + ["commit events", (s) => s.commitMIDIClipEvents(TRACK_ID, CLIP_ID, originalEvents, changedEvents)], + ["glue notes", (s) => s.glueSelectedMIDINotes(TRACK_ID, CLIP_ID, [firstNoteId, secondNoteId])], + ["add note", (s) => s.addMIDINote(TRACK_ID, CLIP_ID, 2, 67, 0.5)], + ["remove notes", (s) => s.removeMIDINotes(TRACK_ID, CLIP_ID, [firstNoteId])], + ["move notes", (s) => s.moveMIDINotes(TRACK_ID, CLIP_ID, [firstNoteId], 0.25, 1)], + ["resize note", (s) => s.resizeMIDINote(TRACK_ID, CLIP_ID, firstNoteId, 0.5, 1)], + ["note velocity", (s) => s.updateMIDINoteVelocity(TRACK_ID, CLIP_ID, 0.25, 60, 32)], + ["preview CC", (s) => s.updateMIDICCEvents(TRACK_ID, CLIP_ID, changedCC, { transient: true })], + ["commit CC", (s) => s.commitMIDICCEvents(TRACK_ID, CLIP_ID, originalCCEvents, changedCC)], + ["cut notes", (s) => s.cutSelectedMIDINotes(TRACK_ID, CLIP_ID)], + ["cut range", (s) => s.cutMIDIRange(TRACK_ID, CLIP_ID)], + ["delete range", (s) => s.deleteMIDIRange(TRACK_ID, CLIP_ID)], + ["paste notes", (s) => s.pasteMIDINotes(TRACK_ID, CLIP_ID, 2)], + ["paste range", (s) => s.pasteMIDIRange(TRACK_ID, CLIP_ID, 2)], + ["duplicate notes", (s) => s.duplicateSelectedMIDINotes(TRACK_ID, CLIP_ID)], + ["duplicate range", (s) => s.duplicateMIDIRange(TRACK_ID, CLIP_ID)], + ["repeat selection", (s) => s.repeatMIDISelection(TRACK_ID, CLIP_ID)], + ["quantize", (s) => s.quantizeSelectedMIDINotes(TRACK_ID, CLIP_ID, 0.5)], + ["quantize last", (s) => s.quantizeSelectedMIDINotesUsingLast(TRACK_ID, CLIP_ID)], + ["reset quantize", (s) => s.resetMIDIQuantize(TRACK_ID, CLIP_ID)], + ["freeze quantize", (s) => s.freezeMIDIQuantize(TRACK_ID, CLIP_ID)], + ["humanize", (s) => s.humanizeSelectedMIDINotes(TRACK_ID, CLIP_ID)], + ["set velocity", (s) => s.setSelectedMIDINoteVelocity(TRACK_ID, CLIP_ID, 40)], + ["scale velocity", (s) => s.scaleSelectedMIDINoteVelocity(TRACK_ID, CLIP_ID, 0.5)], + ["randomize velocity", (s) => s.randomizeSelectedMIDINoteVelocity(TRACK_ID, CLIP_ID)], + ["set length", (s) => s.setSelectedMIDINoteLength(TRACK_ID, CLIP_ID, 0.25)], + ["legato", (s) => s.legatoSelectedMIDINotes(TRACK_ID, CLIP_ID)], + ["reverse selection", (s) => s.reverseSelectedMIDINotes(TRACK_ID, CLIP_ID)], + ["invert pitches", (s) => s.invertSelectedMIDINotePitches(TRACK_ID, CLIP_ID)], + ["mirror pitches", (s) => s.mirrorSelectedMIDINotePitches(TRACK_ID, CLIP_ID, 62)], + ["snap pitches", (s) => s.snapSelectedMIDINotesToScale(TRACK_ID, CLIP_ID, 0, "major")], + ["mute notes", (s) => s.toggleSelectedMIDINoteMute(TRACK_ID, CLIP_ID, true)], + ["insert chord", (s) => s.insertMIDIChord(TRACK_ID, CLIP_ID, 2, 60, "major")], + ["crop to notes", (s) => s.cropMIDIClipToSelectedNotes(TRACK_ID, CLIP_ID)], + ["transpose all", (s) => s.transposeMIDINotes(CLIP_ID, 2)], + ["scale all velocity", (s) => s.scaleMIDINoteVelocity(CLIP_ID, 0.5)], + ["reverse all", (s) => s.reverseMIDINotes(CLIP_ID)], + ["invert all", (s) => s.invertMIDINotes(CLIP_ID)], + ["note expression", (s) => s.setNoteExpression(CLIP_ID, firstNoteId, { pressure: 0.5 })], +] as const; + +beforeEach(() => { + commandManager.clear(); +}); + +afterEach(() => { + commandManager.clear(); + useDAWStore.setState(originalState); +}); + +describe.each(["global", "items", "clip", "frozen"] as const)("%s MIDI edit lock", (lock) => { + it.each(mutationCases)("blocks %s without mutation or history", (_name, mutate) => { + seedEditableMidiTarget(lock); + const before = mutationSnapshot(); + + mutate(useDAWStore.getState()); + + expect(mutationSnapshot()).toBe(before); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); +}); diff --git a/frontend/src/__tests__/midiEditorTimelineRange.test.ts b/frontend/src/__tests__/midiEditorTimelineRange.test.ts index 840d158..a439f7b 100644 --- a/frontend/src/__tests__/midiEditorTimelineRange.test.ts +++ b/frontend/src/__tests__/midiEditorTimelineRange.test.ts @@ -1,6 +1,7 @@ import { describe, expect, it } from "vitest"; import pianoRollSource from "../components/PianoRoll.tsx?raw"; import timelineSource from "../components/Timeline.tsx?raw"; +import { getTimelineVisibleContentEnd } from "../utils/contextWheelBehaviors"; import { serializeMIDIClipsForBackend } from "../utils/midiClipSerialization"; describe("MIDI editor timeline range", () => { @@ -20,8 +21,11 @@ describe("MIDI editor timeline range", () => { }); it("counts MIDI clips when sizing the main timeline scroll range", () => { - expect(timelineSource).toContain("track.midiClips.forEach"); - expect(timelineSource).toContain("const clipEnd = clip.startTime + clip.duration"); + expect(timelineSource).toContain("const maxClipEnd = getTimelineVisibleContentEnd("); + expect(getTimelineVisibleContentEnd([{ + clips: [{ startTime: 2, duration: 3 }], + midiClips: [{ startTime: 20, duration: 4 }], + }])).toBe(24); }); it("preserves overlapping MIDI clips as separate scheduled clips", () => { diff --git a/frontend/src/__tests__/midiInputMeter.test.ts b/frontend/src/__tests__/midiInputMeter.test.ts new file mode 100644 index 0000000..77b27aa --- /dev/null +++ b/frontend/src/__tests__/midiInputMeter.test.ts @@ -0,0 +1,90 @@ +import { afterEach, describe, expect, it } from "vitest"; +import audioEngineSource from "../../../Source/AudioEngine.cpp?raw"; +import mainComponentSource from "../../../Source/MainComponent.cpp?raw"; +import trackProcessorSource from "../../../Source/TrackProcessor.cpp?raw"; +import { getStereoMeterChannelLevels } from "../components/PeakMeter"; +import { createDefaultTrack, useDAWStore } from "../store/useDAWStore"; +import { resolveTrackMeterPresentation } from "../utils/trackMeterPresentation"; + +const initialState = useDAWStore.getState(); + +function normalizeSourceText(source: string): string { + return source.replace(/\r\n?/g, "\n"); +} + +afterEach(() => { + useDAWStore.setState(initialState, true); +}); + +describe("raw MIDI input metering", () => { + it("uses MIDI only for armed MIDI-capable tracks with silent audio output", () => { + expect(resolveTrackMeterPresentation(0, 0.8, true, "midi")).toEqual({ + source: "midi_input", + normalizedLevel: 0.8, + }); + expect(resolveTrackMeterPresentation(0, 0.8, true, "instrument").source) + .toBe("midi_input"); + expect(resolveTrackMeterPresentation(0, 0.8, false, "midi").source) + .toBe("idle"); + expect(resolveTrackMeterPresentation(0, 0.8, true, "audio").source) + .toBe("idle"); + }); + + it("gives real post-FX audio output precedence over simultaneous MIDI input", () => { + const result = resolveTrackMeterPresentation(0.2, 1, true, "instrument"); + expect(result).toEqual({ source: "audio", normalizedLevel: 0.2 }); + }); + + it("keeps the two MIDI activity lanes exactly mirrored", () => { + expect(getStereoMeterChannelLevels(0.72, 0.72, "midi_input")).toEqual({ + leftLevel: 0.72, + rightLevel: 0.72, + leftRms: 0.72, + rightRms: 0.72, + }); + const audio = getStereoMeterChannelLevels(0.72, 0.5, "audio"); + expect(audio.leftLevel).not.toBe(audio.rightLevel); + }); + + it("stores MIDI activity separately from audio peaks and clipping", () => { + const track = createDefaultTrack("midi-meter", "MIDI Meter", "#67e8f9", "midi"); + track.armed = true; + useDAWStore.setState({ + tracks: [track], + meterLevels: {}, + midiInputLevels: {}, + peakLevels: {}, + clippingStates: {}, + }); + + useDAWStore.getState().batchUpdateMeterLevels( + { [track.id]: 0 }, + 0, + { [track.id]: false }, + false, + { [track.id]: 0.91 }, + ); + + const state = useDAWStore.getState(); + expect(state.midiInputLevels[track.id]).toBe(0.91); + expect(state.meterLevels[track.id]).toBe(0); + expect(state.peakLevels[track.id]).toBe(0); + expect(state.clippingStates[track.id]).toBe(false); + }); + + it("captures filtered armed input before monitoring and emits it in the batched meter event", () => { + const normalizedAudioEngineSource = normalizeSourceText(audioEngineSource); + const inputRouting = normalizedAudioEngineSource.slice( + normalizedAudioEngineSource.indexOf("// Route MIDI to appropriate tracks"), + ); + expect(inputRouting).toContain("if (track->getRecordArmed())\n track->registerMIDIInputActivity(message);"); + expect(inputRouting.indexOf("track->registerMIDIInputActivity(message)")).toBeLessThan( + inputRouting.indexOf("track->getInputMonitoring()"), + ); + expect(trackProcessorSource).toContain("message.isNoteOn()"); + expect(trackProcessorSource).toContain("message.isController()"); + expect(trackProcessorSource).toContain("Note-off and transport/clock/active-sensing messages"); + expect(mainComponentSource).toContain('"midiInputLevels"'); + expect(mainComponentSource).toContain("audioEngine.getMIDIInputLevels()"); + }); +}); diff --git a/frontend/src/__tests__/mixerWindowSyncSubscription.test.ts b/frontend/src/__tests__/mixerWindowSyncSubscription.test.ts new file mode 100644 index 0000000..e76edf4 --- /dev/null +++ b/frontend/src/__tests__/mixerWindowSyncSubscription.test.ts @@ -0,0 +1,76 @@ +import { afterEach, describe, expect, it, vi } from "vitest"; +import { nativeBridge } from "../services/NativeBridge"; +import { useDAWStore } from "../store/useDAWStore"; +import { startMixerUISync } from "../utils/mixerWindowSync"; + +const originalState = useDAWStore.getState(); +let stopSync: (() => void) | null = null; + +afterEach(() => { + stopSync?.(); + stopSync = null; + vi.restoreAllMocks(); + useDAWStore.setState(originalState); +}); + +describe("mixer window sync subscription", () => { + it("ignores unchanged playhead availability and meter hot paths while publishing durable changes", () => { + const publish = vi.spyOn(nativeBridge, "publishMixerUISnapshot").mockResolvedValue(true); + vi.spyOn(nativeBridge, "subscribe").mockReturnValue(() => {}); + useDAWStore.setState((state) => ({ + keyboardShortcutProfileId: "openstudio", + canUndo: false, + transport: { ...state.transport, currentTime: 1.25 }, + meterLevels: {}, + peakLevels: {}, + clippingStates: {}, + automatedParamValues: {}, + })); + + stopSync = startMixerUISync(); + expect(publish).toHaveBeenCalledTimes(1); + + useDAWStore.setState((state) => ({ + transport: { ...state.transport, currentTime: 1.3 }, + })); + useDAWStore.setState({ + meterLevels: { track: 0.5 }, + peakLevels: { track: 0.75 }, + clippingStates: { track: false }, + automatedParamValues: { track: { volume: -3 } }, + }); + expect(publish).toHaveBeenCalledTimes(1); + + useDAWStore.setState({ keyboardShortcutProfileId: "reaper" }); + expect(publish).toHaveBeenCalledTimes(2); + + // Detached shortcut availability remains live even when the mixer payload + // itself did not otherwise change. + useDAWStore.setState({ canUndo: true }); + expect(publish).toHaveBeenCalledTimes(3); + }); + + it("publishes when hot playhead or razor state changes detached action availability", () => { + const publish = vi.spyOn(nativeBridge, "publishMixerUISnapshot").mockResolvedValue(true); + vi.spyOn(nativeBridge, "subscribe").mockReturnValue(() => {}); + useDAWStore.setState((state) => ({ + canUndo: false, + razorEdits: [], + transport: { ...state.transport, currentTime: 0 }, + })); + + stopSync = startMixerUISync(); + expect(publish).toHaveBeenCalledTimes(1); + + // At a positive playhead position, previous-grid/boundary actions become + // available even though currentTime is intentionally not in the durable + // mixer snapshot dependency list. + useDAWStore.setState((state) => ({ + transport: { ...state.transport, currentTime: 1.25 }, + })); + expect(publish).toHaveBeenCalledTimes(2); + + useDAWStore.setState({ razorEdits: [{ trackId: "missing-track", start: 0, end: 1 }] }); + expect(publish).toHaveBeenCalledTimes(3); + }); +}); diff --git a/frontend/src/__tests__/mouseBehaviorProfiles.test.ts b/frontend/src/__tests__/mouseBehaviorProfiles.test.ts new file mode 100644 index 0000000..7b44e87 --- /dev/null +++ b/frontend/src/__tests__/mouseBehaviorProfiles.test.ts @@ -0,0 +1,609 @@ +import { describe, expect, it } from "vitest"; +import { resolveMouseModifierAction } from "../utils/mouseModifierResolver"; +import { getMouseBehaviorProfile } from "../utils/mouseBehaviorProfiles"; +import type { ShortcutPlatform } from "../utils/platform"; +import type { KeyboardShortcutProfileId } from "../utils/shortcutProfiles"; +import { + resolveWheelGesture, + type WheelEventLike, +} from "../utils/wheelGestureResolver"; + +const DAW_PROFILE_IDS = [ + "pro_tools", + "cubase", + "reaper", + "audacity", + "logic_pro", + "fl_studio", + "ableton_live", + "studio_one", + "bitwig_studio", + "reason", + "cakewalk_sonar", + "garageband", + "digital_performer", + "ardour", + "adobe_audition", + "mixcraft", + "waveform", + "renoise", +] as const satisfies readonly KeyboardShortcutProfileId[]; + +const TEST_PLATFORMS = ["macos", "windows"] as const satisfies readonly ShortcutPlatform[]; + +type ModifierSignature = `${0 | 1}${0 | 1}${0 | 1}${0 | 1}`; + +function rawModifierCombinations(): WheelEventLike[] { + return Array.from({ length: 16 }, (_, bits) => ({ + ctrlKey: Boolean(bits & 1), + metaKey: Boolean(bits & 2), + altKey: Boolean(bits & 4), + shiftKey: Boolean(bits & 8), + deltaY: 120, + })); +} + +function normalizedSignature( + event: WheelEventLike, + platform: ShortcutPlatform, +): ModifierSignature { + const primary = platform === "macos" ? event.metaKey : event.ctrlKey; + const secondary = platform === "macos" ? event.ctrlKey : event.metaKey; + return `${Number(Boolean(primary))}${Number(Boolean(secondary))}${Number(Boolean(event.altKey))}${Number(Boolean(event.shiftKey))}` as ModifierSignature; +} + +type ExpectedRules = Partial>; + +function expectedTimelineRules( + id: typeof DAW_PROFILE_IDS[number], + platform: ShortcutPlatform, +): ExpectedRules { + switch (id) { + case "pro_tools": + return { + "0000": "pro-tools.vertical-scroll", + "0001": "pro-tools.shift-horizontal-scroll", + "0010": "pro-tools.option-horizontal-zoom", + "0011": "pro-tools.option-shift-waveform-zoom", + "1000": "pro-tools.slow-vertical-scroll", + "0100": "pro-tools.fast-vertical-scroll", + }; + case "cubase": + return { + "0000": "cubase.vertical-scroll", + "0001": "cubase.shift-horizontal-scroll", + "1000": "cubase.horizontal-zoom", + "1001": "cubase.vertical-zoom", + }; + case "reaper": + return { + "0000": "reaper.horizontal-zoom", + "1000": "reaper.vertical-zoom", + "0010": "reaper.horizontal-scroll", + "1010": "reaper.vertical-scroll", + }; + case "audacity": + return { + "0000": "audacity.vertical-scroll", + "0001": "audacity.shift-horizontal-scroll", + "1000": "audacity.horizontal-zoom", + }; + case "logic_pro": + return platform === "macos" + ? { "0110": "logic-pro.control-option-horizontal-zoom" } + : { "1010": "logic-pro.control-option-horizontal-zoom" }; + case "fl_studio": + return {}; + case "ableton_live": + return { + "0000": "ableton-live.vertical-scroll", + "0001": "ableton-live.shift-horizontal-scroll", + "1000": "ableton-live.horizontal-zoom", + }; + case "studio_one": + return { + "0000": "studio-one.vertical-scroll", + "0001": "studio-one.shift-horizontal-scroll", + "1000": "studio-one.vertical-zoom", + "1001": "studio-one.horizontal-zoom", + }; + case "bitwig_studio": + return { "1010": "bitwig-studio.control-alt-horizontal-zoom" }; + case "reason": + return { + "0000": "reason.vertical-scroll", + "0001": "reason.shift-horizontal-scroll", + "1000": "reason.horizontal-zoom", + "1001": "reason.vertical-sequencer-zoom", + }; + case "cakewalk_sonar": + return { + "0010": "cakewalk-sonar.alt-horizontal-zoom", + "0011": "cakewalk-sonar.alt-shift-fast-horizontal-zoom", + "1010": "cakewalk-sonar.control-alt-track-height", + }; + case "garageband": + return {}; + case "digital_performer": + return { + "0010": "digital-performer.option-horizontal-zoom", + "0110": "digital-performer.option-control-track-height", + }; + case "ardour": + return { + "0000": "ardour.vertical-scroll", + "0001": "ardour.shift-horizontal-scroll", + "1000": "ardour.horizontal-zoom", + }; + case "adobe_audition": + // Audition's implementable default is limited to the ruler/zoom bar. + return {}; + case "mixcraft": + return { + "0000": "mixcraft.horizontal-zoom", + "1000": "mixcraft.control-horizontal-scroll", + "0001": "mixcraft.shift-vertical-scroll", + }; + case "waveform": + return { + "0000": "waveform.horizontal-zoom", + "1000": "waveform.control-vertical-zoom", + }; + case "renoise": + return {}; + } +} + +describe("DAW mouse behavior profiles", () => { + it("uses source-safe exact pointer mappings for every profile and platform", () => { + const unmodifiedActions = { + clip_drag: "move", + clip_resize: "resize", + timeline_click: "seek", + track_header: "select", + automation_point: "move", + fade_handle: "adjust", + ruler_click: "seek", + } as const; + + for (const platform of TEST_PLATFORMS) { + for (const id of DAW_PROFILE_IDS) { + const profile = getMouseBehaviorProfile(id, platform); + const clipOverrides: ExpectedRules = {}; + if (["pro_tools", "cubase", "logic_pro", "adobe_audition"].includes(id)) { + clipOverrides["0010"] = "copy"; + } else if (id === "studio_one" || id === "mixcraft") { + clipOverrides["0010"] = "copy"; + if (id === "mixcraft") clipOverrides["0011"] = "copy_preserve_time"; + } else if (id === "ableton_live" || id === "reason") { + clipOverrides[platform === "macos" ? "0010" : "1000"] = "copy"; + } else if (id === "reaper") { + clipOverrides["1000"] = "copy"; + } + const automationOverrides: ExpectedRules = {}; + if (id === "pro_tools") { + automationOverrides["0001"] = "constrain_y"; + } else if (id === "cubase") { + automationOverrides["1000"] = "constrain_axis"; + for (const signature of [ + "1100", + "1010", + "1001", + "1110", + "1101", + "1011", + "1111", + ] as const) { + automationOverrides[signature] = "constrain_axis_bypass_snap"; + } + } else if (id === "fl_studio") { + automationOverrides["0001"] = "constrain_x"; + automationOverrides["1000"] = "constrain_y"; + automationOverrides["0010"] = "bypass_snap"; + automationOverrides["0011"] = "constrain_x_bypass_snap"; + automationOverrides["1010"] = "constrain_y_bypass_snap"; + } else if (id === "ableton_live") { + automationOverrides["0001"] = "fine"; + automationOverrides[platform === "macos" ? "1000" : "0010"] = "bypass_snap"; + automationOverrides[platform === "macos" ? "1001" : "0011"] = "fine_bypass_snap"; + } else if (id === "reason") { + automationOverrides["0001"] = "constrain_axis"; + automationOverrides[platform === "macos" ? "0010" : "1000"] = "copy"; + automationOverrides[platform === "macos" ? "0011" : "1001"] = "copy_constrain_axis"; + } else if (id === "adobe_audition") { + automationOverrides["0001"] = "constrain_axis"; + } + + for (const [context, unmodified] of Object.entries(unmodifiedActions) as Array< + [keyof typeof unmodifiedActions, typeof unmodifiedActions[keyof typeof unmodifiedActions]] + >) { + for (const event of rawModifierCombinations()) { + const signature = normalizedSignature(event, platform); + const expected = signature === "0000" + ? unmodified + : context === "clip_drag" + ? clipOverrides[signature] ?? "none" + : context === "automation_point" + ? automationOverrides[signature] ?? "none" + : "none"; + expect(resolveMouseModifierAction( + event, + context, + { platform, profile: profile.modifiers }, + ), `${id}/${platform}/${context}/${signature}`).toBe(expected); + } + } + } + } + }); + + for (const platform of TEST_PLATFORMS) { + for (const id of DAW_PROFILE_IDS) { + it(`matches only documented ${id} timeline modifiers on ${platform}`, () => { + const profile = getMouseBehaviorProfile(id, platform); + const expected = expectedTimelineRules(id, platform); + + for (const event of rawModifierCombinations()) { + const signature = normalizedSignature(event, platform); + const gesture = resolveWheelGesture( + event, + { + surface: "timeline", + subtarget: "content", + platform, + deviceHint: "mouse", + hoveredTargetId: "track-1", + }, + profile.wheel, + ); + const expectedRuleId = expected[signature] ?? null; + expect(gesture.ruleId, `${id}/${platform}/${signature}`).toBe(expectedRuleId); + expect(gesture.matched, `${id}/${platform}/${signature}`).toBe(expectedRuleId !== null); + } + }); + } + } + + it("uses exact four-flag predicates for every source-DAW timeline rule", () => { + for (const platform of TEST_PLATFORMS) { + for (const id of DAW_PROFILE_IDS) { + const timelineRules = getMouseBehaviorProfile(id, platform).wheel.rules + .filter((rule) => rule.surface === "timeline"); + for (const rule of timelineRules) { + expect(rule.modifiers, `${id}/${platform}/${rule.id}`).toEqual({ + primary: expect.any(Boolean), + secondary: expect.any(Boolean), + alt: expect.any(Boolean), + shift: expect.any(Boolean), + }); + } + } + } + }); + + it("does not silently inherit OpenStudio editor/TCP wheel mutations in vendor profiles", () => { + const openStudioOnlySurfaces = new Set(["tcp", "piano_roll", "pitch_editor", "parameter"]); + for (const platform of TEST_PLATFORMS) { + for (const id of DAW_PROFILE_IDS) { + const rules = getMouseBehaviorProfile(id, platform).wheel.rules; + expect(rules.some((rule) => ( + openStudioOnlySurfaces.has(rule.surface) + && /^(tcp|piano-roll|pitch-editor|parameter)\./.test(rule.id) + )), `${id}/${platform}`).toBe(false); + expect(rules.some((rule) => rule.id === `${id}.parameter-safety-fallback`)).toBe(true); + expect(rules.some((rule) => rule.id === "browser.suppress-browser-zoom")).toBe(true); + } + } + }); + + it.each(TEST_PLATFORMS)("suppresses unsourced parameter wheel changes on %s", (platform) => { + for (const id of ["logic_pro", "garageband", "digital_performer", "waveform", "renoise"] as const) { + expect(resolveWheelGesture( + { deltaY: 120 }, + { surface: "parameter", subtarget: "control", platform }, + getMouseBehaviorProfile(id, platform).wheel, + )).toMatchObject({ + ruleId: `${id}.parameter-safety-fallback`, + operation: "suppress", + preventDefault: true, + stopPropagation: true, + }); + } + }); + + it("implements Pro Tools zoom and relative scroll-speed semantics", () => { + const profile = getMouseBehaviorProfile("pro_tools", "macos"); + const resolve = (event: WheelEventLike) => resolveWheelGesture( + { ...event, deltaY: 120 }, + { + surface: "timeline", + subtarget: "track", + platform: "macos", + hoveredTargetId: "track-1", + }, + profile.wheel, + ); + + const plain = resolve({}); + const slow = resolve({ metaKey: true }); + const fast = resolve({ ctrlKey: true }); + const optionZoom = resolve({ altKey: true }); + const waveformZoom = resolve({ altKey: true, shiftKey: true }); + + expect(slow.amount).toBeLessThan(plain.amount); + expect(fast.amount).toBeGreaterThan(plain.amount); + expect(optionZoom).toMatchObject({ operation: "zoom", target: "timeline" }); + expect(waveformZoom).toMatchObject({ + operation: "zoom", + target: "waveform-amplitude", + }); + expect(resolveWheelGesture( + { deltaY: 120, altKey: true, shiftKey: true }, + { surface: "timeline", subtarget: "ruler", platform: "macos" }, + profile.wheel, + ).matched).toBe(false); + expect(resolve({ ctrlKey: true, altKey: true }).matched).toBe(false); + }); + + it("limits FL Studio Playlist wheel commands to exact track and clip hit targets", () => { + for (const platform of TEST_PLATFORMS) { + const profile = getMouseBehaviorProfile("fl_studio", platform); + for (const event of rawModifierCombinations()) { + expect(resolveWheelGesture( + event, + { surface: "timeline", subtarget: "content", platform, deviceHint: "mouse" }, + profile.wheel, + ).matched).toBe(false); + } + expect(resolveWheelGesture( + { deltaY: -120, shiftKey: true }, + { surface: "timeline", subtarget: "track", platform, deviceHint: "mouse" }, + profile.wheel, + )).toMatchObject({ + ruleId: "fl-studio.playlist-track-reorder", + operation: "reorder", + target: "track-order", + }); + expect(resolveWheelGesture( + { deltaY: 120, altKey: true, shiftKey: true }, + { surface: "timeline", subtarget: "clip", platform, deviceHint: "mouse" }, + profile.wheel, + )).toMatchObject({ + ruleId: "fl-studio.clip-nudge", + operation: "nudge", + target: "clip-position", + }); + } + }); + + it.each(TEST_PLATFORMS)("resolves exact MIDI editor wheel targets on %s", (platform) => { + const proTools = getMouseBehaviorProfile("pro_tools", platform); + const proToolsEvent = platform === "macos" + ? { deltaY: -120, ctrlKey: true, altKey: true } + : { deltaY: -120, metaKey: true, altKey: true }; + expect(resolveWheelGesture( + proToolsEvent, + { surface: "piano_roll", subtarget: "note", platform }, + proTools.wheel, + )).toMatchObject({ + ruleId: "pro-tools.midi-note-height", + operation: "zoom", + target: "midi-note-height", + }); + + const flStudio = getMouseBehaviorProfile("fl_studio", platform); + expect(resolveWheelGesture( + { deltaY: -120, altKey: true }, + { surface: "piano_roll", subtarget: "note", platform }, + flStudio.wheel, + )).toMatchObject({ + ruleId: "fl-studio.piano-note-property", + operation: "adjust", + target: "note-property", + }); + expect(resolveWheelGesture( + { deltaY: 120, altKey: true, shiftKey: true }, + { surface: "piano_roll", subtarget: "note", platform }, + flStudio.wheel, + )).toMatchObject({ + ruleId: "fl-studio.piano-note-nudge", + operation: "nudge", + target: "note-position", + }); + + const ableton = getMouseBehaviorProfile("ableton_live", platform); + for (const subtarget of ["grid", "keyboard", "note"] as const) { + expect(resolveWheelGesture( + { deltaY: -120, altKey: true }, + { surface: "piano_roll", subtarget, platform }, + ableton.wheel, + )).toMatchObject({ + ruleId: "ableton-live.midi-note-height", + operation: "zoom", + target: "midi-note-height", + }); + } + }); + + it.each(TEST_PLATFORMS)("resolves Audacity vertical-scale targets on %s", (platform) => { + const profile = getMouseBehaviorProfile("audacity", platform); + const cases = [ + { + event: { deltaY: 120, shiftKey: true }, + subtarget: "waveform_scale" as const, + ruleId: "audacity.waveform-scale-pan", + operation: "pan", + target: "waveform-scale", + }, + { + event: platform === "macos" ? { deltaY: -120, metaKey: true } : { deltaY: -120, ctrlKey: true }, + subtarget: "waveform_scale" as const, + ruleId: "audacity.waveform-scale-zoom", + operation: "zoom", + target: "waveform-scale", + }, + { + event: platform === "macos" ? { deltaY: -120, metaKey: true } : { deltaY: -120, ctrlKey: true }, + subtarget: "spectrogram_scale" as const, + ruleId: "audacity.spectrogram-scale-zoom", + operation: "zoom", + target: "spectrogram-scale", + }, + { + event: { deltaY: 120, shiftKey: true }, + subtarget: "spectrogram_scale" as const, + ruleId: "audacity.spectrogram-scale-pan", + operation: "pan", + target: "spectrogram-scale", + }, + { + event: platform === "macos" + ? { deltaY: 120, metaKey: true, shiftKey: true } + : { deltaY: 120, ctrlKey: true, shiftKey: true }, + subtarget: "spectrogram_scale" as const, + ruleId: "audacity.spectrogram-lower-db-limit", + operation: "adjust", + target: "spectrogram-db-floor", + }, + ]; + for (const entry of cases) { + expect(resolveWheelGesture( + entry.event, + { surface: "timeline", subtarget: entry.subtarget, platform, hoveredTargetId: "track-1" }, + profile.wheel, + )).toMatchObject({ + ruleId: entry.ruleId, + operation: entry.operation, + target: entry.target, + preventDefault: true, + }); + } + }); + + it.each(TEST_PLATFORMS)("keeps Ableton automation-lane height and Cubase hit targets distinct on %s", (platform) => { + const ableton = getMouseBehaviorProfile("ableton_live", platform); + expect(resolveWheelGesture( + { deltaY: -120, altKey: true }, + { surface: "timeline", subtarget: "automation_lane", platform, hoveredTargetId: "track-1" }, + ableton.wheel, + )).toMatchObject({ + ruleId: "ableton-live.automation-lane-height", + operation: "resize", + target: "lane-height", + }); + expect(ableton.wheel.rules.some((rule) => rule.id.includes("take-lane"))).toBe(false); + expect(getMouseBehaviorProfile("ardour", platform).wheel.rules.some( + (rule) => rule.id.includes("hovered-track-height"), + )).toBe(false); + + const cubase = getMouseBehaviorProfile("cubase", platform); + expect(resolveWheelGesture( + { deltaY: -120 }, + { surface: "timeline", subtarget: "fade_handle", platform, hoveredTargetId: "clip-1:in" }, + cubase.wheel, + )).toMatchObject({ ruleId: "cubase.fade-handle-adjust", target: "fade-value" }); + expect(resolveWheelGesture( + { deltaY: 120 }, + { surface: "timeline", subtarget: "event_volume", platform, hoveredTargetId: "clip-1" }, + cubase.wheel, + )).toMatchObject({ ruleId: "cubase.event-volume-adjust", target: "event-volume" }); + }); + + it.each(TEST_PLATFORMS)("models Cakewalk console-fader scope safeguards on %s", (platform) => { + const profile = getMouseBehaviorProfile("cakewalk_sonar", platform); + const primaryEvent = platform === "macos" + ? { deltaY: 120, metaKey: true } + : { deltaY: 120, ctrlKey: true }; + const cases = [ + { event: { deltaY: 120 }, ruleId: "cakewalk-sonar.console-fader", operation: "adjust", precision: "normal" }, + { event: { deltaY: 120, shiftKey: true }, ruleId: "cakewalk-sonar.console-fader-fine", operation: "adjust", precision: "fine" }, + { event: primaryEvent, ruleId: "cakewalk-sonar.console-all-faders", operation: "suppress", precision: "normal" }, + { + event: { ...primaryEvent, shiftKey: true }, + ruleId: "cakewalk-sonar.console-selected-faders", + operation: "suppress", + precision: "normal", + }, + ]; + for (const entry of cases) { + const { event, ...expected } = entry; + expect(resolveWheelGesture( + event, + { surface: "parameter", subtarget: "console_fader", platform }, + profile.wheel, + )).toMatchObject(expected); + } + }); + + it.each(TEST_PLATFORMS)("limits Adobe Audition wheel zoom to the ruler on %s", (platform) => { + const profile = getMouseBehaviorProfile("adobe_audition", platform); + expect(resolveWheelGesture( + { deltaY: -120 }, + { surface: "timeline", subtarget: "ruler", platform }, + profile.wheel, + )).toMatchObject({ + ruleId: "adobe-audition.ruler-horizontal-zoom", + operation: "zoom", + target: "timeline", + }); + expect(resolveWheelGesture( + { deltaY: -120 }, + { surface: "timeline", subtarget: "content", platform }, + profile.wheel, + ).matched).toBe(false); + }); + + it.each(TEST_PLATFORMS)("uses Ardour's exact normal and physical-Control fine parameter wheel on %s", (platform) => { + const profile = getMouseBehaviorProfile("ardour", platform); + const fineEvent = platform === "macos" + ? { deltaY: 120, ctrlKey: true } + : { deltaY: 120, ctrlKey: true }; + expect(resolveWheelGesture( + { deltaY: 120 }, + { surface: "parameter", subtarget: "control", platform }, + profile.wheel, + )).toMatchObject({ ruleId: "ardour.parameter-adjust", precision: "normal" }); + expect(resolveWheelGesture( + fineEvent, + { surface: "parameter", subtarget: "control", platform }, + profile.wheel, + )).toMatchObject({ ruleId: "ardour.parameter-fine-adjust", precision: "fine" }); + if (platform === "macos") { + expect(resolveWheelGesture( + { deltaY: 120, metaKey: true }, + { surface: "parameter", subtarget: "control", platform }, + profile.wheel, + )).toMatchObject({ ruleId: "ardour.parameter-unsupported-wheel", operation: "suppress" }); + } + }); + + it("distinguishes macOS physical Control from Command and Windows Meta", () => { + const logicMac = getMouseBehaviorProfile("logic_pro", "macos"); + expect(resolveWheelGesture( + { ctrlKey: true, altKey: true, deltaY: 120 }, + { surface: "timeline", platform: "macos" }, + logicMac.wheel, + ).ruleId).toBe("logic-pro.control-option-horizontal-zoom"); + expect(resolveWheelGesture( + { metaKey: true, altKey: true, deltaY: 120 }, + { surface: "timeline", platform: "macos" }, + logicMac.wheel, + ).matched).toBe(false); + + const bitwigWindows = getMouseBehaviorProfile("bitwig_studio", "windows"); + expect(resolveWheelGesture( + { ctrlKey: true, altKey: true, deltaY: 120 }, + { surface: "timeline", platform: "windows" }, + bitwigWindows.wheel, + ).ruleId).toBe("bitwig-studio.control-alt-horizontal-zoom"); + expect(resolveWheelGesture( + { metaKey: true, altKey: true, deltaY: 120 }, + { surface: "timeline", platform: "windows" }, + bitwigWindows.wheel, + ).matched).toBe(false); + }); + + it("falls back safely to OpenStudio for unknown persisted IDs", () => { + expect(getMouseBehaviorProfile("deleted", "windows").id).toBe("openstudio"); + }); +}); diff --git a/frontend/src/__tests__/mouseModifierIntegration.test.ts b/frontend/src/__tests__/mouseModifierIntegration.test.ts new file mode 100644 index 0000000..1b477e6 --- /dev/null +++ b/frontend/src/__tests__/mouseModifierIntegration.test.ts @@ -0,0 +1,352 @@ +import { describe, expect, it } from "vitest"; +import timelineSource from "../components/Timeline.tsx?raw"; +import pianoRollSource from "../components/PianoRoll.tsx?raw"; +import sortableTrackHeaderSource from "../components/SortableTrackHeader.tsx?raw"; +import preferencesSource from "../components/PreferencesModal.tsx?raw"; +import clipEditingSource from "../store/actions/clipEditing.ts?raw"; + +describe("live mouse-modifier integration", () => { + it("layers active behavior profiles and sparse user overrides at event time", () => { + expect(timelineSource).toContain("const state = useDAWStore.getState();"); + expect(timelineSource).toContain("state.mouseBehaviorProfileId"); + expect(timelineSource).toContain("profile: behaviorProfile.modifiers"); + expect(timelineSource).toContain("overrides: state.mouseModifiers as MouseModifierOverrideMap"); + expect(timelineSource).toContain("platform: toMouseBehaviorPlatform(platform)"); + + expect(sortableTrackHeaderSource).toContain("state.mouseBehaviorProfileId"); + expect(sortableTrackHeaderSource).toContain("profile: behaviorProfile.modifiers"); + expect(sortableTrackHeaderSource).toContain("overrides: state.mouseModifiers as MouseModifierOverrideMap"); + }); + + it("passes the active mouse profile to wheel resolution", () => { + expect(timelineSource).toContain("const behaviorProfile = getMouseBehaviorProfile("); + expect(timelineSource).toContain("}, behaviorProfile.wheel);"); + }); + + it.each([ + "clip_drag", + "clip_resize", + "timeline_click", + "track_header", + "automation_point", + "fade_handle", + "ruler_click", + ])("resolves the %s Preferences context in its real interaction surface", (context) => { + const combinedSource = `${timelineSource}\n${sortableTrackHeaderSource}`; + expect(combinedSource).toContain(`"${context}"`); + }); +}); + +describe("timeline modifier semantics", () => { + it("captures clip drag intent once and routes move variants truthfully", () => { + expect(timelineSource).toContain("isTimelineClipCopyAction(modifierAction)"); + expect(timelineSource).toContain('modifierAction === "constrain"'); + expect(timelineSource).toContain('modifierAction === "bypass_snap"'); + expect(timelineSource).toContain("copyOnDrag,"); + expect(timelineSource).toContain("axisLockRequested:"); + expect(timelineSource).toContain("snapBypassRequested:"); + expect(timelineSource).toContain("Boolean(gesture.snapBypassRequested)"); + expect(timelineSource).toContain("previewTimelineGestureFromPointer(point.x, point.y, event)"); + }); + + it("routes normal, fine, and symmetric resize through the tested geometry helper", () => { + expect(timelineSource).toContain("computeMouseModifierTimelineResize({"); + expect(timelineSource).toContain('gesture.resizeAction === "fine"'); + expect(timelineSource).toContain('gesture.resizeAction === "symmetric"'); + expect(timelineSource).toContain("commitPreviewedResizeTimelineClip("); + }); + + it("implements background seek, range selection, extension, zoom, and razor by semantic action", () => { + for (const action of ["seek", "select_range", "extend_selection", "zoom", "razor"]) { + expect(timelineSource).toContain(`action === "${action}"`); + } + expect(timelineSource).toContain("timelinePointerActionRef.current = { action, startTime: time, dragged: false }"); + expect(timelineSource).toContain("setTimeSelectionDrag({ active: true, startTime: anchor })"); + expect(timelineSource).toContain("seekTo(Math.max(0, (pointerPos.x + scrollX) / pixelsPerSecond))"); + }); + + it("starts audio and MIDI slip edits from the semantic profile action", () => { + expect(timelineSource.match(/modifierAction === "slip"/g)).toHaveLength(2); + expect(timelineSource.match(/slipEditRef\.current = \{/g)).toHaveLength(2); + expect(timelineSource).toContain("originalIsModified: state.isModified"); + expect(timelineSource).toContain("isModified: originalIsModified ?? state.isModified"); + expect(timelineSource).toContain("isTimelineClipGestureLocked(useDAWStore.getState(), [edit.clipId])"); + expect(timelineSource).toContain("cancelActiveTimelineClipGesture()"); + expect(timelineSource).toContain("finalizeSlipTimelineGesture()"); + expect(timelineSource).toContain("slipEditClip(edit.clipId, finalOffset)"); + }); + + it("keeps marquee selection and gain-point creation reachable through semantic actions", () => { + expect(timelineSource).toContain('} else if (action === "seek") {'); + expect(timelineSource).toContain("marqueeRef.current = {"); + expect(timelineSource).toContain('if (action === "constrain" && !clipEditLocked) {'); + expect(timelineSource).toContain("addClipGainPoint(clip.id, timeInClip, gain)"); + }); + + it("hit-tests, starts, updates, and clears profile-driven razor selections", () => { + expect(timelineSource).toContain("const trackHitResult = getTrackAtY("); + expect(timelineSource).toContain("setRazorDrag({"); + expect(timelineSource).toContain("clearRazorEdits();"); + expect(timelineSource).toContain("addRazorEdit(razorDrag.trackId, start, end)"); + expect(timelineSource).toContain("setRazorDrag(null)"); + }); + + it("terminates range and slip gestures outside the Stage and on cancellation", () => { + expect(timelineSource).toContain("const resetRangeGestures = () => {"); + expect(timelineSource).toContain("finalizeSlipTimelineGestureRef.current();"); + expect(timelineSource).toContain("const releasedInsideTimeline = event.target instanceof Node"); + const pointerCancel = timelineSource.slice( + timelineSource.indexOf("const handlePointerCancel = () =>"), + timelineSource.indexOf('window.addEventListener("pointercancel"'), + ); + expect(pointerCancel).toContain("resetRangeGestures();"); + expect(pointerCancel).toContain("timelinePointerActionRef.current = null;"); + }); + + it("allows automation drawing only through the resolved plain timeline action", () => { + const stageMouseDown = timelineSource.slice( + timelineSource.indexOf("const resolvedTimelineAction ="), + timelineSource.indexOf("const time = Math.max", timelineSource.indexOf("const resolvedTimelineAction =")), + ); + expect(stageMouseDown).toContain('resolveLiveMouseModifierAction(e.evt || {}, "timeline_click")'); + expect(stageMouseDown).toContain('resolvedTimelineAction === "seek"'); + expect(stageMouseDown).not.toContain("!e.evt?.shiftKey"); + expect(stageMouseDown).not.toContain("!e.evt?.ctrlKey"); + }); + + it("captures automation action and uses stable-ID track point transactions", () => { + expect(timelineSource).toContain('action === "delete"'); + expect(timelineSource).toContain("resolveAutomationPointDrag(gesture, {"); + expect(timelineSource).toContain("snapEnabled: snapEnabledRef.current"); + expect(timelineSource).toContain("snapTime: snapTimelineTime"); + expect(timelineSource).toContain("gesture.axisLock = preview.axisLock"); + expect(timelineSource).toContain("e.target.position({ x: preview.x, y: preview.y })"); + expect(timelineSource).toContain("getAutomationPointId(point, pi)"); + expect(timelineSource).toContain("setSelectedAutomationPoint(pointTarget)"); + expect(timelineSource).toContain("deleteSelectedAutomationPoint()"); + expect(timelineSource).toContain("beginAutomationPointEdit(pointTarget)"); + expect(timelineSource).toContain("beginAutomationPointCopyEdit(pointTarget)"); + expect(timelineSource).toContain("previewAutomationPointEdit("); + expect(timelineSource).toContain("commitAutomationPointEdit()"); + expect(timelineSource).toContain("automationPointGestureRef.current = {"); + expect(timelineSource).toContain("gesture?.key ==="); + }); + + it("restores an automation drag on every non-commit termination path", () => { + expect(timelineSource).toContain("const cancelActiveAutomationEdit = useCallback(() => {"); + expect(timelineSource).toContain("state.cancelAutomationPointEdit();"); + expect(timelineSource).toContain('window.addEventListener("blur", handleWindowBlur)'); + expect(timelineSource).toContain('window.addEventListener("pointercancel", handlePointerCancel)'); + expect(timelineSource).toContain('window.addEventListener("keydown", handleWindowKeyDown)'); + expect(timelineSource).toContain('event.key !== "Escape"'); + const cleanup = timelineSource.slice( + timelineSource.indexOf("return () => {", timelineSource.indexOf("const handlePointerCancel")), + timelineSource.indexOf("// Time selection drag state"), + ); + expect(cleanup).toContain("cancelActiveAutomationEdit();"); + }); + + it("implements one-transaction fade pointer lifecycle, modifiers, and shape cycling", () => { + expect(timelineSource).toContain("beginFadeHandleGesture"); + expect(timelineSource).toContain('gesture.action === "fine"'); + expect(timelineSource).toContain('gesture.action === "symmetric" ? fadeLength'); + expect(timelineSource).toContain("fadeHandleGestureRef.current = {"); + expect(timelineSource).toContain('fadeAction === "shape_cycle"'); + expect(timelineSource).toContain("cycleTimelineClipFadeShape(clip.id, side)"); + expect(timelineSource).toContain("setClipFadeInShape("); + expect(timelineSource).toContain("setClipFadeOutShape("); + expect(timelineSource).toContain("beginClipFadeEdit(clip.id)"); + expect(timelineSource).toContain("previewClipFades("); + expect(timelineSource).toContain("commitClipFadeEdit(clip.id)"); + expect(timelineSource).toContain("cancelActiveTimelineClipGesture"); + expect(timelineSource).toContain("cancelClipFadeEdit(fadeClipId)"); + expect(timelineSource).toContain("const activeFadeHandle = fadeHandleGestureRef.current"); + expect(timelineSource).toContain("commitClipFadeEdit(activeFadeHandle.clipId)"); + expect(timelineSource).toContain('window.addEventListener("blur", handleWindowBlur)'); + expect(timelineSource).toContain('window.addEventListener("pointercancel", handlePointerCancel)'); + expect(timelineSource).toContain("cancelActiveAutomationEdit();"); + expect(timelineSource).toContain('event.key !== "Escape"'); + expect(timelineSource).toContain("cancelActiveTimelineClipGesture();"); + expect(timelineSource).not.toContain("setClipFades("); + }); + + it("keeps ruler intent stable in global listeners", () => { + expect(timelineSource).toContain('action === "loop_set"'); + expect(timelineSource).toContain('action === "time_select"'); + expect(timelineSource).toContain('action === "zoom_to"'); + expect(timelineSource).toContain('drag.type = "loop-create"'); + expect(timelineSource).toContain('drag.type = "time-select"'); + expect(timelineSource).toContain('drag.type = "zoom-create"'); + expect(timelineSource).toContain('window.addEventListener("mousemove", handleGlobalMouseMove)'); + }); +}); + +describe("track-header modifier semantics", () => { + it("maps selection and undo-aware mute/solo operations without raw modifier branches", () => { + expect(sortableTrackHeaderSource).toContain('action === "select"'); + expect(sortableTrackHeaderSource).toContain('action === "toggle_select"'); + expect(sortableTrackHeaderSource).toContain('action === "range_select"'); + expect(sortableTrackHeaderSource).toContain('action === "solo"'); + expect(sortableTrackHeaderSource).toContain('action === "mute"'); + expect(sortableTrackHeaderSource).toContain("selectTrack(track.id, { ctrl: true })"); + expect(sortableTrackHeaderSource).toContain("selectTrack(track.id, { shift: true })"); + expect(sortableTrackHeaderSource).toContain("void toggleTrackSolo(track.id)"); + expect(sortableTrackHeaderSource).toContain("void toggleTrackMute(track.id)"); + }); + + it("does not apply header actions to embedded controls", () => { + expect(sortableTrackHeaderSource).toContain( + '"button, input, select, [data-color-bar], [data-no-select]"', + ); + }); +}); + +describe("intentional undo-safety guards", () => { + it("previews stretch, restores the preview, and commits through the undo-safe action", () => { + expect(timelineSource).toContain('gesture.resizeAction === "stretch"'); + expect(timelineSource).toContain("previewResizeTimelineClip(gesture.clipId, isMidi, {"); + expect(timelineSource).toContain("const stretched = await useDAWStore.getState().stretchClip("); + expect(timelineSource).toContain("restoreTimelineGestureUndo();"); + expect(timelineSource).toContain("getSafeMouseModifierNoop(context, action)"); + expect(preferencesSource).toContain("getSafeMouseModifierNoop(key, action)"); + }); + + it("reverts an in-progress stretch on Escape, blur, and pointer cancellation", () => { + expect(timelineSource).toContain('event.key !== "Escape"'); + expect(timelineSource).toContain('window.addEventListener("blur", handleWindowBlur)'); + expect(timelineSource).toContain('window.addEventListener("pointercancel", handlePointerCancel)'); + expect(timelineSource).toContain("if (hadTimelineDrag && !activeGesture.isFadeDrag)"); + expect(timelineSource).toContain("restoreTimelineGestureUndo();"); + }); + + it("supports master automation gestures and commits movement only on drag end", () => { + expect(timelineSource).toContain('const key = `master:${lane.id}:${pointId}`'); + expect(timelineSource).toContain("setSelectedAutomationPoint(pointTarget)"); + expect(timelineSource).toContain("deleteSelectedAutomationPoint()"); + expect(timelineSource).toContain("beginAutomationPointEdit(pointTarget)"); + expect(timelineSource).toContain("previewAutomationPointEdit("); + expect(timelineSource).toContain("commitAutomationPointEdit()"); + expect(timelineSource).toContain("resolveAutomationPointDrag(gesture, {"); + + const masterSection = timelineSource.slice( + timelineSource.indexOf("const renderMasterAutomationLanes"), + timelineSource.indexOf("// Render razor edits"), + ); + const dragMoveSection = masterSection.slice( + masterSection.indexOf("onDragMove="), + masterSection.indexOf("onDragEnd="), + ); + expect(dragMoveSection).not.toContain("commitAutomationPointEdit()"); + }); +}); + +describe("context-specific profile wheel integration", () => { + it("hit-tests FL Studio and Cubase timeline targets before resolving the profile", () => { + expect(timelineSource).toContain("findTimelineClipHit(timelineClipHitMapRef.current, stageX, mouseY)"); + expect(timelineSource).toContain('contextualSubtarget = "fade_handle"'); + expect(timelineSource).toContain('contextualSubtarget = "event_volume"'); + expect(timelineSource).toContain('gesture.target === "track-order"'); + expect(timelineSource).toContain('gesture.target === "clip-position"'); + expect(timelineSource).toContain("state.beginTrackReorderEdit(target.trackId)"); + expect(timelineSource).toContain("state.commitTrackReorderEdit(target.trackId)"); + expect(timelineSource).toContain("previewTrackReorder(trackId, direction)"); + expect(timelineSource).toContain("state.beginClipNudgeEdit(target.clipId)"); + expect(timelineSource).toContain("state.commitClipNudgeEdit(target.clipId)"); + expect(timelineSource).toContain("state.previewClipNudge("); + expect(timelineSource).toContain("state.beginClipFadeEdit(target.clipId)"); + expect(timelineSource).toContain("state.previewClipFades(clipHit.clipId"); + expect(timelineSource).toContain("state.commitClipFadeEdit(target.clipId)"); + expect(timelineSource).toContain("state.beginClipVolumeEdit(target.clipId)"); + expect(timelineSource).toContain("state.commitClipVolumeEdit(target.clipId)"); + expect(timelineSource).toContain("timelineContextWheelEditControllerRef.current?.touch({"); + expect(timelineSource).toContain("createTimelineContextWheelAccumulator(100)"); + expect(timelineSource).toContain("createTimelineContextWheelAccumulator(1)"); + const wheelSection = timelineSource.slice( + timelineSource.indexOf("const handleWheel = (e: WheelEvent) =>"), + timelineSource.indexOf('container.addEventListener("wheel", handleWheel'), + ); + expect(wheelSection).toContain("getAccumulatedWheelNudgeDirection("); + expect(wheelSection).toContain("getAccumulatedWheelStepCount("); + expect(wheelSection).toContain("`track-reorder:${trackId}`"); + expect(wheelSection).toContain("`clip-nudge:${clipHit.clipId}`"); + expect(wheelSection).toContain("`clip-fade:${clipHit.clipId}:${side}`"); + expect(wheelSection).toContain("`clip-volume:${clipHit.clipId}`"); + expect(wheelSection).toContain("timelineDiscreteWheelAccumulatorRef.current?.reset()"); + expect(wheelSection).toContain("timelineSmoothWheelAccumulatorRef.current?.reset()"); + expect(wheelSection).not.toContain("getWheelNudgeDirection("); + expect(wheelSection).not.toContain("getWheelStepCount("); + expect(wheelSection).not.toContain("reorderTrack("); + expect(wheelSection).not.toContain("nudgeClips("); + }); + + it("implements Audacity waveform and spectrogram scale ownership at an explicit scale strip", () => { + expect(timelineSource).toContain("TIMELINE_VERTICAL_SCALE_WIDTH"); + expect(timelineSource).toContain("getTimelineVerticalScaleSubtarget({"); + expect(timelineSource).toContain('gesture.target === "spectrogram-db-floor"'); + expect(timelineSource).toContain("waveformScaleView.spectrogramDbFloor"); + expect(timelineSource).toContain("verticalOffset: waveformScaleView.verticalOffset"); + expect(timelineSource).toContain("spectrogramScale"); + expect(timelineSource).toContain("computeSpectrogramBandGeometry({"); + expect(timelineSource).toContain("height={geometry.height}"); + }); + + it("uses the shared audio/MIDI/recording extent for horizontal Timeline scrolling", () => { + const wheelSection = timelineSource.slice( + timelineSource.indexOf("const handleWheel = (e: WheelEvent) =>"), + timelineSource.indexOf('container.addEventListener("wheel", handleWheel'), + ); + expect(wheelSection).toContain("getTimelineHorizontalScrollMax("); + expect(wheelSection).toContain("state.recordingClips.length > 0"); + expect(timelineSource).toContain("const maxClipEnd = getTimelineVisibleContentEnd("); + }); + + it("resizes the exact Ableton automation lane and renders its stored height", () => { + expect(timelineSource).toContain('gesture.target === "lane-height"'); + expect(timelineSource).toContain("const hitLane = visibleLanes[trackHit.laneIndex]"); + expect(timelineSource).toContain("computeWheelResizedSize({"); + expect(timelineSource).toContain("createWheelEditBurstController({"); + expect(timelineSource).toContain("beginAutomationLaneHeightEdit("); + expect(timelineSource).toContain("setAutomationLaneHeight("); + expect(timelineSource).toContain("commitAutomationLaneHeightEdit("); + expect(timelineSource).toContain("timelineContextWheelEditControllerRef.current?.dispose()"); + expect(timelineSource).toContain("const laneH = getAutomationLaneHeight(lane)"); + expect(timelineSource).toContain("getAutomationLaneOffset(visibleLanes, laneIdx)"); + }); + + it("hit-tests Piano Roll notes and routes zoom, nudge, and property edits through undo-aware actions", () => { + expect(pianoRollSource).toContain("const wheelHit = isInsideStage"); + expect(pianoRollSource).toContain("hitTestPianoRoll(stageX, stageY, {"); + expect(pianoRollSource).toContain('gesture.target === "midi-note-height"'); + expect(pianoRollSource).toContain("computeAnchoredVerticalWheelZoom({"); + expect(pianoRollSource).toContain('closest(".piano-roll-key-viewport")'); + expect(pianoRollSource).toContain("getMidiNoteHeightZoomPointerOffset({"); + expect(pianoRollSource).toContain('gesture.target === "note-position"'); + expect(pianoRollSource).toContain('gesture.target === "note-property"'); + expect(pianoRollSource).toContain("commitMIDIClipEvents("); + expect(pianoRollSource).toContain("contextWheelEditControllerRef.current?.dispose()"); + expect(pianoRollSource).toContain("createPianoRollContextWheelAccumulator()"); + const wheelSection = pianoRollSource.slice( + pianoRollSource.indexOf("const handleWheel = (event: WheelEvent) =>"), + pianoRollSource.indexOf('container.addEventListener("wheel", handleWheel'), + ); + expect(wheelSection).toContain("getAccumulatedWheelNudgeDirection("); + expect(wheelSection).toContain("getAccumulatedWheelStepCount("); + expect(wheelSection).toContain("`note-nudge:${sessionKey}:${trackId}:${clipId}:${initialNoteId}`"); + expect(wheelSection).toContain("`note-property:${sessionKey}:${trackId}:${clipId}:${initialNoteId}:${propertyKey}`"); + expect(wheelSection).toContain("contextWheelAccumulatorRef.current?.reset()"); + expect(wheelSection).not.toContain("getWheelNudgeDirection("); + expect(wheelSection).not.toContain("getWheelStepCount("); + expect(wheelSection).toContain("rebuildMIDIEventsForNotes("); + expect(wheelSection).toContain("previewMIDIClipEvents(trackId, clipId"); + expect(wheelSection).toContain("contextWheelEditControllerRef.current?.touch(target)"); + expect(wheelSection).not.toContain("moveMIDINotes("); + expect(wheelSection).not.toContain("commitMIDIClipEvents("); + }); + + it("moves MIDI and audio clips together while skipping locked/no-op nudges", () => { + expect(clipEditingSource).toContain("let touchedMIDI = false"); + expect(clipEditingSource).toContain("selectedState.selectedClipIds.includes(clip.id) && !isClipEditLocked(selectedState, clip)"); + expect(clipEditingSource).toContain("if (touchedMIDI) syncMIDITracksForTimelineClips(get, get().tracks)"); + expect(clipEditingSource).toContain("clipPositions.size === 0"); + }); +}); diff --git a/frontend/src/__tests__/mouseModifierResolver.test.ts b/frontend/src/__tests__/mouseModifierResolver.test.ts new file mode 100644 index 0000000..2b4494c --- /dev/null +++ b/frontend/src/__tests__/mouseModifierResolver.test.ts @@ -0,0 +1,503 @@ +import { describe, expect, it } from "vitest"; +import { + DEFAULT_MOUSE_MODIFIER_PRECEDENCE, + MOUSE_MODIFIER_ACTIONS, + MOUSE_MODIFIER_CONTEXTS, + OPENSTUDIO_MOUSE_MODIFIER_MAPPINGS, + OPENSTUDIO_MOUSE_MODIFIER_PROFILE, + canonicalizeMouseModifierCombination, + isMouseModifierActionForContext, + normalizeMouseModifiers, + resolveMouseModifier, + resolveMouseModifierAction, + type MouseLogicalModifier, + type MouseModifierCombination, + type MouseModifierContext, + type MouseModifierPlatform, + type MouseModifierProfile, + type PointerModifierEventLike, +} from "../utils/mouseModifierResolver"; + +const logicalModifierOrder = [ + "primary", + "secondary", + "alt", + "shift", +] as const satisfies readonly MouseLogicalModifier[]; + +interface ContextDefaults { + none: string; + primary: string; + alt: string; + shift: string; +} + +const contextDefaults: Record = { + clip_drag: { none: "move", primary: "copy", alt: "bypass_snap", shift: "constrain" }, + clip_resize: { none: "resize", primary: "fine", alt: "stretch", shift: "symmetric" }, + timeline_click: { none: "seek", primary: "select_range", alt: "razor", shift: "extend_selection" }, + track_header: { none: "select", primary: "toggle_select", alt: "solo", shift: "range_select" }, + automation_point: { none: "move", primary: "fine", alt: "delete", shift: "constrain_y" }, + fade_handle: { none: "adjust", primary: "fine", alt: "shape_cycle", shift: "symmetric" }, + ruler_click: { none: "seek", primary: "loop_set", alt: "zoom_to", shift: "time_select" }, +}; + +function eventForLogicalModifiers( + platform: MouseModifierPlatform, + active: ReadonlySet, +): PointerModifierEventLike { + const primary = active.has("primary"); + const secondary = active.has("secondary"); + return { + ctrlKey: platform === "macos" ? secondary : primary, + metaKey: platform === "macos" ? primary : secondary, + altKey: active.has("alt"), + shiftKey: active.has("shift"), + }; +} + +function expectedCombination(active: ReadonlySet): MouseModifierCombination { + const ordered = logicalModifierOrder.filter((modifier) => active.has(modifier)); + return ordered.length === 0 ? "none" : ordered.join("+") as MouseModifierCombination; +} + +function expectedDefaultAction( + context: MouseModifierContext, + active: ReadonlySet, +): string { + const defaults = contextDefaults[context]; + if (active.size === 0) return defaults.none; + if (context === "clip_drag" && active.size === 2 && active.has("primary") && active.has("shift")) { + return "slip"; + } + if (active.has("primary")) return defaults.primary; + // OpenStudio intentionally leaves the secondary modifier unassigned. It is + // skipped during precedence fallback rather than becoming a plain click. + if (active.has("alt")) return defaults.alt; + if (active.has("shift")) return defaults.shift; + return "none"; +} + +const exhaustiveCases = (["windows", "macos"] as const).flatMap((platform) => ( + MOUSE_MODIFIER_CONTEXTS.flatMap((context) => ( + Array.from({ length: 16 }, (_, mask) => { + const active = new Set( + logicalModifierOrder.filter((_, index) => Boolean(mask & (1 << index))), + ); + return { + label: `${platform} ${context} ${expectedCombination(active)}`, + platform, + context, + active, + event: eventForLogicalModifiers(platform, active), + expectedAction: expectedDefaultAction(context, active), + expectedCombination: expectedCombination(active), + }; + }) + )) +)); + +describe("mouse modifier normalization", () => { + it.each([ + { + label: "Windows Control/Meta", + platform: "windows" as const, + event: { ctrlKey: true, metaKey: true }, + }, + { + label: "macOS Command/physical Control", + platform: "macos" as const, + event: { ctrlKey: true, metaKey: true }, + }, + ])("keeps primary and secondary independent for $label", ({ platform, event }) => { + expect(normalizeMouseModifiers(event, platform)).toMatchObject({ + primary: true, + secondary: true, + alt: false, + shift: false, + combination: "primary+secondary", + }); + }); + + it("maps raw modifiers to their correct semantic role per platform", () => { + expect(normalizeMouseModifiers({ ctrlKey: true }, "windows")).toMatchObject({ + primary: true, + secondary: false, + combination: "primary", + }); + expect(normalizeMouseModifiers({ metaKey: true }, "windows")).toMatchObject({ + primary: false, + secondary: true, + combination: "secondary", + }); + expect(normalizeMouseModifiers({ metaKey: true }, "macos")).toMatchObject({ + primary: true, + secondary: false, + combination: "primary", + }); + expect(normalizeMouseModifiers({ ctrlKey: true }, "macos")).toMatchObject({ + primary: false, + secondary: true, + combination: "secondary", + }); + expect(normalizeMouseModifiers({ altKey: true }, "macos")).toMatchObject({ + alt: true, + combination: "alt", + }); + }); + + it.each((['windows', 'macos'] as const).flatMap((platform) => ( + Array.from({ length: 16 }, (_, mask) => { + const active = new Set( + logicalModifierOrder.filter((_, index) => Boolean(mask & (1 << index))), + ); + return { platform, active, expected: expectedCombination(active) }; + }) + )))("canonicalizes every exact $platform modifier combination as $expected", ({ + platform, + active, + expected, + }) => { + const result = normalizeMouseModifiers(eventForLogicalModifiers(platform, active), platform); + expect(result.combination).toBe(expected); + expect(result.active).toEqual(logicalModifierOrder.filter((modifier) => active.has(modifier))); + }); + + it.each([ + ["ctrl", "primary"], + ["Command", "primary"], + ["cmd + option + SHIFT", "primary+alt+shift"], + ["secondary+alt", "secondary+alt"], + ["shift + primary + secondary + alt", "primary+secondary+alt+shift"], + ["none", "none"], + ] as const)("canonicalizes the mapping key %s", (input, expected) => { + expect(canonicalizeMouseModifierCombination(input)).toBe(expected); + }); + + it.each(["", "meta", "control", "primary+primary", "none+shift", "ctrl+command", "banana"])( + "rejects ambiguous or malformed mapping key %s", + (input) => { + expect(canonicalizeMouseModifierCombination(input)).toBeNull(); + }, + ); +}); + +describe("OpenStudio mouse modifier profile", () => { + it.each(exhaustiveCases)("resolves $label", ({ + platform, + context, + event, + expectedAction, + expectedCombination: combination, + }) => { + const result = resolveMouseModifier(event, context, { platform }); + expect(result.action).toBe(expectedAction); + expect(result.modifiers.combination).toBe(combination); + expect(result.profileId).toBe("openstudio"); + expect(result.context).toBe(context); + expect(result.isNoop).toBe(expectedAction === "none"); + + if (expectedAction === "none") { + expect(result).toMatchObject({ + source: "none", + matchKind: "none", + matchedCombination: null, + matched: false, + }); + } else { + const mappings = OPENSTUDIO_MOUSE_MODIFIER_MAPPINGS[context] as Partial< + Record + >; + const exact = Object.prototype.hasOwnProperty.call(mappings, combination); + expect(result).toMatchObject({ + source: "profile", + matchKind: exact ? "exact" : "precedence", + matched: true, + }); + } + }); + + it("exposes the current Preferences contexts, actions, and defaults", () => { + expect(MOUSE_MODIFIER_CONTEXTS).toEqual([ + "clip_drag", + "clip_resize", + "timeline_click", + "track_header", + "automation_point", + "fade_handle", + "ruler_click", + ]); + expect(DEFAULT_MOUSE_MODIFIER_PRECEDENCE).toEqual([ + "primary", + "secondary", + "alt", + "shift", + ]); + + for (const context of MOUSE_MODIFIER_CONTEXTS) { + for (const action of Object.values(OPENSTUDIO_MOUSE_MODIFIER_MAPPINGS[context])) { + expect(isMouseModifierActionForContext(context, action)).toBe(true); + expect(MOUSE_MODIFIER_ACTIONS[context]).toContain(action); + } + } + }); + + it("returns the semantic action directly through the convenience API", () => { + expect(resolveMouseModifierAction( + { ctrlKey: true }, + "clip_drag", + { platform: "windows" }, + )).toBe("copy"); + expect(resolveMouseModifierAction( + { metaKey: true }, + "clip_drag", + { platform: "macos" }, + )).toBe("copy"); + }); + + it.each(["windows", "macos"] as const)( + "keeps OpenStudio slip and razor gestures semantic on %s", + (platform) => { + expect(resolveMouseModifierAction( + eventForLogicalModifiers(platform, new Set(["primary", "shift"])), + "clip_drag", + { platform }, + )).toBe("slip"); + expect(resolveMouseModifierAction( + eventForLogicalModifiers(platform, new Set(["alt"])), + "timeline_click", + { platform }, + )).toBe("razor"); + }, + ); +}); + +describe("exact combinations and precedence", () => { + const combinedProfile: MouseModifierProfile = { + id: "combined", + name: "Combined", + mappings: { + ...OPENSTUDIO_MOUSE_MODIFIER_MAPPINGS, + clip_drag: { + ...OPENSTUDIO_MOUSE_MODIFIER_MAPPINGS.clip_drag, + secondary: "select", + "primary+shift": "constrain", + }, + }, + }; + + it.each(["windows", "macos"] as const)( + "lets an exact combined mapping win on %s", + (platform) => { + const active = new Set(["primary", "shift"]); + expect(resolveMouseModifier( + eventForLogicalModifiers(platform, active), + "clip_drag", + { platform, profile: combinedProfile }, + )).toMatchObject({ + action: "constrain", + source: "profile", + matchKind: "exact", + matchedCombination: "primary+shift", + }); + }, + ); + + it.each(["windows", "macos"] as const)( + "uses a mapped physical secondary modifier before Alt and Shift on %s", + (platform) => { + const active = new Set(["secondary", "alt", "shift"]); + expect(resolveMouseModifier( + eventForLogicalModifiers(platform, active), + "clip_drag", + { platform, profile: combinedProfile }, + )).toMatchObject({ + action: "select", + matchKind: "precedence", + matchedCombination: "secondary", + }); + }, + ); + + it("allows profiles to change single-modifier fallback order", () => { + const shiftFirst: MouseModifierProfile = { + ...combinedProfile, + id: "shift-first", + modifierPrecedence: ["shift", "alt", "primary", "secondary"], + mappings: { + ...combinedProfile.mappings, + clip_drag: OPENSTUDIO_MOUSE_MODIFIER_MAPPINGS.clip_drag, + }, + }; + expect(resolveMouseModifier( + { ctrlKey: true, altKey: true, shiftKey: true }, + "clip_drag", + { platform: "windows", profile: shiftFirst }, + )).toMatchObject({ + action: "constrain", + matchKind: "precedence", + matchedCombination: "shift", + }); + }); +}); + +describe("user override maps and safe no-op behavior", () => { + it.each(["windows", "macos"] as const)( + "accepts the legacy ctrl override as semantic primary on %s", + (platform) => { + const event = eventForLogicalModifiers(platform, new Set(["primary"])); + expect(resolveMouseModifier(event, "clip_drag", { + platform, + overrides: { clip_drag: { ctrl: "select" } }, + })).toMatchObject({ + action: "select", + source: "override", + matchKind: "exact", + matchedCombination: "primary", + }); + }, + ); + + it("uses an exact combined override before profile and fallback mappings", () => { + expect(resolveMouseModifier( + { ctrlKey: true, altKey: true, shiftKey: true }, + "clip_drag", + { + platform: "windows", + overrides: { + clip_drag: { + primary: "select", + "primary+alt+shift": "constrain", + }, + }, + }, + )).toMatchObject({ + action: "constrain", + source: "override", + matchKind: "exact", + matchedCombination: "primary+alt+shift", + }); + }); + + it("honors explicit none without falling through to a destructive action", () => { + expect(resolveMouseModifier( + { ctrlKey: true, shiftKey: true }, + "clip_drag", + { + platform: "windows", + overrides: { clip_drag: { "primary+shift": "none" } }, + }, + )).toMatchObject({ + action: "none", + source: "override", + matchKind: "exact", + matched: true, + isNoop: true, + }); + }); + + it.each([ + ["action from another context", { clip_drag: { primary: "delete" } }], + ["unknown action", { clip_drag: { primary: "launch_missiles" } }], + ["non-string action", { clip_drag: { primary: 42 } }], + ["undefined persisted value", { clip_drag: { primary: undefined } }], + ] as const)("turns an invalid %s into a safe no-op", (_label, overrides) => { + expect(resolveMouseModifier( + { ctrlKey: true }, + "clip_drag", + { platform: "windows", overrides }, + )).toMatchObject({ + action: "none", + source: "override", + matched: true, + isNoop: true, + }); + }); + + it("does not turn an unmapped modified gesture into a plain click", () => { + expect(resolveMouseModifier( + { metaKey: true }, + "automation_point", + { platform: "windows" }, + )).toMatchObject({ + action: "none", + source: "none", + matched: false, + }); + }); + + it("does not mutate the factory profile while resolving overrides", () => { + const before = JSON.stringify(OPENSTUDIO_MOUSE_MODIFIER_PROFILE); + resolveMouseModifier({ ctrlKey: true }, "timeline_click", { + platform: "windows", + overrides: { timeline_click: { primary: "zoom" } }, + }); + expect(JSON.stringify(OPENSTUDIO_MOUSE_MODIFIER_PROFILE)).toBe(before); + expect(resolveMouseModifierAction( + { ctrlKey: true }, + "timeline_click", + { platform: "windows" }, + )).toBe("select_range"); + }); + + it("rejects AltGraph instead of treating it as a Ctrl+Alt gesture", () => { + expect(resolveMouseModifier( + { + ctrlKey: true, + altKey: true, + getModifierState: (modifier) => modifier === "AltGraph", + }, + "clip_drag", + { platform: "windows" }, + )).toMatchObject({ + action: "none", + source: "unsupported", + matchKind: "none", + matched: false, + modifiers: { altGraph: true }, + }); + }); + + it("fails safely when an imported runtime context is unknown", () => { + const invalidContext = "unknown_surface" as MouseModifierContext; + expect(resolveMouseModifier( + {}, + invalidContext, + { platform: "windows" }, + )).toMatchObject({ + action: "none", + source: "unsupported", + matched: false, + }); + }); +}); + +describe("keyboard-layout independence", () => { + it.each([ + { layout: "QWERTY", key: "z", code: "KeyZ" }, + { layout: "QWERTZ", key: "z", code: "KeyY" }, + { layout: "AZERTY", key: "q", code: "KeyA" }, + { layout: "Dvorak", key: ";", code: "KeyZ" }, + ])("resolves only pointer modifiers on $layout", (layoutEvent) => { + const event = { + ...layoutEvent, + ctrlKey: true, + shiftKey: true, + button: 0, + }; + expect(resolveMouseModifier(event, "ruler_click", { platform: "windows" })) + .toMatchObject({ + action: "loop_set", + matchKind: "precedence", + matchedCombination: "primary", + }); + }); + + it("resolves identically when browser pointer metadata is missing", () => { + expect(resolveMouseModifierAction( + { ctrlKey: true }, + "track_header", + { platform: "other" }, + )).toBe("toggle_select"); + }); +}); diff --git a/frontend/src/__tests__/mouseModifierTimelineBehaviors.test.ts b/frontend/src/__tests__/mouseModifierTimelineBehaviors.test.ts new file mode 100644 index 0000000..c80a016 --- /dev/null +++ b/frontend/src/__tests__/mouseModifierTimelineBehaviors.test.ts @@ -0,0 +1,129 @@ +import { describe, expect, it } from "vitest"; +import { + CLIP_FADE_SHAPE_COUNT, + FINE_MOUSE_POINTER_SCALE, + SAFE_MOUSE_MODIFIER_NOOPS, + computeMouseModifierTimelineResize, + getNextClipFadeShape, + getSafeMouseModifierNoop, +} from "../utils/mouseModifierTimelineBehaviors"; + +const base = { + kind: "resize-right" as const, + isMidi: false, + originalStartTime: 4, + originalDuration: 6, + originalOffset: 3, + sourceLength: 20, +}; + +describe("mouse-modifier timeline resize behavior", () => { + it("preserves ordinary resize behavior", () => { + expect(computeMouseModifierTimelineResize({ + ...base, + action: "resize", + deltaTime: 2, + })).toEqual({ startTime: 4, duration: 8, offset: 3 }); + }); + + it("scales fine resize movement without changing its anchor", () => { + expect(FINE_MOUSE_POINTER_SCALE).toBe(0.1); + expect(computeMouseModifierTimelineResize({ + ...base, + action: "fine", + deltaTime: 2, + })).toEqual({ startTime: 4, duration: 6.2, offset: 3 }); + }); + + it("previews stretch geometry without trimming source material", () => { + expect(computeMouseModifierTimelineResize({ + ...base, + action: "stretch", + deltaTime: 3, + })).toEqual({ startTime: 4, duration: 9, offset: 4.5 }); + }); + + it.each([ + { + kind: "resize-left" as const, + deltaTime: 1, + expected: { startTime: 5, duration: 4, offset: 4 }, + }, + { + kind: "resize-right" as const, + deltaTime: 1, + expected: { startTime: 3, duration: 8, offset: 2 }, + }, + ])("keeps the clip center fixed for $kind", ({ kind, deltaTime, expected }) => { + expect(computeMouseModifierTimelineResize({ + ...base, + kind, + action: "symmetric", + deltaTime, + })).toEqual(expected); + }); + + it("clamps symmetric expansion at the timeline and source boundaries", () => { + expect(computeMouseModifierTimelineResize({ + kind: "resize-left", + action: "symmetric", + isMidi: false, + originalStartTime: 1, + originalDuration: 4, + originalOffset: 1, + sourceLength: 6, + deltaTime: -10, + })).toEqual({ startTime: 0, duration: 6, offset: 0 }); + + expect(computeMouseModifierTimelineResize({ + kind: "resize-right", + action: "symmetric", + isMidi: false, + originalStartTime: 5, + originalDuration: 4, + originalOffset: 2, + sourceLength: 7, + deltaTime: 10, + })).toEqual({ startTime: 4, duration: 6, offset: 1 }); + }); + + it("honors snapping before applying symmetric bounds", () => { + expect(computeMouseModifierTimelineResize({ + ...base, + action: "symmetric", + deltaTime: 0.4, + snapTime: (time) => Math.round(time), + })).toEqual({ startTime: 4, duration: 6, offset: 3 }); + }); +}); + +describe("explicit safe mouse-modifier no-ops", () => { + it("has no guarded modifier operations after stretch and master automation integration", () => { + expect(SAFE_MOUSE_MODIFIER_NOOPS).toEqual([]); + }); + + it("does not classify implemented operations as no-ops", () => { + expect(getSafeMouseModifierNoop("clip_resize", "stretch")).toBeNull(); + expect(getSafeMouseModifierNoop("fade_handle", "shape_cycle")).toBeNull(); + expect(getSafeMouseModifierNoop("clip_resize", "fine")).toBeNull(); + expect(getSafeMouseModifierNoop("clip_drag", "move")).toBeNull(); + }); + +}); + +describe("fade-shape cycling", () => { + it("advances each supported shape and wraps the final shape to linear", () => { + expect(CLIP_FADE_SHAPE_COUNT).toBe(5); + expect(Array.from( + { length: CLIP_FADE_SHAPE_COUNT }, + (_, shape) => getNextClipFadeShape(shape), + )).toEqual([1, 2, 3, 4, 0]); + }); + + it.each([undefined, Number.NaN, Number.POSITIVE_INFINITY])( + "recovers malformed shape %s through the first valid shape", + (shape) => { + expect(getNextClipFadeShape(shape)).toBe(1); + }, + ); +}); diff --git a/frontend/src/__tests__/namAdvancedControlExposure.test.ts b/frontend/src/__tests__/namAdvancedControlExposure.test.ts new file mode 100644 index 0000000..772f34a --- /dev/null +++ b/frontend/src/__tests__/namAdvancedControlExposure.test.ts @@ -0,0 +1,28 @@ +import { describe, expect, it } from "vitest"; +import { + NAM_RACK_ADVANCED_CONTROL_IDS, + NAM_RACK_ADVANCED_ONLY_CONTROL_IDS, + namRackAdvancedStageForCompactModule, +} from "../components/NAMRackMixer"; + +describe("NAM Rack advanced-control exposure", () => { + it("keeps every advanced-only parameter in the complete supported registry", () => { + for (const stageId of Object.keys(NAM_RACK_ADVANCED_ONLY_CONTROL_IDS)) { + const stage = stageId as keyof typeof NAM_RACK_ADVANCED_ONLY_CONTROL_IDS; + const supported = NAM_RACK_ADVANCED_CONTROL_IDS[stage] as readonly string[]; + for (const paramId of NAM_RACK_ADVANCED_ONLY_CONTROL_IDS[stage]) { + expect(supported).toContain(paramId); + } + } + }); + + it("exposes advanced affordances only for stages with hidden controls", () => { + expect(namRackAdvancedStageForCompactModule("gate")).toBe("gate"); + expect(namRackAdvancedStageForCompactModule("mod")).toBe("mod"); + expect(namRackAdvancedStageForCompactModule("delay")).toBe("delay"); + expect(namRackAdvancedStageForCompactModule("amp-nam")).toBeNull(); + expect(namRackAdvancedStageForCompactModule("cab-ir")).toBeNull(); + expect(namRackAdvancedStageForCompactModule("eq")).toBeNull(); + expect(namRackAdvancedStageForCompactModule("reverb")).toBeNull(); + }); +}); diff --git a/frontend/src/__tests__/namAmpAssetIntegrity.test.ts b/frontend/src/__tests__/namAmpAssetIntegrity.test.ts new file mode 100644 index 0000000..a978007 --- /dev/null +++ b/frontend/src/__tests__/namAmpAssetIntegrity.test.ts @@ -0,0 +1,83 @@ +// @ts-expect-error The app tsconfig omits Node builtin typings, while Vitest runs this asset audit in Node. +import { readFileSync } from "node:fs"; +import sharp from "sharp"; +import { describe, expect, it } from "vitest"; + +const readAsset = (name: string) => readFileSync( + new URL(`../assets/nam/design/bodies/${name}`, import.meta.url), +); + +describe("NAM Amp GAIN artwork integrity", () => { + it("changes only the interior label patch and preserves the approved visible border", async () => { + const [original, gainBody, originalOnBlack, gainBodyOnBlack, originalOnWhite, gainBodyOnWhite] = await Promise.all([ + sharp(readAsset("amp-head-body-v4.webp")) + .ensureAlpha() + .raw() + .toBuffer({ resolveWithObject: true }), + sharp(readAsset("amp-head-body-v5.webp")) + .ensureAlpha() + .raw() + .toBuffer({ resolveWithObject: true }), + sharp(readAsset("amp-head-body-v4.webp")) + .flatten({ background: "#000000" }) + .raw() + .toBuffer({ resolveWithObject: true }), + sharp(readAsset("amp-head-body-v5.webp")) + .flatten({ background: "#000000" }) + .raw() + .toBuffer({ resolveWithObject: true }), + sharp(readAsset("amp-head-body-v4.webp")) + .flatten({ background: "#ffffff" }) + .raw() + .toBuffer({ resolveWithObject: true }), + sharp(readAsset("amp-head-body-v5.webp")) + .flatten({ background: "#ffffff" }) + .raw() + .toBuffer({ resolveWithObject: true }), + ]); + + expect(gainBody.info).toMatchObject({ + width: original.info.width, + height: original.info.height, + channels: 4, + }); + + const patch = { left: 300, top: 580, right: 425, bottom: 665 }; + let alphaDifferences = 0; + let exteriorVisibleDifferencesOverOne = 0; + let interiorColorDifferences = 0; + for (let y = 0; y < original.info.height; y += 1) { + for (let x = 0; x < original.info.width; x += 1) { + const offset = (y * original.info.width + x) * 4; + if (original.data[offset + 3] !== gainBody.data[offset + 3]) { + alphaDifferences += 1; + } + const colorChanged = original.data[offset] !== gainBody.data[offset] + || original.data[offset + 1] !== gainBody.data[offset + 1] + || original.data[offset + 2] !== gainBody.data[offset + 2]; + const insidePatch = x >= patch.left && x < patch.right + && y >= patch.top && y < patch.bottom; + if (colorChanged && insidePatch) interiorColorDifferences += 1; + if (!insidePatch) { + const flattenedOffset = (y * original.info.width + x) * 3; + const visibleDelta = Math.max( + Math.abs(originalOnBlack.data[flattenedOffset] - gainBodyOnBlack.data[flattenedOffset]), + Math.abs(originalOnBlack.data[flattenedOffset + 1] - gainBodyOnBlack.data[flattenedOffset + 1]), + Math.abs(originalOnBlack.data[flattenedOffset + 2] - gainBodyOnBlack.data[flattenedOffset + 2]), + Math.abs(originalOnWhite.data[flattenedOffset] - gainBodyOnWhite.data[flattenedOffset]), + Math.abs(originalOnWhite.data[flattenedOffset + 1] - gainBodyOnWhite.data[flattenedOffset + 1]), + Math.abs(originalOnWhite.data[flattenedOffset + 2] - gainBodyOnWhite.data[flattenedOffset + 2]), + ); + if (visibleDelta > 1) exteriorVisibleDifferencesOverOne += 1; + } + } + } + + expect(alphaDifferences).toBe(0); + // WebP may normalize hidden RGB under fully transparent pixels. Verify the + // actual composited edge on both dark and light stages instead: no exterior + // pixel may drift by more than one 8-bit level, ruling out visible halos. + expect(exteriorVisibleDifferencesOverOne).toBe(0); + expect(interiorColorDifferences).toBeGreaterThan(500); + }); +}); diff --git a/frontend/src/__tests__/namAmpWrapperAndDriveVoiceLayout.test.ts b/frontend/src/__tests__/namAmpWrapperAndDriveVoiceLayout.test.ts new file mode 100644 index 0000000..36fecab --- /dev/null +++ b/frontend/src/__tests__/namAmpWrapperAndDriveVoiceLayout.test.ts @@ -0,0 +1,222 @@ +// @ts-expect-error The app tsconfig omits Node builtin typings, while Vitest runs this source audit in Node. +import { readFileSync } from "node:fs"; +import { describe, expect, it } from "vitest"; + +import { + NAM_AMP_FACEPLATE_LAYOUT, + NAM_COMPRESSOR_FACEPLATE_LAYOUT, + NAM_EQ_BOOST_FACEPLATE_LAYOUT, + NAM_PRECISION_DRIVE_FACEPLATE_LAYOUT, + NAM_PRE_LOGICAL_SURFACE, + NAM_PRE_SIGNAL_LAYOUT, +} from "../components/NAMRackDesignPort"; + +const readSource = (relativePath: string) => + readFileSync(new URL(relativePath, import.meta.url), "utf8"); + +describe("NAM fixed-capture amp and separate EQ Boost / Drive faceplates", () => { + it("fits every existing amp wrapper parameter on the approved single control deck", () => { + const layout = NAM_AMP_FACEPLATE_LAYOUT; + const moduleWidth = 720; + const moduleHeight = 345; + const centres = [ + layout.powerX, + layout.inputX, + layout.boostX, + layout.voiceX, + layout.bassX, + layout.midX, + layout.trebleX, + layout.presenceX, + layout.mixX, + layout.outputX, + ].map((x) => x * moduleWidth / 100); + + const expectedCentres = [75, 120, 173.333333, 225, 291.666667, 360, 428.333333, 496.666667, 565, 633.333333]; + centres.forEach((centre, index) => { + expect(centre).toBeCloseTo(expectedCentres[index], 4); + }); + expect(layout.controlY * moduleHeight / 100).toBeCloseTo(745 / 3, 5); + expect(layout.labelY * moduleHeight / 100).toBeCloseTo(634 / 3, 5); + expect(layout.knobSize * moduleWidth / 100).toBeCloseTo(36, 8); + expect(layout.knobHitSize * moduleWidth / 100).toBeCloseTo(44, 8); + expect(layout.toggleSize * moduleWidth / 100).toBeCloseTo(22, 8); + expect(layout.toggleHitSize * moduleWidth / 100).toBeCloseTo(30, 8); + expect(layout.ledY * moduleHeight / 100).toBeCloseTo(683 / 3, 5); + expect(layout.ledSize * moduleWidth / 100).toBeCloseTo(12, 8); + expect(centres[0] - 15).toBeGreaterThanOrEqual(40); + expect(centres[centres.length - 1] + 22).toBeLessThanOrEqual(680); + + const source = readSource("../components/NAMRackDesignPort.tsx"); + const ampStage = source.slice( + source.indexOf("function AmpStage("), + source.indexOf("function CabSourceSelector("), + ); + for (const paramId of [ + "ampEnabled", + "ampBoost", + "ampVoice", + "ampGainDb", + "ampMix", + "ampOutputDb", + "bassDb", + "midDb", + "trebleDb", + "presenceDb", + ]) { + expect(ampStage).toContain(`\"${paramId}\"`); + } + expect(ampStage).toContain("amp-head-v5"); + expect(ampStage).toContain("CONTROLS.knobBlackPanel"); + expect(ampStage).toContain("CONTROLS.ledOnPanel"); + expect(ampStage).not.toContain("amp-gain-label-overlay"); + expect(ampStage).not.toContain("amp-row-divider"); + expect(ampStage).toContain('label: "BASS"'); + expect(ampStage).toContain('label: "MID"'); + expect(ampStage).toContain('label: "TREBLE"'); + expect(ampStage).toContain('label: "PRESENCE"'); + expect(ampStage).toContain('label: "GAIN"'); + expect(ampStage).not.toMatch(/label:\s*"(?:POST|MASTER)/); + + const namingSurfaces = [ + readSource("../services/NativeBridge.ts"), + readSource("../components/NAMRackPanel.tsx"), + readSource("../../../Source/AudioEngine.cpp"), + ]; + for (const sourceSurface of namingSurfaces) { + expect(sourceSurface).not.toMatch(/Post (?:Bass|Mid|Treble|Presence)/); + } + expect(namingSurfaces[0]).toContain('param("bassDb", "Bass"'); + expect(namingSurfaces[0]).toContain('param("midDb", "Mid"'); + expect(namingSurfaces[0]).toContain('param("trebleDb", "Treble"'); + expect(namingSurfaces[0]).toContain('param("presenceDb", "Presence"'); + }); + + it("keeps EQ Boost and Precision Drive separate inside one scrollbar-free row", () => { + const box = NAM_PRE_SIGNAL_LAYOUT.precisionDrive; + const layout = NAM_PRECISION_DRIVE_FACEPLATE_LAYOUT; + const xPx = (percentage: number) => percentage * box.w / 100; + const yPx = (percentage: number) => percentage * box.h / 100; + + expect(box).toMatchObject({ w: 120, h: 232 }); + expect(NAM_PRE_SIGNAL_LAYOUT.eqBoost).toMatchObject({ w: 156, h: 232 }); + expect(NAM_PRE_SIGNAL_LAYOUT.eqBoost.x + NAM_PRE_SIGNAL_LAYOUT.eqBoost.w) + .toBeLessThanOrEqual(box.x); + expect(NAM_PRE_SIGNAL_LAYOUT.distortion.x + NAM_PRE_SIGNAL_LAYOUT.distortion.w) + .toBe(NAM_PRE_LOGICAL_SURFACE.row.x + NAM_PRE_LOGICAL_SURFACE.row.w); + expect(NAM_PRE_LOGICAL_SURFACE.scaleReference).toEqual(NAM_PRE_LOGICAL_SURFACE.row); + expect(xPx(layout.gate.x)).toBeCloseTo(60, 8); + expect(yPx(layout.gate.y)).toBeCloseTo(76.56, 8); + expect(xPx(layout.gate.size)).toBeCloseTo(18, 8); + expect(xPx(layout.gate.hitSize)).toBeCloseTo(20, 8); + expect(NAM_EQ_BOOST_FACEPLATE_LAYOUT.bandYs).toHaveLength(8); + expect(NAM_EQ_BOOST_FACEPLATE_LAYOUT.title.y).toBe( + NAM_COMPRESSOR_FACEPLATE_LAYOUT.titleY, + ); + expect(NAM_EQ_BOOST_FACEPLATE_LAYOUT.title.x).toBe(50); + expect(NAM_EQ_BOOST_FACEPLATE_LAYOUT.led.x).toBe(50); + expect(NAM_EQ_BOOST_FACEPLATE_LAYOUT.foot.x).toBe(50); + expect(NAM_EQ_BOOST_FACEPLATE_LAYOUT.stateLabelY).toBe(82); + + // The wider fader consumes the former left-side void while preserving the + // old painted right boundary. Frequency copy still terminates three + // logical pixels before the rail, and the complete hit target remains + // clear of the filter controls. + const eqBoostWidth = NAM_PRE_SIGNAL_LAYOUT.eqBoost.w; + const eqBoostXPx = (percentage: number) => percentage * eqBoostWidth / 100; + const faderLeftPx = eqBoostXPx(NAM_EQ_BOOST_FACEPLATE_LAYOUT.faderX) + - eqBoostXPx(NAM_EQ_BOOST_FACEPLATE_LAYOUT.faderWidth) / 2; + const faderRightPx = eqBoostXPx(NAM_EQ_BOOST_FACEPLATE_LAYOUT.faderX) + + eqBoostXPx(NAM_EQ_BOOST_FACEPLATE_LAYOUT.faderWidth) / 2; + const faderWidthPx = faderRightPx - faderLeftPx; + const trackLeftPx = faderLeftPx + + faderWidthPx + * NAM_EQ_BOOST_FACEPLATE_LAYOUT.faderTrackInsetPercent / 100; + const trackRightPx = faderRightPx + - faderWidthPx + * NAM_EQ_BOOST_FACEPLATE_LAYOUT.faderTrackInsetPercent / 100; + const capTravelLeftPx = faderLeftPx + + faderWidthPx + * NAM_EQ_BOOST_FACEPLATE_LAYOUT.faderCapMinPercent / 100; + const capTravelRightPx = capTravelLeftPx + + faderWidthPx + * NAM_EQ_BOOST_FACEPLATE_LAYOUT.faderCapTravelPercent / 100; + const labelRightPx = NAM_EQ_BOOST_FACEPLATE_LAYOUT.bandLabelX + * eqBoostWidth / 100; + const filterHitLeftPx = eqBoostXPx(NAM_EQ_BOOST_FACEPLATE_LAYOUT.hpf.x) + - eqBoostXPx(NAM_EQ_BOOST_FACEPLATE_LAYOUT.filterHitSize) / 2; + + expect(eqBoostXPx(NAM_EQ_BOOST_FACEPLATE_LAYOUT.faderX)).toBeCloseTo(64, 8); + expect(faderWidthPx).toBeCloseTo(72, 8); + expect(faderLeftPx).toBeCloseTo(28, 8); + expect(faderRightPx).toBeCloseTo(100, 8); + expect(trackLeftPx).toBeCloseTo(32.965517, 5); + expect(trackRightPx).toBeCloseTo(95.034483, 5); + expect(trackRightPx - trackLeftPx).toBeGreaterThan(50 * 1.2); + expect(capTravelLeftPx).toBeCloseTo(39, 5); + expect(capTravelRightPx).toBeCloseTo(89, 5); + expect(capTravelRightPx - capTravelLeftPx).toBeGreaterThan(44 * 1.1); + expect(trackLeftPx - labelRightPx).toBeCloseTo(2.965517, 5); + expect(filterHitLeftPx - faderRightPx).toBeCloseTo(10, 8); + expect(filterHitLeftPx - trackRightPx).toBeGreaterThan(14); + const rotatedCapWidthPx = 15; + expect(capTravelLeftPx - rotatedCapWidthPx / 2 - labelRightPx) + .toBeCloseTo(1.5, 5); + expect(filterHitLeftPx - (capTravelRightPx + rotatedCapWidthPx / 2)) + .toBeCloseTo(13.5, 5); + + const designCss = readSource("../components/NAMRackDesignPort.css"); + const bandLabelRule = designCss.match( + /\.combined-pre-eq-band-label\s*\{(?[\s\S]*?)\}/, + )?.groups?.body; + expect(bandLabelRule).toContain("transform: translate(-100%, -50%)"); + expect(bandLabelRule).toContain("text-align: right"); + const lastBandY = NAM_EQ_BOOST_FACEPLATE_LAYOUT.bandYs[ + NAM_EQ_BOOST_FACEPLATE_LAYOUT.bandYs.length - 1 + ] ?? 0; + expect( + (NAM_EQ_BOOST_FACEPLATE_LAYOUT.title.y - lastBandY) * + NAM_PRE_SIGNAL_LAYOUT.eqBoost.h / 100 - + NAM_EQ_BOOST_FACEPLATE_LAYOUT.faderHeight * + NAM_PRE_SIGNAL_LAYOUT.eqBoost.h / 200, + ).toBeGreaterThanOrEqual(10); + + const source = readSource("../components/NAMRackDesignPort.tsx"); + const profileSource = readSource("../utils/namInstrumentProfile.ts"); + const eqStart = source.indexOf("box={NAM_PRE_SIGNAL_LAYOUT.eqBoost}"); + const driveStart = source.indexOf("box={NAM_PRE_SIGNAL_LAYOUT.precisionDrive}"); + const driveEnd = source.indexOf("box={NAM_PRE_SIGNAL_LAYOUT.distortion}"); + const eqStage = source.slice(eqStart, driveStart); + const driveStage = source.slice(driveStart, driveEnd); + expect(eqStage).toContain('name="eq-boost"'); + expect(eqStage).toContain('title="EQ BOOST"'); + expect(driveStage).toContain('name="precision-drive"'); + expect(driveStage).toContain('title="PRECISION DRIVE"'); + expect(driveStage).not.toContain("precisionDriveVoice"); + expect(driveStage).not.toContain("OD808"); + expect(driveStage).toContain('paramId="precisionDriveGate"'); + expect(driveStage).toContain('paramId="precisionDriveEnabled"'); + expect(driveStage.match(/paramId="precisionDriveEnabled"/g)).toHaveLength(2); + expect(eqStage).toContain("paramId={band.paramId}"); + for (const paramId of [ + "preEq120Db", + "preEq250Db", + "preEq500Db", + "preEq1kDb", + "preEq2k5Db", + "preEq5kDb", + "preEq8kDb", + "preEq12kDb", + ]) { + expect(profileSource).toContain(`"${paramId}"`); + } + for (const paramId of [ + "preEqEnabled", + "preEqHPFHz", + "preEqLPFHz", + ]) { + expect(eqStage).toContain(`paramId="${paramId}"`); + } + }); + +}); diff --git a/frontend/src/__tests__/namApprovedSurfaceImplementationContract.test.ts b/frontend/src/__tests__/namApprovedSurfaceImplementationContract.test.ts new file mode 100644 index 0000000..49256c0 --- /dev/null +++ b/frontend/src/__tests__/namApprovedSurfaceImplementationContract.test.ts @@ -0,0 +1,245 @@ +import { describe, expect, it } from "vitest"; + +import { createNAMBootSchema } from "../components/BuiltInPluginPanel"; +import { + NAM_AMP_FACEPLATE_LAYOUT, + NAM_GRAPHIC_EQ_FACEPLATE_LAYOUT, + NAM_PRE_SIGNAL_LAYOUT, +} from "../components/NAMRackDesignPort"; +import { NAM_RACK_ADVANCED_CONTROL_IDS } from "../components/NAMRackMixer"; +import { + CURRENT_NAM_EFFECTS_DSP_VERSION, + CURRENT_NAM_REVERB_ENGINE_VERSION, + migrateLegacyNAMRackPresetDspState, +} from "../utils/namRackPresetTransactions"; + +const PRE_EQ_PARAM_IDS = [ + "preEqEnabled", + "preEq120Db", + "preEq250Db", + "preEq500Db", + "preEq1kDb", + "preEq2k5Db", + "preEq5kDb", + "preEq8kDb", + "preEq12kDb", + "preEqHPFHz", + "preEqLPFHz", +] as const; + +const PRE_EQ_BAND_IDS = PRE_EQ_PARAM_IDS.slice(1, 9); + +const DRIVE_PARAM_IDS = [ + "precisionDriveEnabled", + "precisionDriveDrive", + "precisionDriveVolumeDb", + "precisionDriveBright", + "precisionDriveAttack", + "precisionDriveGate", +] as const; + +const AMP_PARAM_IDS = [ + "ampEnabled", + "ampBoost", + "ampVoice", + "ampGainDb", + "bassDb", + "midDb", + "trebleDb", + "presenceDb", + "ampMix", + "ampOutputDb", +] as const; + +const POST_EQ_BAND_IDS = [ + "eq65Db", + "eq125Db", + "eq250Db", + "eq500Db", + "eq1kDb", + "eq2kDb", + "eq4kDb", + "eq8kDb", + "eq16kDb", +] as const; + +const POST_EQ_PARAM_IDS = [ + "eqEnabled", + ...POST_EQ_BAND_IDS, + "eqHPFHz", + "eqLevelDb", + "eqLPFHz", +] as const; + +describe("NAM Rack approved-surface implementation contract", () => { + it("exposes every approved Amp, post-EQ, Drive, and PRE-EQ parameter in the boot schema", () => { + const schema = createNAMBootSchema( + { chain: "track", trackId: "approved-surface-contract", fxIndex: 0 }, + "OpenStudio NAM Rack", + ); + const byId = new Map(schema.parameters.map((parameter) => [parameter.id, parameter])); + const required = [ + ...AMP_PARAM_IDS, + ...POST_EQ_PARAM_IDS, + ...DRIVE_PARAM_IDS, + ...PRE_EQ_PARAM_IDS, + ]; + + for (const paramId of required) expect(byId.has(paramId), paramId).toBe(true); + expect(byId.has("preEqLevelDb")).toBe(false); + + expect(byId.get("preEqEnabled")).toMatchObject({ + type: "toggle", + min: 0, + max: 1, + defaultValue: 0, + automatable: true, + }); + for (const paramId of PRE_EQ_BAND_IDS) { + expect(byId.get(paramId)).toMatchObject({ + type: "continuous", + min: -12, + max: 12, + defaultValue: 0, + unit: "dB", + automatable: true, + }); + } + expect(byId.get("preEqHPFHz")).toMatchObject({ + type: "continuous", + min: 0, + max: 180, + defaultValue: 0, + unit: "Hz", + automatable: true, + }); + expect(byId.get("preEqLPFHz")).toMatchObject({ + type: "continuous", + min: 3000, + max: 24000, + defaultValue: 24000, + unit: "Hz", + automatable: true, + }); + }); + + it("keeps EQ Boost and Precision Drive independently addressable as separate stages", () => { + expect(NAM_RACK_ADVANCED_CONTROL_IDS["pre-eq"]).toEqual(PRE_EQ_PARAM_IDS); + expect(NAM_RACK_ADVANCED_CONTROL_IDS["precision-drive"]).toEqual(DRIVE_PARAM_IDS); + expect(new Set(NAM_RACK_ADVANCED_CONTROL_IDS["precision-drive"]).size).toBe(6); + expect(NAM_RACK_ADVANCED_CONTROL_IDS["precision-drive"]).not.toContain("preEqLevelDb"); + }); + + it("preserves every remaining pedal size while centring the five-device PRE row", () => { + expect(NAM_PRE_SIGNAL_LAYOUT).toEqual({ + compressor: { x: 85, y: 42, w: 156, h: 232 }, + octaver: { x: 251, y: 42, w: 120, h: 232 }, + eqBoost: { x: 381, y: 42, w: 156, h: 232 }, + precisionDrive: { x: 547, y: 42, w: 120, h: 232 }, + distortion: { x: 677, y: 42, w: 156, h: 232 }, + }); + + expect(NAM_AMP_FACEPLATE_LAYOUT.controlY).toBeCloseTo(745 / 10.35, 6); + const ampCentres = [ + NAM_AMP_FACEPLATE_LAYOUT.powerX, + NAM_AMP_FACEPLATE_LAYOUT.inputX, + NAM_AMP_FACEPLATE_LAYOUT.boostX, + NAM_AMP_FACEPLATE_LAYOUT.voiceX, + NAM_AMP_FACEPLATE_LAYOUT.bassX, + NAM_AMP_FACEPLATE_LAYOUT.midX, + NAM_AMP_FACEPLATE_LAYOUT.trebleX, + NAM_AMP_FACEPLATE_LAYOUT.presenceX, + NAM_AMP_FACEPLATE_LAYOUT.mixX, + NAM_AMP_FACEPLATE_LAYOUT.outputX, + ]; + ampCentres.forEach((x, index) => { + expect(x).toBeCloseTo( + [225, 360, 520, 675, 875, 1080, 1285, 1490, 1695, 1900][index] / 21.6, + 8, + ); + }); + + NAM_GRAPHIC_EQ_FACEPLATE_LAYOUT.laneXs.forEach((x, index) => { + expect(x).toBeCloseTo( + [515, 656.25, 797.5, 938.75, 1080, 1221.25, 1362.5, 1503.75, 1645][index] / 21.6, + 8, + ); + }); + expect(NAM_GRAPHIC_EQ_FACEPLATE_LAYOUT.utility.levelX).toBeCloseTo(1870 / 21.6, 8); + expect(NAM_GRAPHIC_EQ_FACEPLATE_LAYOUT.utility.hpfX).toBeCloseTo(290 / 21.6, 8); + expect(NAM_GRAPHIC_EQ_FACEPLATE_LAYOUT.utility.lpfX).toBeCloseTo(1870 / 21.6, 8); + expect(NAM_GRAPHIC_EQ_FACEPLATE_LAYOUT.power.led.x).toBeCloseTo(400 / 21.6, 8); + expect( + NAM_GRAPHIC_EQ_FACEPLATE_LAYOUT.power.led.x + - NAM_GRAPHIC_EQ_FACEPLATE_LAYOUT.power.toggle.x, + ).toBeLessThan(5.5); + }); + + it("keeps EQ Boost state introduced in V16 while migrating its bands to V19", () => { + expect(CURRENT_NAM_EFFECTS_DSP_VERSION).toBe(19); + + const v15 = migrateLegacyNAMRackPresetDspState({ + values: { + preEqEnabled: 1, + preEq100Db: 6, + preEqHPFHz: 70, + preEqLPFHz: 11000, + }, + dspState: { + namEffectsDspVersion: 15, + reverbEngineVersion: CURRENT_NAM_REVERB_ENGINE_VERSION, + }, + }, { completePreset: true }) as { + values: Record; + dspState: Record; + }; + expect(v15.values).toMatchObject({ + preEqEnabled: 0, + preEq120Db: 0, + preEq250Db: 0, + preEq500Db: 0, + preEq1kDb: 0, + preEq2k5Db: 0, + preEq5kDb: 0, + preEq8kDb: 0, + preEq12kDb: 0, + preEqHPFHz: 0, + preEqLPFHz: 24000, + }); + expect(v15.dspState.namEffectsDspVersion).toBe(19); + expect(v15.values).not.toHaveProperty("preEq100Db"); + + const v16 = migrateLegacyNAMRackPresetDspState({ + values: { + preEqEnabled: 1, + preEq100Db: -2.5, + preEq200Db: -1.5, + preEq400Db: -0.5, + preEq800Db: 0.5, + preEq1k6Db: 1.5, + preEq3k2Db: 2.5, + preEq6k4Db: 3.5, + preEqHPFHz: 62, + preEqLPFHz: 12500, + }, + dspState: { + namEffectsDspVersion: 16, + reverbEngineVersion: CURRENT_NAM_REVERB_ENGINE_VERSION, + }, + }, { completePreset: true }) as { values: Record }; + expect(v16.values).toMatchObject({ + preEqEnabled: 1, + preEq120Db: -2.5, + preEq250Db: -1.5, + preEq500Db: -0.5, + preEq1kDb: 0.5, + preEq2k5Db: 1.5, + preEq5kDb: 2.5, + preEq8kDb: 3.5, + preEq12kDb: 0, + preEqHPFHz: 62, + preEqLPFHz: 12500, + }); + expect(v16.values).not.toHaveProperty("preEq6k4Db"); + }); +}); diff --git a/frontend/src/__tests__/namAssetIdentity.test.ts b/frontend/src/__tests__/namAssetIdentity.test.ts new file mode 100644 index 0000000..e5cbd6f --- /dev/null +++ b/frontend/src/__tests__/namAssetIdentity.test.ts @@ -0,0 +1,41 @@ +import { describe, expect, it } from "vitest"; +import { + findNAMAssetByIdentity, + NAMAssetIdentityKeys, + normalizeNAMAssetChecksum, + stableNAMAssetId, + withStableNAMAssetIdentity, +} from "../utils/namAssetIdentity"; + +const HASH = "a".repeat(64); + +describe("portable NAM asset identity", () => { + it("normalizes supported SHA-256 spellings and rejects malformed values", () => { + expect(normalizeNAMAssetChecksum(`SHA256:${HASH.toUpperCase()}`)).toBe(HASH); + expect(normalizeNAMAssetChecksum(`sha256=${HASH}`)).toBe(HASH); + expect(normalizeNAMAssetChecksum("abc")).toBe(""); + }); + + it("prefers file content identity over provider identifiers", () => { + expect(stableNAMAssetId({ checksum: HASH, modelId: 42 })).toBe(`sha256:${HASH}`); + expect(stableNAMAssetId({ sourceProvider: "TONE3000", modelId: 42 })).toBe("tone3000:model:42"); + }); + + it("finds a moved library record by checksum without relying on its path", () => { + const records = [ + { localPath: "D:/NAM/new-version.nam", checksum: "c".repeat(64), modelId: 42 }, + { localPath: "D:/NAM/moved.nam", checksum: HASH, modelId: 42 }, + { localPath: "D:/NAM/other.nam", checksum: "b".repeat(64), modelId: 99 }, + ]; + expect(findNAMAssetByIdentity(records, { + path: "C:/old/capture.nam", + checksum: HASH, + } as any)?.localPath).toBe("D:/NAM/moved.nam"); + }); + + it("persists a canonical asset id and non-duplicated lookup keys", () => { + const identified = withStableNAMAssetIdentity({ checksum: `sha256:${HASH}`, modelId: 7 }); + expect(identified.assetId).toBe(`sha256:${HASH}`); + expect(NAMAssetIdentityKeys(identified)).toEqual([`sha256:${HASH}`, "model:7"]); + }); +}); diff --git a/frontend/src/__tests__/namAssetRecovery.test.ts b/frontend/src/__tests__/namAssetRecovery.test.ts new file mode 100644 index 0000000..120084c --- /dev/null +++ b/frontend/src/__tests__/namAssetRecovery.test.ts @@ -0,0 +1,69 @@ +import { describe, expect, it } from "vitest"; + +import type { BuiltInPluginSchema } from "../services/NativeBridge"; +import { resolveNAMRackMissingAssets } from "../utils/namAssetRecovery"; + +function schema(overrides: Partial = {}): BuiltInPluginSchema { + return { + schemaVersion: 1, + name: "OpenStudio NAM Rack", + category: "NAM", + chain: "track", + fxIndex: 0, + parameters: [ + { id: "pedalMix", label: "Pedal", type: "continuous", value: 1, min: 0, max: 1, defaultValue: 1 }, + { id: "ampEnabled", label: "Amp", type: "toggle", value: 1, min: 0, max: 1, defaultValue: 1 }, + { id: "cabEnabled", label: "Cab", type: "toggle", value: 1, min: 0, max: 1, defaultValue: 1 }, + ], + modelState: {}, + ...overrides, + }; +} + +describe("NAM current-rack asset recovery", () => { + it("distinguishes missing resources from intentionally empty slots", () => { + const result = resolveNAMRackMissingAssets(schema({ + modelState: { + pedalModelPath: "", + ampModelPath: "D:/Session/Missing Amp.nam", + cabIRPath: "", + hasPedalModel: false, + hasAmpModel: false, + hasCabIR: false, + cabIRState: "empty", + }, + })); + + expect(result).toEqual([ + expect.objectContaining({ slot: "amp", path: "D:/Session/Missing Amp.nam", bypassed: false }), + ]); + }); + + it("reports the native missing IR state and preserves bypass truth", () => { + const base = schema({ + parameters: [ + { id: "cabEnabled", label: "Cab", type: "toggle", value: 0, min: 0, max: 1, defaultValue: 1 }, + ], + modelState: { + cabIRPath: "D:/Session/Missing Cab.wav", + hasCabIR: false, + cabIRState: "missing", + }, + }); + + expect(resolveNAMRackMissingAssets(base)).toEqual([ + expect.objectContaining({ slot: "cab", bypassParamId: "cabEnabled", bypassed: true }), + ]); + }); + + it("does not treat a valid but bypassed resource as missing", () => { + const result = resolveNAMRackMissingAssets(schema({ + parameters: [ + { id: "ampEnabled", label: "Amp", type: "toggle", value: 0, min: 0, max: 1, defaultValue: 1 }, + ], + modelState: { ampModelPath: "D:/Session/Valid Amp.nam", hasAmpModel: true }, + })); + + expect(result).toEqual([]); + }); +}); diff --git a/frontend/src/__tests__/namCabPresentationFeedback.test.ts b/frontend/src/__tests__/namCabPresentationFeedback.test.ts new file mode 100644 index 0000000..dfcb435 --- /dev/null +++ b/frontend/src/__tests__/namCabPresentationFeedback.test.ts @@ -0,0 +1,27 @@ +import { describe, expect, it } from "vitest"; + +import { resolveNAMRackCabPresentation } from "../components/NAMCabPresentation"; + +describe("NAM Rack cabinet presentation feedback", () => { + it("makes a retained external IR's bypass state explicit for an embedded cab", () => { + const presentation = resolveNAMRackCabPresentation({ + hasAmpCapture: true, + hasCabIR: true, + embeddedCabCapture: true, + }); + + expect(presentation.mode).toBe("embedded"); + expect(presentation.hasRetainedExternalIR).toBe(true); + expect(presentation.status).toContain("retained external IR is bypassed"); + }); + + it("explains that the external stage is bypassed even when no IR is retained", () => { + const presentation = resolveNAMRackCabPresentation({ + hasAmpCapture: true, + hasCabIR: false, + embeddedCabCapture: true, + }); + + expect(presentation.status).toContain("external Cab/IR stage is bypassed"); + }); +}); diff --git a/frontend/src/__tests__/namCabRoomConsoleLayout.test.ts b/frontend/src/__tests__/namCabRoomConsoleLayout.test.ts new file mode 100644 index 0000000..dfad600 --- /dev/null +++ b/frontend/src/__tests__/namCabRoomConsoleLayout.test.ts @@ -0,0 +1,95 @@ +// @ts-expect-error The app tsconfig omits Node builtin typings, while Vitest runs this source audit in Node. +import { readFileSync } from "node:fs"; +import { describe, expect, it } from "vitest"; +import { + computePremiumStagePlacement, + NAM_CAB_ROOM_CONSOLE_LAYOUT, + NAM_PANEL_ROTARY_VARIANT_PX, +} from "../components/NAMRackDesignPort"; + +describe("NAM Rack integrated Cab and Room console", () => { + it("fits the approved single IR shaper and Room console at every stage size", () => { + const { group, console } = NAM_CAB_ROOM_CONSOLE_LAYOUT; + + expect(console).toEqual(group); + expect(console.h).toBeGreaterThan(390); + expect(console.w / console.h).toBeGreaterThan(1.6); + expect(console.w / console.h).toBeLessThan(1.7); + + for (const viewport of [ + { width: 720, height: 410 }, + { width: 1010, height: 520 }, + { width: 1530, height: 775 }, + ]) { + for (const size of [80, 100, 140, 180, 220]) { + const placement = computePremiumStagePlacement(viewport, group, size); + for (const box of [console]) { + const left = placement.left + box.x * placement.scale; + const right = left + box.w * placement.scale; + const top = placement.top + box.y * placement.scale; + const bottom = top + box.h * placement.scale; + expect(left).toBeGreaterThanOrEqual(0); + expect(right).toBeLessThanOrEqual(viewport.width); + expect(top).toBeGreaterThanOrEqual(0); + expect(bottom).toBeLessThanOrEqual(viewport.height); + } + } + } + }); + + it("keeps seven evenly separated primary controls above a full-width Room bay", () => { + const layout = NAM_CAB_ROOM_CONSOLE_LAYOUT; + const cabRotaryRadius = NAM_PANEL_ROTARY_VARIANT_PX.cabPanel / 2; + expect(layout.topKnobXs).toHaveLength(7); + expect(NAM_PANEL_ROTARY_VARIANT_PX.cabPanel).toBe(42); + expect(layout.topKnobXs[0] / 100 * layout.console.w - cabRotaryRadius).toBeGreaterThan(0); + expect( + layout.topKnobXs[layout.topKnobXs.length - 1] / 100 * layout.console.w + cabRotaryRadius, + ).toBeLessThan(layout.console.w); + for (let index = 1; index < layout.topKnobXs.length; index += 1) { + expect(layout.topKnobXs[index] - layout.topKnobXs[index - 1]).toBeGreaterThan(12); + expect( + (layout.topKnobXs[index] - layout.topKnobXs[index - 1]) / 100 * layout.console.w, + ).toBeGreaterThan(NAM_PANEL_ROTARY_VARIANT_PX.cabPanel); + } + expect(layout.topKnobY).toBeLessThan(layout.utilityY); + expect(layout.utilityY).toBeLessThan(layout.roomBayTop); + }); + + it("binds the approved Room controls independently from the external IR lock", () => { + const source = readFileSync( + new URL("../components/NAMRackDesignPort.tsx", import.meta.url), + "utf8", + ); + const cabStageStart = source.indexOf("function CabStage("); + const cabStageEnd = source.indexOf("function EqStage()", cabStageStart); + const cabStage = source.slice(cabStageStart, cabStageEnd); + + expect(cabStage).toContain('className="cab-room-bay"'); + expect(cabStage).toContain(""); + expect(cabStage).toContain("body={BODIES.cabRoomIntegrated}"); + expect(cabStage).not.toContain('name="cabinet"'); + expect(cabStage).toContain('paramId="cabRoomAmount"'); + expect(cabStage).toContain('paramId="cabRoomWidth"'); + expect(cabStage).toContain('paramId="cabPan"'); + expect(cabStage.match(/panelRotaryVariant="cabPanel"/g)).toHaveLength(7); + expect(cabStage).toContain("POST-CAB AMBIENCE"); + expect(cabStage).toContain('roomWaitingForCabSource ? "No cab source"'); + expect(cabStage).toContain('data-status={roomWaitingForCabSource ? "no-source" : "ready"}'); + expect(cabStage).toContain("roomEnabled && !cabRoomInputSourceAvailable"); + expect(cabStage).toContain(""); + expect(cabStage.indexOf('className="cab-room-bay"')) + .toBeGreaterThan(cabStage.indexOf("")); + expect(cabStage).not.toContain(" { + expect(NAM_PANEL_ROTARY_VARIANT_PX.roomHero).toBeGreaterThan(60); + + const source = readFileSync( + new URL("../components/NAMRackDesignPort.tsx", import.meta.url), + "utf8", + ); + expect(source.match(/panelRotaryVariant="roomHero"/g)).toHaveLength(2); + }); +}); diff --git a/frontend/src/__tests__/namCabinetSpace.test.ts b/frontend/src/__tests__/namCabinetSpace.test.ts new file mode 100644 index 0000000..c86d04f --- /dev/null +++ b/frontend/src/__tests__/namCabinetSpace.test.ts @@ -0,0 +1,195 @@ +// @ts-expect-error The app tsconfig omits Node builtin typings, while Vitest runs this source audit in Node. +import { readFileSync } from "node:fs"; +import { describe, expect, it } from "vitest"; +import { resolveNAMRackCabinetSpaceActivity } from "../services/NativeBridge"; +import { + NAM_RACK_ADVANCED_CONTROL_IDS, + NAM_RACK_CAB_ADVANCED_CONTROL_GROUPS, + NAM_RACK_CABINET_SPACE_PARAM_IDS, + isNAMRackCabinetSpaceParamId, + namRackAdvancedStageForCompactModule, +} from "../components/NAMRackMixer"; +import { migrateLegacyNAMRackPresetDspState } from "../utils/namRackPresetTransactions"; + +describe("NAM Rack Cabinet Space controls", () => { + it("keeps the room and doubler in their own stable advanced-control group", () => { + expect(NAM_RACK_CABINET_SPACE_PARAM_IDS).toEqual([ + "cabRoomEnabled", + "cabRoomAmount", + "cabRoomWidth", + "cabDoublerEnabled", + "cabDoublerMix", + "cabDoublerDelayMs", + "cabDoublerSpread", + ]); + expect(NAM_RACK_CAB_ADVANCED_CONTROL_GROUPS[1]).toEqual({ + id: "room", + label: "Room", + paramIds: ["cabRoomEnabled", "cabRoomAmount", "cabRoomWidth"], + }); + expect(NAM_RACK_CAB_ADVANCED_CONTROL_GROUPS[2]).toEqual({ + id: "doubler", + label: "Doubler", + paramIds: ["cabDoublerEnabled", "cabDoublerMix", "cabDoublerDelayMs", "cabDoublerSpread"], + }); + expect(NAM_RACK_ADVANCED_CONTROL_IDS.cab).toEqual([...NAM_RACK_CAB_ADVANCED_CONTROL_GROUPS[0].paramIds]); + expect(NAM_RACK_ADVANCED_CONTROL_IDS.room).toEqual([...NAM_RACK_CAB_ADVANCED_CONTROL_GROUPS[1].paramIds]); + expect(NAM_RACK_ADVANCED_CONTROL_IDS.doubler).toEqual([...NAM_RACK_CAB_ADVANCED_CONTROL_GROUPS[2].paramIds]); + expect(isNAMRackCabinetSpaceParamId("cabRoomAmount")).toBe(true); + expect(isNAMRackCabinetSpaceParamId("cabRoomSend")).toBe(false); + }); + + it("uses the locked defaults in both mock schema and portable preset defaults", () => { + const bridgeSource = readFileSync(new URL("../services/NativeBridge.ts", import.meta.url), "utf8"); + const panelSource = readFileSync(new URL("../components/NAMRackPanel.tsx", import.meta.url), "utf8"); + + for (const expected of [ + 'param("cabRoomEnabled", "Room", 0, 0, 1, "", "cabinetSpace", "toggle")', + 'param("cabRoomAmount", "Room Amount", 0.22, 0, 1', + 'param("cabRoomWidth", "Room Width", 0.65, 0, 1', + 'param("cabDoublerEnabled", "Doubler", 0, 0, 1, "", "cabinetSpace", "toggle")', + 'param("cabDoublerMix", "Doubler Mix", 0.12, 0, 1', + 'param("cabDoublerDelayMs", "Doubler Delay", 4.5, 3, 20, "ms", "cabinetSpace")', + 'param("cabDoublerSpread", "Doubler Spread", 0.65, 0, 1', + ]) { + expect(bridgeSource).toContain(expected); + } + expect(panelSource).toContain("cabRoomEnabled: 0"); + expect(panelSource).toContain("cabRoomAmount: 0.22"); + expect(panelSource).toContain("cabRoomWidth: 0.65"); + expect(panelSource).toContain("cabDoublerEnabled: 0"); + expect(panelSource).toContain("cabDoublerMix: 0.12"); + expect(panelSource).toContain("cabDoublerDelayMs: 4.5"); + expect(panelSource).toContain("cabDoublerSpread: 0.65"); + expect(panelSource).toContain("paramGroups: [NAM_RACK_CAB_ADVANCED_CONTROL_GROUPS[0]]"); + expect(panelSource).toContain("Room has its own power switch"); + expect(panelSource).toContain("Doubler has its own power switch"); + expect(panelSource).toContain("before EQ, Modulation, Delay, and Reverb"); + }); + + it("fills deterministic cabinet-space values without persisting routing topology", () => { + const migrated = migrateLegacyNAMRackPresetDspState({ + values: {}, + dspState: { namEffectsDspVersion: 5, reverbEngineVersion: 3 }, + }, { completePreset: true }) as { values: Record }; + + expect(migrated.values).toMatchObject({ + cabRoomEnabled: 0, + cabRoomAmount: 0.22, + cabRoomWidth: 0.65, + cabDoublerEnabled: 0, + cabDoublerMix: 0.12, + cabDoublerDelayMs: 4.5, + cabDoublerSpread: 0.65, + }); + expect(migrated.values).not.toHaveProperty("inputMode"); + }); + + it("reports Room and Doubler activity independently from the external Cab/IR power", () => { + expect(resolveNAMRackCabinetSpaceActivity(0, 0)).toEqual({ + active: false, + roomActive: false, + doublerActive: false, + label: "", + }); + expect(resolveNAMRackCabinetSpaceActivity(1, 0)).toEqual({ + active: true, + roomActive: true, + doublerActive: false, + label: "Room", + }); + expect(resolveNAMRackCabinetSpaceActivity(0, 1)).toEqual({ + active: true, + roomActive: false, + doublerActive: true, + label: "Doubler", + }); + expect(resolveNAMRackCabinetSpaceActivity(1, 1)).toEqual({ + active: true, + roomActive: true, + doublerActive: true, + label: "Room + Doubler", + }); + expect(resolveNAMRackCabinetSpaceActivity(Number.NaN, undefined)).toEqual({ + active: false, + roomActive: false, + doublerActive: false, + label: "", + }); + expect(resolveNAMRackCabinetSpaceActivity(0.49, 0.49)).toEqual({ + active: false, + roomActive: false, + doublerActive: false, + label: "", + }); + }); + + it("keeps compact Cab/IR, Room, and Doubler independently powered without duplicate advanced editors", () => { + const panelSource = readFileSync(new URL("../components/NAMRackPanel.tsx", import.meta.url), "utf8"); + + expect(panelSource).toContain("const cabinetStageActive = embeddedCabCapture || cabActive || cabinetSpaceAudible"); + expect(panelSource).toContain('id: "room"'); + expect(panelSource).toContain('label: "Room"'); + expect(panelSource).toContain('id: "doubler"'); + expect(panelSource).toContain('label: "Doubler"'); + expect(panelSource).toContain("const toggleRoom = () => toggleEffectPower(cabRoomEnabledParam, roomActive)"); + expect(panelSource).toContain("const toggleDoubler = () => toggleEffectPower(cabDoublerEnabledParam, doublerActive)"); + expect(panelSource).not.toContain("toggleCabinetSpacePower"); + expect(panelSource).not.toContain("cabinetSpaceBusy"); + expect(panelSource).toContain('onToggle: !cabEnabledParam || !cabPresentation.canToggleExternalCab ? undefined : toggleCabPower'); + expect(namRackAdvancedStageForCompactModule("cab-ir")).toBeNull(); + expect(namRackAdvancedStageForCompactModule("room")).toBeNull(); + expect(namRackAdvancedStageForCompactModule("doubler")).toBeNull(); + }); + + it("preserves an enabled Room while reporting that no speaker-voiced cab source is available", () => { + const panelSource = readFileSync(new URL("../components/NAMRackPanel.tsx", import.meta.url), "utf8"); + + expect(panelSource).toContain('booleanFromRecord(rackDiagnostics, "cabRoomInputSourceAvailable")'); + expect(panelSource).toContain("?? (cabActive || (ampActive && embeddedCabCapture))"); + expect(panelSource).toContain("const roomWaitingForCabSource = roomActive && !cabRoomInputSourceAvailable"); + expect(panelSource).toContain('roomWaitingForCabSource ? "No cab source"'); + expect(panelSource).toContain("enabled: roomActive"); + expect(panelSource).not.toContain("onParamChange(cabRoomEnabledParam, 0)"); + }); + + it("keeps Doubler visible globally and pauses it in Stereo without rewriting its saved settings", () => { + const panelSource = readFileSync(new URL("../components/NAMRackPanel.tsx", import.meta.url), "utf8"); + + expect(panelSource).toContain("const doublerAudible = doublerActive && !stereoInputActive"); + expect(panelSource).toContain('className="nam-neural-global-knob nam-neural-global-doubler"'); + expect(panelSource).toContain("the DAW route is stereo"); + expect(panelSource).toContain("disabled={stereoInputActive}"); + expect(panelSource).toContain('paramById(params, "cabDoublerDelayMs")'); + expect(panelSource).toContain("Mix, Delay, and Spread are preserved"); + expect(panelSource).not.toContain("onParamChange(cabDoublerEnabledParam, 0)"); + }); + + it("binds an uncluttered 3-20 ms Delay control and explicit readout on the current Doubler asset", () => { + const designSource = readFileSync(new URL("../components/NAMRackDesignPort.tsx", import.meta.url), "utf8"); + const utilityStart = designSource.indexOf("function PremiumHeaderUtility("); + const utilityEnd = designSource.indexOf("function BoundDistortionModeDisplay", utilityStart); + const doublerUtility = designSource.slice(utilityStart, utilityEnd); + + expect(doublerUtility).toContain('useBoundDesignParam("cabDoublerDelayMs")'); + expect(doublerUtility).toContain('data-utility-rotary="delay"'); + expect(doublerUtility).toContain('paramId="cabDoublerDelayMs"'); + expect(doublerUtility).toContain("Delay"); + expect(doublerUtility).toContain("{doublerDelayLabel}"); + expect(doublerUtility).toContain('"4.5 ms"'); + }); + + it("keeps legacy cabRoomSend named Bloom rather than misrepresenting it as the new room", () => { + const design = readFileSync(new URL("../components/NAMRackDesignPort.tsx", import.meta.url), "utf8"); + const paramIndex = design.indexOf('paramId="cabRoomSend"'); + const controlStart = design.lastIndexOf("", paramIndex); + const control = design.slice(controlStart, controlEnd + 2); + + expect(paramIndex).toBeGreaterThan(-1); + expect(controlStart).toBeGreaterThan(-1); + expect(control).toContain('paramId="cabRoomSend"'); + expect(control).toContain('labelText="LOW BLOOM"'); + expect(control).not.toContain('labelText="ROOM"'); + }); +}); diff --git a/frontend/src/__tests__/namCaptureActivation.test.ts b/frontend/src/__tests__/namCaptureActivation.test.ts new file mode 100644 index 0000000..958852c --- /dev/null +++ b/frontend/src/__tests__/namCaptureActivation.test.ts @@ -0,0 +1,217 @@ +import { describe, expect, it } from "vitest"; + +import { + expectedNAMEffectiveCabEnabled, + inspectNAMCaptureActivation, + inspectNAMCaptureSchemaActivation, + namCaptureUsePhaseLabel, + namCaptureStateFromSchema, +} from "../utils/namCaptureActivation"; + +describe("NAM capture activation readback", () => { + it("derives the effective Cab invariant from request and embedded topology", () => { + expect(expectedNAMEffectiveCabEnabled(true, false)).toBe(true); + expect(expectedNAMEffectiveCabEnabled(false, false)).toBe(false); + expect(expectedNAMEffectiveCabEnabled(true, true)).toBe(false); + expect(expectedNAMEffectiveCabEnabled(false, true)).toBe(false); + }); + + it("exposes the complete professional Use lifecycle for browser QA", () => { + expect(["downloading", "preparing", "activating", "success", "error"].map((phase) => + namCaptureUsePhaseLabel(phase as Parameters[0]), + )).toEqual([ + "Downloading...", + "Installing / Preparing...", + "Activating...", + "Activated", + "Retry Use Capture", + ]); + }); + + it("does not accept a matching path when the amp graph failed to load", () => { + const result = inspectNAMCaptureActivation({ + modelState: { + ampModelPath: "C:/OpenStudio/NAM/library/tone-42/Crunch.nam", + hasAmpModel: false, + lastLoadError: "Unsupported NAM architecture", + }, + values: { auditionSource: 0 }, + uiState: { namActivePreview: null }, + }, "amp", "c:\\openstudio\\nam\\library\\tone-42\\crunch.nam", { + requirePreviewCleared: true, + }); + + expect(result.verified).toBe(false); + expect(result.pathMatches).toBe(true); + expect(result.resourceLoaded).toBe(false); + expect(result.reason).toBe("Unsupported NAM architecture"); + }); + + it("requires the chosen capture, loaded graph, live input, and cleared preview marker", () => { + expect(inspectNAMCaptureActivation({ + modelState: { + ampModelPath: "C:/NAM/Chosen.nam", + hasAmpModel: true, + cabRequestedEnabled: true, + lastLoadError: "", + }, + values: { auditionSource: 0, ampEnabled: 1, ampMix: 1, cabEnabled: 1 }, + uiState: { namActivePreview: null }, + }, "amp", "C:/NAM/Chosen.nam", { + requirePreviewCleared: true, + expectedCabRequestedEnabled: true, + }).verified).toBe(true); + + expect(inspectNAMCaptureActivation({ + modelState: { + ampModelPath: "C:/NAM/Chosen.nam", + hasAmpModel: true, + cabRequestedEnabled: true, + }, + values: { auditionSource: 1, ampEnabled: 1, ampMix: 1, cabEnabled: 1 }, + uiState: { namActivePreview: { slot: "amp" } }, + }, "amp", "C:/NAM/Chosen.nam", { + requirePreviewCleared: true, + })).toMatchObject({ + verified: false, + liveSource: false, + previewCleared: false, + }); + }); + + it("validates the exact schema accepted by the rack view before leaving the library", () => { + const emptySchema = { + parameters: [ + { id: "auditionSource", value: 0 }, + { id: "ampEnabled", value: 1 }, + { id: "ampMix", value: 1 }, + { id: "cabEnabled", value: 0 }, + ], + modelState: { + ampModelPath: "", + hasAmpModel: false, + cabRequestedEnabled: false, + }, + uiState: { namActivePreview: null }, + }; + const acceptedSchema = { + ...emptySchema, + parameters: emptySchema.parameters.map((parameter) => + parameter.id === "cabEnabled" ? { ...parameter, value: 1 } : parameter, + ), + modelState: { + ampModelPath: "C:/NAM/Installed/Chosen.nam", + hasAmpModel: true, + ampIncludesCab: false, + cabRequestedEnabled: true, + lastLoadError: "", + }, + }; + + expect(namCaptureStateFromSchema(acceptedSchema)?.values).toMatchObject({ + auditionSource: 0, + ampEnabled: 1, + ampMix: 1, + cabEnabled: 1, + }); + expect(inspectNAMCaptureSchemaActivation( + emptySchema, + "amp", + "C:/NAM/Installed/Chosen.nam", + { + requireLiveSource: true, + requirePreviewCleared: true, + expectedCabRequestedEnabled: true, + }, + ).verified).toBe(false); + expect(inspectNAMCaptureSchemaActivation( + acceptedSchema, + "amp", + "c:\\nam\\installed\\chosen.nam", + { + requireLiveSource: true, + requirePreviewCleared: true, + expectedCabRequestedEnabled: true, + }, + )).toMatchObject({ + verified: true, + pathMatches: true, + resourceLoaded: true, + liveSource: true, + previewCleared: true, + }); + }); + + it("requires an activated amp capture to have power, wet mix, and preserved Cab intent", () => { + const baseState = { + modelState: { + ampModelPath: "C:/NAM/Chosen.nam", + hasAmpModel: true, + cabRequestedEnabled: true, + }, + values: { + auditionSource: 0, + cabEnabled: 1, + ampEnabled: 1, + ampMix: 1, + }, + }; + + expect(inspectNAMCaptureActivation({ + ...baseState, + values: { ...baseState.values, ampEnabled: 0 }, + }, "amp", "C:/NAM/Chosen.nam", { + expectedCabRequestedEnabled: true, + }).reason).toBe("The amp capture loaded but Amp Power remained off."); + + expect(inspectNAMCaptureActivation({ + ...baseState, + values: { ...baseState.values, ampMix: 0 }, + }, "amp", "C:/NAM/Chosen.nam", { + expectedCabRequestedEnabled: true, + }).reason).toBe("The amp capture loaded but Capture Mix remained fully dry."); + + expect(inspectNAMCaptureActivation({ + ...baseState, + modelState: { ...baseState.modelState, cabRequestedEnabled: false }, + }, "amp", "C:/NAM/Chosen.nam", { + expectedCabRequestedEnabled: true, + }).reason).toBe("The rack did not preserve the requested external-cabinet preference."); + + expect(inspectNAMCaptureActivation({ + ...baseState, + modelState: { ...baseState.modelState, ampIncludesCab: true }, + values: { ...baseState.values, cabEnabled: 1 }, + }, "amp", "C:/NAM/Chosen.nam", { + expectedCabRequestedEnabled: true, + }).reason).toBe("The effective Cab/IR state did not match the requested preference and amp topology."); + + expect(inspectNAMCaptureActivation({ + ...baseState, + values: { ...baseState.values, cabEnabled: 0 }, + }, "amp", "C:/NAM/Chosen.nam", { + expectedCabRequestedEnabled: true, + }).reason).toBe("The effective Cab/IR state did not match the requested preference and amp topology."); + + expect(inspectNAMCaptureActivation({ + ...baseState, + modelState: { ...baseState.modelState, cabRequestedEnabled: false }, + values: { ...baseState.values, cabEnabled: 1 }, + }, "amp", "C:/NAM/Chosen.nam", { + expectedCabRequestedEnabled: false, + }).reason).toBe("The effective Cab/IR state did not match the requested preference and amp topology."); + + expect(inspectNAMCaptureActivation({ + ...baseState, + modelState: { ...baseState.modelState, ampIncludesCab: true }, + values: { ...baseState.values, cabEnabled: 0 }, + }, "amp", "C:/NAM/Chosen.nam", { + expectedCabRequestedEnabled: true, + })).toMatchObject({ + verified: true, + expectedEffectiveCabEnabled: false, + cabTopologySafe: true, + }); + }); + +}); diff --git a/frontend/src/__tests__/namCaptureUseFlow.test.ts b/frontend/src/__tests__/namCaptureUseFlow.test.ts new file mode 100644 index 0000000..a854f53 --- /dev/null +++ b/frontend/src/__tests__/namCaptureUseFlow.test.ts @@ -0,0 +1,133 @@ +// @ts-expect-error The app tsconfig omits Node builtin typings, while Vitest runs this source audit in Node. +import { readFileSync } from "node:fs"; +import { describe, expect, it } from "vitest"; + +const explorerSource = readFileSync( + new URL("../components/NAMExplorer.tsx", import.meta.url), + "utf8", +).replace(/\r\n?/g, "\n"); +const useFlowStart = explorerSource.indexOf("const useSourceFlowSelection = async"); +const useFlowEnd = explorerSource.indexOf("const applySourceFlowDesignTab", useFlowStart); +const useFlowSource = explorerSource.slice(useFlowStart, useFlowEnd); +const auditionPublishStart = explorerSource.indexOf("const loadRecordForAudition = async"); +const auditionPublishEnd = explorerSource.indexOf("const loadRecordIntoCabIR = async", auditionPublishStart); +const auditionPublishSource = explorerSource.slice(auditionPublishStart, auditionPublishEnd); +const sourceFlowTargetsStart = explorerSource.indexOf("const sourceFlowTargetCards ="); +const sourceFlowTargetsEnd = explorerSource.indexOf("const sourceCategoryLabel =", sourceFlowTargetsStart); +const sourceFlowTargetsSource = explorerSource.slice(sourceFlowTargetsStart, sourceFlowTargetsEnd); +const sourceFlowHeaderStart = explorerSource.indexOf('
'); +const sourceFlowHeaderEnd = explorerSource.indexOf('
", monoInputStart); + const monoInputMarkup = monoHtml.slice(monoInputStart, monoInputEnd); + const monoOutputStart = monoHtml.indexOf('data-qa="nam-output-peak-meter"'); + const monoOutputEnd = monoHtml.indexOf("
", monoOutputStart); + const monoOutputMarkup = monoHtml.slice(monoOutputStart, monoOutputEnd); + + expect(monoInputMarkup).toContain('data-channel-count="1"'); + expect(monoInputMarkup).toContain('data-meter-channel="mono"'); + expect(monoInputMarkup).not.toContain('data-meter-channel="right"'); + expect(monoInputMarkup).toContain('aria-label="Pre-trim input level: mono peak -6.0 dBFS"'); + expect(monoOutputMarkup).toContain('data-channel-count="2"'); + expect(monoOutputMarkup).toContain('data-meter-channel="left"'); + expect(monoOutputMarkup).toContain('data-meter-channel="right"'); + expect(monoOutputMarkup).toContain('aria-label="Output level: left -3.0 dBFS, right -15.0 dBFS"'); + + const stereoHtml = renderHeaderUtility( + defaultUtilityControls, + headerParams, + { + inputLevelDb: -6, + outputLevelDb: -3, + inputLeftLevelDb: -6, + inputRightLevelDb: -24, + outputLeftLevelDb: -3, + outputRightLevelDb: -15, + inputChannelCount: 2, + }, + ); + const stereoInputStart = stereoHtml.indexOf('data-qa="nam-input-peak-meter"'); + const stereoInputEnd = stereoHtml.indexOf("
", stereoInputStart); + const stereoInputMarkup = stereoHtml.slice(stereoInputStart, stereoInputEnd); + + expect(stereoInputMarkup).toContain('data-channel-count="2"'); + expect(stereoInputMarkup).toContain('data-meter-channel="left"'); + expect(stereoInputMarkup).toContain('data-meter-channel="right"'); + expect(stereoInputMarkup).toContain('aria-label="Pre-trim input level: left -6.0 dBFS, right -24.0 dBFS"'); + }); + + it("renders all responsive header regions for browser geometry coverage", () => { + const html = renderHeaderUtility(); + + expect(html).toContain('data-qa="nam-input-control-bay"'); + expect(html).toContain('class="preset-area '); + expect(html).toContain('class="preset-console '); + expect(html).toContain('data-qa="nam-header-utility"'); + expect(html).toContain('data-qa="nam-output-control-bay"'); + expect(html).toContain('class="premium-oversampling-selector"'); + expect(html).toContain('data-qa="nam-oversampling-4x"'); + }); +}); diff --git a/frontend/src/__tests__/namInputMode.test.ts b/frontend/src/__tests__/namInputMode.test.ts new file mode 100644 index 0000000..1bc808d --- /dev/null +++ b/frontend/src/__tests__/namInputMode.test.ts @@ -0,0 +1,148 @@ +// @ts-expect-error The app tsconfig omits Node builtin typings, while Vitest runs this source audit in Node. +import { readFileSync } from "node:fs"; +import { describe, expect, it } from "vitest"; +import { + nativeBridge, + projectNAMRackSchemaForUI, + resolveNAMRackOctaverPresentation, + type BuiltInPluginSchema, +} from "../services/NativeBridge"; +import { NAM_RACK_ADVANCED_CONTROL_IDS } from "../components/NAMRackMixer"; + +function schemaForNAMEffectsVersion(version: number | undefined): BuiltInPluginSchema { + return { + schemaVersion: 1, + name: "OpenStudio NAM Rack", + category: "Built-in", + chain: "track", + fxIndex: 0, + parameters: [ + { + id: "inputMode", + label: "Input Mode", + type: "enum", + value: 2, + min: 0, + max: 2, + defaultValue: 0, + enumOptions: [ + { value: 0, label: "Mono" }, + { value: 2, label: "Stereo" }, + ], + }, + { + id: "auditionSource", + label: "Demo Source", + type: "toggle", + value: 1, + min: 0, + max: 1, + defaultValue: 0, + }, + { + id: "octaverEnabled", + label: "Legacy Octaver", + type: "toggle", + value: 0, + min: 0, + max: 1, + defaultValue: 0, + }, + ], + modelState: version === undefined ? {} : { namEffectsDspVersion: version }, + }; +} + +describe("NAM Rack automatic input routing contract", () => { + it("removes the retired input-mode and audition parameters from every UI schema", () => { + for (const version of [undefined, 1, 10, 11]) { + const projected = projectNAMRackSchemaForUI(schemaForNAMEffectsVersion(version)); + expect(projected.parameters.map(({ id }) => id)).toEqual(["octaverEnabled"]); + if (version !== undefined) { + expect(projected.parameters[0].label).toBe("Stereo Poly Octaver"); + } + } + }); + + it("keeps routing topology out of the dev schema and Device Controls", () => { + const bridgeSource = readFileSync(new URL("../services/NativeBridge.ts", import.meta.url), "utf8"); + const panelSource = readFileSync(new URL("../components/NAMRackPanel.tsx", import.meta.url), "utf8"); + + expect(bridgeSource).not.toContain('param("inputMode"'); + expect(bridgeSource).not.toContain("inputMode: NAM_RACK_INPUT_MODE_OPTIONS"); + expect(bridgeSource).toContain('parameter.id !== "inputMode"'); + expect(NAM_RACK_ADVANCED_CONTROL_IDS.input).toEqual(["inputTrimDb"]); + expect(panelSource).not.toContain('paramById(params, "inputMode")'); + expect(panelSource).not.toContain("NAM_RACK_INPUT_MODE_OPTIONS"); + expect(panelSource).not.toContain("setPendingInputModeWrite"); + expect(panelSource).not.toContain('aria-label="NAM processing mode"'); + }); + + it("rejects retired dev parameter writes and prunes legacy state at set, persistence, and readback", async () => { + const scope = globalThis as any; + const previousWindow = Object.getOwnPropertyDescriptor(scope, "window"); + Object.defineProperty(scope, "window", { + configurable: true, + writable: true, + value: { + location: { search: "?mockPlugin=nam" }, + setTimeout, + clearTimeout, + }, + }); + + try { + const address = { trackId: "retired-routing-test", chain: "track" as const, fxIndex: 991 }; + expect(await nativeBridge.setBuiltInPluginState(address, JSON.stringify({ + values: { inputMode: 2, ampMix: 0.73 }, + uiState: { + namPresetBaseline: { values: { inputMode: 0, delayMix: 0.24 } }, + namRackCompare: { + snapshots: { + A: { values: { inputMode: 2, reverbMix: 0.31 } }, + }, + }, + }, + dspState: { namEffectsDspVersion: 10, reverbEngineVersion: 5 }, + }))).toBe(true); + expect(await nativeBridge.setBuiltInPluginParam(address, "inputMode", 0)).toBe(false); + + const readback = await nativeBridge.getBuiltInPluginState(address); + expect(JSON.stringify(readback)).not.toContain('"inputMode"'); + expect(readback.values.ampMix).toBe(0.73); + expect(readback.uiState.namPresetBaseline.values.delayMix).toBe(0.24); + expect(readback.uiState.namRackCompare.snapshots.A.values.reverbMix).toBe(0.31); + expect(readback.dspState.namEffectsDspVersion).toBe(19); + } finally { + if (previousWindow) { + Object.defineProperty(scope, "window", previousWindow); + } else { + delete scope.window; + } + } + }); + + it("uses native effective routing diagnostics only for behavior that depends on topology", () => { + const bridgeSource = readFileSync(new URL("../services/NativeBridge.ts", import.meta.url), "utf8"); + const panelSource = readFileSync(new URL("../components/NAMRackPanel.tsx", import.meta.url), "utf8"); + + expect(bridgeSource).toContain("inputRoutingAutomatic?: boolean"); + expect(bridgeSource).toContain("automaticInputRoutingMode?: number"); + expect(bridgeSource).toContain("effectiveInputRoutingMode?: number"); + expect(panelSource).toContain('numberFromRecord(rackLiveDiagnostics, "effectiveInputRoutingMode")'); + expect(panelSource).toContain('numberFromRecord(rackLiveDiagnostics, "activeInputRoutingMode")'); + expect(panelSource).toContain('numberFromRecord(rackLiveDiagnostics, "automaticInputRoutingMode")'); + expect(panelSource).toContain("const stereoInputActive = effectiveInputRoutingMode >= 1.5"); + expect(panelSource).toContain("the DAW route is stereo"); + }); + + it("always presents the single current stereo-poly octaver", () => { + for (const version of [1, 2, 3, 4, 5, 6, 10, 11, undefined]) { + expect(resolveNAMRackOctaverPresentation(version)).toMatchObject({ + label: "Stereo Poly Octaver", + captionPrefix: "Polyphonic stereo", + stereoPolyphonic: true, + }); + } + }); +}); diff --git a/frontend/src/__tests__/namInstrumentProfile.test.ts b/frontend/src/__tests__/namInstrumentProfile.test.ts new file mode 100644 index 0000000..9a30871 --- /dev/null +++ b/frontend/src/__tests__/namInstrumentProfile.test.ts @@ -0,0 +1,315 @@ +// @ts-expect-error The app tsconfig omits Node builtin typings, while Vitest runs this source audit in Node. +import { readFileSync } from "node:fs"; +import { createElement } from "react"; +import { renderToStaticMarkup } from "react-dom/server"; +import { afterEach, beforeEach, describe, expect, it } from "vitest"; +import { NAMExplorer } from "../components/NAMExplorer"; +import { + namCatalogSession, + namInstalledLibrarySession, + resetNAMExplorerSessionForTests, +} from "../services/namExplorerSession"; +import type { BuiltInPluginSchema, NAMCatalogTone, NAMInstalledModel } from "../services/NativeBridge"; +import { + filterAndPinNAMInstrumentItems, + labelForNAMInstrumentProfile, + namInstalledCaptureInstrumentLabels, + namInstrumentLabelsAreCompatible, + namInstrumentProfileTagIsCompatible, + namStoredPresetMatchesInstrumentProfile, + namPreEqBandLabelsForProfile, + namPreEqBandsForProfile, + normalizeNAMInstrumentProfile, + shouldClearNAMFactoryPresetIdentityOnProfileChange, +} from "../utils/namInstrumentProfile"; +import { + isCurrentNAMRackPresetState, + migrateLegacyNAMRackPresetDspState, + namInstrumentProfileMetadataFromRackState, +} from "../utils/namRackPresetTransactions"; + +describe("NAM Rack instrument profile", () => { + beforeEach(() => { + resetNAMExplorerSessionForTests(); + }); + + afterEach(() => { + resetNAMExplorerSessionForTests(); + }); + + it("defaults missing and malformed values to Guitar and keeps the enum binary", () => { + expect(normalizeNAMInstrumentProfile(undefined)).toBe(0); + expect(normalizeNAMInstrumentProfile(Number.NaN)).toBe(0); + expect(normalizeNAMInstrumentProfile(-5)).toBe(0); + expect(normalizeNAMInstrumentProfile(0.49)).toBe(0); + expect(normalizeNAMInstrumentProfile(0.5)).toBe(1); + expect(normalizeNAMInstrumentProfile(7)).toBe(0); + expect(labelForNAMInstrumentProfile(0)).toBe("Guitar"); + expect(labelForNAMInstrumentProfile(1)).toBe("Bass"); + }); + + it("keeps untagged/shared captures discoverable and hides only explicit opposite-instrument metadata", () => { + expect(namInstrumentLabelsAreCompatible([], 0)).toBe(true); + expect(namInstrumentLabelsAreCompatible(["Electric Guitar"], 0)).toBe(true); + expect(namInstrumentLabelsAreCompatible(["Electric Guitar"], 1)).toBe(false); + expect(namInstrumentLabelsAreCompatible(["Bass Guitar"], 0)).toBe(false); + expect(namInstrumentLabelsAreCompatible(["Bass Guitar"], 1)).toBe(true); + expect(namInstrumentLabelsAreCompatible(["Keys"], 1)).toBe(true); + expect(namInstrumentLabelsAreCompatible(["Guitar and Bass"], 0)).toBe(true); + expect(namInstrumentLabelsAreCompatible(["Guitar and Bass"], 1)).toBe(true); + expect(namInstrumentProfileTagIsCompatible("guitar", 0)).toBe(true); + expect(namInstrumentProfileTagIsCompatible("guitar", 1)).toBe(false); + expect(namInstrumentProfileTagIsCompatible("all", 1)).toBe(true); + }); + + it("clears only a factory identity that becomes incompatible after a real profile change", () => { + expect(shouldClearNAMFactoryPresetIdentityOnProfileChange("guitar", 0, 1)).toBe(true); + expect(shouldClearNAMFactoryPresetIdentityOnProfileChange("bass", 1, 0)).toBe(true); + expect(shouldClearNAMFactoryPresetIdentityOnProfileChange("all", 0, 1)).toBe(false); + expect(shouldClearNAMFactoryPresetIdentityOnProfileChange("guitar", 0, 0)).toBe(false); + expect(shouldClearNAMFactoryPresetIdentityOnProfileChange(undefined, 0, 1)).toBe(false); + }); + + it("reads installed instrument metadata and pins an active cross-instrument capture", () => { + const activeGuitar = { + id: "active-guitar", + instrument: "Electric Guitar", + }; + const items = [ + { id: "bass", latestMetadata: { target_instrument: { name: "Bass Guitar" } } }, + { id: "other-guitar", lastSeenMetadata: { instruments: ["Electric Guitar"] } }, + { id: "shared" }, + activeGuitar, + ]; + + expect(namInstalledCaptureInstrumentLabels(items[0])).toEqual(["Bass Guitar"]); + expect(filterAndPinNAMInstrumentItems( + items, + 1, + namInstalledCaptureInstrumentLabels, + (item) => item === activeGuitar, + ).map(({ id }) => id)).toEqual([ + "active-guitar", + "bass", + "shared", + ]); + }); + + it("uses migrated rack values, not sidecar metadata, as the preset profile authority", () => { + expect(namInstrumentProfileMetadataFromRackState({ + values: { instrumentProfile: 1 }, + })).toBe("bass"); + expect(namInstrumentProfileMetadataFromRackState({ + values: { instrumentProfile: 0 }, + })).toBe("guitar"); + expect(namInstrumentProfileMetadataFromRackState({ + values: { instrumentProfile: 99 }, + })).toBe("guitar"); + }); + + it("keeps canonical Bass presets visible when a stale sidecar says Guitar", () => { + const preset = { + instrumentProfile: "bass" as const, + metadata: { instrumentProfile: "guitar" as const }, + }; + expect(namStoredPresetMatchesInstrumentProfile(preset, 1)).toBe(true); + expect(namStoredPresetMatchesInstrumentProfile(preset, 0)).toBe(false); + }); + + it("keeps canonical Guitar presets visible when a stale sidecar says Bass", () => { + const preset = { + instrumentProfile: "guitar" as const, + metadata: { instrumentProfile: "bass" as const }, + }; + expect(namStoredPresetMatchesInstrumentProfile(preset, 0)).toBe(true); + expect(namStoredPresetMatchesInstrumentProfile(preset, 1)).toBe(false); + }); + + it("maps the stable EQ Boost IDs to profile-specific centers and user-facing labels", () => { + const guitarBands = namPreEqBandsForProfile(0); + const bassBands = namPreEqBandsForProfile(1); + + expect(guitarBands.map(({ paramId }) => paramId)).toEqual( + bassBands.map(({ paramId }) => paramId), + ); + expect(guitarBands.map(({ frequencyHz }) => frequencyHz)).toEqual([ + 120, 250, 500, 1000, 2500, 5000, 8000, 12000, + ]); + expect(bassBands.map(({ frequencyHz }) => frequencyHz)).toEqual([ + 50, 120, 250, 500, 800, 1600, 4500, 10000, + ]); + expect(guitarBands.map(({ faceplateLabel }) => faceplateLabel)).toEqual([ + "120", "250", "500", "1K", "2.5K", "5K", "8K", "12K", + ]); + expect(bassBands.map(({ faceplateLabel }) => faceplateLabel)).toEqual([ + "50", "120", "250", "500", "800", "1.6K", "4.5K", "10K", + ]); + expect(namPreEqBandLabelsForProfile(1)).toMatchObject({ + preEq120Db: "50 Hz", + preEq250Db: "120 Hz", + preEq500Db: "250 Hz", + preEq1kDb: "500 Hz", + preEq2k5Db: "800 Hz", + preEq5kDb: "1.6 kHz", + preEq8kDb: "4.5 kHz", + preEq12kDb: "10 kHz", + }); + }); + + it("migrates legacy complete presets and every latent comparison snapshot to Guitar", () => { + const migrated = migrateLegacyNAMRackPresetDspState({ + values: {}, + dspState: { namEffectsDspVersion: 7, reverbEngineVersion: 4 }, + uiState: { + namPresetBaseline: { values: {}, dspState: {} }, + namRackCompare: { + snapshots: { + A: { values: {}, dspState: {} }, + B: { values: { instrumentProfile: 1 }, dspState: { namEffectsDspVersion: 8 } }, + }, + }, + }, + }, { completePreset: true }) as any; + + expect(migrated.values.instrumentProfile).toBe(0); + expect(migrated.uiState.namPresetBaseline.values.instrumentProfile).toBe(0); + expect(migrated.uiState.namRackCompare.snapshots.A.values.instrumentProfile).toBe(0); + expect(migrated.uiState.namRackCompare.snapshots.B.values.instrumentProfile).toBe(1); + expect(isCurrentNAMRackPresetState(migrated)).toBe(true); + + const { instrumentProfile: _removed, ...incompleteValues } = migrated.values; + expect(isCurrentNAMRackPresetState({ ...migrated, values: incompleteValues })).toBe(false); + + const malformed = migrateLegacyNAMRackPresetDspState({ + values: { instrumentProfile: 9 }, + dspState: { namEffectsDspVersion: 8, reverbEngineVersion: 4 }, + }, { completePreset: true }) as any; + expect(malformed.values.instrumentProfile).toBe(0); + + const preV8Collision = migrateLegacyNAMRackPresetDspState({ + values: { instrumentProfile: 1 }, + dspState: { namEffectsDspVersion: 7, reverbEngineVersion: 4 }, + }, { completePreset: true }) as any; + expect(preV8Collision.values.instrumentProfile).toBe(0); + }); + + it("plumbs the saved enum through boot/mock schemas, all Explorer surfaces, and the header card", () => { + const bridge = readFileSync(new URL("../services/NativeBridge.ts", import.meta.url), "utf8"); + const boot = readFileSync(new URL("../components/BuiltInPluginPanel.tsx", import.meta.url), "utf8"); + const panel = readFileSync(new URL("../components/NAMRackPanel.tsx", import.meta.url), "utf8"); + const design = readFileSync(new URL("../components/NAMRackDesignPort.tsx", import.meta.url), "utf8"); + + expect(bridge).toContain('param("instrumentProfile", "Instrument", 0, 0, 1, "", "global", "enum", false)'); + expect(boot).toContain('makeFallbackParam("instrumentProfile", "Instrument", 0, 0, 1'); + expect(panel.match(/instrumentProfile=\{instrumentProfile\}/g)).toHaveLength(2); + expect(panel).toMatch(/utilityControls=\{\{\s*instrumentProfile,/); + expect(panel).toContain('id: "bass-clean-foundation"'); + expect(panel).toContain('id: "bass-grit-parallel"'); + expect(panel).toContain("designPortCompatibleInstalledCaptures"); + expect(panel).toContain("namInstalledCaptureInstrumentLabels"); + expect(panel).toContain('instrumentLabels.join(" / ")'); + expect(panel).toContain("clearIncompatibleFactoryIdentity"); + expect(panel).toContain("instrumentProfile: namInstrumentProfileMetadataFromRackState(loadedState)"); + expect(panel).toContain("instrumentProfile: namInstrumentProfileMetadataFromRackState(importedState)"); + expect(panel.match(/namStoredPresetMatchesInstrumentProfile\(entry, instrumentProfile\)/g)).toHaveLength(2); + expect(bridge).toContain('instrumentProfile?: "guitar" | "bass"'); + expect(panel).not.toContain("const savedProfile = presetMetadata[entry.name]?.instrumentProfile"); + expect(design).toContain('useBoundDesignParam("instrumentProfile")'); + }); + + it("keeps active opposite-tagged Explorer captures visible before profile filtering", () => { + const explorer = readFileSync(new URL("../components/NAMExplorer.tsx", import.meta.url), "utf8"); + expect(explorer.match(/filterAndPinNAMInstrumentItems\(/g)?.length).toBeGreaterThanOrEqual(2); + expect(explorer).toContain("installedRecordIsActive"); + expect(explorer).toContain("activeCapturePaths"); + expect(explorer).toContain("captureOptionsForInstrumentProfile"); + expect(explorer).toContain("catalogModelsForInstrumentProfile"); + expect(explorer).not.toContain("if (!namInstrumentLabelsAreCompatible(instrumentLabels, instrumentProfile)) return false;"); + }); + + it("pins active opposite-profile catalog rows by either stable model ID or URL-only identity", () => { + const urlOnlyModelUrl = "https://tone3000.example/models/url-only-active.nam"; + const catalog: NAMCatalogTone[] = [ + { + id: 10, + title: "URL-only active guitar capture", + sortBucket: "trending", + models: [{ id: 0, name: "URL capture", model_url: urlOnlyModelUrl, instrument: "Electric Guitar" }], + }, + { + id: 11, + title: "ID active guitar capture", + sortBucket: "trending", + models: [{ id: 101, name: "ID capture", model_url: "https://tone3000.example/models/id-active.nam", instrument: "Electric Guitar" }], + }, + { + id: 12, + title: "Inactive guitar capture", + sortBucket: "trending", + models: [{ id: 102, name: "Inactive capture", model_url: "https://tone3000.example/models/inactive.nam", instrument: "Electric Guitar" }], + }, + { + id: 20, + title: "Compatible bass capture", + sortBucket: "trending", + models: [{ id: 201, name: "Bass capture", model_url: "https://tone3000.example/models/bass.nam", instrument: "Bass Guitar" }], + }, + ]; + const installed: NAMInstalledModel[] = [ + { + modelId: 0, + toneId: 10, + modelUrl: urlOnlyModelUrl.toUpperCase(), + localPath: "C:\\NAM\\url-only-active.nam", + }, + { + modelId: 101, + toneId: 11, + modelUrl: "https://tone3000.example/models/id-active.nam", + localPath: "C:\\NAM\\id-active.nam", + }, + ]; + namCatalogSession.set({ tones: catalog, generatedAt: "", source: "test" }); + namInstalledLibrarySession.set({ installed }); + + const schema: BuiltInPluginSchema = { + schemaVersion: 1, + name: "NAM Rack", + category: "NAM", + chain: "track", + fxIndex: 0, + parameters: [], + modelState: { + ampModelPath: "c:/nam/URL-ONLY-ACTIVE.nam", + pedalModelPath: "c:/nam/id-active.nam", + }, + }; + const markup = renderToStaticMarkup(createElement(NAMExplorer, { + address: { trackId: "track-1", chain: "track", fxIndex: 0 }, + schema, + onRefreshRack: () => schema, + instrumentProfile: 1, + })); + + expect(markup).toContain("URL-only active guitar capture"); + expect(markup).toContain("ID active guitar capture"); + expect(markup).toContain("Compatible bass capture"); + expect(markup).not.toContain("Inactive guitar capture"); + }); + + it("routes the effective EQ Boost centers through DSP, live switching, stage labels, and accessibility", () => { + const dsp = readFileSync(new URL("../../../Source/BuiltInEffects2.cpp", import.meta.url), "utf8"); + const engine = readFileSync(new URL("../../../Source/AudioEngine.cpp", import.meta.url), "utf8"); + const panel = readFileSync(new URL("../components/NAMRackPanel.tsx", import.meta.url), "utf8"); + const design = readFileSync(new URL("../components/NAMRackDesignPort.tsx", import.meta.url), "utf8"); + + expect(dsp).toContain("kNAMRackPreEqFrequenciesByProfile"); + expect(dsp).toMatch(/50\.0f, 120\.0f, 250\.0f, 500\.0f,[\s\S]*800\.0f, 1600\.0f, 4500\.0f, 10000\.0f/); + expect(dsp).toContain("profile != lastPreEqInstrumentProfile"); + expect(engine).toContain("ProfileResponseStage::preEq"); + expect(engine).toMatch(/processDualOctaverStage\(block\);\s*liveRack\.processPreEQ\(block\);/); + expect(panel.match(/namPreEqBandLabelsForProfile\(instrumentProfile\)/g)?.length).toBe(1); + expect(design).toContain("namPreEqBandsForProfile(instrumentProfile?.value)"); + expect(design).toContain("semanticLabel={`${band.accessibleLabel} EQ Boost`}"); + }); +}); diff --git a/frontend/src/__tests__/namMeterLevel.test.ts b/frontend/src/__tests__/namMeterLevel.test.ts new file mode 100644 index 0000000..3a97225 --- /dev/null +++ b/frontend/src/__tests__/namMeterLevel.test.ts @@ -0,0 +1,31 @@ +import { describe, expect, it } from "vitest"; +import { + resolveNAMChannelMeterDb, + resolveNAMLinkedMeterDb, +} from "../utils/namMeterLevel"; + +describe("NAM Rack channel meter telemetry", () => { + it("prefers current independent channel diagnostics over linked and schema values", () => { + const diagnostics = { + inputLevelDb: -5, + inputLeftLevelDb: -7, + inputRightLevelDb: -19, + }; + + expect(resolveNAMLinkedMeterDb("input", diagnostics, -30)).toBe(-5); + expect(resolveNAMChannelMeterDb("input", "left", diagnostics, -31, -5)).toBe(-7); + expect(resolveNAMChannelMeterDb("input", "right", diagnostics, -32, -5)).toBe(-19); + }); + + it("uses a live linked value only as compatibility fallback for an older native build", () => { + const diagnostics = { outputLevelDb: -8 }; + + expect(resolveNAMChannelMeterDb("output", "left", diagnostics, -20, -8)).toBe(-8); + expect(resolveNAMChannelMeterDb("output", "right", diagnostics, -26, -8)).toBe(-8); + }); + + it("uses independent schema channels before the first live diagnostic poll", () => { + expect(resolveNAMChannelMeterDb("input", "left", null, -14, -4)).toBe(-14); + expect(resolveNAMChannelMeterDb("input", "right", null, -23, -4)).toBe(-23); + }); +}); diff --git a/frontend/src/__tests__/namMultiCaptureLifecycle.test.ts b/frontend/src/__tests__/namMultiCaptureLifecycle.test.ts new file mode 100644 index 0000000..a66c1e1 --- /dev/null +++ b/frontend/src/__tests__/namMultiCaptureLifecycle.test.ts @@ -0,0 +1,147 @@ +// @ts-expect-error The app tsconfig omits Node builtin typings, while Vitest runs this source audit in Node. +import { readFileSync } from "node:fs"; +import { beforeEach, describe, expect, it, vi } from "vitest"; +import { nativeBridge } from "../services/NativeBridge"; +import { captureTypeForToneModel } from "../utils/namCaptureType"; + +const explorerSource = readFileSync( + new URL("../components/NAMExplorer.tsx", import.meta.url), + "utf8", +).replace(/\r\n?/g, "\n"); +const designPortSource = readFileSync( + new URL("../components/NAMRackDesignPort.tsx", import.meta.url), + "utf8", +).replace(/\r\n?/g, "\n"); +const rackPanelSource = readFileSync( + new URL("../components/NAMRackPanel.tsx", import.meta.url), + "utf8", +).replace(/\r\n?/g, "\n"); + +describe("NAM multi-capture lifecycle", () => { + beforeEach(() => { + vi.stubGlobal("window", { + location: { search: "?mockPlugin=nam&mockNAMScenario=empty-rack" }, + setTimeout, + }); + }); + + it("hydrates the deterministic pack with four exact child identities", async () => { + const detail = await nativeBridge.getTONE3000ToneDetail(67139, "a2"); + expect(detail.success).toBe(true); + expect(detail.tone?.title).toBe("Headbangers Ball Amp Pack IR/RAW"); + expect(detail.models?.map((model) => model.model_id)).toEqual([ + 6713901, + 6713902, + 6713903, + 6713904, + ]); + expect(detail.models?.map((model) => captureTypeForToneModel(detail.tone!, model))).toEqual([ + "amp", + "amp_cab", + "amp", + "amp_cab", + ]); + }); + + it("keeps preview and durable paths distinct for every selected child", async () => { + const detail = await nativeBridge.getTONE3000ToneDetail(67139, "a2"); + const rawModel = detail.models![0]; + const irModel = detail.models![1]; + const rawPreview = await nativeBridge.installNAMModel(rawModel, { mode: "preview" }); + const irPreview = await nativeBridge.installNAMModel(irModel, { mode: "preview" }); + + expect(rawPreview.record?.modelId).toBe(6713901); + expect(irPreview.record?.modelId).toBe(6713902); + expect(rawPreview.record?.localPath).not.toBe(irPreview.record?.localPath); + expect(rawPreview.record?.localPath.replace(/\\/g, "/")).toContain("/previews/tone-67139/"); + + const committed = await nativeBridge.commitNAMPreviewTone(irPreview.record!, { + toneName: detail.tone!.title!, + }); + expect(committed.success).toBe(true); + expect(committed.record?.modelId).toBe(6713902); + expect(committed.record?.preview).toBe(false); + expect(committed.record?.localPath.replace(/\\/g, "/")).toContain("/library/tone-67139/"); + expect(committed.record?.localPath).not.toBe(irPreview.record?.localPath); + }); + + it("replaces RAW with cab-embedded, bypasses, re-enables, and clears without stale identity", async () => { + const address = { chain: "track" as const, trackId: "nam-multi-capture-lifecycle", fxIndex: 0 }; + const detail = await nativeBridge.getTONE3000ToneDetail(67139, "a2"); + const raw = await nativeBridge.installNAMModel(detail.models![0], { mode: "preview" }); + const embedded = await nativeBridge.installNAMModel(detail.models![1], { mode: "preview" }); + + await expect(nativeBridge.setBuiltInPluginState(address, { + modelState: { + ampModelPath: raw.record!.localPath, + ampModelSize: 1, + ampDeclaredCaptureType: "amp", + cabRequestedEnabled: true, + }, + values: { ampEnabled: 1, ampMix: 1, cabEnabled: 1 }, + })).resolves.toBe(true); + let state = await nativeBridge.getBuiltInPluginState(address); + expect(state.modelState).toMatchObject({ + ampModelPath: raw.record!.localPath, + ampCaptureType: "amp", + ampIncludesCab: false, + ampModelSize: 1, + }); + expect(state.values?.cabEnabled).toBe(1); + + await expect(nativeBridge.setBuiltInPluginState(address, { + modelState: { + ampModelPath: embedded.record!.localPath, + ampModelSize: 1, + ampDeclaredCaptureType: "amp_cab", + cabRequestedEnabled: true, + }, + values: { ampEnabled: 1, ampMix: 1 }, + })).resolves.toBe(true); + state = await nativeBridge.getBuiltInPluginState(address); + expect(state.modelState).toMatchObject({ + ampModelPath: embedded.record!.localPath, + ampCaptureType: "amp_cab", + ampIncludesCab: true, + cabRequestedEnabled: true, + }); + expect(state.values?.cabEnabled).toBe(0); + + await expect(nativeBridge.setBuiltInPluginParam(address, "ampEnabled", 0)).resolves.toBe(true); + expect((await nativeBridge.getBuiltInPluginState(address)).values?.ampEnabled).toBe(0); + await expect(nativeBridge.setBuiltInPluginParam(address, "ampEnabled", 1)).resolves.toBe(true); + expect((await nativeBridge.getBuiltInPluginState(address)).values?.ampEnabled).toBe(1); + + await expect(nativeBridge.setBuiltInPluginState(address, { + modelState: { clearAmpModel: true }, + })).resolves.toBe(true); + state = await nativeBridge.getBuiltInPluginState(address); + expect(state.modelState).toMatchObject({ + ampModelPath: "", + hasAmpModel: false, + ampCaptureType: "unknown", + ampIncludesCab: false, + }); + }); + + it("requires an explicit child and exposes the picker on desktop and compact source-flow surfaces", () => { + expect(explorerSource).toContain("namToneRequiresExplicitCapture(tone) && !rowHasExplicitSelection"); + expect(explorerSource).toContain("isExplicitNAMCatalogCaptureSelection(selectedKey, row.key, tone, model)"); + expect(explorerSource).toContain("namCatalogCaptureSelectionKey(tone, model)"); + expect(explorerSource).toContain("activePreview.key,\n selected.catalogRow.key"); + expect(explorerSource).toContain("Choose a specific capture in this pack before auditioning"); + expect(explorerSource).toContain("Choose a specific capture in this pack before using it"); + expect(explorerSource).toContain("if (models.length > 1)"); + expect(explorerSource).toContain('mode === "preview" && catalogAuditionIsActive(catalogRow)'); + expect(explorerSource).toContain('mode === "preview" && installedAuditionIsActive(installedRecord)'); + expect(explorerSource).not.toContain("models.find((candidate) => preferredTargetForToneModel(tone, candidate) === requestedTarget)"); + expect(designPortSource).toContain("className=\"tone-compact-capture-picker\""); + expect((designPortSource.match(/ { + beforeEach(() => { + bridgeInternals.isNative = true; + (globalThis as { window?: unknown }).window = { __JUCE__: { backend: {} } }; + }); + + afterEach(() => { + bridgeInternals.isNative = false; + if (originalWindow === undefined) delete (globalThis as { window?: unknown }).window; + else (globalThis as { window?: unknown }).window = originalWindow; + }); + + it("reports missing endpoints as unsupported inside a native host", async () => { + await expect(nativeBridge.getNAMRackOversamplingFactor()).rejects.toThrow("does not support"); + await expect(nativeBridge.setNAMRackOversamplingFactor(8)).resolves.toBe(false); + await expect(nativeBridge.setNAMTunerActive("track-a", true, "subscriber-a")).resolves.toBe(false); + await expect(nativeBridge.setTrackInputMonitoring("track-a", true)).resolves.toBe(false); + }); + + it("retains deterministic mocks for frontend-only development", async () => { + bridgeInternals.isNative = false; + await expect(nativeBridge.setNAMRackOversamplingFactor(8)).resolves.toBe(true); + await expect(nativeBridge.getNAMRackOversamplingFactor()).resolves.toBe(8); + await expect(nativeBridge.setNAMTunerActive("track-a", true, "subscriber-a")).resolves.toBe(true); + await expect(nativeBridge.setTrackInputMonitoring("track-a", true)).resolves.toBe(true); + }); +}); diff --git a/frontend/src/__tests__/namParameterWheelIntegration.test.ts b/frontend/src/__tests__/namParameterWheelIntegration.test.ts new file mode 100644 index 0000000..33e0891 --- /dev/null +++ b/frontend/src/__tests__/namParameterWheelIntegration.test.ts @@ -0,0 +1,87 @@ +import { describe, expect, it } from "vitest"; +import designPortSource from "../components/NAMRackDesignPort.tsx?raw"; +import rackKnobSource from "../components/NAMRackKnob.tsx?raw"; +import rackPanelSource from "../components/NAMRackPanel.tsx?raw"; + +interface WheelSourceContract { + name: string; + source: string; + handlerCount: number; + parameterHandlerCount: number; + subtarget: "control" | "graph"; +} + +const wheelSources: readonly WheelSourceContract[] = [ + // AssetControl, the vertical Fader, and HorizontalMiniFader are parameter + // handlers. The fourth onWheel belongs only to the PRE-row scroller. + { name: "design port", source: designPortSource, handlerCount: 4, parameterHandlerCount: 3, subtarget: "control" }, + { name: "rack knob", source: rackKnobSource, handlerCount: 1, parameterHandlerCount: 1, subtarget: "control" }, + { name: "rack panel", source: rackPanelSource, handlerCount: 1, parameterHandlerCount: 1, subtarget: "control" }, +]; + +function occurrenceCount(source: string, pattern: RegExp): number { + return source.match(pattern)?.length ?? 0; +} + +describe("NAM parameter wheel integration", () => { + it.each(wheelSources)( + "routes every $name wheel handler through the profiled resolver", + ({ source, handlerCount, parameterHandlerCount, subtarget }) => { + expect(occurrenceCount(source, /\bonWheel=/g)).toBe(handlerCount); + expect(occurrenceCount( + source, + new RegExp(`resolveProfiledParameterWheel\\(event\\.nativeEvent, "${subtarget}"\\)`, "g"), + )).toBe(parameterHandlerCount); + expect(occurrenceCount( + source, + /getParameterWheelStepCount\(gesture/g, + )).toBe(parameterHandlerCount); + expect(occurrenceCount( + source, + /if \(gesture\.preventDefault\) event\.preventDefault\(\);/g, + )).toBe(parameterHandlerCount); + expect(occurrenceCount( + source, + /if \(gesture\.stopPropagation\) event\.stopPropagation\(\);/g, + )).toBe(parameterHandlerCount); + expect(occurrenceCount( + source, + /if \(gesture\.operation !== "adjust"\) return;/g, + )).toBe(parameterHandlerCount); + }, + ); + + it("uses the resolved precision instead of raw Ctrl, Command, or Shift state", () => { + for (const { source, parameterHandlerCount } of wheelSources) { + let cursor = 0; + for (let index = 0; index < parameterHandlerCount; index += 1) { + const resolverStart = source.indexOf( + "const gesture = resolveProfiledParameterWheel(event.nativeEvent", + cursor, + ); + expect(resolverStart).toBeGreaterThanOrEqual(0); + const stepStart = source.indexOf("getParameterWheelStepCount(gesture", resolverStart); + expect(stepStart).toBeGreaterThan(resolverStart); + const resolutionEnd = source.indexOf(");", stepStart) + 2; + expect(resolutionEnd).toBeGreaterThan(stepStart); + const resolutionBlock = source.slice(resolverStart, resolutionEnd); + expect(resolutionBlock).not.toMatch( + /event\.(?:ctrlKey|metaKey|shiftKey|deltaY)/, + ); + cursor = resolutionEnd; + } + } + }); + + it("keeps the extra PRE-row wheel handler dedicated to horizontal scrolling", () => { + expect(occurrenceCount(designPortSource, /\bonWheel=/g)).toBe(4); + expect(occurrenceCount( + designPortSource, + /resolveProfiledParameterWheel\(event\.nativeEvent, "control"\)/g, + )).toBe(3); + expect(designPortSource).toContain('className="nam-pre-stage-scroll"'); + expect(designPortSource).toContain('target.closest(".control-hit, .horizontal-mini-fader")'); + expect(designPortSource).toContain("event.currentTarget.scrollLeft += delta"); + }); + +}); diff --git a/frontend/src/__tests__/namPedalCaptureControls.test.ts b/frontend/src/__tests__/namPedalCaptureControls.test.ts new file mode 100644 index 0000000..beaeff7 --- /dev/null +++ b/frontend/src/__tests__/namPedalCaptureControls.test.ts @@ -0,0 +1,51 @@ +// @ts-expect-error The app tsconfig omits Node builtin typings, while Vitest runs this source audit in Node. +import { readFileSync } from "node:fs"; +import { describe, expect, it } from "vitest"; +import { + NAM_RACK_ADVANCED_CONTROL_IDS, + NAM_RACK_ADVANCED_ONLY_CONTROL_IDS, + namRackAdvancedStageForCompactModule, + orderNAMRackMixerStages, + type RackMixerStripSpec, +} from "../components/NAMRackMixer"; + +const stage = (id: string): RackMixerStripSpec => ({ + id, + label: id, + caption: id, + active: false, + params: [], +}); + +describe("NAM Pedal Capture controls", () => { + it("exposes the real wet/dry control as its own Device Controls stage", () => { + expect(NAM_RACK_ADVANCED_CONTROL_IDS["pedal-capture"]).toEqual(["pedalMix"]); + expect(NAM_RACK_ADVANCED_ONLY_CONTROL_IDS["pedal-capture"]).toEqual(["pedalMix"]); + expect(namRackAdvancedStageForCompactModule("pedal-capture")).toBe("pedal-capture"); + + const ordered = orderNAMRackMixerStages([ + stage("amp"), + stage("pedal-capture"), + stage("chaos"), + ], []); + expect(ordered.map((entry) => entry.id)).toEqual(["chaos", "pedal-capture", "amp"]); + }); + + it("shows loaded identity, Mix, and truthful bypass semantics in the compact chain", () => { + const panelSource = readFileSync(new URL("../components/NAMRackPanel.tsx", import.meta.url), "utf8"); + const captureCoreStart = panelSource.indexOf("const signalChainCaptureCore"); + const captureCoreEnd = panelSource.indexOf("const signalChainPost", captureCoreStart); + const captureCore = panelSource.slice(captureCoreStart, captureCoreEnd); + + expect(panelSource).toContain('const togglePedalCapture = () => toggleParamPower("pedal", pedalMix, pedalActive, 0, 1)'); + expect(panelSource).toContain('label: "Pedal Capture"'); + expect(panelSource).toContain('params: stageParams(NAM_RACK_ADVANCED_ONLY_CONTROL_IDS["pedal-capture"], { pedalMix: "Mix" })'); + expect(panelSource).toContain("Mix is also this capture's power control: 0% is a true bypass."); + expect(captureCore).toContain('id: "pedal-capture"'); + expect(captureCore).toContain('caption: pedalName || "No capture loaded"'); + expect(captureCore).toContain('? formatPercentParam(pedalMix, "Mix", "Engaged")'); + expect(captureCore).toContain(': "Bypassed · Mix 0%"'); + expect(captureCore).toContain('onToggle: hasPedalModel && pedalMix ? togglePedalCapture : undefined'); + expect(captureCore.indexOf('id: "pedal-capture"')).toBeLessThan(captureCore.indexOf('id: "amp-nam"')); + }); +}); diff --git a/frontend/src/__tests__/namPortableState.test.ts b/frontend/src/__tests__/namPortableState.test.ts new file mode 100644 index 0000000..06c5878 --- /dev/null +++ b/frontend/src/__tests__/namPortableState.test.ts @@ -0,0 +1,179 @@ +import { describe, expect, it } from "vitest"; +import { + isRetiredNAMRackAutomationParamId, + normalizeNAMEffectsDspVersion, + omitNAMNonPortableState, + pruneRetiredNAMRackInputRoutingState, + sanitizeNAMRackDspState, + sanitizeNAMRackPortableDspState, +} from "../utils/namPortableState"; + +describe("portable NAM Rack state", () => { + it("recursively omits interface, runtime, and retired effect state", () => { + const state = { + calibrationReferenceDbu: -10, + auditionSource: 1, + inputMode: 2, + laserEnabled: 1, + laserMode: 4, + laserMix: 0.5, + laserSpeedHz: 2.5, + laserSensitivity: 0.6, + laserEnvelopeMode: 1, + laserTrigger: 1, + precisionDriveMode: 1, + tapeEchoEnabled: 1, + tapeEchoMix: 0.6, + reverbCharacter: 2, + reverbFreeze: 1, + inputTrimDb: 2, + chaosGate: 0.22, + cabRoomEnabled: 0, + cabRoomAmount: 0.73, + cabDoublerEnabled: 1, + cabDoublerMix: 0.24, + uiState: { + compare: { + calibrationReferenceDbu: 4, + auditionSource: 1, + inputMode: 0, + laserEnabled: 1, + laserMode: 2, + laserMix: 0.4, + laserTrigger: 1, + precisionDriveMode: 1, + tapeEchoFeedback: 0.72, + reverbWidth: 0.4, + reverbShimmerRegen: 0.8, + ampMix: 0.75, + }, + }, + }; + + const json = JSON.stringify(state, omitNAMNonPortableState); + expect(json).not.toContain("calibrationReferenceDbu"); + expect(json).not.toContain("auditionSource"); + expect(json).not.toContain("inputMode"); + expect(json).not.toContain("laser"); + expect(json).not.toContain("precisionDriveMode"); + expect(json).not.toContain("tapeEcho"); + expect(json).not.toContain("reverbCharacter"); + expect(json).not.toContain("reverbFreeze"); + expect(json).not.toContain("reverbWidth"); + expect(json).not.toContain("reverbShimmerRegen"); + expect(JSON.parse(json)).toEqual({ + inputTrimDb: 2, + chaosGate: 0.22, + cabRoomEnabled: 0, + cabRoomAmount: 0.73, + cabDoublerEnabled: 1, + cabDoublerMix: 0.24, + uiState: { compare: { ampMix: 0.75 } }, + }); + }); + + it("also strips those keys while importing a bundle", () => { + const imported = JSON.parse( + '{"state":{"auditionSource":1,"inputMode":2,"laserEnabled":1,"laserMode":5,"laserTrigger":1,"precisionDriveMode":1,"tapeEchoEnabled":1,"tapeEchoTimeMs":420,"calibrationReferenceDbu":-18,"outputTrimDb":-1}}', + omitNAMNonPortableState, + ); + expect(imported).toEqual({ state: { outputTrimDb: -1 } }); + }); + + it("recursively prunes only the retired routing selector from live-compatible state", () => { + expect(pruneRetiredNAMRackInputRoutingState({ + values: { inputMode: 2, auditionSource: 1, ampMix: 0.75 }, + uiState: { + namPresetBaseline: { values: { inputMode: 0, delayMix: 0.2 } }, + list: [{ inputMode: 2, keep: true }], + }, + })).toEqual({ + values: { auditionSource: 1, ampMix: 0.75 }, + uiState: { + namPresetBaseline: { values: { delayMix: 0.2 } }, + list: [{ keep: true }], + }, + }); + }); + + it("identifies retired effect and Precision mode automation lanes without touching current parameters", () => { + const legacyLanes = [ + { param: "builtin_track_0_laserEnabled", points: [{ time: 0, value: 0 }] }, + { param: "builtin_input_12_laserTrigger", points: [{ time: 2, value: 1 }] }, + { param: "builtin_track_0_reverbCharacter", points: [{ time: 0, value: 2 }] }, + { param: "builtin_track_0_reverbFreeze", points: [{ time: 1, value: 1 }] }, + { param: "builtin_input_12_reverbShimmerRegen", points: [{ time: 2, value: 0.8 }] }, + { param: "builtin_track_0_precisionDriveMode", points: [{ time: 3, value: 1 }] }, + { param: "builtin_track_0_compressorDetail", points: [{ time: 4, value: 0.55 }] }, + { param: "builtin_track_0_auditionSource", points: [{ time: 5, value: 1 }] }, + { param: "builtin_track_0_inputMode", points: [{ time: 6, value: 2 }] }, + { param: "builtin_track_0_tapeEchoEnabled", points: [{ time: 7, value: 1 }] }, + { param: "builtin_input_12_tapeEchoTone", points: [{ time: 8, value: 0.5 }] }, + ]; + + expect(legacyLanes.every((lane) => isRetiredNAMRackAutomationParamId(lane.param))).toBe(true); + expect(isRetiredNAMRackAutomationParamId("builtin_track_0_reverbShimmer")).toBe(false); + expect(isRetiredNAMRackAutomationParamId("builtin_track_42_compressorAttackMs")).toBe(false); + expect(isRetiredNAMRackAutomationParamId("builtin_track_42_compressorReleaseMs")).toBe(false); + expect(isRetiredNAMRackAutomationParamId("laserEnabled")).toBe(false); + }); + + it("canonicalizes recognized portable NAM Rack selectors to the current DSP", () => { + expect(normalizeNAMEffectsDspVersion(1)).toBe(19); + expect(normalizeNAMEffectsDspVersion("3")).toBe(19); + expect(normalizeNAMEffectsDspVersion(0)).toBeUndefined(); + expect(normalizeNAMEffectsDspVersion(4)).toBe(19); + expect(normalizeNAMEffectsDspVersion(5)).toBe(19); + expect(normalizeNAMEffectsDspVersion(6)).toBe(19); + expect(normalizeNAMEffectsDspVersion(7)).toBe(19); + expect(normalizeNAMEffectsDspVersion(8)).toBe(19); + expect(normalizeNAMEffectsDspVersion(9)).toBe(19); + expect(normalizeNAMEffectsDspVersion(10)).toBe(19); + expect(normalizeNAMEffectsDspVersion(11)).toBe(19); + expect(normalizeNAMEffectsDspVersion(12)).toBe(19); + expect(normalizeNAMEffectsDspVersion(13)).toBe(19); + expect(normalizeNAMEffectsDspVersion(14)).toBe(19); + expect(normalizeNAMEffectsDspVersion(15)).toBe(19); + expect(normalizeNAMEffectsDspVersion(16)).toBe(19); + expect(normalizeNAMEffectsDspVersion(17)).toBe(19); + expect(normalizeNAMEffectsDspVersion(18)).toBe(19); + expect(normalizeNAMEffectsDspVersion(19)).toBe(19); + expect(normalizeNAMEffectsDspVersion(20)).toBeUndefined(); + expect(sanitizeNAMRackDspState({ + reverbEngineVersion: 5, + namEffectsDspVersion: 19, + unknownEngineVersion: 99, + })).toEqual({ + reverbEngineVersion: 5, + namEffectsDspVersion: 19, + }); + expect(sanitizeNAMRackDspState({ + reverbEngineVersion: 2, + namEffectsDspVersion: 8, + })).toEqual({ reverbEngineVersion: 5, namEffectsDspVersion: 19 }); + }); + + it("keeps legacy PRE EQ bands alive until versioned preset migration runs", () => { + const parsed = JSON.parse(JSON.stringify({ + values: { + preEq100Db: -3.5, + preEq6k4Db: 2.25, + }, + dspState: { namEffectsDspVersion: 18 }, + }), omitNAMNonPortableState) as Record; + + expect(parsed.values).toMatchObject({ + preEq100Db: -3.5, + preEq6k4Db: 2.25, + }); + }); + + it("does not invent DSP selectors on generic partial state patches", () => { + const partialPatch = { values: { ampMix: 0.5 } }; + expect(sanitizeNAMRackPortableDspState(partialPatch)).toBe(partialPatch); + expect(sanitizeNAMRackPortableDspState({ + values: { ampMix: 0.5 }, + dspState: { namEffectsDspVersion: 9 }, + })).toEqual({ values: { ampMix: 0.5 }, dspState: { namEffectsDspVersion: 19 } }); + }); +}); diff --git a/frontend/src/__tests__/namPostFxFaceplateLayout.test.ts b/frontend/src/__tests__/namPostFxFaceplateLayout.test.ts new file mode 100644 index 0000000..a80b18d --- /dev/null +++ b/frontend/src/__tests__/namPostFxFaceplateLayout.test.ts @@ -0,0 +1,255 @@ +// @ts-expect-error The app tsconfig omits Node builtin typings, while Vitest runs this source audit in Node. +import { readFileSync } from "node:fs"; +import { describe, expect, it } from "vitest"; +import { + computePremiumStagePlacement, + NAM_PEDAL_HARDWARE_STANDARD_PX, + NAM_POST_FX_FACEPLATE_LAYOUT, +} from "../components/NAMRackDesignPort"; + +describe("NAM Rack tall Post FX faceplates", () => { + it("uses taller, non-overlapping boxes contained by the Post FX group", () => { + const { group, modules } = NAM_POST_FX_FACEPLATE_LAYOUT; + const boxes = Object.values(modules).map(({ box }) => box); + + expect(modules.modulator.box.h).toBeGreaterThan(157); + expect(modules.delay.box.h).toBeGreaterThan(182); + expect(modules.reverb.box.h).toBeGreaterThan(177); + + for (const box of boxes) { + expect(box.x).toBeGreaterThanOrEqual(group.x); + expect(box.y).toBeGreaterThanOrEqual(group.y); + expect(box.x + box.w).toBeLessThanOrEqual(group.x + group.w); + expect(box.y + box.h).toBeLessThanOrEqual(group.y + group.h); + } + + expect(modules.modulator.box.x + modules.modulator.box.w) + .toBeLessThan(modules.delay.box.x); + expect(modules.delay.box.x + modules.delay.box.w) + .toBeLessThan(modules.reverb.box.x); + }); + + it("reserves visible title and lower-edge padding on every faceplate", () => { + const layout = NAM_POST_FX_FACEPLATE_LAYOUT; + + for (const module of Object.values(layout.modules)) { + expect(module.titleY).toBeGreaterThanOrEqual(9); + expect(module.titleY).toBeLessThan(13); + } + + for (const controls of [layout.modulator, layout.delay, layout.reverb]) { + expect(controls.topRowY).toBeGreaterThan(controls === layout.reverb ? 25 : 30); + expect(controls.stateLabelY).toBeGreaterThan(controls.ledY); + expect(controls.footY).toBeGreaterThan(controls.stateLabelY); + expect(controls.footY).toBeLessThanOrEqual(96); + } + + const footBottomClearanceInDesignPixels = ( + box: { w: number; h: number }, + footY: number, + footSize: number, + ) => box.h - (footY * box.h / 100 + footSize * box.w / 200); + + expect(footBottomClearanceInDesignPixels(layout.modules.modulator.box, layout.modulator.footY, layout.modulator.footSize)).toBeGreaterThanOrEqual(6); + expect(footBottomClearanceInDesignPixels(layout.modules.delay.box, layout.delay.footY, layout.delay.footSize)).toBeGreaterThanOrEqual(6); + expect(footBottomClearanceInDesignPixels(layout.modules.reverb.box, layout.reverb.footY, layout.reverb.footSize)).toBeGreaterThanOrEqual(6); + expect(footBottomClearanceInDesignPixels(layout.modules.modulator.box, layout.modulator.footY, layout.modulator.footerToggleSize)).toBeGreaterThanOrEqual(6); + + // Percentage ordering alone missed real rendered collisions. Model the + // square LED/footswitch boxes and the measured label heights in each + // faceplate's own design pixels, and require a visible gap at every seam. + // The approved faceplate uses a compact 7 px label rhythm so the physical + // LED and switch photographs can retain realistic diameters. + const postLabelHeight = 6.2; + const stateLabelHeight = 8; + const expectFooterGaps = ( + box: { w: number; h: number }, + controls: { lowerRowY: number; lowerLabelOffset: number; ledY: number; ledSize: number; stateLabelY: number; footY: number; footSize: number }, + ) => { + const lowerLabelBottom = (controls.lowerRowY + controls.lowerLabelOffset) * box.h / 100 + postLabelHeight / 2; + const ledTop = controls.ledY * box.h / 100 - controls.ledSize * box.w / 200; + const ledBottom = controls.ledY * box.h / 100 + controls.ledSize * box.w / 200; + const stateCenter = controls.stateLabelY * box.h / 100; + const footTop = controls.footY * box.h / 100 - controls.footSize * box.w / 200; + const stateTop = stateCenter - stateLabelHeight / 2; + const stateBottom = stateCenter + stateLabelHeight / 2; + + expect(ledTop - lowerLabelBottom).toBeGreaterThanOrEqual(.75); + expect(stateTop - ledBottom).toBeGreaterThanOrEqual(1); + expect(footTop - stateBottom).toBeGreaterThanOrEqual(1); + }; + + expectFooterGaps(layout.modules.modulator.box, layout.modulator); + expectFooterGaps(layout.modules.delay.box, layout.delay); + expectFooterGaps(layout.modules.reverb.box, layout.reverb); + }); + + it("keeps each label outside its knob and leaves a measured gap before the next row", () => { + const { modules, modulator, delay, reverb } = NAM_POST_FX_FACEPLATE_LAYOUT; + const postLabelHeight = 6.2; + + const expectSeparatedRows = ( + box: { w: number; h: number }, + controls: { + topRowY: number; + topKnobSize: number; + topLabelOffset: number; + lowerRowY: number; + lowerKnobSize: number; + lowerLabelOffset: number; + }, + ) => { + const topKnobBottom = controls.topRowY * box.h / 100 + controls.topKnobSize * box.w / 200; + const topLabelTop = (controls.topRowY + controls.topLabelOffset) * box.h / 100 - postLabelHeight / 2; + const topLabelBottom = topLabelTop + postLabelHeight; + const lowerKnobTop = controls.lowerRowY * box.h / 100 - controls.lowerKnobSize * box.w / 200; + const lowerKnobBottom = controls.lowerRowY * box.h / 100 + controls.lowerKnobSize * box.w / 200; + const lowerLabelTop = (controls.lowerRowY + controls.lowerLabelOffset) * box.h / 100 - postLabelHeight / 2; + + expect(topLabelTop - topKnobBottom).toBeGreaterThanOrEqual(2); + expect(lowerKnobTop - topLabelBottom).toBeGreaterThanOrEqual(3.25); + expect(lowerLabelTop - lowerKnobBottom).toBeGreaterThanOrEqual(2); + }; + + expectSeparatedRows(modules.modulator.box, modulator); + expectSeparatedRows(modules.delay.box, delay); + expectSeparatedRows(modules.reverb.box, reverb); + }); + + it("gives every Post pedal one physical knob, toggle, footswitch, and LED size", () => { + const { modules, modulator, delay, reverb } = NAM_POST_FX_FACEPLATE_LAYOUT; + const entries = [ + { box: modules.modulator.box, controls: modulator }, + { box: modules.delay.box, controls: delay }, + { box: modules.reverb.box, controls: reverb }, + ]; + const physical = entries.map(({ box, controls }) => ({ + footDiameter: controls.footSize * box.w / 100, + ledDiameter: controls.ledSize * box.w / 100, + topKnobDiameter: controls.topKnobSize * box.w / 100, + lowerKnobDiameter: controls.lowerKnobSize * box.w / 100, + ledBaseline: box.y + controls.ledY * box.h / 100, + labelBaseline: box.y + controls.stateLabelY * box.h / 100, + footBaseline: box.y + controls.footY * box.h / 100, + })); + + for (const item of physical.slice(1)) { + expect(item.footDiameter).toBeCloseTo(physical[0].footDiameter, 3); + expect(item.ledDiameter).toBeCloseTo(physical[0].ledDiameter, 3); + expect(item.topKnobDiameter).toBeCloseTo(physical[0].topKnobDiameter, 3); + expect(item.lowerKnobDiameter).toBeCloseTo(physical[0].lowerKnobDiameter, 3); + expect(Math.abs(item.ledBaseline - physical[0].ledBaseline)).toBeLessThanOrEqual(.1); + expect(Math.abs(item.labelBaseline - physical[0].labelBaseline)).toBeLessThanOrEqual(2.5); + expect(Math.abs(item.footBaseline - physical[0].footBaseline)).toBeLessThanOrEqual(.6); + } + + expect(physical[0].footDiameter).toBe(NAM_PEDAL_HARDWARE_STANDARD_PX.footswitch); + expect(physical[0].ledDiameter).toBe(NAM_PEDAL_HARDWARE_STANDARD_PX.led); + expect(physical[0].topKnobDiameter).toBe(NAM_PEDAL_HARDWARE_STANDARD_PX.knob); + expect(physical[0].lowerKnobDiameter).toBe(NAM_PEDAL_HARDWARE_STANDARD_PX.knob); + expect(modulator.footerToggleSize * modules.modulator.box.w / 100) + .toBeCloseTo(NAM_PEDAL_HARDWARE_STANDARD_PX.toggle, 8); + expect(delay.secondaryFootSize * modules.delay.box.w / 100) + .toBeCloseTo(NAM_PEDAL_HARDWARE_STANDARD_PX.footswitch, 8); + expect(delay.secondaryLedSize * modules.delay.box.w / 100) + .toBeCloseTo(NAM_PEDAL_HARDWARE_STANDARD_PX.led, 8); + expect(modulator.headerToggleSize * modules.modulator.box.w / 100) + .toBeCloseTo(NAM_PEDAL_HARDWARE_STANDARD_PX.toggle, 8); + }); + + it("mirrors the Modulator status screens and header toggles without collisions", () => { + const { modulator } = NAM_POST_FX_FACEPLATE_LAYOUT; + const { modeDisplay, pedalModeDisplay } = modulator; + const displayCenterY = modeDisplay.y + modeDisplay.h / 2; + const toggleRadius = modulator.headerToggleSize / 2; + const leftScreenGap = modulator.modeToggleX - toggleRadius + - (modeDisplay.x + modeDisplay.w); + const rightScreenGap = pedalModeDisplay.x + - (modulator.pedalToggleX + toggleRadius); + + expect(displayCenterY).toBeCloseTo(modulator.headerCenterY, 5); + expect(pedalModeDisplay.y + pedalModeDisplay.h / 2) + .toBeCloseTo(modulator.headerCenterY, 5); + expect(modeDisplay.y).toBeGreaterThan(14); + expect(modulator.headerCenterY).toBeLessThan(modulator.topRowY - 12); + expect(modeDisplay.w).toBe(pedalModeDisplay.w); + expect(modeDisplay.h).toBe(pedalModeDisplay.h); + expect(modeDisplay.x).toBe(100 - pedalModeDisplay.x - pedalModeDisplay.w); + expect(modulator.modeToggleX).toBe(100 - modulator.pedalToggleX); + expect(leftScreenGap).toBeGreaterThan(0); + expect(rightScreenGap).toBeCloseTo(leftScreenGap, 8); + }); + + it("puts both Modulator states inside screens while preserving their toggles", () => { + const source = readFileSync( + new URL("../components/NAMRackDesignPort.tsx", import.meta.url), + "utf8", + ); + const stage = source.match(/function PostFxStage\(\)[\s\S]*?function SectionStage\(/)?.[0] ?? ""; + + expect(stage).toContain('className="mod-header-display mod-mode-display"'); + expect(stage).toContain('className="mod-header-display mod-pedal-mode-display"'); + expect(stage).toContain('paramId="modulatorMode"'); + expect(stage).toContain('paramId="modulatorPedalMode"'); + expect(stage).toContain('offLabel="PEDAL"'); + expect(stage).toContain('onLabel="AUTO"'); + expect(stage).not.toMatch(/\s*MODE\s*<\/Label>/); + expect(stage).not.toContain("mod-switch-state"); + }); + + it("fits all three taller bodies within compact through Max stage placements", () => { + const viewports = [ + { width: 720, height: 410 }, + { width: 1010, height: 520 }, + { width: 3530, height: 1946 }, + ]; + const sizes = [80, 100, 140, 180, 220]; + const { group, modules } = NAM_POST_FX_FACEPLATE_LAYOUT; + + for (const viewport of viewports) { + for (const size of sizes) { + const placement = computePremiumStagePlacement(viewport, group, size); + for (const { box } of Object.values(modules)) { + const left = placement.left + box.x * placement.scale; + const right = left + box.w * placement.scale; + const top = placement.top + box.y * placement.scale; + const bottom = top + box.h * placement.scale; + expect(left).toBeGreaterThanOrEqual(0); + expect(right).toBeLessThanOrEqual(viewport.width); + expect(top).toBeGreaterThanOrEqual(0); + expect(bottom).toBeLessThanOrEqual(viewport.height); + } + } + } + }); + + it("binds every Post FX title and control row to the shared geometry contract", () => { + const source = readFileSync( + new URL("../components/NAMRackDesignPort.tsx", import.meta.url), + "utf8", + ); + + expect(source).not.toMatch(/name="(?:modulator|delay|reverb)"[^>]*titleY=\{7\}/); + expect(source).toContain("titleY={postLayout.modules.modulator.titleY}"); + expect(source).toContain("titleY={postLayout.modules.delay.titleY}"); + expect(source).toContain("titleY={postLayout.modules.reverb.titleY}"); + expect(source).toContain("y={postLayout.modulator.footY}"); + expect(source).toContain("y={postLayout.delay.footY}"); + expect(source).toContain("y={postLayout.reverb.footY}"); + expect(source).toContain("size={postLayout.modulator.ledSize}"); + expect(source).toContain("size={postLayout.delay.ledSize}"); + expect(source).toContain("size={postLayout.reverb.ledSize}"); + expect(source).toContain("x={postLayout.modulator.primaryX}"); + expect(source).toContain("x={postLayout.delay.primaryX}"); + expect(source).toContain("x={postLayout.reverb.primaryX}"); + expect(source).toContain("size={postLayout.delay.secondaryFootSize}"); + expect(source).toContain("size={postLayout.delay.secondaryLedSize}"); + expect(source).toContain("size={postLayout.modulator.topKnobSize}"); + expect(source).toContain("size={postLayout.delay.lowerKnobSize}"); + expect(source).toContain("labelOffset={postLayout.reverb.lowerLabelOffset}"); + + const widePedalSource = source.match(/function WidePedal\([\s\S]*?\n}\n\nfunction TopShell/)?.[0] ?? ""; + expect(widePedalSource).not.toContain(" ({ + id, + label: id === "preEqHPFHz" ? "PRE HPF" : "PRE LPF", + type: "continuous", + value, + min: id === "preEqHPFHz" ? 0 : 3000, + max: id === "preEqHPFHz" ? 180 : 24000, + defaultValue: id === "preEqHPFHz" ? 0 : 24000, + unit: "Hz", + automatable: true, +}); + +describe("NAM Rack PRE EQ V19 state and control contract", () => { + it("uses logarithmic active travel with opposite six-percent OFF detents", () => { + expect(CURRENT_NAM_EFFECTS_DSP_VERSION).toBe(19); + const detent = NAM_GRAPHIC_EQ_FILTER_OFF_DETENT; + + expect(namGraphicEqFilterHzFromNormalized("preEqHPFHz", detent / 2)).toBe(0); + expect(namGraphicEqFilterHzFromNormalized("preEqHPFHz", detent)).toBeCloseTo(35, 6); + expect(namGraphicEqFilterHzFromNormalized("preEqHPFHz", 1)).toBeCloseTo(180, 6); + expect(namGraphicEqFilterHzFromNormalized("preEqHPFHz", (1 + detent) / 2)) + .toBeCloseTo(Math.sqrt(35 * 180), 6); + + expect(namGraphicEqFilterHzFromNormalized("preEqLPFHz", 0)).toBeCloseTo(3000, 6); + expect(namGraphicEqFilterHzFromNormalized("preEqLPFHz", 1 - detent)).toBeCloseTo(20000, 6); + expect(namGraphicEqFilterHzFromNormalized("preEqLPFHz", 1 - detent / 2)).toBe(24000); + expect(namGraphicEqFilterHzFromNormalized("preEqLPFHz", (1 - detent) / 2)) + .toBeCloseTo(Math.sqrt(3000 * 20000), 6); + + expect(namGraphicEqFilterNormalizedFromHz("preEqHPFHz", 0)).toBe(0); + expect(namGraphicEqFilterNormalizedFromHz("preEqHPFHz", 35)).toBeCloseTo(detent, 8); + expect(namGraphicEqFilterNormalizedFromHz("preEqLPFHz", 20000)).toBeCloseTo(1 - detent, 8); + expect(namGraphicEqFilterNormalizedFromHz("preEqLPFHz", 24000)).toBe(1); + }); + + it("uses the curved domain for range, wheel, and keyboard paths", () => { + const hpfOff = makeFilter("preEqHPFHz", 0); + const lpfOff = makeFilter("preEqLPFHz", 24000); + + expect(rangeInputMin(hpfOff)).toBe(0); + expect(rangeInputMax(hpfOff)).toBe(1); + expect(rangeInputValue(hpfOff)).toBe(0); + expect(rangeInputValue(lpfOff)).toBe(1); + expect(normalizeParamValue(makeFilter("preEqHPFHz", 35), 35)) + .toBeCloseTo(NAM_GRAPHIC_EQ_FILTER_OFF_DETENT, 8); + expect(paramValueFromRangeInput(hpfOff, NAM_GRAPHIC_EQ_FILTER_OFF_DETENT)).toBeCloseTo(35, 6); + expect(offsetParamValue(hpfOff, 0, 1)).toBe(35); + expect(offsetParamValue(hpfOff, 0, -1)).toBe(0); + expect(offsetParamValue(lpfOff, 24000, -1)).toBe(20000); + expect(offsetParamValue(lpfOff, 24000, 1)).toBe(24000); + expect(formatParamValue(hpfOff)).toBe("OFF"); + expect(formatParamValue(lpfOff)).toBe("OFF"); + }); + + it("updates private recall only for active cutoffs", () => { + expect(namGraphicEqActiveRecallUpdate("preEqHPFHz", 70)) + .toEqual(["preEqHPFLastActiveHz", 70]); + expect(namGraphicEqActiveRecallUpdate("preEqLPFHz", 12500)) + .toEqual(["preEqLPFLastActiveHz", 12500]); + expect(namGraphicEqActiveRecallUpdate("preEqHPFHz", 0)).toBeNull(); + expect(namGraphicEqActiveRecallUpdate("preEqLPFHz", 24000)).toBeNull(); + }); + + it("rejects pre-V16 collisions and migrates the V16-V18 seven-band layout", () => { + const legacy = migrateLegacyNAMRackPresetDspState({ + values: { + preEqEnabled: 1, + preEq100Db: 9, + preEqHPFHz: 120, + preEqLPFHz: 7000, + preEqHPFLastActiveHz: 140, + preEqLPFLastActiveHz: 6000, + }, + dspState: { namEffectsDspVersion: 15 }, + }, { completePreset: true }) as { values: Record }; + expect(legacy.values).toMatchObject({ + preEqEnabled: 0, + preEq120Db: 0, + preEq12kDb: 0, + preEqHPFHz: 0, + preEqLPFHz: 24000, + preEqHPFLastActiveHz: 80, + preEqLPFLastActiveHz: 12000, + }); + + expect(legacy.values).not.toHaveProperty("preEq100Db"); + + const migratedV18 = migrateLegacyNAMRackPresetDspState({ + values: { + preEqEnabled: 1, + preEq100Db: -3.5, + preEq200Db: -2, + preEq400Db: -1, + preEq800Db: 0.5, + preEq1k6Db: 1.5, + preEq3k2Db: 2.5, + preEq6k4Db: 3.5, + preEq12kDb: 11, + preEqHPFHz: 64, + preEqLPFHz: 13000, + preEqHPFLastActiveHz: 64, + preEqLPFLastActiveHz: 13000, + }, + dspState: { namEffectsDspVersion: 18 }, + }, { completePreset: true }) as { values: Record }; + expect(migratedV18.values).toMatchObject({ + preEqEnabled: 1, + preEq120Db: -3.5, + preEq250Db: -2, + preEq500Db: -1, + preEq1kDb: 0.5, + preEq2k5Db: 1.5, + preEq5kDb: 2.5, + preEq8kDb: 3.5, + preEq12kDb: 0, + preEqHPFHz: 64, + preEqLPFHz: 13000, + preEqHPFLastActiveHz: 64, + preEqLPFLastActiveHz: 13000, + }); + expect(migratedV18.values).not.toHaveProperty("preEq100Db"); + expect(migratedV18.values).not.toHaveProperty("preEq6k4Db"); + }); + + it("round-trips all eight current bands without treating V19 as legacy", () => { + const current = migrateLegacyNAMRackPresetDspState({ + values: { + preEqEnabled: 1, + preEq120Db: -4, + preEq250Db: -3, + preEq500Db: -2, + preEq1kDb: -1, + preEq2k5Db: 1, + preEq5kDb: 2, + preEq8kDb: 3, + preEq12kDb: 4, + preEqHPFHz: 0, + preEqLPFHz: 24000, + }, + dspState: { namEffectsDspVersion: 19 }, + }, { completePreset: true }) as { + values: Record; + dspState: Record; + }; + expect(current.values).toMatchObject({ + preEq120Db: -4, + preEq250Db: -3, + preEq500Db: -2, + preEq1kDb: -1, + preEq2k5Db: 1, + preEq5kDb: 2, + preEq8kDb: 3, + preEq12kDb: 4, + }); + expect(current.dspState.namEffectsDspVersion).toBe(19); + }); + + it("migrates baseline and Compare snapshots with the enclosing legacy version", () => { + const migrated = migrateLegacyNAMRackPresetDspState({ + values: { preEqEnabled: 1, preEq100Db: -2 }, + dspState: { namEffectsDspVersion: 18 }, + uiState: { + namPresetBaseline: { + values: { preEqEnabled: 1, preEq6k4Db: 4 }, + }, + namRackCompare: { + snapshots: { + A: { values: { preEq200Db: -5 } }, + B: { + values: { preEq12kDb: 6 }, + dspState: { namEffectsDspVersion: 19 }, + }, + }, + }, + }, + }, { completePreset: true }) as Record; + + expect(migrated.values).toMatchObject({ preEq120Db: -2, preEq12kDb: 0 }); + expect(migrated.uiState.namPresetBaseline.values).toMatchObject({ + preEq8kDb: 4, + preEq12kDb: 0, + }); + expect(migrated.uiState.namRackCompare.snapshots.A.values.preEq250Db).toBe(-5); + expect(migrated.uiState.namRackCompare.snapshots.B.values.preEq12kDb).toBe(6); + expect(migrated.uiState.namPresetBaseline.values).not.toHaveProperty("preEq6k4Db"); + }); + + it("hides retired band IDs from a mixed-version native schema", () => { + const parameters: BuiltInPluginSchema["parameters"] = [ + { + id: "preEq100Db", + label: "100 Hz", + type: "continuous", + value: 3, + min: -12, + max: 12, + defaultValue: 0, + }, + { + id: "preEq120Db", + label: "120 Hz", + type: "continuous", + value: 3, + min: -12, + max: 12, + defaultValue: 0, + }, + ]; + const projected = projectNAMRackSchemaForUI({ + schemaVersion: 1, + name: "OpenStudio NAM Rack", + category: "NAM", + chain: "track", + fxIndex: 0, + parameters, + modelState: { namEffectsDspVersion: 18 }, + }); + + expect(projected.parameters.map(({ id }) => id)).toEqual(["preEq120Db"]); + }); +}); diff --git a/frontend/src/__tests__/namPrecisionDriveGateControls.test.ts b/frontend/src/__tests__/namPrecisionDriveGateControls.test.ts new file mode 100644 index 0000000..0c3258a --- /dev/null +++ b/frontend/src/__tests__/namPrecisionDriveGateControls.test.ts @@ -0,0 +1,88 @@ +// @ts-expect-error The app tsconfig omits Node builtin typings, while Vitest runs this source audit in Node. +import { readFileSync } from "node:fs"; +import { describe, expect, it } from "vitest"; + +import { + NAM_PEDAL_HARDWARE_STANDARD_PX, + NAM_PRECISION_DRIVE_FACEPLATE_LAYOUT, + NAM_PRECISION_DRIVE_GATE_KNOB_PX, + NAM_PRE_SIGNAL_LAYOUT, +} from "../components/NAMRackDesignPort"; + +const readSource = (relativePath: string) => + readFileSync(new URL(relativePath, import.meta.url), "utf8"); + +describe("NAM Rack Precision Drive Gate control", () => { + it("centres a compact Gate rotary among the four main controls", () => { + const layout = NAM_PRECISION_DRIVE_FACEPLATE_LAYOUT; + const box = NAM_PRE_SIGNAL_LAYOUT.precisionDrive; + const xPx = (percentage: number) => box.w * percentage / 100; + const yPx = (percentage: number) => box.h * percentage / 100; + + expect(box).toMatchObject({ w: 120, h: 232 }); + expect(xPx(layout.gate.x)).toBeCloseTo(60, 8); + expect(yPx(layout.gate.y)).toBeCloseTo(76.56, 8); + expect(layout.gate.x).toBe((layout.columns[0] + layout.columns[1]) / 2); + expect(xPx(layout.gate.size)).toBeCloseTo(NAM_PRECISION_DRIVE_GATE_KNOB_PX, 8); + expect(NAM_PRECISION_DRIVE_GATE_KNOB_PX).toBeLessThan( + NAM_PEDAL_HARDWARE_STANDARD_PX.knob, + ); + expect(xPx(layout.gate.hitSize)).toBeCloseTo(20, 8); + expect(xPx(layout.knobSize)).toBeCloseTo(28, 8); + expect(xPx(layout.knobHitSize)).toBeCloseTo(28, 8); + + for (const mainY of [layout.topY, layout.lowerY]) { + for (const mainX of layout.columns) { + const centreDistance = Math.hypot( + xPx(Math.abs(layout.gate.x - mainX)), + yPx(Math.abs(layout.gate.y - mainY)), + ); + expect(centreDistance).toBeGreaterThan((28 + NAM_PRECISION_DRIVE_GATE_KNOB_PX) / 2); + } + } + }); + + it("binds the active Design Port rotary to the existing drive-local Gate", () => { + const designSource = readSource( + "../components/NAMRackDesignPort.tsx", + ); + const parameterIndex = designSource.indexOf( + 'paramId="precisionDriveGate"', + ); + const controlStart = designSource.lastIndexOf( + "", parameterIndex); + const controlSource = designSource.slice(controlStart, controlEnd + 2); + + expect(parameterIndex).toBeGreaterThan(-1); + expect(controlStart).toBeGreaterThan(-1); + expect(controlSource).toContain('kind="black"'); + expect(controlSource).toContain('semanticLabel="Drive Gate"'); + expect(controlSource).toContain('labelText=""'); + expect(controlSource).toContain("driveLayout.gate.x"); + expect(controlSource).toContain("driveLayout.gate.y"); + expect(controlSource).toContain("driveLayout.gate.size"); + expect(controlSource).toContain("driveLayout.gate.hitSize"); + const driveStage = designSource.slice( + designSource.indexOf('box={NAM_PRE_SIGNAL_LAYOUT.precisionDrive}'), + designSource.indexOf("box={NAM_PRE_SIGNAL_LAYOUT.distortion}"), + ); + expect(driveStage).not.toContain("precisionDriveVoice"); + }); + + it("retains the same parameter across defaults, schema, and the active control surface", () => { + const panelSource = readSource("../components/NAMRackPanel.tsx"); + const bridgeSource = readSource("../services/NativeBridge.ts"); + const designSource = readSource("../components/NAMRackDesignPort.tsx"); + + expect(panelSource).toContain("precisionDriveGate: 0"); + expect(panelSource).toContain('"precisionDriveGate", "precisionDriveDrive"'); + expect(bridgeSource).toContain( + 'param("precisionDriveGate", "PD Gate", 0, 0, 1, "", "drive")', + ); + expect(designSource).toContain('paramId="precisionDriveGate"'); + expect(designSource).toContain('semanticLabel="Drive Gate"'); + }); +}); diff --git a/frontend/src/__tests__/namPrecisionDriveVoiceV15.test.ts b/frontend/src/__tests__/namPrecisionDriveVoiceV15.test.ts new file mode 100644 index 0000000..d02ed8e --- /dev/null +++ b/frontend/src/__tests__/namPrecisionDriveVoiceV15.test.ts @@ -0,0 +1,119 @@ +// @ts-expect-error Vitest provides Node builtins while the app tsconfig omits Node typings. +import { readFileSync } from "node:fs"; +import { describe, expect, it } from "vitest"; +import { createNAMBootSchema } from "../components/BuiltInPluginPanel"; +import { NAM_RACK_ADVANCED_CONTROL_IDS } from "../components/NAMRackMixer"; +import { + projectNAMRackSchemaForUI, + type BuiltInPluginSchema, +} from "../services/NativeBridge"; +import { + NAM_PRECISION_DRIVE_VOICE_LABELS, + normalizeNAMEffectsDspVersion, + normalizeNAMPrecisionDriveVoice, +} from "../utils/namPortableState"; +import { + CURRENT_NAM_EFFECTS_DSP_VERSION, + isCurrentNAMRackPresetState, + migrateLegacyNAMRackPresetDspState, +} from "../utils/namRackPresetTransactions"; + +type RackState = { + values: Record; + dspState: Record; + uiState?: Record; +}; + +function migrateComplete( + version: number | undefined, + voice: unknown, + uiState?: Record, +) { + return migrateLegacyNAMRackPresetDspState({ + values: { precisionDriveVoice: voice, precisionDriveDrive: 0.42 }, + dspState: version === undefined ? {} : { namEffectsDspVersion: version }, + uiState, + }, { completePreset: true }) as RackState; +} + +describe("NAM Rack retired Maxon selector V18 compatibility contract", () => { + it("loads old and current presets as Precision Drive while deleting the retired selector", () => { + expect(CURRENT_NAM_EFFECTS_DSP_VERSION).toBe(19); + for (const version of [1, 7, 14, 15, 16, 17, 18, 19, undefined, 0, 20, 999]) { + const migrated = migrateComplete(version, 1); + expect(migrated.values).not.toHaveProperty("precisionDriveVoice"); + expect(migrated.values.precisionDriveDrive).toBe(0.42); + expect(migrated.dspState.namEffectsDspVersion).toBe(19); + expect(isCurrentNAMRackPresetState(migrated)).toBe(true); + } + }); + + it("retains only the surviving Precision identity", () => { + expect(NAM_PRECISION_DRIVE_VOICE_LABELS).toEqual(["Precision"]); + for (const value of [-1, 0, 0.5, 1, 2, "1", Number.NaN, undefined]) { + expect(normalizeNAMPrecisionDriveVoice(value)).toBe(0); + } + for (const version of [14, 15, 16, 17, 18, 19]) { + expect(normalizeNAMEffectsDspVersion(version)).toBe(19); + } + expect(normalizeNAMEffectsDspVersion(20)).toBeUndefined(); + }); + + it("prunes the retired selector from baseline and Compare snapshots", () => { + const snapshot = { + values: { precisionDriveVoice: 1, precisionDriveDrive: 0.6 }, + dspState: { namEffectsDspVersion: 17, reverbEngineVersion: 5 }, + }; + const migrated = migrateComplete(17, 1, { + namPresetBaseline: snapshot, + namRackCompare: { snapshots: { A: snapshot, B: snapshot } }, + }); + + expect(migrated.values).not.toHaveProperty("precisionDriveVoice"); + expect(migrated.uiState?.namPresetBaseline.values).not.toHaveProperty("precisionDriveVoice"); + expect(migrated.uiState?.namRackCompare.snapshots.A.values).not.toHaveProperty("precisionDriveVoice"); + expect(migrated.uiState?.namRackCompare.snapshots.B.values).not.toHaveProperty("precisionDriveVoice"); + }); + + it("filters stale native schemas and omits the selector from boot schema", () => { + const rawVoice: BuiltInPluginSchema["parameters"][number] = { + id: "precisionDriveVoice", + label: "Legacy voice", + type: "enum", + value: 1, + min: 0, + max: 1, + defaultValue: 0, + automatable: true, + enumOptions: [{ value: 0, label: "Precision" }, { value: 1, label: "Maxon OD808" }], + }; + const projected = projectNAMRackSchemaForUI({ + schemaVersion: 1, + name: "OpenStudio NAM Rack", + category: "NAM", + chain: "track", + fxIndex: 0, + parameters: [rawVoice], + modelState: { namEffectsDspVersion: 17 }, + }); + expect(projected.parameters).toEqual([]); + + const bootSchema = createNAMBootSchema( + { chain: "track", fxIndex: 0 }, + "OpenStudio NAM Rack", + ); + expect(bootSchema.modelState?.namEffectsDspVersion).toBe(19); + expect(bootSchema.parameters.some((param) => param.id === "precisionDriveVoice")).toBe(false); + }); + + it("removes Maxon from active UI and keeps EQ Boost before the standalone Drive", () => { + const panel = readFileSync(new URL("../components/NAMRackPanel.tsx", import.meta.url), "utf8"); + const design = readFileSync(new URL("../components/NAMRackDesignPort.tsx", import.meta.url), "utf8"); + + expect(panel).not.toContain('paramById(params, "precisionDriveVoice")'); + expect(design).not.toContain("Maxon OD808"); + expect(NAM_RACK_ADVANCED_CONTROL_IDS["pre-eq"]).toContain("preEqEnabled"); + expect(NAM_RACK_ADVANCED_CONTROL_IDS["precision-drive"]).not.toContain("preEqEnabled"); + expect(NAM_RACK_ADVANCED_CONTROL_IDS["precision-drive"]).not.toContain("precisionDriveVoice"); + }); +}); diff --git a/frontend/src/__tests__/namPresetLibrary.test.ts b/frontend/src/__tests__/namPresetLibrary.test.ts new file mode 100644 index 0000000..6be7fb6 --- /dev/null +++ b/frontend/src/__tests__/namPresetLibrary.test.ts @@ -0,0 +1,135 @@ +// @ts-expect-error The app tsconfig omits Node builtin typings, while Vitest runs this source audit in Node. +import { readFileSync } from "node:fs"; +import { describe, expect, it, vi } from "vitest"; +import { + mutateStoredNAMPreset, + type NAMStoredPresetMutationBridge, +} from "../utils/namPresetLibrary"; + +function makeBridge( + copyResult: boolean | Error, + deleteResult: boolean | Error = true, +): NAMStoredPresetMutationBridge { + return { + copyBuiltInFXPreset: vi.fn(async () => { + if (copyResult instanceof Error) throw copyResult; + return copyResult; + }), + deleteBuiltInFXPreset: vi.fn(async () => { + if (deleteResult instanceof Error) throw deleteResult; + return deleteResult; + }), + }; +} + +describe("NAM stored preset library mutations", () => { + it("wires Duplicate/Rename to stored payload APIs rather than live rack recall", () => { + const panelSource = readFileSync( + new URL("../components/NAMRackPanel.tsx", import.meta.url), + "utf8", + ); + const handlersStart = panelSource.indexOf("const duplicateUserPreset"); + const handlersEnd = panelSource.indexOf("const togglePresetFavorite", handlersStart); + const handlers = panelSource.slice(handlersStart, handlersEnd); + + expect(handlersStart).toBeGreaterThan(-1); + expect(handlersEnd).toBeGreaterThan(handlersStart); + expect(handlers.match(/mutateStoredNAMPreset\(/g)).toHaveLength(2); + expect(handlers).not.toContain("loadBuiltInFXPreset"); + expect(handlers).not.toContain("saveBuiltInFXPreset"); + expect(handlers).not.toContain("setBuiltInPluginState"); + expect(handlers).toContain("could not be deleted. Both presets remain."); + }); + + it("duplicates the stored payload without deleting or recalling anything", async () => { + const bridge = makeBridge(true); + + const result = await mutateStoredNAMPreset( + bridge, + "OpenStudio NAM Rack", + "Studio Clean", + "Studio Clean Copy", + "duplicate", + ); + + expect(result).toEqual({ success: true, copied: true, sourceDeleted: false }); + expect(bridge.copyBuiltInFXPreset).toHaveBeenCalledWith( + "OpenStudio NAM Rack", + "Studio Clean", + "Studio Clean Copy", + ); + expect(bridge.deleteBuiltInFXPreset).not.toHaveBeenCalled(); + expect(Object.keys(bridge)).toEqual(["copyBuiltInFXPreset", "deleteBuiltInFXPreset"]); + }); + + it("does not delete the source when the renamed target cannot be saved", async () => { + const bridge = makeBridge(false); + + const result = await mutateStoredNAMPreset( + bridge, + "OpenStudio NAM Rack", + "Old Name", + "New Name", + "rename", + ); + + expect(result).toEqual({ + success: false, + copied: false, + sourceDeleted: false, + failure: "copy-failed", + }); + expect(bridge.deleteBuiltInFXPreset).not.toHaveBeenCalled(); + }); + + it("deletes the source only after the renamed target is saved", async () => { + const calls: string[] = []; + const bridge: NAMStoredPresetMutationBridge = { + copyBuiltInFXPreset: vi.fn(async () => { + calls.push("copy"); + return true; + }), + deleteBuiltInFXPreset: vi.fn(async () => { + calls.push("delete"); + return true; + }), + }; + + const result = await mutateStoredNAMPreset( + bridge, + "OpenStudio NAM Rack", + "Old Name", + "New Name", + "rename", + ); + + expect(calls).toEqual(["copy", "delete"]); + expect(result).toEqual({ success: true, copied: true, sourceDeleted: true }); + }); + + it.each([false, new Error("locked")])( + "surfaces source deletion failure after the target was saved (%s)", + async (deleteResult) => { + const bridge = makeBridge(true, deleteResult); + + const result = await mutateStoredNAMPreset( + bridge, + "OpenStudio NAM Rack", + "Old Name", + "New Name", + "rename", + ); + + expect(result).toEqual({ + success: false, + copied: true, + sourceDeleted: false, + failure: "delete-failed", + }); + expect(bridge.deleteBuiltInFXPreset).toHaveBeenCalledWith( + "OpenStudio NAM Rack", + "Old Name", + ); + }, + ); +}); diff --git a/frontend/src/__tests__/namPresetManagerTheme.test.ts b/frontend/src/__tests__/namPresetManagerTheme.test.ts new file mode 100644 index 0000000..262bb2e --- /dev/null +++ b/frontend/src/__tests__/namPresetManagerTheme.test.ts @@ -0,0 +1,76 @@ +// @ts-expect-error The app tsconfig omits Node builtin typings, while Vitest runs this source audit in Node. +import { readFileSync } from "node:fs"; +import { describe, expect, it } from "vitest"; + +const css = readFileSync( + new URL("../components/NAMPresetManagerModal.css", import.meta.url), + "utf8", +); +const source = readFileSync( + new URL("../components/NAMPresetManagerModal.tsx", import.meta.url), + "utf8", +); + +function relativeLuminance(hex: string): number { + const channels = hex.replace("#", "").match(/.{2}/g)?.map((pair) => parseInt(pair, 16) / 255) ?? []; + const linear = channels.map((channel) => ( + channel <= 0.04045 + ? channel / 12.92 + : ((channel + 0.055) / 1.055) ** 2.4 + )); + return (0.2126 * (linear[0] ?? 0)) + + (0.7152 * (linear[1] ?? 0)) + + (0.0722 * (linear[2] ?? 0)); +} + +function contrastRatio(left: string, right: string): number { + const leftLuminance = relativeLuminance(left); + const rightLuminance = relativeLuminance(right); + return (Math.max(leftLuminance, rightLuminance) + 0.05) + / (Math.min(leftLuminance, rightLuminance) + 0.05); +} + +describe("NAM preset manager theme", () => { + it("uses the NAM Rack charcoal and warm amber palette without legacy blue accents", () => { + expect(source).toContain('import "./NAMPresetManagerModal.css"'); + expect(css).toContain("--nam-preset-bg: #090a0c"); + expect(css).toContain("--nam-preset-accent: #e0a149"); + expect(css).toContain("--nam-preset-accent-hot: #ffc36c"); + expect(css).toContain("rgba(224, 161, 73, 0.14)"); + + for (const legacyBlue of [ + "#55a8ed", + "#6db8f5", + "#56a9ee", + "#91d1ff", + "#348bd1", + "#236ba6", + "#4099df", + "#2878b9", + "rgba(62, 123, 178", + "rgba(59, 137, 208", + "rgba(53, 119, 178", + ]) { + expect(css.toLowerCase()).not.toContain(legacyBlue); + } + }); + + it("applies the warm accent to selection, focus, status, tags, and primary actions", () => { + expect(css).toContain('.nam-preset-library-row[data-selected="true"]'); + expect(css).toContain("box-shadow: inset 2px 0 0 var(--nam-preset-accent)"); + expect(css).toContain(".nam-preset-library-search:focus-within"); + expect(css).toContain("outline: 2px solid var(--nam-preset-accent-hot)"); + expect(css).toContain(".nam-preset-library-status"); + expect(css).toContain(".nam-preset-library-tags span"); + expect(css).toContain("background: linear-gradient(180deg, #efb45e, #c98231)"); + expect(source).toContain("data-selected={selected}"); + expect(source).toContain("data-active={entry.active}"); + }); + + it("keeps representative normal text pairs above WCAG AA contrast", () => { + expect(contrastRatio("#171006", "#c98231")).toBeGreaterThanOrEqual(4.5); + expect(contrastRatio("#ffc36c", "#18191b")).toBeGreaterThanOrEqual(4.5); + expect(contrastRatio("#928c83", "#171719")).toBeGreaterThanOrEqual(4.5); + expect(contrastRatio("#dec28f", "#111214")).toBeGreaterThanOrEqual(4.5); + }); +}); diff --git a/frontend/src/__tests__/namPreviewMonitoring.test.ts b/frontend/src/__tests__/namPreviewMonitoring.test.ts new file mode 100644 index 0000000..db76063 --- /dev/null +++ b/frontend/src/__tests__/namPreviewMonitoring.test.ts @@ -0,0 +1,95 @@ +import { describe, expect, it, vi } from "vitest"; +import { + createNAMPreviewMonitorLease, + markTrackMonitorUserMutation, +} from "../utils/trackMonitorOwnership"; + +function monitorHarness(trackId: string, initiallyEnabled: boolean) { + let enabled = initiallyEnabled; + const setTransient = vi.fn(async (_trackId: string, next: boolean) => { + enabled = next; + return true; + }); + const lease = createNAMPreviewMonitorLease({ + read: (candidate) => candidate === trackId ? enabled : undefined, + setTransient, + }); + return { + lease, + setTransient, + read: () => enabled, + set: (next: boolean) => { enabled = next; }, + }; +} + +describe("NAM preview track-monitor ownership", () => { + it("temporarily enables an off track once across capture switches and restores it on Stop", async () => { + const harness = monitorHarness("monitor-stop", false); + + await expect(harness.lease.ensureEnabled("monitor-stop")).resolves.toBe(true); + await expect(harness.lease.ensureEnabled("monitor-stop")).resolves.toBe(true); + expect(harness.read()).toBe(true); + expect(harness.setTransient).toHaveBeenCalledTimes(1); + + await expect(harness.lease.release()).resolves.toBe(true); + expect(harness.read()).toBe(false); + expect(harness.setTransient).toHaveBeenLastCalledWith("monitor-stop", false); + }); + + it("does not claim or disable monitoring that was already on", async () => { + const harness = monitorHarness("monitor-existing", true); + + await expect(harness.lease.ensureEnabled("monitor-existing")).resolves.toBe(true); + await expect(harness.lease.release()).resolves.toBe(true); + expect(harness.setTransient).not.toHaveBeenCalled(); + expect(harness.read()).toBe(true); + }); + + it("never restores over an explicit user monitor change during audition", async () => { + const harness = monitorHarness("monitor-user-owned", false); + await harness.lease.ensureEnabled("monitor-user-owned"); + + markTrackMonitorUserMutation("monitor-user-owned"); + harness.set(false); + await expect(harness.lease.ensureEnabled("monitor-user-owned")).resolves.toBe(false); + markTrackMonitorUserMutation("monitor-user-owned"); + harness.set(true); + + await expect(harness.lease.release()).resolves.toBe(true); + expect(harness.read()).toBe(true); + expect(harness.setTransient).toHaveBeenCalledTimes(1); + }); + + it("relinquishes a raced enable to the user and propagates native failures", async () => { + let enabled = false; + let finish: ((value: boolean) => void) | undefined; + const pending = new Promise((resolve) => { finish = resolve; }); + const setTransient = vi.fn(async () => pending); + const lease = createNAMPreviewMonitorLease({ + read: () => enabled, + setTransient, + }); + + const enabling = lease.ensureEnabled("monitor-race"); + markTrackMonitorUserMutation("monitor-race"); + enabled = true; + finish?.(true); + await expect(enabling).resolves.toBe(true); + await expect(lease.release()).resolves.toBe(true); + expect(setTransient).toHaveBeenCalledTimes(1); + + const failed = createNAMPreviewMonitorLease({ + read: () => false, + setTransient: async () => false, + }); + await expect(failed.ensureEnabled("monitor-false")).resolves.toBe(false); + await expect(failed.release()).resolves.toBe(true); + + const rejected = createNAMPreviewMonitorLease({ + read: () => false, + setTransient: async () => { throw new Error("bridge unavailable"); }, + }); + await expect(rejected.ensureEnabled("monitor-reject")).rejects.toThrow("bridge unavailable"); + await expect(rejected.release()).resolves.toBe(true); + }); +}); diff --git a/frontend/src/__tests__/namPreviewRecovery.test.ts b/frontend/src/__tests__/namPreviewRecovery.test.ts new file mode 100644 index 0000000..b7b478d --- /dev/null +++ b/frontend/src/__tests__/namPreviewRecovery.test.ts @@ -0,0 +1,167 @@ +import { describe, expect, it } from "vitest"; + +import { provisionalNAMPreviewMatchesState } from "../components/NAMExplorer"; + +const baseline = { + pedalModelPath: "", + ampModelPath: "C:/NAM/Baseline.nam", + cabIRPath: "C:/IR/Baseline.wav", + pedalDeclaredCaptureType: "unknown", + ampDeclaredCaptureType: "full_rig", + cabEnabled: 1, + cabRequestedEnabled: true, + pedalMix: 0, + ampEnabled: 1, + ampMix: 1, + pedalCalibrationMode: 1, + pedalOverrideInputLevelDbu: 12, + pedalOverrideOutputLevelDbu: 12, + ampCalibrationMode: 1, + ampOverrideInputLevelDbu: 12, + ampOverrideOutputLevelDbu: 12, +}; + +function audition(overrides: Record = {}) { + const candidate = { + key: "amp:preview", + slot: "amp", + toneId: 1, + modelId: 2, + title: "Preview", + modelName: "Preview", + creator: "QA", + localPath: "C:/NAM/Preview.nam", + previousPath: baseline.ampModelPath, + source: "installed", + previewDownload: false, + saved: false, + action: "live-preview", + captureType: "amp", + includesCab: false, + baseline, + ...overrides, + } as any; + return { + ...candidate, + provisionalPublication: candidate.provisionalPublication ?? { + slot: candidate.slot, + localPath: candidate.localPath, + cabRequestedEnabled: candidate.slot === "cab" ? true : baseline.cabRequestedEnabled, + effectiveCabEnabled: candidate.slot === "cab" ? 1 : undefined, + pedalMix: candidate.slot === "pedal" ? 1 : undefined, + ampEnabled: candidate.slot === "amp" ? 1 : undefined, + ampMix: candidate.slot === "amp" ? 1 : undefined, + }, + } as any; +} + +describe("NAM provisional preview recovery guard", () => { + it("requires amp-only effective Cab state to match the preserved request", () => { + const state = { + modelState: { + ampModelPath: "c:\\nam\\preview.nam", + hasAmpModel: true, + cabRequestedEnabled: true, + }, + values: { auditionSource: 0, cabEnabled: 1, ampEnabled: 1, ampMix: 1 }, + }; + expect(provisionalNAMPreviewMatchesState(state, audition())).toBe(true); + expect(provisionalNAMPreviewMatchesState({ + ...state, + values: { ...state.values, cabEnabled: 0 }, + }, audition())).toBe(false); + }); + + it("ignores retired diagnostic-source state but rejects power, mix, or Cab changes", () => { + const state = { + modelState: { + ampModelPath: "C:/NAM/Preview.nam", + hasAmpModel: true, + cabRequestedEnabled: true, + }, + values: { auditionSource: 1, cabEnabled: 1, ampEnabled: 1, ampMix: 1 }, + }; + expect(provisionalNAMPreviewMatchesState(state, audition())).toBe(true); + expect(provisionalNAMPreviewMatchesState({ + ...state, + values: { auditionSource: 0, cabEnabled: 1, ampEnabled: 0, ampMix: 1 }, + }, audition())).toBe(false); + expect(provisionalNAMPreviewMatchesState({ + ...state, + values: { auditionSource: 0, cabEnabled: 1, ampEnabled: 1, ampMix: 0 }, + }, audition())).toBe(false); + expect(provisionalNAMPreviewMatchesState({ + ...state, + modelState: { ...state.modelState, cabRequestedEnabled: false }, + values: { auditionSource: 0, cabEnabled: 0, ampEnabled: 1, ampMix: 1 }, + }, audition())).toBe(false); + }); + + it("uses authoritative embedded-Cab topology for safety instead of a provisional effective-Cab guess", () => { + const fullRig = audition({ captureType: "full-rig", includesCab: true }); + expect(provisionalNAMPreviewMatchesState({ + modelState: { + ampModelPath: "C:/NAM/Preview.nam", + hasAmpModel: true, + ampIncludesCab: true, + cabRequestedEnabled: true, + }, + values: { auditionSource: 0, cabEnabled: 0, ampEnabled: 1, ampMix: 1 }, + }, fullRig)).toBe(true); + expect(provisionalNAMPreviewMatchesState({ + modelState: { + ampModelPath: "C:/NAM/Preview.nam", + hasAmpModel: true, + ampIncludesCab: true, + cabRequestedEnabled: true, + }, + values: { auditionSource: 0, cabEnabled: 1, ampEnabled: 1, ampMix: 1 }, + }, fullRig)).toBe(false); + }); + + it("rejects an effective Cab that is on while the durable request is off", () => { + const requestOff = audition({ + provisionalPublication: { + slot: "amp", + localPath: "C:/NAM/Preview.nam", + cabRequestedEnabled: false, + effectiveCabEnabled: 0, + ampEnabled: 1, + ampMix: 1, + }, + }); + const state = { + modelState: { + ampModelPath: "C:/NAM/Preview.nam", + hasAmpModel: true, + ampIncludesCab: false, + cabRequestedEnabled: false, + }, + values: { auditionSource: 0, cabEnabled: 0, ampEnabled: 1, ampMix: 1 }, + }; + expect(provisionalNAMPreviewMatchesState(state, requestOff)).toBe(true); + expect(provisionalNAMPreviewMatchesState({ + ...state, + values: { ...state.values, cabEnabled: 1 }, + }, requestOff)).toBe(false); + }); + + it("accepts only the still-enabled matching Cab/IR preview", () => { + const cab = audition({ + key: "cab:preview", + slot: "cab", + localPath: "C:/IR/Preview.wav", + previousPath: baseline.cabIRPath, + captureType: "unknown", + }); + expect(provisionalNAMPreviewMatchesState({ + modelState: { cabIRPath: "C:/IR/Preview.wav", hasCabIR: true, cabRequestedEnabled: true }, + values: { auditionSource: 0, cabEnabled: 1 }, + }, cab)).toBe(true); + expect(provisionalNAMPreviewMatchesState({ + modelState: { cabIRPath: "C:/IR/Preview.wav", hasCabIR: true, cabRequestedEnabled: true }, + values: { auditionSource: 0, cabEnabled: 0 }, + }, cab)).toBe(false); + }); + +}); diff --git a/frontend/src/__tests__/namProjectStateIntegrity.test.ts b/frontend/src/__tests__/namProjectStateIntegrity.test.ts new file mode 100644 index 0000000..3665b86 --- /dev/null +++ b/frontend/src/__tests__/namProjectStateIntegrity.test.ts @@ -0,0 +1,93 @@ +import { describe, expect, it } from "vitest"; +import projectActionsSource from "../store/actions/project.ts?raw"; +import audioEngineHeaderSource from "../../../Source/AudioEngine.h?raw"; +import mainComponentSource from "../../../Source/MainComponent.cpp?raw"; +import { + collectNAMProjectAssetReferences, + summarizeNAMProjectStateIssues, +} from "../utils/namProjectState"; + +describe("NAM project-state integrity", () => { + it("discovers direct and A/B resources for a master NAM rack address", () => { + const assets = collectNAMProjectAssetReferences({ + modelState: { + pedalModelPath: "D:/NAM/drive.nam", + pedalDeclaredCaptureType: "pedal", + ampModelPath: "D:/NAM/amp.nam", + ampDeclaredCaptureType: "full_rig", + ampCaptureType: "amp_cab", + cabIRPath: "D:/IR/cab.wav", + }, + uiState: { + namRackCompare: { + snapshots: { + A: { modelState: { ampModelPath: "D:/NAM/a.nam" } }, + B: { modelState: { cabIRPath: "D:/IR/b.wav" } }, + }, + }, + }, + }, { + trackId: "", + trackName: "Master", + chain: "master", + fxIndex: 2, + pluginName: "OpenStudio NAM Rack", + }); + + expect(assets).toHaveLength(5); + expect(assets).toContainEqual(expect.objectContaining({ + chain: "master", + fxIndex: 2, + slot: "amp", + path: "D:/NAM/amp.nam", + captureType: "amp_cab", + gearType: "amp_cab", + })); + expect(assets).toContainEqual(expect.objectContaining({ + chain: "master", + compareSlot: "A", + compareSnapshot: true, + slot: "amp", + path: "D:/NAM/a.nam", + })); + expect(assets).toContainEqual(expect.objectContaining({ + chain: "master", + compareSlot: "B", + compareSnapshot: true, + slot: "cab", + path: "D:/IR/b.wav", + })); + }); + + it("builds a bounded, user-visible summary for rejected NAM restores", () => { + const summary = summarizeNAMProjectStateIssues([ + { phase: "restore", location: "Guitar / Track FX 1", detail: "saved NAM state was rejected" }, + { phase: "remove", location: "Master FX NAM Rack", detail: "native removal failed" }, + { phase: "add", location: "Bus / Input FX 2", detail: "NAM Rack could not be added" }, + { phase: "restore", location: "Master / FX 3", detail: "saved NAM state was rejected" }, + ]); + + expect(summary).toContain("4 NAM Rack project-state issues"); + expect(summary).toContain("Guitar / Track FX 1"); + expect(summary).toContain("plus 1 more"); + expect(summary).not.toContain("Master / FX 3"); + }); + + it("wires master asset discovery and checks every NAM restore result", () => { + expect(projectActionsSource).toContain('trackName: "Master"'); + expect(projectActionsSource).toContain('chain: "master"'); + expect(projectActionsSource).toContain("rawNAMAssets.push(...collectNAMAssetsFromPluginState"); + expect(projectActionsSource.match(/if \(isNAMRack && !stateResult\)/g)).toHaveLength(3); + expect(projectActionsSource).toContain("summarizeNAMProjectStateIssues(namProjectStateIssues)"); + expect(projectActionsSource).toContain("Project loaded with ${missingNAMAssets.length} missing NAM resource file"); + }); + + it("returns native removal truth instead of unconditional bridge success", () => { + expect(audioEngineHeaderSource).toContain("bool removeTrackInputFX"); + expect(audioEngineHeaderSource).toContain("bool removeTrackFX"); + expect(audioEngineHeaderSource).toContain("bool removeMasterFX"); + expect(mainComponentSource).toContain("completion(audioEngine.removeTrackInputFX"); + expect(mainComponentSource).toContain("completion(audioEngine.removeTrackFX"); + expect(mainComponentSource).toContain("completion(audioEngine.removeMasterFX"); + }); +}); diff --git a/frontend/src/__tests__/namRackAmpCaptureLibrary.test.ts b/frontend/src/__tests__/namRackAmpCaptureLibrary.test.ts new file mode 100644 index 0000000..fce3ce6 --- /dev/null +++ b/frontend/src/__tests__/namRackAmpCaptureLibrary.test.ts @@ -0,0 +1,48 @@ +import { describe, expect, it } from "vitest"; +import { + rankNAMRackAmpCaptures, + rankNAMRackCabIRs, +} from "../utils/namRackAmpCaptureLibrary"; + +describe("NAM Rack amp capture rail ranking", () => { + it("keeps the active capture first and then ranks captures by saved-preset usage", () => { + const captures = [ + { localPath: "C:\\NAM\\Clean.nam", name: "Clean" }, + { localPath: "C:\\NAM\\Heavy.nam", name: "Heavy" }, + { localPath: "C:\\NAM\\Lead.nam", name: "Lead" }, + ]; + const ranked = rankNAMRackAmpCaptures( + captures, + ["c:/nam/heavy.nam", "C:\\NAM\\Heavy.nam", "C:\\NAM\\Clean.nam"], + "C:\\NAM\\Lead.nam", + ); + + expect(ranked.map((entry) => entry.name)).toEqual(["Lead", "Heavy", "Clean"]); + expect(ranked.map((entry) => entry.presetUsageCount)).toEqual([0, 2, 1]); + expect(ranked[0].active).toBe(true); + }); + + it("filters non-amp library records and uses stable tie-breakers", () => { + const ranked = rankNAMRackAmpCaptures([ + { localPath: "z.nam", name: "Zulu", gearType: "amp", favorite: false, installedAt: "2025-01-01" }, + { localPath: "a.nam", name: "Alpha", gearType: "full rig", favorite: true, installedAt: "2024-01-01" }, + { localPath: "cab.wav", name: "Cab", gearType: "ir", favorite: true }, + ], [], undefined); + + expect(ranked.map((entry) => entry.name)).toEqual(["Alpha", "Zulu"]); + }); + + it("merges manifest and persistent IR history without duplicate paths", () => { + const ranked = rankNAMRackCabIRs([ + { localPath: "C:\\IRs\\Mesa.wav", name: "Mesa", gearType: "cabinet ir" }, + { localPath: "c:/irs/mesa.wav", favorite: true, gearType: "ir", lastUsed: 20 }, + { localPath: "C:\\IRs\\Orange.flac", name: "Orange", lastUsed: 10 }, + { localPath: "C:\\NAM\\Amp.nam", name: "Amp", gearType: "amp" }, + ], "C:\\IRs\\Orange.flac"); + + expect(ranked).toHaveLength(2); + expect(ranked.map((entry) => entry.name)).toEqual(["Orange", "Mesa"]); + expect(ranked[0].active).toBe(true); + expect(ranked[1].favorite).toBe(true); + }); +}); diff --git a/frontend/src/__tests__/namRackControlTooltip.test.ts b/frontend/src/__tests__/namRackControlTooltip.test.ts new file mode 100644 index 0000000..e817c46 --- /dev/null +++ b/frontend/src/__tests__/namRackControlTooltip.test.ts @@ -0,0 +1,47 @@ +import { describe, expect, it } from "vitest"; +import { positionNAMRackTooltip } from "../components/NAMRackControlTooltip"; + +const viewport = { top: 0, left: 0, width: 800, height: 600 }; +const tooltip = { width: 120, height: 48 }; + +describe("NAM rack control tooltip placement", () => { + it("prefers above a control when there is room", () => { + expect(positionNAMRackTooltip( + { top: 300, right: 440, bottom: 340, left: 400, width: 40, height: 40 }, + tooltip, + viewport, + )).toEqual({ left: 360, top: 242, placement: "above" }); + }); + + it("flips below controls near the top of the viewport", () => { + expect(positionNAMRackTooltip( + { top: 12, right: 440, bottom: 52, left: 400, width: 40, height: 40 }, + tooltip, + viewport, + )).toEqual({ left: 360, top: 62, placement: "below" }); + }); + + it("keeps the tooltip inside both horizontal viewport edges", () => { + const atLeft = positionNAMRackTooltip( + { top: 300, right: 30, bottom: 340, left: -10, width: 40, height: 40 }, + tooltip, + viewport, + ); + const atRight = positionNAMRackTooltip( + { top: 300, right: 810, bottom: 340, left: 770, width: 40, height: 40 }, + tooltip, + viewport, + ); + + expect(atLeft.left).toBe(8); + expect(atRight.left).toBe(672); + }); + + it("honours an offset visual viewport and clamps oversized vertical placement", () => { + expect(positionNAMRackTooltip( + { top: 115, right: 160, bottom: 145, left: 130, width: 30, height: 30 }, + { width: 130, height: 190 }, + { top: 100, left: 50, width: 300, height: 200 }, + )).toEqual({ left: 80, top: 108, placement: "below" }); + }); +}); diff --git a/frontend/src/__tests__/namRackFaceplateGeometry.test.ts b/frontend/src/__tests__/namRackFaceplateGeometry.test.ts new file mode 100644 index 0000000..92c8133 --- /dev/null +++ b/frontend/src/__tests__/namRackFaceplateGeometry.test.ts @@ -0,0 +1,224 @@ +import { describe, expect, it } from "vitest"; + +import { + createAmpV4FaceplateManifest, + faceplateControlHitRect, + faceplateControlVisualRect, + fitIntrinsicCanvas, + NAM_AMP_V4_FACEPLATE, + NAM_AMP_V4_GENERATION_SIZE, + NAM_AMP_V4_REFERENCE_ALPHA, + NAM_AMP_V4_REFERENCE_SIZE, + NAM_EQ_V4_FACEPLATE, + NAM_EQ_V4_FADER_CAP_CROP, + NAM_EQ_V4_FADER_CENTERS, + projectFaceplateManifest, + rectContainsRect, + scaleRectBetweenCanvases, + validateFaceplateManifest, + type FaceplateManifest, + type IntrinsicRect, +} from "../components/namRackFaceplateGeometry"; + +const sorted = (values: Iterable) => [...values].sort(); + +const AMP_PARAMS = [ + "ampEnabled", + "ampGainDb", + "ampBoost", + "ampVoice", + "bassDb", + "midDb", + "trebleDb", + "presenceDb", + "ampMix", + "ampOutputDb", +] as const; + +const EQ_PARAMS = [ + "eqEnabled", + "eqHPFHz", + "eq65Db", + "eq125Db", + "eq250Db", + "eq500Db", + "eq1kDb", + "eq2kDb", + "eq4kDb", + "eq8kDb", + "eq16kDb", + "eqLPFHz", + "eqLevelDb", +] as const; + +const uniqueParamIds = (manifest: FaceplateManifest) => + sorted(new Set(manifest.controls.map(({ paramId }) => paramId))); + +describe("NAM Rack intrinsic faceplate geometry", () => { + it("keeps every visible and interactive footprint inside painted alpha", () => { + for (const manifest of [NAM_AMP_V4_FACEPLATE, NAM_EQ_V4_FACEPLATE]) { + expect(validateFaceplateManifest(manifest)).toEqual([]); + for (const control of manifest.controls) { + expect( + rectContainsRect( + manifest.visibleAlphaBounds, + faceplateControlVisualRect(control), + ), + `${manifest.id}:${control.id}:visual`, + ).toBe(true); + expect( + rectContainsRect( + manifest.visibleAlphaBounds, + faceplateControlHitRect(control), + ), + `${manifest.id}:${control.id}:hit`, + ).toBe(true); + } + } + }); + + it("preserves all public Amp and Graphic EQ parameters", () => { + expect(uniqueParamIds(NAM_AMP_V4_FACEPLATE)).toEqual(sorted(AMP_PARAMS)); + expect(uniqueParamIds(NAM_EQ_V4_FACEPLATE)).toEqual(sorted(EQ_PARAMS)); + expect( + NAM_EQ_V4_FACEPLATE.controls.filter(({ paramId }) => paramId === "eqEnabled"), + ).toHaveLength(2); + for (const [toggleId, ledId, paramId] of [ + ["amp-power", "amp-power-led", "ampEnabled"], + ["amp-tight", "amp-tight-led", "ampBoost"], + ["amp-bright", "amp-bright-led", "ampVoice"], + ] as const) { + const toggle = NAM_AMP_V4_FACEPLATE.controls.find(({ id }) => id === toggleId); + const led = NAM_AMP_V4_FACEPLATE.controls.find(({ id }) => id === ledId); + expect(toggle).toMatchObject({ kind: "toggle", paramId }); + expect(led).toMatchObject({ kind: "led", paramId }); + if (toggle?.kind === "toggle" && led?.kind === "led") { + expect(led.center.x).toBeCloseTo(toggle.center.x, 8); + expect(led.center.y + led.visualDiameter / 2) + .toBeLessThan(toggle.center.y - toggle.visualDiameter / 2); + } + expect( + NAM_AMP_V4_FACEPLATE.controls.filter((control) => control.paramId === paramId), + ).toHaveLength(2); + } + }); + + it("maps the Amp template to the 1811 x 868 generation body without frozen old-asset pixels", () => { + const generatedAlpha = scaleRectBetweenCanvases( + NAM_AMP_V4_REFERENCE_ALPHA, + NAM_AMP_V4_REFERENCE_SIZE, + NAM_AMP_V4_GENERATION_SIZE, + ); + const generationManifest = createAmpV4FaceplateManifest({ + assetSize: NAM_AMP_V4_GENERATION_SIZE, + visibleAlphaBounds: generatedAlpha, + }); + + expect(generationManifest.assetSize).toEqual({ width: 1811, height: 868 }); + expect(validateFaceplateManifest(generationManifest)).toEqual([]); + generationManifest.controls.forEach((control, index) => { + const reference = NAM_AMP_V4_FACEPLATE.controls[index]; + expect(faceplateControlVisualRect(control).width).toBeCloseTo( + faceplateControlVisualRect(reference).width * 1811 / 2160, + 6, + ); + if (control.kind !== "fader" && reference.kind !== "fader") { + expect(control.center.x / 1811).toBeCloseTo(reference.center.x / 2160, 3); + expect(control.center.y / 868).toBeCloseTo(reference.center.y / 1035, 3); + } + }); + }); + + it("defines evenly spaced baked EQ wells and a truly cropped cap", () => { + const faders = NAM_EQ_V4_FACEPLATE.controls.filter( + (control) => control.kind === "fader", + ); + expect(faders).toHaveLength(9); + expect(faders.map(({ centerX }) => centerX)).toEqual(NAM_EQ_V4_FADER_CENTERS); + + const gaps = NAM_EQ_V4_FADER_CENTERS.slice(1).map( + (center, index) => center - NAM_EQ_V4_FADER_CENTERS[index], + ); + gaps.forEach((gap) => expect(gap).toBeCloseTo(141.25, 8)); + faders.forEach((fader) => { + expect(fader.bakedWell).toMatchObject({ y: 128, width: 30, height: 292 }); + expect(fader.capTravel).toEqual({ top: 144, bottom: 404 }); + expect(fader.capSize).toEqual({ width: 54, height: 28 }); + expect(fader.hitRect).toMatchObject({ y: 112, width: 112, height: 328 }); + expect(fader.bakedWell.height / 200).toBeGreaterThan(1.4); + expect((fader.capTravel.bottom - fader.capTravel.top) / 168).toBeGreaterThan(1.5); + }); + + expect(NAM_EQ_V4_FADER_CAP_CROP.measuredAlphaBounds).toEqual({ + x: 50, + y: 147, + width: 411, + height: 214, + }); + expect(NAM_EQ_V4_FADER_CAP_CROP.paddedCrop).toEqual({ + x: 42, + y: 139, + width: 427, + height: 230, + }); + expect( + rectContainsRect( + NAM_EQ_V4_FADER_CAP_CROP.paddedCrop, + NAM_EQ_V4_FADER_CAP_CROP.measuredAlphaBounds, + ), + ).toBe(true); + }); + + it("keeps the V6 lower-deck controls on their approved simplified geometry", () => { + expect(NAM_EQ_V4_FACEPLATE.safeZones.mainControls).toEqual({ + x: 156, + y: 110, + width: 1848, + height: 340, + }); + expect(NAM_EQ_V4_FACEPLATE.safeZones.utilityControls).toEqual({ + x: 156, + y: 460, + width: 1848, + height: 156, + }); + expect(NAM_EQ_V4_FACEPLATE.controls.find(({ id }) => id === "eq-hpf")) + .toMatchObject({ center: { x: 290, y: 274 } }); + expect(NAM_EQ_V4_FACEPLATE.controls.find(({ id }) => id === "eq-lpf")) + .toMatchObject({ center: { x: 1870, y: 274 } }); + expect(NAM_EQ_V4_FACEPLATE.controls.find(({ id }) => id === "eq-power")) + .toMatchObject({ center: { x: 290, y: 525 } }); + expect(NAM_EQ_V4_FACEPLATE.controls.find(({ id }) => id === "eq-led")) + .toMatchObject({ center: { x: 400, y: 525 } }); + expect(NAM_EQ_V4_FACEPLATE.controls.find(({ id }) => id === "eq-level")) + .toMatchObject({ + center: { x: 1870, y: 525 }, + visualDiameter: 90, + hitDiameter: 116, + }); + }); + + it("projects the same alpha-safe geometry at every supported host shape", () => { + const viewports: IntrinsicRect[] = [ + { x: 0, y: 0, width: 768, height: 341 }, + { x: 0, y: 0, width: 960, height: 540 }, + { x: 0, y: 0, width: 1280, height: 720 }, + { x: 0, y: 0, width: 1920, height: 1080 }, + { x: 17, y: 31, width: 2560, height: 1080 }, + ]; + + for (const manifest of [NAM_AMP_V4_FACEPLATE, NAM_EQ_V4_FACEPLATE]) { + for (const viewport of viewports) { + const canvas = fitIntrinsicCanvas(viewport, manifest.assetSize); + const projected = projectFaceplateManifest(manifest, canvas); + expect(rectContainsRect(canvas, projected.visibleAlpha)).toBe(true); + for (const visual of Object.values(projected.controlVisuals)) { + expect(rectContainsRect(projected.visibleAlpha, visual)).toBe(true); + } + for (const hit of Object.values(projected.controlHits)) { + expect(rectContainsRect(projected.visibleAlpha, hit)).toBe(true); + } + } + } + }); +}); diff --git a/frontend/src/__tests__/namRackFeedbackPresentationContract.test.ts b/frontend/src/__tests__/namRackFeedbackPresentationContract.test.ts new file mode 100644 index 0000000..ad0bd89 --- /dev/null +++ b/frontend/src/__tests__/namRackFeedbackPresentationContract.test.ts @@ -0,0 +1,59 @@ +// @ts-expect-error The app tsconfig omits Node builtin typings, while Vitest runs this source audit in Node. +import { readFileSync } from "node:fs"; +import { describe, expect, it } from "vitest"; + +const readSource = (relativePath: string) => + readFileSync(new URL(relativePath, import.meta.url), "utf8"); + +describe("NAM Rack feedback presentation contract", () => { + it("consumes native embedded identity fields without changing the approved faceplate assets", () => { + const bridge = readSource("../services/NativeBridge.ts"); + const panel = readSource("../components/NAMRackPanel.tsx"); + + for (const field of [ + "pedalMetadataName", + "pedalMetadataGearMake", + "pedalMetadataGearModel", + "ampMetadataName", + "ampMetadataGearMake", + "ampMetadataGearModel", + ]) { + expect(bridge).toContain(`${field}?: string`); + expect(panel).toContain(`modelState?.${field}`); + } + expect(panel).toContain("resolveNAMModelIdentityWarning"); + expect(panel).toContain("effectiveRackDiagnosticMessage"); + }); + + it("removes the duplicate Tape Echo surface while preserving post-FX Delay", () => { + const panel = readSource("../components/NAMRackPanel.tsx"); + const designPort = readSource("../components/NAMRackDesignPort.tsx"); + const bridge = readSource("../services/NativeBridge.ts"); + + expect(panel).not.toContain("tapeEchoEnabled"); + expect(designPort).not.toContain('name="tape-echo"'); + expect(bridge).not.toContain('param("tapeEchoEnabled"'); + expect(bridge).toContain('param("delayMode", "Delay Mode"'); + expect(designPort).toContain('paramId="delayMode"'); + }); + + it("uses the existing compact stage-status lane for gain and Economy guidance", () => { + const panel = readSource("../components/NAMRackPanel.tsx"); + const designPort = readSource("../components/NAMRackDesignPort.tsx"); + const feedback = readSource("../utils/namRackPresentationFeedback.ts"); + + expect(panel).toContain("resolveNAMGainStagingWarning"); + expect(panel).toContain("resolveNAMEconomyQualityWarning"); + expect(feedback).toContain("Set Amp Quality to Full"); + expect(designPort).toContain('className="premium-stage-status"'); + }); + + it("labels a retained external IR as bypassed while the embedded cab is active", () => { + const panel = readSource("../components/NAMRackPanel.tsx"); + const designPort = readSource("../components/NAMRackDesignPort.tsx"); + + expect(panel).toContain("Cab in Capture / External IR bypassed"); + expect(panel).toContain('"Retained IR bypassed"'); + expect(designPort).toContain("CAB INCLUDED / IR BYPASSED"); + }); +}); diff --git a/frontend/src/__tests__/namRackMutationReadback.test.ts b/frontend/src/__tests__/namRackMutationReadback.test.ts new file mode 100644 index 0000000..19fa6b0 --- /dev/null +++ b/frontend/src/__tests__/namRackMutationReadback.test.ts @@ -0,0 +1,77 @@ +import { describe, expect, it } from "vitest"; +import { vi } from "vitest"; +import { + applyVerifiedNAMRackMutation, + doesNAMRackMutationMatchReadback, +} from "../utils/namRackMutationReadback"; + +describe("NAM Rack mutation readback", () => { + it("verifies scalar updates and normalized resource paths", () => { + expect(doesNAMRackMutationMatchReadback({ + values: { cabEnabled: 1, ampMix: 0.5 }, + modelState: { cabIRPath: "C:/IRs/Studio.wav", hasCabIR: true }, + }, { + values: { cabEnabled: 1, ampMix: 0.5 }, + modelState: { cabIRPath: "c:\\irs\\studio.wav" }, + }, "windows")).toBe(true); + }); + + it("preserves case-sensitive resource identity on macOS and Linux", () => { + const state = { + modelState: { cabIRPath: "/IR/A.wav", hasCabIR: true }, + }; + const patch = { modelState: { cabIRPath: "/IR/a.wav" } }; + + expect(doesNAMRackMutationMatchReadback(state, patch, "linux")).toBe(false); + expect(doesNAMRackMutationMatchReadback(state, patch, "macos")).toBe(false); + }); + + it("rejects false-positive writes and verifies explicit clears", () => { + expect(doesNAMRackMutationMatchReadback({ + values: { cabEnabled: 0.5 }, + modelState: { cabIRPath: "C:/IRs/old.wav", hasCabIR: true }, + }, { + values: { cabEnabled: 0 }, + modelState: { clearCabIR: true }, + })).toBe(false); + + expect(doesNAMRackMutationMatchReadback({ + values: { cabEnabled: 0 }, + modelState: { cabIRPath: "", hasCabIR: false }, + }, { + values: { cabEnabled: 0 }, + modelState: { clearCabIR: true }, + })).toBe(true); + }); + + it("reports rejected, unverified, verified, and rejected-promise bridge paths", async () => { + const patch = { values: { cabEnabled: 0 }, modelState: { clearCabIR: true } }; + const bridge = { + setBuiltInPluginState: vi.fn(async () => false), + getBuiltInPluginState: vi.fn(async () => ({ + values: { cabEnabled: 0 }, + modelState: { cabIRPath: "", hasCabIR: false }, + })), + }; + + await expect(applyVerifiedNAMRackMutation(bridge, {}, patch)).resolves.toBe("rejected"); + expect(bridge.getBuiltInPluginState).not.toHaveBeenCalled(); + + bridge.setBuiltInPluginState.mockResolvedValueOnce(true); + bridge.getBuiltInPluginState.mockResolvedValueOnce({ + values: { cabEnabled: 1 }, + modelState: { cabIRPath: "old.wav", hasCabIR: true }, + }); + await expect(applyVerifiedNAMRackMutation(bridge, {}, patch)).resolves.toBe("unverified"); + + bridge.setBuiltInPluginState.mockResolvedValueOnce(true); + bridge.getBuiltInPluginState.mockResolvedValueOnce({ + values: { cabEnabled: 0 }, + modelState: { cabIRPath: "", hasCabIR: false }, + }); + await expect(applyVerifiedNAMRackMutation(bridge, {}, patch)).resolves.toBe("verified"); + + bridge.setBuiltInPluginState.mockRejectedValueOnce(new Error("native bridge failed")); + await expect(applyVerifiedNAMRackMutation(bridge, {}, patch)).rejects.toThrow("native bridge failed"); + }); +}); diff --git a/frontend/src/__tests__/namRackOrderPersistence.test.ts b/frontend/src/__tests__/namRackOrderPersistence.test.ts new file mode 100644 index 0000000..fdd7c2e --- /dev/null +++ b/frontend/src/__tests__/namRackOrderPersistence.test.ts @@ -0,0 +1,48 @@ +import { describe, expect, it, vi } from "vitest"; + +import { persistOptimisticNAMRackOrder } from "../utils/namRackOrderPersistence"; + +describe("NAM Rack post-FX order persistence", () => { + it("keeps an optimistic order after native persistence succeeds", async () => { + const applied: string[][] = []; + const result = await persistOptimisticNAMRackOrder({ + previousOrder: ["eq", "mod", "delay", "reverb"], + nextOrder: ["delay", "eq", "mod", "reverb"], + applyOrder: (order) => applied.push(order), + persistOrder: vi.fn().mockResolvedValue(true), + }); + + expect(result).toEqual({ ok: true }); + expect(applied).toEqual([["delay", "eq", "mod", "reverb"]]); + }); + + it("restores the exact previous order and reports a useful error on false", async () => { + const applied: string[][] = []; + const result = await persistOptimisticNAMRackOrder({ + previousOrder: ["eq", "mod", "delay", "reverb"], + nextOrder: ["reverb", "delay", "mod", "eq"], + applyOrder: (order) => applied.push(order), + persistOrder: vi.fn().mockResolvedValue(false), + }); + + expect(result.ok).toBe(false); + expect(result.errorMessage).toContain("previous order was restored"); + expect(applied).toEqual([ + ["reverb", "delay", "mod", "eq"], + ["eq", "mod", "delay", "reverb"], + ]); + }); + + it("rolls back when the bridge rejects", async () => { + const applied: string[][] = []; + const result = await persistOptimisticNAMRackOrder({ + previousOrder: ["eq", "mod"], + nextOrder: ["mod", "eq"], + applyOrder: (order) => applied.push(order), + persistOrder: vi.fn().mockRejectedValue(new Error("bridge disconnected")), + }); + + expect(result.ok).toBe(false); + expect(applied[applied.length - 1]).toEqual(["eq", "mod"]); + }); +}); diff --git a/frontend/src/__tests__/namRackPresentationFeedback.test.ts b/frontend/src/__tests__/namRackPresentationFeedback.test.ts new file mode 100644 index 0000000..16fdfe7 --- /dev/null +++ b/frontend/src/__tests__/namRackPresentationFeedback.test.ts @@ -0,0 +1,98 @@ +import { describe, expect, it } from "vitest"; + +import { + resolveNAMEconomyQualityWarning, + resolveNAMGainStagingWarning, + resolveNAMModelIdentityWarning, +} from "../utils/namRackPresentationFeedback"; + +describe("NAM Rack presentation feedback", () => { + it("flags a clear contradiction between the NAM label and embedded gear metadata", () => { + expect(resolveNAMModelIdentityWarning({ + displayName: "Peavey 5150", + metadataName: "Peavey 5150", + gearMake: "Victory V30 The Countess", + gearModel: "Victory V30 The Countess", + })).toBe( + "Embedded gear metadata identifies Victory V30 The Countess; the model label says “Peavey 5150”. Verify this Capture's identity.", + ); + }); + + it("reads nested preview metadata and stays quiet for matching or missing identity", () => { + expect(resolveNAMModelIdentityWarning({ + displayName: "Countess V30 full rig", + metadataSources: [{ namMetadata: { gear_make: "Victory", gear_model: "V30 The Countess" } }], + })).toBeNull(); + expect(resolveNAMModelIdentityWarning({ displayName: "Peavey 5150" })).toBeNull(); + }); + + it("treats a shared model number as an abbreviated match", () => { + expect(resolveNAMModelIdentityWarning({ + metadataName: "5150 Lead", + gearMake: "Peavey", + gearModel: "5150", + })).toBeNull(); + }); + + it("still catches a conflicting visible listing when the internal NAM name matches", () => { + expect(resolveNAMModelIdentityWarning({ + displayName: "Peavey 5150", + metadataName: "Victory V30 The Countess", + gearMake: "Victory", + gearModel: "V30 The Countess", + })).toContain('model label says “Peavey 5150”'); + }); + + it("warns for the selected Victory preset's stacked Input, Drive Level, and Tight Boost", () => { + expect(resolveNAMGainStagingWarning({ + inputTrimDb: 1.92, + driveActive: true, + driveLevelDb: 6, + ampActive: true, + ampBoostActive: true, + })).toContain("Input +1.9 dB, Drive Level +6.0 dB, Tight Boost"); + }); + + it("does not count bypassed stages or warn for neutral gain staging", () => { + expect(resolveNAMGainStagingWarning({ + inputTrimDb: 1.92, + driveActive: false, + driveLevelDb: 12, + ampActive: true, + ampBoostActive: false, + })).toBeNull(); + expect(resolveNAMGainStagingWarning({ + inputTrimDb: 12, + driveActive: true, + driveLevelDb: 12, + ampActive: false, + ampBoostActive: true, + })).toBeNull(); + }); + + it("does not suggest disabling Tight Boost when Tight Boost is already off", () => { + const warning = resolveNAMGainStagingWarning({ + inputTrimDb: 7, + driveActive: false, + ampActive: true, + ampBoostActive: false, + }); + expect(warning).toContain("Reduce Input or Drive Level if noise or smear appears"); + expect(warning).not.toContain("disable Tight Boost"); + }); + + it("provides compact guidance only for a loaded slimmable Economy amp", () => { + expect(resolveNAMEconomyQualityWarning({ + hasAmpModel: true, + slimmable: true, + requestedQualityValue: 0, + activeQualityValue: 0, + })).toBe("Amp Quality is Economy. Set Amp Quality to Full for the highest-fidelity model graph."); + expect(resolveNAMEconomyQualityWarning({ + hasAmpModel: true, + slimmable: true, + requestedQualityValue: 1, + activeQualityValue: 1, + })).toBeNull(); + }); +}); diff --git a/frontend/src/__tests__/namRackPresetTransactions.test.ts b/frontend/src/__tests__/namRackPresetTransactions.test.ts new file mode 100644 index 0000000..d5e64e6 --- /dev/null +++ b/frontend/src/__tests__/namRackPresetTransactions.test.ts @@ -0,0 +1,1097 @@ +// @ts-expect-error The app tsconfig omits Node builtin typings, while Vitest runs this source audit in Node. +import { readFileSync as readRawFileSync } from "node:fs"; +import { describe, expect, it } from "vitest"; + +import { + buildNAMModelQualityOptions, + buildNAMModulePresetCommitValues, + buildNAMRackRollbackPatch, + countNAMUserPresetFilters, + createNAMPresetSessionCache, + deriveNAMRackPresetDirtyState, + drainNAMPresetWriteQueue, + getNAMUserPresetEmptyState, + isNAMReservedPresetCollectionName, + migrateLegacyNAMRackPresetDspState, + migrateNAMRackModelQualityState, + NAM_RACK_DEFAULT_POST_FX_ORDER, + NAM_UNFILED_PRESET_COLLECTION_ID, + NAMPresetSessionInvalidatedError, + normalizeNAMRackSnapshotCaptureTypes, + normalizeNAMUserPresetFolder, + resolveNAMModelQualityOptionValue, + resolveNAMHeaderPresetNavigation, + runNAMHeaderPresetArrowAction, + shouldSynchronizeNAMRackPresetDirtyMarker, + shouldClearNAMPresetIdentityForUnsavedAmpTransition, + verifyNAMRackCompareReadback, +} from "../utils/namRackPresetTransactions"; + +function readFileSync(path: URL, encoding: "utf8"): string { + return readRawFileSync(path, encoding).replace(/\r\n?/g, "\n"); +} + +describe("NAM Rack preset transactions", () => { + it("does not dirty a loaded preset with native capture-type sentinels for empty slots", () => { + expect(normalizeNAMRackSnapshotCaptureTypes({ + pedalModelPath: "", + pedalDeclaredCaptureType: "unknown", + ampModelPath: " C:/NAM/Bass.nam ", + ampDeclaredCaptureType: " full_rig ", + })).toEqual({ + ampDeclaredCaptureType: "full_rig", + }); + + expect(normalizeNAMRackSnapshotCaptureTypes({ + ampModelPath: "", + ampDeclaredCaptureType: "amp_cab", + })).toEqual({}); + }); + + it("drains pending UI persistence before flushing coalesced parameter writes", async () => { + const events: string[] = []; + let releaseUiWrite!: () => void; + const uiWrite = new Promise((resolve) => { + releaseUiWrite = resolve; + }); + const flush = async () => { + events.push("parameters-flushed"); + return true; + }; + + const drain = drainNAMPresetWriteQueue(async () => { + await uiWrite; + events.push("ui-state-drained"); + }, flush); + await Promise.resolve(); + expect(events).toEqual([]); + + releaseUiWrite(); + await expect(drain).resolves.toBe(true); + expect(events).toEqual(["ui-state-drained", "parameters-flushed"]); + }); + + it("aborts a preset transaction when either pending-write stage fails", async () => { + await expect(drainNAMPresetWriteQueue( + async () => undefined, + async () => false, + )).resolves.toBe(false); + await expect(drainNAMPresetWriteQueue( + async () => { throw new Error("UI persistence failed"); }, + async () => true, + )).resolves.toBe(false); + }); + + it("reuses a fresh session-only preset catalog and refreshes after the TTL", async () => { + const cache = createNAMPresetSessionCache(100); + let calls = 0; + const load = () => Promise.resolve([`catalog-${++calls}`]); + + await expect(cache.load(load, { now: 1_000 })).resolves.toEqual(["catalog-1"]); + await expect(cache.load(load, { now: 1_099 })).resolves.toEqual(["catalog-1"]); + await expect(cache.load(load, { now: 1_100 })).resolves.toEqual(["catalog-2"]); + await expect(cache.load(load, { force: true, now: 1_101 })).resolves.toEqual(["catalog-3"]); + expect(calls).toBe(3); + }); + + it("deduplicates current-generation discovery and rejects stale publication after invalidation", async () => { + const cache = createNAMPresetSessionCache(1_000); + const resolvers: Array<(value: string[]) => void> = []; + let calls = 0; + const load = () => new Promise((resolve) => { + calls += 1; + resolvers.push(resolve); + }); + + const first = cache.load(load, { now: 10 }); + const duplicate = cache.load(load, { now: 10 }); + await Promise.resolve(); + expect(calls).toBe(1); + expect(duplicate).toBe(first); + + cache.invalidate(); + const afterMutation = cache.load(load, { force: true, now: 11 }); + await Promise.resolve(); + expect(calls).toBe(2); + + resolvers[0](["stale"]); + resolvers[1](["fresh"]); + await expect(first).rejects.toBeInstanceOf(NAMPresetSessionInvalidatedError); + await expect(afterMutation).resolves.toEqual(["fresh"]); + expect(cache.peek(11)).toEqual(["fresh"]); + }); + + it("restores all prior module-preview values before committing the selected module", () => { + expect(buildNAMModulePresetCommitValues( + { delayMix: 0.42, delayTimeMs: 375 }, + { + applied: true, + previousValues: { + reverbMix: 0.18, + reverbDecaySec: 2.2, + delayMix: 0.1, + }, + }, + )).toEqual({ + reverbMix: 0.18, + reverbDecaySec: 2.2, + delayMix: 0.42, + delayTimeMs: 375, + }); + }); + + it("does not add unrelated values when no temporary module preview exists", () => { + expect(buildNAMModulePresetCommitValues( + { reverbMix: 0.3 }, + { applied: false, previousValues: { delayMix: 0.1 } }, + )).toEqual({ reverbMix: 0.3 }); + }); + + it("navigates within user presets when a user preset is active", () => { + const result = resolveNAMHeaderPresetNavigation({ + factoryPresets: [ + { id: "clean", name: "Clean Template" }, + { id: "lead", name: "Lead Template" }, + ], + userPresets: [ + { name: "Bass Tight" }, + { name: "My Crunch" }, + { name: "Wide Clean" }, + ], + activeFactoryId: "clean", + activeUserPresetName: "my crunch", + }); + + expect(result).toEqual({ + previous: { kind: "user", name: "Bass Tight" }, + next: { kind: "user", name: "Wide Clean" }, + }); + }); + + it("disables truthful user navigation while the active user preset is unavailable", () => { + expect(resolveNAMHeaderPresetNavigation({ + factoryPresets: [ + { id: "clean", name: "Clean Template" }, + { id: "lead", name: "Lead Template" }, + ], + userPresets: [], + activeFactoryId: "clean", + activeUserPresetName: "Saved Session Tone", + })).toEqual({}); + }); + + it("uses each verified user-preset commit for the following navigation step", async () => { + const userPresets = [ + { name: "Alpha" }, + { name: "Bravo" }, + { name: "Charlie" }, + ]; + let activeUserPresetName = "Alpha"; + const loaded: string[] = []; + + const loadNext = async () => { + const target = resolveNAMHeaderPresetNavigation({ + factoryPresets: [], + userPresets, + activeFactoryId: "", + activeUserPresetName, + }).next; + expect(target?.kind).toBe("user"); + if (target?.kind !== "user") return; + await Promise.resolve(); + loaded.push(target.name); + activeUserPresetName = target.name; + }; + + await loadNext(); + await loadNext(); + await loadNext(); + + expect(loaded).toEqual(["Bravo", "Charlie", "Alpha"]); + }); + + it("counts legacy presets even when they have no Recent metadata", () => { + const presets = [ + { name: "high gain!" }, + { name: "Mesa High gain!" }, + ]; + + expect(countNAMUserPresetFilters(presets, {})).toEqual({ + all: 2, + favorites: 0, + recent: 0, + }); + expect(countNAMUserPresetFilters(presets, { + "Mesa High gain!": { favorite: true, lastUsed: 42 }, + })).toEqual({ + all: 2, + favorites: 1, + recent: 1, + }); + }); + + it("distinguishes an empty library from an active filter with no matches", () => { + expect(getNAMUserPresetEmptyState(0, 0, "all", "")).toEqual({ + message: "No saved presets yet", + showAll: false, + }); + expect(getNAMUserPresetEmptyState(2, 0, "recent", "")).toEqual({ + message: "No user presets match the selected filter", + showAll: true, + }); + expect(getNAMUserPresetEmptyState(2, 0, "all", "mesa")).toEqual({ + message: "No user presets match the current search or filter", + showAll: true, + }); + expect(getNAMUserPresetEmptyState(2, 1, "recent", "")).toBeUndefined(); + }); + + it("wraps factory template navigation when no user preset is active", () => { + expect(resolveNAMHeaderPresetNavigation({ + factoryPresets: [ + { id: "clean", name: "Clean Template" }, + { id: "lead", name: "Lead Template" }, + { id: "ambient", name: "Ambient Template" }, + ], + userPresets: [{ name: "User Tone" }], + activeFactoryId: "clean", + })).toEqual({ + previous: { kind: "factory", id: "ambient", name: "Ambient Template" }, + next: { kind: "factory", id: "lead", name: "Lead Template" }, + }); + }); + + it("does not navigate relative to an invisible assumed factory preset", () => { + expect(resolveNAMHeaderPresetNavigation({ + factoryPresets: [ + { id: "clean", name: "Clean Template" }, + { id: "lead", name: "Lead Template" }, + ], + userPresets: [], + activeFactoryId: "", + activeUserPresetName: "", + })).toEqual({}); + }); + + it("enters saved full-rig navigation from the exact empty-rack state", async () => { + const navigation = resolveNAMHeaderPresetNavigation({ + factoryPresets: [ + { id: "clean", name: "Current Capture Clean" }, + { id: "lead", name: "Current Capture Lead" }, + ], + userPresets: [ + { name: "Alpha Saved Rig" }, + { name: "Zulu Saved Rig" }, + ], + activeFactoryId: "", + activeUserPresetName: "", + allowInactiveEntry: true, + }); + + expect(navigation).toEqual({ + previous: { kind: "user", name: "Zulu Saved Rig" }, + next: { kind: "user", name: "Alpha Saved Rig" }, + }); + + let activePresetName = ""; + let libraryOpened = false; + const result = await runNAMHeaderPresetArrowAction(navigation.next, { + loadTarget: async (target) => { + expect(target).toEqual({ kind: "user", name: "Alpha Saved Rig" }); + activePresetName = target.kind === "user" ? target.name : ""; + return true; + }, + openLibrary: () => { libraryOpened = true; }, + }); + + expect(result).toBe("loaded"); + expect(activePresetName).toBe("Alpha Saved Rig"); + expect(libraryOpened).toBe(false); + }); + + it("can enter one saved rig from empty, then disables cycling its one-item collection", async () => { + const options = { + factoryPresets: [{ id: "clean", name: "Current Capture Clean" }], + userPresets: [{ name: "Only Saved Rig" }], + activeFactoryId: "", + allowInactiveEntry: true, + } as const; + + const entryNavigation = resolveNAMHeaderPresetNavigation({ + ...options, + activeUserPresetName: "", + }); + expect(entryNavigation).toEqual({ + previous: { kind: "user", name: "Only Saved Rig" }, + next: { kind: "user", name: "Only Saved Rig" }, + }); + let activeUserPresetName = ""; + await expect(runNAMHeaderPresetArrowAction(entryNavigation.next, { + loadTarget: async (target) => { + activeUserPresetName = target.kind === "user" ? target.name : ""; + return Boolean(activeUserPresetName); + }, + openLibrary: () => undefined, + })).resolves.toBe("loaded"); + expect(activeUserPresetName).toBe("Only Saved Rig"); + expect(resolveNAMHeaderPresetNavigation({ + ...options, + activeUserPresetName, + })).toEqual({}); + }); + + it("preserves the verified identity across empty-rack resource restore, then advances from Alpha to Bravo", async () => { + const userPresets = [ + { name: "Alpha" }, + { name: "Bravo" }, + { name: "Charlie" }, + ]; + expect(shouldClearNAMPresetIdentityForUnsavedAmpTransition({ + previouslyHadAmpModel: false, + hasAmpModel: true, + schemaActiveUserPresetName: "Alpha", + schemaActiveFactoryPresetId: "", + })).toBe(false); + expect(shouldClearNAMPresetIdentityForUnsavedAmpTransition({ + previouslyHadAmpModel: false, + hasAmpModel: true, + schemaActiveUserPresetName: "", + schemaActiveFactoryPresetId: "", + })).toBe(true); + + let activeUserPresetName = "Alpha"; + const next = resolveNAMHeaderPresetNavigation({ + factoryPresets: [], + userPresets, + activeFactoryId: "", + activeUserPresetName, + allowInactiveEntry: true, + }).next; + const result = await runNAMHeaderPresetArrowAction(next, { + loadTarget: async (target) => { + if (target.kind !== "user") return false; + activeUserPresetName = target.name; + return true; + }, + openLibrary: () => undefined, + }); + + expect(result).toBe("loaded"); + expect(activeUserPresetName).toBe("Bravo"); + }); + + it("opens the preset chooser instead of leaving an empty-rack arrow dead", async () => { + const navigation = resolveNAMHeaderPresetNavigation({ + factoryPresets: [ + { id: "clean", name: "Current Capture Clean" }, + { id: "lead", name: "Current Capture Lead" }, + ], + userPresets: [], + activeFactoryId: "", + activeUserPresetName: "", + allowInactiveEntry: true, + }); + + // NAMRackPanel rejects these factory-only targets while there is no Amp + // Capture because they contain settings, not the required NAM resource. + const noLoadableTarget = navigation.next?.kind === "factory" ? undefined : navigation.next; + let libraryOpened = false; + let loadCalls = 0; + const result = await runNAMHeaderPresetArrowAction(noLoadableTarget, { + loadTarget: async () => { + loadCalls += 1; + return true; + }, + openLibrary: () => { libraryOpened = true; }, + }); + + expect(result).toBe("library-opened"); + expect(libraryOpened).toBe(true); + expect(loadCalls).toBe(0); + }); + + it("uses values between NAM slim breakpoints instead of ambiguous threshold values", () => { + expect(buildNAMModelQualityOptions([0.75, 0.25, 0.5, 0.5])).toEqual([ + { value: 0, label: "Economy" }, + { value: 0.375, label: "Balanced 1" }, + { value: 0.625, label: "Balanced 2" }, + { value: 1, label: "Full" }, + ]); + expect(buildNAMModelQualityOptions([0.5])).toEqual([ + { value: 0, label: "Economy" }, + { value: 1, label: "Full" }, + ]); + }); + + it("maps exact NAM slim breakpoints to the higher tier used by the core", () => { + expect(resolveNAMModelQualityOptionValue(0.49, [0.5])).toBe(0); + expect(resolveNAMModelQualityOptionValue(0.5, [0.5])).toBe(1); + expect(resolveNAMModelQualityOptionValue(0.51, [0.5])).toBe(1); + }); + + it("derives edited state from an authoritative preset baseline instead of a stale marker", () => { + expect(deriveNAMRackPresetDirtyState({ + activePresetKind: "user", + hasBaseline: true, + differsFromBaseline: true, + persistedDirty: false, + })).toBe(true); + expect(deriveNAMRackPresetDirtyState({ + activePresetKind: "factory", + hasBaseline: true, + differsFromBaseline: false, + legacyFactoryDiffers: true, + persistedDirty: true, + })).toBe(false); + expect(deriveNAMRackPresetDirtyState({ + activePresetKind: "user", + hasBaseline: false, + differsFromBaseline: true, + persistedDirty: false, + })).toBe(false); + + expect(shouldSynchronizeNAMRackPresetDirtyMarker({ + activePresetKind: "user", + hasBaseline: true, + derivedDirty: true, + persistedDirty: false, + })).toBe(true); + expect(shouldSynchronizeNAMRackPresetDirtyMarker({ + activePresetKind: "user", + hasBaseline: false, + derivedDirty: true, + persistedDirty: false, + })).toBe(false); + }); + + it("migrates unsized legacy captures to Full and retires the legacy global size", () => { + const legacyWithoutQuality = { + values: { ampMix: 1 }, + modelState: { + pedalModelPath: "C:/NAM/Pedal.nam", + ampModelPath: "C:/NAM/Amp.nam", + }, + }; + expect(migrateNAMRackModelQualityState(legacyWithoutQuality)).toEqual({ + values: { ampMix: 1 }, + modelState: { + pedalModelPath: "C:/NAM/Pedal.nam", + pedalModelSize: 1, + ampModelPath: "C:/NAM/Amp.nam", + ampModelSize: 1, + }, + }); + + expect(migrateNAMRackModelQualityState({ + values: { ampMix: 1, namModelSize: 0.37 }, + parameters: [ + { id: "ampMix", value: 1 }, + { id: "namModelSize", value: 0.25 }, + ], + modelState: { + pedalModelPath: "C:/NAM/Pedal.nam", + pedalModelSize: Number.NaN, + ampModelPath: "C:/NAM/Amp.nam", + }, + })).toEqual({ + values: { ampMix: 1 }, + parameters: [{ id: "ampMix", value: 1 }], + modelState: { + pedalModelPath: "C:/NAM/Pedal.nam", + pedalModelSize: 0.37, + ampModelPath: "C:/NAM/Amp.nam", + ampModelSize: 0.37, + }, + }); + + expect(migrateNAMRackModelQualityState({ + values: { ampMix: 1, namModelSize: 0.2 }, + parameters: [{ id: "namModelSize", value: 0.2 }], + })).toEqual({ + values: { ampMix: 1 }, + parameters: [], + }); + }); + + it("canonicalizes a legacy Compare quality selector before strict readback verification", () => { + const migrated = migrateLegacyNAMRackPresetDspState( + migrateNAMRackModelQualityState({ + values: { ampMix: 1, namModelSize: 0.37 }, + modelState: { ampModelPath: "C:/NAM/Amp.nam" }, + }), + { completePreset: true }, + ) as Record; + + expect(migrated.values).not.toHaveProperty("namModelSize"); + expect(migrated.modelState.ampModelSize).toBe(0.37); + expect(verifyNAMRackCompareReadback({ + values: migrated.values, + modelState: migrated.modelState, + dspState: migrated.dspState, + }, { + values: migrated.values, + modelState: { + ampModelPath: "C:/NAM/Amp.nam", + ampModelSize: 0.37, + }, + dspState: migrated.dspState, + })).toBe(true); + }); + + it("migrates complete preset bundles to the one current rack DSP", () => { + const migrated = migrateLegacyNAMRackPresetDspState({ + values: { reverbDecaySec: 10 }, + modelState: { ampModelPath: "C:/NAM/Amp.nam" }, + }, { completePreset: true }) as Record; + expect(migrated).toMatchObject({ + values: { + reverbDecaySec: 10, + precisionDriveVolumeDb: 9, + chaosMode: 0, + chaosWeight: 0.5, + }, + modelState: { ampModelPath: "C:/NAM/Amp.nam" }, + dspState: { reverbEngineVersion: 5, namEffectsDspVersion: 19 }, + }); + + const legacyV9 = { + values: { reverbVoice: 2, reverbDecaySec: 10 }, + dspState: { reverbEngineVersion: 5, namEffectsDspVersion: 9 }, + }; + const currentOnce = migrateLegacyNAMRackPresetDspState(legacyV9, { completePreset: true }); + expect(migrateLegacyNAMRackPresetDspState(currentOnce, { completePreset: true })).toEqual(currentOnce); + + expect(migrateLegacyNAMRackPresetDspState({ + values: {}, + dspState: { reverbEngineVersion: 4 }, + }, { completePreset: true })).toMatchObject({ + values: { precisionDriveVolumeDb: 9, chaosMode: 0, chaosWeight: 0.5 }, + dspState: { reverbEngineVersion: 5, namEffectsDspVersion: 19 }, + }); + }); + + it("reserves built-in collection names and gives empty folders an explicit Unfiled collection", () => { + expect(NAM_UNFILED_PRESET_COLLECTION_ID).toBe("unfiled"); + expect(["all", "Favorites", " recent ", "UNFILED"].every( + (name) => isNAMReservedPresetCollectionName(name), + )).toBe(true); + expect(normalizeNAMUserPresetFolder("Favorites")).toBe(""); + expect(normalizeNAMUserPresetFolder(" Session / Leads ")).toBe("Session Leads"); + }); + + it("builds an exact mutable rollback patch without replaying read-only model flags", () => { + expect(buildNAMRackRollbackPatch({ + values: { + auditionSource: 1, + inputMode: 2, + tapeEchoEnabled: 1, + tapeEchoMix: 0.63, + tapeEchoTimeMs: 480, + tapeEchoFeedback: 0.44, + tapeEchoMod: 0.21, + tapeEchoTone: 0.58, + delayEnabled: 1, + delayMix: 0.27, + delayTimeMs: 640, + delayMode: 1, + pedalMix: 0.37, + ignored: "not-a-number", + }, + modelState: { + pedalModelPath: " C:/NAM/Pedal.nam ", + pedalModelSize: -0.2, + pedalDeclaredCaptureType: "pedal", + ampModelPath: "C:/NAM/Amp.nam", + ampModelSize: 0.62, + ampDeclaredCaptureType: "full_rig", + cabIRPath: "", + hasAmpModel: true, + ampIncludesCab: false, + cabRequestedEnabled: true, + }, + uiState: { + namActivePreview: { slot: "amp" }, + namPresetDirty: true, + namPresetBaseline: { + values: { inputMode: 0, ampMix: 0.8 }, + }, + }, + dspState: { + reverbEngineVersion: 3, + namEffectsDspVersion: 2, + unknownEngineVersion: 99, + }, + })).toEqual({ + values: { + delayEnabled: 1, + delayMix: 0.27, + delayTimeMs: 640, + delayMode: 1, + pedalMix: 0.37, + }, + modelState: { + pedalModelPath: "C:/NAM/Pedal.nam", + pedalModelSize: 0, + pedalDeclaredCaptureType: "pedal", + ampModelPath: "C:/NAM/Amp.nam", + ampModelSize: 0.62, + ampDeclaredCaptureType: "full_rig", + clearCabIR: true, + cabRequestedEnabled: true, + }, + uiState: { + namActivePreview: { slot: "amp" }, + namPresetDirty: true, + namPresetBaseline: { + values: { ampMix: 0.8 }, + }, + }, + dspState: { + reverbEngineVersion: 5, + namEffectsDspVersion: 19, + }, + }); + }); + + it("requires complete Compare readback for every explicitly recalled state domain", () => { + const target = { + values: { ampMix: 0.75, delayEnabled: 0 }, + modelState: { + pedalModelPath: "C:/NAM/Drive.nam", + pedalModelSize: 0.5, + clearAmpModel: true, + cabRequestedEnabled: false, + }, + dspState: { reverbEngineVersion: 5, namEffectsDspVersion: 15 }, + postFxOrder: ["eq", "delay", "mod", "reverb"], + }; + const readback = { + values: { ampMix: 0.75, delayEnabled: 0 }, + modelState: { + pedalModelPath: "C:/NAM/Drive.nam", + pedalModelSize: 0.5, + ampModelPath: "", + cabRequestedEnabled: false, + }, + dspState: { reverbEngineVersion: 5, namEffectsDspVersion: 15 }, + }; + + expect(verifyNAMRackCompareReadback( + target, + readback, + ["eq", "delay", "mod", "reverb"], + )).toBe(true); + expect(verifyNAMRackCompareReadback( + target, + { ...readback, values: { ampMix: 0.75 } }, + target.postFxOrder, + )).toBe(false); + expect(verifyNAMRackCompareReadback( + target, + { ...readback, modelState: { ...readback.modelState, ampModelPath: "C:/NAM/Wrong.nam" } }, + target.postFxOrder, + )).toBe(false); + expect(verifyNAMRackCompareReadback( + target, + { ...readback, dspState: { reverbEngineVersion: 4, namEffectsDspVersion: 2 } }, + target.postFxOrder, + )).toBe(true); + expect(verifyNAMRackCompareReadback(target, readback, ["eq", "mod", "delay", "reverb"])).toBe(false); + + expect(verifyNAMRackCompareReadback( + { ...target, postFxOrder: [...NAM_RACK_DEFAULT_POST_FX_ORDER] }, + readback, + undefined, + )).toBe(true); + expect(verifyNAMRackCompareReadback( + target, + readback, + undefined, + )).toBe(false); + + expect(verifyNAMRackCompareReadback( + { values: { ampMix: 0.75 }, modelState: {} }, + { values: { ampMix: 0.75 }, modelState: {}, dspState: {} }, + )).toBe(true); + }); + + it("does not invent model quality while preparing rollback state", () => { + expect(buildNAMRackRollbackPatch({ + values: {}, + modelState: { + pedalModelPath: "C:/NAM/Pedal.nam", + ampModelPath: "C:/NAM/Amp.nam", + }, + })?.modelState).toEqual({ + pedalModelPath: "C:/NAM/Pedal.nam", + ampModelPath: "C:/NAM/Amp.nam", + clearCabIR: true, + }); + }); + + it("keeps Panel remove/import wiring tied to the transactional helpers", () => { + const panelSource = readFileSync( + new URL("../components/NAMRackPanel.tsx", import.meta.url), + "utf8", + ); + const removeStart = panelSource.indexOf("const removeSlotModule"); + const removeEnd = panelSource.indexOf("const applyPreset", removeStart); + const applyStart = removeEnd; + const applyEnd = panelSource.indexOf("const saveUserPreset", applyStart); + const importStart = panelSource.indexOf("const importUserPreset"); + const importEnd = panelSource.indexOf("const rememberIRPath", importStart); + + expect(panelSource.slice(removeStart, removeEnd)).toContain("values.precisionDriveEnabled = 0"); + expect(panelSource.slice(removeStart, removeEnd)).toContain("values.chaosEnabled = 0"); + expect(panelSource.slice(removeStart, removeEnd)).toContain("nextModelState.clearPedalModel = true"); + expect(panelSource).toContain("const triplePreampStackActive = precisionDriveActive && chaosActive && pedalActive"); + expect(panelSource).toContain("their Levels stack"); + expect(panelSource.slice(applyStart, applyEnd)).toContain("reverbEngineVersion: CURRENT_NAM_REVERB_ENGINE_VERSION"); + expect(panelSource.slice(applyStart, applyEnd)).toContain("namEffectsDspVersion: CURRENT_NAM_EFFECTS_DSP_VERSION"); + expect(panelSource).toContain("state: sanitizeNAMRackPortableDspState(state)"); + expect(panelSource.slice(importStart, importEnd)).toContain("buildNAMRackRollbackPatch"); + expect(panelSource.slice(importStart, importEnd)).toContain("rollbackImport"); + expect(panelSource.slice(importStart, importEnd)).toContain("The previous rack was restored."); + }); + + it("keeps the requested external-cab preference in A/B snapshots", () => { + const panelSource = readFileSync( + new URL("../components/NAMRackPanel.tsx", import.meta.url), + "utf8", + ); + + expect(panelSource).toContain("modelSnapshot.cabRequestedEnabled = modelState.cabRequestedEnabled"); + expect(panelSource).toContain("currentCabRequest !== savedCabRequest"); + expect(panelSource).toContain("modelState.cabRequestedEnabled = values.cabEnabled >= 0.5"); + }); + + it("keeps NAM model quality as per-slot model state instead of an automatable parameter", () => { + const panelSource = readFileSync( + new URL("../components/NAMRackPanel.tsx", import.meta.url), + "utf8", + ); + + expect(panelSource).toContain('modelState: { [sizeKey]: Math.max(0, Math.min(1, requestedSize)) }'); + expect(panelSource).toContain("modelSnapshot.pedalModelSize"); + expect(panelSource).toContain("modelSnapshot.ampModelSize"); + expect(panelSource).toContain("if (Number.isFinite(modelState?.pedalModelSize))"); + expect(panelSource).toContain("if (Number.isFinite(modelState?.ampModelSize))"); + expect(panelSource).not.toContain('paramById(params, "namModelSize")'); + }); + + it("keeps Full quality explicit to new model loads and preserves recall sizes", () => { + const panelSource = readFileSync( + new URL("../components/NAMRackPanel.tsx", import.meta.url), + "utf8", + ); + const explorerSource = readFileSync( + new URL("../components/NAMExplorer.tsx", import.meta.url), + "utf8", + ); + const bridgeSource = readFileSync( + new URL("../services/NativeBridge.ts", import.meta.url), + "utf8", + ); + + expect(panelSource).toContain('{ modelSize: NAM_FULL_MODEL_SIZE }'); + expect(explorerSource).toContain("ampModelSize: NAM_FULL_MODEL_SIZE"); + expect(explorerSource).toContain("pedalModelSize: NAM_FULL_MODEL_SIZE"); + expect(explorerSource).toContain("snapshot.ampModelSize === undefined"); + expect(explorerSource).toContain("snapshot.pedalModelSize === undefined"); + expect(bridgeSource).toContain("requestedModelSize"); + expect(bridgeSource).toContain("ampModelSize: requestedModelSize"); + expect(bridgeSource).toContain("pedalModelSize: requestedModelSize"); + }); + + it("stores and synchronizes factory and user dirty state from complete readback baselines", () => { + const panelSource = readFileSync( + new URL("../components/NAMRackPanel.tsx", import.meta.url), + "utf8", + ); + const dirtyStart = panelSource.indexOf("const persistedPresetDirty"); + const dirtyEnd = panelSource.indexOf("const currentCompareDirty", dirtyStart); + const dirtySource = panelSource.slice(dirtyStart, dirtyEnd); + const factoryStart = panelSource.indexOf("const applyPreset = async"); + const factoryEnd = panelSource.indexOf("const currentRackToneSlot", factoryStart); + const factorySource = panelSource.slice(factoryStart, factoryEnd); + + expect(dirtySource).toContain("deriveNAMRackPresetDirtyState({"); + expect(dirtySource).toContain("differsFromBaseline: snapshotDiffers(currentSnapshot, activePresetBaseline)"); + expect(dirtySource).not.toContain("snapshotDiffers(currentSnapshot, activePresetBaseline) ||"); + expect(panelSource).toContain("shouldSynchronizeNAMRackPresetDirtyMarker({"); + expect(panelSource).toContain('{ namPresetDirty: isPresetDirty }'); + expect(factorySource).toContain("const loadedBaseline = presetBaselineFromState(loadedState)"); + expect(factorySource).toContain("baseline: loadedBaseline"); + expect(factorySource).toContain("verifyNAMRackCompareReadback(\n loadedBaseline,"); + }); + + it("drains parameter writes and publishes a native readback baseline before showing a saved preset as clean", () => { + const panelSource = readFileSync( + new URL("../components/NAMRackPanel.tsx", import.meta.url), + "utf8", + ); + const headerSaveStart = panelSource.indexOf("const saveRackTone"); + const headerSaveEnd = panelSource.indexOf("const loadUserPreset", headerSaveStart); + const headerSave = panelSource.slice(headerSaveStart, headerSaveEnd); + + expect(headerSave).toContain('drainPendingWritesForPresetTransaction("Preset save")'); + expect(headerSave.indexOf('drainPendingWritesForPresetTransaction("Preset save")')).toBeLessThan( + headerSave.indexOf("saveNAMTone({"), + ); + expect(headerSave).toContain("const savedBaseline = await capturePresetBaseline()"); + expect(headerSave).not.toContain("savedBaseline ?? currentSnapshot"); + expect(headerSave.indexOf("await onRefreshRack()")).toBeLessThan( + headerSave.indexOf("setSaveToneOpen(false)"), + ); + + expect(panelSource).not.toContain("const saveUserPreset"); + expect(panelSource).toContain(" { + const panelSource = readFileSync( + new URL("../components/NAMRackPanel.tsx", import.meta.url), + "utf8", + ); + const factoryStart = panelSource.indexOf("const applyPreset = async"); + const factoryEnd = panelSource.indexOf("const currentRackToneSlot", factoryStart); + const factoryLoad = panelSource.slice(factoryStart, factoryEnd); + const userStart = panelSource.indexOf("const loadUserPreset = async"); + const userEnd = panelSource.indexOf("const applyHeaderPresetTarget", userStart); + const userLoad = panelSource.slice(userStart, userEnd); + const headerStart = userEnd; + const headerEnd = panelSource.indexOf("const headerPresetTargetLabel", headerStart); + const headerNavigation = panelSource.slice(headerStart, headerEnd); + + expect(panelSource).toContain("type NAMActivePresetIdentity ="); + expect(panelSource).not.toContain("setActiveUserPresetName"); + expect(panelSource).not.toContain("setPresetId"); + expect(panelSource).toContain("schema.uiState?.namActiveFactoryPresetId"); + expect(factoryLoad).toContain("factoryId: nextPreset.id"); + expect(factoryLoad.indexOf("drainPendingWritesForPresetTransaction")).toBeLessThan( + factoryLoad.indexOf("readNAMRackPresetStateWithRetry("), + ); + expect(factoryLoad).toContain("verifiedFactoryId !== nextPreset.id"); + expect(factoryLoad).toContain('publishActivePresetIdentity({ kind: "factory", id: nextPreset.id })'); + expect(factoryLoad.indexOf("await onRefreshRack()")).toBeLessThan( + factoryLoad.indexOf('publishActivePresetIdentity({ kind: "factory", id: nextPreset.id })'), + ); + expect(factoryLoad.indexOf("await onRefreshRack()")).toBeLessThan( + factoryLoad.indexOf("setPresetManagerOpen(false)"), + ); + expect(userLoad).toContain("const verifiedState = identityUpdated"); + expect(userLoad.indexOf("drainPendingWritesForPresetTransaction")).toBeLessThan( + userLoad.indexOf("readNAMRackPresetStateWithRetry("), + ); + expect(userLoad).toContain("const loadedBaseline = presetBaselineFromState(loadedState)"); + expect(userLoad).not.toContain("loadedBaseline ?? currentSnapshot"); + expect(userLoad).toContain('publishActivePresetIdentity({ kind: "user", name: presetName })'); + expect(userLoad.indexOf("await onRefreshRack()")).toBeLessThan( + userLoad.indexOf("setPresetManagerOpen(false)"), + ); + expect(headerNavigation).toContain("presetNavigationPendingRef.current"); + expect(headerNavigation).toContain("activePresetIdentityRef.current"); + expect(headerNavigation).toContain("sameNAMActivePresetIdentity(currentIdentity, targetIdentity)"); + expect(headerNavigation).toContain("runNAMHeaderPresetArrowAction(target"); + expect(headerNavigation).toContain("setPresetManagerOpen(true)"); + expect(panelSource).toContain("allowInactiveEntry: true"); + expect(panelSource).toContain('if (!target || target.kind === "user") return target'); + expect(panelSource).toContain("return targetPreset?.requiresAmpModel ? undefined : target"); + expect(panelSource).toContain('onPreviousPreset={!presetBusy && !presetManagerBusy && headerPreviousPresetAvailable\n ? () => void activateHeaderPresetDirection("previous")'); + expect(panelSource).toContain('onNextPreset={!presetBusy && !presetManagerBusy && headerNextPresetAvailable\n ? () => void activateHeaderPresetDirection("next")'); + expect(panelSource).toContain("headerPresetNavigation.previous || !activePresetIdentity"); + expect(panelSource).toContain("headerPresetNavigation.next || !activePresetIdentity"); + expect(panelSource).toContain("shouldClearNAMPresetIdentityForUnsavedAmpTransition({"); + expect(panelSource).toContain("schemaActiveUserPresetName,"); + expect(panelSource).toContain("schemaActiveFactoryPresetId,"); + expect(panelSource).toContain('setPresetStatus(`No other ${activePresetIdentityRef.current.kind === "user" ? "user preset" : "template"} is available`)'); + expect(panelSource).toContain('`${direction} unavailable: no other ${activePresetIdentity.kind === "user" ? "user preset" : "template"} available`'); + expect(panelSource).toContain('`${direction} preset: open Preset Library`'); + expect(panelSource).toContain("const reapplyActivePreset = async"); + expect(panelSource).toContain("onClick={() => void reapplyActivePreset()}"); + expect(panelSource).toContain('User: {activeUserPresetName}'); + expect(panelSource).toContain("presetStatus && !presetManagerOpen"); + expect(panelSource).toContain('data-qa="nam-preset-previous"'); + expect(panelSource).toContain('data-qa="nam-preset-next"'); + const managerSource = readFileSync( + new URL("../components/NAMPresetManagerModal.tsx", import.meta.url), + "utf8", + ); + expect(managerSource).toContain('aria-current={entry.active ? "true" : undefined}'); + expect(managerSource).toContain('data-qa="nam-preset-load-selected"'); + }); + + it("rolls back a changed rack when post-load verification fails", () => { + const panelSource = readFileSync( + new URL("../components/NAMRackPanel.tsx", import.meta.url), + "utf8", + ); + const factoryStart = panelSource.indexOf("const applyPreset = async"); + const factoryEnd = panelSource.indexOf("const currentRackToneSlot", factoryStart); + const factoryLoad = panelSource.slice(factoryStart, factoryEnd); + const userStart = panelSource.indexOf("const loadUserPreset = async"); + const userEnd = panelSource.indexOf("const applyHeaderPresetTarget", userStart); + const userLoad = panelSource.slice(userStart, userEnd); + + for (const loadSource of [factoryLoad, userLoad]) { + expect(loadSource).toContain("const rackStateBeforeLoad = await readNAMRackPresetStateWithRetry("); + expect(loadSource).not.toContain("const rackStateBeforeLoad = await nativeBridge.getBuiltInPluginState(address)"); + expect(loadSource).toContain("rollbackPatch = buildNAMRackRollbackPatch(rackStateBeforeLoad)"); + expect(loadSource).toContain("await recoverUnverifiedPresetMutation("); + expect(loadSource.indexOf("buildNAMRackRollbackPatch(rackStateBeforeLoad)")).toBeLessThan( + loadSource.indexOf("rackMutated = true"), + ); + } + expect(panelSource).toContain("The previous rack was restored."); + expect(panelSource).toContain("publishActivePresetIdentity(null)"); + expect(panelSource).toContain("No preset is marked active."); + }); + + it("keeps preset discovery in a TTL session cache with explicit and mutation refreshes", () => { + const panelSource = readFileSync( + new URL("../components/NAMRackPanel.tsx", import.meta.url), + "utf8", + ); + const managerSource = readFileSync( + new URL("../components/NAMPresetManagerModal.tsx", import.meta.url), + "utf8", + ); + + expect(panelSource).toContain("createNAMPresetSessionCache"); + expect(panelSource).toContain("namUserPresetLibrarySession.peek() ?? []"); + expect(panelSource).toContain("namUserPresetLibrarySession.load(async () =>"); + expect(panelSource).toContain("namUserPresetLibrarySession.invalidate()"); + expect(panelSource).toContain("refreshUserPresetsAfterMutation()"); + expect(panelSource).toContain('const managerFactoryPresets = presetFolderFilter === "all"'); + expect(panelSource).toContain("presetFilterCounts.all + profileFactoryPresets.length"); + expect(managerSource).toContain('data-qa="nam-preset-refresh"'); + expect(managerSource).toContain("onRefresh: () => void | Promise"); + }); + + it("uses native button semantics and locks the preset manager during transactions", () => { + const managerSource = readFileSync( + new URL("../components/NAMPresetManagerModal.tsx", import.meta.url), + "utf8", + ); + const modalSource = readFileSync( + new URL("../components/ui/Modal/Modal.tsx", import.meta.url), + "utf8", + ); + const managerCss = readFileSync( + new URL("../components/NAMPresetManagerModal.css", import.meta.url), + "utf8", + ); + expect(managerSource).not.toContain('role="listbox"'); + expect(managerSource).not.toContain('role="option"'); + expect(managerSource).toContain("aria-pressed={selected}"); + expect(managerSource).toContain("aria-disabled={entry.disabled || undefined}"); + expect(managerSource).toContain("actionPendingRef.current"); + expect(managerSource).toContain("const locked = busy || actionPending"); + expect(managerSource).toContain("closeOnEscape={!locked}"); + expect(managerSource).toContain("closeOnOverlayClick={!locked}"); + expect(managerSource).toContain('id="nam-preset-manager-dialog"'); + expect(managerSource).toContain("autoFocus"); + expect(managerSource).toContain("aria-busy={locked || undefined}"); + expect(managerSource).toContain('type="search"'); + expect(managerSource).toContain("disabled={locked}"); + expect(managerSource).toContain(" { + const panelSource = readFileSync( + new URL("../components/NAMRackPanel.tsx", import.meta.url), + "utf8", + ); + const recallStart = panelSource.indexOf("const recallCompareSlot"); + const recallEnd = panelSource.indexOf("const rememberValues", recallStart); + const recallSource = panelSource.slice(recallStart, recallEnd); + + expect(recallSource).toContain("presetTransactionPendingRef.current = true"); + expect(recallSource).toContain("drainPendingWritesForPresetTransaction"); + expect(recallSource).toContain("getBuiltInPluginState(address)"); + expect(recallSource).toContain("authoritativeCurrentSnapshot = presetBaselineFromState(authoritativeState)"); + expect(recallSource).toContain("rollbackCoversValues"); + expect(recallSource).toContain("rollbackCoversDsp"); + expect(recallSource).toContain("mutationAttempted = true"); + expect(recallSource).toContain("if (!ok) throw new Error(failureReason)"); + expect(recallSource).toContain("...(target.dspState ? { dspState: target.dspState } : {})"); + expect(recallSource).toContain("verifyNAMRackCompareReadback(target, verifiedState, verifiedPostFxOrder)"); + expect(recallSource).toContain("sameNAMPresetIdentityStatus"); + expect(recallSource).toContain("setBuiltInPluginState(address, rollbackPatch)"); + expect(recallSource).toContain("The previous rack was restored"); + expect(recallSource).not.toContain("current Preset was retained"); + expect(recallSource).toContain("presetTransactionPendingRef.current = false"); + expect(panelSource).toContain("dspState: stateRecord.dspState"); + expect(panelSource).toContain("disabled={presetBusy || presetManagerBusy}"); + }); + + it("reports direct installed-model mutation and refresh failures without rejected event promises", () => { + const explorerSource = readFileSync( + new URL("../components/NAMExplorer.tsx", import.meta.url), + "utf8", + ); + for (const [startMarker, endMarker] of [ + ["const reinstallInstalled", "const updateInstalled"], + ["const updateInstalled", "const toggleInstalledFavorite"], + ["const toggleInstalledFavorite", "const removeInstalled"], + ["const removeInstalled", "const snapshotValues"], + ] as const) { + const start = explorerSource.indexOf(startMarker); + const end = explorerSource.indexOf(endMarker, start); + const actionSource = explorerSource.slice(start, end); + expect(actionSource).toContain("try {"); + expect(actionSource).toContain("beginInstalledLibraryMutation("); + expect(actionSource).toContain("mutationCompleted = true"); + expect(actionSource).toContain("await refreshInstalledLibraryAfterMutation()"); + expect(actionSource).toContain("catch (error)"); + expect(actionSource).toContain("Retry Refresh"); + expect(actionSource).toContain("finally {"); + expect(actionSource).toContain("finishInstalledLibraryMutation(owner, key"); + } + + const designPortSource = readFileSync( + new URL("../components/NAMRackDesignPort.tsx", import.meta.url), + "utf8", + ); + expect(explorerSource).toContain("const installedLibraryMutationOwnerRef = useRef(null)"); + expect(explorerSource).toContain("isNAMRackTransactionBusy(rackTransactionKey)"); + expect(explorerSource).toContain("installedLibraryMutationOwnerRef.current !== owner"); + expect(explorerSource).toContain("rackTransactionBusy || installedLibraryMutationPending || saveToneBusy"); + expect(explorerSource).toContain("disabled={rackActionsBusy || busyLibraryKey === installedKey(removeCandidate)}"); + expect(designPortSource).toContain("disabled={config.busy}"); + }); + + it("renders and filters Unfiled separately from reserved built-in collections", () => { + const panelSource = readFileSync( + new URL("../components/NAMRackPanel.tsx", import.meta.url), + "utf8", + ); + + expect(panelSource).toContain("presetFolderFilter === NAM_UNFILED_PRESET_COLLECTION_ID && !folder"); + expect(panelSource).toContain('label: "Unfiled"'); + expect(panelSource).toContain("isNAMReservedPresetCollectionName(result)"); + expect(panelSource).toContain("is a built-in collection name"); + }); + + it("restores an active module preview before previewing or applying another module preset", () => { + const explorerSource = readFileSync( + new URL("../components/NAMExplorer.tsx", import.meta.url), + "utf8", + ); + const applyStart = explorerSource.indexOf("const applyOpenStudioFXPreset"); + const applyEnd = explorerSource.indexOf("const revertOpenStudioFXPreset", applyStart); + const applySource = explorerSource.slice(applyStart, applyEnd); + + expect(applySource).toContain( + "values: buildNAMModulePresetCommitValues(presetPatch.values, fxPreview)", + ); + expect(applySource).toContain(": publishedPresetPatch"); + }); +}); diff --git a/frontend/src/__tests__/namRackStyleOwnership.test.ts b/frontend/src/__tests__/namRackStyleOwnership.test.ts new file mode 100644 index 0000000..fb910e2 --- /dev/null +++ b/frontend/src/__tests__/namRackStyleOwnership.test.ts @@ -0,0 +1,96 @@ +import { describe, expect, it } from "vitest"; + +const componentTypeScriptSources = import.meta.glob("../components/*.tsx", { + eager: true, + import: "default", + query: "?raw", +}) as Record; + +const componentSources = componentTypeScriptSources; + +const entrySources = import.meta.glob("../PluginEditorWindowApp.tsx", { + eager: true, + import: "default", + query: "?raw", +}) as Record; + +const componentStyles = import.meta.glob("../components/*.css", { + eager: true, + import: "default", + query: "?raw", +}) as Record; + +const componentSource = (fileName: string) => + componentSources[`../components/${fileName}`] ?? ""; + +const componentStyle = (fileName: string) => + componentStyles[`../components/${fileName}`] ?? ""; + +const componentOwners = [ + "NAMRackChainModule", + "NAMRackControlTooltip", + "NAMRackDiagnostics", + "NAMRackKnob", + "NAMRackMixer", +] as const; + +const featureStyles = [ + "NAMRackBrowser", + "NAMRackPresets", + "NAMRackPedalboard", + "NAMRackSourceFlow", + "NAMRackNeural", + "NAMRackCalibration", +] as const; + +describe("NAM Rack stylesheet ownership", () => { + it("keeps the parent stylesheet owned by NAMRackPanel instead of global entry points", () => { + expect(componentSource("NAMRackPanel.tsx")).toContain( + 'import "./NAMRackPanel.css";', + ); + expect(entrySources["../PluginEditorWindowApp.tsx"] ?? "").not.toContain( + "NAMRackPanel.css", + ); + expect(componentSource("FXChainPanel.tsx")).not.toContain( + "NAMRackPanel.css", + ); + }); + + it.each(componentOwners)("%s imports its own non-empty stylesheet", (owner) => { + expect(componentSource(`${owner}.tsx`)).toContain( + `import "./${owner}.css";`, + ); + }); + + it.each(featureStyles)( + "%s remains an explicit parent-owned feature stylesheet", + (feature) => { + expect(componentSource("NAMRackPanel.tsx")).toContain( + `import "./${feature}.css";`, + ); + }, + ); + + it("keeps Design Port style ownership explicit", () => { + const source = componentSource("NAMRackDesignPort.tsx"); + for (const stylesheet of [ + "NAMRackDesignPort.css", + "NAMRackStage.css", + "NAMRackHardware.css", + "NAMRackDesignPortSourceFlow.css", + "NAMRackFooter.css", + "NAMRackHeader.css", + ]) { + expect(source).toContain(`import "./${stylesheet}";`); + } + }); + + it("does not reserve a scrollbar gutter around the detached NAM editor", () => { + expect(componentStyle("FXChainPanel.css")).not.toMatch( + /\.plugin-editor-window-app \.builtin-plugin-panel\[data-kind="nam"\]\s*\{[^}]*scrollbar-gutter:\s*stable/, + ); + expect(componentStyle("NAMRackStage.css")).not.toMatch( + /\.nam-rack-design-port\s*\{[^}]*scrollbar-gutter:\s*stable/, + ); + }); +}); diff --git a/frontend/src/__tests__/namRackTelemetryCadence.test.ts b/frontend/src/__tests__/namRackTelemetryCadence.test.ts new file mode 100644 index 0000000..3239cdb --- /dev/null +++ b/frontend/src/__tests__/namRackTelemetryCadence.test.ts @@ -0,0 +1,19 @@ +import { describe, expect, it } from "vitest"; +import { + namRackTelemetryIntervalMs, + shouldRefreshNAMRackDiagnostics, +} from "../utils/namRackTelemetryCadence"; + +describe("NAM Rack telemetry cadence", () => { + it("publishes one 5 Hz combined update while the tuner is closed", () => { + expect(namRackTelemetryIntervalMs(false)).toBe(200); + expect([0, 1, 2, 3].map((tick) => shouldRefreshNAMRackDiagnostics(false, tick))) + .toEqual([true, true, true, true]); + }); + + it("keeps tuner pitch at 10 Hz without transferring full diagnostics above 5 Hz", () => { + expect(namRackTelemetryIntervalMs(true)).toBe(100); + expect([0, 1, 2, 3, 4, 5].map((tick) => shouldRefreshNAMRackDiagnostics(true, tick))) + .toEqual([true, false, true, false, true, false]); + }); +}); diff --git a/frontend/src/__tests__/namReverbPadControls.test.ts b/frontend/src/__tests__/namReverbPadControls.test.ts new file mode 100644 index 0000000..68d2600 --- /dev/null +++ b/frontend/src/__tests__/namReverbPadControls.test.ts @@ -0,0 +1,135 @@ +// @ts-expect-error Vitest provides Node builtins while the app tsconfig omits Node typings. +import { readFileSync } from "node:fs"; +import { describe, expect, it } from "vitest"; +import { createNAMBootSchema } from "../components/BuiltInPluginPanel"; +import { NAM_POST_FX_FACEPLATE_LAYOUT } from "../components/NAMRackDesignPort"; +import { NAM_RACK_REVERB_ADVANCED_CONTROL_GROUPS } from "../components/NAMRackMixer"; +import { + isCurrentNAMRackPresetState, + migrateLegacyNAMRackPresetDspState, +} from "../utils/namRackPresetTransactions"; + +describe("NAM Rack dedicated Reverb PAD frontend", () => { + it("publishes one automatable toggle with a deterministic off default", () => { + const schema = createNAMBootSchema( + { chain: "track", trackId: "pad-test", fxIndex: 0 }, + "OpenStudio NAM Rack", + ); + + expect(schema.parameters.find(({ id }) => id === "reverbPad")).toMatchObject({ + label: "Pad", + type: "toggle", + value: 0, + min: 0, + max: 1, + defaultValue: 0, + automatable: true, + graphRole: "space", + }); + expect(NAM_RACK_REVERB_ADVANCED_CONTROL_GROUPS[0].paramIds).toContain("reverbPad"); + }); + + it("migrates missing PAD state off, preserves explicit on, and sanitizes toggle values", () => { + const migrate = (values: Record) => migrateLegacyNAMRackPresetDspState({ + values, + dspState: { namEffectsDspVersion: 12, reverbEngineVersion: 5 }, + }, { completePreset: true }) as { values: Record }; + + const missing = migrate({ reverbShimmer: 0.7 }); + const on = migrate({ reverbPad: 1, reverbShimmer: 0.7 }); + const clampedOn = migrate({ reverbPad: 20 }); + const nonFinite = migrate({ reverbPad: Number.NaN }); + + expect(missing.values.reverbPad).toBe(0); + expect(on.values).toMatchObject({ reverbPad: 1, reverbShimmer: 0.7 }); + expect(clampedOn.values.reverbPad).toBe(1); + expect(nonFinite.values.reverbPad).toBe(0); + expect(isCurrentNAMRackPresetState(on)).toBe(true); + }); + + it("canonicalizes PAD inside saved baseline and A/B snapshots", () => { + const migrated = migrateLegacyNAMRackPresetDspState({ + values: { reverbPad: 1 }, + dspState: { namEffectsDspVersion: 12, reverbEngineVersion: 5 }, + uiState: { + namPresetBaseline: { + values: { reverbShimmer: 0.25 }, + dspState: { namEffectsDspVersion: 12, reverbEngineVersion: 5 }, + }, + namRackCompare: { + snapshots: { + A: { + values: { reverbPad: 1 }, + dspState: { namEffectsDspVersion: 12, reverbEngineVersion: 5 }, + }, + B: { + values: { reverbPad: -20 }, + dspState: { namEffectsDspVersion: 12, reverbEngineVersion: 5 }, + }, + }, + }, + }, + }, { completePreset: true }) as { + uiState: { + namPresetBaseline: { values: Record }; + namRackCompare: { snapshots: Record<"A" | "B", { values: Record }> }; + }; + }; + + expect(migrated.uiState.namPresetBaseline.values.reverbPad).toBe(0); + expect(migrated.uiState.namRackCompare.snapshots.A.values.reverbPad).toBe(1); + expect(migrated.uiState.namRackCompare.snapshots.B.values.reverbPad).toBe(0); + }); + + it("fits a compact PAD toggle beside the one Engage footswitch without resizing the asset", () => { + const { box } = NAM_POST_FX_FACEPLATE_LAYOUT.modules.reverb; + const footer = NAM_POST_FX_FACEPLATE_LAYOUT.reverb; + + expect(box).toEqual({ x: 528, y: 29, w: 220, h: 195 }); + expect(footer.secondaryX).toBe(34); + expect(footer.primaryX).toBe(66); + expect(footer.padToggleSize * box.w / 100).toBe(NAM_POST_FX_FACEPLATE_LAYOUT.reverb.voiceSelector.size * box.w / 100); + expect(footer.padToggleSize).toBeLessThan(footer.footSize); + expect(footer.secondaryLedSize).toBe(footer.ledSize); + + const design = readFileSync(new URL("../components/NAMRackDesignPort.tsx", import.meta.url), "utf8"); + const reverbStart = design.indexOf('name="reverb"'); + const reverbEnd = design.indexOf("", reverbStart); + const reverb = design.slice(reverbStart, reverbEnd); + expect(reverb).toContain(" { + const design = readFileSync(new URL("../components/NAMRackDesignPort.tsx", import.meta.url), "utf8"); + const reverbStart = design.indexOf('name="reverb"'); + const reverbEnd = design.indexOf("", reverbStart); + const reverb = design.slice(reverbStart, reverbEnd); + + expect(reverb).toContain('paramId="reverbShimmer"'); + expect(reverb).toContain("labelText={reverbLabels.texture}"); + expect(reverb).toContain("value={`${reverbLabels.texture}: 0%`}"); + expect(reverb).not.toContain('labelText={reverbPadActive ? "PAD"'); + expect(reverb).not.toContain("Pad intensity"); + }); + + it("keeps module-copy/reset and factory preset surfaces synchronized", () => { + const panel = readFileSync(new URL("../components/NAMRackPanel.tsx", import.meta.url), "utf8"); + + const moduleMapStart = panel.indexOf("function moduleParamIds"); + const moduleMapEnd = panel.indexOf("function normalizeRackModuleCopy", moduleMapStart); + expect(panel.slice(moduleMapStart, moduleMapEnd)).toContain('"reverbEnabled", "reverbPad"'); + + const presetsStart = panel.indexOf("const NAM_RACK_PRESETS"); + const presetsEnd = panel.indexOf("function clamp(value", presetsStart); + expect(panel.slice(presetsStart, presetsEnd).match(/reverbPad: 0/g)).toHaveLength(8); + + const explorer = readFileSync(new URL("../components/NAMExplorer.tsx", import.meta.url), "utf8"); + const plateStart = explorer.indexOf('id: "plate-room"'); + const plateEnd = explorer.indexOf("\n },", plateStart); + expect(explorer.slice(plateStart, plateEnd)).toContain("reverbPad: 0"); + }); +}); diff --git a/frontend/src/__tests__/namReverbV5Controls.test.ts b/frontend/src/__tests__/namReverbV5Controls.test.ts new file mode 100644 index 0000000..d1d91a7 --- /dev/null +++ b/frontend/src/__tests__/namReverbV5Controls.test.ts @@ -0,0 +1,146 @@ +// @ts-expect-error Vitest provides Node builtins while the app tsconfig omits Node typings. +import { readFileSync } from "node:fs"; +import { describe, expect, it } from "vitest"; +import { createNAMBootSchema } from "../components/BuiltInPluginPanel"; +import { + NAM_PEDAL_HARDWARE_STANDARD_PX, + NAM_POST_FX_FACEPLATE_LAYOUT, + NAM_REVERB_VOICE_LABELS, + NAM_REVERB_VOICE_CONTROL_LABELS, + NAM_REVERB_VOICE_SELECTOR_PX, + NAM_REVERB_VOICE_SELECTOR_ROTATIONS, + namReverbVoiceSelectorDetentPlacement, + reverbVoiceDisplayLabel, + reverbVoiceControlLabels, +} from "../components/NAMRackDesignPort"; +import { + CURRENT_NAM_EFFECTS_DSP_VERSION, + CURRENT_NAM_REVERB_ENGINE_VERSION, + isCurrentNAMRackPresetState, + migrateLegacyNAMRackPresetDspState, + normalizeNAMReverbVoice, +} from "../utils/namRackPresetTransactions"; + +describe("NAM Rack Reverb V5 voice contract", () => { + it("migrates every pre-V9 complete preset to the exact Studio compatibility voice", () => { + const migrated = migrateLegacyNAMRackPresetDspState({ + values: { reverbVoice: 3, reverbDecaySec: 3.4 }, + dspState: { namEffectsDspVersion: 8, reverbEngineVersion: 4 }, + }, { completePreset: true }) as { values: Record; dspState: Record }; + + expect(CURRENT_NAM_EFFECTS_DSP_VERSION).toBe(19); + expect(CURRENT_NAM_REVERB_ENGINE_VERSION).toBe(5); + expect(migrated.values.reverbVoice).toBe(0); + expect(migrated.values.reverbDecaySec).toBe(3.4); + expect(migrated.dspState).toEqual({ namEffectsDspVersion: 19, reverbEngineVersion: 5 }); + expect(isCurrentNAMRackPresetState(migrated)).toBe(true); + }); + + it("clamps the one current four-state voice enum", () => { + expect([0, 1, 2, 3].map(normalizeNAMReverbVoice)).toEqual([0, 1, 2, 3]); + expect(normalizeNAMReverbVoice(-2)).toBe(0); + expect(normalizeNAMReverbVoice(99)).toBe(3); + expect(normalizeNAMReverbVoice(Number.NaN)).toBe(0); + expect(NAM_REVERB_VOICE_LABELS).toEqual(["STUDIO", "PLATE", "HALL", "ROOM"]); + expect([0, 1, 2, 3].map((value) => reverbVoiceDisplayLabel(value))) + .toEqual(["STUDIO", "PLATE", "HALL", "ROOM"]); + }); + + it("uses a toggle-sized selector, exactly four aligned detents, and one screen label", () => { + const { voiceDisplay, voiceSelector, topRowY, topKnobSize } = NAM_POST_FX_FACEPLATE_LAYOUT.reverb; + const box = NAM_POST_FX_FACEPLATE_LAYOUT.modules.reverb.box; + const selectorRadius = voiceSelector.size * box.w / 200; + const selectorBottom = voiceSelector.y * box.h / 100 + selectorRadius; + const displayBottom = (voiceDisplay.y + voiceDisplay.h) * box.h / 100; + const topKnobTop = topRowY * box.h / 100 - topKnobSize * box.w / 200; + + expect(NAM_REVERB_VOICE_SELECTOR_PX).toBe(NAM_PEDAL_HARDWARE_STANDARD_PX.toggle); + expect(voiceSelector.size * box.w / 100).toBeCloseTo(24, 8); + expect(selectorBottom).toBeCloseTo(displayBottom, 8); + expect(topKnobTop - displayBottom).toBeGreaterThanOrEqual(4); + expect(NAM_REVERB_VOICE_SELECTOR_ROTATIONS).toEqual([-60, -20, 20, 60]); + expect(NAM_REVERB_VOICE_SELECTOR_ROTATIONS.map(namReverbVoiceSelectorDetentPlacement)).toHaveLength(4); + }); + + it("wires the voice across schema, state, advanced controls, and the live pedal", () => { + const sources = { + bridge: readFileSync(new URL("../services/NativeBridge.ts", import.meta.url), "utf8"), + panel: readFileSync(new URL("../components/NAMRackPanel.tsx", import.meta.url), "utf8"), + mixer: readFileSync(new URL("../components/NAMRackMixer.tsx", import.meta.url), "utf8"), + design: readFileSync(new URL("../components/NAMRackDesignPort.tsx", import.meta.url), "utf8"), + }; + for (const source of Object.values(sources)) expect(source).toContain("reverbVoice"); + expect(sources.design).toContain(" id === "reverbVoice")).toMatchObject({ + label: "Reverb Voice", + type: "enum", + value: 0, + min: 0, + max: 3, + defaultValue: 0, + enumOptions: [ + { value: 0, label: "Studio" }, + { value: 1, label: "Plate" }, + { value: 2, label: "Hall" }, + { value: 3, label: "Room" }, + ], + }); + }); + + it("keeps complete factory starting points deterministic for the new voice engine", () => { + const panel = readFileSync(new URL("../components/NAMRackPanel.tsx", import.meta.url), "utf8"); + const defaultsStart = panel.indexOf("const NAM_RACK_GLOBAL_DEFAULT_VALUES"); + const defaultsEnd = panel.indexOf("type RackCompareSnapshot", defaultsStart); + const defaults = panel.slice(defaultsStart, defaultsEnd); + for (const line of [ + "reverbVoice: 0", + "reverbMix: 0.28", + "reverbDecaySec: 2.2", + "reverbTone: 0.62", + "reverbPreDelayMs: 18", + "reverbLowCutHz: 120", + "reverbShimmer: 0", + "reverbPad: 0", + "reverbEnabled: 0", + ]) expect(defaults).toContain(line); + + const explorer = readFileSync(new URL("../components/NAMExplorer.tsx", import.meta.url), "utf8"); + const plateStart = explorer.indexOf('id: "plate-room"'); + const plateEnd = explorer.indexOf("\n },", plateStart); + const platePreset = explorer.slice(plateStart, plateEnd); + expect(platePreset).toContain("reverbVoice: 1"); + expect(platePreset).toContain("reverbLowCutHz: 120"); + expect(platePreset).toContain("reverbShimmer: 0"); + expect(platePreset).toContain("reverbPad: 0"); + }); + + it("keeps the shared macros stable and gives every voice truthful texture labels", () => { + expect(NAM_REVERB_VOICE_CONTROL_LABELS).toEqual([ + { preDelay: "PRE DLY", decay: "DECAY", mix: "MIX", lowCut: "LOW CUT", tone: "TONE", texture: "AIR" }, + { preDelay: "PRE DLY", decay: "DECAY", mix: "MIX", lowCut: "LOW CUT", tone: "DAMP", texture: "SHIMMER" }, + { preDelay: "PRE DLY", decay: "DECAY", mix: "MIX", lowCut: "LOW CUT", tone: "DAMP", texture: "MOTION" }, + { preDelay: "PRE DLY", decay: "SIZE", mix: "MIX", lowCut: "LOW CUT", tone: "TONE", texture: "EARLY" }, + ]); + expect([0, 1, 2, 3].map((value) => reverbVoiceControlLabels(value))) + .toEqual(NAM_REVERB_VOICE_CONTROL_LABELS); + const design = readFileSync(new URL("../components/NAMRackDesignPort.tsx", import.meta.url), "utf8"); + expect(design).toContain("labelText={reverbLabels.decay}"); + expect(design).toContain("labelText={reverbLabels.texture}"); + expect(design).toContain("value={`${reverbLabels.texture}: 0%`}"); + expect(design).not.toContain('reverbPadActive ? "PAD" : reverbLabels.texture'); + expect(design).not.toContain("Pad Intensity"); + expect(design).toContain("semanticLabel={reverbLabels.decay === \"SIZE\" ? \"Room Size\" : \"Decay\"}"); + expect(design).not.toContain("labelText=\"VOICE\""); + }); +}); diff --git a/frontend/src/__tests__/namToneCapturePickerAccessibility.test.ts b/frontend/src/__tests__/namToneCapturePickerAccessibility.test.ts new file mode 100644 index 0000000..13d6b2b --- /dev/null +++ b/frontend/src/__tests__/namToneCapturePickerAccessibility.test.ts @@ -0,0 +1,33 @@ +// @ts-expect-error The app tsconfig omits Node builtin typings, while Vitest runs this source audit in Node. +import { readFileSync } from "node:fs"; +import { describe, expect, it } from "vitest"; + +const pickerSource = readFileSync( + new URL("../components/NAMToneCapturePicker.tsx", import.meta.url), + "utf8", +).replace(/\r\n?/g, "\n"); +const pickerCSS = readFileSync( + new URL("../components/NAMToneCapturePicker.css", import.meta.url), + "utf8", +).replace(/\r\n?/g, "\n"); + +describe("NAM tone capture picker accessibility", () => { + it("uses a labelled group of native buttons rather than composite listbox roles", () => { + expect(pickerSource).toContain('role="group"'); + expect(pickerSource).toContain("aria-label={`Available NAM captures in ${title}`}"); + expect(pickerSource).toContain("aria-pressed={selected}"); + expect(pickerSource).not.toContain('role="listbox"'); + expect(pickerSource).not.toContain('role="option"'); + expect(pickerSource).not.toContain("aria-selected={selected}"); + }); + + it("keeps picker copy legible and supplies practical keyboard/action targets", () => { + expect(pickerCSS).toMatch(/\.nam-tone-capture-select\s*\{[^}]*min-height:\s*42px;/s); + expect(pickerCSS).toMatch(/\.nam-tone-capture-name\s*\{[^}]*font-size:\s*12px;/s); + expect(pickerCSS).toMatch(/\.nam-tone-capture-badges i\s*\{[^}]*font-size:\s*10px;/s); + expect(pickerCSS).toMatch(/\.nam-tone-capture-actions button\s*\{[^}]*min-height:\s*36px;/s); + expect(pickerCSS).toMatch(/\.nam-tone-capture-actions button\s*\{[^}]*font-size:\s*11px;/s); + expect(pickerCSS).toContain(".nam-tone-capture-select:focus-visible"); + expect(pickerCSS).toContain("outline: 2px solid #f5ae27"); + }); +}); diff --git a/frontend/src/__tests__/namToneCaptureSelection.test.ts b/frontend/src/__tests__/namToneCaptureSelection.test.ts new file mode 100644 index 0000000..185ba4b --- /dev/null +++ b/frontend/src/__tests__/namToneCaptureSelection.test.ts @@ -0,0 +1,129 @@ +import { describe, expect, it } from "vitest"; +import type { NAMCatalogTone } from "../services/NativeBridge"; +import { captureTypeForToneModel } from "../utils/namCaptureType"; +import { + collapseNAMCatalogRowsToTonePacks, + isExplicitNAMCatalogCaptureSelection, + namCatalogCaptureSelectionKey, + namToneCaptureOptions, + namToneDeclaredCaptureCount, + namToneRequiresExplicitCapture, + sameNAMCatalogModelIdentity, + selectedNAMCatalogIdentity, +} from "../utils/namToneCaptureSelection"; + +const pack: NAMCatalogTone = { + id: 67139, + title: "Headbangers Ball Amp Pack IR/RAW", + gear: "amp", + a2_models_count: 3, + models: [ + { + id: 6713901, + tone_id: 67139, + name: "HB 01 RAW", + architecture_version: 2, + model_url: "https://example.invalid/hb-01-raw.nam", + }, + { + id: 6713902, + tone_id: 67139, + name: "HB 01 IR", + architecture_version: 2, + model_url: "https://example.invalid/hb-01-ir.nam", + }, + { + id: 6713902, + tone_id: 67139, + name: "Duplicate identity", + architecture_version: 2, + model_url: "https://example.invalid/duplicate.nam", + }, + ], +}; + +describe("NAM tone pack capture selection", () => { + it("deduplicates child captures while preserving exact durable identity", () => { + const options = namToneCaptureOptions(pack); + expect(options.map(({ id, name }) => ({ id, name }))).toEqual([ + { id: "67139:6713901", name: "HB 01 RAW" }, + { id: "67139:6713902", name: "HB 01 IR" }, + ]); + expect(options.map(({ architecture }) => architecture)).toEqual(["A2", "A2"]); + }); + + it("requires explicit selection for a multi-capture pack", () => { + expect(namToneDeclaredCaptureCount(pack)).toBe(2); + expect(namToneRequiresExplicitCapture(pack)).toBe(true); + expect(namToneRequiresExplicitCapture({ ...pack, models: [pack.models![0]], a2_models_count: 1 })).toBe(false); + }); + + it("gives URL-only captures distinct durable selection identities", () => { + const urlOnlyPack: NAMCatalogTone = { + id: 88001, + title: "URL-only pack", + models: [ + { name: "Clean", model_url: "https://example.invalid/captures/clean.nam" }, + { name: "Lead", model_url: "https://example.invalid/captures/lead.nam" }, + ], + }; + const options = namToneCaptureOptions(urlOnlyPack); + + expect(options.map(({ id }) => id)).toEqual([ + "88001:url:https%3A%2F%2Fexample.invalid%2Fcaptures%2Fclean.nam", + "88001:url:https%3A%2F%2Fexample.invalid%2Fcaptures%2Flead.nam", + ]); + expect(new Set(options.map(({ id }) => id)).size).toBe(2); + expect(sameNAMCatalogModelIdentity(options[1].model, { + modelUrl: "HTTPS://EXAMPLE.INVALID/CAPTURES/LEAD.NAM", + })).toBe(true); + + const leadRowKey = "88001:0:latest:0:1"; + expect(isExplicitNAMCatalogCaptureSelection( + options[1].id, + leadRowKey, + urlOnlyPack, + options[1].model, + )).toBe(true); + expect(isExplicitNAMCatalogCaptureSelection( + leadRowKey, + leadRowKey, + urlOnlyPack, + options[1].model, + )).toBe(true); + expect(isExplicitNAMCatalogCaptureSelection( + "88001:0", + leadRowKey, + urlOnlyPack, + options[1].model, + )).toBe(false); + expect(namCatalogCaptureSelectionKey(urlOnlyPack, options[1].model)).toBe(options[1].id); + }); + + it("uses child RAW/IR labels ahead of broad parent gear metadata", () => { + expect(captureTypeForToneModel(pack, pack.models![0])).toBe("amp"); + expect(captureTypeForToneModel(pack, pack.models![1])).toBe("amp_cab"); + expect(captureTypeForToneModel(pack, { + ...pack.models![1], + metadata: { gear_type: "amp" }, + })).toBe("amp"); + }); + + it("collapses hydrated children to one pack row without losing order", () => { + const rows = [ + { key: "67139:6713901", tone: pack }, + { key: "67139:6713902", tone: pack }, + { key: "88:1", tone: { id: 88, title: "Other" } }, + ]; + expect(collapseNAMCatalogRowsToTonePacks(rows).map(({ key }) => key)).toEqual([ + "67139:6713901", + "88:1", + ]); + }); + + it("parses stable tone/model selection keys and treats pack-only selection as non-explicit", () => { + expect(selectedNAMCatalogIdentity("67139:6713902:latest:0:1")).toEqual({ toneId: 67139, modelId: 6713902 }); + expect(selectedNAMCatalogIdentity("67139:0")).toEqual({ toneId: 67139, modelId: 0 }); + expect(selectedNAMCatalogIdentity("")).toEqual({ toneId: 0, modelId: 0 }); + }); +}); diff --git a/frontend/src/__tests__/namToneSaveMetadata.test.ts b/frontend/src/__tests__/namToneSaveMetadata.test.ts new file mode 100644 index 0000000..33fc37a --- /dev/null +++ b/frontend/src/__tests__/namToneSaveMetadata.test.ts @@ -0,0 +1,472 @@ +import { beforeEach, describe, expect, it, vi } from "vitest"; +import { + NAM_PRESET_SAVE_COPY, + buildNAMToneSaveDraft, + makeNAMActivePreview, + normalizeNAMActivePreview, + saveDraftToMetadata, + saveNAMTone, +} from "../components/NAMToneSave"; +import { nativeBridge, type BuiltInPluginSchema, type NAMInstalledModel } from "../services/NativeBridge"; + +const schema: BuiltInPluginSchema = { + schemaVersion: 1, + name: "OpenStudio NAM Rack", + category: "Built-in", + chain: "input", + fxIndex: 0, + parameters: [ + { + id: "inputTrimDb", + label: "Input", + type: "continuous", + value: 0, + min: -24, + max: 24, + defaultValue: 0, + unit: "dB", + }, + ], + modelState: { + ampModelPath: "OpenStudio/NAM/previews/classic-crunch-a2.nam", + pedalModelPath: "", + cabIRPath: "", + }, + uiState: {}, +}; + +const address = { + trackId: "track-1", + chain: "input" as const, + fxIndex: 0, +}; + +describe("NAM tone save metadata", () => { + beforeEach(() => { + vi.restoreAllMocks(); + }); + + it("presents the full rack as a NAM Preset", () => { + expect(NAM_PRESET_SAVE_COPY).toMatchObject({ + title: "Save NAM Preset", + action: "Save Preset", + eyebrow: "Complete rack preset", + nameLabel: "Preset Name", + }); + expect(NAM_PRESET_SAVE_COPY.description).toContain("Captures, IR"); + expect(NAM_PRESET_SAVE_COPY.description).toContain("effect settings"); + }); + + it("builds a draft from active preview metadata before saved/path fallbacks", () => { + const draft = buildNAMToneSaveDraft({ + schema: { + ...schema, + uiState: { + namSavedTone: { + title: "Saved fallback", + creator: "Saved Creator", + }, + }, + }, + activePreview: { + schemaVersion: 1, + slot: "amp", + title: "Preview Crunch", + modelName: "Classic Crunch A2", + creator: "ToneDev", + localPath: "OpenStudio/NAM/previews/classic-crunch-a2.nam", + }, + }); + + expect(draft.toneName).toBe("Preview Crunch"); + expect(draft.creator).toBe("ToneDev"); + }); + + it("deduplicates preset tags case-insensitively when building and saving a draft", () => { + const draft = buildNAMToneSaveDraft({ + title: "Tag Guard", + tags: ["amp", "Clean", "AMP", "clean", "cab"], + }); + + expect(draft.tags).toEqual(["AMP", "clean", "cab"]); + expect(saveDraftToMetadata({ + ...draft, + tagsText: "amp, Clean, AMP, clean, cab", + }).tags).toEqual(["AMP", "clean", "cab"]); + }); + + it("round-trips requested Cab intent independently from the effective preview baseline", () => { + const normalized = normalizeNAMActivePreview({ + slot: "amp", + localPath: "OpenStudio/NAM/previews/full-rig.nam", + baseline: { + pedalModelPath: "", + ampModelPath: "OpenStudio/NAM/library/amp.nam", + cabIRPath: "OpenStudio/NAM/library/cab.wav", + ampModelSize: 0.42, + pedalDeclaredCaptureType: "unknown", + ampDeclaredCaptureType: "full-rig", + cabEnabled: 0, + cabRequestedEnabled: true, + pedalMix: 0, + ampEnabled: 0, + ampMix: 0, + }, + }); + + expect(normalized?.baseline).toMatchObject({ + cabEnabled: 0, + cabRequestedEnabled: true, + pedalDeclaredCaptureType: "unknown", + ampDeclaredCaptureType: "full_rig", + ampModelSize: 0.42, + ampEnabled: 0, + ampMix: 0, + }); + }); + + it("commits preview downloads and persists saved tone identity", async () => { + const previewRecord: NAMInstalledModel = { + modelId: 5320302, + toneId: 53203, + name: "Classic Crunch A2", + toneTitle: "Classic Crunch", + creator: "Scott M.", + localPath: "OpenStudio/NAM/previews/classic-crunch-a2.nam", + sourceUrl: "https://www.tone3000.com/tones/53203", + license: "Free", + preview: true, + }; + const committedRecord: NAMInstalledModel = { + ...previewRecord, + preview: false, + localPath: "OpenStudio/NAM/library/classic-crunch-a2.nam", + }; + const activePreview = makeNAMActivePreview(previewRecord, { + key: "53203:5320302", + slot: "amp", + toneId: 53203, + modelId: 5320302, + title: "Classic Crunch", + modelName: "Classic Crunch A2", + creator: "Scott M.", + localPath: previewRecord.localPath, + previousPath: "", + source: "catalog", + previewDownload: true, + saved: false, + action: "live-preview", + sourceUrl: previewRecord.sourceUrl, + license: previewRecord.license, + }); + const setState = vi.spyOn(nativeBridge, "setBuiltInPluginState").mockResolvedValue(true); + vi.spyOn(nativeBridge, "setBuiltInPluginParam").mockResolvedValue(true); + vi.spyOn(nativeBridge, "getBuiltInPluginState").mockResolvedValue({ + values: { + inputTrimDb: 1.5, + auditionSource: 1, + reverbEnabled: 1, + reverbDecaySec: 9.25, + reverbShimmer: 0.42, + }, + modelState: { + ampModelPath: previewRecord.localPath, + ampModelSize: 0.75, + pedalModelPath: "OpenStudio/NAM/library/drive.nam", + pedalModelSize: 0.5, + cabIRPath: "OpenStudio/IR/library/studio.wav", + cabRequestedEnabled: true, + }, + dspState: { + reverbEngineVersion: 5, + namEffectsDspVersion: 19, + }, + uiState: { + namActivePreview: activePreview, + namPresetDirty: true, + namActivePresetName: "Earlier Preset", + namPresetBaseline: { values: { reverbDecaySec: 2.2 } }, + namRackSlots: { + order: ["gate", "pedal", "amp", "cab", "delay", "reverb", "mod", "eq"], + }, + }, + }); + const commit = vi.spyOn(nativeBridge, "commitNAMPreviewTone").mockResolvedValue({ + success: true, + record: committedRecord, + }); + const savePreset = vi.spyOn(nativeBridge, "saveBuiltInFXPreset").mockResolvedValue(true); + + const result = await saveNAMTone({ + address, + schema, + metadata: { + toneName: "My Saved Crunch", + creator: "Session User", + sourceUrl: previewRecord.sourceUrl, + license: "Free", + }, + activePreview, + selectedRecord: previewRecord, + slotHint: "amp", + sourceIds: { + toneId: 53203, + modelId: 5320302, + }, + }); + + expect(result.success).toBe(true); + expect(result.committed).toBe(true); + expect(commit).toHaveBeenCalledWith(previewRecord, expect.objectContaining({ + toneName: "My Saved Crunch", + creator: "Session User", + }), expect.objectContaining({ + dspState: { + reverbEngineVersion: 5, + namEffectsDspVersion: 19, + }, + })); + expect(result.savedTone?.title).toBe("My Saved Crunch"); + expect(result.savedTone?.captureTitle).toBe("Classic Crunch"); + expect(result.savedTone?.modelName).toBe("Classic Crunch A2"); + expect(result.savedTone?.creator).toBe("Session User"); + expect(result.savedTone?.localPath).toBe(committedRecord.localPath); + expect(result.savedTone?.toneId).toBe(53203); + expect(result.savedTone?.modelId).toBe(5320302); + expect(result.savedTone?.rackState).toMatchObject({ + values: { + reverbEnabled: 1, + reverbDecaySec: 9.25, + reverbShimmer: 0.42, + }, + modelState: { + pedalModelPath: "OpenStudio/NAM/library/drive.nam", + pedalModelSize: 0.5, + ampModelPath: committedRecord.localPath, + ampModelSize: 0.75, + cabIRPath: "OpenStudio/IR/library/studio.wav", + cabRequestedEnabled: true, + }, + dspState: { + reverbEngineVersion: 5, + namEffectsDspVersion: 19, + }, + slotOrder: ["gate", "pedal", "amp", "cab", "delay", "reverb", "mod", "eq"], + }); + expect(result.savedTone?.values).not.toHaveProperty("auditionSource"); + expect(setState).toHaveBeenCalledWith(address, expect.objectContaining({ + modelState: expect.objectContaining({ + ampModelPath: committedRecord.localPath, + ampDeclaredCaptureType: "unknown", + }), + uiState: expect.objectContaining({ + namActivePreview: null, + namPresetDirty: false, + namActivePresetName: null, + namPresetBaseline: null, + namSavedTone: expect.objectContaining({ + title: "My Saved Crunch", + localPath: committedRecord.localPath, + }), + }), + })); + const finalStateWriteOrder = setState.mock.invocationCallOrder[setState.mock.invocationCallOrder.length - 1]; + expect(finalStateWriteOrder).toBeLessThan(savePreset.mock.invocationCallOrder[0]); + }); + + it("persists committed Cab/IR previews into the cab slot", async () => { + const cabSchema: BuiltInPluginSchema = { + ...schema, + modelState: { + ampModelPath: "OpenStudio/NAM/library/amp.nam", + pedalModelPath: "", + cabIRPath: "OpenStudio/NAM/previews/bright-room.wav", + }, + }; + const previewRecord: NAMInstalledModel = { + modelId: 7002, + toneId: 700, + name: "Bright Room IR", + toneTitle: "Bright Room", + creator: "IR Maker", + gear: "Cab", + gearType: "Cabinet IR", + localPath: "OpenStudio/NAM/previews/bright-room.wav", + preview: true, + }; + const committedRecord: NAMInstalledModel = { + ...previewRecord, + preview: false, + localPath: "OpenStudio/NAM/library/bright-room.wav", + }; + const activePreview = makeNAMActivePreview(previewRecord, { + key: "700:7002", + slot: "cab", + toneId: 700, + modelId: 7002, + title: "Bright Room", + modelName: "Bright Room IR", + creator: "IR Maker", + localPath: previewRecord.localPath, + source: "catalog", + previewDownload: true, + saved: false, + action: "live-preview", + }); + const setState = vi.spyOn(nativeBridge, "setBuiltInPluginState").mockResolvedValue(true); + vi.spyOn(nativeBridge, "getBuiltInPluginState").mockResolvedValue({ + values: { + inputTrimDb: 0, + auditionSource: 1, + }, + modelState: cabSchema.modelState, + uiState: { + namActivePreview: activePreview, + }, + }); + vi.spyOn(nativeBridge, "commitNAMPreviewTone").mockResolvedValue({ + success: true, + record: committedRecord, + }); + vi.spyOn(nativeBridge, "saveBuiltInFXPreset").mockResolvedValue(true); + + const result = await saveNAMTone({ + address, + schema: cabSchema, + metadata: { + toneName: "My Cab Tone", + creator: "Session User", + }, + activePreview, + selectedRecord: previewRecord, + slotHint: "cab", + }); + + expect(result.success).toBe(true); + expect(result.savedTone?.slot).toBe("cab"); + expect(result.savedTone?.slots.cab).toBe(committedRecord.localPath); + expect(setState).toHaveBeenCalledWith(address, expect.objectContaining({ + modelState: { + cabIRPath: committedRecord.localPath, + }, + uiState: expect.objectContaining({ + namSavedTone: expect.objectContaining({ + slot: "cab", + localPath: committedRecord.localPath, + }), + }), + })); + }); + + it("saves a full rig without erasing the user's requested external-Cab preference", async () => { + const fullRigRecord: NAMInstalledModel = { + modelId: 8102, + toneId: 810, + name: "Studio Full Rig", + toneTitle: "Studio Full Rig", + creator: "Rig Maker", + gearType: "full-rig", + captureType: "full_rig", + localPath: "OpenStudio/NAM/library/studio-full-rig.nam", + }; + const activePreview = makeNAMActivePreview(fullRigRecord, { + key: "810:8102", + slot: "amp", + localPath: fullRigRecord.localPath, + source: "installed", + saved: false, + action: "live-preview", + captureType: "full_rig", + includesCab: true, + }); + const currentState = { + values: { + inputTrimDb: 0, + auditionSource: 0, + cabEnabled: 0, + ampEnabled: 1, + ampMix: 1, + }, + modelState: { + ampModelPath: fullRigRecord.localPath, + pedalModelPath: "", + cabIRPath: "OpenStudio/NAM/library/retained-cab.wav", + hasAmpModel: true, + ampIncludesCab: true, + cabRequestedEnabled: true, + }, + uiState: { + namActivePreview: activePreview, + }, + }; + vi.spyOn(nativeBridge, "getBuiltInPluginState").mockResolvedValue(currentState); + const setParam = vi.spyOn(nativeBridge, "setBuiltInPluginParam").mockResolvedValue(true); + vi.spyOn(nativeBridge, "setBuiltInPluginState").mockResolvedValue(true); + vi.spyOn(nativeBridge, "saveBuiltInFXPreset").mockResolvedValue(true); + + const result = await saveNAMTone({ + address, + schema, + metadata: { + toneName: "Full Rig Preset", + creator: "Session User", + }, + activePreview, + selectedRecord: fullRigRecord, + slotHint: "amp", + }); + + expect(result.success).toBe(true); + expect(result.savedTone?.modelState.cabRequestedEnabled).toBe(true); + expect(result.savedTone?.modelState.ampDeclaredCaptureType).toBe("full_rig"); + expect(result.savedTone?.values.cabEnabled).toBe(0); + expect(setParam).toHaveBeenCalledWith(address, "auditionSource", 0); + expect(setParam).not.toHaveBeenCalledWith(address, "cabEnabled", expect.any(Number)); + }); + + it("reports failure when the native preset cannot be saved for reopen", async () => { + vi.spyOn(nativeBridge, "getBuiltInPluginState").mockResolvedValue({ + values: { + inputTrimDb: 0, + auditionSource: 1, + pedalMix: 0.35, + }, + modelState: schema.modelState, + uiState: { + namActivePreview: { slot: "amp", saved: false }, + }, + }); + vi.spyOn(nativeBridge, "setBuiltInPluginParam").mockResolvedValue(true); + const setState = vi.spyOn(nativeBridge, "setBuiltInPluginState").mockResolvedValue(true); + vi.spyOn(nativeBridge, "saveBuiltInFXPreset").mockResolvedValue(false); + + const result = await saveNAMTone({ + address, + schema, + metadata: { + toneName: "Reopen Guard", + creator: "Session User", + }, + selectedRecord: null, + slotHint: "amp", + }); + + expect(result.success).toBe(false); + expect(result.error).toContain("Preset could not be saved"); + expect(result.error).toContain("previous rack was restored"); + expect(setState).toHaveBeenLastCalledWith(address, { + values: { + inputTrimDb: 0, + pedalMix: 0.35, + }, + modelState: { + clearPedalModel: true, + ampModelPath: "OpenStudio/NAM/previews/classic-crunch-a2.nam", + clearCabIR: true, + }, + uiState: { + namActivePreview: { slot: "amp", saved: false }, + }, + }); + }); +}); diff --git a/frontend/src/__tests__/namTunerTelemetry.test.ts b/frontend/src/__tests__/namTunerTelemetry.test.ts new file mode 100644 index 0000000..1f2f388 --- /dev/null +++ b/frontend/src/__tests__/namTunerTelemetry.test.ts @@ -0,0 +1,140 @@ +import { describe, expect, it } from "vitest"; +import type { AudioDebugSnapshot } from "../services/NativeBridge"; +import { + isNAMTunerTelemetryForRack, + resolveNAMTunerDisplayPitch, + startNAMTunerSubscription, +} from "../utils/namTunerTelemetry"; + +const snapshot = (overrides: Partial = {}): AudioDebugSnapshot => ({ + transportPlaying: false, + transportRecording: false, + transportPosition: 0, + sampleRate: 48000, + blockSize: 128, + playbackClipCount: 0, + activeOutputChannels: 2, + postTrackPlaybackPeak: 0, + postMonitoringInputPeak: 0, + postMasterFxPeak: 0, + postMonitoringFxPeak: 0, + finalOutputPeak: 0, + lastRecordingClipCountReturned: 0, + playbackTracks: [], + tunerInputStartChannel: 0, + tunerInputChannelCount: 1, + ...overrides, +}); + +const hostTrack = { + type: "audio", + inputStartChannel: 0, + inputChannelCount: 1, + monitorEnabled: true, +}; + +describe("NAM tuner telemetry routing", () => { + it("accepts telemetry selected for this host track", () => { + expect(isNAMTunerTelemetryForRack({ + snapshot: snapshot({ + tunerTrackId: "track-a", + tunerInputStartChannel: 7, + tunerInputChannelCount: 2, + }), + hostTrack, + hasTrackAddress: true, + trackId: "track-a", + })).toBe(true); + }); + + it("rejects telemetry from another track even when both share an input", () => { + expect(isNAMTunerTelemetryForRack({ + snapshot: snapshot({ tunerTrackId: "track-b" }), + hostTrack, + hasTrackAddress: true, + trackId: "track-a", + })).toBe(false); + }); + + it("falls back to input-route matching for older native snapshots", () => { + expect(isNAMTunerTelemetryForRack({ + snapshot: snapshot(), + hostTrack, + hasTrackAddress: true, + trackId: "track-a", + })).toBe(true); + }); + + it("keeps global master telemetry separate from track tuners", () => { + const globalSnapshot = snapshot({ + tunerUsesGlobalInput: true, + tunerTrackId: "", + }); + + expect(isNAMTunerTelemetryForRack({ + snapshot: globalSnapshot, + hostTrack: null, + hasTrackAddress: false, + })).toBe(true); + expect(isNAMTunerTelemetryForRack({ + snapshot: globalSnapshot, + hostTrack, + hasTrackAddress: true, + trackId: "track-a", + })).toBe(false); + }); + + it("keeps the averaged note visible while native telemetry is holding", () => { + const display = resolveNAMTunerDisplayPitch(snapshot({ + tunerState: "Holding", + tunerPitchLocked: true, + tunerFrequencyHz: 81.9, + tunerAverageFrequencyHz: 82.4069, + tunerCents: -10, + tunerAverageCents: 1.5, + })); + + expect(display).toEqual({ + state: "holding", + frequencyHz: 82.4069, + cents: 1.5, + stateHasDisplayPitch: true, + hasDisplayPitch: true, + }); + }); + + it("serializes rapid activation cleanup and deactivates a subscriber once", async () => { + const calls: Array<{ trackId: string; active: boolean; subscriberId: string }> = []; + let finishActivation: ((active: boolean) => void) | undefined; + const activationGate = new Promise((resolve) => { + finishActivation = resolve; + }); + const bridge = { + setNAMTunerActive: async (trackId: string, active: boolean, subscriberId: string) => { + calls.push({ trackId, active, subscriberId }); + return active ? activationGate : true; + }, + }; + + const subscription = startNAMTunerSubscription( + bridge, + "track-a", + "subscriber-a", + ); + const firstDisposal = subscription.dispose(); + const secondDisposal = subscription.dispose(); + + expect(firstDisposal).toBe(secondDisposal); + expect(calls).toEqual([ + { trackId: "track-a", active: true, subscriberId: "subscriber-a" }, + ]); + + finishActivation?.(true); + await firstDisposal; + + expect(calls).toEqual([ + { trackId: "track-a", active: true, subscriberId: "subscriber-a" }, + { trackId: "track-a", active: false, subscriberId: "subscriber-a" }, + ]); + }); +}); diff --git a/frontend/src/__tests__/nativePath.test.ts b/frontend/src/__tests__/nativePath.test.ts new file mode 100644 index 0000000..4fcc6d7 --- /dev/null +++ b/frontend/src/__tests__/nativePath.test.ts @@ -0,0 +1,22 @@ +import { describe, expect, it } from "vitest"; +import { joinNativePath } from "../utils/nativePath"; + +describe("joinNativePath", () => { + it("preserves native Windows and UNC separators", () => { + expect(joinNativePath("C:\\Renders", "mix.wav")).toBe("C:\\Renders\\mix.wav"); + expect(joinNativePath("\\\\server\\share\\", "stem.wav")) + .toBe("\\\\server\\share\\stem.wav"); + }); + + it("uses POSIX separators for macOS/Linux and forward-slash Windows paths", () => { + expect(joinNativePath("/home/user/renders/", "mix.wav")) + .toBe("/home/user/renders/mix.wav"); + expect(joinNativePath("C:/Users/example/Renders", "mix.wav")) + .toBe("C:/Users/example/Renders/mix.wav"); + }); + + it("handles an empty directory and strips accidental leading separators", () => { + expect(joinNativePath("", "/mix.wav")).toBe("mix.wav"); + expect(joinNativePath("/tmp/", "\\mix.wav")).toBe("/tmp/mix.wav"); + }); +}); diff --git a/frontend/src/__tests__/nativeShortcutForwarding.test.ts b/frontend/src/__tests__/nativeShortcutForwarding.test.ts new file mode 100644 index 0000000..ae203e9 --- /dev/null +++ b/frontend/src/__tests__/nativeShortcutForwarding.test.ts @@ -0,0 +1,26 @@ +import { describe, expect, it } from "vitest"; +import pluginWindowManagerSource from "../../../Source/PluginWindowManager.cpp?raw"; + +describe("native plug-in shortcut forwarding", () => { + it("preserves distinct editing, navigation, function, and numpad keys", () => { + expect(pluginWindowManagerSource).toContain('backspaceKey) return "Backspace"'); + expect(pluginWindowManagerSource).toContain('pageUpKey) return "PageUp"'); + expect(pluginWindowManagerSource).toContain('homeKey) return "Home"'); + expect(pluginWindowManagerSource).toContain('F12Key) return "F12"'); + expect(pluginWindowManagerSource).toContain('numberPad0, "0", "Numpad0"'); + expect(pluginWindowManagerSource).toContain('numberPadAdd, "+", "NumpadAdd"'); + }); + + it("does not report macOS Command as both Ctrl and Meta", () => { + expect(pluginWindowManagerSource).toContain("#if JUCE_MAC"); + expect(pluginWindowManagerSource).toContain( + 'obj->setProperty("ctrlKey", modifiers.isCtrlDown());', + ); + expect(pluginWindowManagerSource).toContain( + 'obj->setProperty("metaKey", modifiers.isCommandDown());', + ); + expect(pluginWindowManagerSource).not.toContain( + 'obj->setProperty("ctrlKey", modifiers.isCtrlDown() || modifiers.isCommandDown());', + ); + }); +}); diff --git a/frontend/src/__tests__/parameterWheel.test.ts b/frontend/src/__tests__/parameterWheel.test.ts new file mode 100644 index 0000000..59e9caf --- /dev/null +++ b/frontend/src/__tests__/parameterWheel.test.ts @@ -0,0 +1,118 @@ +import { describe, expect, it } from "vitest"; +import { + accumulateParameterWheelGesture, + getParameterWheelStepCount, + getParameterWheelValue, +} from "../utils/parameterWheel"; +import { createWheelDeltaAccumulator } from "../utils/wheelDeltaAccumulator"; + +describe("parameter wheel values", () => { + it("moves one declared step per conventional mouse notch", () => { + expect(getParameterWheelValue( + { operation: "adjust", amount: -100, precision: "normal" }, + { min: 0, max: 10, value: 5, step: 0.5 }, + )).toBe(5.5); + }); + + it("uses one tenth of the normal step in fine mode", () => { + expect(getParameterWheelValue( + { operation: "adjust", amount: 100, precision: "fine" }, + { min: -1, max: 1, value: 0, step: 0.1 }, + )).toBe(-0.01); + }); + + it("keeps tiny packets fractional and preserves exact normal/fine rates", () => { + expect(getParameterWheelValue( + { operation: "adjust", amount: -1, precision: "normal" }, + { min: 0, max: 10, value: 5, step: 0.5 }, + )).toBe(5.005); + expect(getParameterWheelValue( + { operation: "adjust", amount: -1, precision: "fine" }, + { min: 0, max: 10, value: 5, step: 0.5 }, + )).toBe(5.0005); + }); + + it("scales larger deltas and clamps both ends", () => { + expect(getParameterWheelValue( + { operation: "adjust", amount: -800, precision: "normal" }, + { min: 0, max: 1, value: 0.8, step: 0.1 }, + )).toBe(1); + expect(getParameterWheelValue( + { operation: "adjust", amount: 800, precision: "normal" }, + { min: 0, max: 1, value: 0.2, step: 0.1 }, + )).toBe(0); + }); + + it("is a no-op for suppress/native gestures and zero deltas", () => { + expect(getParameterWheelValue( + { operation: "suppress", amount: -100, precision: "normal" }, + { min: 0, max: 1, value: 0.5 }, + )).toBe(0.5); + }); +}); + +describe("parameter wheel step counts", () => { + it("derives direction and precision from the resolved gesture", () => { + expect(getParameterWheelStepCount( + { operation: "adjust", amount: -100, precision: "normal" }, + )).toBe(4); + expect(getParameterWheelStepCount( + { operation: "adjust", amount: 100, precision: "fine" }, + )).toBe(-1); + }); + + it("supports control-specific rates while retaining resolver precision", () => { + expect(getParameterWheelStepCount( + { operation: "adjust", amount: -100, precision: "normal" }, + { normal: 2, fine: 1 }, + )).toBe(2); + expect(getParameterWheelStepCount( + { operation: "adjust", amount: -100, precision: "fine" }, + { normal: 2, fine: 1 }, + )).toBe(1); + }); + + it("scales normalized amounts and rejects non-adjustment gestures", () => { + expect(getParameterWheelStepCount( + { operation: "adjust", amount: 250, precision: "normal" }, + )).toBe(-10); + expect(getParameterWheelStepCount( + { operation: "native-scroll", amount: -100, precision: "fine" }, + )).toBe(0); + expect(getParameterWheelStepCount( + { operation: "adjust", amount: 0, precision: "normal" }, + )).toBe(0); + }); + + it("accumulates sub-pixel gesture packets per parameter target", () => { + const accumulator = createWheelDeltaAccumulator({ quantum: 1 }); + const gesture = { + profileId: "openstudio", + ruleId: "parameter.adjust", + matched: true, + operation: "adjust" as const, + target: "parameter" as const, + axis: "vertical" as const, + amount: -0.25, + delta: { x: 0, y: -0.25, mode: "pixel" as const, sourceMode: 0, isZero: false }, + modifiers: { + primary: false, + secondary: false, + alt: false, + shift: false, + raw: { control: false, commandOrMeta: false, altOrOption: false, shift: false }, + }, + device: { device: "trackpad" as const, basis: "fractional-pixel-delta" as const }, + anchor: { kind: "hovered-control" as const }, + precision: "normal" as const, + preventDefault: true, + stopPropagation: true, + }; + + expect(accumulateParameterWheelGesture(accumulator, gesture, "gain")).toBeNull(); + expect(accumulateParameterWheelGesture(accumulator, gesture, "gain")).toBeNull(); + expect(accumulateParameterWheelGesture(accumulator, gesture, "gain")).toBeNull(); + expect(accumulateParameterWheelGesture(accumulator, gesture, "gain")?.amount).toBe(-1); + accumulator.dispose(); + }); +}); diff --git a/frontend/src/__tests__/pitchEditorLockSafety.test.ts b/frontend/src/__tests__/pitchEditorLockSafety.test.ts new file mode 100644 index 0000000..119b9ed --- /dev/null +++ b/frontend/src/__tests__/pitchEditorLockSafety.test.ts @@ -0,0 +1,347 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import type { PitchCorrectionCompletionData, PitchNoteData } from "../services/NativeBridge"; +import { nativeBridge } from "../services/NativeBridge"; +import { + handlePitchCorrectionComplete, + usePitchEditorStore, +} from "../store/pitchEditorStore"; +import { createDefaultTrack, useDAWStore } from "../store/useDAWStore"; +import { + getRegisteredAction, + registerScopedActionExecutor, +} from "../store/actionRegistry"; +import { getPitchEditorEditActionBlockResult } from "../components/PitchEditorLowerZone"; +import { + activateShortcutContext, + resetShortcutContextForTests, +} from "../utils/shortcutContext"; + +const originalDAWState = { + tracks: useDAWStore.getState().tracks, + globalLocked: useDAWStore.getState().globalLocked, + lockSettings: useDAWStore.getState().lockSettings, + showPitchEditor: useDAWStore.getState().showPitchEditor, + pitchEditorTrackId: useDAWStore.getState().pitchEditorTrackId, + pitchEditorClipId: useDAWStore.getState().pitchEditorClipId, + pitchEditorFxIndex: useDAWStore.getState().pitchEditorFxIndex, + syncClipsWithBackend: useDAWStore.getState().syncClipsWithBackend, +}; + +const cleanups: Array<() => void> = []; + +function makeNote(id: string, detectedPitch: number, startTime: number): PitchNoteData { + return { + id, + startTime, + endTime: startTime + 0.4, + effectiveStartTime: startTime, + effectiveEndTime: startTime + 0.4, + detectedPitch, + correctedPitch: detectedPitch, + driftCorrectionAmount: 0, + vibratoDepth: 1, + vibratoRate: 0, + transitionIn: 40, + transitionOut: 60, + formantShift: 0, + gain: 0, + voiced: true, + wordGroupId: `word-${id}`, + pitchDrift: [], + }; +} + +function setupEditablePitchTarget() { + const track = { + ...createDefaultTrack("track-a", "Track A"), + clips: [{ + id: "clip-a", + filePath: "C:/authoritative.wav", + name: "Audio", + startTime: 0, + duration: 4, + offset: 0, + color: "#123456", + volumeDB: 0, + fadeIn: 0, + fadeOut: 0, + locked: false, + }], + }; + useDAWStore.setState({ + tracks: [track], + globalLocked: false, + lockSettings: { ...useDAWStore.getState().lockSettings, items: false }, + showPitchEditor: true, + pitchEditorTrackId: "track-a", + pitchEditorClipId: "clip-a", + pitchEditorFxIndex: -1, + syncClipsWithBackend: vi.fn(async () => undefined), + }); + usePitchEditorStore.getState().open("track-a", "clip-a", -1); + usePitchEditorStore.setState({ + notes: [makeNote("note-a", 60, 0.2), makeNote("note-b", 64, 1.0)], + selectedNoteIds: ["note-a"], + contour: null, + undoStack: [], + redoStack: [], + applyState: "idle", + applyMessage: "", + renderCoverage: [], + }); +} + +function setEditLock(kind: "global" | "items" | "clip", locked: boolean) { + if (kind === "global") { + useDAWStore.setState({ globalLocked: locked }); + return; + } + if (kind === "items") { + useDAWStore.setState((state) => ({ + lockSettings: { ...state.lockSettings, items: locked }, + })); + return; + } + useDAWStore.setState((state) => ({ + tracks: state.tracks.map((track) => track.id === "track-a" + ? { + ...track, + clips: track.clips.map((clip) => clip.id === "clip-a" + ? { ...clip, locked } + : clip), + } + : track), + })); +} + +function setTrackFrozen(frozen: boolean) { + useDAWStore.setState((state) => ({ + tracks: state.tracks.map((track) => track.id === "track-a" + ? { ...track, frozen } + : track), + })); +} + +function currentClipFilePath() { + return useDAWStore.getState().tracks[0]?.clips[0]?.filePath; +} + +async function flushPromises() { + await Promise.resolve(); + await Promise.resolve(); +} + +function completion(requestId: string, outputFile: string): PitchCorrectionCompletionData { + return { + clipId: "clip-a", + requestId, + outputFile, + success: true, + renderMode: "note_hq", + }; +} + +beforeEach(() => { + vi.useFakeTimers(); + vi.stubGlobal("window", { + location: { hostname: "test.local" }, + setTimeout, + clearTimeout, + localStorage: { getItem: () => null }, + }); + vi.spyOn(nativeBridge, "applyPitchCorrection").mockResolvedValue({ outputFile: "", success: true }); + vi.spyOn(nativeBridge, "previewPitchCorrection").mockResolvedValue({ outputFile: "", success: true }); + vi.spyOn(nativeBridge, "cancelPitchCorrectionRequests").mockResolvedValue(true); + vi.spyOn(nativeBridge, "clearAllPitchPreviewRoutes").mockResolvedValue(true); + vi.spyOn(nativeBridge, "clearClipRenderedPreviewSegments").mockResolvedValue(true); + vi.spyOn(nativeBridge, "clearClipPitchPreview").mockResolvedValue(true); + vi.spyOn(nativeBridge, "stopPitchScrubPreview").mockResolvedValue(true); + vi.spyOn(nativeBridge, "setPitchCorrectionBypass").mockResolvedValue(undefined); + vi.spyOn(nativeBridge, "getPitchPreviewRoutingStatus").mockResolvedValue({ + monitorMode: "corrected_source", + correctedSourceActive: true, + renderedSegmentActive: false, + clipLivePreviewActive: false, + scrubPreviewActive: false, + }); + setupEditablePitchTarget(); +}); + +afterEach(() => { + while (cleanups.length > 0) cleanups.pop()?.(); + resetShortcutContextForTests(); + usePitchEditorStore.getState().close(); + useDAWStore.setState(originalDAWState); + vi.clearAllTimers(); + vi.restoreAllMocks(); + vi.unstubAllGlobals(); + vi.useRealTimers(); +}); + +describe("pitch editor lock and freeze authority", () => { + it("reverts an active drag and cancels its preview without creating an apply", async () => { + const applySpy = vi.mocked(nativeBridge.applyPitchCorrection); + const cancelSpy = vi.mocked(nativeBridge.cancelPitchCorrectionRequests); + + usePitchEditorStore.getState().pushUndo("Move note"); + usePitchEditorStore.getState().beginInteractivePreview("note-a"); + usePitchEditorStore.getState().updateNote("note-a", { correctedPitch: 67 }); + expect(usePitchEditorStore.getState().notes[0].correctedPitch).toBe(67); + + setEditLock("global", true); + expect(usePitchEditorStore.getState().notes[0].correctedPitch).toBe(60); + expect(usePitchEditorStore.getState().undoStack).toEqual([]); + expect(usePitchEditorStore.getState().redoStack).toEqual([]); + expect(cancelSpy).toHaveBeenCalledWith("clip-a", "C:/authoritative.wav"); + + usePitchEditorStore.getState().commitNoteEdit(); + setEditLock("global", false); + await flushPromises(); + await vi.advanceTimersByTimeAsync(1000); + expect(applySpy).not.toHaveBeenCalled(); + }); + + it("blocks every pitch-data mutation and native pitch request while item-locked", async () => { + setEditLock("items", true); + await flushPromises(); + const before = usePitchEditorStore.getState(); + const noteSnapshot = JSON.stringify(before.notes); + + const state = usePitchEditorStore.getState(); + state.beginInteractivePreview("note-a"); + state.pushUndo("Blocked edit"); + state.updateNote("note-a", { correctedPitch: 72 }); + state.commitNoteEdit(); + state.updateSelectedNotes({ gain: 3 }); + state.moveSelectedPitch(1); + state.splitNote("note-a", 0.4); + state.correctSelectedToScale(); + state.correctAllToScale(); + state.setNoteGain("note-a", 4); + state.setNoteModulation("note-a", 20); + state.setNoteDrift("note-a", 50); + state.setNoteTransition("note-a", 100, 100); + state.applyCorrectPitchMacro(1, 1, false); + state.mergeNotes(["note-a", "note-b"]); + state.beginDrawPitch(); + state.drawPitchOnNote("note-a", 0.3, 68); + state.commitDrawPitch(); + state.toggleABCompare(); + await state.applyCorrection(); + await state.previewCorrection(); + + const after = usePitchEditorStore.getState(); + expect(JSON.stringify(after.notes)).toBe(noteSnapshot); + expect(after.undoStack).toEqual(before.undoStack); + expect(after.redoStack).toEqual(before.redoStack); + expect(after.abCompareMode).toBe(false); + expect(nativeBridge.applyPitchCorrection).not.toHaveBeenCalled(); + expect(nativeBridge.previewPitchCorrection).not.toHaveBeenCalled(); + expect(nativeBridge.setPitchCorrectionBypass).not.toHaveBeenCalled(); + }); + + it("claims a docked Pitch Editor shortcut as a locked no-op, then executes it after unlock", async () => { + cleanups.push(registerScopedActionExecutor( + { kind: "pitch_editor" }, + (actionId) => { + const blocked = getPitchEditorEditActionBlockResult(actionId); + if (blocked) return blocked; + if (actionId === "pitch.moveUp") { + usePitchEditorStore.getState().moveSelectedPitch(1); + return "handled"; + } + return "unmatched"; + }, + ["pitch.moveUp"], + )); + activateShortcutContext({ kind: "pitch_editor" }); + setEditLock("clip", true); + await flushPromises(); + + getRegisteredAction("pitch.moveUp")?.execute(); + expect(usePitchEditorStore.getState().notes[0].correctedPitch).toBe(60); + + setEditLock("clip", false); + await flushPromises(); + getRegisteredAction("pitch.moveUp")?.execute(); + expect(usePitchEditorStore.getState().notes[0].correctedPitch).toBe(61); + }); + + for (const lockKind of ["global", "items", "clip"] as const) { + it(`replays committed undo and redo while the ${lockKind} lock remains active`, async () => { + const applySpy = vi.mocked(nativeBridge.applyPitchCorrection); + usePitchEditorStore.getState().moveSelectedPitch(1); + expect(usePitchEditorStore.getState().notes[0].correctedPitch).toBe(61); + expect(usePitchEditorStore.getState().undoStack).toHaveLength(1); + + setEditLock(lockKind, true); + await flushPromises(); + usePitchEditorStore.getState().undo(); + expect(usePitchEditorStore.getState().notes[0].correctedPitch).toBe(60); + expect(usePitchEditorStore.getState().undoStack).toHaveLength(0); + expect(usePitchEditorStore.getState().redoStack).toHaveLength(1); + await vi.advanceTimersByTimeAsync(300); + await flushPromises(); + expect(applySpy).toHaveBeenCalledTimes(1); + + usePitchEditorStore.getState().redo(); + expect(usePitchEditorStore.getState().notes[0].correctedPitch).toBe(61); + expect(usePitchEditorStore.getState().undoStack).toHaveLength(1); + expect(usePitchEditorStore.getState().redoStack).toHaveLength(0); + await vi.advanceTimersByTimeAsync(300); + await flushPromises(); + expect(applySpy).toHaveBeenCalledTimes(2); + }); + } + + it("hides on freeze, preserves history, and restores the editor and history after unfreeze", async () => { + usePitchEditorStore.getState().moveSelectedPitch(1); + expect(usePitchEditorStore.getState().undoStack).toHaveLength(1); + + setTrackFrozen(true); + expect(useDAWStore.getState().showPitchEditor).toBe(false); + const frozenNotes = JSON.stringify(usePitchEditorStore.getState().notes); + usePitchEditorStore.getState().undo(); + expect(JSON.stringify(usePitchEditorStore.getState().notes)).toBe(frozenNotes); + expect(usePitchEditorStore.getState().undoStack).toHaveLength(1); + + setTrackFrozen(false); + await flushPromises(); + expect(useDAWStore.getState().showPitchEditor).toBe(true); + expect(useDAWStore.getState().pitchEditorTrackId).toBe("track-a"); + expect(usePitchEditorStore.getState().undoStack).toHaveLength(1); + usePitchEditorStore.getState().undo(); + expect(usePitchEditorStore.getState().notes[0].correctedPitch).toBe(60); + }); + + for (const authorityLoss of ["lock", "freeze"] as const) { + it(`rejects a stale mid-render ${authorityLoss} completion and accepts a newer request`, async () => { + const applySpy = vi.mocked(nativeBridge.applyPitchCorrection); + const cancelSpy = vi.mocked(nativeBridge.cancelPitchCorrectionRequests); + usePitchEditorStore.getState().moveSelectedPitch(1); + await usePitchEditorStore.getState().applyCorrection(); + const staleRequestId = String(applySpy.mock.calls[applySpy.mock.calls.length - 1]?.[4]); + expect(staleRequestId).not.toBe("undefined"); + + if (authorityLoss === "lock") setEditLock("global", true); + else setTrackFrozen(true); + expect(cancelSpy).toHaveBeenCalledWith("clip-a", "C:/authoritative.wav"); + + handlePitchCorrectionComplete(completion(staleRequestId, "C:/stale.wav")); + expect(currentClipFilePath()).toBe("C:/authoritative.wav"); + + if (authorityLoss === "lock") setEditLock("global", false); + else setTrackFrozen(false); + await flushPromises(); + usePitchEditorStore.getState().moveSelectedPitch(1); + await usePitchEditorStore.getState().applyCorrection(); + const currentRequestId = String(applySpy.mock.calls[applySpy.mock.calls.length - 1]?.[4]); + expect(currentRequestId).not.toBe(staleRequestId); + + handlePitchCorrectionComplete(completion(staleRequestId, "C:/still-stale.wav")); + expect(currentClipFilePath()).toBe("C:/authoritative.wav"); + handlePitchCorrectionComplete(completion(currentRequestId, "C:/current.wav")); + expect(currentClipFilePath()).toBe("C:/current.wav"); + }); + } +}); diff --git a/frontend/src/__tests__/pitchEditorSingleNoteOwnership.test.ts b/frontend/src/__tests__/pitchEditorSingleNoteOwnership.test.ts index 973c5a7..47c4b89 100644 --- a/frontend/src/__tests__/pitchEditorSingleNoteOwnership.test.ts +++ b/frontend/src/__tests__/pitchEditorSingleNoteOwnership.test.ts @@ -1,6 +1,13 @@ import { beforeEach, afterEach, describe, expect, it, vi } from "vitest"; import type { PitchNoteData } from "../services/NativeBridge"; import { usePitchEditorStore } from "../store/pitchEditorStore"; +import { createDefaultTrack, useDAWStore } from "../store/useDAWStore"; + +const originalDAWState = { + tracks: useDAWStore.getState().tracks, + globalLocked: useDAWStore.getState().globalLocked, + lockSettings: useDAWStore.getState().lockSettings, +}; function makeNote(id: string, correctedPitch: number, wordGroupId = "word_a"): PitchNoteData { const index = Number(id.replace(/\D/g, "")) || 0; @@ -31,6 +38,26 @@ describe("pitch editor single-note ownership", () => { vi.stubGlobal("window", { location: { hostname: "test.local" }, }); + useDAWStore.setState({ + tracks: [{ + ...createDefaultTrack("track-a", "Track A"), + clips: [{ + id: "clip-a", + filePath: "C:/audio.wav", + name: "Audio", + startTime: 0, + duration: 3, + offset: 0, + color: "#123456", + volumeDB: 0, + fadeIn: 0, + fadeOut: 0, + locked: false, + }], + }], + globalLocked: false, + lockSettings: { ...useDAWStore.getState().lockSettings, items: false }, + }); usePitchEditorStore.setState({ trackId: "track-a", clipId: "clip-a", @@ -54,6 +81,7 @@ describe("pitch editor single-note ownership", () => { afterEach(() => { vi.clearAllTimers(); + useDAWStore.setState(originalDAWState); vi.unstubAllGlobals(); vi.useRealTimers(); }); diff --git a/frontend/src/__tests__/profileShortcutCollisionDispatch.test.ts b/frontend/src/__tests__/profileShortcutCollisionDispatch.test.ts new file mode 100644 index 0000000..2765c1b --- /dev/null +++ b/frontend/src/__tests__/profileShortcutCollisionDispatch.test.ts @@ -0,0 +1,323 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { + createDefaultTrack, + useDAWStore, +} from "../store/useDAWStore"; +import { + getActionShortcutScopes, + getRegisteredActions, + registerScopedActionExecutor, +} from "../store/actionRegistry"; +import { + dispatchGlobalShortcut, + getEffectiveActionShortcuts, + resolveRegistryShortcutAction, + type GlobalShortcutPayload, +} from "../utils/globalShortcutDispatcher"; +import { + shortcutBindingEventSignature, + type ShortcutPlatform, +} from "../utils/platform"; +import { + KEYBOARD_SHORTCUT_PROFILES, + getProfileActionBindings, + type KeyboardShortcutProfileId, +} from "../utils/shortcutProfiles"; +import { + activateShortcutContext, + resetShortcutContextForTests, + type EditShortcutContext, +} from "../utils/shortcutContext"; + +const TEST_PLATFORMS = ["macos", "windows"] as const satisfies readonly ShortcutPlatform[]; + +function dispatchAction( + profileId: KeyboardShortcutProfileId, + platform: ShortcutPlatform, + context: EditShortcutContext, + event: GlobalShortcutPayload, +): { handled: boolean; actionIds: string[]; prevented: boolean } { + useDAWStore.setState({ keyboardShortcutProfileId: profileId, customShortcuts: {} }); + resetShortcutContextForTests(); + activateShortcutContext(context); + const actionIds: string[] = []; + const preventDefault = vi.fn(); + const handled = dispatchGlobalShortcut( + { ...event, preventDefault }, + platform, + { executeAction: (action) => actionIds.push(action.id) }, + ); + return { handled, actionIds, prevented: preventDefault.mock.calls.length > 0 }; +} + +describe("profile shortcut collision dispatch", () => { + const scopedCleanups: Array<() => void> = []; + const original = { + keyboardShortcutProfileId: useDAWStore.getState().keyboardShortcutProfileId, + customShortcuts: useDAWStore.getState().customShortcuts, + tracks: useDAWStore.getState().tracks, + selectedTrackId: useDAWStore.getState().selectedTrackId, + selectedTrackIds: useDAWStore.getState().selectedTrackIds, + selectedClipId: useDAWStore.getState().selectedClipId, + selectedClipIds: useDAWStore.getState().selectedClipIds, + transport: useDAWStore.getState().transport, + stepInputEnabled: useDAWStore.getState().stepInputEnabled, + }; + + beforeEach(() => { + const track = createDefaultTrack("profile-dispatch-track", "Profile Dispatch", "#14b8a6", "audio", []); + track.clips = [{ + id: "profile-crossing-clip", + filePath: "C:/profile/crossing.wav", + name: "Crossing", + startTime: 0, + duration: 2, + offset: 0, + color: "#14b8a6", + volumeDB: 0, + fadeIn: 0, + fadeOut: 0, + }]; + useDAWStore.setState((state) => ({ + tracks: [track], + selectedTrackId: track.id, + selectedTrackIds: [track.id], + selectedClipId: "profile-crossing-clip", + selectedClipIds: ["profile-crossing-clip"], + transport: { ...state.transport, currentTime: 1 }, + stepInputEnabled: false, + customShortcuts: {}, + })); + resetShortcutContextForTests(); + }); + + afterEach(() => { + scopedCleanups.splice(0).forEach((cleanup) => cleanup()); + resetShortcutContextForTests(); + useDAWStore.setState(original); + vi.restoreAllMocks(); + }); + + it.each(TEST_PLATFORMS)( + "keeps FL Studio Backspace snap reachable above Piano Roll deletion on %s", + (platform) => { + scopedCleanups.push(registerScopedActionExecutor( + { kind: "piano_roll", sessionId: "fl-collision" }, + (actionId) => actionId === "midi.deleteSelection" ? "handled" : "unmatched", + ["midi.deleteSelection"], + )); + const backspace = dispatchAction( + "fl_studio", + platform, + { kind: "piano_roll", sessionId: "fl-collision" }, + { key: "Backspace", code: "Backspace", source: "profile-collision-test" }, + ); + expect(getEffectiveActionShortcuts( + getRegisteredActions().find((action) => action.id === "view.toggleSnap")!, + platform, + )).toEqual(["Backspace"]); + expect(resolveRegistryShortcutAction( + { key: "Backspace", code: "Backspace" }, + platform, + )?.action.id).toBe("view.toggleSnap"); + expect(backspace).toEqual({ + handled: true, + actionIds: ["view.toggleSnap"], + prevented: true, + }); + + const deleteKey = dispatchAction( + "fl_studio", + platform, + { kind: "piano_roll", sessionId: "fl-collision" }, + { key: "Delete", code: "Delete", source: "profile-collision-test" }, + ); + expect(deleteKey).toEqual({ + handled: true, + actionIds: ["midi.deleteSelection"], + prevented: true, + }); + + const automationBackspace = dispatchAction( + "fl_studio", + platform, + { kind: "automation" }, + { key: "Backspace", code: "Backspace", source: "profile-collision-test" }, + ); + expect(automationBackspace.actionIds).toEqual(["view.toggleSnap"]); + }, + ); + + it.each([ + ["logic_pro", "macos"], + ["logic_pro", "windows"], + ["garageband", "macos"], + ["garageband", "windows"], + ["ableton_live", "macos"], + ["ableton_live", "windows"], + ] as const)("dispatches %s A to arrangement automation on %s", (profileId, platform) => { + expect(dispatchAction( + profileId, + platform, + { kind: "timeline" }, + { key: "a", code: "KeyA", source: "profile-collision-test" }, + )).toEqual({ + handled: true, + actionIds: ["automation.toggleArrangementView"], + prevented: true, + }); + }); + + it.each(TEST_PLATFORMS)( + "does not let GarageBand's inherited timeline tools steal A/C/B/Y on %s", + (platform) => { + const modifier = platform === "macos" ? { metaKey: true } : { ctrlKey: true }; + expect(dispatchAction( + "garageband", + platform, + { kind: "timeline" }, + { key: "c", code: "KeyC", source: "profile-collision-test" }, + ).actionIds).toEqual(["transport.loop"]); + expect(dispatchAction( + "garageband", + platform, + { kind: "timeline" }, + { key: "b", code: "KeyB", source: "profile-collision-test" }, + ).actionIds).toEqual([]); + expect(dispatchAction( + "garageband", + platform, + { kind: "timeline" }, + { key: "y", code: "KeyY", source: "profile-collision-test" }, + ).actionIds).toEqual([]); + + // The explicit unbinds do not affect GarageBand's real split command. + expect(dispatchAction( + "garageband", + platform, + { kind: "timeline" }, + { + key: "t", + code: "KeyT", + ...modifier, + source: "profile-collision-test", + }, + ).actionIds).toEqual(["edit.splitAtCursor"]); + }, + ); + + it.each([ + ["macos", { ctrlKey: true, metaKey: true }, "Control+Command"], + ["windows", { ctrlKey: true, metaKey: true }, "Control+Meta"], + ] as const)("dispatches Logic's exact automation modes on %s", (platform, modifiers, _bindingStyle) => { + const selected = [ + ["o", "automation.selectedTracks.toggleOffRead"], + ["a", "automation.selectedTracks.toggleLatchRead"], + ] as const; + for (const [key, actionId] of selected) { + expect(dispatchAction( + "logic_pro", + platform, + { kind: "automation" }, + { + key, + code: `Key${key.toUpperCase()}`, + ...modifiers, + source: "profile-collision-test", + }, + ).actionIds).toEqual([actionId]); + } + + const allTracks = [ + ["o", "automation.allTracks.mode.off"], + ["r", "automation.allTracks.mode.read"], + ["t", "automation.allTracks.mode.touch"], + ["l", "automation.allTracks.mode.latch"], + ] as const; + for (const [key, actionId] of allTracks) { + expect(dispatchAction( + "logic_pro", + platform, + { kind: "automation" }, + { + key, + code: `Key${key.toUpperCase()}`, + ...modifiers, + shiftKey: true, + source: "profile-collision-test", + }, + ).actionIds).toEqual([actionId]); + } + }); + + it.each(TEST_PLATFORMS)( + "dispatches Cakewalk all-track automation safety commands on %s", + (platform) => { + expect(dispatchAction( + "cakewalk_sonar", + platform, + { kind: "automation" }, + { key: "F12", code: "F12", source: "profile-collision-test" }, + ).actionIds).toEqual(["automation.allTracks.writeOff"]); + expect(dispatchAction( + "cakewalk_sonar", + platform, + { kind: "automation" }, + { + key: "F12", + code: "F12", + ctrlKey: platform === "windows", + metaKey: platform === "macos", + source: "profile-collision-test", + }, + ).actionIds).toEqual(["automation.allTracks.toggleRead"]); + }, + ); + + it("has no undocumented inherited editor action shadowing an explicit global profile chord", () => { + const semanticallyEquivalent = new Set([ + "edit.copy->midi.copySelection", + "edit.cut->midi.cutSelection", + "edit.paste->midi.pasteSelection", + "edit.delete->midi.deleteSelection", + ]); + const collisions: string[] = []; + + for (const profile of KEYBOARD_SHORTCUT_PROFILES) { + for (const platform of TEST_PLATFORMS) { + for (const globalAction of getRegisteredActions()) { + const globalBindings = getProfileActionBindings(profile.id, globalAction.id, platform); + if (!globalBindings?.length) continue; + if (!getActionShortcutScopes(globalAction, profile.id).includes("global")) continue; + + for (const editorAction of getRegisteredActions()) { + if (getProfileActionBindings(profile.id, editorAction.id, platform) !== undefined) continue; + const editorScopes = getActionShortcutScopes(editorAction, profile.id) + .filter((scope) => scope !== "global"); + if (editorScopes.length === 0) continue; + if (semanticallyEquivalent.has(`${globalAction.id}->${editorAction.id}`)) continue; + + const inheritedBindings = [ + editorAction.shortcut, + ...(editorAction.shortcutAliases ?? []), + ].filter((binding): binding is string => Boolean(binding) && !binding!.includes("(")); + for (const globalBinding of globalBindings) { + const globalSignature = shortcutBindingEventSignature(globalBinding, platform); + if (!globalSignature) continue; + for (const inheritedBinding of inheritedBindings) { + if (shortcutBindingEventSignature(inheritedBinding, platform) !== globalSignature) continue; + collisions.push( + `${profile.id}/${platform}: ${globalAction.id} (${globalBinding}) ` + + `is shadowed by inherited ${editorAction.id} (${inheritedBinding}) ` + + `in ${editorScopes.join(",")}`, + ); + } + } + } + } + } + } + + expect(collisions).toEqual([]); + }); +}); diff --git a/frontend/src/__tests__/profiledRangeInput.test.tsx b/frontend/src/__tests__/profiledRangeInput.test.tsx new file mode 100644 index 0000000..4db62b4 --- /dev/null +++ b/frontend/src/__tests__/profiledRangeInput.test.tsx @@ -0,0 +1,155 @@ +import { afterEach, describe, expect, it } from "vitest"; +import { renderToStaticMarkup } from "react-dom/server"; +import { ProfiledRangeInput } from "../components/ui/ProfiledRangeInput"; +import { useDAWStore } from "../store/useDAWStore"; +import { getParameterWheelValue, resolveProfiledParameterWheel } from "../utils/parameterWheel"; +import profiledRangeSource from "../components/ui/ProfiledRangeInput/ProfiledRangeInput.tsx?raw"; +import builtInPluginSource from "../components/BuiltInPluginPanel.tsx?raw"; +import channelEqSource from "../components/ChannelStripEQModal.tsx?raw"; +import fxChainSource from "../components/FXChainPanel.tsx?raw"; +import pitchCorrectorSource from "../components/PitchCorrectorPanel.tsx?raw"; +import correctPitchSource from "../components/CorrectPitchModal.tsx?raw"; +import pianoRollSource from "../components/PianoRoll.tsx?raw"; +import controllerLaneSource from "../components/PianoRollControllerLaneSection.tsx?raw"; +import preferencesSource from "../components/PreferencesModal.tsx?raw"; + +const allComponentSources = import.meta.glob("../components/**/*.tsx", { + eager: true, + query: "?raw", + import: "default", +}) as Record; + +const originalMouseProfile = useDAWStore.getState().mouseBehaviorProfileId; + +afterEach(() => { + useDAWStore.setState({ mouseBehaviorProfileId: originalMouseProfile }); +}); + +describe("ProfiledRangeInput", () => { + it("stays visually bare and preserves caller styling and accessibility attributes", () => { + const html = renderToStaticMarkup( + undefined} + className="existing-range-style" + style={{ writingMode: "horizontal-tb" }} + aria-label="Formant shift" + title="Existing title" + />, + ); + + expect(html).toContain('type="range"'); + expect(html).toContain('class="existing-range-style"'); + expect(html).toContain('aria-label="Formant shift"'); + expect(html).toContain('title="Existing title"'); + expect(html).not.toContain("profiled-range-wrapper"); + }); + + it("resolves Cubase plain, fine, and unsupported modifier gestures exactly", () => { + useDAWStore.setState({ mouseBehaviorProfileId: "cubase" }); + + const plain = resolveProfiledParameterWheel({ deltaY: -100 }, "control"); + const fine = resolveProfiledParameterWheel({ deltaY: -100, shiftKey: true }, "control"); + const unsupported = resolveProfiledParameterWheel({ deltaY: -100, altKey: true }, "control"); + + expect(plain).toMatchObject({ + ruleId: "cubase.parameter-adjust", + operation: "adjust", + precision: "normal", + preventDefault: true, + stopPropagation: true, + }); + expect(fine).toMatchObject({ + ruleId: "cubase.parameter-fine-adjust", + operation: "adjust", + precision: "fine", + preventDefault: true, + stopPropagation: true, + }); + expect(unsupported).toMatchObject({ + ruleId: "cubase.parameter-unsupported-wheel", + operation: "suppress", + preventDefault: true, + stopPropagation: true, + }); + expect(getParameterWheelValue(plain, { + min: 0, + max: 1, + value: 0.5, + step: 0.1, + })).toBe(0.6); + expect(getParameterWheelValue(fine, { + min: 0, + max: 1, + value: 0.5, + step: 0.1, + })).toBe(0.51); + expect(getParameterWheelValue(unsupported, { + min: 0, + max: 1, + value: 0.5, + step: 0.1, + })).toBe(0.5); + }); + + it("owns resolved event cancellation and captures all edit completion paths", () => { + expect(profiledRangeSource).toContain("resolveProfiledParameterWheel(event.nativeEvent, wheelSubtarget)"); + expect(profiledRangeSource).toContain("if (gesture.preventDefault) event.preventDefault()"); + expect(profiledRangeSource).toContain("if (gesture.stopPropagation) event.stopPropagation()"); + expect(profiledRangeSource).toContain('if (gesture.operation !== "adjust") {'); + expect(profiledRangeSource).toContain("getParameterWheelValue({ ...gesture, amount: emittedAmount }"); + expect(profiledRangeSource).toContain("beginEditTransaction(wheelEditRef.current, onBeginEdit, onCommitEdit)"); + expect(profiledRangeSource).toContain("createWheelDeltaAccumulator({"); + expect(profiledRangeSource).toContain("wheelAccumulatorRef.current?.consume(targetKey, gesture.amount)"); + expect(profiledRangeSource).toContain("accumulator.dispose()"); + expect(profiledRangeSource).toContain("onPointerCancel={handlePointerCancel}"); + expect(profiledRangeSource).toContain("onLostPointerCapture={handleLostPointerCapture}"); + expect(profiledRangeSource).toContain("onBlur={handleBlur}"); + expect(profiledRangeSource).toContain("commitEditTransaction(keyEdit)"); + }); +}); + +describe("profiled native range coverage", () => { + const coveredSources = [ + ["BuiltInPluginPanel", builtInPluginSource, 1], + ["ChannelStripEQModal", channelEqSource, 3], + ["FXChainPanel", fxChainSource, 2], + ["PitchCorrectorPanel", pitchCorrectorSource, 2], + ["CorrectPitchModal", correctPitchSource, 2], + ["PianoRoll", pianoRollSource, 2], + ["PianoRollControllerLaneSection", controllerLaneSource, 1], + ["PreferencesModal", preferencesSource, 1], + ] as const; + + it.each(coveredSources)("routes every %s range through ProfiledRangeInput", (_name, source, expectedCount) => { + expect(source.match(/ { + const filesWithNativeRanges = Object.entries(allComponentSources) + .filter(([, source]) => /type\s*=\s*["']range["']/.test(source)) + .map(([path]) => path) + .sort(); + const allowedNativeRangeImplementations = new Set([ + "../components/NAMRackKnob.tsx", + "../components/NAMRackPanel.tsx", + "../components/ui/ProfiledRangeInput/ProfiledRangeInput.tsx", + "../components/ui/Slider/Slider.tsx", + ]); + + expect(filesWithNativeRanges.filter((path) => !allowedNativeRangeImplementations.has(path))).toEqual([]); + expect(filesWithNativeRanges).toContain("../components/ui/ProfiledRangeInput/ProfiledRangeInput.tsx"); + expect(filesWithNativeRanges).toContain("../components/ui/Slider/Slider.tsx"); + }); + + it("keeps plugin automation touch paired across pointer, wheel, key and cleanup commits", () => { + expect(fxChainSource).toContain("onBeginEdit={() => {"); + expect(fxChainSource).toContain("beginAutomationParamTouch("); + expect(fxChainSource).toContain("onCommitEdit={() => {"); + expect(fxChainSource).toContain("endAutomationParamTouch("); + }); +}); diff --git a/frontend/src/__tests__/profiledTimelineClipDrag.test.ts b/frontend/src/__tests__/profiledTimelineClipDrag.test.ts new file mode 100644 index 0000000..bd28130 --- /dev/null +++ b/frontend/src/__tests__/profiledTimelineClipDrag.test.ts @@ -0,0 +1,266 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { commandManager } from "../store/commands"; +import { + createDefaultTrack, + type AudioClip, + type MIDIClip, + useDAWStore, +} from "../store/useDAWStore"; +import { getMouseBehaviorProfile } from "../utils/mouseBehaviorProfiles"; +import { + resolveMouseModifierAction, + type MouseModifierPlatform, +} from "../utils/mouseModifierResolver"; +import { + isTimelineCopyDropNoop, + resolveProfiledTimelineClipDrag, +} from "../utils/profiledTimelineClipDrag"; + +const originalState = useDAWStore.getState(); + +function audioClip(id: string): AudioClip { + return { + id, + filePath: `C:/audio/${id}.wav`, + name: id, + startTime: 3.25, + duration: 2, + offset: 0, + color: "#224466", + volumeDB: 0, + fadeIn: 0, + fadeOut: 0, + }; +} + +function midiClip(id: string): MIDIClip { + return { + id, + name: id, + startTime: 5.5, + duration: 1, + sourceLength: 1, + loopLength: 1, + events: [ + { timestamp: 0, type: "noteOn", note: 60, velocity: 100 }, + { timestamp: 0.5, type: "noteOff", note: 60, velocity: 0 }, + ], + ccEvents: [], + color: "#664422", + }; +} + +function resolveClipDrag( + profileId: "studio_one" | "mixcraft", + platform: MouseModifierPlatform, + event: { altKey?: boolean; shiftKey?: boolean }, +) { + const profile = getMouseBehaviorProfile( + profileId, + platform === "macos" ? "macos" : "windows", + ); + return resolveMouseModifierAction(event, "clip_drag", { + platform, + profile: profile.modifiers, + }); +} + +beforeEach(() => { + commandManager.clear(); + useDAWStore.setState({ + tracks: [], + selectedTrackId: null, + selectedTrackIds: [], + selectedClipId: null, + selectedClipIds: [], + globalLocked: false, + lockSettings: { items: false, envelopes: false, timeSelection: false, markers: false }, + canUndo: false, + canRedo: false, + syncClipsWithBackend: vi.fn(async () => undefined), + syncMIDITrackToBackend: vi.fn(async () => undefined), + }); +}); + +afterEach(() => { + vi.restoreAllMocks(); + commandManager.clear(); + useDAWStore.setState(originalState); +}); + +describe("profiled Timeline clip drag", () => { + it.each(["windows", "macos"] as const)( + "starts Studio One normally on %s and evaluates Shift live after pointer-down", + (platform) => { + expect(resolveClipDrag("studio_one", platform, {})).toBe("move"); + // Shift is deliberately not a gesture starter in Studio One. + expect(resolveClipDrag("studio_one", platform, { shiftKey: true })).toBe("none"); + + const base = { + profileId: "studio_one", + copyOnDrag: false, + snapBypassRequested: false, + preserveTimeRequested: false, + axisLockRequested: false, + axisLock: null, + rawDeltaX: 37, + rawDeltaY: 14, + } as const; + + expect(resolveProfiledTimelineClipDrag({ + ...base, + liveModifiers: {}, + }).effectiveSnapBypass).toBe(false); + expect(resolveProfiledTimelineClipDrag({ + ...base, + liveModifiers: { shiftKey: true }, + }).effectiveSnapBypass).toBe(true); + expect(resolveProfiledTimelineClipDrag({ + ...base, + liveModifiers: { shiftKey: false }, + }).effectiveSnapBypass).toBe(false); + }, + ); + + it.each(["windows", "macos"] as const)( + "resolves Mixcraft Alt/Option+Shift as copy-with-preserved-time on %s", + (platform) => { + expect(resolveClipDrag("mixcraft", platform, { altKey: true })).toBe("copy"); + expect(resolveClipDrag("mixcraft", platform, { + altKey: true, + shiftKey: true, + })).toBe("copy_preserve_time"); + + const base = { + profileId: "mixcraft", + copyOnDrag: true, + snapBypassRequested: false, + preserveTimeRequested: true, + axisLockRequested: false, + axisLock: null, + rawDeltaX: 85, + rawDeltaY: 72, + } as const; + expect(resolveProfiledTimelineClipDrag({ + ...base, + liveModifiers: { altKey: true, shiftKey: true }, + })).toMatchObject({ + preserveTime: true, + effectiveSnapBypass: false, + axisLockRequested: true, + axisLock: "y", + deltaX: 0, + deltaY: 72, + }); + + // Modifier changes are honored during the same established copy drag. + expect(resolveProfiledTimelineClipDrag({ + ...base, + liveModifiers: { altKey: true, shiftKey: false }, + })).toMatchObject({ + preserveTime: false, + axisLockRequested: false, + axisLock: null, + deltaX: 85, + deltaY: 72, + }); + expect(resolveProfiledTimelineClipDrag({ + ...base, + preserveTimeRequested: false, + liveModifiers: { altKey: true, shiftKey: true }, + }).preserveTime).toBe(true); + }, + ); + + it("treats a preserved-time copy released on its source track as a true no-op", () => { + expect(isTimelineCopyDropNoop({ + originalStartTime: 3.25, + previewStartTime: 3.25, + pixelsPerSecond: 100, + anchorTrackIndex: 0, + targetTrackIndex: 0, + showGhostTrack: false, + })).toBe(true); + expect(isTimelineCopyDropNoop({ + originalStartTime: 3.25, + previewStartTime: 3.25, + pixelsPerSecond: 100, + anchorTrackIndex: 0, + targetTrackIndex: 1, + showGhostTrack: false, + })).toBe(false); + }); + + it.each(["audio", "midi"] as const)( + "commits one atomic preserved-time %s copy and restores it exactly on undo/redo", + (kind) => { + const source = createDefaultTrack( + "source", + "Source", + "#111111", + kind, + [], + ); + const target = createDefaultTrack( + "target", + "Target", + "#222222", + kind, + [], + ); + const clip = kind === "audio" ? audioClip("source-clip") : midiClip("source-clip"); + if (kind === "audio") source.clips = [clip as AudioClip]; + else source.midiClips = [clip as MIDIClip]; + useDAWStore.setState({ + tracks: [source, target], + selectedTrackId: source.id, + selectedTrackIds: [source.id], + selectedClipId: clip.id, + selectedClipIds: [clip.id], + }); + + const copiedId = useDAWStore.getState().duplicateClipToPosition( + clip.id, + target.id, + clip.startTime, + ); + expect(copiedId).toBeTypeOf("string"); + expect(commandManager.getUndoStack()).toHaveLength(1); + const copied = kind === "audio" + ? useDAWStore.getState().tracks[1].clips[0] + : useDAWStore.getState().tracks[1].midiClips[0]; + expect(copied).toMatchObject({ id: copiedId, startTime: clip.startTime }); + + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks[1].clips).toEqual([]); + expect(useDAWStore.getState().tracks[1].midiClips).toEqual([]); + expect(useDAWStore.getState().selectedClipIds).toEqual([clip.id]); + + useDAWStore.getState().redo(); + const redone = kind === "audio" + ? useDAWStore.getState().tracks[1].clips[0] + : useDAWStore.getState().tracks[1].midiClips[0]; + expect(redone).toMatchObject({ id: copiedId, startTime: clip.startTime }); + }, + ); + + it("cancels a copy without history when a central lock engages before commit", () => { + const source = createDefaultTrack("source", "Source", "#111111", "audio", []); + const target = createDefaultTrack("target", "Target", "#222222", "audio", []); + source.clips = [audioClip("source-clip")]; + useDAWStore.setState({ + tracks: [source, target], + selectedClipId: "source-clip", + selectedClipIds: ["source-clip"], + globalLocked: true, + }); + + expect(useDAWStore.getState().duplicateClipToPosition( + "source-clip", + "target", + 3.25, + )).toBeNull(); + expect(useDAWStore.getState().tracks[1].clips).toEqual([]); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); +}); diff --git a/frontend/src/__tests__/recordingWaveformAndRenderReporting.test.ts b/frontend/src/__tests__/recordingWaveformAndRenderReporting.test.ts new file mode 100644 index 0000000..471a5e5 --- /dev/null +++ b/frontend/src/__tests__/recordingWaveformAndRenderReporting.test.ts @@ -0,0 +1,55 @@ +import { describe, expect, it } from "vitest"; +import timelineSource from "../components/Timeline.tsx?raw"; +import renderModalSource from "../components/RenderModal.tsx?raw"; +import nativeBridgeSource from "../services/NativeBridge.ts?raw"; +import mainComponentSource from "../../../Source/MainComponent.cpp?raw"; + +function normalizeSourceText(source: string): string { + return source.replace(/\r\n?/g, "\n"); +} + +describe("live recording waveform regression guards", () => { + it("requests only the missing recording peak tail", () => { + const normalizedTimelineSource = normalizeSourceText(timelineSource); + const normalizedNativeBridgeSource = normalizeSourceText(nativeBridgeSource); + expect(normalizedTimelineSource).toContain( + "const startSample = previousPeaks.length * samplesPerPixel", + ); + expect(normalizedTimelineSource).toContain( + "Math.ceil(Math.max(0, recordedSamples - startSample) / samplesPerPixel)", + ); + expect(normalizedTimelineSource).toContain( + "samplesPerPixel,\n missingPixels,\n startSample", + ); + expect(normalizedTimelineSource).toContain("if (inFlight) return;"); + expect(normalizedNativeBridgeSource).toContain("startSample = 0"); + expect(normalizedNativeBridgeSource).toContain( + "numPixels,\n startSample", + ); + }); + + it("sizes and clips the preview from actual returned peaks", () => { + expect(timelineSource).toContain( + "const widthPixels = peaks.length * samplesPerPixel / deviceSR * pixelsPerSecond", + ); + expect(timelineSource).toContain("const firstVisiblePeak = Math.max("); + expect(timelineSource).toContain("const lastVisiblePeak = Math.min("); + }); +}); + +describe("render result reporting regression guards", () => { + it("does not impose the generic 15-second bridge timeout on offline renders", () => { + expect(mainComponentSource).toContain( + "const NO_TIMEOUT_FUNCTIONS = ['scanForPlugins', 'renderProject', 'renderProjectWithDither']", + ); + }); + + it("checks native boolean results and distinguishes later-stage failures", () => { + expect(renderModalSource).toContain("if (!success)"); + expect(renderModalSource).toContain("Audio engine rejected the ${params.source} render"); + expect(renderModalSource).toContain( + "Primary render completed, but the secondary ${secondaryOutputFormat.toUpperCase()} output failed", + ); + expect(renderModalSource).toContain("primary file${renderedFiles.length === 1 ? \" was\" : \"s were\"} rendered successfully"); + }); +}); diff --git a/frontend/src/__tests__/remainingVendorActions.test.ts b/frontend/src/__tests__/remainingVendorActions.test.ts new file mode 100644 index 0000000..eb3eea0 --- /dev/null +++ b/frontend/src/__tests__/remainingVendorActions.test.ts @@ -0,0 +1,409 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { nativeBridge } from "../services/NativeBridge"; +import { getRegisteredAction } from "../store/actionRegistry"; +import { commandManager } from "../store/commands"; +import { createDefaultTrack, useDAWStore } from "../store/useDAWStore"; +import { getProfileActionBindings } from "../utils/shortcutProfiles"; +import { buildTrackFolderGroupPlan } from "../utils/trackFolderGrouping"; +import { dispatchGlobalShortcut } from "../utils/globalShortcutDispatcher"; +import { + activateShortcutContext, + registerShortcutSurface, + resetShortcutContextForTests, +} from "../utils/shortcutContext"; +import { + collectClipIdsInsideTimeSelection, + collectTimelineBoundaryTimes, + resolveAdjacentGridLineTime, + resolveAdjacentTimelineBoundary, +} from "../utils/vendorNavigation"; + +const originalState = useDAWStore.getState(); + +function clip(id: string, startTime: number, duration: number) { + return { id, startTime, duration }; +} + +beforeEach(() => { + commandManager.clear(); + resetShortcutContextForTests(); + useDAWStore.setState({ + tracks: [], + markers: [], + timeSelection: null, + selectedClipId: null, + selectedClipIds: [], + selectedTrackId: null, + selectedTrackIds: [], + lastSelectedTrackId: null, + transport: { + ...originalState.transport, + tempo: 120, + currentTime: 0, + isPlaying: false, + isPaused: false, + isRecording: false, + }, + timeSignature: { numerator: 4, denominator: 4 }, + gridSize: "1/4", + quantizePresetId: "factory-1/16", + pixelsPerSecond: 100, + canUndo: false, + canRedo: false, + }); +}); + +afterEach(() => { + vi.restoreAllMocks(); + commandManager.clear(); + resetShortcutContextForTests(); + useDAWStore.setState(originalState); +}); + +describe("vendor navigation primitives", () => { + it("moves strictly between grid lines, handles fractional positions, and clamps at zero", () => { + expect(resolveAdjacentGridLineTime(1, 0.5, "next")).toBe(1.5); + expect(resolveAdjacentGridLineTime(1, 0.5, "previous")).toBe(0.5); + expect(resolveAdjacentGridLineTime(1.1, 0.5, "next")).toBe(1.5); + expect(resolveAdjacentGridLineTime(1.1, 0.5, "previous")).toBe(1); + expect(resolveAdjacentGridLineTime(0, 0.5, "previous")).toBeNull(); + expect(resolveAdjacentGridLineTime(Number.NaN, 0.5, "next")).toBeNull(); + expect(resolveAdjacentGridLineTime(1, 0, "next")).toBeNull(); + }); + + it("collects the exact Audition boundary union and collapses ties", () => { + const boundaries = collectTimelineBoundaryTimes({ + tracks: [{ + clips: [clip("audio", 1, 2)], + midiClips: [clip("midi", 3, 1), clip("invalid", Number.NaN, 1)], + }], + markers: [{ time: -1 }, { time: 1 }, { time: 6 }], + timeSelection: { start: 3, end: 5 }, + }); + expect(boundaries).toEqual([0, 1, 3, 4, 5, 6]); + expect(resolveAdjacentTimelineBoundary(3, boundaries, "previous")).toBe(1); + expect(resolveAdjacentTimelineBoundary(3, boundaries, "next")).toBe(4); + expect(resolveAdjacentTimelineBoundary(0, boundaries, "previous")).toBeNull(); + expect(resolveAdjacentTimelineBoundary(6, boundaries, "next")).toBeNull(); + }); + + it("selects only audio and MIDI clips fully contained by a normalized time selection", () => { + const tracks = [{ + clips: [clip("exact", 1, 2), clip("overlap-left", 0.5, 1), clip("overlap-right", 2.5, 1)], + midiClips: [clip("midi-inside", 1.5, 0.5)], + }]; + expect(collectClipIdsInsideTimeSelection(tracks, { start: 3, end: 1 })).toEqual([ + "exact", + "midi-inside", + ]); + expect(collectClipIdsInsideTimeSelection(tracks, null)).toEqual([]); + }); +}); + +describe("track folder grouping plan", () => { + it("gathers selected subtrees at the first selected position while preserving order", () => { + expect(buildTrackFolderGroupPlan([ + { id: "before" }, + { id: "first" }, + { id: "first-child", parentFolderId: "first" }, + { id: "between" }, + { id: "second" }, + { id: "after" }, + ], ["second", "first"], "group")).toEqual({ + orderedTrackIds: ["before", "group", "first", "first-child", "second", "between", "after"], + selectedRootIds: ["first", "second"], + parentFolderId: undefined, + }); + }); + + it("inherits a common parent and rejects cross-level, ancestor, cyclic, and empty selections", () => { + const nested = [ + { id: "parent" }, + { id: "one", parentFolderId: "parent" }, + { id: "two", parentFolderId: "parent" }, + { id: "root" }, + ]; + expect(buildTrackFolderGroupPlan(nested, ["one", "two"], "group")?.parentFolderId).toBe("parent"); + expect(buildTrackFolderGroupPlan(nested, ["one", "root"], "group")).toBeNull(); + expect(buildTrackFolderGroupPlan(nested, ["parent", "one"], "group")).toBeNull(); + expect(buildTrackFolderGroupPlan([{ id: "a", parentFolderId: "b" }, { id: "b", parentFolderId: "a" }], ["a"], "group")).toBeNull(); + expect(buildTrackFolderGroupPlan(nested, [], "group")).toBeNull(); + expect(buildTrackFolderGroupPlan(nested, ["missing"], "group")).toBeNull(); + }); +}); + +describe("remaining exact vendor actions", () => { + it("registers exact timeline-scoped commands and profile chords on both layouts", () => { + for (const actionId of [ + "navigate.previousGridLine", + "navigate.nextGridLine", + "navigate.previousBoundary", + "navigate.nextBoundary", + "edit.selectClipsInTimeSelection", + ]) { + expect(getRegisteredAction(actionId)?.shortcutScope, actionId).toBe("timeline"); + } + + for (const platform of ["macos", "windows"] as const) { + expect(getProfileActionBindings("ardour", "navigate.previousGridLine", platform)).toEqual(["Left"]); + expect(getProfileActionBindings("ardour", "navigate.nextGridLine", platform)).toEqual(["Right"]); + expect(getProfileActionBindings("ardour", "edit.selectClipsInTimeSelection", platform)).toEqual(["U"]); + expect(getProfileActionBindings("adobe_audition", "navigate.previousBoundary", platform)).toEqual(["Ctrl+Left"]); + expect(getProfileActionBindings("adobe_audition", "navigate.nextBoundary", platform)).toEqual(["Ctrl+Right"]); + expect(getProfileActionBindings("studio_one", "edit.muteSelectedClips", platform)).toEqual(["Shift+M"]); + expect(getProfileActionBindings("studio_one", "edit.unmuteSelectedClips", platform)).toEqual(["Shift+U"]); + expect(getProfileActionBindings("studio_one", "insert.markerNamed", platform)).toEqual([]); + expect(getProfileActionBindings("ableton_live", "track.groupSelectedIntoFolder", platform)).toEqual(["Ctrl+G"]); + expect(getProfileActionBindings("bitwig_studio", "track.groupSelectedIntoFolder", platform)).toEqual(["Ctrl+G"]); + } + }); + + it("seeks one active musical grid division and no-ops before zero", () => { + const seekTo = vi.fn(async (time: number) => { + useDAWStore.setState((state) => ({ transport: { ...state.transport, currentTime: time } })); + }); + useDAWStore.setState((state) => ({ + seekTo, + transport: { ...state.transport, currentTime: 1 }, + })); + + const previous = getRegisteredAction("navigate.previousGridLine")!; + const next = getRegisteredAction("navigate.nextGridLine")!; + expect(previous.canHandleShortcut?.()).toBe(true); + previous.execute(); + expect(seekTo).toHaveBeenLastCalledWith(0.5); + next.execute(); + expect(seekTo).toHaveBeenLastCalledWith(1); + + useDAWStore.setState((state) => ({ transport: { ...state.transport, currentTime: 0 } })); + seekTo.mockClear(); + expect(previous.canHandleShortcut?.()).toBe(false); + previous.execute(); + expect(seekTo).not.toHaveBeenCalled(); + }); + + it("navigates tied marker/clip/selection boundaries and no-ops without a target", () => { + const track = createDefaultTrack("track", "Track", "#123456", "audio", []); + const seekTo = vi.fn(async (time: number) => { + useDAWStore.setState((state) => ({ transport: { ...state.transport, currentTime: time } })); + }); + useDAWStore.setState((state) => ({ + seekTo, + tracks: [{ + ...track, + clips: [{ + id: "clip", + filePath: "C:/audio.wav", + name: "Clip", + startTime: 1, + duration: 2, + offset: 0, + color: "#123456", + volumeDB: 0, + fadeIn: 0, + fadeOut: 0, + }], + }], + markers: [{ id: "marker", time: 1, name: "Marker", color: "#fff" }], + timeSelection: { start: 3, end: 5 }, + transport: { ...state.transport, currentTime: 3 }, + })); + + const previous = getRegisteredAction("navigate.previousBoundary")!; + const next = getRegisteredAction("navigate.nextBoundary")!; + previous.execute(); + expect(seekTo).toHaveBeenLastCalledWith(1); + next.execute(); + expect(seekTo).toHaveBeenLastCalledWith(3); + + useDAWStore.setState((state) => ({ + tracks: [], + markers: [], + timeSelection: null, + transport: { ...state.transport, currentTime: 8 }, + })); + seekTo.mockClear(); + expect(next.canHandleShortcut?.()).toBe(false); + next.execute(); + expect(seekTo).not.toHaveBeenCalled(); + }); + + it("selects contained clips without creating project history and clears track selection", () => { + const audioTrack = createDefaultTrack("audio-track", "Audio", "#123456", "audio", []); + const midiTrack = createDefaultTrack("midi-track", "MIDI", "#654321", "midi", []); + useDAWStore.setState({ + tracks: [ + { + ...audioTrack, + clips: [ + { id: "inside", filePath: "C:/inside.wav", name: "Inside", startTime: 1, duration: 1, offset: 0, color: "#123456", volumeDB: 0, fadeIn: 0, fadeOut: 0 }, + { id: "overlap", filePath: "C:/overlap.wav", name: "Overlap", startTime: 0.5, duration: 1, offset: 0, color: "#123456", volumeDB: 0, fadeIn: 0, fadeOut: 0 }, + ], + }, + { + ...midiTrack, + midiClips: [{ id: "midi", name: "MIDI", startTime: 2, duration: 1, sourceLength: 1, loopLength: 1, events: [], ccEvents: [], color: "#654321" }], + }, + ], + timeSelection: { start: 1, end: 3 }, + selectedTrackId: "audio-track", + selectedTrackIds: ["audio-track"], + lastSelectedTrackId: "audio-track", + }); + + const action = getRegisteredAction("edit.selectClipsInTimeSelection")!; + expect(action.canHandleShortcut?.()).toBe(true); + action.execute(); + expect(useDAWStore.getState()).toMatchObject({ + selectedClipIds: ["inside", "midi"], + selectedClipId: "midi", + selectedTrackIds: [], + selectedTrackId: null, + lastSelectedTrackId: null, + canUndo: false, + }); + }); + + it("dispatches Ardour grid navigation and Audition boundary navigation in Timeline context", () => { + const unregister = registerShortcutSurface({ kind: "timeline" }, () => "unmatched"); + activateShortcutContext({ kind: "timeline" }); + const seekTo = vi.fn(async (time: number) => { + useDAWStore.setState((state) => ({ transport: { ...state.transport, currentTime: time } })); + }); + useDAWStore.setState((state) => ({ + keyboardShortcutProfileId: "ardour", + customShortcuts: {}, + seekTo, + transport: { ...state.transport, currentTime: 1 }, + })); + + expect(dispatchGlobalShortcut({ key: "ArrowLeft", code: "ArrowLeft", source: "browser" }, "windows")).toBe(true); + expect(seekTo).toHaveBeenLastCalledWith(0.5); + expect(dispatchGlobalShortcut({ key: "ArrowRight", code: "ArrowRight", source: "browser" }, "windows")).toBe(true); + expect(seekTo).toHaveBeenLastCalledWith(1); + + const track = createDefaultTrack("track", "Track", "#123456", "audio", []); + useDAWStore.setState((state) => ({ + keyboardShortcutProfileId: "adobe_audition", + tracks: [{ ...track, clips: [{ id: "clip", filePath: "C:/clip.wav", name: "Clip", startTime: 1, duration: 2, offset: 0, color: "#123456", volumeDB: 0, fadeIn: 0, fadeOut: 0 }] }], + markers: [{ id: "marker", time: 1, name: "Marker", color: "#fff" }], + timeSelection: { start: 3, end: 5 }, + transport: { ...state.transport, currentTime: 3 }, + })); + expect(dispatchGlobalShortcut({ key: "ArrowLeft", code: "ArrowLeft", metaKey: true, source: "browser" }, "macos")).toBe(true); + expect(seekTo).toHaveBeenLastCalledWith(1); + expect(dispatchGlobalShortcut({ key: "ArrowRight", code: "ArrowRight", metaKey: true, source: "browser" }, "macos")).toBe(true); + expect(seekTo).toHaveBeenLastCalledWith(3); + expect(dispatchGlobalShortcut({ key: "ArrowRight", code: "ArrowRight", ctrlKey: true, source: "browser" }, "macos")).toBe(false); + unregister(); + }); + + it("dispatches Studio One directional mute/unmute without toggling already-matching clips", () => { + const unregister = registerShortcutSurface({ kind: "timeline" }, () => "unmatched"); + activateShortcutContext({ kind: "timeline" }); + const track = createDefaultTrack("track", "Track", "#123456", "audio", []); + useDAWStore.setState({ + keyboardShortcutProfileId: "studio_one", + customShortcuts: {}, + tracks: [{ + ...track, + clips: [{ id: "clip", filePath: "C:/clip.wav", name: "Clip", startTime: 0, duration: 1, offset: 0, color: "#123456", volumeDB: 0, fadeIn: 0, fadeOut: 0, muted: false }], + }], + selectedClipId: "clip", + selectedClipIds: ["clip"], + }); + + expect(dispatchGlobalShortcut({ key: "M", code: "KeyM", shiftKey: true, source: "browser" }, "windows")).toBe(true); + expect(useDAWStore.getState().tracks[0].clips[0].muted).toBe(true); + expect(dispatchGlobalShortcut({ key: "M", code: "KeyM", shiftKey: true, source: "browser" }, "windows")).toBe(false); + expect(dispatchGlobalShortcut({ key: "U", code: "KeyU", shiftKey: true, source: "browser" }, "windows")).toBe(true); + expect(useDAWStore.getState().tracks[0].clips[0].muted).toBe(false); + unregister(); + }); + + it("groups same-level selected track subtrees atomically with stable native undo/redo", async () => { + const addTrack = vi.spyOn(nativeBridge, "addTrack").mockImplementation(async (id) => id || "generated"); + const removeTrack = vi.spyOn(nativeBridge, "removeTrack").mockResolvedValue(true); + const reorderTrack = vi.spyOn(nativeBridge, "reorderTrack").mockResolvedValue(true); + const parent = { ...createDefaultTrack("parent", "Parent", "#111111", "audio", []), isFolder: true }; + const one = { ...createDefaultTrack("one", "One", "#222222", "audio", []), parentFolderId: "parent" }; + const child = { ...createDefaultTrack("child", "Child", "#333333", "audio", []), parentFolderId: "one" }; + const between = { ...createDefaultTrack("between", "Between", "#444444", "audio", []), parentFolderId: "parent" }; + const two = { ...createDefaultTrack("two", "Two", "#555555", "audio", []), parentFolderId: "parent" }; + const after = createDefaultTrack("after", "After", "#666666", "audio", []); + useDAWStore.setState({ + tracks: [parent, one, child, between, two, after], + selectedTrackId: "two", + selectedTrackIds: ["two", "one"], + lastSelectedTrackId: "two", + }); + + expect(useDAWStore.getState().canGroupSelectedTracksIntoFolder()).toBe(true); + expect(useDAWStore.getState().groupSelectedTracksIntoFolder()).toBe(true); + const grouped = useDAWStore.getState().tracks; + const folder = grouped.find((track) => !["parent", "one", "child", "between", "two", "after"].includes(track.id))!; + expect(folder).toMatchObject({ name: "Group 1", isFolder: true, parentFolderId: "parent" }); + expect(grouped.map((track) => track.id)).toEqual(["parent", folder.id, "one", "child", "two", "between", "after"]); + expect(grouped.find((track) => track.id === "one")?.parentFolderId).toBe(folder.id); + expect(grouped.find((track) => track.id === "two")?.parentFolderId).toBe(folder.id); + expect(grouped.find((track) => track.id === "child")?.parentFolderId).toBe("one"); + expect(useDAWStore.getState().selectedTrackIds).toEqual(["two", "one"]); + + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks.map((track) => track.id)).toEqual(["parent", "one", "child", "between", "two", "after"]); + expect(useDAWStore.getState().tracks.find((track) => track.id === "one")?.parentFolderId).toBe("parent"); + expect(useDAWStore.getState().canUndo).toBe(false); + expect(useDAWStore.getState().canRedo).toBe(true); + + useDAWStore.getState().redo(); + expect(useDAWStore.getState().tracks.map((track) => track.id)).toEqual(["parent", folder.id, "one", "child", "two", "between", "after"]); + expect(useDAWStore.getState().tracks.find((track) => track.id === "one")?.parentFolderId).toBe(folder.id); + await vi.waitFor(() => { + expect(addTrack.mock.calls.filter(([id]) => id === folder.id)).toHaveLength(2); + expect(removeTrack).toHaveBeenCalledExactlyOnceWith(folder.id); + expect(reorderTrack).toHaveBeenCalledWith(folder.id, 1); + }); + }); + + it("rejects unsafe hierarchy grouping without history or native mutation", () => { + const addTrack = vi.spyOn(nativeBridge, "addTrack").mockImplementation(async (id) => id || "generated"); + const parent = { ...createDefaultTrack("parent", "Parent", "#111111", "audio", []), isFolder: true }; + const child = { ...createDefaultTrack("child", "Child", "#222222", "audio", []), parentFolderId: "parent" }; + const root = createDefaultTrack("root", "Root", "#333333", "audio", []); + useDAWStore.setState({ + tracks: [parent, child, root], + selectedTrackId: "child", + selectedTrackIds: ["child", "root"], + lastSelectedTrackId: "child", + }); + expect(useDAWStore.getState().canGroupSelectedTracksIntoFolder()).toBe(false); + expect(useDAWStore.getState().groupSelectedTracksIntoFolder()).toBe(false); + expect(useDAWStore.getState().tracks.map((track) => track.id)).toEqual(["parent", "child", "root"]); + expect(useDAWStore.getState().canUndo).toBe(false); + expect(addTrack).not.toHaveBeenCalled(); + }); + + it.each([ + { profileId: "ableton_live" as const, platform: "windows" as const, event: { key: "g", code: "KeyG", ctrlKey: true } }, + { profileId: "bitwig_studio" as const, platform: "macos" as const, event: { key: "g", code: "KeyG", metaKey: true } }, + ])("dispatches $profileId Group Tracks through Timeline on $platform", ({ profileId, platform, event }) => { + const unregister = registerShortcutSurface({ kind: "timeline" }, () => "unmatched"); + activateShortcutContext({ kind: "timeline" }); + const first = createDefaultTrack("first", "First", "#111111", "audio", []); + const second = createDefaultTrack("second", "Second", "#222222", "audio", []); + useDAWStore.setState({ + keyboardShortcutProfileId: profileId, + customShortcuts: {}, + tracks: [first, second], + selectedTrackId: "second", + selectedTrackIds: ["first", "second"], + lastSelectedTrackId: "second", + }); + + expect(dispatchGlobalShortcut({ ...event, source: "browser" }, platform)).toBe(true); + expect(useDAWStore.getState().tracks).toHaveLength(3); + expect(useDAWStore.getState().tracks[0]).toMatchObject({ isFolder: true, name: "Group 1" }); + expect(useDAWStore.getState().tracks.slice(1).every((track) => track.parentFolderId === useDAWStore.getState().tracks[0].id)).toBe(true); + unregister(); + }); +}); diff --git a/frontend/src/__tests__/renderInPlaceAlignment.test.ts b/frontend/src/__tests__/renderInPlaceAlignment.test.ts index 7824a51..8a8ca24 100644 --- a/frontend/src/__tests__/renderInPlaceAlignment.test.ts +++ b/frontend/src/__tests__/renderInPlaceAlignment.test.ts @@ -65,7 +65,7 @@ describe("render in place alignment", () => { vi.spyOn(nativeBridge, "addTrack").mockResolvedValue("rendered-track"); vi.spyOn(nativeBridge, "reorderTrack").mockResolvedValue(true); vi.spyOn(nativeBridge, "addPlaybackClip").mockResolvedValue(true); - vi.spyOn(nativeBridge, "removePlaybackClip").mockResolvedValue(true); + vi.spyOn(nativeBridge, "removePlaybackClipById").mockResolvedValue(true); vi.spyOn(nativeBridge, "removeTrack").mockResolvedValue(true); vi.spyOn(nativeBridge, "refreshWaveformPeaks").mockResolvedValue(true); }); diff --git a/frontend/src/__tests__/reverseClipActionSemantics.test.ts b/frontend/src/__tests__/reverseClipActionSemantics.test.ts new file mode 100644 index 0000000..f71d733 --- /dev/null +++ b/frontend/src/__tests__/reverseClipActionSemantics.test.ts @@ -0,0 +1,204 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { nativeBridge } from "../services/NativeBridge"; +import { + executeAvailableRegisteredAction, + getRegisteredAction, +} from "../store/actionRegistry"; +import { commandManager } from "../store/commands"; +import { + createDefaultTrack, + type AudioClip, + type MIDIClip, + useDAWStore, +} from "../store/useDAWStore"; + +const originalState = useDAWStore.getState(); + +function audioClip(overrides: Partial = {}): AudioClip { + return { + id: "audio", + filePath: "C:/source.wav", + name: "Audio", + startTime: 0, + duration: 4, + offset: 0, + color: "#38bdf8", + volumeDB: 0, + fadeIn: 0, + fadeOut: 0, + ...overrides, + }; +} + +function midiClip(): MIDIClip { + return { + id: "midi", + name: "MIDI", + startTime: 0, + duration: 4, + offset: 0, + sourceStart: 0, + sourceLength: 4, + loopEnabled: false, + loopOffset: 0, + loopLength: 4, + events: [], + ccEvents: [], + color: "#f72585", + }; +} + +beforeEach(() => { + commandManager.clear(); + const audio = createDefaultTrack("audio-track", "Audio", "#38bdf8", "audio"); + const midi = createDefaultTrack("midi-track", "MIDI", "#f72585", "midi"); + audio.clips = [audioClip()]; + midi.midiClips = [midiClip()]; + useDAWStore.setState({ + tracks: [audio, midi], + selectedClipId: "audio", + selectedClipIds: ["audio"], + globalLocked: false, + lockSettings: { ...originalState.lockSettings, items: false }, + syncClipsWithBackend: vi.fn().mockResolvedValue(undefined), + canUndo: false, + canRedo: false, + }); +}); + +afterEach(() => { + vi.restoreAllMocks(); + commandManager.clear(); + useDAWStore.setState(originalState); +}); + +describe("reverse selected audio clip", () => { + it("syncs execute/undo/redo to playback as one stable transaction", async () => { + vi.spyOn(nativeBridge, "reverseAudioFile").mockResolvedValue("C:/source_reversed.wav"); + const sync = useDAWStore.getState().syncClipsWithBackend as ReturnType; + const action = getRegisteredAction("edit.reverseClip")!; + expect(action.canHandleShortcut?.()).toBe(true); + action.execute(); + + await vi.waitFor(() => { + expect(useDAWStore.getState().tracks[0].clips[0]).toMatchObject({ + filePath: "C:/source_reversed.wav", + reversed: true, + }); + }); + expect(sync).toHaveBeenCalledTimes(1); + expect(commandManager.getUndoStack()).toHaveLength(1); + + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks[0].clips[0]).toMatchObject({ + filePath: "C:/source.wav", + reversed: false, + }); + expect(sync).toHaveBeenCalledTimes(2); + + useDAWStore.getState().redo(); + expect(useDAWStore.getState().tracks[0].clips[0]).toMatchObject({ + filePath: "C:/source_reversed.wav", + reversed: true, + }); + expect(sync).toHaveBeenCalledTimes(3); + expect(commandManager.getUndoStack()).toHaveLength(1); + }); + + it("claims the focused chord but does not execute for MIDI, mixed, locked, or missing-file targets", () => { + const reverse = vi.spyOn(nativeBridge, "reverseAudioFile"); + const action = getRegisteredAction("edit.reverseClip")!; + const cases = [ + { selectedClipId: "midi", selectedClipIds: ["midi"] }, + { selectedClipId: "audio", selectedClipIds: ["audio", "midi"] }, + ]; + for (const selection of cases) { + useDAWStore.setState(selection); + expect(action.canHandleShortcut?.()).toBe(false); + expect(executeAvailableRegisteredAction("edit.reverseClip")).toBe("claimed_noop"); + } + + useDAWStore.setState((state) => ({ + selectedClipId: "audio", + selectedClipIds: ["audio"], + tracks: state.tracks.map((track) => track.id === "audio-track" + ? { ...track, clips: track.clips.map((clip) => ({ ...clip, locked: true })) } + : track), + })); + expect(action.canHandleShortcut?.()).toBe(false); + expect(executeAvailableRegisteredAction("edit.reverseClip")).toBe("claimed_noop"); + + useDAWStore.setState((state) => ({ + tracks: state.tracks.map((track) => track.id === "audio-track" + ? { ...track, clips: track.clips.map((clip) => ({ ...clip, locked: false, filePath: "" })) } + : track), + })); + expect(action.canHandleShortcut?.()).toBe(false); + expect(executeAvailableRegisteredAction("edit.reverseClip")).toBe("claimed_noop"); + expect(reverse).not.toHaveBeenCalled(); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it("rejects global/item locks and stale async results without history or backend sync", async () => { + let resolveReverse!: (path: string) => void; + vi.spyOn(nativeBridge, "reverseAudioFile").mockImplementation(() => new Promise((resolve) => { + resolveReverse = resolve; + })); + const sync = useDAWStore.getState().syncClipsWithBackend as ReturnType; + + const pending = useDAWStore.getState().reverseClip("audio"); + useDAWStore.setState((state) => ({ + tracks: state.tracks.map((track) => track.id === "audio-track" + ? { ...track, clips: track.clips.map((clip) => ({ ...clip, filePath: "C:/new-source.wav" })) } + : track), + })); + resolveReverse("C:/stale-reversed.wav"); + await pending; + expect(useDAWStore.getState().tracks[0].clips[0].filePath).toBe("C:/new-source.wav"); + expect(sync).not.toHaveBeenCalled(); + expect(commandManager.getUndoStack()).toHaveLength(0); + + useDAWStore.setState((state) => ({ globalLocked: true, lockSettings: { ...state.lockSettings, items: false } })); + await useDAWStore.getState().reverseClip("audio"); + useDAWStore.setState((state) => ({ globalLocked: false, lockSettings: { ...state.lockSettings, items: true } })); + await useDAWStore.getState().reverseClip("audio"); + expect(nativeBridge.reverseAudioFile).toHaveBeenCalledTimes(1); + }); + + it("rejects frozen tracks both before native work and while a reverse request is pending", async () => { + const action = getRegisteredAction("edit.reverseClip")!; + const reverse = vi.spyOn(nativeBridge, "reverseAudioFile"); + const sync = useDAWStore.getState().syncClipsWithBackend as ReturnType; + useDAWStore.setState((state) => ({ + tracks: state.tracks.map((track) => track.id === "audio-track" + ? { ...track, frozen: true } + : track), + })); + + expect(action.canHandleShortcut?.()).toBe(false); + await useDAWStore.getState().reverseClip("audio"); + expect(reverse).not.toHaveBeenCalled(); + + let resolveReverse!: (path: string) => void; + reverse.mockImplementation(() => new Promise((resolve) => { + resolveReverse = resolve; + })); + useDAWStore.setState((state) => ({ + tracks: state.tracks.map((track) => track.id === "audio-track" + ? { ...track, frozen: false } + : track), + })); + const pending = useDAWStore.getState().reverseClip("audio"); + useDAWStore.setState((state) => ({ + tracks: state.tracks.map((track) => track.id === "audio-track" + ? { ...track, frozen: true } + : track), + })); + resolveReverse("C:/frozen-result.wav"); + await pending; + + expect(useDAWStore.getState().tracks[0].clips[0].filePath).toBe("C:/source.wav"); + expect(sync).not.toHaveBeenCalled(); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); +}); diff --git a/frontend/src/__tests__/shortcutAssignmentConflicts.test.ts b/frontend/src/__tests__/shortcutAssignmentConflicts.test.ts new file mode 100644 index 0000000..136d3f4 --- /dev/null +++ b/frontend/src/__tests__/shortcutAssignmentConflicts.test.ts @@ -0,0 +1,94 @@ +import { afterEach, describe, expect, it } from "vitest"; +import { useDAWStore } from "../store/useDAWStore"; +import { findShortcutAssignmentConflicts } from "../utils/shortcutAssignmentConflicts"; + +describe("shortcut assignment conflicts", () => { + const original = { + keyboardShortcutProfileId: useDAWStore.getState().keyboardShortcutProfileId, + customShortcuts: useDAWStore.getState().customShortcuts, + }; + + afterEach(() => useDAWStore.setState(original)); + + it("finds collisions in the same active profile and scope", () => { + useDAWStore.setState({ keyboardShortcutProfileId: "openstudio", customShortcuts: {} }); + const conflicts = findShortcutAssignmentConflicts("tools.selectTool", "B"); + expect(conflicts.some((conflict) => conflict.actionId === "tools.splitTool")).toBe(true); + }); + + it("allows the same key in independent editor scopes", () => { + const conflicts = findShortcutAssignmentConflicts("pitch.tool.select", "V"); + expect(conflicts.some((conflict) => conflict.actionId === "tools.selectTool")).toBe(false); + }); + + it("includes active-profile scope additions in conflict reporting", () => { + useDAWStore.setState({ keyboardShortcutProfileId: "garageband", customShortcuts: {} }); + expect(findShortcutAssignmentConflicts("tools.selectTool", "M")) + .toEqual(expect.arrayContaining([ + expect.objectContaining({ + actionId: "track.toggleSelectedMute", + sharedScopes: expect.arrayContaining(["timeline"]), + }), + ])); + + useDAWStore.setState({ keyboardShortcutProfileId: "openstudio", customShortcuts: {} }); + expect(findShortcutAssignmentConflicts("tools.selectTool", "M") + .some((conflict) => conflict.actionId === "track.toggleSelectedMute")).toBe(false); + }); + + it("recognizes a label binding colliding with its common physical key", () => { + useDAWStore.setState({ customShortcuts: { "tools.splitTool": "Code:KeyB" } }); + expect(findShortcutAssignmentConflicts("tools.selectTool", "B")) + .toEqual(expect.arrayContaining([expect.objectContaining({ actionId: "tools.splitTool" })])); + }); + + it("does not flag mutually-exclusive Piano Roll tool and step-input conditions", () => { + expect(findShortcutAssignmentConflicts("midi.tool.draw", "C") + .some((conflict) => conflict.actionId === "midi.stepInputC")).toBe(false); + }); + + it("checks explicit platform overrides using that platform's physical modifier map", () => { + useDAWStore.setState({ + keyboardShortcutProfileId: "openstudio", + customShortcuts: { + "tools.splitTool": { + macos: ["Command+Code:KeyB"], + windows: ["Control+Code:KeyQ"], + }, + }, + }); + + expect(findShortcutAssignmentConflicts( + "tools.selectTool", + "Command+Code:KeyB", + "macos", + )).toEqual(expect.arrayContaining([ + expect.objectContaining({ actionId: "tools.splitTool", platforms: ["macos"] }), + ])); + expect(findShortcutAssignmentConflicts( + "tools.selectTool", + "Command+Code:KeyB", + "windows", + )).toEqual([]); + }); + + it("checks a common binding on every platform and deduplicates action conflicts", () => { + useDAWStore.setState({ keyboardShortcutProfileId: "openstudio", customShortcuts: {} }); + const conflicts = findShortcutAssignmentConflicts("tools.selectTool", "Code:KeyB", "common"); + const splitConflicts = conflicts.filter((conflict) => conflict.actionId === "tools.splitTool"); + expect(splitConflicts).toHaveLength(1); + expect(splitConflicts[0].platforms).toEqual(["macos", "windows", "linux", "other"]); + }); + + it("does not validate a common key where the target already has a platform override", () => { + useDAWStore.setState({ + keyboardShortcutProfileId: "openstudio", + customShortcuts: { + "tools.selectTool": { windows: ["F8"] }, + }, + }); + const conflict = findShortcutAssignmentConflicts("tools.selectTool", "B", "common") + .find((candidate) => candidate.actionId === "tools.splitTool"); + expect(conflict?.platforms).toEqual(["macos", "linux"]); + }); +}); diff --git a/frontend/src/__tests__/shortcutContextRouting.test.ts b/frontend/src/__tests__/shortcutContextRouting.test.ts new file mode 100644 index 0000000..cdb951e --- /dev/null +++ b/frontend/src/__tests__/shortcutContextRouting.test.ts @@ -0,0 +1,516 @@ +import { afterEach, describe, expect, it, vi } from "vitest"; +import { createDefaultTrack, useDAWStore } from "../store/useDAWStore"; +import { + dispatchGlobalShortcut, + matchesActionShortcut, +} from "../utils/globalShortcutDispatcher"; +import { + activateShortcutContext, + dispatchActiveShortcut, + getActiveShortcutContext, + isEditableShortcutTarget, + isNonTextControlShortcutTarget, + registerShortcutSurface, + resetShortcutContextForTests, + shortcutExactlyMatches, + shouldPreserveEditableShortcut, + shouldPreserveNonTextControlShortcut, + toPressedShortcut, +} from "../utils/shortcutContext"; +import { canonicalizeShortcutEvent, getShortcutPlatform } from "../utils/platform"; + +function hostPrimaryModifier(): { ctrlKey: true } | { metaKey: true } { + return getShortcutPlatform() === "macos" ? { metaKey: true } : { ctrlKey: true }; +} + +function hostLegacySecondaryModifier(): { ctrlKey: true } | { altKey: true } { + return getShortcutPlatform() === "macos" ? { ctrlKey: true } : { altKey: true }; +} + +const originalStoreActions = { + undo: useDAWStore.getState().undo, + saveProject: useDAWStore.getState().saveProject, + selectAllTracks: useDAWStore.getState().selectAllTracks, + toggleMixer: useDAWStore.getState().toggleMixer, + toggleLoop: useDAWStore.getState().toggleLoop, + nudgeClips: useDAWStore.getState().nudgeClips, + copySelectedClips: useDAWStore.getState().copySelectedClips, + openProjectSettings: useDAWStore.getState().openProjectSettings, +}; +const originalSelectionState = { + showPitchEditor: useDAWStore.getState().showPitchEditor, + showPianoRoll: useDAWStore.getState().showPianoRoll, + selectedClipId: useDAWStore.getState().selectedClipId, + selectedClipIds: useDAWStore.getState().selectedClipIds, + selectedNoteIds: useDAWStore.getState().selectedNoteIds, + tracks: useDAWStore.getState().tracks, + globalLocked: useDAWStore.getState().globalLocked, + lockSettings: useDAWStore.getState().lockSettings, +}; + +afterEach(() => { + resetShortcutContextForTests(); + useDAWStore.setState({ + ...originalStoreActions, + ...originalSelectionState, + customShortcuts: {}, + }); +}); + +describe("shortcut edit-context routing", () => { + it("routes only to the active surface and restores its declared fallback", () => { + const timelineHandler = vi.fn(() => "handled" as const); + const pitchHandler = vi.fn(() => "claimed_noop" as const); + const unregisterTimeline = registerShortcutSurface( + { kind: "timeline" }, + timelineHandler, + ); + const unregisterPitch = registerShortcutSurface( + { kind: "pitch_editor" }, + pitchHandler, + { kind: "timeline" }, + ); + + activateShortcutContext({ kind: "timeline" }); + expect(dispatchActiveShortcut({ key: "c", ctrlKey: true })).toBe("handled"); + expect(timelineHandler).toHaveBeenCalledTimes(1); + expect(pitchHandler).not.toHaveBeenCalled(); + + activateShortcutContext({ kind: "pitch_editor" }); + expect(dispatchActiveShortcut({ key: "z", ctrlKey: true })).toBe("claimed_noop"); + expect(pitchHandler).toHaveBeenCalledTimes(1); + + unregisterPitch(); + expect(getActiveShortcutContext()).toEqual({ kind: "timeline" }); + unregisterTimeline(); + }); + + it("isolates handlers for two piano-roll sessions", () => { + const firstSession = vi.fn(() => "handled" as const); + const secondSession = vi.fn(() => "handled" as const); + registerShortcutSurface( + { kind: "piano_roll", sessionId: "detached-one" }, + firstSession, + ); + registerShortcutSurface( + { kind: "piano_roll", sessionId: "detached-two" }, + secondSession, + ); + + activateShortcutContext({ kind: "piano_roll", sessionId: "detached-two" }); + expect(dispatchActiveShortcut({ key: "q" })).toBe("handled"); + expect(firstSession).not.toHaveBeenCalled(); + expect(secondSession).toHaveBeenCalledTimes(1); + }); + + it("restores the previous handler when a same-context owner unmounts", () => { + const baseHandler = vi.fn(() => "handled" as const); + const temporaryHandler = vi.fn(() => "claimed_noop" as const); + const unregisterBase = registerShortcutSurface( + { kind: "timeline" }, + baseHandler, + ); + const unregisterTemporary = registerShortcutSurface( + { kind: "timeline" }, + temporaryHandler, + ); + activateShortcutContext({ kind: "timeline" }); + + expect(dispatchActiveShortcut({ key: "s", repeat: true })).toBe("claimed_noop"); + expect(temporaryHandler).toHaveBeenCalledWith({ key: "s", repeat: true }); + expect(baseHandler).not.toHaveBeenCalled(); + + unregisterTemporary(); + expect(getActiveShortcutContext()).toEqual({ kind: "timeline" }); + expect(dispatchActiveShortcut({ key: "s" })).toBe("handled"); + expect(baseHandler).toHaveBeenCalledTimes(1); + + unregisterBase(); + expect(getActiveShortcutContext()).toEqual({ kind: "application" }); + }); + + it("classifies text editors and non-text controls without requiring DOM globals", () => { + const targetMatching = (fragment: string) => ({ + closest: (selectors: string) => selectors.includes(fragment) ? {} : null, + }) as unknown as EventTarget; + + const textInput = targetMatching("input[type='text']"); + const select = targetMatching("select"); + const range = targetMatching("input[type='range']"); + const button = targetMatching("button"); + const contentEditable = targetMatching("[contenteditable='true']"); + const generic = targetMatching("[data-not-a-control]"); + + expect(isEditableShortcutTarget(textInput)).toBe(true); + expect(isNonTextControlShortcutTarget(textInput)).toBe(false); + expect(isEditableShortcutTarget(select)).toBe(true); + expect(isNonTextControlShortcutTarget(select)).toBe(false); + expect(isEditableShortcutTarget(range)).toBe(false); + expect(isNonTextControlShortcutTarget(range)).toBe(true); + expect(isEditableShortcutTarget(button)).toBe(false); + expect(isNonTextControlShortcutTarget(button)).toBe(true); + expect(isEditableShortcutTarget(contentEditable)).toBe(true); + expect(isEditableShortcutTarget(generic)).toBe(false); + expect(isNonTextControlShortcutTarget(generic)).toBe(false); + expect(isEditableShortcutTarget(null)).toBe(false); + expect(isNonTextControlShortcutTarget(null)).toBe(false); + }); + + it("requires exact modifiers and preserves native editing chords", () => { + expect(shortcutExactlyMatches({ key: "z", ...hostPrimaryModifier() }, "Ctrl+Z")).toBe(true); + expect(shortcutExactlyMatches( + { key: "z", ...hostPrimaryModifier(), altKey: true }, + "Ctrl+Z", + )).toBe(false); + expect(toPressedShortcut({ key: "ArrowLeft", shiftKey: true })).toBe("Shift+Left"); + expect(shouldPreserveEditableShortcut({ key: "a", ...hostPrimaryModifier() })).toBe(true); + expect(shouldPreserveEditableShortcut({ key: "s", ...hostPrimaryModifier() })).toBe(false); + expect(shouldPreserveEditableShortcut({ key: " " })).toBe(true); + expect(shouldPreserveEditableShortcut({ key: "Enter", altKey: true })).toBe(true); + expect(shouldPreserveEditableShortcut({ key: "Enter", altKey: true }, true)).toBe(false); + expect(shouldPreserveEditableShortcut({ key: "ArrowLeft", ctrlKey: true }, true)).toBe(true); + expect(shouldPreserveNonTextControlShortcut({ key: "ArrowLeft" })).toBe(true); + expect(shouldPreserveNonTextControlShortcut({ key: "l" })).toBe(false); + }); + + it("keeps macOS Command, Control, and Option distinct during exact matching", () => { + expect(canonicalizeShortcutEvent({ key: "z", metaKey: true }, "macos")).toBe("Ctrl+Z"); + expect(canonicalizeShortcutEvent({ key: "z", ctrlKey: true }, "macos")).toBe("Alt+Z"); + expect(canonicalizeShortcutEvent({ + key: "z", + metaKey: true, + ctrlKey: true, + }, "macos")).toBe("Ctrl+Alt+Z"); + expect(canonicalizeShortcutEvent({ key: "z", altKey: true }, "macos")).toBe("Option+Z"); + expect(canonicalizeShortcutEvent({ + key: "z", + ctrlKey: true, + altKey: true, + }, "macos")).toBe("Alt+Option+Z"); + expect(canonicalizeShortcutEvent({ + key: "z", + metaKey: true, + ctrlKey: true, + altKey: true, + }, "macos")).toBe("Ctrl+Alt+Option+Z"); + expect(canonicalizeShortcutEvent({ + key: "z", + ctrlKey: true, + altKey: true, + }, "other")).toBe("Ctrl+Alt+Z"); + expect(canonicalizeShortcutEvent({ key: "Alt", altKey: true }, "macos")).toBeNull(); + expect(canonicalizeShortcutEvent({ key: "å", altKey: true }, "macos")).toBe("Option+Å"); + }); + + it("preserves composition and native macOS text-editing chords", () => { + expect(shouldPreserveEditableShortcut( + { key: "a", metaKey: true }, + false, + "macos", + )).toBe(true); + expect(shouldPreserveEditableShortcut( + { key: "e", ctrlKey: true }, + true, + "macos", + )).toBe(true); + expect(shouldPreserveEditableShortcut( + { key: "e", altKey: true }, + false, + "macos", + )).toBe(true); + expect(shouldPreserveEditableShortcut( + { key: "Enter", altKey: true }, + true, + "macos", + )).toBe(false); + expect(shouldPreserveEditableShortcut({ + key: "@", + ctrlKey: true, + altKey: true, + getModifierState: (modifier) => modifier === "AltGraph", + })).toBe(true); + expect(shouldPreserveEditableShortcut({ key: "z", isComposing: true })).toBe(true); + expect(shouldPreserveNonTextControlShortcut({ key: "Tab" })).toBe(true); + expect(shouldPreserveNonTextControlShortcut({ + key: "ArrowLeft", + ctrlKey: true, + })).toBe(false); + }); + + it("claims empty editor undo without falling through to project history", () => { + const projectUndo = vi.fn(); + useDAWStore.setState({ undo: projectUndo }); + registerShortcutSurface( + { kind: "pitch_editor" }, + (event) => matchesActionShortcut(event, "edit.undo") ? "claimed_noop" : "unmatched", + { kind: "timeline" }, + ); + activateShortcutContext({ kind: "pitch_editor" }); + + expect(dispatchGlobalShortcut({ key: "z", ...hostPrimaryModifier(), source: "browser" })).toBe(true); + expect(projectUndo).not.toHaveBeenCalled(); + }); + + it("does not expose contextual history from application-only surfaces", () => { + const projectUndo = vi.fn(); + useDAWStore.setState({ undo: projectUndo }); + activateShortcutContext({ kind: "application" }); + + expect(dispatchGlobalShortcut({ key: "z", ...hostPrimaryModifier(), source: "browser" })).toBe(false); + expect(projectUndo).not.toHaveBeenCalled(); + }); + + it("uses a custom action binding instead of retaining the default", () => { + const toggleMixer = vi.fn(); + useDAWStore.setState({ + toggleMixer, + customShortcuts: { "view.toggleMixer": "Ctrl+Shift+M" }, + }); + + expect(dispatchGlobalShortcut({ key: "m", ...hostPrimaryModifier(), source: "browser" })).toBe(false); + expect(dispatchGlobalShortcut({ + key: "m", + ...hostPrimaryModifier(), + shiftKey: true, + source: "browser", + })).toBe(true); + expect(toggleMixer).toHaveBeenCalledTimes(1); + }); + + it("dispatches explicit physical-position and Windows-key custom bindings", () => { + const toggleMixer = vi.fn(); + useDAWStore.setState({ + toggleMixer, + customShortcuts: { "view.toggleMixer": "Control+Code:KeyZ" }, + }); + + expect(dispatchGlobalShortcut({ + key: "y", + code: "KeyZ", + ctrlKey: true, + source: "browser", + }, "windows")).toBe(true); + expect(toggleMixer).toHaveBeenCalledTimes(1); + expect(dispatchGlobalShortcut({ + key: "z", + code: "KeyY", + ctrlKey: true, + source: "browser", + }, "windows")).toBe(false); + + useDAWStore.setState({ + customShortcuts: { "view.toggleMixer": "Meta+Code:KeyM" }, + }); + expect(dispatchGlobalShortcut({ + key: "m", + code: "KeyM", + metaKey: true, + source: "browser", + }, "windows")).toBe(true); + expect(toggleMixer).toHaveBeenCalledTimes(2); + expect(dispatchGlobalShortcut({ + key: "m", + code: "KeyM", + ctrlKey: true, + source: "browser", + }, "windows")).toBe(false); + }); + + it("accepts multiple custom bindings at runtime without conflating numpad keys", () => { + const toggleMixer = vi.fn(); + useDAWStore.setState({ + toggleMixer, + customShortcuts: { + "view.toggleMixer": ["Ctrl+M", "Control+Code:KeyZ"], + } as unknown as Record, + }); + + expect(dispatchGlobalShortcut({ + key: "m", + code: "KeyM", + ctrlKey: true, + source: "browser", + }, "windows")).toBe(true); + expect(dispatchGlobalShortcut({ + key: "y", + code: "KeyZ", + ctrlKey: true, + source: "browser", + }, "windows")).toBe(true); + expect(toggleMixer).toHaveBeenCalledTimes(2); + + useDAWStore.setState({ + customShortcuts: { "view.toggleMixer": "Ctrl+1" }, + }); + expect(matchesActionShortcut( + { key: "1", code: "Numpad1", ctrlKey: true, location: 3 }, + "view.toggleMixer", + "windows", + )).toBe(false); + expect(matchesActionShortcut( + { key: "1", code: "Digit1", ctrlKey: true }, + "view.toggleMixer", + "windows", + )).toBe(true); + }); + + it("consumes repeated one-shot bindings but executes repeatable actions", () => { + const toggleMixer = vi.fn(); + const nudgeClips = vi.fn(); + const track = createDefaultTrack("nudge-track", "Nudge", "#123456", "audio", []); + track.clips = [{ + id: "nudge-clip", + filePath: "C:/nudge.wav", + name: "Nudge", + startTime: 1, + duration: 1, + offset: 0, + color: "#123456", + volumeDB: 0, + fadeIn: 0, + fadeOut: 0, + }]; + useDAWStore.setState({ + toggleMixer, + nudgeClips, + tracks: [track], + selectedClipId: "nudge-clip", + selectedClipIds: ["nudge-clip"], + globalLocked: false, + lockSettings: { ...useDAWStore.getState().lockSettings, items: false }, + }); + + expect(dispatchGlobalShortcut({ + key: "m", + ...hostPrimaryModifier(), + repeat: true, + source: "browser", + })).toBe(true); + expect(toggleMixer).not.toHaveBeenCalled(); + + registerShortcutSurface({ kind: "timeline" }, () => "unmatched"); + activateShortcutContext({ kind: "timeline" }); + expect(dispatchGlobalShortcut({ + key: "ArrowLeft", + repeat: true, + source: "browser", + })).toBe(true); + expect(nudgeClips).toHaveBeenCalledWith("left"); + }); + + it("lets an editor resolve conflicts before unused keys fall through globally", () => { + const toggleLoop = vi.fn(); + const toggleMixer = vi.fn(); + const pianoHandler = vi.fn((event) => ( + shortcutExactlyMatches(event, "L") ? "handled" as const : "unmatched" as const + )); + useDAWStore.setState({ toggleLoop, toggleMixer }); + registerShortcutSurface( + { kind: "piano_roll", sessionId: "active-editor" }, + pianoHandler, + ); + activateShortcutContext({ kind: "piano_roll", sessionId: "active-editor" }); + + expect(dispatchGlobalShortcut({ key: "l", source: "browser" })).toBe(true); + expect(toggleLoop).not.toHaveBeenCalled(); + + expect(dispatchGlobalShortcut({ key: "m", ...hostPrimaryModifier(), source: "browser" })).toBe(true); + expect(toggleMixer).toHaveBeenCalledTimes(1); + }); + + it("uses active context rather than editor visibility for scoped actions", () => { + const selectAllTracks = vi.fn(); + useDAWStore.setState({ + selectAllTracks, + showPitchEditor: true, + showPianoRoll: true, + selectedNoteIds: ["stale-midi-note"], + }); + registerShortcutSurface({ kind: "timeline" }, () => "unmatched"); + activateShortcutContext({ kind: "timeline" }); + + expect(dispatchGlobalShortcut({ key: "a", ...hostPrimaryModifier(), source: "browser" })).toBe(true); + expect(selectAllTracks).toHaveBeenCalledTimes(1); + }); + + it("does not route from stale timeline selection while piano owns the key", () => { + const copySelectedClips = vi.fn(); + useDAWStore.setState({ + copySelectedClips, + selectedClipId: "stale-clip", + selectedClipIds: ["stale-clip"], + selectedNoteIds: [], + }); + registerShortcutSurface( + { kind: "piano_roll", sessionId: "selection-owner" }, + (event) => shortcutExactlyMatches(event, "Ctrl+C") ? "claimed_noop" : "unmatched", + ); + activateShortcutContext({ kind: "piano_roll", sessionId: "selection-owner" }); + + expect(dispatchGlobalShortcut({ key: "c", ...hostPrimaryModifier(), source: "browser" })).toBe(true); + expect(copySelectedClips).not.toHaveBeenCalled(); + }); + + it("leaves native input editing alone while allowing application shortcuts", () => { + const saveProject = vi.fn(); + const selectAllTracks = vi.fn(); + useDAWStore.setState({ saveProject, selectAllTracks }); + registerShortcutSurface({ kind: "timeline" }, () => "unmatched"); + activateShortcutContext({ kind: "timeline" }); + + expect(dispatchGlobalShortcut({ + key: "a", + ...hostPrimaryModifier(), + source: "browser", + targetIsEditable: true, + })).toBe(false); + expect(selectAllTracks).not.toHaveBeenCalled(); + + expect(dispatchGlobalShortcut({ + key: "s", + ...hostPrimaryModifier(), + source: "browser", + targetIsEditable: true, + })).toBe(true); + expect(saveProject).toHaveBeenCalledTimes(1); + }); + + it("allows an exact registered modifier chord from a focused input", () => { + const openProjectSettings = vi.fn(); + useDAWStore.setState({ openProjectSettings }); + + expect(dispatchGlobalShortcut({ + key: "Enter", + ...hostLegacySecondaryModifier(), + source: "browser", + targetIsEditable: true, + })).toBe(true); + expect(openProjectSettings).toHaveBeenCalledTimes(1); + }); + + it("reserves the effective transport Play binding while preserving other native control keys", () => { + const toggleLoop = vi.fn(); + const executeAction = vi.fn(); + const preventDefault = vi.fn(); + useDAWStore.setState({ toggleLoop }); + activateShortcutContext({ kind: "application" }); + + expect(dispatchGlobalShortcut({ + key: "l", + source: "browser", + targetIsNonTextControl: true, + })).toBe(true); + expect(toggleLoop).toHaveBeenCalledTimes(1); + + expect(dispatchGlobalShortcut({ + key: " ", + code: "Space", + source: "browser", + targetIsNonTextControl: true, + preventDefault, + }, "windows", { executeAction })).toBe(true); + expect(preventDefault).toHaveBeenCalledOnce(); + expect(executeAction).toHaveBeenCalledOnce(); + expect(executeAction.mock.calls[0][0].id).toBe("transport.play"); + }); +}); diff --git a/frontend/src/__tests__/shortcutDispatcherPlatform.test.ts b/frontend/src/__tests__/shortcutDispatcherPlatform.test.ts new file mode 100644 index 0000000..4316db9 --- /dev/null +++ b/frontend/src/__tests__/shortcutDispatcherPlatform.test.ts @@ -0,0 +1,85 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { createDefaultTrack, useDAWStore } from "../store/useDAWStore"; +import { + dispatchGlobalShortcut, + matchesActionShortcut, +} from "../utils/globalShortcutDispatcher"; +import { + activateShortcutContext, + registerShortcutSurface, + resetShortcutContextForTests, +} from "../utils/shortcutContext"; + +describe("platform-explicit shortcut dispatch", () => { + const original = { + keyboardShortcutProfileId: useDAWStore.getState().keyboardShortcutProfileId, + customShortcuts: useDAWStore.getState().customShortcuts, + tracks: useDAWStore.getState().tracks, + selectedClipId: useDAWStore.getState().selectedClipId, + selectedClipIds: useDAWStore.getState().selectedClipIds, + transport: useDAWStore.getState().transport, + splitClipAtPlayhead: useDAWStore.getState().splitClipAtPlayhead, + }; + + beforeEach(() => { + resetShortcutContextForTests(); + useDAWStore.setState({ + keyboardShortcutProfileId: "pro_tools", + customShortcuts: {}, + selectedClipIds: ["selected-clip"], + }); + registerShortcutSurface({ kind: "timeline" }, () => "unmatched"); + activateShortcutContext({ kind: "timeline" }); + }); + + afterEach(() => { + resetShortcutContextForTests(); + useDAWStore.setState(original); + }); + + it("matches the portable primary modifier as Control on Windows and Command on macOS", () => { + const windowsEvent = { key: "e", code: "KeyE", ctrlKey: true }; + const macEvent = { key: "e", code: "KeyE", metaKey: true }; + + expect(matchesActionShortcut(windowsEvent, "edit.splitAtCursor", "windows")).toBe(true); + expect(matchesActionShortcut(windowsEvent, "edit.splitAtCursor", "macos")).toBe(false); + expect(matchesActionShortcut(macEvent, "edit.splitAtCursor", "macos")).toBe(true); + expect(matchesActionShortcut(macEvent, "edit.splitAtCursor", "windows")).toBe(false); + }); + + it("runs the real scoped registry action with an explicit target platform", () => { + const splitClipAtPlayhead = vi.fn(); + const track = createDefaultTrack("split-track", "Split", "#123456", "audio", []); + track.clips = [{ + id: "selected-clip", + filePath: "C:/split.wav", + name: "Split", + startTime: 0, + duration: 2, + offset: 0, + color: "#123456", + volumeDB: 0, + fadeIn: 0, + fadeOut: 0, + }]; + useDAWStore.setState((state) => ({ + splitClipAtPlayhead, + tracks: [track], + selectedClipId: "selected-clip", + selectedClipIds: ["selected-clip"], + transport: { ...state.transport, currentTime: 1 }, + })); + + expect(dispatchGlobalShortcut( + { key: "e", code: "KeyE", metaKey: true, source: "test" }, + "macos", + )).toBe(true); + expect(splitClipAtPlayhead).toHaveBeenCalledTimes(1); + + expect(dispatchGlobalShortcut( + { key: "e", code: "KeyE", metaKey: true, source: "test" }, + "windows", + )).toBe(false); + expect(splitClipAtPlayhead).toHaveBeenCalledTimes(1); + }); +}); diff --git a/frontend/src/__tests__/shortcutPlatformNormalization.test.ts b/frontend/src/__tests__/shortcutPlatformNormalization.test.ts new file mode 100644 index 0000000..3c3cab6 --- /dev/null +++ b/frontend/src/__tests__/shortcutPlatformNormalization.test.ts @@ -0,0 +1,261 @@ +import { describe, expect, it } from "vitest"; +import { + canonicalizeShortcutEvent, + formatShortcutForPlatform, + normalizeShortcutBinding, + normalizeShortcutBindings, + shortcutBindingEventSignature, + shortcutEventCandidates, + shortcutMatchesEvent, +} from "../utils/platform"; + +describe("cross-platform shortcut normalization", () => { + it("keeps legacy bindings compatible while exposing physical modifiers", () => { + expect(canonicalizeShortcutEvent( + { key: "z", code: "KeyZ", metaKey: true }, + "macos", + )).toBe("Ctrl+Z"); + expect(canonicalizeShortcutEvent( + { key: "z", code: "KeyZ", metaKey: true }, + "macos", + { modifierStyle: "physical" }, + )).toBe("Command+Z"); + expect(canonicalizeShortcutEvent( + { key: "z", code: "KeyZ", ctrlKey: true }, + "macos", + )).toBe("Alt+Z"); + expect(canonicalizeShortcutEvent( + { key: "z", code: "KeyZ", ctrlKey: true }, + "macos", + { modifierStyle: "physical" }, + )).toBe("Control+Z"); + expect(canonicalizeShortcutEvent( + { key: "z", code: "KeyZ", altKey: true }, + "macos", + )).toBe("Option+Z"); + + expect(shortcutMatchesEvent( + { key: "z", code: "KeyZ", metaKey: true }, + "Ctrl+Z", + "macos", + )).toBe(true); + expect(shortcutMatchesEvent( + { key: "z", code: "KeyZ", metaKey: true }, + "Command+Z", + "macos", + )).toBe(true); + expect(shortcutMatchesEvent( + { key: "z", code: "KeyZ", metaKey: true }, + "Control+Z", + "macos", + )).toBe(false); + }); + + it("does not alias the Windows key to Control", () => { + const windowsKeyEvent = { key: "m", code: "KeyM", metaKey: true }; + expect(canonicalizeShortcutEvent(windowsKeyEvent, "windows")).toBe("Meta+M"); + expect(shortcutMatchesEvent(windowsKeyEvent, "Meta+M", "windows")).toBe(true); + expect(shortcutMatchesEvent(windowsKeyEvent, "Ctrl+M", "windows")).toBe(false); + expect(shortcutMatchesEvent( + { key: "m", code: "KeyM", ctrlKey: true }, + "Meta+M", + "windows", + )).toBe(false); + }); + + it("requires exact modifier sets, including Option and mixed Mac chords", () => { + const commandControlOption = { + key: "r", + code: "KeyR", + ctrlKey: true, + altKey: true, + metaKey: true, + shiftKey: true, + }; + + expect(canonicalizeShortcutEvent(commandControlOption, "macos")).toBe( + "Ctrl+Alt+Option+Shift+R", + ); + expect(shortcutMatchesEvent( + commandControlOption, + "Command+Control+Option+Shift+R", + "macos", + )).toBe(true); + expect(shortcutMatchesEvent( + commandControlOption, + "Ctrl+Alt+Shift+R", + "macos", + )).toBe(false); + expect(shortcutMatchesEvent( + { key: "r", code: "KeyR", altKey: true }, + "Alt+R", + "macos", + )).toBe(false); + expect(shortcutMatchesEvent( + { key: "r", code: "KeyR", altKey: true }, + "Option+R", + "macos", + )).toBe(true); + }); + + it("supports printed-label and physical-position bindings on QWERTZ", () => { + // The key labelled Z on a German QWERTZ layout reports KeyY. + const labelledZ = { key: "z", code: "KeyY", ctrlKey: true }; + expect(shortcutMatchesEvent(labelledZ, "Ctrl+Z", "windows")).toBe(true); + expect(shortcutMatchesEvent( + labelledZ, + "Control+Code:KeyY", + "windows", + )).toBe(true); + expect(shortcutMatchesEvent(labelledZ, "Ctrl+Code:KeyZ", "windows")).toBe(false); + expect(canonicalizeShortcutEvent( + labelledZ, + "windows", + { keyMode: "physical", modifierStyle: "physical" }, + )).toBe("Control+Code:KeyY"); + + // The US-QWERTY Z position reports KeyZ but produces Y on QWERTZ. + const qwertyZPosition = { key: "y", code: "KeyZ", ctrlKey: true }; + expect(shortcutMatchesEvent(qwertyZPosition, "Ctrl+Z", "windows")).toBe(false); + expect(shortcutMatchesEvent( + qwertyZPosition, + "Control+Code:KeyZ", + "windows", + )).toBe(true); + }); + + it("supports printed-label and physical-position bindings on AZERTY", () => { + const labelledQ = { key: "q", code: "KeyA", metaKey: true }; + expect(shortcutMatchesEvent(labelledQ, "Command+Q", "macos")).toBe(true); + expect(shortcutMatchesEvent( + labelledQ, + "Command+Code:KeyA", + "macos", + )).toBe(true); + expect(shortcutMatchesEvent( + labelledQ, + "Command+Code:KeyQ", + "macos", + )).toBe(false); + }); + + it("distinguishes numpad keys from the top row", () => { + const topRowOne = { key: "1", code: "Digit1", ctrlKey: true }; + const numpadOne = { key: "1", code: "Numpad1", ctrlKey: true, location: 3 }; + + expect(canonicalizeShortcutEvent(topRowOne, "windows")).toBe("Ctrl+1"); + expect(canonicalizeShortcutEvent(numpadOne, "windows")).toBe("Ctrl+Numpad1"); + expect(shortcutMatchesEvent(topRowOne, "Ctrl+1", "windows")).toBe(true); + expect(shortcutMatchesEvent(topRowOne, "Ctrl+Numpad1", "windows")).toBe(false); + expect(shortcutMatchesEvent(numpadOne, "Ctrl+1", "windows")).toBe(false); + expect(shortcutMatchesEvent(numpadOne, "Ctrl+Numpad1", "windows")).toBe(true); + expect(shortcutMatchesEvent( + numpadOne, + "Control+Code:Numpad1", + "windows", + )).toBe(true); + + expect(canonicalizeShortcutEvent( + { key: "+", code: "NumpadAdd", location: 3 }, + "windows", + )).toBe("NumpadAdd"); + expect(canonicalizeShortcutEvent( + { key: "2", location: 3 }, + "windows", + )).toBe("Numpad2"); + }); + + it("keeps AltGraph text entry from masquerading as Ctrl+Alt", () => { + const altGraphEvent = { + key: "@", + code: "KeyQ", + ctrlKey: true, + altKey: true, + getModifierState: (modifier: string) => modifier === "AltGraph", + }; + expect(canonicalizeShortcutEvent(altGraphEvent, "windows")).toBe("AltGraph+@"); + expect(shortcutMatchesEvent(altGraphEvent, "Ctrl+Alt+@", "windows")).toBe(false); + expect(shortcutMatchesEvent(altGraphEvent, "AltGraph+@", "windows")).toBe(true); + expect(shortcutMatchesEvent( + altGraphEvent, + "AltGraph+Code:KeyQ", + "windows", + )).toBe(true); + }); + + it("rejects modifier-only, composing, dead, and unidentified input", () => { + expect(canonicalizeShortcutEvent( + { key: "Control", code: "ControlLeft", ctrlKey: true }, + "windows", + )).toBeNull(); + expect(canonicalizeShortcutEvent( + { key: "z", code: "KeyZ", ctrlKey: true, isComposing: true }, + "windows", + )).toBeNull(); + expect(canonicalizeShortcutEvent({ key: "Dead", code: "Quote" }, "windows")).toBeNull(); + expect(shortcutMatchesEvent( + { key: "Dead", code: "Quote" }, + "Code:Quote", + "windows", + )).toBe(false); + expect(canonicalizeShortcutEvent({ key: "Unidentified" }, "windows")).toBeNull(); + }); + + it("normalizes aliases, plus keys, and multiple bindings", () => { + expect(normalizeShortcutBinding(" shift + cmd + code:keyz ")).toBe( + "Command+Shift+Code:KeyZ", + ); + expect(normalizeShortcutBinding("windows+control+numpadadd")).toBe( + "Control+Meta+NumpadAdd", + ); + expect(normalizeShortcutBinding("ctrl++")).toBe("Ctrl++"); + expect(normalizeShortcutBinding("ctrl+ctrl+z")).toBeNull(); + expect(normalizeShortcutBindings([ + "ctrl+z", + "Ctrl+Z", + null, + "Command+Code:KeyZ", + "", + ])).toEqual(["Ctrl+Z", "Command+Code:KeyZ"]); + }); + + it("returns both legacy and explicit event candidates", () => { + const candidates = shortcutEventCandidates( + { key: "z", code: "KeyZ", metaKey: true }, + "macos", + ); + expect(candidates).toContain("Ctrl+Z"); + expect(candidates).toContain("Command+Z"); + expect(candidates).toContain("Ctrl+Code:KeyZ"); + expect(candidates).toContain("Command+Code:KeyZ"); + }); + + it("builds platform-physical signatures for truthful conflict checks", () => { + expect(shortcutBindingEventSignature("Ctrl+Z", "macos")).toBe( + shortcutBindingEventSignature("Command+Z", "macos"), + ); + expect(shortcutBindingEventSignature("Alt+Z", "macos")).toBe( + shortcutBindingEventSignature("Control+Z", "macos"), + ); + expect(shortcutBindingEventSignature("Option+Z", "macos")).not.toBe( + shortcutBindingEventSignature("Alt+Z", "macos"), + ); + expect(shortcutBindingEventSignature("Option+Z", "windows")).toBeNull(); + expect(shortcutBindingEventSignature("Ctrl+Control+Z", "windows")).toBeNull(); + expect(shortcutBindingEventSignature("Control+Code:KeyB", "windows")).toBe( + shortcutBindingEventSignature("Ctrl+B", "windows"), + ); + }); + + it("formats legacy and explicit bindings for each platform", () => { + expect(formatShortcutForPlatform("Ctrl+Alt+Option+Z", "macos")).toBe( + "Cmd+Ctrl+Option+Z", + ); + expect(formatShortcutForPlatform("Control+Meta+M", "windows")).toBe( + "Ctrl+Win+M", + ); + expect(formatShortcutForPlatform("Command+Code:KeyZ", "macos")).toBe( + "Cmd+Physical KeyZ", + ); + }); +}); diff --git a/frontend/src/__tests__/shortcutProfileDispatch.test.ts b/frontend/src/__tests__/shortcutProfileDispatch.test.ts new file mode 100644 index 0000000..b7d6c1c --- /dev/null +++ b/frontend/src/__tests__/shortcutProfileDispatch.test.ts @@ -0,0 +1,176 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { getDisplayEffectiveShortcut } from "../store/actionRegistry"; +import { useDAWStore, type Track } from "../store/useDAWStore"; +import { + dispatchGlobalShortcut, + matchesActionShortcut, +} from "../utils/globalShortcutDispatcher"; +import { + activateShortcutContext, + registerShortcutSurface, + resetShortcutContextForTests, +} from "../utils/shortcutContext"; +import { getShortcutPlatform } from "../utils/platform"; + +function hostPrimaryModifier(): { ctrlKey: true } | { metaKey: true } { + return getShortcutPlatform() === "macos" ? { metaKey: true } : { ctrlKey: true }; +} + +describe("runtime shortcut profile dispatch", () => { + const original = { + keyboardShortcutProfileId: useDAWStore.getState().keyboardShortcutProfileId, + customShortcuts: useDAWStore.getState().customShortcuts, + transport: useDAWStore.getState().transport, + toggleRecord: useDAWStore.getState().toggleRecord, + toggleTrackArmed: useDAWStore.getState().toggleTrackArmed, + toggleTrackMute: useDAWStore.getState().toggleTrackMute, + toggleTrackSolo: useDAWStore.getState().toggleTrackSolo, + toggleSelectedTracksArmed: useDAWStore.getState().toggleSelectedTracksArmed, + toggleSelectedTracksMute: useDAWStore.getState().toggleSelectedTracksMute, + toggleSelectedTracksSolo: useDAWStore.getState().toggleSelectedTracksSolo, + toggleStepInput: useDAWStore.getState().toggleStepInput, + selectedTrackIds: useDAWStore.getState().selectedTrackIds, + tracks: useDAWStore.getState().tracks, + }; + + beforeEach(() => { + useDAWStore.setState({ keyboardShortcutProfileId: "openstudio", customShortcuts: {} }); + }); + + afterEach(() => { + resetShortcutContextForTests(); + useDAWStore.setState(original); + }); + + it("switches matching immediately without rewriting factory shortcuts", () => { + useDAWStore.setState({ keyboardShortcutProfileId: "pro_tools" }); + expect(matchesActionShortcut({ key: "e", code: "KeyE", ...hostPrimaryModifier() }, "edit.splitAtCursor")).toBe(true); + expect(matchesActionShortcut({ key: "s", code: "KeyS" }, "edit.splitAtCursor")).toBe(false); + }); + + it("lets a custom binding override the active profile", () => { + useDAWStore.setState({ + keyboardShortcutProfileId: "pro_tools", + customShortcuts: { "edit.splitAtCursor": "Code:KeyK" }, + }); + expect(matchesActionShortcut({ key: "k", code: "KeyK" }, "edit.splitAtCursor")).toBe(true); + expect(matchesActionShortcut({ key: "e", code: "KeyE", ...hostPrimaryModifier() }, "edit.splitAtCursor")).toBe(false); + }); + + it("keeps physical key profiles stable when the produced layout label changes", () => { + useDAWStore.setState({ customShortcuts: { "tools.splitTool": "Code:KeyB" } }); + expect(matchesActionShortcut({ key: "x", code: "KeyB" }, "tools.splitTool")).toBe(true); + }); + + it("treats an explicit empty custom binding as unassigned", () => { + useDAWStore.setState({ + keyboardShortcutProfileId: "pro_tools", + customShortcuts: { "edit.splitAtCursor": "" }, + }); + expect(matchesActionShortcut({ key: "e", code: "KeyE", ...hostPrimaryModifier() }, "edit.splitAtCursor")).toBe(false); + expect(getDisplayEffectiveShortcut("edit.splitAtCursor")).toBe(""); + }); + + it("does not let factory-scoped R tools shadow a profile's global Record", () => { + const toggleRecord = vi.fn(); + const toggleTrackArmed = vi.fn(); + const current = useDAWStore.getState(); + useDAWStore.setState({ + keyboardShortcutProfileId: "garageband", + transport: { ...current.transport, isRecording: true }, + toggleRecord, + toggleTrackArmed, + }); + registerShortcutSurface({ kind: "piano_roll", sessionId: "profile-record-test" }, () => "unmatched"); + activateShortcutContext({ kind: "piano_roll", sessionId: "profile-record-test" }); + + expect(matchesActionShortcut({ key: "r", code: "KeyR" }, "transport.record")).toBe(true); + expect(matchesActionShortcut({ key: "r", code: "KeyR" }, "track.toggleSelectedArm")).toBe(false); + expect(matchesActionShortcut({ key: "r", code: "KeyR" }, "midi.tool.range")).toBe(false); + expect(dispatchGlobalShortcut({ key: "r", code: "KeyR", source: "browser" })).toBe(true); + expect(toggleRecord).toHaveBeenCalledTimes(1); + expect(toggleTrackArmed).not.toHaveBeenCalled(); + }); + + it("makes GarageBand selected-track M/S commands reachable from Timeline focus", () => { + const toggleSelectedTracksMute = vi.fn(() => true); + const toggleSelectedTracksSolo = vi.fn(() => true); + useDAWStore.setState({ + keyboardShortcutProfileId: "garageband", + selectedTrackIds: ["track-1"], + toggleSelectedTracksMute, + toggleSelectedTracksSolo, + }); + registerShortcutSurface({ kind: "timeline" }, () => "unmatched"); + activateShortcutContext({ kind: "timeline" }); + + expect(matchesActionShortcut({ key: "m", code: "KeyM" }, "insert.marker")).toBe(false); + expect(matchesActionShortcut({ key: "s", code: "KeyS" }, "edit.splitAtCursor")).toBe(false); + expect(dispatchGlobalShortcut({ key: "m", code: "KeyM", source: "browser" })).toBe(true); + expect(dispatchGlobalShortcut({ key: "s", code: "KeyS", source: "browser" })).toBe(true); + expect(toggleSelectedTracksMute).toHaveBeenCalledTimes(1); + expect(toggleSelectedTracksSolo).toHaveBeenCalledTimes(1); + }); + + it("makes Cakewalk Alt+M/S/R selected-track commands reachable from Timeline focus", () => { + const toggleSelectedTracksMute = vi.fn(() => true); + const toggleSelectedTracksSolo = vi.fn(() => true); + const toggleSelectedTracksArmed = vi.fn(() => true); + const track = { id: "track-1", armed: false, recordSafe: false } as Track; + useDAWStore.setState({ + keyboardShortcutProfileId: "cakewalk_sonar", + selectedTrackIds: [track.id], + tracks: [track], + toggleSelectedTracksMute, + toggleSelectedTracksSolo, + toggleSelectedTracksArmed, + }); + registerShortcutSurface({ kind: "timeline" }, () => "unmatched"); + activateShortcutContext({ kind: "timeline" }); + + for (const key of ["m", "s", "r"] as const) { + expect(dispatchGlobalShortcut({ key, code: `Key${key.toUpperCase()}`, altKey: true, source: "browser" })).toBe(true); + } + expect(toggleSelectedTracksMute).toHaveBeenCalledTimes(1); + expect(toggleSelectedTracksSolo).toHaveBeenCalledTimes(1); + expect(toggleSelectedTracksArmed).toHaveBeenCalledTimes(1); + }); + + it("does not let scoped R fallbacks steal REAPER loop or Pro Tools zoom", () => { + useDAWStore.setState({ keyboardShortcutProfileId: "reaper" }); + expect(matchesActionShortcut({ key: "r", code: "KeyR" }, "transport.loop")).toBe(true); + expect(matchesActionShortcut({ key: "r", code: "KeyR" }, "track.toggleSelectedArm")).toBe(false); + expect(matchesActionShortcut({ key: "r", code: "KeyR" }, "midi.tool.range")).toBe(false); + + useDAWStore.setState({ keyboardShortcutProfileId: "pro_tools" }); + expect(matchesActionShortcut({ key: "r", code: "KeyR" }, "view.zoomOut")).toBe(true); + expect(matchesActionShortcut({ key: "r", code: "KeyR" }, "track.toggleSelectedArm")).toBe(false); + expect(matchesActionShortcut({ key: "r", code: "KeyR" }, "midi.tool.range")).toBe(false); + }); + + it.each(["macos", "windows"] as const)("does not equate Renoise Edit Mode Esc with Piano Roll step input on %s", (platform) => { + const toggleStepInput = vi.fn(); + useDAWStore.setState({ + keyboardShortcutProfileId: "renoise", + toggleStepInput, + }); + registerShortcutSurface({ kind: "piano_roll", sessionId: `renoise-${platform}` }, () => "unmatched"); + activateShortcutContext({ kind: "piano_roll", sessionId: `renoise-${platform}` }); + + expect(matchesActionShortcut( + { key: "Escape", code: "Escape" }, + "midi.closeEditor", + platform, + )).toBe(false); + expect(matchesActionShortcut( + { key: "Escape", code: "Escape" }, + "midi.toggleStepInput", + platform, + )).toBe(false); + expect(dispatchGlobalShortcut( + { key: "Escape", code: "Escape", source: "browser" }, + platform, + )).toBe(false); + expect(toggleStepInput).not.toHaveBeenCalled(); + }); +}); diff --git a/frontend/src/__tests__/shortcutProfiles.test.ts b/frontend/src/__tests__/shortcutProfiles.test.ts new file mode 100644 index 0000000..c9ab69a --- /dev/null +++ b/frontend/src/__tests__/shortcutProfiles.test.ts @@ -0,0 +1,369 @@ +import { describe, expect, it } from "vitest"; +import { getActionShortcutScopes, getRegisteredActions } from "../store/actionRegistry"; +import { + normalizeShortcutBinding, + shortcutBindingEventSignature, + shortcutMatchesEvent, +} from "../utils/platform"; +import { + getKeyboardShortcutProfile, + getKeyboardShortcutProfilePresentation, + getProfileActionBindings, + KEYBOARD_SHORTCUT_PROFILE_IDS, + KEYBOARD_SHORTCUT_PROFILES, +} from "../utils/shortcutProfiles"; + +describe("keyboard shortcut profiles", () => { + it("provides every required and additional DAW as a stable unique profile", () => { + expect(new Set(KEYBOARD_SHORTCUT_PROFILE_IDS).size).toBe(KEYBOARD_SHORTCUT_PROFILE_IDS.length); + expect(KEYBOARD_SHORTCUT_PROFILE_IDS).toEqual(expect.arrayContaining([ + "openstudio", + "pro_tools", + "cubase", + "reaper", + "audacity", + "logic_pro", + "fl_studio", + "ableton_live", + "studio_one", + "bitwig_studio", + "reason", + "cakewalk_sonar", + "garageband", + "digital_performer", + "ardour", + "adobe_audition", + "mixcraft", + "waveform", + "renoise", + ])); + }); + + it("marks source-DAW platform availability without disabling portable profile use", () => { + expect(getKeyboardShortcutProfile("cakewalk_sonar").nativePlatforms).toEqual(["windows"]); + expect(getKeyboardShortcutProfile("garageband").nativePlatforms).toEqual(["macos"]); + expect(getKeyboardShortcutProfile("digital_performer").nativePlatforms).toEqual(["macos", "windows"]); + expect(getKeyboardShortcutProfile("adobe_audition").nativePlatforms).toEqual(["macos", "windows"]); + expect(getKeyboardShortcutProfile("mixcraft").nativePlatforms).toEqual(["windows"]); + expect(getKeyboardShortcutProfile("waveform").nativePlatforms).toEqual(["macos", "windows", "linux"]); + expect(getKeyboardShortcutProfile("renoise").nativePlatforms).toEqual(["macos", "windows", "linux"]); + }); + + it("extends selected-track commands into the Timeline only for profiles that document them", () => { + const actions = getRegisteredActions(); + const mute = actions.find((action) => action.id === "track.toggleSelectedMute")!; + const solo = actions.find((action) => action.id === "track.toggleSelectedSolo")!; + const arm = actions.find((action) => action.id === "track.toggleSelectedArm")!; + + expect(getActionShortcutScopes(mute, "garageband")).toContain("timeline"); + expect(getActionShortcutScopes(solo, "garageband")).toContain("timeline"); + expect(getActionShortcutScopes(arm, "garageband")).toContain("timeline"); + expect(getActionShortcutScopes(arm, "cakewalk_sonar")).toContain("timeline"); + expect(getActionShortcutScopes(mute, "openstudio")).not.toContain("timeline"); + }); + + it("references registered actions and parseable bindings", () => { + const actionIds = new Set(getRegisteredActions().map((action) => action.id)); + for (const profile of KEYBOARD_SHORTCUT_PROFILES) { + for (const [actionId, scopes] of Object.entries(profile.scopeAdditions ?? {})) { + expect(actionIds.has(actionId), `${profile.id} scope addition: ${actionId}`).toBe(true); + expect(scopes.length, `${profile.id} scope addition: ${actionId}`).toBeGreaterThan(0); + expect(new Set(scopes).size, `${profile.id} scope addition: ${actionId}`).toBe(scopes.length); + } + for (const actionId of Object.keys(profile.bindings)) { + expect(actionIds.has(actionId), `${profile.id}: ${actionId}`).toBe(true); + for (const platform of ["macos", "windows", "linux", "other"] as const) { + const bindings = getProfileActionBindings(profile.id, actionId, platform) ?? []; + for (const binding of bindings) { + expect(normalizeShortcutBinding(binding), `${profile.id}/${platform}: ${binding}`).toBeTruthy(); + } + } + } + } + }); + + it("maps Logic Option nudges to physical Alt on Windows without changing macOS Option", () => { + expect(getProfileActionBindings("logic_pro", "edit.nudgeLeft", "macos")).toEqual(["Option+Left"]); + expect(getProfileActionBindings("logic_pro", "edit.nudgeLeft", "windows")).toEqual(["Alt+Left"]); + }); + + it("ports Cakewalk's documented Alt track commands to Option on macOS", () => { + expect(getProfileActionBindings("cakewalk_sonar", "track.toggleSelectedMute", "windows")).toEqual(["Alt+M"]); + expect(getProfileActionBindings("cakewalk_sonar", "track.toggleSelectedMute", "macos")).toEqual(["Option+M"]); + expect(getProfileActionBindings("cakewalk_sonar", "track.toggleSelectedSolo", "windows")).toEqual(["Alt+S"]); + expect(getProfileActionBindings("cakewalk_sonar", "track.toggleSelectedArm", "macos")).toEqual(["Option+R"]); + }); + + it("maps documented Cakewalk and GarageBand commands only to registered actions", () => { + expect(getProfileActionBindings("cakewalk_sonar", "transport.record", "windows")).toEqual(["R"]); + expect(getProfileActionBindings("cakewalk_sonar", "transport.metronome", "windows")).toEqual(["Ctrl+F3"]); + expect(getProfileActionBindings("cakewalk_sonar", "tools.smartTool", "windows")).toEqual(["F5"]); + expect(getProfileActionBindings("cakewalk_sonar", "tools.selectTool", "windows")).toEqual(["F6"]); + expect(getProfileActionBindings("cakewalk_sonar", "view.toggleSnap", "windows")).toEqual(["N"]); + expect(getProfileActionBindings("cakewalk_sonar", "view.toggleMixer", "windows")).toEqual(["Alt+2"]); + expect(getProfileActionBindings("cakewalk_sonar", "clip.openSelectedInPianoRoll", "macos")).toEqual(["Option+3"]); + expect(getProfileActionBindings("cakewalk_sonar", "edit.nudgeLeft", "windows")).toEqual(["Numpad1"]); + expect(getProfileActionBindings("cakewalk_sonar", "edit.nudgeRight", "windows")).toEqual(["Numpad3"]); + expect(getProfileActionBindings("cakewalk_sonar", "edit.muteClips", "windows")).toEqual(["K"]); + expect(getProfileActionBindings("cakewalk_sonar", "edit.toggleClipLock", "windows")).toEqual(["Ctrl+K"]); + expect(getProfileActionBindings("cakewalk_sonar", "view.zoomToFit", "windows")).toEqual(["Ctrl+F"]); + expect(getProfileActionBindings("cakewalk_sonar", "options.preferences", "windows")).toEqual(["P"]); + + expect(getProfileActionBindings("garageband", "transport.loop", "macos")).toEqual(["C"]); + expect(getProfileActionBindings("garageband", "transport.metronome", "macos")).toEqual(["K"]); + expect(getProfileActionBindings("garageband", "view.toggleSnap", "macos")).toEqual(["Ctrl+G"]); + expect(getProfileActionBindings("garageband", "view.zoomOut", "macos")).toEqual(["Ctrl+Left"]); + expect(getProfileActionBindings("garageband", "view.zoomIn", "windows")).toEqual(["Ctrl+Right"]); + expect(getProfileActionBindings("garageband", "track.toggleSelectedArm", "macos")).toEqual(["Control+R"]); + expect(getProfileActionBindings("garageband", "track.toggleSelectedMonitor", "windows")).toEqual(["Ctrl+I"]); + expect(getProfileActionBindings("reason", "transport.metronome", "windows")).toEqual(["C"]); + }); + + it("keeps physical Option and Control commands distinct on macOS", () => { + expect(getProfileActionBindings("cubase", "view.toggleVirtualKeyboard", "macos")).toEqual(["Option+K"]); + expect(getProfileActionBindings("logic_pro", "edit.muteClips", "macos")).toEqual(["Control+M"]); + expect(shortcutMatchesEvent( + { key: "k", code: "KeyK", altKey: true }, + "Option+K", + "macos", + )).toBe(true); + expect(shortcutMatchesEvent( + { key: "m", code: "KeyM", ctrlKey: true }, + "Control+M", + "macos", + )).toBe(true); + }); + + it.each([ + ["pro_tools", "edit.groupClips", ["Ctrl+Option+G"], ["Ctrl+Alt+G"]], + ["pro_tools", "edit.ungroupClips", ["Ctrl+Option+U"], ["Ctrl+Alt+U"]], + ["cubase", "edit.splitAtCursor", ["Option+X"], ["Alt+X"]], + ["cubase", "view.zoomToSelection", ["Option+S"], ["Alt+S"]], + ["reaper", "edit.reverseClip", ["Option+R"], ["Alt+R"]], + ["audacity", "transport.pause", ["P"], ["P"]], + ["logic_pro", "edit.splitAtSelection", ["Option+Ctrl+T"], ["Alt+Ctrl+T"]], + ["logic_pro", "edit.reverseClip", ["Control+Shift+R"], ["Ctrl+Shift+R"]], + ["fl_studio", "midi.quantizeLast", ["Ctrl+Q"], ["Ctrl+Q"]], + ["fl_studio", "view.toggleSnap", ["Backspace"], ["Backspace"]], + ["ableton_live", "midi.tool.draw", ["B"], ["B"]], + ["ableton_live", "insert.emptyMidiClip", ["Ctrl+Shift+M"], ["Ctrl+Shift+M"]], + ["studio_one", "insert.multipleTracks", ["T"], ["T"]], + ["studio_one", "edit.normalizeClips", ["Option+N"], ["Alt+N"]], + ["bitwig_studio", "edit.splitAtCursor", ["Ctrl+E"], ["Ctrl+E"]], + ["reason", "edit.splitAtCursor", ["Option+X"], ["Alt+X"]], + ["cakewalk_sonar", "view.mediaExplorer", ["B"], ["B"]], + ["garageband", "edit.splitAtCursor", ["Ctrl+T"], ["Ctrl+T"]], + ["ardour", "tools.selectTool", ["G"], ["G"]], + ["adobe_audition", "edit.nudgeLeft", ["Option+,"], ["Alt+,"]], + ["mixcraft", "edit.splitAtCursor", ["Ctrl+T"], ["Ctrl+T"]], + ["waveform", "view.zoomIn", ["Up"], ["Up"]], + ["renoise", "transport.play", ["Space"], ["Space"]], + ] as const)("maps %s %s on both desktop platforms", (profileId, actionId, macos, windows) => { + expect(getProfileActionBindings(profileId, actionId, "macos")).toEqual(macos); + expect(getProfileActionBindings(profileId, actionId, "windows")).toEqual(windows); + }); + + it("uses event-reachable main-row and numpad zoom bindings", () => { + expect(shortcutMatchesEvent( + { key: "=", code: "Equal", ctrlKey: true }, + "Ctrl+=", + "windows", + )).toBe(true); + expect(shortcutMatchesEvent( + { key: "+", code: "Equal", shiftKey: true }, + "Shift++", + "windows", + )).toBe(true); + expect(shortcutMatchesEvent( + { key: "+", code: "NumpadAdd", location: 3 }, + "NumpadAdd", + "windows", + )).toBe(true); + }); + + it("explicitly suppresses dangerous inherited bindings with no native equivalent", () => { + expect(getProfileActionBindings("pro_tools", "tools.splitTool", "windows")).toEqual([]); + expect(getProfileActionBindings("fl_studio", "transport.loop", "windows")).toEqual([]); + expect(getProfileActionBindings("fl_studio", "file.new", "macos")).toEqual([]); + expect(getProfileActionBindings("ableton_live", "tools.splitTool", "macos")).toEqual([]); + expect(getProfileActionBindings("ableton_live", "insert.marker", "windows")).toEqual([]); + expect(getProfileActionBindings("logic_pro", "tools.selectTool", "macos")).toEqual([]); + expect(getProfileActionBindings("logic_pro", "tools.splitTool", "macos")).toEqual([]); + expect(getProfileActionBindings("pro_tools", "track.toggleSelectedArm", "windows")).toEqual([]); + expect(getProfileActionBindings("pro_tools", "midi.tool.range", "macos")).toEqual([]); + expect(getProfileActionBindings("reaper", "track.toggleSelectedArm", "macos")).toEqual([]); + expect(getProfileActionBindings("reaper", "midi.tool.range", "windows")).toEqual([]); + expect(getProfileActionBindings("garageband", "edit.groupClips", "macos")).toEqual([]); + expect(getProfileActionBindings("garageband", "edit.nudgeLeftFine", "macos")).toEqual([]); + expect(getProfileActionBindings("garageband", "edit.nudgeRightFine", "windows")).toEqual([]); + expect(getProfileActionBindings("cakewalk_sonar", "tools.splitTool", "windows")).toEqual([]); + expect(getProfileActionBindings("cakewalk_sonar", "tools.muteTool", "windows")).toEqual([]); + expect(getProfileActionBindings("cakewalk_sonar", "edit.nudgeLeftFine", "windows")).toEqual([]); + expect(getProfileActionBindings("cakewalk_sonar", "edit.nudgeRightFine", "macos")).toEqual([]); + expect(getProfileActionBindings("cakewalk_sonar", "edit.editPitch", "windows")).toEqual([]); + for (const profileId of ["audacity", "logic_pro", "fl_studio", "bitwig_studio"] as const) { + expect(getProfileActionBindings(profileId, "track.toggleSelectedArm", "windows"), profileId).toEqual([]); + expect(getProfileActionBindings(profileId, "track.toggleSelectedArm", "macos"), profileId).toEqual([]); + expect(getProfileActionBindings(profileId, "midi.tool.range", "windows"), profileId).toEqual([]); + } + expect(getProfileActionBindings("cakewalk_sonar", "midi.tool.range", "windows")).toEqual([]); + expect(getProfileActionBindings("logic_pro", "edit.nudgeLeftFine", "macos")).toEqual([]); + expect(getProfileActionBindings("fl_studio", "view.drumEditor", "windows")).toEqual([]); + expect(getProfileActionBindings("cubase", "edit.muteClips", "macos")).toEqual([]); + expect(getProfileActionBindings("studio_one", "edit.muteClips", "windows")).toEqual([]); + expect(getProfileActionBindings("renoise", "transport.record", "windows")).toEqual([]); + }); + + it("uses strict fallback semantics for customizable or focus-dependent source maps", () => { + for (const profileId of ["digital_performer", "waveform", "renoise"] as const) { + expect(getKeyboardShortcutProfile(profileId).fallbackPolicy).toBe("strict"); + expect(getProfileActionBindings(profileId, "file.quit", "windows"), profileId).toEqual([]); + expect(getProfileActionBindings(profileId, "midi.tool.draw", "macos"), profileId).toEqual([]); + expect(getProfileActionBindings(profileId, "edit.delete", "windows"), profileId).toEqual([]); + } + + expect(getProfileActionBindings("waveform", "transport.play", "windows")).toEqual(["Space"]); + expect(getProfileActionBindings("waveform", "edit.splitAtCursor", "macos")).toEqual(["/"]); + expect(getProfileActionBindings("renoise", "midi.toggleStepInput", "windows")).toEqual([]); + expect(getProfileActionBindings("openstudio", "file.quit", "windows")).toBeUndefined(); + }); + + it("exposes strict-policy and cross-platform-emulation labels to selectors, guides, and print", () => { + for (const profileId of ["digital_performer", "waveform", "renoise"] as const) { + const presentation = getKeyboardShortcutProfilePresentation(profileId, "windows"); + expect(presentation.policyLabel, profileId).toContain("Strict profile"); + expect(presentation.policyLabel, profileId).toContain("stay unassigned"); + expect(presentation.description, profileId).toContain(presentation.availabilityLabel); + } + + const logicOnWindows = getKeyboardShortcutProfilePresentation("logic_pro", "windows"); + expect(logicOnWindows.isNativeSourcePlatform).toBe(false); + expect(logicOnWindows.optionLabel).toBe("Logic Pro (cross-platform emulation)"); + expect(logicOnWindows.availabilityLabel).toContain("Cross-platform emulation on Windows"); + + const mixcraftOnWindows = getKeyboardShortcutProfilePresentation("mixcraft", "windows"); + expect(mixcraftOnWindows.isNativeSourcePlatform).toBe(true); + expect(mixcraftOnWindows.optionLabel).toBe("Mixcraft"); + }); + + it.each([ + ["logic_pro", "insert.marker"], + ["logic_pro", "navigate.nextTransient"], + ["logic_pro", "view.loadScreenset1"], + ["fl_studio", "view.toggleUndoHistory"], + ["fl_studio", "file.closeProject"], + ["fl_studio", "view.clipProperties"], + ["fl_studio", "view.setLoopToSelection"], + ["garageband", "view.toggleMixer"], + ["garageband", "insert.quickAddInstrument"], + ["garageband", "midi.panic"], + ["garageband", "file.openSafeMode"], + ["ardour", "help.contextualHelp"], + ["ardour", "view.clipProperties"], + ["ardour", "track.deleteSelected"], + ["adobe_audition", "transport.record"], + ["adobe_audition", "insert.regionFromSelection"], + ["mixcraft", "file.quit"], + ["mixcraft", "edit.duplicateClips"], + ["mixcraft", "insert.markerNamed"], + ] as const)("unbinds the native collision %s / %s", (profileId, actionId) => { + expect(getProfileActionBindings(profileId, actionId, "macos")).toEqual([]); + expect(getProfileActionBindings(profileId, actionId, "windows")).toEqual([]); + }); + + it("keeps only exact existing-action remaps for audited profiles", () => { + expect(getProfileActionBindings("logic_pro", "track.toggleSelectedMute", "macos")).toEqual(["M"]); + expect(getProfileActionBindings("logic_pro", "view.togglePianoRoll", "windows")).toEqual(["P"]); + expect(getProfileActionBindings("logic_pro", "file.closeProject", "macos")).toEqual(["Command+Option+W"]); + expect(getProfileActionBindings("fl_studio", "midi.tool.draw", "windows")).toEqual(["P"]); + expect(getProfileActionBindings("fl_studio", "midi.tool.erase", "macos")).toEqual(["D"]); + expect(getProfileActionBindings("fl_studio", "midi.duplicateSelection", "windows")).toEqual(["Ctrl+B"]); + expect(getProfileActionBindings("fl_studio", "midi.glueSelectedNotes", "macos")).toEqual(["Ctrl+G"]); + expect(getProfileActionBindings("fl_studio", "view.togglePianoRoll", "windows")).toEqual(["F7"]); + expect(getProfileActionBindings("garageband", "track.deleteSelected", "macos")).toEqual(["Ctrl+Delete"]); + expect(getProfileActionBindings("garageband", "midi.movePitchOctaveUp", "macos")).toEqual(["Option+Shift+Up"]); + expect(getProfileActionBindings("garageband", "midi.deselectAll", "windows")).toEqual(["Shift+D"]); + expect(getProfileActionBindings("ardour", "navigate.prevTransient", "windows")).toEqual(["Ctrl+Left"]); + expect(getProfileActionBindings("ardour", "view.loadScreenset1", "macos")).toEqual(["F1"]); + expect(getProfileActionBindings("mixcraft", "track.deleteSelected", "windows")).toEqual(["Ctrl+Shift+D"]); + expect(getProfileActionBindings("mixcraft", "track.moveSelectedDown", "windows")).toEqual(["Ctrl+D"]); + expect(getProfileActionBindings("mixcraft", "midi.selectNextNote", "macos")).toEqual(["Tab"]); + expect(getProfileActionBindings("mixcraft", "options.preferences", "macos")).toEqual(["Ctrl+Alt+P"]); + expect(getProfileActionBindings("adobe_audition", "view.verticalZoomIn", "macos")).toEqual(["Option+="]); + }); + + it("falls back safely for persisted unknown profile IDs", () => { + expect(getKeyboardShortcutProfile("removed-profile").id).toBe("openstudio"); + }); + + it("does not introduce same-scope effective shortcut collisions", () => { + const actions = getRegisteredActions(); + const conditionsOverlap = (left?: string, right?: string) => { + if (!left || left === "always" || !right || right === "always" || left === right) return true; + return !new Set([ + "step_input_disabled|step_input_enabled", + "step_input_enabled|step_input_disabled", + "transport_running|transport_stopped", + "transport_stopped|transport_running", + ]).has(`${left}|${right}`); + }; + + for (const platform of ["macos", "windows"] as const) { + for (const profile of KEYBOARD_SHORTCUT_PROFILES) { + const seen = new Map(); + for (const action of actions) { + const profileBindings = getProfileActionBindings(profile.id, action.id, platform); + const bindings = profileBindings ?? [action.shortcut, ...(action.shortcutAliases ?? [])] + .filter((binding): binding is string => typeof binding === "string" && !binding.includes("(")); + for (const scope of getActionShortcutScopes(action, profile.id)) { + for (const binding of bindings) { + const signature = shortcutBindingEventSignature(binding, platform); + expect(signature, `${profile.id}/${platform}: unreachable ${binding}`).toBeTruthy(); + if (!signature) continue; + const key = `${scope}:${signature}`; + const previous = seen.get(key); + if (previous && conditionsOverlap(previous.condition, action.shortcutWhen)) { + throw new Error(`${profile.id}/${platform} ${key}: ${previous.actionId} conflicts with ${action.id}`); + } + seen.set(key, { actionId: action.id, condition: action.shortcutWhen }); + } + } + } + } + } + }); + + it("keeps profile-global R Record reachable from every surface", () => { + const actions = getRegisteredActions(); + const recordProfiles = [ + "audacity", + "logic_pro", + "fl_studio", + "bitwig_studio", + "cakewalk_sonar", + "garageband", + ] as const; + for (const platform of ["macos", "windows"] as const) { + for (const profileId of recordProfiles) { + const recordBindings = getProfileActionBindings(profileId, "transport.record", platform) ?? []; + expect(recordBindings, `${profileId}/${platform}`).toContain("R"); + const shadows: string[] = []; + for (const action of actions) { + if (getActionShortcutScopes(action, profileId).includes("global")) continue; + const localBindings = getProfileActionBindings(profileId, action.id, platform) + ?? [action.shortcut, ...(action.shortcutAliases ?? [])] + .filter((binding): binding is string => typeof binding === "string" && !binding.includes("(")); + for (const recordBinding of recordBindings) { + const recordSignature = shortcutBindingEventSignature(recordBinding, platform); + if (recordSignature && localBindings.some( + (binding) => shortcutBindingEventSignature(binding, platform) === recordSignature, + )) { + shadows.push(action.id); + } + } + } + expect(shadows, `${profileId}/${platform}`).toEqual([]); + } + } + }); +}); diff --git a/frontend/src/__tests__/shortcutRegistry.test.ts b/frontend/src/__tests__/shortcutRegistry.test.ts index f26470c..0fed0eb 100644 --- a/frontend/src/__tests__/shortcutRegistry.test.ts +++ b/frontend/src/__tests__/shortcutRegistry.test.ts @@ -8,7 +8,7 @@ import { import { useDAWStore } from "../store/useDAWStore"; afterEach(() => { - useDAWStore.setState({ customShortcuts: {} }); + useDAWStore.setState({ customShortcuts: {}, keyboardShortcutProfileId: "openstudio" }); }); describe("shortcut registry", () => { @@ -41,6 +41,47 @@ describe("shortcut registry", () => { expect(getEffectiveActionShortcut("view.toggleMixer")).toBe("Ctrl+Shift+M"); }); + it("exposes the metronome as a profileable global action", () => { + const metronomeAction = getRegisteredAction("transport.metronome"); + expect(metronomeAction).toMatchObject({ + name: "Toggle Metronome", + shortcut: "K", + shortcutScope: "global", + }); + }); + + it("exposes pause-in-place for custom and imported profiles", () => { + expect(getRegisteredAction("transport.pause")).toMatchObject({ + name: "Pause in Place", + shortcutScope: "global", + shortcutWhen: "transport_running", + }); + }); + + it("uses the selected profile between custom overrides and registry defaults", () => { + expect(getActionShortcut("transport.rewind")).toBe("Home"); + + useDAWStore.setState({ + keyboardShortcutProfileId: "reaper", + customShortcuts: {}, + }); + expect(getEffectiveActionShortcut("transport.rewind")).toBe("W"); + + useDAWStore.setState({ customShortcuts: { "transport.rewind": "Ctrl+Home" } }); + expect(getEffectiveActionShortcut("transport.rewind")).toBe("Ctrl+Home"); + }); + + it("preserves an intentional profile unbind instead of displaying the factory shortcut", () => { + expect(getActionShortcut("tools.splitTool")).toBe("B"); + + useDAWStore.setState({ + keyboardShortcutProfileId: "pro_tools", + customShortcuts: {}, + }); + + expect(getEffectiveActionShortcut("tools.splitTool")).toBe(""); + }); + it("has no duplicate global shortcut assignments", () => { expect(getGlobalShortcutConflicts()).toEqual([]); }); diff --git a/frontend/src/__tests__/sliderProfileWheelIntegration.test.ts b/frontend/src/__tests__/sliderProfileWheelIntegration.test.ts new file mode 100644 index 0000000..4c7a20e --- /dev/null +++ b/frontend/src/__tests__/sliderProfileWheelIntegration.test.ts @@ -0,0 +1,106 @@ +import { afterEach, describe, expect, it } from "vitest"; +import { getSliderWheelSubtarget } from "../components/ui/Slider/Slider"; +import { useDAWStore } from "../store/useDAWStore"; +import { resolveProfiledParameterWheel } from "../utils/parameterWheel"; +import { getShortcutPlatform } from "../utils/platform"; +import sliderSource from "../components/ui/Slider/Slider.tsx?raw"; +import knobSource from "../components/ui/Knob/Knob.tsx?raw"; +import { + beginEditTransaction, + commitEditTransaction, + createEditTransactionLifecycle, +} from "../components/ui/editTransactionLifecycle"; + +const originalMouseProfile = useDAWStore.getState().mouseBehaviorProfileId; + +function hostPrimaryModifier(): { ctrlKey: true } | { metaKey: true } { + return getShortcutPlatform() === "macos" ? { metaKey: true } : { ctrlKey: true }; +} + +afterEach(() => { + useDAWStore.setState({ mouseBehaviorProfileId: originalMouseProfile }); +}); + +describe("profiled Slider wheel routing", () => { + it("captures an edit's original commit and ends cancel/lost-capture races exactly once", () => { + const events: string[] = []; + const lifecycle = createEditTransactionLifecycle(); + expect(beginEditTransaction( + lifecycle, + () => events.push("begin"), + () => events.push("original commit"), + )).toBe(true); + expect(beginEditTransaction( + lifecycle, + () => events.push("duplicate begin"), + () => events.push("replacement commit"), + )).toBe(false); + expect(commitEditTransaction(lifecycle)).toBe(true); + expect(commitEditTransaction(lifecycle)).toBe(false); + expect(events).toEqual(["begin", "original commit"]); + }); + + it("captures the commit callback at wheel begin and keeps cleanup identity stable", () => { + for (const source of [sliderSource, knobSource]) { + expect(source).toContain("const wheelCommitCallbackRef = useRef"); + expect(source).toContain("wheelCommitCallbackRef.current = onCommitEdit"); + expect(source).toContain("const commitWheelEdit = useCallback(() => {"); + expect(source).toContain("}, []);"); + expect(source).toContain("createWheelDeltaAccumulator({"); + expect(source).toContain("onReset: () => commitWheelEditRef.current()"); + expect(source).toContain("accumulator.dispose()"); + expect(source).not.toContain("wheelCommitTimerRef"); + } + expect(sliderSource).toContain("onKeyDown={handleTransactionalKeyDown}"); + expect(sliderSource).not.toContain("onKeyDown={onKeyDown}"); + }); + + it("routes pointer drags, cancellation, resets, and cleanup through transactions", () => { + expect(sliderSource).toContain("const applyDiscreteValue = useCallback"); + expect(sliderSource).toContain("applyDiscreteValue(defaultValue)"); + expect(sliderSource).toContain("beginEditTransaction(pointerEditRef.current, onBeginEdit, onCommitEdit)"); + expect(sliderSource).toContain("onPointerCancel={handlePanPointerEnd}"); + expect(sliderSource).toContain("onLostPointerCapture={handlePanPointerEnd}"); + expect(sliderSource).toContain("useEffect(() => () => commitPointerEdit(), [commitPointerEdit])"); + expect(sliderSource).not.toContain("document.addEventListener('mouseup'"); + + expect(knobSource).toContain("beginEditTransaction(dragEditRef.current, onBeginEdit, onCommitEdit)"); + expect(knobSource).toContain("onPointerCancel={handlePointerCancel}"); + expect(knobSource).toContain("onLostPointerCapture={handlePointerCancel}"); + expect(knobSource).toContain("useEffect(() => () => commitDragEdit(), [commitDragEdit])"); + }); + + it("opts only vertical faders into the console-fader hit target", () => { + expect(getSliderWheelSubtarget("vertical", "fader")).toBe("console_fader"); + expect(getSliderWheelSubtarget("horizontal", "fader")).toBe("control"); + expect(getSliderWheelSubtarget("vertical", "default")).toBe("control"); + expect(getSliderWheelSubtarget("horizontal", "pan")).toBe("control"); + }); + + it("makes Cakewalk plain/fine fader adjustment reachable and suppresses unsafe group edits", () => { + useDAWStore.setState({ mouseBehaviorProfileId: "cakewalk_sonar" }); + const subtarget = getSliderWheelSubtarget("vertical", "fader"); + const resolve = (modifiers: { ctrlKey?: boolean; metaKey?: boolean; shiftKey?: boolean }) => ( + resolveProfiledParameterWheel({ ...modifiers, deltaY: -120 }, subtarget) + ); + + expect(resolve({})).toMatchObject({ + ruleId: "cakewalk-sonar.console-fader", + operation: "adjust", + precision: "normal", + }); + expect(resolve({ shiftKey: true })).toMatchObject({ + ruleId: "cakewalk-sonar.console-fader-fine", + operation: "adjust", + precision: "fine", + }); + expect(resolve(hostPrimaryModifier())).toMatchObject({ + ruleId: "cakewalk-sonar.console-all-faders", + operation: "suppress", + }); + expect(resolve({ ...hostPrimaryModifier(), shiftKey: true })).toMatchObject({ + ruleId: "cakewalk-sonar.console-selected-faders", + operation: "suppress", + }); + }); +}); diff --git a/frontend/src/__tests__/takeExplodeImplodeSemantics.test.ts b/frontend/src/__tests__/takeExplodeImplodeSemantics.test.ts new file mode 100644 index 0000000..1876e48 --- /dev/null +++ b/frontend/src/__tests__/takeExplodeImplodeSemantics.test.ts @@ -0,0 +1,316 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { nativeBridge } from "../services/NativeBridge"; +import { + executeAvailableRegisteredAction, + getRegisteredAction, +} from "../store/actionRegistry"; +import { commandManager } from "../store/commands"; +import { + createDefaultTrack, + type AudioClip, + useDAWStore, +} from "../store/useDAWStore"; + +const originalState = useDAWStore.getState(); + +function audioClip(id: string, overrides: Partial = {}): AudioClip { + return { + id, + filePath: `C:/takes/${id}.wav`, + name: id, + startTime: 1, + duration: 2, + offset: 0, + color: "#38bdf8", + volumeDB: 0, + fadeIn: 0, + fadeOut: 0, + gainEnvelope: [{ time: 0.25, gain: 0.75 }], + ...overrides, + }; +} + +beforeEach(() => { + commandManager.clear(); + vi.spyOn(nativeBridge, "addTrack").mockImplementation(async (id) => id || "generated-track"); + vi.spyOn(nativeBridge, "removeTrack").mockResolvedValue(true); + vi.spyOn(nativeBridge, "reorderTrack").mockResolvedValue(true); + useDAWStore.setState((state) => ({ + tracks: [], + selectedClipId: null, + selectedClipIds: [], + selectedTrackId: null, + selectedTrackIds: [], + lastSelectedTrackId: null, + globalLocked: false, + lockSettings: { ...state.lockSettings, items: false }, + syncClipsWithBackend: vi.fn(async () => undefined), + canUndo: false, + canRedo: false, + })); +}); + +afterEach(() => { + vi.restoreAllMocks(); + commandManager.clear(); + useDAWStore.setState(originalState); +}); + +describe("take explode/implode transactions", () => { + it("explodes nested takes to stable new tracks with one undo and exact backend replay", async () => { + const nested = audioClip("nested", { + startTime: 99, + gainEnvelope: [{ time: 0.5, gain: 0.4 }], + }); + const take = audioClip("take", { + startTime: 50, + gainEnvelope: [{ time: 0.25, gain: 0.6 }], + takes: [nested], + }); + const source = audioClip("source", { startTime: 7, takes: [take], activeTakeIndex: 0 }); + const track = createDefaultTrack("source-track", "Vocals", "#123456", "audio", []); + track.clips = [source]; + useDAWStore.setState({ + tracks: [track], + selectedClipId: source.id, + selectedClipIds: [source.id], + selectedTrackId: track.id, + selectedTrackIds: [track.id], + lastSelectedTrackId: track.id, + }); + + const action = getRegisteredAction("edit.explodeTakes")!; + expect(action.canHandleShortcut?.()).toBe(true); + action.execute(); + + await vi.waitFor(() => expect(useDAWStore.getState().tracks).toHaveLength(3)); + + let state = useDAWStore.getState(); + expect(state.tracks).toHaveLength(3); + expect(state.tracks[0].clips[0].takes).toBeUndefined(); + expect(state.tracks.slice(1).map((entry) => entry.type)).toEqual(["audio", "audio"]); + expect(state.tracks.slice(1).map((entry) => entry.clips[0].startTime)).toEqual([7, 7]); + expect(state.tracks.slice(1).map((entry) => entry.clips[0].filePath)).toEqual([ + take.filePath, + nested.filePath, + ]); + expect(state.tracks.slice(1).every((entry) => !entry.clips[0].takes)).toBe(true); + expect(state.tracks[1].clips[0].id).not.toBe(take.id); + expect(state.tracks[1].clips[0].gainEnvelope).not.toBe(take.gainEnvelope); + expect(commandManager.getUndoStack()).toHaveLength(1); + const explodedTrackIds = state.tracks.slice(1).map((entry) => entry.id); + const explodedClipIds = state.tracks.slice(1).map((entry) => entry.clips[0].id); + + take.gainEnvelope![0].gain = 9; + expect(useDAWStore.getState().tracks[1].clips[0].gainEnvelope![0].gain).toBe(0.6); + + const sync = state.syncClipsWithBackend as ReturnType; + await vi.waitFor(() => expect(sync).toHaveBeenCalledTimes(1)); + expect(nativeBridge.addTrack).toHaveBeenCalledTimes(2); + expect(nativeBridge.reorderTrack).toHaveBeenCalledTimes(2); + + state.undo(); + state = useDAWStore.getState(); + expect(state.tracks).toHaveLength(1); + expect(state.tracks[0].clips[0].takes?.map((entry) => entry.id)).toEqual(["take"]); + expect(state.tracks[0].clips[0].takes?.[0].takes?.[0].id).toBe("nested"); + expect(state.selectedClipIds).toEqual([source.id]); + expect(commandManager.getUndoStack()).toHaveLength(0); + await vi.waitFor(() => expect(nativeBridge.removeTrack).toHaveBeenCalledTimes(2)); + expect(sync).toHaveBeenCalledTimes(2); + + state.redo(); + await vi.waitFor(() => expect(useDAWStore.getState().tracks).toHaveLength(3)); + state = useDAWStore.getState(); + expect(state.tracks.slice(1).map((entry) => entry.id)).toEqual(explodedTrackIds); + expect(state.tracks.slice(1).map((entry) => entry.clips[0].id)).toEqual(explodedClipIds); + await vi.waitFor(() => expect(sync).toHaveBeenCalledTimes(3)); + expect(nativeBridge.addTrack).toHaveBeenCalledTimes(4); + expect(commandManager.getUndoStack()).toHaveLength(1); + }); + + it("rolls back a partial native track failure without frontend state or history", async () => { + const source = audioClip("source", { + takes: [audioClip("take-one"), audioClip("take-two")], + }); + const track = createDefaultTrack("source-track", "Vocals", "#123456", "audio", []); + track.clips = [source]; + useDAWStore.setState({ + tracks: [track], + selectedClipId: source.id, + selectedClipIds: [source.id], + }); + vi.mocked(nativeBridge.addTrack) + .mockImplementationOnce(async (id) => id || "generated-track") + .mockRejectedValueOnce(new Error("second native track failed")); + + await useDAWStore.getState().explodeTakes(source.id); + + const state = useDAWStore.getState(); + expect(state.tracks).toHaveLength(1); + expect(state.tracks[0].clips[0].takes?.map((take) => take.id)).toEqual([ + "take-one", + "take-two", + ]); + expect(nativeBridge.removeTrack).toHaveBeenCalledTimes(1); + expect(nativeBridge.removeTrack).toHaveBeenCalledWith( + vi.mocked(nativeBridge.addTrack).mock.calls[0][0], + ); + expect(nativeBridge.reorderTrack).not.toHaveBeenCalled(); + expect((state.syncClipsWithBackend as ReturnType)).not.toHaveBeenCalled(); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it("removes provisioned tracks and restores the source when playback sync fails", async () => { + const source = audioClip("source", { takes: [audioClip("take")] }); + const track = createDefaultTrack("source-track", "Vocals", "#123456", "audio", []); + track.clips = [source]; + const sync = vi.fn() + .mockRejectedValueOnce(new Error("clip sync failed")) + .mockResolvedValueOnce(undefined); + useDAWStore.setState({ + tracks: [track], + selectedClipId: source.id, + selectedClipIds: [source.id], + syncClipsWithBackend: sync, + }); + + await useDAWStore.getState().explodeTakes(source.id); + + expect(useDAWStore.getState().tracks).toHaveLength(1); + expect(useDAWStore.getState().tracks[0].clips[0].takes?.[0].id).toBe("take"); + expect(nativeBridge.addTrack).toHaveBeenCalledTimes(1); + expect(nativeBridge.removeTrack).toHaveBeenCalledTimes(1); + expect(sync).toHaveBeenCalledTimes(2); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it("implodes eligible clips without losing existing/nested takes and replays one backend command", async () => { + const mainExisting = audioClip("main-existing", { + gainEnvelope: [{ time: 0.1, gain: 0.2 }], + }); + const main = audioClip("main", { takes: [mainExisting], activeTakeIndex: 0 }); + const secondaryNested = audioClip("secondary-nested", { + gainEnvelope: [{ time: 0.2, gain: 0.3 }], + }); + const secondary = audioClip("secondary", { + startTime: 4, + takes: [secondaryNested], + gainEnvelope: [{ time: 0.3, gain: 0.4 }], + }); + const locked = audioClip("locked", { startTime: 8, locked: true }); + const firstTrack = createDefaultTrack("first", "First", "#111111", "audio", []); + const secondTrack = createDefaultTrack("second", "Second", "#222222", "audio", []); + const lockedTrack = createDefaultTrack("locked-track", "Locked", "#333333", "audio", []); + firstTrack.clips = [main]; + secondTrack.clips = [secondary]; + lockedTrack.clips = [locked]; + useDAWStore.setState({ + tracks: [firstTrack, secondTrack, lockedTrack], + selectedClipId: secondary.id, + selectedClipIds: [main.id, secondary.id, locked.id], + }); + + const action = getRegisteredAction("edit.implodeTakes")!; + expect(action.canHandleShortcut?.()).toBe(true); + action.execute(); + + let state = useDAWStore.getState(); + const result = state.tracks[0].clips[0]; + expect(result.takes?.map((take) => take.id)).toEqual([ + "main-existing", + "secondary", + "secondary-nested", + ]); + expect(state.tracks[1].clips).toEqual([]); + expect(state.tracks[2].clips.map((clip) => clip.id)).toEqual([locked.id]); + expect(state.selectedClipId).toBe(main.id); + expect(state.selectedClipIds).toEqual([main.id, locked.id]); + expect(result.takes?.[1].gainEnvelope).not.toBe(secondary.gainEnvelope); + expect(commandManager.getUndoStack()).toHaveLength(1); + const takeIds = result.takes!.map((take) => take.id); + + secondary.gainEnvelope![0].gain = 8; + expect(useDAWStore.getState().tracks[0].clips[0].takes?.[1].gainEnvelope?.[0].gain).toBe(0.4); + + const sync = state.syncClipsWithBackend as ReturnType; + await vi.waitFor(() => expect(sync).toHaveBeenCalledTimes(1)); + expect(nativeBridge.addTrack).not.toHaveBeenCalled(); + expect(nativeBridge.removeTrack).not.toHaveBeenCalled(); + + state.undo(); + state = useDAWStore.getState(); + expect(state.tracks[1].clips.map((clip) => clip.id)).toEqual([secondary.id]); + expect(state.tracks[0].clips[0].takes?.map((take) => take.id)).toEqual([mainExisting.id]); + expect(state.selectedClipId).toBe(secondary.id); + expect(state.selectedClipIds).toEqual([main.id, secondary.id, locked.id]); + await vi.waitFor(() => expect(sync).toHaveBeenCalledTimes(2)); + + state.redo(); + state = useDAWStore.getState(); + expect(state.tracks[0].clips[0].takes?.map((take) => take.id)).toEqual(takeIds); + expect(state.tracks[1].clips).toEqual([]); + await vi.waitFor(() => expect(sync).toHaveBeenCalledTimes(3)); + expect(commandManager.getUndoStack()).toHaveLength(1); + }); + + it("claims but does not mutate when take actions are ineligible or locked", () => { + const source = audioClip("source", { takes: [audioClip("take")] }); + const second = audioClip("second", { startTime: 5 }); + const track = createDefaultTrack("track", "Track", "#111111", "audio", []); + track.clips = [source, second]; + useDAWStore.setState({ + tracks: [track], + selectedClipId: source.id, + selectedClipIds: [source.id, second.id], + }); + const explode = getRegisteredAction("edit.explodeTakes")!; + const implode = getRegisteredAction("edit.implodeTakes")!; + + expect(explode.canHandleShortcut?.()).toBe(false); + expect(executeAvailableRegisteredAction(explode.id)).toBe("claimed_noop"); + expect(implode.canHandleShortcut?.()).toBe(true); + + useDAWStore.setState((state) => ({ + globalLocked: true, + lockSettings: { ...state.lockSettings, items: false }, + })); + expect(implode.canHandleShortcut?.()).toBe(false); + expect(executeAvailableRegisteredAction(implode.id)).toBe("claimed_noop"); + useDAWStore.getState().implodeTakes([source.id, second.id]); + + useDAWStore.setState((state) => ({ + globalLocked: false, + lockSettings: { ...state.lockSettings, items: true }, + })); + useDAWStore.getState().explodeTakes(source.id); + + useDAWStore.setState((state) => ({ + lockSettings: { ...state.lockSettings, items: false }, + tracks: state.tracks.map((candidate) => candidate.id === track.id + ? { + ...candidate, + frozen: true, + clips: candidate.clips.map((clip) => clip.id === second.id + ? { ...clip, locked: true } + : clip), + } + : candidate), + selectedClipId: source.id, + selectedClipIds: [source.id], + })); + expect(explode.canHandleShortcut?.()).toBe(false); + useDAWStore.getState().explodeTakes(source.id); + useDAWStore.setState({ selectedClipIds: [source.id, second.id] }); + expect(implode.canHandleShortcut?.()).toBe(false); + useDAWStore.getState().implodeTakes([source.id, second.id]); + + expect(commandManager.getUndoStack()).toHaveLength(0); + expect(useDAWStore.getState().tracks[0].clips.map((clip) => clip.id)).toEqual([ + source.id, + second.id, + ]); + expect(nativeBridge.addTrack).not.toHaveBeenCalled(); + expect((useDAWStore.getState().syncClipsWithBackend as ReturnType)).not.toHaveBeenCalled(); + }); +}); diff --git a/frontend/src/__tests__/tempoMarkerActionSemantics.test.ts b/frontend/src/__tests__/tempoMarkerActionSemantics.test.ts new file mode 100644 index 0000000..d440fad --- /dev/null +++ b/frontend/src/__tests__/tempoMarkerActionSemantics.test.ts @@ -0,0 +1,92 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { nativeBridge } from "../services/NativeBridge"; +import { commandManager } from "../store/commands"; +import { useDAWStore } from "../store/useDAWStore"; + +const originalState = useDAWStore.getState(); + +beforeEach(() => { + commandManager.clear(); + vi.spyOn(nativeBridge, "setTempoMarkers").mockResolvedValue(true); + vi.spyOn(nativeBridge, "clearTempoMarkers").mockResolvedValue(true); + useDAWStore.setState({ + tempoMarkers: [], + globalLocked: false, + lockSettings: { items: false, envelopes: false, timeSelection: false, markers: false }, + canUndo: false, + canRedo: false, + }); +}); +afterEach(() => { + vi.restoreAllMocks(); + commandManager.clear(); + useDAWStore.setState(originalState); +}); + +describe("tempo marker transactions", () => { + it("adds, updates, removes, undoes, and redoes stable IDs with exact backend sync", () => { + useDAWStore.getState().addTempoMarker(-2, 500); + let state = useDAWStore.getState(); + const markerId = state.tempoMarkers[0].id; + expect(state.tempoMarkers).toEqual([{ id: markerId, time: 0, tempo: 300 }]); + expect(nativeBridge.setTempoMarkers).toHaveBeenLastCalledWith([ + { id: markerId, time: 0, tempo: 300 }, + ]); + expect(commandManager.getUndoStack()).toHaveLength(1); + + state.undo(); + expect(useDAWStore.getState().tempoMarkers).toEqual([]); + expect(nativeBridge.clearTempoMarkers).toHaveBeenCalled(); + state = useDAWStore.getState(); + state.redo(); + expect(useDAWStore.getState().tempoMarkers[0].id).toBe(markerId); + + commandManager.clear(); + useDAWStore.getState().updateTempoMarker(markerId, { time: 4, tempo: 5 }); + expect(useDAWStore.getState().tempoMarkers).toEqual([ + { id: markerId, time: 4, tempo: 10 }, + ]); + expect(commandManager.getUndoStack()).toHaveLength(1); + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tempoMarkers[0]).toEqual({ id: markerId, time: 0, tempo: 300 }); + + commandManager.clear(); + useDAWStore.getState().removeTempoMarker(markerId); + expect(useDAWStore.getState().tempoMarkers).toEqual([]); + expect(commandManager.getUndoStack()).toHaveLength(1); + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tempoMarkers[0].id).toBe(markerId); + }); + + it("rejects invalid, missing, unchanged, and locked mutations without sync or history", () => { + useDAWStore.getState().addTempoMarker(Number.NaN, 120); + useDAWStore.getState().addTempoMarker(1, Number.POSITIVE_INFINITY); + useDAWStore.getState().removeTempoMarker("missing"); + expect(useDAWStore.getState().tempoMarkers).toEqual([]); + expect(commandManager.getUndoStack()).toHaveLength(0); + expect(nativeBridge.setTempoMarkers).not.toHaveBeenCalled(); + + useDAWStore.getState().addTempoMarker(1, 120); + const marker = useDAWStore.getState().tempoMarkers[0]; + commandManager.clear(); + vi.mocked(nativeBridge.setTempoMarkers).mockClear(); + useDAWStore.getState().updateTempoMarker(marker.id, { time: 1, tempo: 120 }); + useDAWStore.getState().updateTempoMarker(marker.id, { time: Number.NaN }); + expect(commandManager.getUndoStack()).toHaveLength(0); + expect(nativeBridge.setTempoMarkers).not.toHaveBeenCalled(); + + useDAWStore.setState({ globalLocked: true }); + useDAWStore.getState().removeTempoMarker(marker.id); + useDAWStore.getState().updateTempoMarker(marker.id, { tempo: 140 }); + useDAWStore.getState().addTempoMarker(2, 140); + expect(useDAWStore.getState().tempoMarkers).toEqual([marker]); + + useDAWStore.setState({ + globalLocked: false, + lockSettings: { items: false, envelopes: false, timeSelection: false, markers: true }, + }); + useDAWStore.getState().removeTempoMarker(marker.id); + expect(useDAWStore.getState().tempoMarkers).toEqual([marker]); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); +}); diff --git a/frontend/src/__tests__/timelineClipContextMenuIntegration.test.ts b/frontend/src/__tests__/timelineClipContextMenuIntegration.test.ts new file mode 100644 index 0000000..093d733 --- /dev/null +++ b/frontend/src/__tests__/timelineClipContextMenuIntegration.test.ts @@ -0,0 +1,97 @@ +import { describe, expect, it } from "vitest"; +import timelineSource from "../components/Timeline.tsx?raw"; + +function sourceBetween(start: string, end: string): string { + const startIndex = timelineSource.indexOf(start); + const endIndex = timelineSource.indexOf(end, startIndex + start.length); + expect(startIndex).toBeGreaterThanOrEqual(0); + expect(endIndex).toBeGreaterThan(startIndex); + return timelineSource.slice(startIndex, endIndex); +} + +describe("timeline clip context-menu integration", () => { + it("rejects secondary mouse buttons before either clip tool can act", () => { + const guard = "if ((e.evt?.button ?? 0) !== 0) return;"; + const splitCheck = 'if (toolModeRef.current === "split")'; + const audioMouseDown = sourceBetween( + "const handleMouseDown = (e: KonvaEvent) => {", + "const handleDragMoveModified = (e: KonvaEvent) => {", + ); + const midiMouseDown = sourceBetween( + "const handleMIDIClipMouseDown = (e: KonvaEvent) => {", + "const handleMIDIClipClick = (e: KonvaEvent) => {", + ); + + for (const handler of [audioMouseDown, midiMouseDown]) { + expect(handler).toContain(guard); + expect(handler.indexOf(guard)).toBeLessThan(handler.indexOf(splitCheck)); + } + }); + + it("rejects synthesized secondary-button clicks before clip or stage actions", () => { + const guard = "if ((e.evt?.button ?? 0) !== 0) return;"; + const audioClick = sourceBetween( + "const handleClipClick = (e: KonvaEvent) => {", + "const handleDragStart =", + ); + const midiClick = sourceBetween( + "const handleMIDIClipClick = (e: KonvaEvent) => {", + "const handleMIDIClipDoubleClick =", + ); + const mainStagePrelude = sourceBetween( + "{/* Main Timeline Stage */}", + "onContextMenu={(e: KonvaEvent) => {", + ); + + expect(audioClick.indexOf(guard)).toBeLessThan( + audioClick.indexOf("resolveLiveMouseModifierAction"), + ); + expect(midiClick.indexOf(guard)).toBeLessThan(midiClick.indexOf("selectClip")); + expect(mainStagePrelude.match(/if \(\(e\.evt\?\.button \?\? 0\) !== 0\) return;/g)).toHaveLength(2); + }); + + it("routes modified clip clicks through the selected semantic profile action", () => { + const audioClick = sourceBetween( + "const handleClipClick = (e: KonvaEvent) => {", + "const handleDragStart = (e: KonvaEvent) => {", + ); + const audioMouseDown = sourceBetween( + "const handleMouseDown = (e: KonvaEvent) => {", + "// Modified drag move to handle resize", + ); + + expect(audioClick).toContain('resolveLiveMouseModifierAction(e.evt || {}, "clip_drag")'); + expect(audioMouseDown).toContain('modifierAction === "constrain"'); + expect(audioMouseDown).toContain("axisLockRequested:"); + expect(timelineSource).not.toContain("suppressShiftGainClickRef"); + }); + + it("routes all clip context entry points through shared selection and snapped-time capture", () => { + expect(timelineSource).toContain("shouldPreserveClipContextSelection(selection"); + expect(timelineSource).toContain("selectedClipIds: [options.clipId]"); + expect(timelineSource).toContain("selectedTrackId: null"); + expect(timelineSource).toContain("selectedTrackIds: []"); + expect(timelineSource.match(/openTimelineClipContextMenu\(\{/g)).toHaveLength(3); + expect(timelineSource).toContain( + "time: resolveTimelinePointerSplitTime(options.stageX, options.ctrlBypass)", + ); + expect(timelineSource).toContain("if (isSnapActive(ctrlBypass))"); + expect(timelineSource).toContain("splitTime = snapTimelineTime(splitTime, splitTime)"); + }); + + it("offers split here and split at the current playhead as submenu choices", () => { + const menuSource = sourceBetween( + "const buildClipContextMenuItems =", + 'className="timeline-container', + ); + + expect(menuSource).toContain('label: "Split"'); + expect(menuSource).toContain('label: "Here"'); + expect(menuSource).toContain('label: "At Playhead"'); + expect(menuSource).toContain('shortcut: shortcut("edit.splitAtCursor", "S")'); + expect(menuSource).toContain("st.splitMIDIClipAtPosition(menu.clipId, splitTime)"); + expect(menuSource).toContain("st.splitClipAtPosition(menu.clipId, splitTime)"); + expect(menuSource).toContain("useDAWStore.getState().splitClipAtPlayhead()"); + expect(menuSource).not.toContain('label: "Split at Cursor"'); + }); +}); diff --git a/frontend/src/__tests__/timelineClipContextSelection.test.ts b/frontend/src/__tests__/timelineClipContextSelection.test.ts new file mode 100644 index 0000000..9d188b6 --- /dev/null +++ b/frontend/src/__tests__/timelineClipContextSelection.test.ts @@ -0,0 +1,32 @@ +import { describe, expect, it } from "vitest"; +import { shouldPreserveClipContextSelection } from "../utils/timelineClipContextSelection"; + +describe("timeline clip context-menu selection", () => { + it("preserves a multi-clip selection for a selected member", () => { + expect(shouldPreserveClipContextSelection({ + selectedClipIds: ["one", "two"], + selectedTrackIds: [], + }, "two", "track-b")).toBe(true); + }); + + it("preserves selected tracks when no clips are selected", () => { + expect(shouldPreserveClipContextSelection({ + selectedClipIds: [], + selectedTrackIds: ["track-a", "track-b"], + }, "unselected-clip", "track-b")).toBe(true); + }); + + it("selects an anchor outside the active clip or track scope", () => { + expect(shouldPreserveClipContextSelection({ + selectedClipIds: ["one", "two"], + selectedTrackIds: ["track-a", "track-b"], + }, "outside", "track-c")).toBe(false); + }); + + it("does not let a selected track override an active clip selection", () => { + expect(shouldPreserveClipContextSelection({ + selectedClipIds: ["one"], + selectedTrackIds: ["track-b"], + }, "outside", "track-b")).toBe(false); + }); +}); diff --git a/frontend/src/__tests__/timelineClipEdgeSnap.test.ts b/frontend/src/__tests__/timelineClipEdgeSnap.test.ts new file mode 100644 index 0000000..f41ebe0 --- /dev/null +++ b/frontend/src/__tests__/timelineClipEdgeSnap.test.ts @@ -0,0 +1,287 @@ +import { describe, expect, it } from "vitest"; +import { + clampTimelineClipGroupDelta, + isTimelineClipEdgeSnapMode, + resolveTimelineClipEdgeSnap, + snapshotTimelineClipGeometry, + shouldBypassTimelineDragSnap, + shouldStartTimelineCopyDrag, + type TimelineClipSnapShape, +} from "../utils/timelineClipEdgeSnap"; + +const viewport = { + startTime: 0, + endTime: 20, + visibleTrackIndices: [0, 1, 2], +}; + +const shape = ( + clipId: string, + startTime: number, + duration: number, + trackIndex = 0, +): TimelineClipSnapShape => ({ clipId, startTime, duration, trackIndex }); + +describe("timeline clip edge snapping", () => { + it("snapshots both audio and MIDI geometry at drag start", () => { + const audioClip = { id: "audio", startTime: 1, duration: 2, locked: false }; + const midiClip = { id: "midi", startTime: 4, duration: 3, locked: true }; + const snapshot = snapshotTimelineClipGeometry([{ + clips: [audioClip], + midiClips: [midiClip], + }]); + + audioClip.startTime = 99; + midiClip.duration = 99; + + expect(snapshot).toEqual([ + shape("audio", 1, 2), + shape("midi", 4, 3), + ]); + }); + + it("treats Ctrl as copy rather than snap bypass once copy-drag is established", () => { + expect(shouldBypassTimelineDragSnap(true, true)).toBe(false); + expect(shouldBypassTimelineDragSnap(true, false)).toBe(true); + expect(shouldBypassTimelineDragSnap(false, true)).toBe(false); + expect(shouldBypassTimelineDragSnap(false, false)).toBe(false); + }); + + it("starts copy-drag only for an unlocked move gesture", () => { + expect(shouldStartTimelineCopyDrag(true, "move", false)).toBe(true); + expect(shouldStartTimelineCopyDrag(false, "move", false)).toBe(false); + expect(shouldStartTimelineCopyDrag(true, "resize-left", false)).toBe(false); + expect(shouldStartTimelineCopyDrag(true, "resize-right", false)).toBe(false); + expect(shouldStartTimelineCopyDrag(true, "move", true)).toBe(false); + }); + + it.each([ + ["events", true], + ["events_cursor", true], + ["events_grid_cursor", true], + ["shuffle", true], + ["grid", false], + ["grid_relative", false], + ["cursor", false], + ["grid_cursor", false], + ] as const)("enables clip edges for %s only when event snapping is active", (mode, expected) => { + expect(isTimelineClipEdgeSnapMode(mode)).toBe(expected); + }); + + it.each([ + { + name: "start to start", + moving: shape("moving", 2.92, 1), + target: shape("target", 3, 2), + movingEdge: "start", + targetEdge: "start", + }, + { + name: "start to end", + moving: shape("moving", 4.92, 1), + target: shape("target", 3, 2), + movingEdge: "start", + targetEdge: "end", + }, + { + name: "end to start", + moving: shape("moving", 1.92, 1), + target: shape("target", 3, 2), + movingEdge: "end", + targetEdge: "start", + }, + { + name: "end to end", + moving: shape("moving", 3.92, 1), + target: shape("target", 3, 2), + movingEdge: "end", + targetEdge: "end", + }, + ])("supports $name", ({ moving, target, movingEdge, targetEdge }) => { + const result = resolveTimelineClipEdgeSnap({ + movingClips: [moving], + stationaryClips: [target], + rawDeltaTime: 0, + trackDelta: 0, + viewport, + pixelsPerSecond: 100, + }); + + expect(result.match).toMatchObject({ movingEdge, targetEdge }); + expect(result.match?.distancePx).toBeCloseTo(8); + expect(result.deltaTime).toBeCloseTo(0.08); + }); + + it("uses an inclusive 10 CSS-pixel threshold at any zoom", () => { + const atThreshold = resolveTimelineClipEdgeSnap({ + movingClips: [shape("moving", 1, 1)], + stationaryClips: [shape("target", 2.1, 1)], + rawDeltaTime: 0, + trackDelta: 0, + viewport, + pixelsPerSecond: 100, + }); + const outsideThreshold = resolveTimelineClipEdgeSnap({ + movingClips: [shape("moving", 1, 1)], + stationaryClips: [shape("target", 2.051, 1)], + rawDeltaTime: 0, + trackDelta: 0, + viewport, + pixelsPerSecond: 200, + }); + + expect(atThreshold.match?.distancePx).toBeCloseTo(10); + expect(outsideThreshold.match).toBeNull(); + }); + + it("uses only the individual moving and stationary edges visible in the viewport", () => { + const result = resolveTimelineClipEdgeSnap({ + movingClips: [shape("moving", 0, 9.94)], + stationaryClips: [shape("target", 1, 9)], + rawDeltaTime: 0, + trackDelta: 0, + viewport: { ...viewport, startTime: 5, endTime: 10 }, + pixelsPerSecond: 100, + }); + + expect(result.match).toMatchObject({ + movingEdge: "end", + targetEdge: "end", + targetTime: 10, + }); + expect(result.deltaTime).toBeCloseTo(0.06); + }); + + it("does not use a clip whose body spans the viewport but both edges are hidden", () => { + const result = resolveTimelineClipEdgeSnap({ + movingClips: [shape("moving", 1, 1)], + stationaryClips: [shape("spanning", -2, 10)], + rawDeltaTime: 0, + trackDelta: 0, + viewport: { ...viewport, startTime: 0, endTime: 5 }, + pixelsPerSecond: 100, + }); + + expect(result.match).toBeNull(); + }); + + it("requires both moving destination and stationary source tracks to be vertically visible", () => { + const hiddenMoving = resolveTimelineClipEdgeSnap({ + movingClips: [shape("moving", 1.95, 1, 0)], + stationaryClips: [shape("target", 3, 1, 1)], + rawDeltaTime: 0, + trackDelta: 2, + viewport: { ...viewport, visibleTrackIndices: [0, 1] }, + pixelsPerSecond: 100, + }); + const hiddenTarget = resolveTimelineClipEdgeSnap({ + movingClips: [shape("moving", 1.95, 1, 0)], + stationaryClips: [shape("target", 3, 1, 2)], + rawDeltaTime: 0, + trackDelta: 0, + viewport: { ...viewport, visibleTrackIndices: [0, 1] }, + pixelsPerSecond: 100, + }); + + expect(hiddenMoving.match).toBeNull(); + expect(hiddenTarget.match).toBeNull(); + }); + + it("excludes actual moving IDs but can include the source for copy previews", () => { + const options = { + movingClips: [shape("source", 2.95, 1)], + stationaryClips: [shape("source", 2, 1)], + rawDeltaTime: 0, + trackDelta: 0, + viewport, + pixelsPerSecond: 100, + }; + + expect(resolveTimelineClipEdgeSnap(options).match).toBeNull(); + expect(resolveTimelineClipEdgeSnap({ + ...options, + excludeMovingClipIds: false, + }).match).toMatchObject({ + movingEdge: "start", + targetEdge: "end", + }); + }); + + it("keeps nonmoving selected clips eligible as stationary targets", () => { + const result = resolveTimelineClipEdgeSnap({ + movingClips: [shape("moving-unlocked", 1.94, 1)], + stationaryClips: [ + shape("moving-unlocked", 1, 1), + shape("selected-but-locked", 3, 1), + ], + rawDeltaTime: 0, + trackDelta: 0, + viewport, + pixelsPerSecond: 100, + }); + + expect(result.match).toMatchObject({ + movingClipId: "moving-unlocked", + targetClipId: "selected-but-locked", + movingEdge: "end", + targetEdge: "start", + }); + }); + + it("lets a non-anchor edge drive one shared multi-clip delta", () => { + const result = resolveTimelineClipEdgeSnap({ + movingClips: [ + shape("anchor", 1, 1, 0), + shape("midi-peer", 6, 2, 1), + ], + stationaryClips: [shape("target", 8.08, 1, 2)], + rawDeltaTime: 0, + trackDelta: 0, + viewport, + pixelsPerSecond: 100, + }); + + expect(result.match).toMatchObject({ + movingClipId: "midi-peer", + movingEdge: "end", + targetEdge: "start", + }); + expect(result.deltaTime).toBeCloseTo(0.08); + expect(1 + result.deltaTime).toBeCloseTo(1.08); + expect(6 + result.deltaTime).toBeCloseTo(6.08); + }); + + it("clamps the group once at time zero and rejects impossible snap corrections", () => { + const moving = [shape("earliest", 0.25, 1), shape("anchor", 2, 1)]; + expect(clampTimelineClipGroupDelta(moving, -1)).toBe(-0.25); + + const result = resolveTimelineClipEdgeSnap({ + movingClips: moving, + stationaryClips: [shape("target", 1.7, 1)], + rawDeltaTime: -0.2, + trackDelta: 0, + viewport, + pixelsPerSecond: 100, + }); + + expect(result.match).toBeNull(); + expect(result.deltaTime).toBeCloseTo(-0.2); + }); + + it("breaks equal-distance ties deterministically", () => { + const result = resolveTimelineClipEdgeSnap({ + movingClips: [shape("moving", 2, 1)], + stationaryClips: [ + shape("later", 3.05, 1), + shape("earlier", 2.95, 1), + ], + rawDeltaTime: 0, + trackDelta: 0, + viewport, + pixelsPerSecond: 100, + }); + + expect(result.match).toMatchObject({ targetClipId: "earlier", targetTime: 2.95 }); + expect(result.deltaTime).toBeCloseTo(-0.05); + }); +}); diff --git a/frontend/src/__tests__/timelineClipGestureLock.test.ts b/frontend/src/__tests__/timelineClipGestureLock.test.ts new file mode 100644 index 0000000..3c574c0 --- /dev/null +++ b/frontend/src/__tests__/timelineClipGestureLock.test.ts @@ -0,0 +1,102 @@ +import { describe, expect, it, vi } from "vitest"; +import timelineSource from "../components/Timeline.tsx?raw"; +import { + isTimelineClipGestureLocked, + runTimelineClipGestureMutation, + type TimelineClipGestureLockState, +} from "../utils/clipEditLock"; + +function stateWithClips(): TimelineClipGestureLockState { + return { + globalLocked: false, + lockSettings: { items: false }, + tracks: [{ + clips: [{ id: "audio-1", locked: false }], + midiClips: [{ id: "midi-1", locked: false }], + }], + }; +} + +describe("timeline pointer gesture lock authority", () => { + it.each([ + ["global lock", (state: TimelineClipGestureLockState) => { state.globalLocked = true; }, "audio-1"], + ["item lock", (state: TimelineClipGestureLockState) => { state.lockSettings = { items: true }; }, "midi-1"], + ["audio clip lock", (state: TimelineClipGestureLockState) => { state.tracks[0].clips[0].locked = true; }, "audio-1"], + ["MIDI clip lock", (state: TimelineClipGestureLockState) => { state.tracks[0].midiClips[0].locked = true; }, "midi-1"], + ])("blocks %s before preview, undo, or backend work", (_label, lock, clipId) => { + const state = stateWithClips(); + lock(state); + const preview = vi.fn(); + const commandPush = vi.fn(); + const backendSync = vi.fn(); + const restore = vi.fn(); + + const handled = runTimelineClipGestureMutation( + state, + [clipId], + () => { + preview(); + commandPush(); + backendSync(); + }, + restore, + ); + + expect(handled).toBe(false); + expect(restore).toHaveBeenCalledOnce(); + expect(preview).not.toHaveBeenCalled(); + expect(commandPush).not.toHaveBeenCalled(); + expect(backendSync).not.toHaveBeenCalled(); + }); + + it("cancels a multi-clip gesture if any participating clip becomes locked", () => { + const state = stateWithClips(); + expect(isTimelineClipGestureLocked(state, ["audio-1", "midi-1"])).toBe(false); + + state.tracks[0].midiClips[0].locked = true; + + expect(isTimelineClipGestureLocked(state, ["audio-1", "midi-1"])).toBe(true); + }); + + it("treats a deleted/replaced gesture target as locked", () => { + expect(isTimelineClipGestureLocked(stateWithClips(), ["missing-clip"])).toBe(true); + }); + + it("restores the exact pre-gesture geometry when a lock engages mid-preview", () => { + const state = stateWithClips(); + const before = { startTime: 2, duration: 4, offset: 0.5, isModified: false }; + let live = { ...before }; + + expect(runTimelineClipGestureMutation(state, ["audio-1"], () => { + live = { startTime: 7, duration: 1.5, offset: 1.25, isModified: true }; + })).toBe(true); + + state.lockSettings = { items: true }; + const undoPush = vi.fn(); + const backendSync = vi.fn(); + expect(runTimelineClipGestureMutation( + state, + ["audio-1"], + () => { + undoPush(); + backendSync(); + }, + () => { live = { ...before }; }, + )).toBe(false); + + expect(live).toEqual(before); + expect(undoPush).not.toHaveBeenCalled(); + expect(backendSync).not.toHaveBeenCalled(); + }); + + it("wires current-state gates into every Timeline pointer lifecycle", () => { + expect(timelineSource).toContain("useDAWStore.subscribe((state) => {"); + expect(timelineSource).toContain("getTimelineGestureClipIds(activeGesture)"); + expect(timelineSource).toContain("cancelActiveTimelineClipGesture();"); + expect(timelineSource).toContain("cancelClipVolumeEdit(volumeGesture.clipId)"); + expect(timelineSource).toContain("restoreTimelineGestureUndo();"); + expect(timelineSource).toContain("runTimelineClipGestureMutation("); + expect(timelineSource.match(/draggable=\{!clipEditLocked\}/g)).toHaveLength(6); + expect(timelineSource).not.toContain("draggable={!clip.locked}"); + }); +}); diff --git a/frontend/src/__tests__/timelineClipStretch.test.ts b/frontend/src/__tests__/timelineClipStretch.test.ts new file mode 100644 index 0000000..d1ea2fe --- /dev/null +++ b/frontend/src/__tests__/timelineClipStretch.test.ts @@ -0,0 +1,252 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { nativeBridge } from "../services/NativeBridge"; +import { commandManager } from "../store/commands"; +import { + createDefaultTrack, + type AudioClip, + type MIDIClip, + useDAWStore, +} from "../store/useDAWStore"; +import { + computeTimelineStretchGeometry, + createStretchedMIDIClip, +} from "../utils/timelineClipStretch"; + +const initialState = useDAWStore.getState(); + +function audioClip(overrides: Partial = {}): AudioClip { + return { + id: "audio-stretch", + filePath: "C:/audio/current.wav", + pitchCorrectionSourceFilePath: "C:/audio/pre-pitch.wav", + pitchCorrectionSourceOffset: 3, + name: "Audio", + startTime: 4, + duration: 6, + offset: 2, + color: "#38bdf8", + volumeDB: 0, + fadeIn: 1, + fadeOut: 0.5, + sampleRate: 48000, + sourceLength: 12, + gainEnvelope: [{ time: 1.5, gain: 0.75 }], + ...overrides, + }; +} + +function midiClip(overrides: Partial = {}): MIDIClip { + return { + id: "midi-stretch", + name: "MIDI", + startTime: 2, + duration: 8, + offset: 1, + sourceStart: 0.5, + sourceLength: 8, + loopEnabled: true, + loopOffset: 2, + loopLength: 4, + events: [ + { timestamp: 1, type: "noteOn", note: 60, velocity: 100 }, + { timestamp: 3, type: "noteOff", note: 60, velocity: 0 }, + ], + ccEvents: [{ time: 2, cc: 1, value: 64 }], + quantizeBackup: { + events: [{ timestamp: 1.25, type: "noteOn", note: 62, velocity: 90 }], + ccEvents: [{ time: 2.5, cc: 11, value: 100 }], + }, + color: "#f72585", + ...overrides, + }; +} + +describe("timeline stretch geometry", () => { + it("keeps the left edge fixed for a right-edge stretch and scales source offset", () => { + expect(computeTimelineStretchGeometry({ + kind: "resize-right", + originalStartTime: 4, + originalDuration: 6, + originalOffset: 3, + deltaTime: 3, + minDuration: 0.1, + })).toEqual({ + startTime: 4, + duration: 9, + offset: 4.5, + timeScale: 1.5, + playbackRateRatio: 2 / 3, + }); + }); + + it("keeps the right edge fixed for a left-edge stretch", () => { + expect(computeTimelineStretchGeometry({ + kind: "resize-left", + originalStartTime: 4, + originalDuration: 6, + originalOffset: 3, + deltaTime: -2, + })).toEqual({ + startTime: 2, + duration: 8, + offset: 4, + timeScale: 4 / 3, + playbackRateRatio: 0.75, + }); + }); + + it("snaps the dragged edge and clamps against the timeline/minimum duration", () => { + expect(computeTimelineStretchGeometry({ + kind: "resize-left", + originalStartTime: 0.25, + originalDuration: 2, + originalOffset: 0, + deltaTime: -10, + snapTime: Math.round, + }).startTime).toBe(0); + expect(computeTimelineStretchGeometry({ + kind: "resize-right", + originalStartTime: 4, + originalDuration: 2, + originalOffset: 0, + deltaTime: -20, + minDuration: 0.1, + }).duration).toBeCloseTo(0.1); + }); +}); + +describe("MIDI time-domain scaling", () => { + it("scales events, controllers, loops, source fields, and quantize backups", () => { + const stretched = createStretchedMIDIClip(midiClip(), 6, 4); + expect(stretched).toMatchObject({ + startTime: 6, + duration: 4, + offset: 0.5, + sourceStart: 0.25, + sourceLength: 4, + loopOffset: 1, + loopLength: 2, + }); + expect(stretched.events.map((event) => event.timestamp)).toEqual([0.5, 1.5]); + expect(stretched.ccEvents?.[0].time).toBe(1); + expect(stretched.quantizeBackup?.events[0].timestamp).toBe(0.625); + expect(stretched.quantizeBackup?.ccEvents?.[0].time).toBe(1.25); + }); +}); + +describe("undo-safe clip stretching", () => { + beforeEach(() => { + commandManager.clear(); + useDAWStore.setState(initialState); + vi.spyOn(nativeBridge, "timeStretchClip").mockResolvedValue({ + success: true, + filePath: "C:/audio/current_ts.wav", + duration: 24, + sampleRate: 96000, + }); + vi.spyOn(nativeBridge, "refreshWaveformPeaks").mockResolvedValue(true); + }); + + afterEach(() => { + vi.restoreAllMocks(); + commandManager.clear(); + useDAWStore.setState(initialState); + }); + + it("processes audio exactly once, commits one command, and reuses the result for redo", async () => { + const track = createDefaultTrack("audio-track", "Audio", "#38bdf8", "audio"); + track.clips = [audioClip()]; + const syncClipsWithBackend = vi.fn().mockResolvedValue(undefined); + useDAWStore.setState({ tracks: [track], syncClipsWithBackend, canUndo: false, canRedo: false }); + + await expect(useDAWStore.getState().stretchClip("audio-stretch", 2, 12)).resolves.toBe(true); + + expect(nativeBridge.timeStretchClip).toHaveBeenCalledTimes(1); + expect(nativeBridge.timeStretchClip).toHaveBeenCalledWith("C:/audio/current.wav", 0.5); + expect(nativeBridge.refreshWaveformPeaks).toHaveBeenCalledWith("C:/audio/current_ts.wav"); + expect(commandManager.getUndoStack()).toHaveLength(1); + expect(useDAWStore.getState().tracks[0].clips[0]).toMatchObject({ + filePath: "C:/audio/current_ts.wav", + originalFilePath: "C:/audio/current.wav", + playbackRate: 0.5, + startTime: 2, + duration: 12, + offset: 4, + sourceLength: 24, + fadeIn: 2, + fadeOut: 1, + sampleRate: 96000, + pitchCorrectionSourceFilePath: undefined, + pitchCorrectionSourceOffset: undefined, + }); + expect(useDAWStore.getState().tracks[0].clips[0].gainEnvelope?.[0].time).toBe(3); + + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks[0].clips[0]).toEqual(audioClip()); + + useDAWStore.getState().redo(); + expect(useDAWStore.getState().tracks[0].clips[0].filePath).toBe("C:/audio/current_ts.wav"); + expect(nativeBridge.timeStretchClip).toHaveBeenCalledTimes(1); + expect(syncClipsWithBackend).toHaveBeenCalledTimes(3); + }); + + it("leaves state and history unchanged when audio processing fails", async () => { + vi.mocked(nativeBridge.timeStretchClip).mockResolvedValue({ success: false }); + const track = createDefaultTrack("audio-track", "Audio", "#38bdf8", "audio"); + track.clips = [audioClip()]; + useDAWStore.setState({ tracks: [track], canUndo: false, canRedo: false }); + + await expect(useDAWStore.getState().stretchClip("audio-stretch", 4, 10)).resolves.toBe(false); + + expect(useDAWStore.getState().tracks[0].clips[0]).toEqual(audioClip()); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it("does not overwrite a clip changed while audio rendering is in flight", async () => { + let finishStretch!: (value: { success: true; filePath: string; duration: number }) => void; + vi.mocked(nativeBridge.timeStretchClip).mockImplementation(() => new Promise((resolve) => { + finishStretch = resolve; + })); + const track = createDefaultTrack("audio-track", "Audio", "#38bdf8", "audio"); + track.clips = [audioClip()]; + useDAWStore.setState({ tracks: [track], canUndo: false, canRedo: false }); + + const pending = useDAWStore.getState().stretchClip("audio-stretch", 4, 12); + useDAWStore.setState((state) => ({ + tracks: state.tracks.map((candidate) => ({ + ...candidate, + clips: candidate.clips.map((clip) => clip.id === "audio-stretch" + ? { ...clip, volumeDB: -6 } + : clip), + })), + })); + finishStretch({ success: true, filePath: "C:/audio/orphaned-render.wav", duration: 24 }); + + await expect(pending).resolves.toBe(false); + expect(useDAWStore.getState().tracks[0].clips[0]).toMatchObject({ + filePath: "C:/audio/current.wav", + duration: 6, + volumeDB: -6, + }); + expect(commandManager.getUndoStack()).toHaveLength(0); + expect(nativeBridge.refreshWaveformPeaks).not.toHaveBeenCalled(); + }); + + it("stretches MIDI without audio processing and restores all timing on undo", async () => { + const track = createDefaultTrack("midi-track", "MIDI", "#f72585", "midi"); + track.midiClips = [midiClip()]; + const syncMIDITrackToBackend = vi.fn().mockResolvedValue(undefined); + useDAWStore.setState({ tracks: [track], syncMIDITrackToBackend, canUndo: false, canRedo: false }); + + await expect(useDAWStore.getState().stretchClip("midi-stretch", 4, 4)).resolves.toBe(true); + + expect(nativeBridge.timeStretchClip).not.toHaveBeenCalled(); + expect(useDAWStore.getState().tracks[0].midiClips[0].events.map((event) => event.timestamp)) + .toEqual([0.5, 1.5]); + expect(syncMIDITrackToBackend).toHaveBeenCalledWith("midi-track", { debounce: false }); + expect(commandManager.getUndoStack()).toHaveLength(1); + + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks[0].midiClips[0]).toEqual(midiClip()); + }); +}); diff --git a/frontend/src/__tests__/timelineClipboardPasteSemantics.test.ts b/frontend/src/__tests__/timelineClipboardPasteSemantics.test.ts new file mode 100644 index 0000000..3e3b41f --- /dev/null +++ b/frontend/src/__tests__/timelineClipboardPasteSemantics.test.ts @@ -0,0 +1,201 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { getRegisteredAction } from "../store/actionRegistry"; +import { commandManager } from "../store/commands"; +import { + createDefaultTrack, + type AudioClip, + type MIDIClip, + useDAWStore, +} from "../store/useDAWStore"; + +const originalState = useDAWStore.getState(); + +function audioClip(id: string, overrides: Partial = {}): AudioClip { + return { + id, + filePath: `C:/audio/${id}.wav`, + name: id, + startTime: 2, + duration: 2, + offset: 0, + color: "#38bdf8", + volumeDB: 0, + fadeIn: 0, + fadeOut: 0, + gainEnvelope: [{ time: 0.5, gain: 0.75 }], + ...overrides, + }; +} + +function midiClip(id: string): MIDIClip { + return { + id, + name: id, + startTime: 4, + duration: 2, + offset: 0, + sourceLength: 2, + loopLength: 2, + events: [ + { timestamp: 0.25, type: "noteOn", note: 60, velocity: 100 }, + { timestamp: 1.25, type: "noteOff", note: 60, velocity: 0 }, + ], + ccEvents: [{ cc: 1, time: 0.5, value: 64 }], + color: "#f72585", + }; +} + +beforeEach(() => { + commandManager.clear(); + useDAWStore.setState((state) => ({ + tracks: [], + selectedClipId: null, + selectedClipIds: [], + selectedTrackId: null, + selectedTrackIds: [], + clipboard: { clip: null, clips: [], isCut: false }, + globalLocked: false, + lockSettings: { items: false, envelopes: false, timeSelection: false, markers: false }, + moveEnvelopesWithItems: true, + transport: { ...state.transport, currentTime: 0 }, + syncClipsWithBackend: vi.fn(async () => undefined), + syncMIDITrackToBackend: vi.fn(async () => undefined), + canUndo: false, + canRedo: false, + })); +}); + +afterEach(() => { + vi.restoreAllMocks(); + commandManager.clear(); + useDAWStore.setState(originalState); +}); + +describe("deep timeline clipboard and paste entry points", () => { + it("cuts immediately, then context/menu paste moves deep audio and automation atomically", () => { + const track = createDefaultTrack("audio", "Audio", "#38bdf8", "audio", []); + const source = audioClip("source", { + takes: [audioClip("take", { startTime: 0 })], + }); + track.clips = [source]; + track.automationLanes = [{ + id: "lane", + param: "volume", + points: [{ id: "point", time: 2.5, value: 0.5 }], + visible: true, + mode: "read", + armed: false, + readEnabled: true, + }]; + useDAWStore.setState({ + tracks: [track], + selectedClipId: source.id, + selectedClipIds: [source.id], + }); + + useDAWStore.getState().cutSelectedClips(); + let state = useDAWStore.getState(); + expect(state.tracks[0].clips).toEqual([]); + expect(state.tracks[0].automationLanes[0].points).toEqual([]); + expect(state.clipboard).toMatchObject({ isCut: true, sourceRemoved: true }); + expect(state.clipboard.clip?.id).toBe(source.id); + expect(commandManager.getUndoStack()).toHaveLength(1); + + // pasteClip is the explicit target/time path used by EditMenu and both + // Timeline context menus. It now delegates to the same deep paste planner. + state.pasteClip("audio", 6); + state = useDAWStore.getState(); + const pasted = state.tracks[0].clips[0]; + const pastedId = pasted.id; + expect(pasted).toMatchObject({ startTime: 6, duration: 2 }); + expect(pasted.id).not.toBe(source.id); + expect(pasted.gainEnvelope).not.toBe((state.clipboard.clip as AudioClip | null)?.gainEnvelope); + expect(pasted.takes?.[0].id).not.toBe(source.takes?.[0].id); + expect(state.tracks[0].automationLanes[0].points) + .toEqual([{ id: "point", time: 6.5, value: 0.5 }]); + expect(state.clipboard.clip).toBeNull(); + expect(commandManager.getUndoStack()).toHaveLength(2); + + state.undo(); + expect(useDAWStore.getState().tracks[0].clips).toEqual([]); + expect(useDAWStore.getState().clipboard).toMatchObject({ isCut: true, sourceRemoved: true }); + state = useDAWStore.getState(); + state.undo(); + expect(useDAWStore.getState().tracks[0].clips[0].id).toBe(source.id); + expect(useDAWStore.getState().tracks[0].automationLanes[0].points[0].id).toBe("point"); + + state = useDAWStore.getState(); + state.redo(); + useDAWStore.getState().redo(); + expect(useDAWStore.getState().tracks[0].clips[0].id).toBe(pastedId); + expect(useDAWStore.getState().tracks[0].automationLanes[0].points[0].id).toBe("point"); + }); + + it("claims but safely no-ops for explicit incompatible, frozen, and locked paste targets", () => { + const audio = createDefaultTrack("audio", "Audio", "#38bdf8", "audio", []); + const midi = createDefaultTrack("midi", "MIDI", "#f72585", "midi", []); + const source = audioClip("source"); + useDAWStore.setState({ + tracks: [audio, midi], + clipboard: { + clip: source, + clips: [{ clip: source, trackId: "audio" }], + isCut: false, + }, + }); + + useDAWStore.getState().pasteClip("midi", 3); + expect(useDAWStore.getState().tracks[1].midiClips).toEqual([]); + expect(commandManager.getUndoStack()).toHaveLength(0); + + useDAWStore.setState((state) => ({ + globalLocked: true, + selectedTrackIds: ["audio"], + transport: { ...state.transport, currentTime: 3 }, + })); + expect(getRegisteredAction("edit.paste")!.canHandleShortcut?.()).toBe(false); + useDAWStore.getState().pasteClip("audio", 3); + expect(useDAWStore.getState().tracks[0].clips).toEqual([]); + + useDAWStore.setState((state) => ({ + globalLocked: false, + tracks: state.tracks.map((track) => track.id === "audio" ? { ...track, frozen: true } : track), + })); + useDAWStore.getState().pasteClip("audio", 3); + expect(useDAWStore.getState().tracks[0].clips).toEqual([]); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it("smart-pastes mixed audio/MIDI entries only into compatible selected tracks", () => { + const targetAudio = createDefaultTrack("target-audio", "Audio", "#38bdf8", "audio", []); + const targetMIDI = createDefaultTrack("target-midi", "MIDI", "#f72585", "instrument", []); + const audio = audioClip("audio-source", { startTime: 1 }); + const midi = midiClip("midi-source"); + useDAWStore.setState((state) => ({ + tracks: [targetAudio, targetMIDI], + selectedTrackId: "target-midi", + selectedTrackIds: ["target-audio", "target-midi"], + transport: { ...state.transport, currentTime: 10 }, + clipboard: { + clip: audio, + clips: [ + { clip: audio, trackId: "source-audio" }, + { clip: midi, trackId: "source-midi" }, + ], + isCut: false, + }, + })); + + const action = getRegisteredAction("edit.paste")!; + expect(action.canHandleShortcut?.()).toBe(true); + action.execute(); + const state = useDAWStore.getState(); + expect(state.tracks[0].clips).toHaveLength(1); + expect(state.tracks[0].midiClips).toHaveLength(0); + expect(state.tracks[1].clips).toHaveLength(0); + expect(state.tracks[1].midiClips).toHaveLength(1); + expect(state.tracks[0].clips[0].startTime).toBe(10); + expect(state.tracks[1].midiClips[0].startTime).toBe(13); + expect(commandManager.getUndoStack()).toHaveLength(1); + }); +}); diff --git a/frontend/src/__tests__/timelineDragAxisLock.test.ts b/frontend/src/__tests__/timelineDragAxisLock.test.ts index 4c47020..1344562 100644 --- a/frontend/src/__tests__/timelineDragAxisLock.test.ts +++ b/frontend/src/__tests__/timelineDragAxisLock.test.ts @@ -1,8 +1,10 @@ import { describe, expect, it } from "vitest"; import { getTimelineAxisLockedDeltas, + resolveTimelineDropTrackIndex, resolveTimelineDragAxisLock, } from "../utils/timelineDragAxisLock"; +import { canApplyTimelineHorizontalSnap } from "../utils/timelineClipEdgeSnap"; describe("timeline drag axis lock", () => { it("does not lock or move before the drag threshold", () => { @@ -52,4 +54,25 @@ describe("timeline drag axis lock", () => { deltaY: 12, }); }); + + it("blocks horizontal snapping while Shift lock is pending or locked vertically", () => { + expect(canApplyTimelineHorizontalSnap(true, null)).toBe(false); + expect(canApplyTimelineHorizontalSnap(true, "y")).toBe(false); + expect(canApplyTimelineHorizontalSnap(true, "x")).toBe(true); + expect(canApplyTimelineHorizontalSnap(false, null)).toBe(true); + }); + + it("clamps a drag above the timeline to the first track", () => { + expect(resolveTimelineDropTrackIndex(-12, 300, 3, null)).toBe(0); + expect(resolveTimelineDropTrackIndex(-0.01, 300, 3, null)).toBe(0); + }); + + it("keeps normal hits and the below-track insertion target unchanged", () => { + expect(resolveTimelineDropTrackIndex(120, 300, 3, { + trackIndex: 1, + isInClipArea: true, + })).toBe(1); + expect(resolveTimelineDropTrackIndex(301, 300, 3, null)).toBe(3); + expect(resolveTimelineDropTrackIndex(-12, 0, 0, null)).toBe(0); + }); }); diff --git a/frontend/src/__tests__/timelineGestureUndo.test.ts b/frontend/src/__tests__/timelineGestureUndo.test.ts new file mode 100644 index 0000000..054f64d --- /dev/null +++ b/frontend/src/__tests__/timelineGestureUndo.test.ts @@ -0,0 +1,132 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { nativeBridge } from "../services/NativeBridge"; +import { CommandManager, commandManager } from "../store/commands"; +import { useDAWStore } from "../store/useDAWStore"; +import { + createTimelineGestureUndoCommand, + getTimelineTrackTopologyDelta, + reconcileTimelineTrackTopology, + type TimelineGestureSnapshot, +} from "../utils/timelineGestureUndo"; + +type StubTrack = { id: string; value: number }; + +function snapshot( + tracks: readonly StubTrack[], + isModified: boolean, +): TimelineGestureSnapshot { + return { + tracks, + selectedClipId: tracks.length > 0 ? tracks[tracks.length - 1].id : null, + selectedClipIds: tracks.map((track) => track.id), + isModified, + }; +} + +describe("timeline gesture undo command", () => { + it("owns one undo entry, restores dirty state, and reports topology in both directions", () => { + const before = snapshot([{ id: "existing", value: 1 }], false); + const after = snapshot([ + { id: "existing", value: 2 }, + { id: "generated", value: 3 }, + ], true); + let live = snapshot(after.tracks, after.isModified); + const topology: Array<{ added: string[]; removed: string[] }> = []; + const manager = new CommandManager(); + + manager.push(createTimelineGestureUndoCommand("Move timeline clip", before, after, { + cloneTracks: (tracks) => tracks.map((track) => ({ ...track })), + applySnapshot: (next) => { live = next; }, + afterApply: (previous, next) => { + const delta = getTimelineTrackTopologyDelta(previous.tracks, next.tracks); + topology.push({ + added: delta.added.map((track) => track.id), + removed: delta.removed.map((track) => track.id), + }); + }, + })); + + expect(manager.getUndoStack()).toHaveLength(1); + expect(manager.undo()).toBe(true); + expect(live).toMatchObject({ + tracks: [{ id: "existing", value: 1 }], + selectedClipId: "existing", + isModified: false, + }); + expect(topology).toEqual([{ added: [], removed: ["generated"] }]); + + expect(manager.redo()).toBe(true); + expect(live).toMatchObject({ + tracks: [ + { id: "existing", value: 2 }, + { id: "generated", value: 3 }, + ], + selectedClipId: "generated", + isModified: true, + }); + expect(topology[topology.length - 1]).toEqual({ added: ["generated"], removed: [] }); + }); + + it("adds before content sync, removes after it, and removes even when sync fails", async () => { + const existing = { id: "existing" }; + const generated = { id: "generated" }; + const redoOrder: string[] = []; + await reconcileTimelineTrackTopology([existing], [existing, generated], { + addTrack: async (track) => { redoOrder.push(`add:${track.id}`); }, + syncContent: async () => { redoOrder.push("sync"); }, + removeTrack: async (track) => { redoOrder.push(`remove:${track.id}`); }, + }); + expect(redoOrder).toEqual(["add:generated", "sync"]); + + const undoOrder: string[] = []; + await expect(reconcileTimelineTrackTopology([existing, generated], [existing], { + addTrack: async (track) => { undoOrder.push(`add:${track.id}`); }, + syncContent: async () => { + undoOrder.push("sync"); + throw new Error("clip sync failed"); + }, + removeTrack: async (track) => { undoOrder.push(`remove:${track.id}`); }, + })).rejects.toThrow("clip sync failed"); + expect(undoOrder).toEqual(["sync", "remove:generated"]); + }); +}); + +describe("compound timeline track insertion", () => { + const originalState = useDAWStore.getState(); + + beforeEach(() => { + commandManager.clear(); + useDAWStore.setState({ + tracks: [], + globalLocked: false, + canUndo: false, + canRedo: false, + }); + vi.spyOn(nativeBridge, "addTrack").mockResolvedValue("generated"); + vi.spyOn(nativeBridge, "setTrackType").mockResolvedValue(true); + vi.spyOn(nativeBridge, "setTrackRecordArm").mockResolvedValue(true); + vi.spyOn(nativeBridge, "setTrackInputMonitoring").mockResolvedValue(true); + vi.spyOn(nativeBridge, "setTrackInputChannels").mockResolvedValue(true); + }); + + afterEach(() => { + vi.restoreAllMocks(); + commandManager.clear(); + useDAWStore.setState(originalState); + }); + + it("can insert a backend-precreated track without adding a second undo command", () => { + useDAWStore.getState().addTrack({ + id: "generated", + name: "Audio 2", + type: "audio", + }, { + backendAlreadyCreated: true, + recordUndo: false, + }); + + expect(useDAWStore.getState().tracks.map((track) => track.id)).toEqual(["generated"]); + expect(commandManager.getUndoStack()).toHaveLength(0); + expect(nativeBridge.addTrack).not.toHaveBeenCalled(); + }); +}); diff --git a/frontend/src/__tests__/timelineQuantizeSemantics.test.ts b/frontend/src/__tests__/timelineQuantizeSemantics.test.ts new file mode 100644 index 0000000..c01c74d --- /dev/null +++ b/frontend/src/__tests__/timelineQuantizeSemantics.test.ts @@ -0,0 +1,166 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { getRegisteredAction } from "../store/actionRegistry"; +import { commandManager } from "../store/commands"; +import { + createDefaultTrack, + type AudioClip, + type MIDIClip, + useDAWStore, +} from "../store/useDAWStore"; + +const originalState = useDAWStore.getState(); + +function audioClip(overrides: Partial = {}): AudioClip { + return { + id: "audio", + filePath: "C:/audio.wav", + name: "Audio", + startTime: -0.13, + duration: 1, + offset: 0, + color: "#38bdf8", + volumeDB: 0, + fadeIn: 0, + fadeOut: 0, + ...overrides, + }; +} + +function midiClip(overrides: Partial = {}): MIDIClip { + return { + id: "midi", + name: "MIDI", + startTime: 0.26, + duration: 1, + events: [], + ccEvents: [], + color: "#f72585", + ...overrides, + }; +} + +beforeEach(() => { + commandManager.clear(); + useDAWStore.setState((state) => ({ + tracks: [], + selectedClipId: null, + selectedClipIds: [], + globalLocked: false, + lockSettings: { items: false, envelopes: false, timeSelection: false, markers: false }, + moveEnvelopesWithItems: true, + transport: { ...state.transport, tempo: 120 }, + timeSignature: { numerator: 4, denominator: 4 }, + gridSize: "1/16", + quantizePresetId: "factory-1/16", + syncClipsWithBackend: vi.fn(async () => undefined), + syncMIDITrackToBackend: vi.fn(async () => undefined), + canUndo: false, + canRedo: false, + })); +}); +afterEach(() => { + vi.restoreAllMocks(); + commandManager.clear(); + useDAWStore.setState(originalState); +}); + +describe("timeline quantize truthfulness", () => { + it("clamps negative starts and quantizes mixed audio/MIDI with stable automation and redo", () => { + const audio = createDefaultTrack("audio-track", "Audio", "#38bdf8", "audio", []); + audio.clips = [audioClip()]; + audio.automationLanes = [{ + id: "lane", + param: "volume", + points: [{ id: "point", time: 0.1, value: 0.5 }], + visible: true, + mode: "read", + armed: false, + readEnabled: true, + }]; + const midi = createDefaultTrack("midi-track", "MIDI", "#f72585", "midi", []); + midi.midiClips = [midiClip()]; + useDAWStore.setState({ + tracks: [audio, midi], + selectedClipId: "midi", + selectedClipIds: ["audio", "midi"], + }); + + const action = getRegisteredAction("edit.quantizeToGrid")!; + expect(action.canHandleShortcut?.()).toBe(true); + expect(useDAWStore.getState().quantizeSelectedClips()).toBe(true); + let state = useDAWStore.getState(); + expect(state.tracks[0].clips[0]).toMatchObject({ id: "audio", startTime: 0 }); + expect(state.tracks[1].midiClips[0]).toMatchObject({ id: "midi", startTime: 0.25 }); + expect(state.tracks[0].automationLanes[0].points[0]).toMatchObject({ + id: "point", + time: 0.23, + }); + expect(commandManager.getUndoStack()).toHaveLength(1); + + state.undo(); + expect(useDAWStore.getState().tracks[0].clips[0].startTime).toBe(-0.13); + expect(useDAWStore.getState().tracks[0].automationLanes[0].points[0]) + .toMatchObject({ id: "point", time: 0.1 }); + state = useDAWStore.getState(); + state.redo(); + expect(useDAWStore.getState().tracks[0].clips[0]).toMatchObject({ id: "audio", startTime: 0 }); + expect(useDAWStore.getState().tracks[0].automationLanes[0].points[0]) + .toMatchObject({ id: "point", time: 0.23 }); + }); + + it("honors global, item, clip, frozen-track, and envelope locks without false history", () => { + const audio = createDefaultTrack("audio-track", "Audio", "#38bdf8", "audio", []); + audio.clips = [audioClip({ startTime: 0.13 })]; + audio.automationLanes = [{ + id: "lane", + param: "volume", + points: [{ id: "point", time: 0.2, value: 0.5 }], + visible: true, + mode: "read", + armed: false, + readEnabled: true, + }]; + useDAWStore.setState({ + tracks: [audio], + selectedClipId: "audio", + selectedClipIds: ["audio"], + lockSettings: { items: false, envelopes: true, timeSelection: false, markers: false }, + }); + + expect(useDAWStore.getState().quantizeSelectedClips()).toBe(true); + expect(useDAWStore.getState().tracks[0].clips[0].startTime).toBe(0.125); + expect(useDAWStore.getState().tracks[0].automationLanes[0].points[0].time).toBe(0.2); + useDAWStore.getState().undo(); + commandManager.clear(); + + useDAWStore.setState({ globalLocked: true, canUndo: false, canRedo: false }); + expect(getRegisteredAction("edit.quantizeToGrid")!.canHandleShortcut?.()).toBe(false); + expect(useDAWStore.getState().quantizeSelectedClips()).toBe(false); + expect(commandManager.getUndoStack()).toHaveLength(0); + + useDAWStore.setState({ + globalLocked: false, + lockSettings: { items: true, envelopes: false, timeSelection: false, markers: false }, + }); + expect(useDAWStore.getState().quantizeSelectedClips()).toBe(false); + + useDAWStore.setState((state) => ({ + lockSettings: { ...state.lockSettings, items: false }, + tracks: state.tracks.map((track) => ({ + ...track, + clips: track.clips.map((clip) => ({ ...clip, locked: true })), + })), + })); + expect(useDAWStore.getState().quantizeSelectedClips()).toBe(false); + + useDAWStore.setState((state) => ({ + tracks: state.tracks.map((track) => ({ + ...track, + frozen: true, + clips: track.clips.map((clip) => ({ ...clip, locked: false })), + })), + })); + expect(useDAWStore.getState().quantizeSelectedClips()).toBe(false); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); +}); diff --git a/frontend/src/__tests__/timelineSlipEditing.test.ts b/frontend/src/__tests__/timelineSlipEditing.test.ts new file mode 100644 index 0000000..665a235 --- /dev/null +++ b/frontend/src/__tests__/timelineSlipEditing.test.ts @@ -0,0 +1,109 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { commandManager } from "../store/commands"; +import { + createDefaultTrack, + type AudioClip, + type MIDIClip, + useDAWStore, +} from "../store/useDAWStore"; +import { computeSlipOffset } from "../utils/timelineClipGestures"; + +const originalState = useDAWStore.getState(); + +function audioClip(): AudioClip { + return { + id: "audio-slip", + filePath: "C:/audio/slip.wav", + name: "Audio slip", + startTime: 0, + duration: 4, + offset: 1, + sourceLength: 12, + color: "#38bdf8", + volumeDB: 0, + fadeIn: 0, + fadeOut: 0, + }; +} + +function midiClip(): MIDIClip { + return { + id: "midi-slip", + name: "MIDI slip", + startTime: 0, + duration: 4, + offset: 1, + sourceStart: 0, + sourceLength: 8, + loopEnabled: false, + loopOffset: 0, + loopLength: 8, + events: [], + ccEvents: [], + color: "#f72585", + }; +} + +beforeEach(() => { + commandManager.clear(); + const audio = createDefaultTrack("audio-track", "Audio", "#38bdf8", "audio", []); + audio.clips = [audioClip()]; + const midi = createDefaultTrack("midi-track", "MIDI", "#f72585", "midi", []); + midi.midiClips = [midiClip()]; + useDAWStore.setState({ + tracks: [audio, midi], + syncMIDITrackToBackend: vi.fn(async () => undefined), + isModified: false, + canUndo: false, + canRedo: false, + }); +}); + +afterEach(() => { + vi.restoreAllMocks(); + commandManager.clear(); + useDAWStore.setState(originalState); +}); + +describe("timeline slip editing", () => { + it("moves in the expected direction and clamps to the source window", () => { + expect(computeSlipOffset(5, 2, 10)).toBe(3); + expect(computeSlipOffset(5, -2, 10)).toBe(7); + expect(computeSlipOffset(1, 10, 10)).toBe(0); + expect(computeSlipOffset(9, -10, 10)).toBe(10); + }); + + it("commits one undoable audio offset change and preserves no-op state", () => { + useDAWStore.getState().slipEditClip("audio-slip", 3); + expect(useDAWStore.getState().tracks[0].clips[0].offset).toBe(3); + expect(commandManager.getUndoStack()).toHaveLength(1); + expect(useDAWStore.getState().isModified).toBe(true); + + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks[0].clips[0].offset).toBe(1); + useDAWStore.getState().redo(); + expect(useDAWStore.getState().tracks[0].clips[0].offset).toBe(3); + + commandManager.clear(); + useDAWStore.setState({ canUndo: false, canRedo: false, isModified: false }); + useDAWStore.getState().slipEditClip("audio-slip", 3); + expect(commandManager.getUndoStack()).toHaveLength(0); + expect(useDAWStore.getState().isModified).toBe(false); + }); + + it("commits and synchronizes MIDI slip edits through undo and redo", async () => { + const sync = useDAWStore.getState().syncMIDITrackToBackend; + useDAWStore.getState().slipEditClip("midi-slip", 2.5); + await Promise.resolve(); + expect(useDAWStore.getState().tracks[1].midiClips[0].offset).toBe(2.5); + expect(sync).toHaveBeenLastCalledWith("midi-track", { debounce: false }); + + useDAWStore.getState().undo(); + await Promise.resolve(); + expect(useDAWStore.getState().tracks[1].midiClips[0].offset).toBe(1); + useDAWStore.getState().redo(); + await Promise.resolve(); + expect(useDAWStore.getState().tracks[1].midiClips[0].offset).toBe(2.5); + expect(sync).toHaveBeenCalledTimes(3); + }); +}); diff --git a/frontend/src/__tests__/timelineSplitTransaction.test.ts b/frontend/src/__tests__/timelineSplitTransaction.test.ts new file mode 100644 index 0000000..5b811a9 --- /dev/null +++ b/frontend/src/__tests__/timelineSplitTransaction.test.ts @@ -0,0 +1,856 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { nativeBridge } from "../services/NativeBridge"; +import { commandManager } from "../store/commands"; +import { + createDefaultTrack, + type AudioClip, + type MIDIClip, + useDAWStore, +} from "../store/useDAWStore"; + +const initialState = useDAWStore.getState(); + +function audioClip(overrides: Partial = {}): AudioClip { + return { + id: "audio-clip", + filePath: "C:/audio/shared.wav", + name: "Audio", + startTime: 2, + duration: 6, + offset: 0, + color: "#38bdf8", + volumeDB: 0, + fadeIn: 0, + fadeOut: 0, + sampleRate: 48000, + sourceLength: 20, + ...overrides, + }; +} + +function midiClip(overrides: Partial = {}): MIDIClip { + return { + id: "midi-clip", + name: "MIDI", + startTime: 1, + duration: 6, + offset: 0, + sourceStart: 0, + sourceLength: 8, + loopEnabled: false, + loopOffset: 0, + loopLength: 8, + events: [ + { timestamp: 2, type: "noteOn", note: 60, velocity: 96 }, + { timestamp: 4, type: "noteOff", note: 60, velocity: 0 }, + ], + ccEvents: [{ time: 2.5, cc: 1, value: 64 }], + color: "#f72585", + ...overrides, + }; +} + +function setupTracks() { + const audioTrack = createDefaultTrack("track-audio", "Audio", "#38bdf8", "audio"); + const midiTrack = createDefaultTrack("track-midi", "MIDI", "#f72585", "midi"); + return { audioTrack, midiTrack }; +} + +describe("unified timeline split transaction", () => { + beforeEach(() => { + commandManager.clear(); + useDAWStore.setState(initialState); + }); + + afterEach(() => { + vi.restoreAllMocks(); + commandManager.clear(); + useDAWStore.setState(initialState); + }); + + it("splits selected audio and MIDI clips in place as one undoable transaction", () => { + const { audioTrack, midiTrack } = setupTracks(); + audioTrack.clips = [ + audioClip({ id: "audio-before", startTime: 0, duration: 1 }), + audioClip({ id: "audio-selected" }), + audioClip({ id: "audio-after", startTime: 10, duration: 1 }), + ]; + midiTrack.midiClips = [midiClip({ id: "midi-selected" })]; + const syncClipsWithBackend = vi.fn().mockResolvedValue(undefined); + const syncMIDITrackToBackend = vi.fn().mockResolvedValue(undefined); + + useDAWStore.setState({ + tracks: [audioTrack, midiTrack], + transport: { ...initialState.transport, currentTime: 4 }, + selectedClipIds: ["audio-selected", "midi-selected"], + selectedClipId: "midi-selected", + selectedTrackIds: ["track-audio", "track-midi"], + selectedTrackId: "track-midi", + lastSelectedTrackId: "track-audio", + syncClipsWithBackend, + syncMIDITrackToBackend, + canUndo: false, + canRedo: false, + }); + + useDAWStore.getState().splitClipAtPlayhead(); + + const splitState = useDAWStore.getState(); + expect(splitState.tracks[0].clips.map((clip) => clip.id)).toEqual([ + "audio-before", + expect.not.stringMatching(/^audio-/), + expect.not.stringMatching(/^audio-/), + "audio-after", + ]); + expect(splitState.tracks[0].clips.slice(1, 3).map((clip) => clip.startTime)).toEqual([2, 4]); + expect(splitState.tracks[1].midiClips.map((clip) => clip.startTime)).toEqual([1, 4]); + expect(splitState.selectedClipIds).toHaveLength(4); + expect(splitState.selectedClipIds).toEqual(expect.arrayContaining([ + splitState.tracks[0].clips[1].id, + splitState.tracks[0].clips[2].id, + splitState.tracks[1].midiClips[0].id, + splitState.tracks[1].midiClips[1].id, + ])); + expect(splitState.selectedClipId).toBe(splitState.tracks[1].midiClips[1].id); + expect(splitState.selectedTrackIds).toEqual(["track-audio", "track-midi"]); + expect(syncClipsWithBackend).toHaveBeenCalledTimes(1); + expect(syncMIDITrackToBackend).toHaveBeenCalledWith("track-midi", { debounce: false }); + expect(commandManager.getUndoStack()).toHaveLength(1); + + const splitAudioIds = splitState.tracks[0].clips.slice(1, 3).map((clip) => clip.id); + const splitMIDIIds = splitState.tracks[1].midiClips.map((clip) => clip.id); + useDAWStore.getState().undo(); + + const undone = useDAWStore.getState(); + expect(undone.tracks[0].clips.map((clip) => clip.id)).toEqual([ + "audio-before", + "audio-selected", + "audio-after", + ]); + expect(undone.tracks[1].midiClips.map((clip) => clip.id)).toEqual(["midi-selected"]); + expect(undone.selectedClipIds).toEqual(["audio-selected", "midi-selected"]); + expect(undone.selectedClipId).toBe("midi-selected"); + expect(undone.selectedTrackIds).toEqual(["track-audio", "track-midi"]); + expect(undone.selectedTrackId).toBe("track-midi"); + expect(undone.lastSelectedTrackId).toBe("track-audio"); + + useDAWStore.getState().redo(); + const redone = useDAWStore.getState(); + expect(redone.tracks[0].clips.slice(1, 3).map((clip) => clip.id)).toEqual(splitAudioIds); + expect(redone.tracks[1].midiClips.map((clip) => clip.id)).toEqual(splitMIDIIds); + }); + + it("uses selected tracks when no clips are selected, keeps clip selection empty, and skips locked clips", () => { + const { audioTrack, midiTrack } = setupTracks(); + const otherTrack = createDefaultTrack("track-other", "Other", "#94a3b8", "audio"); + audioTrack.clips = [ + audioClip({ id: "audio-anchor" }), + audioClip({ id: "audio-locked", startTime: 3, locked: true }), + ]; + midiTrack.midiClips = [midiClip({ id: "midi-track-selected" })]; + otherTrack.clips = [audioClip({ id: "audio-other" })]; + const syncClipsWithBackend = vi.fn().mockResolvedValue(undefined); + const syncMIDITrackToBackend = vi.fn().mockResolvedValue(undefined); + + useDAWStore.setState({ + tracks: [audioTrack, midiTrack, otherTrack], + selectedClipIds: [], + selectedClipId: null, + selectedTrackIds: ["track-audio", "track-midi"], + selectedTrackId: "track-audio", + lastSelectedTrackId: "track-midi", + syncClipsWithBackend, + syncMIDITrackToBackend, + canUndo: false, + canRedo: false, + }); + + useDAWStore.getState().splitClipAtPosition("audio-anchor", 4); + + const state = useDAWStore.getState(); + expect(state.tracks[0].clips).toHaveLength(3); + expect(state.tracks[0].clips.map((clip) => clip.id)).toContain("audio-locked"); + expect(state.tracks[1].midiClips).toHaveLength(2); + expect(state.tracks[2].clips.map((clip) => clip.id)).toEqual(["audio-other"]); + expect(state.selectedClipIds).toEqual([]); + expect(state.selectedClipId).toBeNull(); + expect(state.selectedTrackIds).toEqual(["track-audio", "track-midi"]); + expect(state.selectedTrackId).toBe("track-audio"); + expect(state.lastSelectedTrackId).toBe("track-midi"); + }); + + it("falls through non-crossing selected clips to clips crossing on selected tracks", () => { + const { audioTrack } = setupTracks(); + audioTrack.clips = [ + audioClip({ id: "selected-elsewhere", startTime: 0, duration: 1 }), + audioClip({ id: "track-crossing", startTime: 3, duration: 4 }), + ]; + useDAWStore.setState({ + tracks: [audioTrack], + transport: { ...initialState.transport, currentTime: 5 }, + selectedClipIds: ["selected-elsewhere"], + selectedClipId: "selected-elsewhere", + selectedTrackIds: ["track-audio"], + selectedTrackId: "track-audio", + syncClipsWithBackend: vi.fn().mockResolvedValue(undefined), + }); + + useDAWStore.getState().splitClipAtPlayhead(); + + const state = useDAWStore.getState(); + expect(state.tracks[0].clips.map((clip) => clip.id)).toContain("selected-elsewhere"); + expect(state.tracks[0].clips.filter((clip) => clip.id !== "selected-elsewhere")).toHaveLength(2); + expect(state.tracks[0].clips.map((clip) => clip.startTime)).toEqual([0, 3, 5]); + expect(state.selectedClipIds).toEqual(["selected-elsewhere"]); + }); + + it("splits every unlocked crossing clip at the playhead when nothing is selected", () => { + const { audioTrack, midiTrack } = setupTracks(); + audioTrack.clips = [ + audioClip({ id: "audio-crossing", startTime: 2, duration: 5 }), + audioClip({ id: "audio-outside", startTime: 8, duration: 2 }), + audioClip({ id: "audio-locked", startTime: 1, duration: 6, locked: true }), + ]; + midiTrack.midiClips = [midiClip({ id: "midi-crossing", startTime: 1, duration: 6 })]; + useDAWStore.setState({ + tracks: [audioTrack, midiTrack], + transport: { ...initialState.transport, currentTime: 4 }, + selectedClipIds: [], + selectedClipId: null, + selectedTrackIds: [], + selectedTrackId: null, + syncClipsWithBackend: vi.fn().mockResolvedValue(undefined), + syncMIDITrackToBackend: vi.fn().mockResolvedValue(undefined), + }); + + useDAWStore.getState().splitClipAtPlayhead(); + + const state = useDAWStore.getState(); + expect(state.tracks[0].clips.map((clip) => clip.startTime)).toEqual([2, 4, 8, 1]); + expect(state.tracks[0].clips.map((clip) => clip.id)).toEqual(expect.arrayContaining([ + "audio-outside", + "audio-locked", + ])); + expect(state.tracks[1].midiClips.map((clip) => clip.startTime)).toEqual([1, 4]); + expect(state.selectedClipIds).toEqual([]); + }); + + it("does not create history or sync for a locked clip or a boundary split", () => { + const { audioTrack } = setupTracks(); + audioTrack.clips = [audioClip({ id: "locked", locked: true })]; + const syncClipsWithBackend = vi.fn().mockResolvedValue(undefined); + useDAWStore.setState({ + tracks: [audioTrack], + selectedClipIds: ["locked"], + selectedClipId: "locked", + syncClipsWithBackend, + canUndo: false, + canRedo: false, + }); + + useDAWStore.getState().splitClipAtPosition("locked", 4); + expect(commandManager.getUndoStack()).toHaveLength(0); + expect(syncClipsWithBackend).not.toHaveBeenCalled(); + + audioTrack.clips = [audioClip({ id: "boundary" })]; + useDAWStore.setState({ tracks: [audioTrack], selectedClipIds: ["boundary"], selectedClipId: "boundary" }); + useDAWStore.getState().splitClipAtPosition("boundary", 2); + expect(commandManager.getUndoStack()).toHaveLength(0); + expect(useDAWStore.getState().tracks[0].clips.map((clip) => clip.id)).toEqual(["boundary"]); + + useDAWStore.getState().splitClipAtPosition("boundary", 8); + useDAWStore.getState().splitClipAtPosition("boundary", 2.0000005); + useDAWStore.getState().splitClipAtPosition("boundary", 7.9999995); + expect(commandManager.getUndoStack()).toHaveLength(0); + expect(useDAWStore.getState().tracks[0].clips.map((clip) => clip.id)).toEqual(["boundary"]); + }); + + it("transforms source offsets, fades, gain envelopes, and alternate takes for both audio children", () => { + const { audioTrack } = setupTracks(); + audioTrack.clips = [audioClip({ + id: "detailed", + startTime: 2, + duration: 8, + offset: 1, + pitchCorrectionSourceFilePath: "C:/audio/original.wav", + pitchCorrectionSourceOffset: 5, + fadeIn: 4, + fadeOut: 6, + gainEnvelope: [ + { time: 0, gain: 0.5 }, + { time: 4, gain: 1.5 }, + { time: 8, gain: 1 }, + ], + takes: [audioClip({ + id: "take-one", + filePath: "C:/audio/take.wav", + startTime: 2, + duration: 8, + offset: 2, + pitchCorrectionSourceOffset: 10, + fadeIn: 2, + fadeOut: 3, + gainEnvelope: [{ time: 0, gain: 1 }, { time: 6, gain: 0.4 }], + takes: undefined, + activeTakeIndex: undefined, + })], + activeTakeIndex: 0, + })]; + const syncClipsWithBackend = vi.fn().mockResolvedValue(undefined); + useDAWStore.setState({ + tracks: [audioTrack], + selectedClipIds: ["detailed"], + selectedClipId: "detailed", + syncClipsWithBackend, + }); + + useDAWStore.getState().splitClipAtPosition("detailed", 5); + + const [left, right] = useDAWStore.getState().tracks[0].clips; + expect(left).toMatchObject({ startTime: 2, duration: 3, offset: 1, fadeIn: 3, fadeOut: 0 }); + expect(right).toMatchObject({ + startTime: 5, + duration: 5, + offset: 4, + pitchCorrectionSourceOffset: 8, + fadeIn: 0, + fadeOut: 5, + }); + expect(left.gainEnvelope).toEqual([ + { time: 0, gain: 0.5 }, + { time: 3, gain: 1.25 }, + ]); + expect(right.gainEnvelope).toEqual([ + { time: 0, gain: 1.25 }, + { time: 1, gain: 1.5 }, + { time: 5, gain: 1 }, + ]); + expect(left.activeTakeIndex).toBe(0); + expect(right.activeTakeIndex).toBe(0); + expect(left.takes?.[0]).toMatchObject({ startTime: 2, duration: 3, offset: 2, fadeIn: 2, fadeOut: 0 }); + expect(right.takes?.[0]).toMatchObject({ + startTime: 5, + duration: 5, + offset: 5, + pitchCorrectionSourceOffset: 13, + fadeIn: 0, + fadeOut: 3, + }); + expect(left.takes?.[0].id).not.toBe("take-one"); + expect(right.takes?.[0].id).not.toBe("take-one"); + expect(left.takes?.[0].id).not.toBe(right.takes?.[0].id); + expect(Number.isFinite(left.takes?.[0].startTime)).toBe(true); + expect(Number.isFinite(right.takes?.[0].startTime)).toBe(true); + expect(useDAWStore.getState().selectedClipIds).toEqual([left.id, right.id]); + expect(useDAWStore.getState().selectedClipId).toBe(right.id); + }); + + it("bounds heterogeneous alternate takes to their own duration and source window", () => { + const { audioTrack } = setupTracks(); + audioTrack.clips = [audioClip({ + id: "heterogeneous", + startTime: 2, + duration: 8, + takes: [ + audioClip({ + id: "short-source-take", + filePath: "C:/audio/short.wav", + startTime: 2, + duration: 5, + offset: 2, + sourceLength: 6, + pitchCorrectionSourceOffset: 10, + fadeOut: 3, + takes: undefined, + activeTakeIndex: undefined, + }), + audioClip({ + id: "ends-before-split", + filePath: "C:/audio/shorter.wav", + startTime: 2, + duration: 2, + offset: 1, + sourceLength: 3, + pitchCorrectionSourceOffset: 20, + fadeOut: 1, + takes: undefined, + activeTakeIndex: undefined, + }), + ], + activeTakeIndex: 0, + })]; + useDAWStore.setState({ + tracks: [audioTrack], + selectedClipIds: ["heterogeneous"], + selectedClipId: "heterogeneous", + syncClipsWithBackend: vi.fn().mockResolvedValue(undefined), + }); + + useDAWStore.getState().splitClipAtPosition("heterogeneous", 5); + + const [left, right] = useDAWStore.getState().tracks[0].clips; + expect(left.takes?.[0]).toMatchObject({ duration: 3, offset: 2, fadeOut: 0 }); + expect(right.takes?.[0]).toMatchObject({ + duration: 1, + offset: 5, + pitchCorrectionSourceOffset: 13, + fadeOut: 1, + }); + expect((right.takes?.[0].offset || 0) + (right.takes?.[0].duration || 0)).toBe(6); + + expect(left.takes?.[1]).toMatchObject({ duration: 2, offset: 1, fadeOut: 1 }); + expect(right.takes?.[1]).toMatchObject({ + duration: 0, + offset: 3, + pitchCorrectionSourceOffset: 22, + fadeOut: 0, + }); + }); + + it("clones MIDI source content and keeps invalid MIDI editor sessions closed across undo", () => { + const { midiTrack } = setupTracks(); + midiTrack.midiClips = [midiClip({ id: "edited-midi", offset: 1 })]; + const session = { + sessionId: "session-midi", + trackId: "track-midi", + clipId: "edited-midi", + mode: "docked" as const, + selectedNoteIds: ["note-1"], + midiEditRange: null, + editCursorTime: 2, + activeTool: "select" as const, + visibleLanes: [{ id: "velocity", kind: "velocity" as const, label: "Velocity", height: 72 }], + activeLaneId: "velocity", + scrollY: 0, + windowPixelsPerSecond: 100, + windowScrollX: 0, + openedAt: 1, + updatedAt: 1, + }; + const syncMIDITrackToBackend = vi.fn().mockResolvedValue(undefined); + useDAWStore.setState({ + tracks: [midiTrack], + selectedClipIds: ["edited-midi"], + selectedClipId: "edited-midi", + midiEditorSessions: [session], + activeMidiEditorSessionId: session.sessionId, + dockedMidiEditorSessionId: session.sessionId, + detachedPanels: ["midiEditor"], + showPianoRoll: true, + pianoRollTrackId: "track-midi", + pianoRollClipId: "edited-midi", + selectedNoteIds: ["note-1"], + pianoRollEditCursorTime: 2, + syncMIDITrackToBackend, + }); + + useDAWStore.getState().splitMIDIClipAtPosition("edited-midi", 4); + + const splitState = useDAWStore.getState(); + const [left, right] = splitState.tracks[0].midiClips; + expect(left.offset).toBe(1); + expect(right.offset).toBe(4); + expect(left.events).toEqual(right.events); + expect(left.events).not.toBe(right.events); + expect(left.events[0]).not.toBe(right.events[0]); + expect(left.events[0]).not.toBe(midiTrack.midiClips[0].events[0]); + expect(splitState.midiEditorSessions).toEqual([]); + expect(splitState.pianoRollClipId).toBeNull(); + expect(splitState.showPianoRoll).toBe(false); + expect(splitState.detachedPanels).not.toContain("midiEditor"); + + useDAWStore.getState().undo(); + const undone = useDAWStore.getState(); + expect(undone.tracks[0].midiClips.map((clip) => clip.id)).toEqual(["edited-midi"]); + expect(undone.midiEditorSessions).toEqual([]); + expect(undone.pianoRollClipId).toBeNull(); + expect(undone.showPianoRoll).toBe(false); + expect(undone.selectedNoteIds).toEqual([]); + }); + + it("closes a detached native MIDI editor window whose source clip is split", () => { + const { midiTrack } = setupTracks(); + midiTrack.midiClips = [midiClip({ id: "windowed-midi" })]; + const session = { + sessionId: "windowed-session", + trackId: "track-midi", + clipId: "windowed-midi", + mode: "windowed" as const, + selectedNoteIds: [], + midiEditRange: null, + editCursorTime: null, + activeTool: "select" as const, + visibleLanes: [], + activeLaneId: "velocity", + scrollY: 0, + windowPixelsPerSecond: 100, + windowScrollX: 0, + openedAt: 1, + updatedAt: 1, + }; + const closeMidiEditorWindow = vi.spyOn(nativeBridge, "closeMidiEditorWindow").mockResolvedValue(true); + useDAWStore.setState({ + tracks: [midiTrack], + selectedClipIds: ["windowed-midi"], + selectedClipId: "windowed-midi", + midiEditorSessions: [session], + activeMidiEditorSessionId: session.sessionId, + dockedMidiEditorSessionId: null, + detachedPanels: ["midiEditor"], + showPianoRoll: false, + pianoRollTrackId: "track-midi", + pianoRollClipId: "windowed-midi", + syncMIDITrackToBackend: vi.fn().mockResolvedValue(undefined), + }); + + useDAWStore.getState().splitMIDIClipAtPosition("windowed-midi", 4); + + expect(closeMidiEditorWindow).toHaveBeenCalledWith("windowed-session", "sourceSplit"); + expect(useDAWStore.getState().midiEditorSessions).toEqual([]); + expect(useDAWStore.getState().detachedPanels).not.toContain("midiEditor"); + }); + + it("closes the pitch editor before removing its source clip ID", () => { + const { audioTrack } = setupTracks(); + audioTrack.clips = [audioClip({ id: "pitch-source" })]; + const closePitchEditor = vi.fn(() => useDAWStore.setState({ + showPitchEditor: false, + pitchEditorTrackId: null, + pitchEditorClipId: null, + pitchEditorFxIndex: 0, + })); + useDAWStore.setState({ + tracks: [audioTrack], + selectedClipIds: ["pitch-source"], + selectedClipId: "pitch-source", + showPitchEditor: true, + pitchEditorTrackId: "track-audio", + pitchEditorClipId: "pitch-source", + closePitchEditor, + syncClipsWithBackend: vi.fn().mockResolvedValue(undefined), + }); + + useDAWStore.getState().splitClipAtPosition("pitch-source", 4); + + expect(closePitchEditor).toHaveBeenCalledTimes(1); + expect(useDAWStore.getState().showPitchEditor).toBe(false); + expect(useDAWStore.getState().pitchEditorClipId).toBeNull(); + useDAWStore.getState().undo(); + expect(useDAWStore.getState().showPitchEditor).toBe(false); + }); +}); + +describe("playback clip sync identity", () => { + beforeEach(async () => { + commandManager.clear(); + const { resetSyncCache } = await import("../store/actions/clips"); + await resetSyncCache(); + useDAWStore.setState(initialState); + }); + + afterEach(async () => { + vi.restoreAllMocks(); + commandManager.clear(); + const { resetSyncCache } = await import("../store/actions/clips"); + await resetSyncCache(); + useDAWStore.setState(initialState); + }); + + it("removes one clip by ID without removing an identical same-file sibling", async () => { + const track = createDefaultTrack("track-audio", "Audio", "#38bdf8", "audio"); + track.clips = [ + audioClip({ id: "same-a", startTime: 2 }), + audioClip({ id: "same-b", startTime: 2 }), + ]; + const clearPlaybackClips = vi.spyOn(nativeBridge, "clearPlaybackClips").mockResolvedValue(true); + const addPlaybackClipsBatch = vi.spyOn(nativeBridge, "addPlaybackClipsBatch").mockResolvedValue(true); + const removePlaybackClipById = vi.spyOn(nativeBridge, "removePlaybackClipById").mockResolvedValue(true); + + useDAWStore.setState({ tracks: [track] }); + await useDAWStore.getState().syncClipsWithBackend(); + + expect(clearPlaybackClips).toHaveBeenCalledTimes(1); + expect(addPlaybackClipsBatch).toHaveBeenCalledTimes(1); + expect(addPlaybackClipsBatch.mock.calls[0][0]).toEqual(expect.arrayContaining([ + expect.objectContaining({ clipId: "same-a" }), + expect.objectContaining({ clipId: "same-b" }), + ])); + + useDAWStore.setState((state) => ({ + tracks: state.tracks.map((entry) => entry.id === "track-audio" + ? { ...entry, clips: entry.clips.filter((clip) => clip.id !== "same-a") } + : entry), + })); + await useDAWStore.getState().syncClipsWithBackend(); + + expect(clearPlaybackClips).toHaveBeenCalledTimes(1); + expect(removePlaybackClipById).toHaveBeenCalledTimes(1); + expect(removePlaybackClipById).toHaveBeenCalledWith("track-audio", "same-a"); + expect(addPlaybackClipsBatch).toHaveBeenCalledTimes(1); + }); + + it("serializes an in-flight split sync so undo is the final backend state", async () => { + const track = createDefaultTrack("track-audio", "Audio", "#38bdf8", "audio"); + track.clips = [ + audioClip({ id: "race-target", startTime: 2, duration: 6 }), + audioClip({ id: "race-sibling-a", startTime: 12, duration: 2 }), + audioClip({ id: "race-sibling-b", startTime: 16, duration: 2 }), + ]; + const backendClipIds = new Set(); + let releaseTargetRemoval!: () => void; + const targetRemovalGate = new Promise((resolve) => { + releaseTargetRemoval = resolve; + }); + let blockTargetRemoval = false; + + vi.spyOn(nativeBridge, "clearPlaybackClips").mockImplementation(async () => { + backendClipIds.clear(); + return true; + }); + vi.spyOn(nativeBridge, "addPlaybackClipsBatch").mockImplementation(async (clips) => { + for (const clip of clips) backendClipIds.add(clip.clipId || ""); + return true; + }); + const removePlaybackClipById = vi + .spyOn(nativeBridge, "removePlaybackClipById") + .mockImplementation(async (_trackId, clipId) => { + backendClipIds.delete(clipId); + if (blockTargetRemoval && clipId === "race-target") { + await targetRemovalGate; + } + return true; + }); + + useDAWStore.setState({ + tracks: [track], + selectedClipIds: ["race-target"], + selectedClipId: "race-target", + selectedTrackIds: [], + selectedTrackId: null, + }); + await useDAWStore.getState().syncClipsWithBackend(); + expect([...backendClipIds].sort()).toEqual([ + "race-sibling-a", + "race-sibling-b", + "race-target", + ]); + + blockTargetRemoval = true; + useDAWStore.getState().splitClipAtPosition("race-target", 4); + await vi.waitFor(() => { + expect(removePlaybackClipById).toHaveBeenCalledWith("track-audio", "race-target"); + }); + const splitChildIds = useDAWStore.getState().tracks[0].clips + .filter((clip) => !clip.id.startsWith("race-sibling")) + .map((clip) => clip.id); + + useDAWStore.getState().undo(); + const latestStateBarrier = useDAWStore.getState().syncClipsWithBackend(); + releaseTargetRemoval(); + await latestStateBarrier; + + expect(useDAWStore.getState().tracks[0].clips.map((clip) => clip.id)).toEqual([ + "race-target", + "race-sibling-a", + "race-sibling-b", + ]); + expect([...backendClipIds].sort()).toEqual([ + "race-sibling-a", + "race-sibling-b", + "race-target", + ]); + for (const splitChildId of splitChildIds) { + expect(backendClipIds.has(splitChildId)).toBe(false); + } + }); + + it("retries one failed native rebuild and leaves the cache invalidated for the next sync", async () => { + const track = createDefaultTrack("track-audio", "Audio", "#38bdf8", "audio"); + track.clips = [audioClip({ id: "recovery-target" })]; + const clearPlaybackClips = vi + .spyOn(nativeBridge, "clearPlaybackClips") + .mockResolvedValueOnce(false) + .mockResolvedValueOnce(false) + .mockResolvedValueOnce(true); + const addPlaybackClipsBatch = vi + .spyOn(nativeBridge, "addPlaybackClipsBatch") + .mockResolvedValue(true); + const warning = vi.spyOn(console, "warn").mockImplementation(() => {}); + + useDAWStore.setState({ tracks: [track] }); + + await expect(useDAWStore.getState().syncClipsWithBackend()).rejects.toThrow( + "clearPlaybackClips returned false", + ); + expect(clearPlaybackClips).toHaveBeenCalledTimes(2); + expect(addPlaybackClipsBatch).not.toHaveBeenCalled(); + expect(warning).toHaveBeenCalledWith( + expect.stringContaining("retrying one full rebuild"), + expect.any(Error), + ); + + await useDAWStore.getState().syncClipsWithBackend(); + + expect(clearPlaybackClips).toHaveBeenCalledTimes(3); + expect(addPlaybackClipsBatch).toHaveBeenCalledTimes(1); + expect(addPlaybackClipsBatch).toHaveBeenCalledWith([ + expect.objectContaining({ clipId: "recovery-target" }), + ]); + }); + + it("logs a split sync failure after the bounded recovery attempt", async () => { + const track = createDefaultTrack("track-audio", "Audio", "#38bdf8", "audio"); + track.clips = [audioClip({ id: "failed-split" })]; + const clearPlaybackClips = vi + .spyOn(nativeBridge, "clearPlaybackClips") + .mockResolvedValue(false); + vi.spyOn(nativeBridge, "addPlaybackClipsBatch").mockResolvedValue(true); + const errorLog = vi.spyOn(console, "error").mockImplementation(() => {}); + vi.spyOn(console, "warn").mockImplementation(() => {}); + useDAWStore.setState({ + tracks: [track], + selectedClipIds: ["failed-split"], + selectedClipId: "failed-split", + }); + + useDAWStore.getState().splitClipAtPosition("failed-split", 4); + + await vi.waitFor(() => { + expect(errorLog).toHaveBeenCalledWith( + "[timeline.split] Backend clip sync failed after recovery attempt", + expect.any(Error), + ); + }); + expect(clearPlaybackClips).toHaveBeenCalledTimes(2); + }); + + it("makes reset an awaited barrier before direct clip inserts", async () => { + const track = createDefaultTrack("track-audio", "Audio", "#38bdf8", "audio"); + track.clips = [ + audioClip({ id: "barrier-source" }), + audioClip({ id: "barrier-sibling-a", startTime: 12 }), + audioClip({ id: "barrier-sibling-b", startTime: 20 }), + ]; + const backendClipIds: string[] = []; + let releaseRemoval!: () => void; + const removalGate = new Promise((resolve) => { + releaseRemoval = resolve; + }); + let blockRemoval = false; + + const clearPlaybackClips = vi + .spyOn(nativeBridge, "clearPlaybackClips") + .mockImplementation(async () => { + backendClipIds.splice(0, backendClipIds.length); + return true; + }); + vi.spyOn(nativeBridge, "addPlaybackClipsBatch").mockImplementation(async (clips) => { + for (const clip of clips) backendClipIds.push(clip.clipId || ""); + return true; + }); + const removePlaybackClipById = vi + .spyOn(nativeBridge, "removePlaybackClipById") + .mockImplementation(async (_trackId, clipId) => { + const index = backendClipIds.indexOf(clipId); + if (index >= 0) backendClipIds.splice(index, 1); + if (blockRemoval && clipId === "barrier-source") await removalGate; + return true; + }); + vi.spyOn(nativeBridge, "addPlaybackClip").mockImplementation(async ( + _trackId, + _filePath, + _startTime, + _duration, + _offset, + _volumeDB, + _fadeIn, + _fadeOut, + clipId, + ) => { + backendClipIds.push(clipId || ""); + return true; + }); + + useDAWStore.setState({ tracks: [track] }); + await useDAWStore.getState().syncClipsWithBackend(); + expect([...backendClipIds].sort()).toEqual([ + "barrier-sibling-a", + "barrier-sibling-b", + "barrier-source", + ]); + + blockRemoval = true; + useDAWStore.setState((state) => ({ + tracks: state.tracks.map((entry) => entry.id === "track-audio" + ? { + ...entry, + clips: entry.clips.map((clip) => clip.id === "barrier-source" + ? { ...clip, startTime: 3 } + : clip), + } + : entry), + })); + const pendingSync = useDAWStore.getState().syncClipsWithBackend(); + await vi.waitFor(() => { + expect(removePlaybackClipById).toHaveBeenCalledWith("track-audio", "barrier-source"); + }); + + const { resetSyncCache } = await import("../store/actions/clips"); + const resetBarrier = resetSyncCache(); + releaseRemoval(); + await pendingSync; + await resetBarrier; + + const recordedClip = audioClip({ id: "direct-recording", startTime: 10 }); + useDAWStore.setState((state) => ({ + tracks: state.tracks.map((entry) => entry.id === "track-audio" + ? { ...entry, clips: [...entry.clips, recordedClip] } + : entry), + })); + await nativeBridge.addPlaybackClip( + "track-audio", + recordedClip.filePath, + recordedClip.startTime, + recordedClip.duration, + recordedClip.offset, + recordedClip.volumeDB, + recordedClip.fadeIn, + recordedClip.fadeOut, + recordedClip.id, + ); + await useDAWStore.getState().syncClipsWithBackend(); + + expect(clearPlaybackClips).toHaveBeenCalledTimes(2); + expect([...backendClipIds].sort()).toEqual([ + "barrier-sibling-a", + "barrier-sibling-b", + "barrier-source", + "direct-recording", + ].sort()); + }); + + it("deletes an identity-aware same-file clip while rebuilding only its sibling", async () => { + const track = createDefaultTrack("track-audio", "Audio", "#38bdf8", "audio"); + track.clips = [ + audioClip({ id: "delete-a" }), + audioClip({ id: "keep-b" }), + ]; + const clearPlaybackClips = vi.spyOn(nativeBridge, "clearPlaybackClips").mockResolvedValue(true); + const addPlaybackClipsBatch = vi.spyOn(nativeBridge, "addPlaybackClipsBatch").mockResolvedValue(true); + useDAWStore.setState({ + tracks: [track], + selectedClipIds: ["delete-a"], + selectedClipId: "delete-a", + rippleMode: "off", + }); + + useDAWStore.getState().deleteClip("delete-a"); + await vi.waitFor(() => expect(addPlaybackClipsBatch).toHaveBeenCalledTimes(1)); + + expect(useDAWStore.getState().tracks[0].clips.map((clip) => clip.id)).toEqual(["keep-b"]); + expect(clearPlaybackClips).toHaveBeenCalledTimes(1); + expect(addPlaybackClipsBatch).toHaveBeenCalledWith([ + expect.objectContaining({ trackId: "track-audio", clipId: "keep-b" }), + ]); + }); +}); diff --git a/frontend/src/__tests__/timelineTimeSelectionEditing.test.ts b/frontend/src/__tests__/timelineTimeSelectionEditing.test.ts new file mode 100644 index 0000000..d9d69ee --- /dev/null +++ b/frontend/src/__tests__/timelineTimeSelectionEditing.test.ts @@ -0,0 +1,356 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { getRegisteredAction } from "../store/actionRegistry"; +import { commandManager } from "../store/commands"; +import { + createDefaultTrack, + type AudioClip, + type MIDIClip, + useDAWStore, +} from "../store/useDAWStore"; +import { serializeMIDIClipsForBackend } from "../utils/midiClipSerialization"; + +const originalState = useDAWStore.getState(); + +function audioClip(id: string, overrides: Partial = {}): AudioClip { + return { + id, + filePath: `C:/audio/${id}.wav`, + name: id, + startTime: 0, + duration: 4, + offset: 0, + color: "#38bdf8", + volumeDB: 0, + fadeIn: 0, + fadeOut: 0, + ...overrides, + }; +} + +function sourceMIDIClip(): MIDIClip { + return { + id: "midi-source", + name: "MIDI source", + startTime: 1, + duration: 8, + offset: 2, + sourceStart: 0, + sourceLength: 12, + loopEnabled: false, + loopOffset: 0, + loopLength: 12, + events: [ + { timestamp: 2.5, type: "noteOn", note: 60, velocity: 100 }, + { timestamp: 3.5, type: "noteOff", note: 60, velocity: 0 }, + { timestamp: 4.5, type: "noteOn", note: 62, velocity: 100 }, + { timestamp: 5.5, type: "noteOff", note: 62, velocity: 0 }, + { timestamp: 7.5, type: "noteOn", note: 64, velocity: 100 }, + { timestamp: 8.5, type: "noteOff", note: 64, velocity: 0 }, + ], + ccEvents: [ + { cc: 1, time: 3, value: 30 }, + { cc: 1, time: 5, value: 50 }, + { cc: 1, time: 8, value: 80 }, + ], + color: "#f72585", + }; +} + +function serializedSummary(clip: MIDIClip) { + return serializeMIDIClipsForBackend([clip])[0].events.map((event) => ({ + type: event.type, + timestamp: event.timestamp, + note: event.note, + value: event.value, + })); +} + +beforeEach(() => { + commandManager.clear(); + useDAWStore.setState((state) => ({ + tracks: [], + markers: [], + regions: [], + tempoMarkers: [], + selectedClipId: null, + selectedClipIds: [], + selectedTrackId: null, + selectedTrackIds: [], + selectedNoteIds: [], + timeSelection: null, + clipboard: { clip: null, clips: [], isCut: false }, + globalLocked: false, + lockSettings: { items: false, envelopes: false, timeSelection: false, markers: false }, + moveEnvelopesWithItems: true, + transport: { ...state.transport, currentTime: 0, tempo: 120 }, + syncClipsWithBackend: vi.fn(async () => undefined), + syncMIDITrackToBackend: vi.fn(async () => undefined), + canUndo: false, + canRedo: false, + })); +}); + +afterEach(() => { + vi.restoreAllMocks(); + commandManager.clear(); + useDAWStore.setState(originalState); +}); + +describe("atomic time-selection editing", () => { + it("deep-copies and cuts MIDI source windows with correct note/CC playback visibility", () => { + const track = createDefaultTrack("midi", "MIDI", "#f72585", "midi", []); + const source = sourceMIDIClip(); + track.midiClips = [source]; + useDAWStore.setState({ + tracks: [track], + timeSelection: { start: 3, end: 6 }, + selectedClipId: source.id, + selectedClipIds: [source.id], + }); + + useDAWStore.getState().copyWithinTimeSelection(); + const copied = useDAWStore.getState().clipboard.clip as MIDIClip; + expect(copied).toMatchObject({ startTime: 3, duration: 3, offset: 4 }); + expect(copied.events).not.toBe(source.events); + expect(copied.ccEvents).not.toBe(source.ccEvents); + expect(serializedSummary(copied)).toEqual([ + { type: "noteOn", timestamp: 0.5, note: 62, value: undefined }, + { type: "cc", timestamp: 1, note: undefined, value: 50 }, + { type: "noteOff", timestamp: 1.5, note: 62, value: undefined }, + ]); + expect(commandManager.getUndoStack()).toHaveLength(0); + + useDAWStore.getState().cutWithinTimeSelection(); + let state = useDAWStore.getState(); + const fragments = state.tracks[0].midiClips; + expect(fragments.map((clip) => [clip.startTime, clip.duration, clip.offset])) + .toEqual([[1, 2, 2], [6, 3, 7]]); + expect(serializedSummary(fragments[0])).toEqual([ + { type: "noteOn", timestamp: 0.5, note: 60, value: undefined }, + { type: "cc", timestamp: 1, note: undefined, value: 30 }, + { type: "noteOff", timestamp: 1.5, note: 60, value: undefined }, + ]); + expect(serializedSummary(fragments[1])).toEqual([ + { type: "noteOn", timestamp: 0.5, note: 64, value: undefined }, + { type: "cc", timestamp: 1, note: undefined, value: 80 }, + { type: "noteOff", timestamp: 1.5, note: 64, value: undefined }, + ]); + expect(state.clipboard).toMatchObject({ isCut: true, sourceRemoved: true }); + expect(commandManager.getUndoStack()).toHaveLength(1); + const fragmentIds = fragments.map((clip) => clip.id); + + state.undo(); + expect(useDAWStore.getState().tracks[0].midiClips).toHaveLength(1); + expect(useDAWStore.getState().tracks[0].midiClips[0]).toMatchObject({ + id: source.id, + startTime: 1, + duration: 8, + offset: 2, + }); + state = useDAWStore.getState(); + state.redo(); + expect(useDAWStore.getState().tracks[0].midiClips.map((clip) => clip.id)) + .toEqual(fragmentIds); + }); + + it("ripple-deletes mixed audio/MIDI, automation, markers, and regions in one command", () => { + const audio = createDefaultTrack("audio", "Audio", "#38bdf8", "audio", []); + audio.clips = [audioClip("audio", { startTime: 1, duration: 5 })]; + audio.automationLanes = [{ + id: "lane", + param: "volume", + points: [ + { id: "before", time: 1, value: 0.1 }, + { id: "inside", time: 3, value: 0.3 }, + { id: "after", time: 5, value: 0.5 }, + ], + visible: true, + mode: "read", + armed: false, + readEnabled: true, + }]; + const midi = createDefaultTrack("midi", "MIDI", "#f72585", "midi", []); + midi.midiClips = [{ ...sourceMIDIClip(), startTime: 0, duration: 6, offset: 0 }]; + useDAWStore.setState({ + tracks: [audio, midi], + timeSelection: { start: 2, end: 4 }, + markers: [ + { id: "inside", time: 3, name: "Inside", color: "#fff" }, + { id: "after", time: 5, name: "After", color: "#fff" }, + ], + regions: [{ id: "region", name: "Span", startTime: 1, endTime: 5, color: "#fff" }], + selectedClipId: "midi-source", + selectedClipIds: ["audio", "midi-source"], + }); + + const action = getRegisteredAction("edit.deleteWithinSelection")!; + expect(action.canHandleShortcut?.()).toBe(true); + action.execute(); + let state = useDAWStore.getState(); + expect(state.tracks[0].clips.map((clip) => [clip.startTime, clip.duration, clip.offset])) + .toEqual([[1, 1, 0], [2, 2, 3]]); + expect(state.tracks[1].midiClips.map((clip) => [clip.startTime, clip.duration, clip.offset])) + .toEqual([[0, 2, 0], [2, 2, 4]]); + expect(state.tracks[0].automationLanes[0].points.map((point) => [point.id, point.time])) + .toEqual([["before", 1], ["after", 3]]); + expect(state.markers).toEqual([{ id: "after", time: 3, name: "After", color: "#fff" }]); + expect(state.regions).toEqual([{ id: "region", name: "Span", startTime: 1, endTime: 3, color: "#fff" }]); + expect(state.timeSelection).toBeNull(); + expect(commandManager.getUndoStack()).toHaveLength(1); + const idsAfterDelete = state.tracks.flatMap((track) => [ + ...track.clips.map((clip) => clip.id), + ...track.midiClips.map((clip) => clip.id), + ]); + + state.undo(); + expect(useDAWStore.getState().tracks[0].automationLanes[0].points.map((point) => point.id)) + .toEqual(["before", "inside", "after"]); + state = useDAWStore.getState(); + state.redo(); + expect(useDAWStore.getState().tracks.flatMap((track) => [ + ...track.clips.map((clip) => clip.id), + ...track.midiClips.map((clip) => clip.id), + ])).toEqual(idsAfterDelete); + }); + + it("deletes mixed razor content atomically without touching locked clips", () => { + const audio = createDefaultTrack("audio", "Audio", "#38bdf8", "audio", []); + audio.clips = [audioClip("locked", { startTime: 0, locked: true })]; + audio.automationLanes = [{ + id: "lane", + param: "volume", + points: [ + { id: "keep", time: 0.5, value: 0.25 }, + { id: "remove", time: 1.5, value: 0.75 }, + ], + visible: true, + mode: "read", + armed: false, + readEnabled: true, + }]; + const midi = createDefaultTrack("midi", "MIDI", "#f72585", "midi", []); + midi.midiClips = [{ ...sourceMIDIClip(), startTime: 0, duration: 4, offset: 0 }]; + useDAWStore.setState({ + tracks: [audio, midi], + razorEdits: [ + { trackId: "audio", start: 1, end: 2 }, + { trackId: "midi", start: 1, end: 2 }, + ], + }); + + const action = getRegisteredAction("edit.delete")!; + expect(action.canHandleShortcut?.()).toBe(true); + action.execute(); + let state = useDAWStore.getState(); + expect(state.tracks[0].clips.map((clip) => clip.id)).toEqual(["locked"]); + expect(state.tracks[0].automationLanes[0].points.map((point) => point.id)).toEqual(["keep"]); + expect(state.tracks[1].midiClips.map((clip) => [clip.startTime, clip.duration, clip.offset])) + .toEqual([[0, 1, 0], [2, 2, 2]]); + expect(state.razorEdits).toEqual([]); + expect(commandManager.getUndoStack()).toHaveLength(1); + const midiFragmentIds = state.tracks[1].midiClips.map((clip) => clip.id); + + state.undo(); + expect(useDAWStore.getState().tracks[0].automationLanes[0].points.map((point) => point.id)) + .toEqual(["keep", "remove"]); + expect(useDAWStore.getState().tracks[1].midiClips).toHaveLength(1); + expect(useDAWStore.getState().razorEdits).toHaveLength(2); + state = useDAWStore.getState(); + state.redo(); + expect(useDAWStore.getState().tracks[1].midiClips.map((clip) => clip.id)) + .toEqual(midiFragmentIds); + }); + + it("applies item, envelope, marker, global, and time-selection locks independently", () => { + const runInsert = (locks: { + items: boolean; + envelopes: boolean; + timeSelection: boolean; + markers: boolean; + }) => { + commandManager.clear(); + const track = createDefaultTrack("audio", "Audio", "#38bdf8", "audio", []); + track.clips = [audioClip("audio", { startTime: 3 })]; + track.automationLanes = [{ + id: "lane", + param: "volume", + points: [{ id: "point", time: 3.5, value: 0.5 }], + visible: true, + mode: "read", + armed: false, + readEnabled: true, + }]; + useDAWStore.setState({ + tracks: [track], + timeSelection: { start: 1, end: 2 }, + markers: [{ id: "marker", time: 3, name: "Marker", color: "#fff" }], + globalLocked: false, + lockSettings: locks, + canUndo: false, + canRedo: false, + }); + useDAWStore.getState().insertSilenceAtTimeSelection(); + return useDAWStore.getState(); + }; + + let state = runInsert({ items: true, envelopes: false, timeSelection: false, markers: false }); + expect(state.tracks[0].clips[0].startTime).toBe(3); + expect(state.tracks[0].automationLanes[0].points[0].time).toBe(4.5); + expect(state.markers[0].time).toBe(4); + expect(commandManager.getUndoStack()).toHaveLength(1); + + state = runInsert({ items: false, envelopes: true, timeSelection: false, markers: false }); + expect(state.tracks[0].clips[0].startTime).toBe(4); + expect(state.tracks[0].automationLanes[0].points[0].time).toBe(3.5); + expect(state.markers[0].time).toBe(4); + + state = runInsert({ items: false, envelopes: false, timeSelection: false, markers: true }); + expect(state.tracks[0].clips[0].startTime).toBe(4); + expect(state.tracks[0].automationLanes[0].points[0].time).toBe(4.5); + expect(state.markers[0].time).toBe(3); + + state = runInsert({ items: true, envelopes: true, timeSelection: false, markers: true }); + expect(state.tracks[0].clips[0].startTime).toBe(3); + expect(state.tracks[0].automationLanes[0].points[0].time).toBe(3.5); + expect(state.markers[0].time).toBe(3); + expect(commandManager.getUndoStack()).toHaveLength(0); + expect(getRegisteredAction("edit.insertSilence")!.canHandleShortcut?.()).toBe(false); + + state = runInsert({ items: false, envelopes: true, timeSelection: true, markers: true }); + expect(state.tracks[0].clips[0].startTime).toBe(4); + expect(state.timeSelection).toEqual({ start: 1, end: 2 }); + + commandManager.clear(); + useDAWStore.setState({ globalLocked: true, canUndo: false, canRedo: false }); + expect(getRegisteredAction("edit.insertSilence")!.canHandleShortcut?.()).toBe(false); + useDAWStore.getState().insertSilenceAtTimeSelection(); + expect(useDAWStore.getState().tracks[0].clips[0].startTime).toBe(4); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it("locks set/clear/deselect time-selection mutations without blocking other deselection", () => { + useDAWStore.setState({ + timeSelection: { start: 1, end: 2 }, + selectedClipId: "stale", + selectedClipIds: ["stale"], + lockSettings: { items: false, envelopes: false, timeSelection: true, markers: false }, + }); + useDAWStore.getState().setTimeSelection(3, 4); + useDAWStore.getState().clearTimeSelection(); + useDAWStore.getState().deselectAll(); + expect(useDAWStore.getState().timeSelection).toEqual({ start: 1, end: 2 }); + expect(useDAWStore.getState().selectedClipIds).toEqual([]); + + useDAWStore.setState({ globalLocked: true }); + useDAWStore.getState().setTimeSelection(5, 6); + useDAWStore.getState().clearTimeSelection(); + expect(useDAWStore.getState().timeSelection).toEqual({ start: 1, end: 2 }); + + useDAWStore.setState({ + globalLocked: false, + lockSettings: { items: false, envelopes: false, timeSelection: false, markers: false }, + }); + useDAWStore.getState().clearTimeSelection(); + expect(useDAWStore.getState().timeSelection).toBeNull(); + }); +}); diff --git a/frontend/src/__tests__/timelineTimeSelectionSplit.test.ts b/frontend/src/__tests__/timelineTimeSelectionSplit.test.ts new file mode 100644 index 0000000..308bb48 --- /dev/null +++ b/frontend/src/__tests__/timelineTimeSelectionSplit.test.ts @@ -0,0 +1,167 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { getRegisteredAction } from "../store/actionRegistry"; +import { commandManager } from "../store/commands"; +import { + createDefaultTrack, + type AudioClip, + type MIDIClip, + useDAWStore, +} from "../store/useDAWStore"; + +const originalState = useDAWStore.getState(); + +function audioClip(overrides: Partial = {}): AudioClip { + return { + id: "audio", + filePath: "C:/audio.wav", + name: "Audio", + startTime: 0, + duration: 8, + offset: 1, + color: "#38bdf8", + volumeDB: 0, + fadeIn: 0.5, + fadeOut: 0.75, + sampleRate: 48_000, + sourceLength: 16, + ...overrides, + }; +} + +function midiClip(overrides: Partial = {}): MIDIClip { + return { + id: "midi", + name: "MIDI", + startTime: 0, + duration: 8, + offset: 2, + sourceStart: 0, + sourceLength: 12, + loopEnabled: false, + loopOffset: 0, + loopLength: 12, + events: [ + { timestamp: 1, type: "noteOn", note: 60, velocity: 100 }, + { timestamp: 6, type: "noteOff", note: 60, velocity: 0 }, + ], + ccEvents: [{ time: 2, cc: 1, value: 64 }], + color: "#f72585", + ...overrides, + }; +} + +beforeEach(() => { + commandManager.clear(); + const audio = createDefaultTrack("audio-track", "Audio", "#38bdf8", "audio"); + const midi = createDefaultTrack("midi-track", "MIDI", "#f72585", "midi"); + audio.clips = [audioClip()]; + midi.midiClips = [midiClip()]; + useDAWStore.setState({ + tracks: [audio, midi], + selectedClipId: "midi", + selectedClipIds: ["audio", "midi"], + selectedTrackId: null, + selectedTrackIds: [], + timeSelection: { start: 5, end: 2 }, + globalLocked: false, + lockSettings: { ...originalState.lockSettings, items: false }, + syncClipsWithBackend: vi.fn().mockResolvedValue(undefined), + syncMIDITrackToBackend: vi.fn().mockResolvedValue(undefined), + canUndo: false, + canRedo: false, + }); +}); + +afterEach(() => { + vi.restoreAllMocks(); + commandManager.clear(); + useDAWStore.setState(originalState); +}); + +describe("split at time selection", () => { + it("splits selected audio and MIDI at both normalized boundaries as one stable transaction", () => { + const state = useDAWStore.getState(); + const syncAudio = state.syncClipsWithBackend as ReturnType; + const syncMIDI = state.syncMIDITrackToBackend as ReturnType; + const action = getRegisteredAction("edit.splitAtSelection")!; + + expect(action.canHandleShortcut?.()).toBe(true); + action.execute(); + + const split = useDAWStore.getState(); + expect(split.tracks[0].clips.map((clip) => [clip.startTime, clip.duration, clip.offset])) + .toEqual([[0, 2, 1], [2, 3, 3], [5, 3, 6]]); + expect(split.tracks[1].midiClips.map((clip) => [clip.startTime, clip.duration, clip.offset])) + .toEqual([[0, 2, 2], [2, 3, 4], [5, 3, 7]]); + expect(split.selectedClipIds).toHaveLength(6); + expect(split.selectedClipId).toBe(split.tracks[1].midiClips[2].id); + expect(new Set(split.selectedClipIds).size).toBe(6); + expect(split.tracks[1].midiClips[0].events).not.toBe(split.tracks[1].midiClips[1].events); + expect(syncAudio).toHaveBeenCalledTimes(1); + expect(syncMIDI).toHaveBeenCalledWith("midi-track", { debounce: false }); + expect(commandManager.getUndoStack()).toHaveLength(1); + + const splitIds = split.tracks.flatMap((track) => [ + ...track.clips.map((clip) => clip.id), + ...track.midiClips.map((clip) => clip.id), + ]); + split.undo(); + expect(useDAWStore.getState().tracks[0].clips.map((clip) => clip.id)).toEqual(["audio"]); + expect(useDAWStore.getState().tracks[1].midiClips.map((clip) => clip.id)).toEqual(["midi"]); + expect(useDAWStore.getState().selectedClipIds).toEqual(["audio", "midi"]); + + useDAWStore.getState().redo(); + expect(useDAWStore.getState().tracks.flatMap((track) => [ + ...track.clips.map((clip) => clip.id), + ...track.midiClips.map((clip) => clip.id), + ])).toEqual(splitIds); + expect(commandManager.getUndoStack()).toHaveLength(1); + }); + + it("honors selected-clip precedence, individual locks, item locks, and exact no-op availability", () => { + useDAWStore.setState((state) => ({ + tracks: state.tracks.map((track) => track.id === "audio-track" + ? { ...track, clips: track.clips.map((clip) => ({ ...clip, locked: true })) } + : track), + selectedClipId: "audio", + selectedClipIds: ["audio"], + })); + const action = getRegisteredAction("edit.splitAtSelection")!; + expect(action.canHandleShortcut?.()).toBe(false); + action.execute(); + expect(commandManager.getUndoStack()).toHaveLength(0); + expect(useDAWStore.getState().tracks[1].midiClips).toHaveLength(1); + + useDAWStore.setState((state) => ({ + selectedClipId: "midi", + selectedClipIds: ["midi"], + lockSettings: { ...state.lockSettings, items: true }, + })); + expect(action.canHandleShortcut?.()).toBe(false); + action.execute(); + expect(commandManager.getUndoStack()).toHaveLength(0); + + useDAWStore.setState((state) => ({ + lockSettings: { ...state.lockSettings, items: false }, + globalLocked: true, + })); + expect(action.canHandleShortcut?.()).toBe(false); + action.execute(); + expect(commandManager.getUndoStack()).toHaveLength(0); + }); + + it("rejects missing, zero-length, non-finite, and boundary-only selections", () => { + const action = getRegisteredAction("edit.splitAtSelection")!; + for (const timeSelection of [ + null, + { start: 2, end: 2 }, + { start: Number.NaN, end: 3 }, + { start: 0, end: 8 }, + ]) { + useDAWStore.setState({ timeSelection }); + expect(action.canHandleShortcut?.(), JSON.stringify(timeSelection)).toBe(false); + action.execute(); + expect(commandManager.getUndoStack()).toHaveLength(0); + } + }); +}); diff --git a/frontend/src/__tests__/timelineTrackDrop.test.ts b/frontend/src/__tests__/timelineTrackDrop.test.ts index ae8c857..33e83c6 100644 --- a/frontend/src/__tests__/timelineTrackDrop.test.ts +++ b/frontend/src/__tests__/timelineTrackDrop.test.ts @@ -23,4 +23,12 @@ describe("timeline track drop regression guards", () => { expect(trackActionsSource).toContain("const includeAddTrack = !(options.backendAlreadyCreated && !hasExecutedOnce)"); expect(trackActionsSource).toContain("syncTrackCoreToBackend(fullTrack, { includeAddTrack })"); }); + + it("dedupes external file drops and allows multi-track MIDI files to land on one compatible track", () => { + expect(timelineSource).toContain("dedupeExternalMediaFiles"); + expect(timelineSource).toContain("processedExternalDropKeysRef"); + expect(timelineSource).toContain("getExternalMediaDropKey"); + expect(timelineSource).toContain('isExternalTrackCompatible(targetTrack, "midi");'); + expect(timelineSource).not.toContain("(preview.midiTrackCount ?? 1) <= 1"); + }); }); diff --git a/frontend/src/__tests__/timelineZoomSemantics.test.ts b/frontend/src/__tests__/timelineZoomSemantics.test.ts new file mode 100644 index 0000000..dba6a52 --- /dev/null +++ b/frontend/src/__tests__/timelineZoomSemantics.test.ts @@ -0,0 +1,168 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { + getRegisteredAction, + registerScopedActionExecutor, +} from "../store/actionRegistry"; +import { createDefaultTrack, useDAWStore } from "../store/useDAWStore"; +import { + getTimelineProjectFitView, + getTimelineRangeFitView, +} from "../utils/contextWheelBehaviors"; +import { dispatchGlobalShortcut } from "../utils/globalShortcutDispatcher"; +import { + activateShortcutContext, + registerShortcutSurface, + resetShortcutContextForTests, +} from "../utils/shortcutContext"; + +const originalState = useDAWStore.getState(); +const cleanup: Array<() => void> = []; + +beforeEach(() => { + resetShortcutContextForTests(); + useDAWStore.setState({ + tracks: [], + recordingClips: [], + timeSelection: null, + keyboardShortcutProfileId: "openstudio", + customShortcuts: {}, + transport: { ...originalState.transport, currentTime: 0 }, + }); +}); + +afterEach(() => { + while (cleanup.length > 0) cleanup.pop()?.(); + vi.restoreAllMocks(); + resetShortcutContextForTests(); + useDAWStore.setState(originalState); +}); + +describe("Timeline zoom semantics", () => { + it("fits mixed audio/MIDI content against the actual viewport and responds to resize", () => { + const tracks = [{ + clips: [{ startTime: 2, duration: 8 }], + midiClips: [{ startTime: 15, duration: 5 }], + }]; + expect(getTimelineProjectFitView(tracks, undefined, 1000)).toEqual({ + pixelsPerSecond: 50, + scrollX: 0, + }); + expect(getTimelineProjectFitView(tracks, undefined, 500)).toEqual({ + pixelsPerSecond: 25, + scrollX: 0, + }); + }); + + it("includes active recording extent, ignores invalid clips, and clamps supported zoom", () => { + const tracks = [{ + clips: [ + { startTime: Number.NaN, duration: 10 }, + { startTime: 0, duration: -4 }, + ], + midiClips: [{ startTime: Number.POSITIVE_INFINITY, duration: 1 }], + }]; + expect(getTimelineProjectFitView(tracks, 4, 800)).toEqual({ + pixelsPerSecond: 200, + scrollX: 0, + }); + expect(getTimelineProjectFitView([{ clips: [{ startTime: 0, duration: 0.001 }], midiClips: [] }], null, 800)) + .toEqual({ pixelsPerSecond: 1000, scrollX: 0 }); + expect(getTimelineProjectFitView([{ clips: [{ startTime: 0, duration: 10_000 }], midiClips: [] }], null, 100)) + .toEqual({ pixelsPerSecond: 1, scrollX: 0 }); + }); + + it("returns no fit for an empty/invalid viewport and fits normalized selections with margin", () => { + expect(getTimelineProjectFitView([], undefined, 800)).toBeNull(); + expect(getTimelineProjectFitView([{ clips: [{ startTime: 0, duration: 1 }], midiClips: [] }], null, 0)) + .toBeNull(); + expect(getTimelineProjectFitView([{ clips: [{ startTime: 0, duration: 1 }], midiClips: [] }], null, Number.NaN)) + .toBeNull(); + expect(getTimelineRangeFitView(6, 2, 1000)).toEqual({ + pixelsPerSecond: 200, + scrollX: 300, + }); + expect(getTimelineRangeFitView(2, 2, 1000)).toBeNull(); + expect(getTimelineRangeFitView(Number.NaN, 2, 1000)).toBeNull(); + }); + + it("routes both zoom commands only to the active Timeline owner", () => { + const audio = createDefaultTrack("track", "Track", "#38bdf8", "audio"); + audio.clips = [{ + id: "clip", + filePath: "C:/audio.wav", + name: "Audio", + startTime: 0, + duration: 20, + offset: 0, + color: "#38bdf8", + volumeDB: 0, + fadeIn: 0, + fadeOut: 0, + }]; + useDAWStore.setState({ + tracks: [audio], + timeSelection: { start: 2, end: 6 }, + }); + const executedActionIds: string[] = []; + const execute = vi.fn((actionId: string) => { + executedActionIds.push(actionId); + return "handled" as const; + }); + cleanup.push(registerScopedActionExecutor( + { kind: "timeline" }, + execute, + ["view.zoomToFit", "view.zoomToSelection"], + )); + activateShortcutContext({ kind: "timeline" }); + + const fit = getRegisteredAction("view.zoomToFit")!; + const selection = getRegisteredAction("view.zoomToSelection")!; + expect(fit.canHandleShortcut?.()).toBe(true); + expect(selection.canHandleShortcut?.()).toBe(true); + fit.execute(); + selection.execute(); + expect(executedActionIds).toEqual([ + "view.zoomToFit", + "view.zoomToSelection", + ]); + + activateShortcutContext({ kind: "application" }); + expect(fit.canHandleShortcut?.()).toBe(false); + expect(selection.canHandleShortcut?.()).toBe(false); + }); + + it("dispatches Waveform's F8 project-fit binding through the production resolver", () => { + const midi = createDefaultTrack("midi", "MIDI", "#f72585", "midi"); + midi.midiClips = [{ + id: "midi-clip", + name: "MIDI", + startTime: 0, + duration: 16, + offset: 0, + sourceStart: 0, + sourceLength: 16, + loopEnabled: false, + loopOffset: 0, + loopLength: 16, + events: [], + ccEvents: [], + color: "#f72585", + }]; + useDAWStore.setState({ + tracks: [midi], + keyboardShortcutProfileId: "waveform", + }); + const execute = vi.fn(() => "handled" as const); + cleanup.push(registerShortcutSurface({ kind: "timeline" }, () => "unmatched")); + cleanup.push(registerScopedActionExecutor( + { kind: "timeline" }, + execute, + ["view.zoomToFit"], + )); + activateShortcutContext({ kind: "timeline" }); + + expect(dispatchGlobalShortcut({ key: "F8", code: "F8", source: "browser" }, "windows")) + .toBe(true); + expect(execute).toHaveBeenCalledWith("view.zoomToFit"); + }); +}); diff --git a/frontend/src/__tests__/tone3000InfiniteAppend.test.ts b/frontend/src/__tests__/tone3000InfiniteAppend.test.ts new file mode 100644 index 0000000..2a3635c --- /dev/null +++ b/frontend/src/__tests__/tone3000InfiniteAppend.test.ts @@ -0,0 +1,105 @@ +// @ts-expect-error The app tsconfig omits Node builtin typings, while Vitest runs this source audit in Node. +import { readFileSync } from "node:fs"; +import { describe, expect, it, vi } from "vitest"; +import { + createTONE3000AppendGate, + observeTONE3000AppendSentinel, + shouldRetryTONE3000Append, +} from "../utils/tone3000InfiniteAppend"; + +describe("TONE3000 infinite append gate", () => { + it("allows one request per search/page and advances only to a new key", () => { + const gate = createTONE3000AppendGate(); + const first = gate.begin("mesa:a2:page:2"); + + expect(first).not.toBeNull(); + expect(gate.begin("mesa:a2:page:2")).toBeNull(); + gate.settle(first!, "success"); + expect(gate.begin("mesa:a2:page:2")).toBeNull(); + expect(gate.begin("mesa:a2:page:3")).not.toBeNull(); + }); + + it("blocks an automatic error loop but allows the accessible manual retry", () => { + const gate = createTONE3000AppendGate(); + const first = gate.begin("clean:a1:page:4"); + gate.settle(first!, "error"); + + expect(gate.begin("clean:a1:page:4")).toBeNull(); + expect(gate.begin("clean:a1:page:4", true)).not.toBeNull(); + }); + + it("releases stale work and resets state for a changed search signature", () => { + const gate = createTONE3000AppendGate(); + const first = gate.begin("old:page:2"); + gate.settle(first!, "stale"); + expect(gate.begin("old:page:2")).not.toBeNull(); + + gate.reset(); + expect(gate.begin("old:page:2")).not.toBeNull(); + }); + + it("routes only the matching failed append through manual load-more retry", () => { + const failure = { + mode: "append" as const, + page: 3, + signature: "mesa:a2", + status: "Live TONE3000 search failed", + }; + + expect(shouldRetryTONE3000Append( + failure, + "mesa:a2", + "Live TONE3000 search failed", + true, + )).toBe(true); + expect(shouldRetryTONE3000Append(failure, "clean:a2", failure.status, true)).toBe(false); + expect(shouldRetryTONE3000Append(failure, failure.signature, "Catalog unavailable", true)).toBe(false); + expect(shouldRetryTONE3000Append({ ...failure, mode: "replace" }, failure.signature, failure.status, true)).toBe(false); + expect(shouldRetryTONE3000Append(failure, failure.signature, failure.status, false)).toBe(false); + }); +}); + +describe("TONE3000 append sentinel", () => { + it("observes the real scroll root at the viewport edge and disconnects cleanly", () => { + const target = {} as Element; + const root = {} as Element; + const observe = vi.fn(); + const disconnect = vi.fn(); + const onIntersect = vi.fn(); + let callback!: IntersectionObserverCallback; + let options!: IntersectionObserverInit; + + const cleanup = observeTONE3000AppendSentinel(target, root, onIntersect, (nextCallback, nextOptions) => { + callback = nextCallback; + options = nextOptions; + return { observe, disconnect }; + }); + + expect(observe).toHaveBeenCalledWith(target); + expect(options).toMatchObject({ root, rootMargin: "0px", threshold: 0.01 }); + + callback([{ isIntersecting: false, intersectionRatio: 0 } as IntersectionObserverEntry], {} as IntersectionObserver); + expect(onIntersect).not.toHaveBeenCalled(); + callback([{ isIntersecting: true, intersectionRatio: 1 } as IntersectionObserverEntry], {} as IntersectionObserver); + expect(onIntersect).toHaveBeenCalledTimes(1); + + cleanup(); + expect(disconnect).toHaveBeenCalledTimes(1); + }); + + it("is a no-op when the sentinel is not mounted", () => { + const factory = vi.fn(); + const cleanup = observeTONE3000AppendSentinel(null, null, vi.fn(), factory); + + expect(factory).not.toHaveBeenCalled(); + expect(cleanup()).toBeUndefined(); + }); + + it("re-arms source-flow observation when the search/page request signature changes", () => { + const explorerSource = readFileSync( + new URL("../components/NAMExplorer.tsx", import.meta.url), + "utf8", + ); + expect(explorerSource).toContain('requestKey: `${currentLiveSearchSignature}:page:${livePage + 1}`'); + }); +}); diff --git a/frontend/src/__tests__/tone3000LiveSearch.test.ts b/frontend/src/__tests__/tone3000LiveSearch.test.ts new file mode 100644 index 0000000..7f1b3ba --- /dev/null +++ b/frontend/src/__tests__/tone3000LiveSearch.test.ts @@ -0,0 +1,110 @@ +import { afterEach, describe, expect, it, vi } from "vitest"; +import { + TONE3000_QUERY_DEBOUNCE_MS, + buildTONE3000LiveSearchSnapshot, + createTONE3000QueryDebouncer, + createTONE3000SearchEpoch, +} from "../utils/tone3000LiveSearch"; + +function snapshot(overrides: Partial[0]> = {}) { + return buildTONE3000LiveSearchSnapshot({ + query: "", + page: 1, + pageSize: 12, + targetPageSize: 24, + requestedSort: "trending", + sortMode: "trending", + tab: "trending", + gearFilter: "amp_amp-cab", + format: "nam", + architecture: "a2", + sourceFlow: "amp", + sourceFlowCategoryFilter: "all", + includeModels: false, + ...overrides, + }); +} + +afterEach(() => { + vi.useRealTimers(); +}); + +describe("TONE3000 live search request snapshots", () => { + it("trims text and requests best-match for every non-empty query", () => { + const request = snapshot({ query: " mesa lead ", requestedSort: "newest" }); + + expect(request.query).toBe("mesa lead"); + expect(request.sort).toBe("best-match"); + expect(Object.isFrozen(request)).toBe(true); + }); + + it("preserves the selected API sort for an empty query", () => { + expect(snapshot({ query: " ", requestedSort: "downloads-all-time" }).sort).toBe("downloads-all-time"); + }); + + it("uses one search signature across pages and a distinct cache key per page", () => { + const first = snapshot({ query: "clean", page: 1 }); + const second = snapshot({ query: "clean", page: 2 }); + + expect(first.signature).toBe(second.signature); + expect(first.cacheKey).not.toBe(second.cacheKey); + }); +}); + +describe("TONE3000 live search request epochs", () => { + it("rejects stale success, error, and finally handlers after a replacement starts", () => { + const epoch = createTONE3000SearchEpoch(); + const first = epoch.begin(snapshot({ architecture: "a1" }).signature); + const second = epoch.begin(snapshot({ architecture: "a2" }).signature); + + expect(epoch.isCurrent(first)).toBe(false); + expect(epoch.isCurrent(second)).toBe(true); + + epoch.invalidate(); + expect(epoch.isCurrent(second)).toBe(false); + }); +}); + +describe("TONE3000 query debounce", () => { + it("commits only the latest value after 400 ms", () => { + vi.useFakeTimers(); + const committed = vi.fn(); + const debounce = createTONE3000QueryDebouncer(committed); + + debounce.schedule("m"); + debounce.schedule("me"); + debounce.schedule("mesa"); + vi.advanceTimersByTime(TONE3000_QUERY_DEBOUNCE_MS - 1); + expect(committed).not.toHaveBeenCalled(); + + vi.advanceTimersByTime(1); + expect(committed).toHaveBeenCalledTimes(1); + expect(committed).toHaveBeenLastCalledWith("mesa"); + }); + + it("flushes Enter/search immediately and cancels the pending duplicate", () => { + vi.useFakeTimers(); + const committed = vi.fn(); + const debounce = createTONE3000QueryDebouncer(committed); + + debounce.schedule("modern high gain"); + debounce.flush("modern high gain"); + expect(committed).toHaveBeenCalledTimes(1); + expect(committed).toHaveBeenLastCalledWith("modern high gain"); + + vi.advanceTimersByTime(TONE3000_QUERY_DEBOUNCE_MS * 2); + expect(committed).toHaveBeenCalledTimes(1); + }); + + it("does not commit after cancellation", () => { + vi.useFakeTimers(); + const committed = vi.fn(); + const debounce = createTONE3000QueryDebouncer(committed); + + debounce.schedule("a2 clean"); + debounce.cancel(); + vi.runAllTimers(); + + expect(committed).not.toHaveBeenCalled(); + }); +}); diff --git a/frontend/src/__tests__/tone3000MockSearch.test.ts b/frontend/src/__tests__/tone3000MockSearch.test.ts new file mode 100644 index 0000000..94931d9 --- /dev/null +++ b/frontend/src/__tests__/tone3000MockSearch.test.ts @@ -0,0 +1,334 @@ +import { beforeEach, describe, expect, it, vi } from "vitest"; +import { + boundNAMCatalogRowsForDisplay, + classifyNAMSourceCategory, + mergeTONE3000TonePages, + modelArchitecture, + resolveNAMCatalogSelection, + tone3000LivePageSizing, +} from "../components/NAMExplorer"; +import { nativeBridge } from "../services/NativeBridge"; +import { namCatalogCaptureSelectionKey } from "../utils/namToneCaptureSelection"; + +describe("TONE3000 dev NAM search mock", () => { + beforeEach(() => { + vi.stubGlobal("window", { + location: { + search: "?mockPlugin=nam", + }, + }); + }); + + it("respects sort, page, page_size, totals, and total pages", async () => { + const firstPage = await nativeBridge.searchTONE3000NAM({ + page: 1, + page_size: 2, + sort: "downloads-all-time", + gears: "amp_amp-cab", + architecture: "all", + }); + const secondPage = await nativeBridge.searchTONE3000NAM({ + page: 2, + page_size: 2, + sort: "downloads-all-time", + gears: "amp_amp-cab", + architecture: "all", + }); + + expect(firstPage.success).toBe(true); + expect(firstPage.page).toBe(1); + expect(firstPage.page_size).toBe(2); + expect(firstPage.total).toBe(72); + expect(firstPage.total_pages).toBe(36); + expect(firstPage.has_more).toBe(true); + expect(firstPage.next_page).toBe(2); + expect(firstPage.tones?.map((tone) => tone.title)).toEqual([ + "Crisp Twin Clean A2", + "Jazz Chorus Glass", + ]); + expect(secondPage.page).toBe(2); + expect(secondPage.tones?.map((tone) => tone.title)).toEqual([ + "Edge Clean Breakup", + "High Gain Modern", + ]); + }); + + it("models preview-to-library promotion with a new durable path", async () => { + const preview = await nativeBridge.installNAMModel({ + id: 5320302, + model_id: 5320302, + tone_id: 53203, + name: "Classic Crunch A2", + model_url: "https://example.invalid/classic-crunch-a2.nam", + }, { mode: "preview" }); + + expect(preview.record?.preview).toBe(true); + expect(preview.record?.localPath.replace(/\\/g, "/")).toContain("/previews/"); + + const committed = await nativeBridge.commitNAMPreviewTone(preview.record!, { + toneName: "Classic Crunch", + }); + + expect(committed.success).toBe(true); + expect(committed.record?.preview).toBe(false); + expect(committed.record?.localPath.replace(/\\/g, "/")).toContain("/library/tone-53203/"); + expect(committed.record?.localPath).not.toBe(preview.record?.localPath); + }); + + it("keeps each UI surface inside a bounded live-search page budget", () => { + expect(tone3000LivePageSizing("rail", "all")).toEqual({ + targetPageSize: 4, + apiPageSize: 2, + }); + expect(tone3000LivePageSizing("source-flow", "all")).toEqual({ + targetPageSize: 12, + apiPageSize: 6, + }); + expect(tone3000LivePageSizing("full", "all")).toEqual({ + targetPageSize: 24, + apiPageSize: 12, + }); + expect(tone3000LivePageSizing("full", "a2")).toEqual({ + targetPageSize: 24, + apiPageSize: 24, + }); + }); + + it("bounds the initial saved-catalog DOM per surface without truncating live append results", () => { + const rows = Array.from({ length: 72 }, (_, index) => `tone-${index + 1}`); + + expect(boundNAMCatalogRowsForDisplay(rows, "rail", "cache", "latest")).toHaveLength(4); + expect(boundNAMCatalogRowsForDisplay(rows, "source-flow", "cache", "latest")).toHaveLength(12); + expect(boundNAMCatalogRowsForDisplay(rows, "full", "cache", "latest")).toHaveLength(24); + expect(boundNAMCatalogRowsForDisplay(rows, "full", "live", "latest")).toBe(rows); + expect(boundNAMCatalogRowsForDisplay(rows, "source-flow", "cache", "installed")).toBe(rows); + expect(boundNAMCatalogRowsForDisplay(rows, "source-flow", "cache", "favorites")).toBe(rows); + }); + + it("deduplicates appended server pages by stable tone identity", () => { + const first = [ + { id: 100, title: "First" }, + { id: 101, title: "Second" }, + ]; + const second = [ + { id: 101, title: "Second duplicate from another architecture page" }, + { id: 102, title: "Third" }, + ]; + + expect(mergeTONE3000TonePages(first, second, true).map((tone) => tone.id)).toEqual([100, 101, 102]); + expect(mergeTONE3000TonePages(first, second, false).map((tone) => tone.id)).toEqual([101, 102]); + }); + + it("returns a compact newest page that matches the rack rail browse shape", async () => { + const payload = await nativeBridge.searchTONE3000NAM({ + page: 1, + page_size: 4, + sort: "newest", + gears: "amp_amp-cab", + architecture: "all", + }); + + expect(payload.success).toBe(true); + expect(payload.page).toBe(1); + expect(payload.page_size).toBe(4); + expect(payload.total).toBe(72); + expect(payload.total_pages).toBe(18); + expect(payload.tones?.map((tone) => tone.title)).toEqual([ + "Headbangers Ball Amp Pack IR/RAW", + "Ambient Glow", + "Classic Crunch", + "High Gain Modern", + ]); + }); + + it("preserves A2 identity on summary-only search rows", async () => { + const payload = await nativeBridge.searchTONE3000NAM({ + page: 1, + page_size: 4, + sort: "newest", + gears: "amp_amp-cab", + architecture: "a2", + includeModels: false, + }); + + expect(payload.success).toBe(true); + expect(payload.total).toBeGreaterThan(0); + expect(payload.tones?.length).toBeGreaterThan(0); + for (const tone of payload.tones ?? []) { + expect(tone.models).toBeUndefined(); + expect(tone.searchArchitecture).toBe("2"); + expect(modelArchitecture(tone, {})).toBe("A2"); + } + }); + + it("separates cabinet IR rows from space IR source material", async () => { + const payload = await nativeBridge.searchTONE3000NAM({ + query: "ir", + page: 1, + page_size: 20, + sort: "name-az", + gears: "ir", + architecture: "all", + }); + + expect(payload.success).toBe(true); + const categories = new Set((payload.tones ?? []).map((tone) => classifyNAMSourceCategory(tone.gear, tone.character, tone.description))); + expect(categories.has("cabinet-ir")).toBe(true); + expect(categories.has("space-ir")).toBe(true); + }); + + it("supports the production cabinet IR request without NAM format conflicts", async () => { + const payload = await nativeBridge.searchTONE3000NAM({ + page: 1, + page_size: 20, + sort: "trending", + gears: "cab", + format: "ir", + architecture: "", + includeModels: false, + }); + + expect(payload.success).toBe(true); + expect(payload.total).toBeGreaterThan(0); + expect(payload.tones?.length).toBeGreaterThan(0); + for (const tone of payload.tones ?? []) { + expect(tone.models).toBeUndefined(); + expect(tone.platform).toBe("ir"); + expect(classifyNAMSourceCategory(tone.gear, tone.character, tone.description)).toBe("cabinet-ir"); + } + }); + + it("hydrates an IR tone without applying a NAM architecture filter", async () => { + const detail = await nativeBridge.getTONE3000ToneDetail(53109, ""); + + expect(detail.success).toBe(true); + expect(detail.models).toHaveLength(1); + expect(detail.models?.[0]?.model_url).toMatch(/\.wav$/); + }); + + it("keeps mock cabinet IR installs as audio files", async () => { + const payload = await nativeBridge.searchTONE3000NAM({ + query: "cabinet", + page: 1, + page_size: 5, + sort: "name-az", + gears: "ir", + architecture: "all", + }); + const cabinetModel = payload.tones?.flatMap((tone) => tone.models ?? []) + .find((model) => classifyNAMSourceCategory(model.gear_type, model.name, model.model_url) === "cabinet-ir"); + + expect(cabinetModel).toBeTruthy(); + const result = await nativeBridge.installNAMModel(cabinetModel!, { mode: "preview" }); + + expect(result.success).toBe(true); + expect(result.record?.localPath).toMatch(/\.wav$/); + expect(result.record?.gearType).toBe("cabinet-ir"); + }); + + it("hydrates tone detail with architecture-filtered models", async () => { + const detail = await nativeBridge.getTONE3000ToneDetail(53101, "a2"); + + expect(detail.success).toBe(true); + expect(detail.tone?.title).toBe("Crisp Twin Clean A2"); + expect(detail.models).toHaveLength(1); + expect(detail.models?.[0]?.model_url).toContain("crisp-twin-clean-a2.nam"); + expect(detail.models?.[0]?.inputCalibrationDb).toBe(-12); + expect(detail.models?.[0]?.normalization).toMatchObject({ + mode: "A2 calibrated", + targetLufs: -18, + }); + }); + + it("keeps a summary-only tone selected when hydration replaces its placeholder model key", () => { + const hydratedRows = [ + { + key: "53101:5310102:trending:0:0", + tone: { id: 53101, title: "Crisp Twin Clean A2" }, + model: { id: 5310102, name: "Crisp Twin Clean A2" }, + }, + { + key: "53102:5310202:trending:1:0", + tone: { id: 53102, title: "Other tone" }, + model: { id: 5310202, name: "Other model" }, + }, + ]; + + expect(resolveNAMCatalogSelection( + hydratedRows, + "53101:0:trending:0:0", + hydratedRows[1], + )?.key).toBe("53101:5310102:trending:0:0"); + + const multiModelRows = [ + hydratedRows[0], + { + key: "53101:5310103:trending:0:1", + tone: hydratedRows[0].tone, + model: { id: 5310103, name: "Chosen full rig" }, + }, + ]; + expect(resolveNAMCatalogSelection( + multiModelRows, + "53101:5310103", + multiModelRows[0], + )?.key).toBe("53101:5310103:trending:0:1"); + }); + + it("resolves an exact URL-only capture instead of falling back to the first pack row", () => { + const tone = { id: 88001, title: "URL-only pack" }; + const clean = { name: "Clean", model_url: "https://example.invalid/captures/clean.nam" }; + const lead = { name: "Lead", model_url: "https://example.invalid/captures/lead.nam" }; + const rows = [ + { key: "88001:0:latest:0:0", tone, model: clean }, + { key: "88001:0:latest:0:1", tone, model: lead }, + ]; + + expect(resolveNAMCatalogSelection( + rows, + namCatalogCaptureSelectionKey(tone, lead), + rows[0], + )?.key).toBe(rows[1].key); + expect(resolveNAMCatalogSelection(rows, "88001:0", rows[1])?.key).toBe(rows[0].key); + }); + + it("returns not found for missing mock tone details", async () => { + const detail = await nativeBridge.getTONE3000ToneDetail(999999, "all"); + + expect(detail.success).toBe(false); + expect(detail.statusCode).toBe(404); + }); + + it("preserves install metadata and supports preview rack load", async () => { + const detail = await nativeBridge.getTONE3000ToneDetail(53101, "a2"); + const model = detail.models?.[0]; + expect(model).toBeTruthy(); + + const result = await nativeBridge.installNAMModel({ + ...model!, + toneTitle: detail.tone?.title, + creator: detail.tone?.creator, + gearType: detail.tone?.gear, + license: "Free", + }, { mode: "preview" }); + + expect(result.success).toBe(true); + expect(result.record?.preview).toBe(true); + expect(result.record?.toneTitle).toBe("Crisp Twin Clean A2"); + expect(result.record?.creator).toBe("OpenStudio QA"); + expect(result.record?.sourceProvider).toBe("tone3000"); + expect(result.record?.lastSeenMetadata?.inputCalibrationDb).toBe(-12); + + await expect(nativeBridge.loadNAMModelIntoRack({ + chain: "track", + trackId: "track-1", + fxIndex: 0, + }, "amp", result.record!.localPath)).resolves.toBe(true); + const loadedState = await nativeBridge.getBuiltInPluginState({ + chain: "track", + trackId: "track-1", + fxIndex: 0, + }); + expect(loadedState.modelState?.ampModelSize).toBe(1); + }); +}); diff --git a/frontend/src/__tests__/tone3000Session.test.ts b/frontend/src/__tests__/tone3000Session.test.ts new file mode 100644 index 0000000..4ad6b79 --- /dev/null +++ b/frontend/src/__tests__/tone3000Session.test.ts @@ -0,0 +1,128 @@ +import { beforeEach, describe, expect, it, vi } from "vitest"; +import { nativeBridge } from "../services/NativeBridge"; +import { + bootstrapTONE3000Session, + ensureTONE3000Session, + getTONE3000SessionSnapshot, + resetTONE3000SessionForTests, + startTONE3000InteractiveAuth, +} from "../services/tone3000Session"; + +describe("TONE3000 shared session", () => { + beforeEach(() => { + vi.restoreAllMocks(); + resetTONE3000SessionForTests(); + }); + + it("uses a valid stored token on startup without opening browser auth", async () => { + const startAuth = vi.spyOn(nativeBridge, "startTONE3000AuthFlow"); + const refresh = vi.spyOn(nativeBridge, "refreshTONE3000Auth"); + vi.spyOn(nativeBridge, "getTONE3000AuthStatus").mockResolvedValue({ + success: true, + authenticated: true, + expired: false, + hasRefreshToken: true, + clientId: "client-id", + }); + + await bootstrapTONE3000Session(); + + expect(refresh).not.toHaveBeenCalled(); + expect(startAuth).not.toHaveBeenCalled(); + expect(getTONE3000SessionSnapshot().status?.authenticated).toBe(true); + }); + + it("silently refreshes an expired stored token once on startup", async () => { + let refreshed = false; + const startAuth = vi.spyOn(nativeBridge, "startTONE3000AuthFlow"); + vi.spyOn(nativeBridge, "getTONE3000AuthStatus").mockImplementation(async () => ({ + success: true, + authenticated: true, + expired: !refreshed, + hasRefreshToken: true, + clientId: "client-id", + })); + const refresh = vi.spyOn(nativeBridge, "refreshTONE3000Auth").mockImplementation(async () => { + refreshed = true; + return { success: true, authenticated: true, hasRefreshToken: true, clientId: "client-id" }; + }); + + const status = await bootstrapTONE3000Session(); + + expect(refresh).toHaveBeenCalledTimes(1); + expect(startAuth).not.toHaveBeenCalled(); + expect(status?.authenticated).toBe(true); + expect(status?.expired).toBe(false); + }); + + it("does not open browser auth when no stored token exists", async () => { + const startAuth = vi.spyOn(nativeBridge, "startTONE3000AuthFlow"); + vi.spyOn(nativeBridge, "getTONE3000AuthStatus").mockResolvedValue({ + success: true, + authenticated: false, + hasRefreshToken: false, + }); + + const result = await ensureTONE3000Session("live search"); + + expect(result.ok).toBe(false); + expect(result.message).toContain("Connect TONE3000"); + expect(startAuth).not.toHaveBeenCalled(); + }); + + it("connects a first-time user through the native browser flow without exposing a token", async () => { + const getStatus = vi.spyOn(nativeBridge, "getTONE3000AuthStatus") + .mockResolvedValueOnce({ + success: true, + authenticated: false, + hasRefreshToken: false, + configuredClientId: true, + }) + .mockResolvedValue({ + success: true, + authenticated: true, + expired: false, + hasRefreshToken: true, + configuredClientId: true, + clientId: "publishable-client-id", + }); + const startAuth = vi.spyOn(nativeBridge, "startTONE3000AuthFlow").mockResolvedValue({ + success: true, + status: "connected", + clientId: "publishable-client-id", + }); + + await bootstrapTONE3000Session(); + const result = await startTONE3000InteractiveAuth(); + + expect(result.status).toBe("connected"); + expect(startAuth).toHaveBeenCalledWith({}); + expect(getStatus).toHaveBeenCalledTimes(2); + expect(getTONE3000SessionSnapshot().status).toMatchObject({ + authenticated: true, + hasRefreshToken: true, + }); + }); + + it("reports reconnect after invalid refresh without repeating browser prompts", async () => { + const startAuth = vi.spyOn(nativeBridge, "startTONE3000AuthFlow"); + vi.spyOn(nativeBridge, "getTONE3000AuthStatus").mockResolvedValue({ + success: true, + authenticated: false, + expired: true, + hasRefreshToken: true, + clientId: "client-id", + }); + vi.spyOn(nativeBridge, "refreshTONE3000Auth").mockResolvedValue({ + success: false, + oauthError: "invalid_grant", + error: "Refresh token expired", + }); + + const result = await ensureTONE3000Session("loading the tone"); + + expect(result.ok).toBe(false); + expect(result.message).toContain("Refresh token expired"); + expect(startAuth).not.toHaveBeenCalled(); + }); +}); diff --git a/frontend/src/__tests__/trackBatchRename.test.ts b/frontend/src/__tests__/trackBatchRename.test.ts new file mode 100644 index 0000000..8fd85cb --- /dev/null +++ b/frontend/src/__tests__/trackBatchRename.test.ts @@ -0,0 +1,199 @@ +import { afterEach, beforeEach, describe, expect, it } from "vitest"; +import { commandManager } from "../store/commands"; +import { + createDefaultTrack, + type Track, + type TrackType, + useDAWStore, +} from "../store/useDAWStore"; +import { + buildTrackRenameChanges, + getTrackNameEditKeyAction, + resolveTrackRenameTargetIds, + shouldCommitTrackNameEdit, +} from "../utils/trackRename"; +import trackNameEditorSource from "../components/TrackNameEditor.tsx?raw"; + +const initialState = useDAWStore.getState(); + +function makeTrack(id: string, name: string, type: TrackType = "audio"): Track { + return createDefaultTrack(id, name, "#3b82f6", type); +} + +function resetStore(tracks: Track[] = []) { + commandManager.clear(); + useDAWStore.setState({ + ...initialState, + tracks, + selectedTrackId: null, + selectedTrackIds: [], + lastSelectedTrackId: null, + isModified: false, + canUndo: false, + canRedo: false, + }); +} + +describe("batch track rename helpers", () => { + const tracks = [ + makeTrack("top", "Top"), + makeTrack("middle", "Middle", "midi"), + makeTrack("bottom", "Bottom", "ai"), + ]; + + it("orders selected targets by their visual project order", () => { + expect( + resolveTrackRenameTargetIds( + tracks, + ["bottom", "top", "middle"], + "bottom", + ), + ).toEqual(["top", "middle", "bottom"]); + }); + + it("targets only an edited track outside the current selection", () => { + expect( + resolveTrackRenameTargetIds(tracks, ["top", "middle"], "bottom"), + ).toEqual(["bottom"]); + }); + + it("builds suffixes in visual order while ignoring duplicates and missing ids", () => { + expect( + buildTrackRenameChanges( + tracks, + ["bottom", "missing", "top", "bottom", "middle"], + "Example", + ), + ).toEqual([ + { id: "top", oldName: "Top", newName: "Example" }, + { id: "middle", oldName: "Middle", newName: "Example 1" }, + { id: "bottom", oldName: "Bottom", newName: "Example 2" }, + ]); + }); + + it("maps Enter and Escape while leaving IME composition untouched", () => { + expect(getTrackNameEditKeyAction("Enter", false)).toBe("commit"); + expect(getTrackNameEditKeyAction("Escape", false)).toBe("cancel"); + expect(getTrackNameEditKeyAction("Enter", true)).toBeNull(); + expect(getTrackNameEditKeyAction("Enter", false, 229)).toBeNull(); + expect(getTrackNameEditKeyAction("a", false)).toBeNull(); + }); + + it("does not commit a focus/blur cycle whose draft never changed", () => { + expect(shouldCommitTrackNameEdit("Snare", "Snare")).toBe(false); + expect(shouldCommitTrackNameEdit("Snare", "Snare 2")).toBe(true); + expect(trackNameEditorSource).toContain( + "if (!shouldCommitTrackNameEdit(initialDraftRef.current, draftRef.current))", + ); + }); +}); + +describe("batch track rename action", () => { + beforeEach(() => resetStore()); + + afterEach(() => resetStore()); + + it("renames mixed track types in one undoable, dirty transaction", () => { + const tracks = [ + makeTrack("audio", "Audio", "audio"), + makeTrack("midi", "MIDI", "midi"), + makeTrack("instrument", "Instrument", "instrument"), + makeTrack("ai", "AI", "ai"), + { ...makeTrack("folder", "Folder", "audio"), isFolder: true }, + makeTrack("bus", "Bus", "bus"), + ]; + resetStore(tracks); + useDAWStore.setState({ + selectedTrackId: "ai", + selectedTrackIds: ["ai", "bus", "midi", "folder", "audio", "instrument"], + lastSelectedTrackId: "ai", + }); + + const state = useDAWStore.getState(); + const targets = resolveTrackRenameTargetIds( + state.tracks, + state.selectedTrackIds, + "ai", + ); + state.renameTracks(targets, "Example"); + + expect(useDAWStore.getState().tracks.map((track) => track.name)).toEqual([ + "Example", + "Example 1", + "Example 2", + "Example 3", + "Example 4", + "Example 5", + ]); + expect(useDAWStore.getState().isModified).toBe(true); + expect(useDAWStore.getState().canUndo).toBe(true); + expect(commandManager.getUndoStack()).toHaveLength(1); + expect(commandManager.getUndoStack()[0].type).toBe("RENAME_TRACKS"); + + // Selection changes after the edit are not part of rename history. + useDAWStore.setState({ + selectedTrackId: "bus", + selectedTrackIds: ["bus"], + lastSelectedTrackId: "bus", + }); + useDAWStore.getState().undo(); + + expect(useDAWStore.getState().tracks.map((track) => track.name)).toEqual([ + "Audio", + "MIDI", + "Instrument", + "AI", + "Folder", + "Bus", + ]); + expect(useDAWStore.getState().selectedTrackIds).toEqual(["bus"]); + expect(useDAWStore.getState().canRedo).toBe(true); + expect(useDAWStore.getState().isModified).toBe(true); + + useDAWStore.getState().redo(); + expect(useDAWStore.getState().tracks.map((track) => track.name)).toEqual([ + "Example", + "Example 1", + "Example 2", + "Example 3", + "Example 4", + "Example 5", + ]); + expect(useDAWStore.getState().selectedTrackIds).toEqual(["bus"]); + }); + + it("renames only an unselected edited track", () => { + const tracks = [ + makeTrack("one", "One"), + makeTrack("two", "Two"), + makeTrack("three", "Three"), + ]; + resetStore(tracks); + useDAWStore.setState({ selectedTrackIds: ["one", "two"] }); + + const state = useDAWStore.getState(); + const targets = resolveTrackRenameTargetIds( + state.tracks, + state.selectedTrackIds, + "three", + ); + state.renameTracks(targets, "Solo"); + + expect(useDAWStore.getState().tracks.map((track) => track.name)).toEqual([ + "One", + "Two", + "Solo", + ]); + expect(commandManager.getUndoStack()).toHaveLength(1); + }); + + it("does not create history or dirty the project for a no-op", () => { + resetStore([makeTrack("same", "Same")]); + + useDAWStore.getState().renameTracks(["same", "same", "missing"], "Same"); + + expect(commandManager.getUndoStack()).toHaveLength(0); + expect(useDAWStore.getState().canUndo).toBe(false); + expect(useDAWStore.getState().isModified).toBe(false); + }); +}); diff --git a/frontend/src/__tests__/transportRecording.test.ts b/frontend/src/__tests__/transportRecording.test.ts index 303b773..0091c9e 100644 --- a/frontend/src/__tests__/transportRecording.test.ts +++ b/frontend/src/__tests__/transportRecording.test.ts @@ -2,6 +2,12 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { nativeBridge } from "../services/NativeBridge"; import { createDefaultTrack, type Track, useDAWStore } from "../store/useDAWStore"; import transportBarSource from "../components/TransportBar.tsx?raw"; +import { dispatchGlobalShortcut } from "../utils/globalShortcutDispatcher"; +import { + activateShortcutContext, + registerShortcutSurface, + resetShortcutContextForTests, +} from "../utils/shortcutContext"; const initialState = useDAWStore.getState(); @@ -44,6 +50,7 @@ describe("transport recording", () => { }); afterEach(() => { + resetShortcutContextForTests(); vi.restoreAllMocks(); useDAWStore.setState(initialState); }); @@ -54,6 +61,65 @@ describe("transport recording", () => { expect(transportBarSource).not.toContain("await record();"); }); + it("does not resume a pending play request after stop", async () => { + let releaseSync!: () => void; + const syncGate = new Promise((resolve) => { + releaseSync = resolve; + }); + const syncClipsWithBackend = vi.fn(() => syncGate); + vi.spyOn(nativeBridge, "hasAnyActiveARA").mockResolvedValue(false); + useDAWStore.setState({ + syncClipsWithBackend, + transport: { + ...useDAWStore.getState().transport, + isPlaying: false, + isPaused: false, + isRecording: false, + }, + }); + + const playRequest = useDAWStore.getState().play(); + await vi.waitFor(() => expect(syncClipsWithBackend).toHaveBeenCalledTimes(1)); + await useDAWStore.getState().stop(); + releaseSync(); + await playRequest; + + expect(useDAWStore.getState().transport.isPlaying).toBe(false); + expect(vi.mocked(nativeBridge.setTransportPlaying).mock.calls) + .not.toContainEqual([true]); + }); + + it("does not resume a pending play request after pause", async () => { + let releaseSync!: () => void; + const syncGate = new Promise((resolve) => { + releaseSync = resolve; + }); + const syncClipsWithBackend = vi.fn(() => syncGate); + vi.spyOn(nativeBridge, "hasAnyActiveARA").mockResolvedValue(false); + useDAWStore.setState({ + syncClipsWithBackend, + transport: { + ...useDAWStore.getState().transport, + isPlaying: false, + isPaused: false, + isRecording: false, + }, + }); + + const playRequest = useDAWStore.getState().play(); + await vi.waitFor(() => expect(syncClipsWithBackend).toHaveBeenCalledTimes(1)); + useDAWStore.getState().pause(); + releaseSync(); + await playRequest; + + expect(useDAWStore.getState().transport).toMatchObject({ + isPlaying: false, + isPaused: true, + }); + expect(vi.mocked(nativeBridge.setTransportPlaying).mock.calls) + .not.toContainEqual([true]); + }); + it("punches in at the playhead captured when record is pressed", async () => { const calls: string[] = []; vi.mocked(nativeBridge.setTransportRecording).mockImplementation(async (recording) => { @@ -109,7 +175,28 @@ describe("transport recording", () => { expect(stop).toHaveBeenCalled(); }); - it("selects newly completed recorded clips after stop", async () => { + it("uses the full stop path when Play/Pause is invoked during recording", async () => { + const stop = vi.fn().mockResolvedValue(undefined); + const pause = vi.fn(); + useDAWStore.setState({ + stop, + pause, + recordSession: { id: "record-session", startTime: 3, trackIds: ["track-midi"] }, + transport: { + ...useDAWStore.getState().transport, + isPlaying: true, + isPaused: false, + isRecording: true, + }, + }); + + await useDAWStore.getState().togglePlayPause(); + + expect(stop).toHaveBeenCalledTimes(1); + expect(pause).not.toHaveBeenCalled(); + }); + + it("Space stops and finalizes audio and MIDI takes from the active Timeline", async () => { const audioTrack = { ...createDefaultTrack("track-audio", "Audio", "#f97316", "audio"), armed: true, @@ -151,10 +238,38 @@ describe("transport recording", () => { currentTime: 5, }, playStartPosition: 2, + recordSession: { + id: "space-stop-record-session", + startTime: 2, + trackIds: [audioTrack.id, midiTrack.id], + }, + recordingClips: [ + { trackId: audioTrack.id, startTime: 2 }, + { trackId: midiTrack.id, startTime: 2 }, + ], syncMIDITrackToBackend: vi.fn().mockResolvedValue(undefined), }); - await useDAWStore.getState().stop(); + registerShortcutSurface({ kind: "timeline" }, () => "unmatched"); + activateShortcutContext({ kind: "timeline" }); + + expect(dispatchGlobalShortcut({ + key: " ", + code: "Space", + source: "browser", + }, "windows")).toBe(true); + + await vi.waitFor(() => { + expect(nativeBridge.getLastCompletedClips).toHaveBeenCalledTimes(1); + expect(nativeBridge.getLastCompletedMIDIClips).toHaveBeenCalledTimes(1); + }); + await vi.waitFor(() => { + const completedState = useDAWStore.getState(); + expect(completedState.tracks.find((track) => track.id === audioTrack.id)?.clips) + .toHaveLength(1); + expect(completedState.tracks.find((track) => track.id === midiTrack.id)?.midiClips) + .toHaveLength(1); + }); const state = useDAWStore.getState(); const recordedAudioClip = state.tracks.find((track) => track.id === audioTrack.id)?.clips[0]; @@ -167,6 +282,15 @@ describe("transport recording", () => { expect(state.selectedTrackId).toBeNull(); expect(state.selectedTrackIds).toEqual([]); expect(state.lastSelectedTrackId).toBeNull(); + expect(state.transport).toMatchObject({ + isPlaying: false, + isPaused: false, + isRecording: false, + }); + expect(state.recordSession).toBeNull(); + expect(state.recordingClips).toEqual([]); + expect(nativeBridge.setTransportPlaying).toHaveBeenCalledWith(false); + expect(nativeBridge.setTransportRecording).toHaveBeenCalledWith(false); }); it("finalizes completed clips when transport sync cleared isRecording but a record session remains", async () => { diff --git a/frontend/src/__tests__/undoableDAWMutations.test.ts b/frontend/src/__tests__/undoableDAWMutations.test.ts new file mode 100644 index 0000000..cdb2a71 --- /dev/null +++ b/frontend/src/__tests__/undoableDAWMutations.test.ts @@ -0,0 +1,989 @@ +import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { nativeBridge } from "../services/NativeBridge"; +import { commandManager } from "../store/commands"; +import { + createDefaultTrack, + type AudioClip, + type AutomationLane, + type Track, + useDAWStore, +} from "../store/useDAWStore"; +import { createNAMPreviewMonitorLease } from "../utils/trackMonitorOwnership"; + +const originalState = useDAWStore.getState(); + +function audioClip(id: string, overrides: Partial = {}): AudioClip { + return { + id, + name: id, + filePath: `C:/audio/${id}.wav`, + startTime: 0, + duration: 2, + offset: 0, + color: "#111111", + volumeDB: 0, + fadeIn: 0, + fadeOut: 0, + ...overrides, + }; +} + +function track(id: string, overrides: Partial = {}): Track { + return { + ...createDefaultTrack(id, id, "#111111", "audio", []), + ...overrides, + }; +} + +function volumeLane(overrides: Partial = {}): AutomationLane { + return { + id: "volume-lane", + param: "volume", + points: [], + visible: true, + mode: "read", + armed: false, + readEnabled: true, + ...overrides, + }; +} + +function currentTrack(id: string): Track { + const value = useDAWStore.getState().tracks.find((candidate) => candidate.id === id); + if (!value) throw new Error(`Missing test track ${id}`); + return value; +} + +beforeEach(() => { + commandManager.clear(); + useDAWStore.setState({ + tracks: [], + trackGroups: [], + selectedTrackId: null, + selectedTrackIds: [], + lastSelectedTrackId: null, + selectedClipId: null, + selectedClipIds: [], + automatedParamValues: {}, + isMasterMuted: false, + masterMono: false, + masterVolume: 0.8, + masterPan: 0, + masterAutomationLanes: [], + masterAutomationReadEnabled: false, + masterAutomationWriteEnabled: false, + masterAutomationEnabled: false, + canUndo: false, + canRedo: false, + }); +}); + +afterEach(() => { + vi.restoreAllMocks(); + commandManager.clear(); + useDAWStore.setState(originalState); +}); + +describe("undo-aware track control mutations", () => { + it("coalesces AI parameter packets into one exact UPDATE_TRACK undo/redo edit", () => { + useDAWStore.setState({ + tracks: [track("ai", { + type: "ai", + aiWorkflow: "text-to-music", + aiWorkflowParams: { bpm: 120 }, + })], + }); + const state = useDAWStore.getState(); + expect(state.beginAITrackParamsEdit("ai")).toBe(true); + state.setAITrackParams("ai", { ...currentTrack("ai").aiWorkflowParams, bpm: 121 }); + state.setAITrackParams("ai", { ...currentTrack("ai").aiWorkflowParams, bpm: 122 }); + state.setAITrackParams("ai", { ...currentTrack("ai").aiWorkflowParams, bpm: 123 }); + expect(state.commitAITrackParamsEdit("ai")).toBe(true); + expect(state.commitAITrackParamsEdit("ai")).toBe(false); + expect(currentTrack("ai").aiWorkflowParams?.bpm).toBe(123); + + useDAWStore.getState().undo(); + expect(currentTrack("ai").aiWorkflowParams).toEqual({ bpm: 120 }); + expect(useDAWStore.getState().canUndo).toBe(false); + useDAWStore.getState().redo(); + expect(currentTrack("ai").aiWorkflowParams?.bpm).toBe(123); + }); + + it("does not create AI parameter commands for invalid or no-op sessions", () => { + useDAWStore.setState({ + tracks: [track("ai", { + type: "ai", + aiWorkflow: "text-to-music", + aiWorkflowParams: { bpm: 120 }, + })], + }); + const state = useDAWStore.getState(); + expect(state.beginAITrackParamsEdit("missing")).toBe(false); + expect(state.beginAITrackParamsEdit("ai")).toBe(true); + expect(state.commitAITrackParamsEdit("ai")).toBe(false); + expect(useDAWStore.getState().canUndo).toBe(false); + }); + + it("adjusts a selected linked fader group as one exact undo/redo transaction", () => { + vi.spyOn(nativeBridge, "setTrackVolume").mockResolvedValue(true); + useDAWStore.setState({ + tracks: [ + track("a", { volumeDB: 0, volume: 1 }), + track("b", { volumeDB: -6, volume: Math.pow(10, -6 / 20) }), + track("outside", { volumeDB: -12, volume: Math.pow(10, -12 / 20) }), + ], + selectedTrackId: "a", + selectedTrackIds: ["a"], + trackGroups: [{ + id: "volume-group", + name: "Linked volume", + leadTrackId: "a", + memberTrackIds: ["a", "b"], + linkedParams: ["volume"], + }], + }); + + const state = useDAWStore.getState(); + expect(state.beginTrackVolumeBatchEdit(state.selectedTrackIds)).toBe(true); + expect(state.adjustTrackVolumeBatch(1)).toBe(true); + expect(state.commitTrackVolumeBatchEdit()).toBe(true); + expect(useDAWStore.getState().tracks.map((candidate) => candidate.volumeDB)) + .toEqual([1, -5, -12]); + + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks.map((candidate) => candidate.volumeDB)) + .toEqual([0, -6, -12]); + expect(useDAWStore.getState().canUndo).toBe(false); + + useDAWStore.getState().redo(); + expect(useDAWStore.getState().tracks.map((candidate) => candidate.volumeDB)) + .toEqual([1, -5, -12]); + }); + + it("deduplicates all-track linked members and keeps frozen tracks eligible", () => { + vi.spyOn(nativeBridge, "setTrackVolume").mockResolvedValue(true); + useDAWStore.setState({ + tracks: [ + track("a", { volumeDB: 0 }), + track("b", { volumeDB: -6 }), + track("frozen", { volumeDB: -12, frozen: true }), + ], + trackGroups: [{ + id: "volume-group", + name: "Linked volume", + leadTrackId: "a", + memberTrackIds: ["a", "b"], + linkedParams: ["volume"], + }], + }); + + const state = useDAWStore.getState(); + expect(state.beginTrackVolumeBatchEdit(["a", "b", "frozen", "a"])).toBe(true); + expect(state.adjustTrackVolumeBatch(-0.5)).toBe(true); + expect(state.commitTrackVolumeBatchEdit()).toBe(true); + expect(useDAWStore.getState().tracks.map((candidate) => candidate.volumeDB)) + .toEqual([-0.5, -6.5, -12.5]); + + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks.map((candidate) => candidate.volumeDB)) + .toEqual([0, -6, -12]); + }); + + it("does not create batch-volume undo entries for empty, invalid, or clamped no-op edits", () => { + useDAWStore.setState({ tracks: [track("ceiling", { volumeDB: 12 })] }); + const state = useDAWStore.getState(); + + expect(state.beginTrackVolumeBatchEdit([])).toBe(false); + expect(state.adjustTrackVolumeBatch(1)).toBe(false); + expect(state.commitTrackVolumeBatchEdit()).toBe(false); + expect(state.beginTrackVolumeBatchEdit(["missing"])).toBe(false); + expect(state.beginTrackVolumeBatchEdit(["ceiling"])).toBe(true); + expect(state.adjustTrackVolumeBatch(Number.NaN)).toBe(false); + expect(state.adjustTrackVolumeBatch(1)).toBe(false); + expect(state.commitTrackVolumeBatchEdit()).toBe(false); + expect(useDAWStore.getState().canUndo).toBe(false); + }); + + it("arms linked tracks, skips record-safe members, and restores the exact prior states", async () => { + vi.spyOn(nativeBridge, "setTrackRecordArm").mockResolvedValue(true); + useDAWStore.setState({ + tracks: [ + track("a", { armed: false }), + track("b", { armed: false, recordSafe: true }), + ], + trackGroups: [{ + id: "armed-group", + name: "Armed", + leadTrackId: "a", + memberTrackIds: ["a", "b"], + linkedParams: ["armed"], + }], + }); + + await useDAWStore.getState().toggleTrackArmed("a"); + expect(currentTrack("a").armed).toBe(true); + expect(currentTrack("b").armed).toBe(false); + + useDAWStore.getState().undo(); + expect(currentTrack("a").armed).toBe(false); + expect(currentTrack("b").armed).toBe(false); + + useDAWStore.getState().redo(); + expect(currentTrack("a").armed).toBe(true); + expect(currentTrack("b").armed).toBe(false); + }); + + it("restores mixed linked FX bypass states on undo", async () => { + vi.spyOn(nativeBridge, "bypassTrackInputFX").mockResolvedValue(true); + vi.spyOn(nativeBridge, "bypassTrackFX").mockResolvedValue(true); + useDAWStore.setState({ + tracks: [ + track("a", { fxBypassed: false, inputFxCount: 1, trackFxCount: 1 }), + track("b", { fxBypassed: true, inputFxCount: 1, trackFxCount: 1 }), + ], + trackGroups: [{ + id: "fx-group", + name: "FX", + leadTrackId: "a", + memberTrackIds: ["a", "b"], + linkedParams: ["fxBypass"], + }], + }); + + await useDAWStore.getState().toggleTrackFXBypass("a"); + expect([currentTrack("a").fxBypassed, currentTrack("b").fxBypassed]).toEqual([true, true]); + + useDAWStore.getState().undo(); + expect([currentTrack("a").fxBypassed, currentTrack("b").fxBypassed]).toEqual([false, true]); + + useDAWStore.getState().redo(); + expect([currentTrack("a").fxBypassed, currentTrack("b").fxBypassed]).toEqual([true, true]); + }); + + it("undoes and redoes monitoring and phase inversion with native synchronization", async () => { + const monitorSpy = vi.spyOn(nativeBridge, "setTrackInputMonitoring").mockResolvedValue(true); + const phaseSpy = vi.spyOn(nativeBridge, "setTrackPhaseInvert").mockResolvedValue(true); + useDAWStore.setState({ tracks: [track("a", { monitorEnabled: false, phaseInverted: false })] }); + + await useDAWStore.getState().toggleTrackMonitor("a"); + expect(currentTrack("a").monitorEnabled).toBe(true); + useDAWStore.getState().undo(); + await vi.waitFor(() => expect(currentTrack("a").monitorEnabled).toBe(false)); + useDAWStore.getState().redo(); + await vi.waitFor(() => expect(currentTrack("a").monitorEnabled).toBe(true)); + expect(monitorSpy).toHaveBeenCalledWith("a", false); + + commandManager.clear(); + await useDAWStore.getState().setTrackPhaseInvert("a", true); + expect(currentTrack("a").phaseInverted).toBe(true); + useDAWStore.getState().undo(); + expect(currentTrack("a").phaseInverted).toBe(false); + useDAWStore.getState().redo(); + expect(currentTrack("a").phaseInverted).toBe(true); + expect(phaseSpy).toHaveBeenCalledWith("a", false); + }); + + it("keeps preview-only monitoring out of project dirty and undo state and surfaces native failure", async () => { + const monitorSpy = vi.spyOn(nativeBridge, "setTrackInputMonitoring").mockResolvedValue(true); + useDAWStore.setState({ + tracks: [track("preview", { monitorEnabled: false })], + isModified: false, + canUndo: false, + canRedo: false, + }); + + await expect(useDAWStore.getState().setTrackMonitorTransient("preview", true)).resolves.toBe(true); + expect(currentTrack("preview").monitorEnabled).toBe(true); + expect(useDAWStore.getState()).toMatchObject({ isModified: false, canUndo: false, canRedo: false }); + + monitorSpy.mockResolvedValueOnce(false); + await expect(useDAWStore.getState().setTrackMonitorTransient("preview", false)).resolves.toBe(false); + expect(currentTrack("preview").monitorEnabled).toBe(true); + expect(useDAWStore.getState()).toMatchObject({ isModified: false, canUndo: false, canRedo: false }); + }); + + it("leaves direct monitoring state, dirty state, and undo history unchanged on native failure", async () => { + const monitorSpy = vi.spyOn(nativeBridge, "setTrackInputMonitoring"); + useDAWStore.setState({ + tracks: [track("monitor-failure", { monitorEnabled: false })], + isModified: false, + canUndo: false, + canRedo: false, + }); + + monitorSpy.mockResolvedValueOnce(false); + await expect(useDAWStore.getState().toggleTrackMonitor("monitor-failure")) + .rejects.toThrow("Native track monitoring rejected enable"); + expect(currentTrack("monitor-failure").monitorEnabled).toBe(false); + expect(useDAWStore.getState()).toMatchObject({ isModified: false, canUndo: false, canRedo: false }); + expect(commandManager.canUndo()).toBe(false); + + monitorSpy.mockRejectedValueOnce(new Error("monitor bridge unavailable")); + await expect(useDAWStore.getState().toggleTrackMonitor("monitor-failure")) + .rejects.toThrow("monitor bridge unavailable"); + expect(currentTrack("monitor-failure").monitorEnabled).toBe(false); + expect(useDAWStore.getState()).toMatchObject({ isModified: false, canUndo: false, canRedo: false }); + expect(commandManager.canUndo()).toBe(false); + }); + + it("retains preview monitor ownership when a user disable request fails", async () => { + const monitorSpy = vi.spyOn(nativeBridge, "setTrackInputMonitoring").mockResolvedValue(true); + useDAWStore.setState({ + tracks: [track("preview-owner", { monitorEnabled: false })], + isModified: false, + canUndo: false, + canRedo: false, + }); + const lease = createNAMPreviewMonitorLease({ + read: (trackId) => useDAWStore.getState().tracks.find((entry) => entry.id === trackId)?.monitorEnabled, + setTransient: (trackId, enabled) => useDAWStore.getState().setTrackMonitorTransient(trackId, enabled), + }); + + await expect(lease.ensureEnabled("preview-owner")).resolves.toBe(true); + expect(currentTrack("preview-owner").monitorEnabled).toBe(true); + + monitorSpy.mockResolvedValueOnce(false); + await expect(useDAWStore.getState().toggleTrackMonitor("preview-owner")) + .rejects.toThrow("Native track monitoring rejected disable"); + expect(currentTrack("preview-owner").monitorEnabled).toBe(true); + expect(lease.ownsTemporaryEnable()).toBe(true); + + monitorSpy.mockResolvedValueOnce(true); + await expect(lease.release()).resolves.toBe(true); + expect(currentTrack("preview-owner").monitorEnabled).toBe(false); + expect(useDAWStore.getState()).toMatchObject({ isModified: false, canUndo: false, canRedo: false }); + }); + + it.each(["false", "reject"] as const)( + "rolls back a selected-track monitoring batch on native %s without stealing preview ownership", + async (failureMode) => { + const monitorSpy = vi.spyOn(nativeBridge, "setTrackInputMonitoring").mockResolvedValue(true); + useDAWStore.setState({ + tracks: [ + track("batch-preview", { monitorEnabled: false }), + track("batch-other", { monitorEnabled: false }), + ], + selectedTrackId: "batch-preview", + selectedTrackIds: ["batch-preview", "batch-other"], + lastSelectedTrackId: "batch-other", + isModified: false, + canUndo: false, + canRedo: false, + }); + const lease = createNAMPreviewMonitorLease({ + read: (trackId) => useDAWStore.getState().tracks.find((entry) => entry.id === trackId)?.monitorEnabled, + setTransient: (trackId, enabled) => useDAWStore.getState().setTrackMonitorTransient(trackId, enabled), + }); + + await expect(lease.ensureEnabled("batch-preview")).resolves.toBe(true); + monitorSpy.mockClear(); + monitorSpy.mockImplementation(async (trackId, enabled) => { + if (trackId === "batch-other" && enabled) { + if (failureMode === "reject") throw new Error("monitor bridge unavailable"); + return false; + } + return true; + }); + + await expect(useDAWStore.getState().toggleSelectedTracksMonitor()).resolves.toBe(false); + expect(monitorSpy.mock.calls).toEqual([ + ["batch-preview", false], + ["batch-other", true], + ["batch-preview", true], + ]); + expect(currentTrack("batch-preview").monitorEnabled).toBe(true); + expect(currentTrack("batch-other").monitorEnabled).toBe(false); + expect(useDAWStore.getState()).toMatchObject({ isModified: false, canUndo: false, canRedo: false }); + expect(commandManager.canUndo()).toBe(false); + expect(lease.ownsTemporaryEnable()).toBe(true); + + await expect(lease.release()).resolves.toBe(true); + expect(currentTrack("batch-preview").monitorEnabled).toBe(false); + }, + ); + + it("commits a selected-track monitoring batch only after every native update succeeds", async () => { + const monitorSpy = vi.spyOn(nativeBridge, "setTrackInputMonitoring").mockResolvedValue(true); + useDAWStore.setState({ + tracks: [ + track("batch-a", { monitorEnabled: false }), + track("batch-b", { monitorEnabled: true }), + ], + selectedTrackId: "batch-a", + selectedTrackIds: ["batch-a", "batch-b"], + lastSelectedTrackId: "batch-b", + isModified: false, + canUndo: false, + canRedo: false, + }); + + await expect(useDAWStore.getState().toggleSelectedTracksMonitor()).resolves.toBe(true); + expect([currentTrack("batch-a").monitorEnabled, currentTrack("batch-b").monitorEnabled]) + .toEqual([true, false]); + expect(useDAWStore.getState()).toMatchObject({ isModified: true, canUndo: true, canRedo: false }); + + useDAWStore.getState().undo(); + await vi.waitFor(() => { + expect([currentTrack("batch-a").monitorEnabled, currentTrack("batch-b").monitorEnabled]) + .toEqual([false, true]); + }); + useDAWStore.getState().redo(); + await vi.waitFor(() => { + expect([currentTrack("batch-a").monitorEnabled, currentTrack("batch-b").monitorEnabled]) + .toEqual([true, false]); + }); + expect(monitorSpy).toHaveBeenCalledTimes(6); + }); + + it("serializes rapid monitor toggles so each command reads the accepted state", async () => { + const monitorSpy = vi.spyOn(nativeBridge, "setTrackInputMonitoring"); + let acceptFirst!: (accepted: boolean) => void; + monitorSpy + .mockReturnValueOnce(new Promise((resolve) => { acceptFirst = resolve; })) + .mockResolvedValue(true); + useDAWStore.setState({ + tracks: [track("rapid-monitor", { monitorEnabled: false })], + isModified: false, + canUndo: false, + canRedo: false, + }); + + const firstToggle = useDAWStore.getState().toggleTrackMonitor("rapid-monitor"); + const secondToggle = useDAWStore.getState().toggleTrackMonitor("rapid-monitor"); + await vi.waitFor(() => expect(monitorSpy).toHaveBeenCalledTimes(1)); + expect(monitorSpy).toHaveBeenNthCalledWith(1, "rapid-monitor", true); + + acceptFirst(true); + await Promise.all([firstToggle, secondToggle]); + + expect(monitorSpy.mock.calls).toEqual([ + ["rapid-monitor", true], + ["rapid-monitor", false], + ]); + expect(currentTrack("rapid-monitor").monitorEnabled).toBe(false); + expect(commandManager.getUndoStack()).toHaveLength(2); + }); + + it("serializes a user monitor command behind preview setup without stale-state inversion", async () => { + const monitorSpy = vi.spyOn(nativeBridge, "setTrackInputMonitoring"); + let acceptPreview!: (accepted: boolean) => void; + monitorSpy + .mockReturnValueOnce(new Promise((resolve) => { acceptPreview = resolve; })) + .mockResolvedValue(true); + useDAWStore.setState({ + tracks: [track("preview-race", { monitorEnabled: false })], + isModified: false, + canUndo: false, + canRedo: false, + }); + const lease = createNAMPreviewMonitorLease({ + read: (trackId) => useDAWStore.getState().tracks.find((entry) => entry.id === trackId)?.monitorEnabled, + setTransient: (trackId, enabled) => useDAWStore.getState().setTrackMonitorTransient(trackId, enabled), + }); + + const previewStart = lease.ensureEnabled("preview-race"); + const userToggle = useDAWStore.getState().toggleTrackMonitor("preview-race"); + await vi.waitFor(() => expect(monitorSpy).toHaveBeenCalledTimes(1)); + acceptPreview(true); + await Promise.all([previewStart, userToggle]); + + expect(monitorSpy.mock.calls).toEqual([ + ["preview-race", true], + ["preview-race", false], + ]); + expect(currentTrack("preview-race").monitorEnabled).toBe(false); + expect(lease.ownsTemporaryEnable()).toBe(false); + await expect(lease.release()).resolves.toBe(true); + expect(monitorSpy).toHaveBeenCalledTimes(2); + }); + + it("undoes and redoes automation read/write mode snapshots", () => { + const lane = volumeLane(); + useDAWStore.setState({ + tracks: [track("a", { + automationReadEnabled: true, + automationWriteEnabled: false, + automationEnabled: true, + automationLanes: [lane], + })], + }); + + useDAWStore.getState().toggleTrackAutomationRead("a"); + expect(currentTrack("a")).toMatchObject({ automationReadEnabled: false, automationEnabled: false }); + expect(currentTrack("a").automationLanes[0].mode).toBe("off"); + useDAWStore.getState().undo(); + expect(currentTrack("a")).toMatchObject({ automationReadEnabled: true, automationEnabled: true }); + expect(currentTrack("a").automationLanes[0].mode).toBe("read"); + useDAWStore.getState().redo(); + expect(currentTrack("a").automationReadEnabled).toBe(false); + + commandManager.clear(); + useDAWStore.getState().toggleTrackAutomationWrite("a"); + expect(currentTrack("a")).toMatchObject({ automationReadEnabled: true, automationWriteEnabled: true }); + useDAWStore.getState().undo(); + expect(currentTrack("a")).toMatchObject({ automationReadEnabled: false, automationWriteEnabled: false }); + useDAWStore.getState().redo(); + expect(currentTrack("a")).toMatchObject({ automationReadEnabled: true, automationWriteEnabled: true }); + }); +}); + +describe("undo-aware structural track mutations", () => { + it("duplicates a track as one reversible native/store transaction", async () => { + vi.spyOn(nativeBridge, "addTrack").mockImplementation(async (trackId) => trackId || "mock-track"); + vi.spyOn(nativeBridge, "removeTrack").mockResolvedValue(true); + vi.spyOn(nativeBridge, "closeAllPluginWindows").mockResolvedValue(true); + vi.spyOn(nativeBridge, "getTrackInputFX").mockResolvedValue([]); + vi.spyOn(nativeBridge, "getTrackFX").mockResolvedValue([]); + useDAWStore.setState({ + tracks: [track("source")], + selectedTrackId: "source", + selectedTrackIds: ["source"], + lastSelectedTrackId: "source", + }); + + await useDAWStore.getState().duplicateTrack("source"); + const duplicateId = useDAWStore.getState().tracks.find((candidate) => candidate.id !== "source")?.id; + expect(duplicateId).toBeTruthy(); + expect(useDAWStore.getState().selectedTrackIds).toEqual([duplicateId]); + + useDAWStore.getState().undo(); + await vi.waitFor(() => expect(useDAWStore.getState().tracks.map((candidate) => candidate.id)).toEqual(["source"])); + expect(useDAWStore.getState().selectedTrackIds).toEqual(["source"]); + + useDAWStore.getState().redo(); + await vi.waitFor(() => expect(useDAWStore.getState().tracks.map((candidate) => candidate.id)).toEqual(["source", duplicateId])); + expect(useDAWStore.getState().selectedTrackIds).toEqual([duplicateId]); + }); + + it("sets multiple track and clip colors in one undo step", () => { + const midiClip = { + id: "midi", + name: "MIDI", + startTime: 0, + duration: 1, + offset: 0, + color: "#222222", + events: [], + ccEvents: [], + }; + useDAWStore.setState({ + tracks: [ + track("a", { clips: [audioClip("audio")], midiClips: [midiClip] }), + track("b", { color: "#333333" }), + ], + }); + + useDAWStore.getState().setTracksColorWithUndo(["a", "b", "a"], "#abcdef"); + expect(useDAWStore.getState().tracks.map((candidate) => candidate.color)).toEqual(["#abcdef", "#abcdef"]); + expect(currentTrack("a").clips[0].color).toBe("#abcdef"); + expect(currentTrack("a").midiClips[0].color).toBe("#abcdef"); + + useDAWStore.getState().undo(); + expect(useDAWStore.getState().tracks.map((candidate) => candidate.color)).toEqual(["#111111", "#333333"]); + expect(currentTrack("a").clips[0].color).toBe("#111111"); + expect(currentTrack("a").midiClips[0].color).toBe("#222222"); + useDAWStore.getState().redo(); + expect(useDAWStore.getState().tracks.map((candidate) => candidate.color)).toEqual(["#abcdef", "#abcdef"]); + }); + + it("links and unlinks selections atomically", () => { + useDAWStore.setState({ tracks: [track("a"), track("b"), track("c")] }); + + useDAWStore.getState().addTrackGroup("Group", "a", ["a", "b", "b"], ["mute", "solo"]); + expect(useDAWStore.getState().trackGroups[0].memberTrackIds).toEqual(["a", "b"]); + useDAWStore.getState().undo(); + expect(useDAWStore.getState().trackGroups).toEqual([]); + useDAWStore.getState().redo(); + expect(useDAWStore.getState().trackGroups).toHaveLength(1); + + commandManager.clear(); + useDAWStore.setState({ + trackGroups: [{ + id: "old-group", + name: "Old", + leadTrackId: "a", + memberTrackIds: ["a", "c"], + linkedParams: ["mute"], + }], + }); + useDAWStore.getState().addTrackGroup("Replacement", "a", ["a", "b"], ["mute"]); + expect(useDAWStore.getState().trackGroups).toHaveLength(1); + expect(useDAWStore.getState().trackGroups[0]).toMatchObject({ + name: "Replacement", + memberTrackIds: ["a", "b"], + }); + useDAWStore.getState().undo(); + expect(useDAWStore.getState().trackGroups[0]).toMatchObject({ + id: "old-group", + memberTrackIds: ["a", "c"], + }); + useDAWStore.getState().redo(); + + commandManager.clear(); + useDAWStore.getState().unlinkTracksFromGroups(["a"]); + expect(useDAWStore.getState().trackGroups).toEqual([]); + useDAWStore.getState().undo(); + expect(useDAWStore.getState().trackGroups[0].memberTrackIds).toEqual(["a", "b"]); + useDAWStore.getState().redo(); + expect(useDAWStore.getState().trackGroups).toEqual([]); + }); + + it("moves and removes multiple tracks from folders in reversible batches", () => { + const folder = track("folder", { isFolder: true }); + useDAWStore.setState({ tracks: [folder, track("a"), track("b")] }); + + useDAWStore.getState().moveTracksToFolder(["a", "b"], "folder"); + expect([currentTrack("a").parentFolderId, currentTrack("b").parentFolderId]).toEqual(["folder", "folder"]); + useDAWStore.getState().undo(); + expect([currentTrack("a").parentFolderId, currentTrack("b").parentFolderId]).toEqual([undefined, undefined]); + useDAWStore.getState().redo(); + expect([currentTrack("a").parentFolderId, currentTrack("b").parentFolderId]).toEqual(["folder", "folder"]); + + commandManager.clear(); + useDAWStore.getState().removeTracksFromFolders(["a", "b"]); + expect([currentTrack("a").parentFolderId, currentTrack("b").parentFolderId]).toEqual([undefined, undefined]); + useDAWStore.getState().undo(); + expect([currentTrack("a").parentFolderId, currentTrack("b").parentFolderId]).toEqual(["folder", "folder"]); + }); + + it("consolidates all audio clips in one undoable replacement", async () => { + vi.spyOn(nativeBridge, "showRenderSaveDialog").mockResolvedValue("C:/renders/consolidated.wav"); + vi.spyOn(nativeBridge, "renderProject").mockResolvedValue(true); + vi.spyOn(nativeBridge, "clearPitchPreviewRoutesForCorrectedSources").mockResolvedValue(0); + const syncClipsWithBackend = vi.fn().mockResolvedValue(undefined); + useDAWStore.setState({ + tracks: [track("a", { + clips: [ + audioClip("one", { startTime: 1, duration: 2 }), + audioClip("two", { startTime: 4, duration: 1 }), + ], + })], + selectedClipId: "one", + selectedClipIds: ["one", "two"], + syncClipsWithBackend, + }); + + await useDAWStore.getState().consolidateTrack("a"); + const consolidatedId = currentTrack("a").clips[0].id; + expect(currentTrack("a").clips).toHaveLength(1); + expect(currentTrack("a").clips[0]).toMatchObject({ startTime: 1, duration: 4 }); + + useDAWStore.getState().undo(); + expect(currentTrack("a").clips.map((clip) => clip.id)).toEqual(["one", "two"]); + expect(useDAWStore.getState().selectedClipIds).toEqual(["one", "two"]); + useDAWStore.getState().redo(); + expect(currentTrack("a").clips.map((clip) => clip.id)).toEqual([consolidatedId]); + }); + + it("re-establishes native freeze state when freeze and unfreeze commands are redone", async () => { + const freezeSpy = vi.spyOn(nativeBridge, "freezeTrack").mockResolvedValue({ + success: true, + filePath: "C:/renders/frozen.wav", + startTime: 0, + duration: 2, + sampleRate: 48_000, + }); + const unfreezeSpy = vi.spyOn(nativeBridge, "unfreezeTrack").mockResolvedValue(true); + useDAWStore.setState({ tracks: [track("a", { clips: [audioClip("source")] })] }); + + useDAWStore.getState().freezeTrack("a"); + await vi.waitFor(() => expect(currentTrack("a").frozen).toBe(true)); + expect(freezeSpy).toHaveBeenCalledTimes(1); + useDAWStore.getState().undo(); + expect(currentTrack("a").frozen).toBe(false); + useDAWStore.getState().redo(); + expect(currentTrack("a").frozen).toBe(true); + await vi.waitFor(() => expect(freezeSpy).toHaveBeenCalledTimes(2)); + + commandManager.clear(); + useDAWStore.getState().unfreezeTrack("a"); + await vi.waitFor(() => expect(currentTrack("a").frozen).toBe(false)); + useDAWStore.getState().undo(); + expect(currentTrack("a").frozen).toBe(true); + await vi.waitFor(() => expect(freezeSpy).toHaveBeenCalledTimes(3)); + useDAWStore.getState().redo(); + expect(currentTrack("a").frozen).toBe(false); + expect(unfreezeSpy).toHaveBeenCalled(); + }); +}); + +describe("undo-aware master and fade-shape mutations", () => { + it("commits master volume and pan edits once and restores the backend on undo/redo", async () => { + const volumeSpy = vi.spyOn(nativeBridge, "setMasterVolume").mockResolvedValue(true); + const panSpy = vi.spyOn(nativeBridge, "setMasterPan").mockResolvedValue(true); + + useDAWStore.getState().beginMasterVolumeEdit(); + await useDAWStore.getState().setMasterVolume(0.5); + await useDAWStore.getState().setMasterVolume(0.25); + useDAWStore.getState().commitMasterVolumeEdit(); + expect(useDAWStore.getState().masterVolume).toBe(0.25); + useDAWStore.getState().undo(); + expect(useDAWStore.getState().masterVolume).toBe(0.8); + useDAWStore.getState().redo(); + expect(useDAWStore.getState().masterVolume).toBe(0.25); + expect(volumeSpy).toHaveBeenCalledWith(0.8); + + commandManager.clear(); + useDAWStore.getState().beginMasterPanEdit(); + await useDAWStore.getState().setMasterPan(0.4); + useDAWStore.getState().commitMasterPanEdit(); + expect(useDAWStore.getState().masterPan).toBe(0.4); + useDAWStore.getState().undo(); + expect(useDAWStore.getState().masterPan).toBe(0); + useDAWStore.getState().redo(); + expect(useDAWStore.getState().masterPan).toBe(0.4); + expect(panSpy).toHaveBeenCalledWith(0); + }); + + it("does not create master control undo entries for no-op edits", () => { + useDAWStore.getState().beginMasterVolumeEdit(); + useDAWStore.getState().commitMasterVolumeEdit(); + useDAWStore.getState().beginMasterPanEdit(); + useDAWStore.getState().commitMasterPanEdit(); + expect(useDAWStore.getState().canUndo).toBe(false); + }); + + it("undoes and redoes master automation read/write mode snapshots", () => { + useDAWStore.setState({ + masterAutomationReadEnabled: true, + masterAutomationWriteEnabled: false, + masterAutomationEnabled: true, + masterAutomationLanes: [volumeLane()], + }); + + useDAWStore.getState().toggleMasterAutomationRead(); + expect(useDAWStore.getState().masterAutomationReadEnabled).toBe(false); + useDAWStore.getState().undo(); + expect(useDAWStore.getState().masterAutomationReadEnabled).toBe(true); + useDAWStore.getState().redo(); + expect(useDAWStore.getState().masterAutomationReadEnabled).toBe(false); + + commandManager.clear(); + useDAWStore.getState().toggleMasterAutomationWrite(); + expect(useDAWStore.getState().masterAutomationWriteEnabled).toBe(true); + useDAWStore.getState().undo(); + expect(useDAWStore.getState().masterAutomationWriteEnabled).toBe(false); + useDAWStore.getState().redo(); + expect(useDAWStore.getState().masterAutomationWriteEnabled).toBe(true); + }); + + it("undoes and redoes master mute and mono", () => { + const volumeSpy = vi.spyOn(nativeBridge, "setMasterVolume").mockResolvedValue(true); + const monoSpy = vi.spyOn(nativeBridge, "setMasterMono").mockResolvedValue(true); + + useDAWStore.getState().toggleMasterMute(); + expect(useDAWStore.getState().isMasterMuted).toBe(true); + useDAWStore.getState().undo(); + expect(useDAWStore.getState().isMasterMuted).toBe(false); + useDAWStore.getState().redo(); + expect(useDAWStore.getState().isMasterMuted).toBe(true); + expect(volumeSpy).toHaveBeenCalledWith(0.8); + + commandManager.clear(); + useDAWStore.getState().toggleMasterMono(); + expect(useDAWStore.getState().masterMono).toBe(true); + useDAWStore.getState().undo(); + expect(useDAWStore.getState().masterMono).toBe(false); + useDAWStore.getState().redo(); + expect(useDAWStore.getState().masterMono).toBe(true); + expect(monoSpy).toHaveBeenCalledWith(false); + }); + + it("tracks fade-in and fade-out shape changes through undo and redo", () => { + useDAWStore.setState({ + tracks: [track("a", { clips: [audioClip("clip", { fadeInShape: 1, fadeOutShape: 2 })] })], + }); + + useDAWStore.getState().setClipFadeInShape("clip", 4); + expect(currentTrack("a").clips[0].fadeInShape).toBe(4); + useDAWStore.getState().undo(); + expect(currentTrack("a").clips[0].fadeInShape).toBe(1); + useDAWStore.getState().redo(); + expect(currentTrack("a").clips[0].fadeInShape).toBe(4); + + commandManager.clear(); + useDAWStore.getState().setClipFadeOutShape("clip", 3); + expect(currentTrack("a").clips[0].fadeOutShape).toBe(3); + useDAWStore.getState().undo(); + expect(currentTrack("a").clips[0].fadeOutShape).toBe(2); + useDAWStore.getState().redo(); + expect(currentTrack("a").clips[0].fadeOutShape).toBe(3); + }); +}); + +describe("undo-aware per-slot FX bypass", () => { + it("sets track FX bypass and restores the native slot on undo/redo", async () => { + useDAWStore.setState({ tracks: [track("a")] }); + vi.spyOn(nativeBridge, "getTrackFX").mockResolvedValue([{ + index: 0, + name: "Compressor", + bypassed: false, + }]); + const bypassSpy = vi.spyOn(nativeBridge, "bypassTrackFX").mockResolvedValue(true); + + await expect(useDAWStore.getState().setFXSlotBypassedWithUndo("a", 0, "track", true)) + .resolves.toBe(true); + useDAWStore.getState().undo(); + useDAWStore.getState().redo(); + + expect(bypassSpy.mock.calls).toEqual([ + ["a", 0, true], + ["a", 0, false], + ["a", 0, true], + ]); + }); + + it("sets input FX bypass and restores the native slot on undo/redo", async () => { + useDAWStore.setState({ tracks: [track("a")] }); + vi.spyOn(nativeBridge, "getTrackInputFX").mockResolvedValue([{ + index: 0, + name: "Gate", + bypassed: true, + }]); + const bypassSpy = vi.spyOn(nativeBridge, "bypassTrackInputFX").mockResolvedValue(true); + + await expect(useDAWStore.getState().setFXSlotBypassedWithUndo("a", 0, "input", false)) + .resolves.toBe(true); + useDAWStore.getState().undo(); + useDAWStore.getState().redo(); + + expect(bypassSpy.mock.calls).toEqual([ + ["a", 0, false], + ["a", 0, true], + ["a", 0, false], + ]); + }); + + it("toggles master FX bypass through the same central API", async () => { + vi.spyOn(nativeBridge, "getMasterFX").mockResolvedValue([{ + index: 0, + name: "Limiter", + bypassed: false, + }]); + const bypassSpy = vi.spyOn(nativeBridge, "bypassMasterFX").mockResolvedValue(true); + + await expect(useDAWStore.getState().toggleFXSlotBypassWithUndo("master", 0, "master")) + .resolves.toBe(true); + useDAWStore.getState().undo(); + useDAWStore.getState().redo(); + + expect(bypassSpy.mock.calls).toEqual([ + [0, true], + [0, false], + [0, true], + ]); + }); + + it("rejects invalid or missing slots without creating undo history", async () => { + useDAWStore.setState({ tracks: [track("a")] }); + vi.spyOn(nativeBridge, "getTrackFX").mockResolvedValue([]); + + await expect(useDAWStore.getState().setFXSlotBypassedWithUndo("a", 3, "track", true)) + .resolves.toBe(false); + expect(commandManager.canUndo()).toBe(false); + }); +}); + +describe("undo-aware master FX removal", () => { + it.each([ + { + label: "built-in", + pluginType: "builtin", + pluginName: "OpenStudio Limiter", + pluginReference: "OpenStudio Limiter", + addKind: "builtin" as const, + bypassed: true, + precisionOverride: "float32" as const, + }, + { + label: "S13FX", + pluginType: "s13fx", + pluginName: "Transient Designer", + pluginReference: "C:/effects/transient.jsfx", + addKind: "s13fx" as const, + bypassed: false, + precisionOverride: "auto" as const, + }, + { + label: "hosted plug-in", + pluginType: "clap", + pluginName: "Studio Compressor", + pluginReference: "C:/plugins/compressor.clap", + addKind: "hosted" as const, + bypassed: true, + precisionOverride: "auto" as const, + }, + ])("restores a removed $label slot with state, flags, order, undo, and redo", async ({ + pluginType, + pluginName, + pluginReference, + addKind, + bypassed, + precisionOverride, + }) => { + const target = { + index: 1, + name: pluginName, + type: pluginType, + pluginPath: pluginReference, + bypassed, + precisionOverride, + }; + const getMasterFXSpy = vi.spyOn(nativeBridge, "getMasterFX") + .mockResolvedValueOnce([ + { index: 0, name: "Before" }, + target, + { index: 2, name: "After" }, + ]) + .mockResolvedValueOnce([ + { index: 0, name: "Before" }, + { index: 1, name: "After" }, + { ...target, index: 2 }, + ]); + const savedState = `base64-${pluginType}`; + vi.spyOn(nativeBridge, "getMasterPluginState").mockResolvedValue(savedState); + const removeSpy = vi.spyOn(nativeBridge, "removeMasterFX").mockResolvedValue(true); + const addSpies = { + builtin: vi.spyOn(nativeBridge, "addMasterBuiltInFX").mockResolvedValue(true), + s13fx: vi.spyOn(nativeBridge, "addMasterS13FX").mockResolvedValue(true), + hosted: vi.spyOn(nativeBridge, "addMasterFX").mockResolvedValue(true), + }; + const stateSpy = vi.spyOn(nativeBridge, "setMasterPluginState").mockResolvedValue(true); + const bypassSpy = vi.spyOn(nativeBridge, "bypassMasterFX").mockResolvedValue(true); + const precisionSpy = vi.spyOn(nativeBridge, "setMasterFXPrecisionOverride").mockResolvedValue(true); + const reorderSpy = vi.spyOn(nativeBridge, "reorderMasterFX").mockResolvedValue(true); + + await expect(useDAWStore.getState().removeMasterFXWithUndo(1)).resolves.toBe(true); + expect(removeSpy).toHaveBeenCalledWith(1); + expect(commandManager.canUndo()).toBe(true); + + useDAWStore.getState().undo(); + await vi.waitFor(() => expect(reorderSpy).toHaveBeenCalledWith(2, 1)); + + expect(addSpies[addKind]).toHaveBeenCalledWith(pluginReference); + expect(stateSpy).toHaveBeenCalledWith(2, savedState); + expect(bypassSpy).toHaveBeenCalledWith(2, bypassed); + expect(precisionSpy).toHaveBeenCalledWith(2, precisionOverride); + expect(getMasterFXSpy).toHaveBeenCalledTimes(2); + expect(stateSpy.mock.invocationCallOrder[0]).toBeLessThan(reorderSpy.mock.invocationCallOrder[0]); + expect(bypassSpy.mock.invocationCallOrder[0]).toBeLessThan(reorderSpy.mock.invocationCallOrder[0]); + expect(precisionSpy.mock.invocationCallOrder[0]).toBeLessThan(reorderSpy.mock.invocationCallOrder[0]); + + useDAWStore.getState().redo(); + await vi.waitFor(() => expect(removeSpy).toHaveBeenCalledTimes(2)); + expect(removeSpy.mock.calls).toEqual([[1], [1]]); + }); + + it("rejects a master slot that cannot be recreated without removing it or adding history", async () => { + vi.spyOn(nativeBridge, "getMasterFX").mockResolvedValue([{ + index: 0, + name: "Unidentified plug-in", + type: "vst3", + }]); + const removeSpy = vi.spyOn(nativeBridge, "removeMasterFX").mockResolvedValue(true); + + await expect(useDAWStore.getState().removeMasterFXWithUndo(0)).resolves.toBe(false); + expect(removeSpy).not.toHaveBeenCalled(); + expect(commandManager.canUndo()).toBe(false); + }); +}); diff --git a/frontend/src/__tests__/wheelDeltaAccumulator.test.ts b/frontend/src/__tests__/wheelDeltaAccumulator.test.ts new file mode 100644 index 0000000..106813f --- /dev/null +++ b/frontend/src/__tests__/wheelDeltaAccumulator.test.ts @@ -0,0 +1,72 @@ +import { afterEach, describe, expect, it, vi } from "vitest"; +import { createWheelDeltaAccumulator } from "../utils/wheelDeltaAccumulator"; + +afterEach(() => { + vi.useRealTimers(); +}); + +describe("wheel delta accumulator", () => { + it("combines tiny high-resolution packets while preserving a 100px notch exactly", () => { + const accumulator = createWheelDeltaAccumulator({ quantum: 1 }); + + expect(accumulator.consume("gain", -0.25)).toBe(0); + expect(accumulator.consume("gain", -0.25)).toBe(0); + expect(accumulator.consume("gain", -0.25)).toBe(0); + expect(accumulator.consume("gain", -0.25)).toBe(-1); + accumulator.reset(); + expect(accumulator.consume("gain", -100)).toBe(-100); + accumulator.dispose(); + }); + + it("drops residue on a direction reversal", () => { + const resets: string[] = []; + const accumulator = createWheelDeltaAccumulator({ + quantum: 1, + onReset: ({ reason }) => resets.push(reason), + }); + + expect(accumulator.consume("gain", 0.75)).toBe(0); + expect(accumulator.consume("gain", -0.5)).toBe(0); + expect(accumulator.getState().remainder).toBe(-0.5); + expect(resets).toEqual(["direction-change"]); + accumulator.dispose(); + }); + + it("does not leak residue when switching targets", () => { + const resets: string[] = []; + const accumulator = createWheelDeltaAccumulator({ + quantum: 1, + onReset: ({ reason, targetKey }) => resets.push(`${reason}:${targetKey}`), + }); + + expect(accumulator.consume("gain", 0.75)).toBe(0); + expect(accumulator.consume("pan", 0.5)).toBe(0); + expect(accumulator.consume("pan", 0.5)).toBe(1); + expect(resets).toEqual(["target-change:gain"]); + accumulator.dispose(); + }); + + it("ends a burst after idle and disposal exactly once", () => { + vi.useFakeTimers(); + const resets: string[] = []; + const accumulator = createWheelDeltaAccumulator({ + quantum: 1, + idleMs: 180, + onReset: ({ reason, targetKey }) => resets.push(`${reason}:${targetKey}`), + }); + + accumulator.consume("gain", 1); + vi.advanceTimersByTime(179); + expect(resets).toEqual([]); + vi.advanceTimersByTime(1); + expect(resets).toEqual(["idle:gain"]); + + accumulator.consume("pan", -0.5); + accumulator.dispose(); + accumulator.dispose(); + expect(resets).toEqual(["idle:gain", "dispose:pan"]); + expect(accumulator.consume("pan", -100)).toBe(0); + vi.runAllTimers(); + expect(resets).toHaveLength(2); + }); +}); diff --git a/frontend/src/__tests__/wheelGestureResolver.test.ts b/frontend/src/__tests__/wheelGestureResolver.test.ts new file mode 100644 index 0000000..f6e196e --- /dev/null +++ b/frontend/src/__tests__/wheelGestureResolver.test.ts @@ -0,0 +1,625 @@ +import { describe, expect, it } from "vitest"; +import { + DEFAULT_WHEEL_NORMALIZATION, + OPENSTUDIO_WHEEL_PROFILE, + inferWheelInputDevice, + normalizeWheelDelta, + normalizeWheelModifiers, + resolveWheelGesture, + type WheelBehaviorProfile, + type WheelEventLike, + type WheelSubtarget, + type WheelSurface, +} from "../utils/wheelGestureResolver"; + +interface ModifierCase { + label: string; + primary: boolean; + secondary: boolean; + alt: boolean; + shift: boolean; + event: WheelEventLike; +} + +const modifierCases: ModifierCase[] = Array.from({ length: 16 }, (_, mask) => { + const primary = Boolean(mask & 1); + const secondary = Boolean(mask & 2); + const alt = Boolean(mask & 4); + const shift = Boolean(mask & 8); + const active = [ + primary ? "Primary" : "", + secondary ? "Secondary" : "", + alt ? "Alt" : "", + shift ? "Shift" : "", + ].filter(Boolean); + return { + label: active.join("+") || "plain", + primary, + secondary, + alt, + shift, + event: { + deltaX: 4, + deltaY: 12, + ctrlKey: primary, + metaKey: secondary, + altKey: alt, + shiftKey: shift, + clientX: 120, + clientY: 240, + }, + }; +}); + +function resolveOpenStudio( + event: WheelEventLike, + surface: WheelSurface, + subtarget?: WheelSubtarget, +) { + return resolveWheelGesture(event, { + surface, + subtarget, + platform: "windows", + hoveredTargetId: "hovered-id", + }); +} + +describe("wheel delta normalization", () => { + it("preserves pixel deltas and sanitizes absent or non-finite values", () => { + expect(normalizeWheelDelta({ deltaX: -2.5, deltaY: 7, deltaMode: 0 })).toEqual({ + x: -2.5, + y: 7, + mode: "pixel", + sourceMode: 0, + isZero: false, + }); + expect(normalizeWheelDelta({ deltaX: Number.NaN, deltaY: Number.POSITIVE_INFINITY })).toEqual({ + x: 0, + y: 0, + mode: "pixel", + sourceMode: 0, + isZero: true, + }); + }); + + it("converts line and page deltas with configurable CSS-pixel units", () => { + expect(normalizeWheelDelta( + { deltaX: 2, deltaY: -3, deltaMode: 1 }, + { lineHeightPx: 20 }, + )).toMatchObject({ x: 40, y: -60, mode: "line", sourceMode: 1 }); + expect(normalizeWheelDelta( + { deltaX: -0.5, deltaY: 1, deltaMode: 2 }, + { pageHeightPx: 640 }, + )).toMatchObject({ x: -320, y: 640, mode: "page", sourceMode: 2 }); + }); + + it("uses safe defaults for invalid options and caps each converted axis", () => { + expect(normalizeWheelDelta( + { deltaX: -1_000, deltaY: 1_000, deltaMode: 1 }, + { lineHeightPx: -1, pageHeightPx: 0, maxAbsDeltaPx: 300 }, + )).toMatchObject({ x: -300, y: 300, mode: "line" }); + expect(DEFAULT_WHEEL_NORMALIZATION).toEqual({ + lineHeightPx: 16, + pageHeightPx: 800, + maxAbsDeltaPx: 2400, + }); + }); + + it("treats unknown delta modes as pixels without losing the diagnostic source mode", () => { + expect(normalizeWheelDelta({ deltaX: 3, deltaY: 5, deltaMode: 99 })).toEqual({ + x: 3, + y: 5, + mode: "pixel", + sourceMode: 99, + isZero: false, + }); + }); + + it("lets the local context override profile normalization", () => { + const profile: WheelBehaviorProfile = { + ...OPENSTUDIO_WHEEL_PROFILE, + id: "normalization-test", + normalization: { lineHeightPx: 10, maxAbsDeltaPx: 1_000 }, + }; + const result = resolveWheelGesture( + { deltaY: 3, deltaMode: 1 }, + { + surface: "timeline", + platform: "windows", + normalization: { lineHeightPx: 25 }, + }, + profile, + ); + expect(result.delta.y).toBe(75); + expect(result.amount).toBe(75); + }); +}); + +describe("wheel modifier normalization", () => { + it("keeps primary, secondary, Alt/Option, and Shift independent on Windows", () => { + expect(normalizeWheelModifiers({ + ctrlKey: true, + metaKey: true, + altKey: true, + shiftKey: true, + }, "windows")).toEqual({ + primary: true, + secondary: true, + alt: true, + shift: true, + raw: { + control: true, + commandOrMeta: true, + altOrOption: true, + shift: true, + }, + }); + }); + + it("maps Command to primary and physical Control to secondary on macOS", () => { + expect(normalizeWheelModifiers({ metaKey: true }, "macos")).toMatchObject({ + primary: true, + secondary: false, + alt: false, + }); + expect(normalizeWheelModifiers({ ctrlKey: true }, "macos")).toMatchObject({ + primary: false, + secondary: true, + alt: false, + }); + expect(normalizeWheelModifiers({ altKey: true }, "macos")).toMatchObject({ + primary: false, + secondary: false, + alt: true, + }); + }); + + it("uses Control as primary and Meta as secondary on other desktop platforms", () => { + expect(normalizeWheelModifiers({ ctrlKey: true }, "other")).toMatchObject({ + primary: true, + secondary: false, + }); + expect(normalizeWheelModifiers({ metaKey: true }, "other")).toMatchObject({ + primary: false, + secondary: true, + }); + }); +}); + +describe("wheel device hints", () => { + it("always trusts an explicit host hint", () => { + expect(inferWheelInputDevice({ deltaY: 120, deltaMode: 1 }, "trackpad")).toEqual({ + device: "trackpad", + basis: "explicit", + }); + expect(inferWheelInputDevice({ deltaY: 0.25 }, "unknown")).toEqual({ + device: "unknown", + basis: "explicit", + }); + }); + + it.each([ + [{ deltaY: 3, deltaMode: 1 }, "mouse", "line-or-page-mode"], + [{ deltaY: 1, deltaMode: 2 }, "mouse", "line-or-page-mode"], + [{ deltaX: 3, deltaY: 4 }, "trackpad", "two-axis-pixel-delta"], + [{ deltaY: 0.5 }, "trackpad", "fractional-pixel-delta"], + [{ deltaY: 120 }, "mouse", "large-integer-pixel-delta"], + [{ deltaY: 12 }, "unknown", "insufficient-signal"], + [{ deltaX: 0, deltaY: 0 }, "unknown", "insufficient-signal"], + ] as const)("classifies %o as %s from %s", (event, device, basis) => { + expect(inferWheelInputDevice(event)).toEqual({ device, basis }); + }); +}); + +describe("OpenStudio Timeline wheel matrix", () => { + it.each(modifierCases)("resolves $label with documented precedence", (entry) => { + const result = resolveOpenStudio(entry.event, "timeline", "content"); + if (entry.primary && entry.shift) { + expect(result).toMatchObject({ + ruleId: "timeline.waveform-amplitude", + operation: "zoom", + target: "waveform-amplitude", + axis: "vertical", + amount: 12, + preventDefault: true, + stopPropagation: true, + }); + expect(result.anchor).toEqual({ + kind: "hovered-track", + clientX: 120, + clientY: 240, + targetId: "hovered-id", + }); + } else if (entry.primary) { + expect(result).toMatchObject({ + ruleId: "timeline.horizontal-zoom", + operation: "zoom", + target: "timeline", + axis: "horizontal", + amount: 12, + preventDefault: true, + stopPropagation: true, + }); + expect(result.anchor.kind).toBe("pointer"); + } else if (entry.alt) { + expect(result).toMatchObject({ + ruleId: "timeline.track-height", + operation: "resize", + target: "track-height", + axis: "vertical", + amount: 12, + }); + } else if (entry.shift) { + expect(result).toMatchObject({ + ruleId: "timeline.horizontal-scroll", + operation: "scroll", + target: "viewport", + axis: "horizontal", + amount: 24, + preventDefault: true, + stopPropagation: false, + }); + } else { + expect(result).toMatchObject({ + ruleId: "timeline.native-scroll", + operation: "native-scroll", + target: "native", + axis: "vertical", + amount: 12, + preventDefault: false, + stopPropagation: false, + }); + } + }); + + it.each(["content", "ruler", "track"] as const)( + "uses pointer-anchored zoom on the %s subtarget", + (subtarget) => { + const result = resolveOpenStudio({ + deltaY: -8, + ctrlKey: true, + clientX: 0, + clientY: 31, + }, "timeline", subtarget); + expect(result.ruleId).toBe("timeline.horizontal-zoom"); + expect(result.anchor).toEqual({ + kind: "pointer", + clientX: 0, + clientY: 31, + targetId: "hovered-id", + }); + }, + ); +}); + +describe("OpenStudio TCP wheel matrix", () => { + it.each(modifierCases)("resolves $label without leaking browser zoom", (entry) => { + const result = resolveOpenStudio(entry.event, "tcp", "track"); + if (entry.alt) { + expect(result).toMatchObject({ + ruleId: "tcp.track-height", + operation: "resize", + target: "track-height", + amount: 12, + preventDefault: true, + stopPropagation: true, + }); + } else if (entry.primary) { + expect(result).toMatchObject({ + ruleId: "tcp.suppress-browser-zoom", + operation: "suppress", + target: "native", + preventDefault: true, + stopPropagation: false, + }); + } else { + expect(result).toMatchObject({ + ruleId: "tcp.native-scroll", + operation: "native-scroll", + axis: "vertical", + preventDefault: false, + }); + } + }); + + it.each(["track", "empty"] as const)("supports the %s subtarget", (subtarget) => { + expect(resolveOpenStudio({ deltaY: 9, altKey: true }, "tcp", subtarget).ruleId) + .toBe("tcp.track-height"); + }); +}); + +describe("OpenStudio Piano Roll wheel matrix", () => { + it.each(modifierCases)("resolves $label in the note grid", (entry) => { + const result = resolveOpenStudio(entry.event, "piano_roll", "grid"); + if (entry.primary) { + expect(result).toMatchObject({ + ruleId: "piano-roll.horizontal-zoom", + operation: "zoom", + target: "timeline", + axis: "horizontal", + amount: 12, + preventDefault: true, + }); + expect(result.anchor.kind).toBe("pointer"); + } else if (entry.shift) { + expect(result).toMatchObject({ + ruleId: "piano-roll.shift-horizontal-scroll", + operation: "scroll", + target: "viewport", + axis: "horizontal", + amount: 16, + }); + } else { + expect(result).toMatchObject({ + ruleId: "piano-roll.dominant-axis-scroll", + operation: "scroll", + target: "viewport", + axis: "vertical", + amount: 12, + }); + } + }); + + it.each(modifierCases)("keeps $label native over the sidebar", (entry) => { + expect(resolveOpenStudio(entry.event, "piano_roll", "sidebar")).toMatchObject({ + ruleId: "piano-roll.sidebar-native-scroll", + operation: "native-scroll", + target: "native", + axis: "vertical", + amount: 12, + preventDefault: false, + stopPropagation: false, + }); + }); + + it("uses native deltaX for horizontal trackpad intent and vertical on a tie", () => { + expect(resolveOpenStudio({ deltaX: -18, deltaY: 4 }, "piano_roll", "grid")) + .toMatchObject({ axis: "horizontal", amount: -18 }); + expect(resolveOpenStudio({ deltaX: 8, deltaY: -8 }, "piano_roll", "grid")) + .toMatchObject({ axis: "vertical", amount: -8 }); + }); + + it.each(["grid", "keyboard", "controller_lane"] as const)( + "applies editor zoom in the %s subtarget", + (subtarget) => { + expect(resolveOpenStudio({ deltaY: 10, ctrlKey: true }, "piano_roll", subtarget).ruleId) + .toBe("piano-roll.horizontal-zoom"); + }, + ); +}); + +describe("OpenStudio Pitch Editor wheel matrix", () => { + it.each(modifierCases)("resolves $label", (entry) => { + const result = resolveOpenStudio(entry.event, "pitch_editor", "grid"); + if (entry.primary) { + expect(result).toMatchObject({ + ruleId: "pitch-editor.horizontal-zoom", + operation: "zoom", + target: "timeline", + axis: "horizontal", + amount: 12, + }); + } else if (entry.shift) { + expect(result).toMatchObject({ + ruleId: "pitch-editor.horizontal-scroll", + operation: "scroll", + target: "viewport", + axis: "horizontal", + amount: 24, + }); + } else { + expect(result).toMatchObject({ + ruleId: "pitch-editor.vertical-pitch-scroll", + operation: "scroll", + target: "viewport", + axis: "vertical", + amount: -12, + }); + } + expect(result.preventDefault).toBe(true); + }); + + it.each(["grid", "keyboard"] as const)("resolves the %s subtarget", (subtarget) => { + expect(resolveOpenStudio({ deltaY: 7 }, "pitch_editor", subtarget).ruleId) + .toBe("pitch-editor.vertical-pitch-scroll"); + }); +}); + +describe("OpenStudio Browser wheel matrix", () => { + it.each(modifierCases)("resolves $label", (entry) => { + const result = resolveOpenStudio(entry.event, "browser", "list"); + if (entry.primary) { + expect(result).toMatchObject({ + ruleId: "browser.suppress-browser-zoom", + operation: "suppress", + target: "native", + axis: "vertical", + preventDefault: true, + }); + } else if (entry.shift) { + expect(result).toMatchObject({ + ruleId: "browser.native-horizontal-scroll", + operation: "native-scroll", + target: "native", + axis: "horizontal", + amount: 16, + preventDefault: false, + }); + } else { + expect(result).toMatchObject({ + ruleId: "browser.native-scroll", + operation: "native-scroll", + target: "native", + axis: "vertical", + amount: 12, + preventDefault: false, + }); + } + }); + + it.each(["list", "tree", "preview"] as const)("supports the %s subtarget", (subtarget) => { + expect(resolveOpenStudio({ deltaX: 15, deltaY: 3 }, "browser", subtarget)) + .toMatchObject({ ruleId: "browser.native-scroll", axis: "horizontal", amount: 15 }); + }); +}); + +describe("OpenStudio Parameter wheel matrix", () => { + it.each(modifierCases)("resolves $label as an owned adjustment", (entry) => { + const result = resolveOpenStudio(entry.event, "parameter", "control"); + expect(result).toMatchObject({ + ruleId: entry.shift ? "parameter.fine-adjust" : "parameter.adjust", + operation: "adjust", + target: "parameter", + axis: "vertical", + amount: 12, + precision: entry.shift ? "fine" : "normal", + preventDefault: true, + stopPropagation: true, + }); + expect(result.anchor).toEqual({ + kind: "hovered-control", + clientX: 120, + clientY: 240, + targetId: "hovered-id", + }); + }); + + it.each(["control", "graph"] as const)("supports the %s subtarget", (subtarget) => { + expect(resolveOpenStudio({ deltaY: -5 }, "parameter", subtarget).ruleId) + .toBe("parameter.adjust"); + }); +}); + +describe("profile-driven wheel behavior", () => { + it("allows a profile to prepend a different behavior without component changes", () => { + const profile: WheelBehaviorProfile = { + id: "custom-reaper-like", + name: "Custom REAPER-like", + rules: [ + { + id: "custom.timeline.plain-zoom", + surface: "timeline", + modifiers: { primary: false, secondary: false, alt: false, shift: false }, + operation: "zoom", + target: "timeline", + axis: "horizontal", + deltaSource: "y", + anchor: "pointer", + preventDefault: true, + stopPropagation: true, + }, + ...OPENSTUDIO_WHEEL_PROFILE.rules, + ], + }; + const result = resolveWheelGesture( + { deltaY: -10, clientX: 42 }, + { surface: "timeline", subtarget: "content", platform: "windows" }, + profile, + ); + expect(result).toMatchObject({ + profileId: "custom-reaper-like", + ruleId: "custom.timeline.plain-zoom", + operation: "zoom", + target: "timeline", + amount: -10, + preventDefault: true, + }); + expect(result.anchor).toMatchObject({ kind: "pointer", clientX: 42 }); + }); + + it("can select rules by inferred or explicit input-device hint", () => { + const profile: WheelBehaviorProfile = { + id: "device-aware", + name: "Device-aware", + rules: [ + { + id: "timeline.trackpad-pan", + surface: "timeline", + devices: ["trackpad"], + operation: "scroll", + target: "viewport", + axis: "dominant", + deltaSource: "dominant", + preventDefault: true, + stopPropagation: false, + }, + { + id: "timeline.mouse-zoom", + surface: "timeline", + devices: ["mouse"], + operation: "zoom", + target: "timeline", + axis: "horizontal", + deltaSource: "y", + preventDefault: true, + stopPropagation: true, + }, + ], + }; + + expect(resolveWheelGesture( + { deltaX: 2, deltaY: 3 }, + { surface: "timeline", platform: "windows" }, + profile, + ).ruleId).toBe("timeline.trackpad-pan"); + expect(resolveWheelGesture( + { deltaY: 1 }, + { surface: "timeline", platform: "windows", deviceHint: "mouse" }, + profile, + ).ruleId).toBe("timeline.mouse-zoom"); + }); + + it("falls back safely to native dominant-axis scrolling when no profile rule matches", () => { + const profile: WheelBehaviorProfile = { + id: "empty", + name: "Empty", + rules: [], + }; + expect(resolveWheelGesture( + { deltaX: -21, deltaY: 4, ctrlKey: true }, + { surface: "browser", platform: "windows" }, + profile, + )).toMatchObject({ + profileId: "empty", + ruleId: null, + matched: false, + operation: "native-scroll", + target: "native", + axis: "horizontal", + amount: -21, + preventDefault: false, + stopPropagation: false, + }); + }); + + it("returns stable zero movement while still resolving ownership", () => { + expect(resolveOpenStudio({ deltaX: 0, deltaY: 0, ctrlKey: true }, "timeline", "content")) + .toMatchObject({ + ruleId: "timeline.horizontal-zoom", + operation: "zoom", + amount: 0, + delta: { isZero: true }, + preventDefault: true, + }); + }); + + it("uses platform-correct primary modifiers while preserving the secondary key", () => { + const macCommand = resolveWheelGesture( + { deltaY: 9, metaKey: true }, + { surface: "timeline", platform: "macos" }, + ); + expect(macCommand).toMatchObject({ + ruleId: "timeline.horizontal-zoom", + modifiers: { primary: true, secondary: false }, + }); + + const macControl = resolveWheelGesture( + { deltaY: 9, ctrlKey: true }, + { surface: "timeline", platform: "macos" }, + ); + expect(macControl).toMatchObject({ + ruleId: "timeline.native-scroll", + modifiers: { primary: false, secondary: true }, + }); + }); +}); diff --git a/frontend/src/__tests__/workspaceStickyHeader.test.ts b/frontend/src/__tests__/workspaceStickyHeader.test.ts index 4adbb56..9e617eb 100644 --- a/frontend/src/__tests__/workspaceStickyHeader.test.ts +++ b/frontend/src/__tests__/workspaceStickyHeader.test.ts @@ -23,4 +23,14 @@ describe("workspace sticky header structure", () => { expect(rulerSource).toContain("TIMELINE_RULER_HEIGHT = 30"); expect(rulerSource).toContain('className="workspace-sticky-ruler"'); }); + + it("routes ruler wheel gestures through the selected DAW profile", () => { + expect(rulerSource).toContain("getMouseBehaviorProfile("); + expect(rulerSource).toContain('surface: "timeline"'); + expect(rulerSource).toContain('subtarget: "ruler"'); + expect(rulerSource).toContain('container.addEventListener("wheel", handleWheel, { passive: false })'); + expect(rulerSource).toContain("getTimelineHorizontalScrollMax("); + expect(rulerSource).toContain("state.recordingClips.length > 0"); + expect(timelineSource).toContain('data-wheel-subtarget="ruler"'); + }); }); diff --git a/frontend/src/assets/nam/amp-cab-card-v2.webp b/frontend/src/assets/nam/amp-cab-card-v2.webp new file mode 100644 index 0000000000000000000000000000000000000000..4512220d9f3b3c325399b6df8001948c5dee3909 GIT binary patch literal 20180 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

rgOWJ5dEvjXEZC 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 p&C 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%0DsuAJmx8C%okb&B!?{iA*Fy$PveXUhJ%t$G7 zp*grVr(|KrQ}swJ9aroBz)Q&Pf#~UUqkNEJ_o_nZ#Au^f=pwWVu?ImPJihB+Fn=yT zn$vcQ`+nDWl9tKfnrG9^KFWzE^8QsbIO93~V|rt8EokmxnL344R;P1VA6M{3r6#|zz+l*P+RDt{(fm9x{lX zDRhP$?;4UDK7n?db4$!~u&{w9&QTkPm}6f}DtGG1(c%B(B8N%!1p$O~lWImbU4WSS zJ%=@7g!kS@B=@QWZI8|M0xq38e1wSFLB9$vbs1zm>3&|&=BIlJ&K;M)ky0|2I%g#L zb-r(T??;MbzpQe2+#p(xs#F@yW~Sd`Lv-w$F&$d#+{&H$wjThGj+Jpo%_5i z5{#g1J{>@izog4P2J%l{Tc74o*~I6!44i8C-WR&iTC%^5WZ_!wFn?+)ge(aJG!&F) zEVnPjsLee~=9=VjTumqL$Rr&h{mGZ21$)m;lTb447=o2LBWd#u5WwzEnA5Z5ge8|- zf9d$9#~e3X>@Y8uJ6+BP0xv#31*(xFtg>hqdMv5MP;;2*SC1ezhn~ALtGd%XeOW7%PLUsMslaAY-f>&01%j zB#hXZc^XREROt4(NfMjtC9gB*cGvYZ2oZ%kWKM0`hBY*IBIhMycPEgb+pbaoq#-VvQ_#$Hf6}zz`G=3z$R`&di#EmH@6PorT2PGE)#=szQHZAGlYXeZg8mQgbO8+yGOXz* zzCiI}xI~_XsfD3YS;j4Ck^Eu3K3X#(OaxvaE#VU~8|k@}#foJt!h>YsfvPR@a$tYe z=kl%WWjD3N<;OCv(jb-9zJA=(c9NSW#VfcGpW8{u$6ZRQ#th9B9$ zHm)vH&7Hf8(C7nn^r_qyNakLA%_Z7I+YvN$lg#C^1cmr_Va|S3S6MkgB)qYgT=y5s zuhqECTn7v@h)~&=9_+G$wSav0-T1BNgeFnJ(NOg1XFvpI$ea;mf>qc=m~s{#_u^Cz zYCf!k3oO~jiPZ_%LNM4Ckh&La1={3K}i@;>gX=7Hd z^bpSGWdpF!)q;C4E-yJ&RQGZs~^v+~W9- zAvXv;IUu6nS{bbNi2*#f#lAe6X{nTQ;+N73IZ&%jc?PKExWy45)`l!o>ABQ*3OsNg za7=EiKY%hSO{>#$E*`qB2zZ-g0Y(0wjkWRa1OTD;OX}BCRz9l1E#RLe9a+c;?C4j* zT8XGJ6#NYetSHAKKT9LGj5e)IL+APE9Oe=CcM?$LxjmvLyVRIF+Ws(v*N%7 z%ciz7$IIRlLr>w!YHsWt=R)cs$SKj&9a9cjcS+((K^76r@ZeP=6pr#DRRwi#DI~R5 z?FouHQuN)Q6SvFy^gGHN2R&x-?mMG(9WN_R+e3LX=Xdh$bf;xnEMUvpLkVraq%gbO z$>B&J69U*Dry4Px({xo@rlg-u%UF@a|2&ydJ*A5ZY^cx8F#5L){%!q>`S7rcxl!E^ zk}#GHZsj@rIO(wFISZfgDPaR1m`V-m8-OUq0oXP z1B?V)>VH@C#=zCP_zuV+Gct zLuK^r{}uGDF+c*$0e4hdhN)MqV|LXHuVC{*@ZBCdv(79+?&C}A|5?kshZ>gz)`~5I z-+Gzfb{WuT^`|v%g4FEQGd0EE=zwth+kupP7V4BF&3ZOy)=e}j;aPRUI5~>3jSY3uVSmD|>|#z!vDB4N1{oWq&+W+ExI494bnEQPLkUsKgP#CN8!Hv-Xw+kC z`EJ-fgY(cMk4QZ9Chf4eBp(qDXv9)lGXYF8keX7!(jb>Hi&8-085Ca4$iBZ8pU~c;pJ4j^KF*$Ai;-eu(1eV!JkP>~yy%Bz5oyb?cmzD!YhycQjCe@|#mKy_)TuEhUctL!F=Aa&4~yQUAPLy*W+UW zWqV1_^Xc(l=s2@ko4ZtF547~Xl=Y$vuF)XW@-{XtBKlH&22SKdN?zZpN)cm}o_4J7 z&bki!=>%Xt$)S0#;SKF~!2yDoB3!*omAS2b$yGhy6xeWckDg<({2!x40#T`-U20Y+ z<+T*O9Dzv8iDk3P!3r~$b~B}Wn|eFm!L9=qWZl7^yE!qb{ummLPA5f7Iz4_S_d10% z@|M^*uh5fdm;k{KsP+A%q3F8JbE~m6#gsos8Qoo-n7&*s9AL7u(i=rs4huxiI3x7i z#kE;lFVP#XqI?wNs4}OmksADJ7MAU|tzzM}F9W~9V%nKIP<$Wg1MIv;mJhwWP_&T> zy7#nX%$!8QF%j>YY<{%9GT&sJH3UB~k|HWnA{hxX7nAD*1x~&0Ec?L>6 z41q#Sv7@%jm2yk?WH424hig8?_mC+~UI3O;ljOg^CC-}4Q7^K0-qYkJpT5YqBdjj6 z-}N@Zj|kYJDgMM3MzyONxCyj3Aw0EUY3Dr1Mfox-z99BnfIw{1QRApzrMIt^4a<*G za>juqXtRYq!mYq2lIh~TCBY$RyKdCJb#Vd`k1>p>M9TUIh$SDM<4;(}fN6{L3RNEj zyAwbhPJ@;D-wDV*8tR=5Dy7U1U!Vsjx-O2^UEKcQrM`*eBkY4}Qir)%q2ewIybtSK9W_INbAQ&pQngt;JWm&ap{J*tm*x(n=;e3WNmu()**ItI z)_BU>yi>Wh`c;tl@xkg`Sjs*Ysb0 zEJml_Z+Jqe?y<<&D z7vX3=@7)j4T1LmsCVZ8QJ=MwNYORw5BA!3TeDcceO{Fr+Q7R0LcQUgNWvT|7bHrVp z@%=F?`#h}jxLqTvWX>^?Q8m=pOq=Idrh^E_D~_WDvnC914B0e82vVKlhNoyGjvy}l zzkD}z=(<^N9DZJ$g8Rrf&WmTu?^$k|mWpL!`>M=yg_+EADg5k#4QA-@!+|bR3^Vl3 zHA$(Y%`A@s#%Xb0M2W#f_W2p(2-)3NZN3Rmwt(|VM_vCG;0!D8+{<{EWnuS~DR6O% zij^#L{>M&7J|y);nzqOYw1pHrP7%sa*zBzK{1ZBniUC}UY5!S{ z65BSeCa>l(2vZ5>3)Xpf6Z&O7x7SbuFcD&K3p_Py8^cP^8m<~lNRfusqn*2g8-*cb zvOiRX((|QQTIXW40(HdENaq5nTloG&8K4Y^=3eBR!b#phKD6`xn2JYcuYasZ#$m3E8oRqbU_2} ziKY?Vzm#hqiNV&$7=yBD%G6z-N!c6aU`Xcs8AY!S$hRJGIu$S_qR~`;sM%lZp5V_W z{yS=FO0M^Z&gork&|!wSTtHra z&9uMen|qZbHVR`4f=zIBR=b^qi+w9fUqPfGl_i+aQ-``@#oZ$;$(xsvuQ0&=(MtOu zTykcG{lgA8*3$^rwZTHnf@jDel5`|%ty?94kMNLU|G;p|3tHiuxb!|to6!q$IA;#u z5M}R($3F?U&AM zm&)zY)`i624AxK<*FTuD&6go8Mi8e_bjRJt@*}_pJz_sZ@Bk}Q8e+R(E)}Bi4cEO1 z`SY4C0_+R*RsN5?;F6Tic}-6u@K-A|WR!cxxl7@8X0b{M*>HyC^yftnS}kzlrU1`$ z!>t*LdH!ygsKtB@pW^aQjn-2jI7BkcH?)M1B9Y}#eBJzmzIh(+3Ec!lqQA!}gw3;x z;XC4ei!g+=+;12-JY326-~+0h^T2mvcrT#uls^BtK1+RUsI*5aEj)N&rd?^;n?S1D zU3oTAauY%$E!02qX~vCoDz$>m+vTt&cZF#W4;Z_lh>!|mIyk#2%7i2#q>pY!NbU?P zqz0hb49|2`%#(6_Pgbbf(eMQ8oN8yq{=SkSrMN}VM|A<@lHMJ{=3x5QsSm<=DGUe` za2CZr;Z(y;GN=W7!`dn?Q!_;dH1jpyRNIJ*+BviL;+fw}UCb$uP~JX?>E zEWp!5)L2m33Q|Bi9)@D+ZrFDycR1npY+psD`c7l!0iXdqp3%{G7PJ>B>-;=m_8Ec96koS%rn2E8bKI-yRq|*(VZ}vv%%?Q|qXid|@){LRe5LR1^ zMZRgWa2%3#ZXhMiPan8H+J$G%70fm&<4Gs#1X?tC3CaQy>;`l=ewfiCwe5kcqSi3m z2cK^wS)^-9H(ka|l~|g4uheK)gD1->+H;NttdU`SdAd@D86WJTpb_CJ2GjYObuiD$ zquid;@hzinz3s^GgOVlBMFZx0t=CYxY#W7Y1b5UpqF~+k76B+;)$2f5HnVlyO6%zh zzv%6PUZQ6)1>-WZt*5$FC3iLbPpT{#!pKJi9;a_3QdT7|N7^#@YSW=4;a7>y;#}93 za0s_G7nht#6v>hAJmyT>_z?_Y-u;0IS@&t!?g@GGVSEtnMfp^cl3b#74EznV$T*Wf zreO7e!<>KmF#5Zwg>xCfHxY{J!pLHuvu5_yow5`t1BnI6^s5?UinUEyosH<_HfoUE z>dlBufj1O-y*RT-zq{Ai&N`;9~PKbzTLUI2+wi^+6jbet^bH?||D#{Y!x%)0H);IFDSa2H&) zZ;M8$JQQHV==+h7B>Edctbt{x3HX#83FvdFTxq09#|qNi?j}d?L>&Hq>##7mWkz4} z+R}tG^>XQM#=*|g4{C=UBf&Gri+3h{s;h$i^5V5IZTyPF^;B(V&`G~9ZKO3!^t&Z} z>dhc4AxaCB@POjCFDe=PhNlW_?9#t`hl2!Ky+S3lZf;SNn3eJ%xJw_RA}U7?duCVFgYGX8Y9 zVA^(*4H<0@cBq4>+3~uyv70U81XMEb#4E2!?XV(a+56f#(J$Yo~xd zkuud5w!^gezAP)EwwcAW8BV%f8C5u$~0qKp!J%$ zoYP8$umKXuNai+7>A-bj%e^@_sZrCI6Al3C@lH3j6;LP zn=Qf!Tn>+VN2K|f&OW8Jkx8RJN*5TE1$r@@T1wP^X@9faK+r^M<7rZgG_tt=Of+Fi zoOj@NG729xML6LS&Cg=!zG)p;jrqEmImQrpXS-bOc{*^yG?kz0q5QyPRKquY@$77aK6s^KbLDD)2* zaHo5!l(%qy9VKh_^15pb!fl1%+i>k;nKSNO^T+h*|DSa*=_*{;cW<|BsI@J;Ot!;h zp3Jst$APOAjna?Dmw!5v~RxA8qNC2v`CPP5#q zk)L&o)qV~pc9s17##pXF*GL>bQA}x-+of?d$`NH#k@ZVxJcflgLl+n6rUeSL0})0u z92rd9(`^2R>lVn4nYm<0_FOMY5JCN>)3ps?7y_43c`1&)I#0(^rM#!NVbvC-p%$I< ztOaMtZF=MvVG*vU{ZE=+ZUrhNRXNccNf*>naP;?(srTf4PE#mhu# z)ZF|zoamxU^MFc>ti+^DM*m7YTK*RvqvL<-oiBRQK51cCadQS;4FU7OdqGoshMwl3 z9{e%%#$d7KKhYw9Wtj#O=K?&)e)#L(^ibia#6* zZ2}$L1?3tNEDQ_)C#X-ep%k_vimWILyBc{GEQ)-&{H^CQi{`6!N=q{R8XzwQ8AgfNMDX)llJ|MPS zCrR;nTy6S-R(niNPw&--E{I|?hR-lO9yWV!!d)ck1|REl3zE)Zzob$>zxhdr#@VLI zoWrxDo6xZ~iQD)B#m1|=WKy*8Otf#KbN>x2ZUu?fCppM)e;+C9{H+6SUcpc?a@AQb z-WT+!dv9;;50rMU2lEdWl$9L3)_hF9~fgTWjvbx37hseI#v=lO0YX|DTC%TP^> z{CxfEZaT%=aTqIlRtfv)G3(O2Y(+ix0_^Y-=?EN;hQbhQLy(;>tq3zHf|7$J?N5HX zO!DyH3iA$+Q~K|rPvwG?vVW8Rx&O6yO+E}lw$jB>?CLFS4}d9X#?=n71!3>%hF$ChXxr{@lnkhP&-vbCDV@s8S&mu zKq({f3-+`|BllXK)(-`9#kcTY(dGwMXU`f(L05IM-SK4izRLCB(6LZrzxUn?BRf2n z`SS@R#jBF^JI>2@I05sHs>*dDbU}C%BX1rfI_3_7%V*tDl84O-|H2?N$t8j*PS!b+ zCu-;6HG&vY56CPdxJ<`K2aGpO{{j|cgc0@f4JQ+6xK|gdX1Pw7E4F&Z387Q!gqo7S zQ>sQ3W{}gv7nX{;r5Q3yPJMYDrR$r=J3Gu+Oq}|2JogBOK>Vc2{_hJzgrPBz)>YA~Eh_35 zY~1m)fEeDzsxt*Az_#?5Jh$q~2n&|a&yqOZ=V=&Q^K+K4q1i-LRQ$N6o-@Ap1=y_^hi@`tLWt7 z)O@kycGNwVVqf2vETJq@w}on_Q9Q@C2*%FMS1k&2;KWbf1(G`NrwvZ}NBQ?=@Ks>q z$D0X(0pU#M(dB($haffW2~ClGJqp@~<0n!+GoUqJD7b7@WHmRSk-FSpKd}iY;Gptg zT3cC~^rWbw$q5us-rb~XVp*{W@HsO!Cw*nX$b>cZ)B6B@VbyZD`D!}=&>-(=Xw|VO z?K1Kdf{7QJsW2-scYxyTe;js?{XDpn&CAyUE}TeUXPdC2R^&Gm6XHt-2(jZ?wqg+7 z^q*x7*OQxgJ!T0}@uxQf*wKdQebYnvHCXP*HH}u6Ihm zb`+vLc_Qn*X4k~kVSZIb(HhL7QWzjx*{ZmD^5 zGCcYC)VKgU;7lCxKbp9GP|qUCV!_rIx2+EIv%BwokKhExkud8}#g$+6g;e2Wf8W`4 z_f~CaO-M0fH%v<_=}!xj^ttD0U!UUP-RLNW7TD6XK+5JLub&zAIZ;X_^4Q58y7#=zvJ|u`qS^tS7Q7`beDv1AU7Cv@|c4 zEs~Q`#=SBWz-!S=iSK_w)HQqiicy|{;`Ooi8pq@dMZ|{;Ft1;O#?Omlf~__@#D{fgwje~`; z0xsqODaAP{I_q&Ui-6RmzPyQNx;oUzHBX}+elf>jx8qbPHQ8dtpZgGkrVz26pPoXC z(FZ&W%1+BT^gA2(OiFiYm{*7VF2{>snYj>W6YQ+HzLTz3x67^0-l$2b zVE8tKO$5TLJFc#sz?k&+-^*QCKi0gA7=hB)iW#;GF&S1R{8$CcP9VP+M=AejI2NztAuFrcI-%E`hGF=v6j$}J9xDe>zkdT`iE$_HZiCe z3M05v6}s+(=iQ&&wdaxNXVV|Bvdj-cLK^qA>Iu<+ub?0kt~)-jrq>!hwIighviQU6{*d1%#+oI$wI<7#@<;Jt*Upb!v4 zJWZTr%Ay1XVs;#3?N8u7Z9il7iQ`j>@oHT!YcBYZiNt%5QS3!)cXfDwA}~dfBb>&< z#o~G6Ui&_B&MOg~rs>Ncwoz!y`4#l=lo;-$;zu@<^DlzPg`H>K$*dBwLzzOCfU(CRYfYp52nxvc$?{P$RJ}|?HoR)>A z#{Tem(9XdKZJ*@UvCVzdo~ctftIDCp-6a9OpM+jBu}kD9dsP{4{@9(TJJRhg*n(Q{{NTK`x|uQC z1;L(txGuW$LUakg6;u`|I9~V9_1(z8_JLnJxWfwqgX~K)H)^wC06^1T_X(y^3#5U> zJ2g>augVY#Hw3klPxc3&T4xDZxEjaUEoh!3s7Z%eIwo#TmLhPL>S&ac)ti+@q`YhK z;`lPTVylT%jHqM{RiwYks(adw-SRmmx5DPp}Jpg}2z4w7t| z`XHy6$Wn0hjyC+KD4-~D8fhSi0bX~ErqIm&*zUpJTN;=nc7I6%g&cxOYUcJ(#g95p zAL1H=As6i$MA9>OOeEtG(Jx;;{cF_^b_k|(#UA@G{fs6F_Ad&aIc%&(2cM0X3hek< zP?|MiGIZyBfTt`ZTKBPTBI;7$&55$6JcsC=I^|r#Du@w97B9-FE`dL0oNSB|SmbNT zAP^Nl&)LgxnBIh~8g8n3$!E(WG`Dpk6!;GI_jk9$Oy~>8#oXF?31Kh-LHl!$3W+=N zhf)C?pCGbJE8y*RoBXx!y}nRCE>^MkMMG;l!zG`x&qeoU){kA{`7Z>4k=wTfG1DtE z(gXbmR7PK1om+tw6J_@7{A?isdntEK$97gT2d-ewD+~AFu8J?B@4L-x(L*1+43|xP zZU#Ij)06gw$~4Cc*4HzjNutV~oIYVr3=V+j|NMIDP6ZocAnbHRM_(vikx zk#S47iW8Al?)<}gxMe~%a%O3GhVh}HtI6dj>L0$kuNG!mmHRE_e(spf`?&sIo?e-E zNk=Tvs8MkW2eTYLO>Ua@`4`XiGfBJ}Kez3*ylZ3IK4jhcTmsTJMv?1>O~3VP@~{%n z8T49<1$T+<=Ao^sYJUjh9Q&(@)$?_m{ zY^5Xr1q@rIH*=nU-EQzSe{Z&u<&xP`=#b?|1%9zdpUUJ8Ue0m#z@-Q8=%bJEu+Z~@6ayCIt`OF>aRJ(`T`ODO zJ7J5(zi+aDMVw}OG&YI~i3;4megJlfCO{F?Dkk<`?6zYYBqxommXmw#);A_|Ipgos z08F;B%yq*@c!%uO1r2`E7wFZeqZM%`t4b@n#46mb&_<{GczOIhHSu&pEhWntus^_I z0|)_af#q}P#6*a~vQ{Sa$(C?z{di6X-vYI-+lop^^!immYAf&;SK;UPASh>e-w|F} z>+BvjF6I*?6!=;mml-Lin1K#&I_S>l6}dXg&@+0oJDmt>j0I1Th( zK+BdBU0}6_FvSlZkccJ$@2I{!8%Z&3!s$p=m)59*sVD;tRaE1QdGe8-kNxWe5$DB4d<`Pt_FaM6L~a#q}ZMzE5&N zI*euL7q$`)?gI&y4u3FH7DxNvY^>4>z#;TCr6IbK9ot_ngQy~T>R!Cf5!e`HRG%dj zKX^kh|AgmYH<$Y@cnX*{F^&5=c(uMGg}Ahx(woIc-ttS@pSgGQzIWEWfoV zs`4SH|JA$P)qrYXeef`|lNjsy08G9$@OrkvWWzPH2uTkT0D@qzOelU{iJ#Ov?OW($ z(k^m}m6NbpuXusO>?+w9gIL7V`#MMSW&P&OslX>k)Uoln^gJ^^hgq-~UsC{W)~3~? zt#nEV?HUyZYVpO5?=RQvU%YdUOTjTeYc5Nt1{5Us>rkpo8`tdy(je<(@@HB@f|Q@dU!Z_!fRH7z*Q7h-)p&ZjxB#{LBkdGoZ; zvrw>{Nq;x7Adtuz-koPD(3pCY!LLdGn^lsSYU_(|sUfb-UBk_N5~+^U6s<$_ec+(Z zZv3w4Z$h_p=BU+OR8X+h;{5B7;^HS4DLJjCJ{vC|<`=sYZSPib%Ty2B(1_gtBtsti zCn+zwa)H}K@W2%Rv+DWYD2O66rfqBHSbcSq@Wo5s)fWDraFm*xjt@xv`C zA>Y!1fmic^;Cpp5C4Yy_F7yHKWW5ouc2u$7(nS2FCTH}bF$=NBdfJ=wi8C~qX^5@%}*NU}&f6dcDIsh2Ke z4F?!sLf05uJYBN|Dz%%!3h4amgf6V3vw>3DLAJ5fX5JLyk}!Y~{8KCF;^jPCLQB(X z`T7Q^QdEi$(&*@~@{loaO_`b8$OWeeJ75e8yb_>#p_btacB39?jUm&*!jDqpl;P`1 z5##tc+h%45Isn3?6$H2YdnLQ}Wb~EmXXXW=Y9aEbI6hRgLM%idJ^TuNSyIjbGr`r< z7GTrw4oCo`pa1{>1qVRPfB+~wSObVcfHs6fKqQKHoaqr`>izSdMfHdIlpU%LeJ|0} zYUJ=L7f0bq-#-o(=ZWGU8N>x_tSeJA3MDsiFi%|ry|8ja*=gLVI<%`FN4u5(nz}W&vV)!GNZ*Os_96Ge>x*u!XZ+F#7euUe4Hp3P{pGF6 zo4szF7x_RSQ{`7s7NYeSl+pTo)Zu_G^ABwfiuS+K#iPOD4?0k!EJqEtrWTNMt$ts% z4HQ!+?=$!hT!(cd9E5jCjX*=mT$MJjwf~?ULt=njJ~d3`D}AEfMVJE-fUcuBJFbFf z+?ul=KIl%9>18>8EWhbD4{*Tx>H8Fg3SQ-KyPgT@JH`nUvcQecfkH*PPqr{HTsPCK zEF|=y85>0zrmU*N~ZpvZfmUd2y zJH{UeI|^dsaerrAA6`4U?ky(yu?aC}{$dsHy9pW~k5G&hskPBUCdu>a*rodHo(4lq zzgPQan8r8lb#Rh_>>xJEl$tUnqP}pWr|6&`3A7x_3fz%KUTYGL2(mpjZ7=H;F2mNS zV3F!l^t5(1wJOk8yp{`J!&a@5RzTL9@Uo6pZyMEL3C-Dt^d6|3*z~DV%wu-2FUTw} zhY;kgg03i;UY@_J92T$Q~CnW24@JO>qFyN)~$;kqA_V&t)bpqa%X+Lc;D&Ur|RS~ zBdY#LNW?rr`UU<)hV~S{N6{PQnL=-*s*cW;qNNZ$6X;1NS1B%y9Wb;y(d5S2a8`si z12IhQ0v3TJMjQ2T`y==&=@{*SO5K%a@l6faT5Z8vv>hFON09xn5-mB5v2q?w&V{2sT30N@%&IF>sE_fkECtASCsOVS-{Ddnj$ySezFXY7L(f zGFlXl|C;=o_&Gj1e6MG02_OM1!1u~sO54EMCG@Mhxy}!wtl=-I#xUuajhHiqd=GGS?I+m+x1fCZOb1a%5kz>|Z2VYid>A5bz%EQTAid!Byv`|C z#yX}bv?8v(iLgL!M;GR!|L3gF3C=xCAerWyuyQI|G^ZR=dKkpI&uqOQxHP-OqiOa6 zY{l7l^+E3i!X{vmLjLM@9uR;&YfzK@m`W_*yH4{#QQ6vDCZ$9^yQO8;iU4nz^5^*a z>#HaM=P6ak3_zZ9K{cx!Tfq~tIfnFoN}Q~v8ybknK!>og;@q}^*E?~W3Qt0~T#Gm5 zKkBaYD3CSn+=d?l;eKeU7ZG;T+l-Jjp_Mr8)bxJ#ir`nBeVNT|I%2=I5&S!EvL+^hRU_jV(iVBf}4Xn4vV+(T6aT!>c1>viO@j)9{KEHC?dcx>VvY%YaA zJY4zB5s$)u9T&Dt+cYAdSR@&dezPjodaU>rBZqe1Xb=v&gb<;%hv3HFjoRGJ58MdX zthfaQY09J49530O11Fgs#ok!3?N3|+nR<+n{JvH=6rkPvlYTXLhqiOn^>EdSWkm?x zNnd!DFUi_Eiw4}`^!OtoYTk5pzr*}?#nBO>cS=2$X2zFcMqLC^mTuYahWQszGPhA( z6XJl@-=Bdu25#2fp;&l;fw!bDVxo15NW!_>h_xtsA>>)>c0?qNoFvJoZ_pk*Km?40 zSqBqzBok`NWHu5W`5wN*KShnzh=lv4OFDr~QCSpAwMu~SUtQlUOFURH0RT)c;_q0< z*(CF&I&sEYu|0L~l(PPrx0NM#yG5qaR$m}_iSfGgy2hV8gra$P(=z*5@^6FygxU@i z&=NapC{zU1kTzvinqqEh-OY)is|AKZD3ORCCAxLbJOokQmnWwIf|qfC^*0LWkj?;K zhV$qd8}cY*Q0$eB{0mRlDGLY!EXhGJ&YL^H78qDKdoMLhE%RbX1Ecdn^ugU;qWeM; zlqUOp#>Vc+(S^=HZ$=(;)9Kakx!62&|6c$!#ib}A%Ef%bp+yRERK1l{sLao4b>c>{2q zYe+=lv<_If*p}v@;vnuJNq4-*W9DI|FJR;@LJ?~Tv`&9#Uyp9;NLKLJ2{&MwGEvsj z2DbSX&#awqyNF0n6ZfWCZu`{sb>v%DE@WybwsKJ9@73<&w3N=Kfl#nIbD}qIm<>w3iI-Az1Xkj20TeUodf5qBCtramB?rG=jj+E8$o`` zTkF$QEbe;tnJD<8DSpc4rs(X$`Ig#H8Ym&QnVo51biW^)b<^gouze#pQWoNbQaQno z>EeQrke+zHQk8wcNf^qxSvEA}ZKJ=Wis(0kW>dw5NqGP-xs%$-=vp{Ci+Z$5MiAOT zPSLVq%V2JChZ6!c0onu(rR2dhMzc8HR5*nmSPpRKC!CGAGZ2jR!1H%a9QRnj znSU)fkdAFNNkvw?Tq&FG$iM)`aG1{Gq_6=lkEr};8Bc>NPI~efkectHHGL0_zqgj`*?;FPX4>>~eI#K~g2)ZzSV$xsIYujPGGjLk| z(gdhs>2oL+{s?jPb)OWqIOkG7jW3V_XHFd7W<~|#iY>GK`l5GR2-wF_Dia53wmz+DLj(RjT=@ zoiH&S*QtGUh))yd4B%zyZQ?*1eK2tUtY^-*4gdL|(~t7P`zFFQwesVLiBLSGxGf6u zW$+*($SA!twig}-pBZ%pPdQNRlFC_B^&sTpLbWgHSc6E&qMC^YG_^O$@KZ9~kN=aO zKIwrEcKCa^TQ+V>CN@Ch#Y}tdX2v3ddLdX0N~;|RE*n~b)|yj%%ETm3KvylIYzktR zedk#BJUVBn&jg%=J##j3`)8_~tqnD@S>fu%|N53+geKmsWPa>A9nR^JGB((86TBZh zmdVV5uSn+xj9WiXzQ*$mPC4)H_JnVP>Asy{F(eVtbtcAS|F!{GPT@m}$7sNDM9yRR zV>zw2iQ32K6kpTN#B{%;X7D~^6Z@=jAP<+v-AtI{p= zb2I$ftMZFiwx$}rVJyjayY#4tW9AWR!EHf^wT5S`P+GxM>qRkuay-^)q1;!fCr1`I z${Aq5H>(z<#$@ZmtY$k;Z+zQ$^fj+VuctO8o~{^f-APM4obOz6oy_r@o1D9?L)K4S zvw-n;nAm^M%q^9#z@5%2R$^vht%qzqr>DR@9H+QPNi$ZKBvstW9QR}%w}~Buf#7%B zA=!A5{AX9*Z?5s1r zws*A~%PpLZ5)QDau(OD)oEH{#FMfD=K|ww)Tftt>n6%arI~%ivSeAkO{j2`DZiSoW`b1&l~>TQ8X#lEwUuL>T4eVL>bjB9EYO zjp3yMv1?i0qCZc?CG4rJ)5m%R7EdvdD@sg^jhTf65VRF?FJ*x*MPCP7`{5<0wO~ao zph|gFsEPx7!%9a91-+#L3+KaYU5NEewVCzOD&Fq$#kF`vKctF*UE<|26;MO+9z1y}k7>FWKV;gpZeTmwc1MI(RP=ThiVoOv-+l+Ou zN_U6DFeptr9>ykfH!c4%Vc^9Ux|d>i^cpEh-DzP$gJecm-KlM+T3MLoj0sC8cX!=x z&7^em8(Ef)-95^LLpp1U5H=j0WykL$e4*^@@dICj4AW-(66g^rkl^=8oZM=q>!mrR z?S+b7$Vz{K5}_x@l=X@5Jc6m=Ieo7!OkGlhk6rMu+h0-~pJswJFD-Tr@LlsKk(9&m z+zQNry-th3Q!&)$ya<36@PcuvtbWQ8?OQ)m3omRx;^E7KQ6Q(AOsWO)B7TOg3k<2l z%^?ulQO?x6k_#~EE0}QaB*)olg>^j)-Uj#^J}rA0*zcRR`=ORx+B753LOpL5PmdDR z0}ey-Wg;IiPw@&K4a8~@3X2V_lrQE`EwJCdy%k6YqnQ0VQ7~QT+st3o(C!=4zcD{X zM|Xn0SR1;V4F&WGUk;FCaWy9%!>?j5&x^MFJ7bTrSIh$WPu|BhW=;}Huy*g~jX)|_ z2mXk%8G&}L(ZW4&9wA}a(i#;r4osadtP!D-Xh~*`6oDgV%|+hQRZO=3O(+o_ua33) zMT>1IUw5A;ZnP5wa#DZh%o>t1!vYG24n^@kJdQ`dkOhDC?YBBi6)Fg@x#mykG9&*_ z^4?fzY#aG1S7RTjI^|@(j+|*A5%H7-m#8B)?|EFo{!3 z>T-=^H`guAURRuPthNbp$(xvPar4c?Cx;>2A^E*GlVGiS603LRxMJ)qvP#s`+V9X#iO&TpcsT>ts7C#PB?F!$!ZXg}`<7EEfh%uR4rWx_C! zFD^(ZQ@By86}V^e$#E=}BSzh)8-|1TcU7RODkm(hZ~5>_!^3WTHHYg@pj$x3$qpwq zP;qcWlyzo1q{!!kEzmr1)x@HQH?4#^o-cd;PaWIGORF z6W$}wRJA3OJjNjxjHy>Bh;#Q-7M=d$j*kH)_;20wWg;R{eqC2Sf+C=m3XukTFA!u8 zS;w7MP0L@o)KajAi@=QXmvgLq@g=B@i#|PR2!gSoVeh4E7DdcH>x3i1lG6LFr6qG) zCn+x5uHceUZAVG1{@*l!^z^aKkOhwh!Z$Ei*Ls1>e}U}e1__1uqavUq=AV0~1-~fz zS4E&O35Q&(a;qBC`S-wax01Opv=#9?Rqo_vVL1oo^GI`3PnV3JuL@Pf%dN41Txc}Vbeb(XEJ+mJR^VV$Q{(BwIDUi{t(2oB zy5qy}V*-Y1PBLe(AYTi_z~FL)aVz$Xgptilt$VGmx;{EmB$sqgsLsn zluswtD6JyL$D4zqE1%dHF2+j$Qf$v3wpN+uHV=rJS~fc$w0J{w%A2OHAkJjydushO z9k)Q5s_*!l7`!9Vc(Yu7Hi zQ}XwLAj3nV{l?!s1k?0O6m|0kp`(akxed<4sv$4J0KCiUNCdzxwo?`u%xxw$aQqw7 z=6vru3FzeVaPAlN%Rw>+2bjl7r}jH?QsprW9wTCK0&V~w&vmTMGJ_rQ&tk~R>1Yt) zj_SwN)F&Es&EHUcGxrWOjy1aNP9mke7H@4nsTao&ENi>Hxb{fbUnexKhnAltQ)x>)QHtcg|XOP(w$r6OT^0yG}50#%1h*HAXOvk zSZrE54>(S^v${mDOX)Rl@s3JlF!7FoC_Th~8yYDH_#~(-F*tcw1bkYmACmN9gs#A6 zrYf$H-5r9FvW;mziOCQl4C-A}Cqz7>AJIY4JN4WrkbIO+A+@r8T4;a_TSLy+)v#{# z6GJ){9`9iiF_!)rzK0uPFJgSlNFo_8p?348N!usG+VT%%ka$eEv$oj0i1^)H&&84G ze8sWvkd}2>*@ek8fJA3$7=QK)HE57Xc1A~zXKILiqs!RTrYO!XT5==RRpn~M*{qQ? zc4kq@h%XhW!2rc~$EGhDrW(uOhQkWX0u*-_I{tx`!9rcwQX>Ybs zs6}d-PVY+Jnu>9RO0=dW;|BCXfL3fub=1D^!0mfm8IlRE&5vzExVe5BophwZk3G>L znl0F{`JCmCY5;=K@I7jlkF$IX-R(Tw{8R}O@~czpozA3twF=ObJ!{r-;4in)&fN=R zKde;-yJ~(0FvjAE;KJDa;sUSxd-m7xB3+RZ1KU6167junQs@v-cB{hj$*}i*K(o)~(+^!Dh(1O}jF%Orp z{0utD(@YYx&69$d&&(mlCTi7oC(p8NrKUd?>wjS+N4R>+)8G&GP?Qj+Cy^P&ad93M zn~n?h%n!?)ZGu!Kc0gsU8sZ6C9)OGE;+1BGq-Hl2PU(bLQ`4HYFTQE~<;P28Kh3~x zWB(sp*@D3=msk8MQWeiCXam*m=c}w!Z|5C(H`eM7r(C`91#>5F`YKJeX`DRLa1mvX z5j(J9^JMN{!@ShyysKKBt#5J^iCzcDgiT{3Ob?VFFz2ZJ^memCkEq57aEZ*x8Q{fg zHV%?iTHq2eWkgN<_wkE4qwH*N^I-7wXhFrmMHaRUKyr7;yr;>Pj#nSLfa5!5FAqaB zgOviJ%0xQ%UHwcnEiu_-(B26%k-Xmk^r10gDlhH=ZYNtW1_axKRAXQ&v>Yn~MvMpT z-~^ohExVjPR3;yH*kW*Jw*#-q_CtQQF<%YL9OAsX1o6iqt@Wp3CXt_XvT{mqjy7Lb-@ao}a8NXQ8glL-8`Ltb+4*kNeu_ zx|TZ~L-d`EEx5F|h#Am0vIGtriGI%H8H9sCW_$J)HOEz#Ou99Vha5g@J@R0K@|9mN z1qrDENg6$YRu8q?{nNWoi^{3B^JcBi&zi#cDj=RqtZ2pOjf(qIu_v3B?*PUNrwy*# zRv{G2@;iD*lYE#sMzKCT@uISPmiT0}r;&+2zAh1l8K1ATSMi#5<&gXK_(35!YGbM} zF+BeU+9^gj9p|uQaXdG~>`-&q;I-~;1KAHT6Jdk&P92mZ${i@fa1FVqM17;5S4w|e z7;*LkyD%v0pa09{n?mm;7grxw5n5ltz}t+UkQf-zX1MX<D*&IA!5;JBdwXfP)cosKJQli zCr3(}b~GSSo8F7<(N9xMIe__}TnDCURK-P}EmC6YI0tJ&23rLj7UB+@_SW3KK0f+b zoslUyS{r=UBIVpf28dUlo*guojM**cMOVTp`$Tx2RBYFF47Ua%p8a`Ma5|0?(K+ZoIOV%t5D{e+ktI#Ps3hS+%tYgbK&s?I(PfHd)f*hGb$0D+y?gy7)UM5p80|F(Ug;F2zr)Q-|Wc1ZI2$_C1-(?JE+l5%@Q(~z^yx7W4umh&Xg2E>gPxm_doK{aNz2KQx@*yl0j zMaL@gf*D;jKfxdg@pQT}rgucU)C(H2KAKHRz16& z3&44C)-PBBOcu(JNPzk`<0wQMK7o2dgzAuj z1Lu3sHK^$JJ!UI?6Cy=*1}+2h5Sb;k68^s*vWzuQSCy5h%E;41_kkWF%b0Loykf+d zeb}h_UctoHK6xTiQ(^G$i3#X>5L=}usl}d{mIhi=iUkNhZFMBFsddJUBTH$;Z~rQg zX5!0=VuCIcM@V2nYh*Ix1u1}xdG2OTy1HRaJ;K^t=lk!-Jj-_HAJh`a39i(oPeZxa zzAY~M#ZLHe6OBgiJaD%q+ZF%PtEVrh{nPjVTHIS2vFi$?8*DIppM!i85qKyn0+tFV z@@q854DnAnrbklMPj;kiL$b)Xts~BRKtOV+ClL6r2l(Tci6s9ZdPeZsy|FbZ2X{ym zu6wGaIrFi6(-WB+Hq_x>whM@3p=b+D>)K$^lz94bR0$Z+(kLh@6Z^(ojC48l8DC_J zf{+trFp2lreRTatr_Rv`jEp-XHBm&v(#A2=%Ei98_;r`V_oj z$__P?<@`0X;JVv{nZfrGaO zM?A`@!UnUF$vQ{UK#`#B^jr7gZS~8~i704YrNJZE8y0@7lJEck001(}et&`Glth9` zZP2FUH~;_{P_K=^01Wrok|*u&F|U&u_U5^PRt*j-97;)EeEX##(q-$I{DPV#59b8j zX!=szvPG8fRK6uvfn|vt`g)SH;(T*>G0>RbT%eZ5c4m6uvj9Ac_aNfdv;`8P$vVLaTK1h`@x~4rn zS#%@OGl@XkjI8k^x5@8 zOysBjSHk6<7)Jeb^w4nC6%1S-lFN)}kR7N}F&R2_m;^5|Z1`?Ch_!>6ENIoEeua#l zIxD`VWc>M%x7J*+Qth~vc`f2kl!UogZcM6}7liZUQ6Myb*m;r(8PEpo=0ZujIO75M zvQgqv>mk$Pe{vj1*bP@h+ig0`Pu<@wrSXC)WT1J|aSTKkSe^mC6ef~BYXXLHuk2Y~ zro{V~R1Uo?!^LbXYJ-t6c<@5z^C}*9*gGlAa?(25x@iLsLEYma;7(hFb*`v9ot07D zz&Pzd5(yboCJ^4GHrhx7W8QB}kk4L>2;c=tg$Sm2i2KuJn+d}iC5^dr8_n*c8K;qGfpYlR&;apxrbEzjc-VDWq=G%Jyp1B?SWY3L{AzO0~6c5q0wy8@n1V{}_ zy{$O#hg41UgDt|`_P%~~cfX(2qg_kt4ou&Va>IA)qIyp)try!apx8pLqTBKKyLGSg zw`PVPKto3cD}DqX{fdET%>r+XvRTq+-LGctwe20@O z;HbpSefb5~_2l^I-Hj|nOW64u#Fk~X%>z25Kzu)t4qwI)r6d=c_bXn^iO`<__DI>w z11s66PTv|KacX|WAPK)f_DBqYk1v+7g>Z6CZ$h+K$0X4Z3I#v0!NGL1L2Y`a@=uyG zXBpY&F9D0yp89daR#N#LR{u9jis#EK`K=)BcZWloCU|aGqy&g~1vY4JRw8@;!2Hvz zbEBAHqv4y2p$+ll)Hpy!>wa{jD?K#5l$KIVQm3lIUar?SgLi=~`A@N?f}QP$&}5a$ zfu2UgALZ5b&uD-P26!U;6-J(RQk!V`Qe}5o4?cWZXEueV9hFLU-h!-yZ}~a!E8i_Z zICP7X$zlM6Tz7ZkC8mH(e|tRre$yU7&Em6KmO>E@|BKu;GgVp8tyE| zxQ-9F@HMk~cW+(ll;me|ogZr&r%KaH^e8qqLNLFXJzW&wyc7>BRmbif<@&0Z@pB6l z1P?`NEpX|6I-ozt`!3bt2bY?27k0#|JR==N*vyKpkXIO`F7YOxyUNuL2vKF(->8PG zcL=~bhJV#jx3%~|KdU`7lQ$C@Xvh)O#itTBkcXihE;ci+?7Yd^rt!+~qs+vnW;$0@ z($4N>x8--`5sG^1Z%1_$5+G+ohzN5C4P5??_1V!iIxlUgfzL=y!lHA}312nMMv&L{fx)lx3vF9#z{xt#_*m;9}ZljYJl!E;$V`P++1PmU{g)buZmE&^rLshH3;Hs^Mh5Un^zBOWd^=A zKnh4%vd!z9ZZ9EMxzIe;{VO&v%*}2pHvGcFL`wE5S*CAKpvrjNN~# zEmiW}72Wg7${*1JIkR)<@<#LCg}Vi_xiNaV0?#1Ahd>L9P8``~Eo%Q6L16c|uO_`6 zy_h?FPao8@57*XN?H-iF`aGT21D@LKr7tspFLwx|j2EeP>lKZ0-2Rk=5E~~DYwUOj zNh!CaAh!l+r=xN5<7q6c;P{=K^0@2no1!0ZnxRcv>EZ`H#Iho^O{<+cX&uone75nq zvFUMLDm+Joq>!~hZvJ>EA>Oap!lnt*2xC|4P_Z`*{iAkjLuux;%JxkUukplOd5GWW+9lD|wRajE-xBl?F#$2Ro+!f0=O z!CvkYAdtLm{bJ*B!kyM*JZJs!aM~4ra2O4V=!M^XCf(OVdkzF`Ql6aeh>p1CQQ55Q z6IAboK?+vns|u)3zR}W5@y*c+Ip}OL1AwB*Ynic}9TbUY0U$bCHSw{CTqQp~9`(DT zSS*)X?X60Hji?;gSCmd|&B+~sEQD9QL*h&ff`VMFV_K&#yDR09w#uCBm&;Awk2g-q zyrIiWJ_}Xl*!7lW=2{j?DkqPdaQ;o-t%jn~_eH7y$ai#*dh~Z; zhIt{z?f_-*-iTQ$jnYCBUB6FdYbYzlQ!$Vv|8L~Z~Fdrft1%m8?L_GZ(hxb+( zlY9~CYu56A)Tg0x*bX4`{HaU4fhO^eR`{c6hW(J=m;Pxr>!c{JNBPN#fxCA6k3X`> zk=2CqDk2i!$1r90;n|1V9e=5XPOl<-igyM-z2&~kzyLx(y}yLiqR0rv+-2G}?%Fj@ z>EbozHdn0sfFTz^-4qMekdq+9pk-I6@B!;PdL_L5x5}fPylv2cblrRX#Y!N!S;APV z!pBMq@+luz$at-fdhoC#CQ}!~XWXxKh+XeZd`1Q%3<+xxOz5e_F*kao0l1X-i4L+Lj{riO zVp*Dt2F>>=B-axnF8Trj3?G{hf<@2Mg+V_KjWxxy2uAhk?x72T6RJH$gE-cfZ9swM zH{S;zj9c}d$Iy~h2C`d5OTiao(dAut-c8*O^qewpn75ac7Ah=^!KwbMKYReVaN0#| zhlt!MWP5i{_GGeA6--k2m{8m00^oG130Nok84}4BIs}pDsWkUS%GdoX{0?@s4%QYizgRMR=Y;|( zj;3X1qNp_0LhU?~!XWXvj8EKP;U`bdxSXp2>I{GE*78Gw37LTE@_v-O6&<95eXjKg zewBg`8)#pRu7PU)l0-=#`p2?YBQ0sZd&xE7&o}2N$who6V3xL32qF&l0#c&14-Kh! z^mwbZ@>h9lviLj9ZLtq=V-aTbVmfXZ{~ji+?XBhM(X_T^)mg^P&MRZ$uGjjoO!%1F zDsg=j=TzIj9eC#Jo2l*cr2Xxq8+|6ck?p)Dl+uxFm6vjJCE04;P8bqrpi%tY2IXe0MAgsD7JI*K+JG15X$PysvEQ+{O%kqNIr2#P)-Y zYzk#{4>MRsNZwce)ztUmxzyP^j>Y>draxR(zS15FpAORe(gM=GZN>PxIz-eMvwqGDr>F&D$Eq4oI1PJJ=?622ZSwF5?uyL#XORkG_k%lAFFkwWJ+ijlKbl++0ogJUCt6#7sKlN|8^mB&v2qfdDw13JO_ixYw48~Y9BG@m2L+&*g2peD+% z{nh7FygF_WsQ?HB#tn!7%f;hKII0z)Qx)0535yjMdp$TXIyW!`3Je8{J>oL>yO+Zl zGerHkp5y1|M`9=e7Z${5-wjkA$e>N6vG_bk96fI~tkmqa0Hd-BiwRKshp9%=e4+m-I>@xs4{AFP&;&*L;GX#JJsR9INCQV>~$%Qeh= zPq+Z`yO3u9wqi^D*AvUqjQ32SFE-rRoXT>`C^{`&ZZ`F>_UdQb8Zn|amFtj)h}?O_ z|7e;-++T{}etw>2E|hhyVijcUbmg^yzXwiN#?{MhM5;9qG=M4P$SeoITX{J?T>NM^ zTz-9@O^i%#P*84137!5sWw-mO*pl^`aqICbUuvHWq@I_gZDIbE-*VvLr|n=u7vFIv zMRsf72e~#n8h&bjQIo#oDi_`sh+#aBhSdeQfn+aY9xbDD|M`j}lDVg`%A%BW$G4zJ z3UDYuRUo-ZEdx`;{j7=*l~@mRaUV!0V$u^aT^f5grDtd-L2E(iL`QmKzrNcmz*ge9aTWcaS_Qr=wkkOk4`t!_TwD*hrv3?kk?rOUtJb8n>l+MhW|V2Z z3QmIt?JO9n5|D<@9O3Tn42}R)t#-YuLeM|Q=#Xv5SWs$0MhS1Bp#O~c`e@q9X6yxr z{mN_#U>u+iU7po?oX-Xn#JV!NBMZ&}<6w`X;)VjTCsy^ToK%y+bQ z8ZT>EEi*Ij>cUFac?6gdhYw@(_j3hGzezM2Xg*=;iMo&LJXT1L;3KSd?8Axu^!?SNdDPA39dHR8k!D8DzvT_phe! zGq*(K?z`0`IlAdBk#2Ku-0p>$ilQQ9a362W$?_g=ELOs9B0GK%sp=MEE)XX8st!z> zH#KE%+EHW}Qp63>MR=0u9`!cv$E2p0(H+~={(nyg+UWxU#zId$mKKYs1V1$c%79e1 z4~M|tRbEPaa@Z$TSflhp5aV`^`9hVv9@T=>e_j^Pg1ZTPUp=3?jW4E2c&2!6ecNwR z#aMc(-mDJ??jSK_tJnlekiWCvISU2UFs-==g@{c5*=Qm|kMp@00e!*lul9 z%0wvzyjrVr74?gJLO_eNGZlnzk|V-p0=;XR|~ zx&vTRZoz_tVB|IbX-lO9h*QF!Td#uH#+ei_v(=(Eh|* zj%VDTxSHz?$#A(mc9arl#T;0>f4^3n5hYoP`Z}0yL34c>y=M`g{DTRP&9LolZ6|)V zZuZ2SX*sCQY-)PQN_e1?Y&LC$V`;Hid#PR*vJ47T8JnqdTt0%)wy+F88|-uk(aeap zGMl$;uUF|O%qt>tLgo(G^XdI7IsK!XPB!eyLmM6BQ}+mw^mKWA@<&Ad*4wZ>ij0Q4 zOya5)Auk3mf(2RVo&`1iCQr6g{xM&ILsxE*h!_#bem6q^{$sP|JRou$OTqaKD@_ai zC6?cFny^f&38PY%EpB8g!;M*WQ2 zEahJbB{G^t`MMH5NB^GjRmX6``AEaQ^y59?NSmFt%x_6}J~ zek^{BlVNd+_8Y2lg0$K8&+pl$*}D?Yir*QH35Ej|X;=^%WNk`Wv4<4N5qoH&LOnvXO{UiTnP}Fn^Cgmd^dwlWFpqd! zcyV~Qcu3WNnS(gsA(}39XOh1mAO^j(4qo`YK-{Vs-a@7{k&B!Xy%sz&6&;g>ZFtw9 z;JZ;bivskzDE|DNEq|-P(#f(pSL7R0HDO4qjQ)^eN|ryXZq;UW_LA>NvafHRmb`G} zW`SSp-zo~mE&hLGaChqal}+rI+TNjb;2u({OGjdY%2fvmmNh6SYRxa=DO7wS#B&>3 z9vR8)H@?{=fV#u@Nuv}f4T~9^{X1981n)!5?{#je8JPJbPd4@|-KSeYyR0bgy!Fvg zZ<;pvfBy**L=gEl`Eml0IDqu@+t65PZpJs!easahAE zAwPnx$7!9gCZxOMDLvglHy3ZwurE1y zKf>(xj> z8(7mbY-Hiuf$HUrpC+uvj!NVh$k~RzGIW`kF?fkOTTl^{6wRgkl-~#g1^}S-4@bX6 zN``*1h#e8i_}y&iLs}$ukG1PnBGwNnGy4|#JK0BG9-tgk|6UnL)lT3iSMN`ly|#VMzlOD=bJpLq5?tvsX!dAoLKeO zb>-hnxM)jLms`4zInO-K#APE8wVd5oFvykC`N`K_gTLo$eOuNrL~^U=KHrQUKs=yRgU?s_M{JS_PM9Ih1kYR0;`^vvf%d0^JQ z9ehDz;Oh1m6yA$)(>;sLQ;|z@fzS65Sxaxh+gK!dN8uCB-&t#W9AL zZHBVIpmtQYoAWRQF!I;3g48s;31b0yV8wWcL58~2Tv1LghSC9cJ8K@-lS?1Pz?3C? zFrZAb1Rz<{^85(D_Ih?|x!27JE=bZ!AI|E~CF`}A)awT5H5OG^;>Q-> zwp0T14dlHKlP0qt3b645D@WA-+29Rm_jOOzJ-IiHSM4JAD?169_B6vQf+dAj6MQ-w zI-JT0)AzHxO8`L&+vAY>o)EK8<~`6~*0g)oOS1D2eWX1(W6cC_o6emOkR}5!-x@4u!n|Z;}Fp1 zwU5Ef)uG~%J4m~axkd>m1@zr53sQ)9yzeR6YRMAZ3Mdfd+PHOeX_F;B^MMxbw}d*P zWC16Rmsi2Dr1*L)oZ%EM=@E(tMIBZ-=Gf4T%YsNn2=l=Ffz#ki#`h&6yh3z43j{9C zpQWy^w*GYK0CbIttrN?H)L|oLGl_+P9EGE5zd6iSB||yYt#}}@+7<- zE2ay}wZ#oD5i-dtk3?B3i6t5mmdW<)6zA#qC&u?4h;x=)3a%3(w&M@4NVwgt)4rvy}%28fLIek5CN(uEZ+_<_v z<#!vTWfIkrD}Ik6=P`Akq7fagaPnDWZ3UUQ~MWR5)sCYQ2P8^C=o_I$7;%14p$+ zv2pe8`99TdGd*Hhytk8$dbl(#sQsZpS9xV$zLN#Cs>{rklExqaF-p=aT#HNIs1;D6 zXv-{Wz1^NYMiT=UX9#8nxrYkNIpGD}P+%KtBNbcgSc#4qu8x;vt)J42Y%BhqrFXEh zh@#)|QonlRGe$5*$A19(;41^n)cpToO72$bUX-_4XetP`12CFtQ^eAcj!M4blWSWt zRA+4Gg&139;C&8b>4pT*IvGk`I~w{@)GMcY5|smzfm~*>I(UGEfyxCSJ(wa_2+V7y zA8k>II{s(`2kwlS_KbPrL$MAa^!-8`82EwT%gMpuptS9+RX&TT2t@yIStNP{3t}%7 zhL!o5x|SI{eRoN3D1NZ;{0|gqn0TAI*KmY&$ zU?sg+;24unmd4^TaPZJ|Bp`d_yR#Ia-5&G$ZcYmI=ai0B^ondIdM@}n2)6+Y4sIyv z8I5&W3mg_f3;}sYdR>2J)gCI^zLdEp#fw}@R@~&QnIFS(FVbmy)fPpCk_2}gX$@Jy zd4Sch1RSX4m`QZ}kz@zvDf$j_uN+yzuozjLE~i4fSOqn0qwYD3SPaVPSQa9Q;z9_; z(V@@V13S?iGJ9}YiCwy0$-=c1rL3f7Y9vp!MV?F)y((^@?>2y!Sn%@po+iD!Oumr(Y<@44`m9-RsCf-G_;3T_aw`LGi#%J(FPnj zJ=t52?eOia?z^;aWSYUoisZlUOOL1V<%7CHAviJ zXl4+xV@4d_KL4Y3Ndv#Fe9f6}ugTFz)kWzStKL0^^+LVB#k;3)@kF;T&;|F`h&F`l zlG^4V<#UAo>;M<>7{(Z?7#5WJ8}?GVzc$h^K1i>nc;`;)a{eydB80vim{^%HD4Lup z72?-{)ojab>`HK{AZdAr1}Gn|dS9)ik@nC{w*7}} z2i3qa&N!h=f0~7D6U$q7H(r`%`I>FbrtaIYi!GO(qBu{woxPyMCeN9|`9Q0NmhN)b zk;XOr{Tfb0OEUXS8joxY{6#-I+}6QxwqA~kL3WuSWwtTIar)`C9yM?K|e#Pk36WAmZJaQ;q||5#L4gXWlo7X z&VtYn&fEV-TxY%ZRZI_T-(f{$(X=G?r#&V2=UX%;NBiBOCZ!FoxJ4~(tXFU0=S)vc zKm2`8P!QtI)0{H9d6QQ_EyXdGga9g}7bp6MoM9);gLP5txVf>ya+{lGHTnyAa#$nr zht}wo07AmulVn$42L-LZTtRD@&J++?wyv>$EN`{M*eiqqt=ebr2n!qvhb77o?8d`4 zGN;J6!;}bC8gr7AIQb?%i}d3q(-UXWrYB7lQ4{ynB5e%8aDdS6xOZ`^F2|(@QtzVs z6uNETDffYCFLUVf^FLkfn_5f-X`3Vxcx_Ha2`6w4WMqX*scnNx!3Bp-ynLX& z4oc3QkphuQD8r?i-+5snFP)VB@V1-(W-y`+45+WuKK-97Z=ZHW7R|hiqf>tLhg&T3 z(~3n38P+XOaner@7OyoHg_zJ%0XFTD`iJ11@HFOEu8q!px4A&{7S1juC5X*D~V_|$e2UHY+yzMpPs@-a3dtT zld&KSL#O5XOsb!Z+GJnEe2L3=TY;M1fHhcmfnuov6i8955R;3;*uV#GsW>c-#QbfxK z$p@UlAwt<*PQ7h!UU*>Ns)K^RJ_x$iWfCT}!9lmaRppXNCJe$lU0})K@ zy#GBU`40hl_^X&^{s$KzkSw~y4oA3E+t2cQJ!vQ7iKGlI0Q#TzIA|2-w^y8uS&kjn z8_-3tHZ}CSE}a=t-CM;Ux|H%?d*1z|~eFsgT6F72;rixmw3?rH_Bd~ z`OOn{tTxs*H#vP_=CDQ*PAjS?8nJ9l3^uwyrVreqzaqeK*Zc_aw$QO;>?J2%PMXH7 zCV!nJ>ya~Ji@4~<@M~M1-p=3dLx9XJX1Q>&4u{yyUtT08yAruf;AH)P+@>`e?ax$~ zK{;=g!~V-&q2t5Gn7-I_9)z_tsuoY5vHmNjpRzP-Uj*l25BTzdPWve~W~J|LxThCL z0zfrGs#j?)j{8pV%@WqF0Pxx&3I{cisesA@OU6JHyX`;}{rRg{1U5sfB=dIZboi>f%)*sellH!7E3ct%KHj|(#|W} zghae0$Hy*jBGNvyUB3l*XMk15O|sQz120)DNs-z;ApjWC$${~DqF_y`e%2CNrJIz_ zT?uv-(&+IX?EP*Q=9=!;7?7@*ybvFX}3zP5TIR=I+VqEObb(lz9(+1NW@W z^IT&?-tjy<+}JJps%I_48qdnGBi_eW9bHdAHm-$bEQmi%Z0vh+ZN7KC8js%YS@nrT zsKy)`G>PrfGG5mz#@ccLl{XEzJslMd2MBw&>Od0&}&PVM?VY?}c8Kp$t-{&9~}~`#gyM7_EB5pgaE!Go|DvCxeb{}Spu37E_n=hioXS60Bb))}oE zMBh|&$;%{V_3X!a-p?0Gc{KR{eOzJh+$H_*L_CG9X}_K*}5 zKcn!G2E23MQ5qpeJPaUJ2wvUEbAPAB!MIL#5LhhoeO^#5uqoe0>zvDbO#!u=zJ8J6 z&Ml|YV|WE^Xl+FxG00_9Qcx0{O4|;j!_7-Sz%xSn{`sD<8~fqu0s&IL7!tox;KAfG zH}Z7jOEX-nHg6|KoeGq`omT5kt5#&z-Z|?%ej#7v75#S@bH03rV;$Wk_wHPFGz56P zUuU%@qY3eA@sLn8I@^ zP;O_X6#F0frIG9rdRi4Z%>Vms$Jx7NZ@D8Cdl<-wM%O%#JJ3l*9|o)W!b*9M`sG~^ z@-8mGk?Ff8-tq0DHRsysG;uKJ90m#z6SNXducv>+Pbn0oebh^v+ak2I8Rdjz_L;ep zp&t`lK^XKNKsb`uYahc=T9pl9{ps2R&g6M6T5QGI2YMZnh&AK&LL$fgdxi3d)invZ z&X4zZEcn&vI4Bpm_q2cK{+KL5(=S=qxba@+x~}DCVoS$KZLnS1s*9-{H66_=d-7iw z4uToG2Y9=f8@-S_0f)UQ+G#E7!Z%HQBc9b`1Vy4zj`ylD#2gxcc4G)IdrRfNH_j|m*fZ#U5IIQLAb4a zSYB8`Ts7;W@9k^Bw&V$7Z?n*IfgauFy`2tcwrdv@P16Mbe6?pd+XZSI zVegU6*8@j5Np=bLUu=LcNYnQdh^99XDc|SknDdH~zVH7#5VsD=H18Kg;M@Ru zMaN+wUVN%OJ+wy)S5)o^L$_+lYDXhP_{fi)$Tl2f@r47&8CCsCE~jIlfg)kaRQn(u z(x7U+3bE(2dMkp2J<=E58m-3)E0B*g69|J)@AJMYe%wK*sh4UtsyuHM?@A9%nbsp&xIc!`6 z&AG}_S}cp@YzwyI8Y?wR%Gea+6v5}~AI%K4RLKz}Gk63>_68dikOdN%z66XLHISmPOe9HT!eW z@Q}gZwU6Ds3QeD&_h*XRg2+LgH0~-+0rO7&>D*E|r%@F`iNU~L=lzN<2e_x}lWkuL z^6Gd3Un+p{Bo6;ns^A#fNm(yW5eCIa*B&yI$=856&1@0eKRnKL#9EX^0F6WINSqMi zhcb3C`P(+tN_o^~qSp014V4JLv*bRM_A?n^rQj52$Q%?rhe6^UYd;5}Kaz_gnzfZ! zd4hThc2ZiQb9fzMfO&CJVzc?$&e}Q`EoJ*;)<%V7f(+$)T2U6P%4?BttVYu$Lc`B| z{qnel-zK|oeNgXR&AZKrIn&m*FH?okC^Z~hot_!7fuLpErh;6V5W;#d=kkuV35KOn>5dHz6O#E<8a7bv7e4hN}Dk1;Z}f^BQ5R-8lac zLTC<8KCF>5J9l`>lOpIAf{N?Mlkja&sBcv-|J$gX=Q{{((1Z~d>fkZ9IYJlAe^iNl#-9tU+mWa->eW?5% zc3ue=C>R!>276=N`vsXs6f^fwpXyFn^=wr{HE?Vi(7 z*FI8VObetUH!70;m4PT}{UFV9qt?$kzBkCJqHM>07-?3??UU8B3pBYGMJb^n^{r{6_GxH!W;qOt~ zi65uI;oth&g2*QuD)*RNLn%!O*47X3v;TMaN2-w^_MdFCBhgNHpKIy&xMOHNQhxqs zgXdK|n1JFH8#V;~)NB)MAF^cm@+V>x)vlHu+zt{agj0Cn_1?ZNIH)27BZ@}0!_vln z=nT11cnh$@IH^Z$NU_qB10B{`4D@acn$Uqj2&=Q!UvA7pIR}x*^+-e*u(luulAnkn zte(0>P^v7eEit>+1(~E=>0UTe`8oedpJ#4qta@aLq_KFxhns_B{JrZ-qI;C##}~xl&cs5>6{p`Qa>C-ZDamMPI_C)%2u98o6(pk1l3+! z9MAlD&8wQk(a|cU1{n9eA?)fX+_;;)9rV6HTkY8a;^@R2O~y98ODY;~R|2Q?4J1!@ z;$7#xi`2<=DYua72=`NG#lNrt28)jYo!bQt2*UlXP`m-~w{t9MpBTF5cM@dhZ$G4h zamMWUQp-f5M16%3Ds7+AvBS_RP?dh<>=X(FUnV8;+*qb<9NeYCE~9%hsj+1o;GbG4 z$KcC@t6DA{r>9J81q{`$+c``ZC@LtCNA=b?W742qf8pHOP*Ttv^)&~?{s_T_W>{=M zgBpS`m>Jp+ou8@n`od{~ltUKwDQ@aN-m;AJ@r<>0S|V_Cvl-kj{^VsxoZ`j^e3h$% zAvY9b)6b^vBZ>tX_RaB9I0R4a-xTVG$<@BP)Y0wR0icp)&prx*P73h z(S1k8;so@n+%Ulhg7B6;K|~80#g)1*(0x6Vu0!;c!S3D z-sfK)g`sdI2$Gf{T2lC7P{TDSO1g_uXVWiH7^CVH_~_1Qr7xVPpZFAPTLclwxzyin zPg9&s+)8qxwN>_oFb>2!>LrvC8hg+CHm=J=C{^L+jPgcZ@u#`$x?Y-8c{yc2DAF<_ zng+Kx*@AOI#M^0ZtLX`+)sMrgmn|;uVz8sZbcf+?0WE9(?$N1-hT94RM_(=#Tz<)u zGY58L0RLYQ-AbIWn?qg0r^wzM_%By(=#R`xH_wX0g&0TdklWNwQG=^n7vn2*>5sq6 zLx3CR$~PM@0(uu$h8j`-2!t-9ET0M;HtKrhJ6M-qw27l7uG zNKuep!sfk%1@xS9+Ro%B3)ypgg3Bo%*nG9sci4;wL3{*EHSE-n9h%D5?ujf%f00SF zX$$N0tYLZeOHnr&`Sx7r8J8<&=a^2-3n5W0=5u#``~?rqj8uUQ zHTnHzb~7Fo=Y)KJ=N>}V33RXTJJCml91)aO9ZNOT1mhdWI-plqAr4BLx8NHbzHrIYAu#W}G8Yq#0pzR{? zj0KLPmvxifujhF_5CH5M3y&zViZ_Q&#B!4=c<$xtTUtQnPd!sE3X&CF)?YboVNIs# zM3+fFMW{gJOFT5Afg43aaTOKYP$awiXno$<Y1@Gz%b3r}_@;xMCJq z9(S~9*2 z&7$@jbvLr1Qmv?vW*_!6}iZc%a-~F(`P`M#=5HHmx>>seC+w-WTyuC2Q74S4hEvBpi9ccuGe|+wXXS#9y=h1JMQEme~>Oyj<=ZU_a%%s*M_pb>h4GHy&my- zLbPkRPSn*$?cW=60ws_ff`)sEkf?G3;6IRRD4UJi037 zE3Jp&HiX|7g%-;Cq#83ML-g`*Goq>N-Ku`vqP2qM*#iHm0LwGvd?1>fot^NIFOa$m zKzw8rS1f;mivyW&A6L~ZYS;OH#d_v13;CNr>@8JTg`MmG)87T;Hne_HK%y}qGX-xnI=;*>J9;hyxEd-gBFnqBVr|1UOPV18 zP1KF5+$5dLIN~xSJpc0>Dd)>v@~sA~j^vCX_Kg;rfqBT{JBDRRf|SyYy&MCR9aa4? zUAM^_(VfpNqGageb&sW-iPim|lC|H%)h#>2!CnTxy|md)R||UhB$+lp4veuX_w=#L zxEhf$&RCq(-EH61m4QF4cwcyqLt=2sN5R-`HC#r8clBGrYVmOselg4@%U{|L=t}~; zU>06dbmKcUvm|QZzdBS|g6Ta<*ATatyEy~Q>WXwY&>$nqidYe8z<(fgTi&q>7pDNw zLbaXBJ1Og6-t1GW(dvc9YSQEKNct^w4&+(w=?iYjDzW=Vn2++@_3Q4B9=u~+RKUE6$cDM_n$FnI3w zP9LA;hs!Zh*K-5Kz<^0egLg$G;~px)(A(aMK}-oMJ^t9xLm|{0 zW~5%-y^NXqnmwi84}^>$Ix~l;gNv}GHdtDbTOdKteER~rq$LTT>IGcpUNqFbVh>q)mD zb=qHcjEQ(T6WFW__*9L*a0G9Gq#J8ex_q%jB7vEUJNr}v&Na41-caBeizmC8>i?6E z%&s^fWW1&LFv-2v4<;$TPrfygf2lx7@aZJ*=$m~g11ahjLQ&k9hPExGpyf3P)j=eG zy=>kfL?MMA;o)R2b^KVDCG3?$LhH6-yIZL&WsOMwYfeQBMWstKtAM}dV)~Y~P8qZn z1Z(m4ZLhzr$9|2z+HFd1ih(d-pbqRy{jW146<8D075YKNKN{iPXSeefGxfRycU2_v z4)}S+=6#dNuJo=Xd)GbZB(SaSGbNrT!tHqXN6F2Bn%3@mS< z-J+cD?7>i3EXP0Ds{by^$MK{D{kzvamEd;aV$lhP^wfMgxi+4>GR=pRG&CEP@PLXS zX&liXRdOxvL_MLRe}jFFhAjwoA{wzrkiL}A!%ET&)2rnh!A4&$c7Y3{U@|HE%5m>? zwGyk;rG2yXj@G)`k)Xge0so%X9I?I^M<3fcOuV2e6z@6P-}VNxerpLUa5>}zr$$CA zcdH0a2YLPUGmOsrasEGIjCI=SMaenyyqDrk!mPr82~hyEnQINUo0$b6pV}phyu*mK zVErJB{%#j*bu+HDj=no4DKW{7FQr^)@qS2IM%q77zO0l2J8A}TPuJ}5y|iO%(uzgv zHT3-_J~Pt=%kFy$`I0x_d3OufGvu)AXrtVIXDuOwLWOl=_C&bhOp|Zc=b$w_M3Yz2 zW^9`_JVoQeD{$_fJeW$5+Ts#V%C&6H8-I&a6PIv22H#5i!{uBPKc-jCc<52?Tc z`R=R^05KO?tongY7@uq`#ctiC>&=a@o!KDXz6rbQ%i?TlP;l9B)^YdSNB zgyt9rgv}2Z-Q{(N?XKeAkN&o9Jn^fTtwSAhzk39Bca^DvaVU zaZI1yIEnTKu5%7N12j5aopcT{CnLBByAlPtXfI)Kb+tYW!ersHOHTkGDe_(^Bo*y5 z=Yt*sb0am#YQS*_a*Q&h=6v4V`B8N@RuS7i3I>Ux8XXg z;vd`?@T&Ar5FLiri}VzdPUM@-&?&TqS-v**^l`a*|8M)UfVw5zD8enkg=5&R7tOWdBJNFFbAO&ggN7 zvUW)iSJRU$&#SM_OV~bP5{n;uUSb z!c*L>#fkh7VDis1r)>sbxGFA1k~?mu`D*8Epn&e~fDEz^{w8fk;0oj2%^3!p9APJd zC$hk~zeWE>&0>~|(B+3CjMI8EDr_>*_pFw)o{eN{q_}SJ$zqd2421QHpEz@wh0yeh zq&~5C zS30j2Jn{{c!`3pi9wSyq)lk7fW_FNS)clEkIN|lM3HUOPr<8Xq6?Z-*uZzr_aWUgL zs<9@wwVb&Ic-Un$9%ltjaa=W`d`u!I{j9;F(!Ne_PWjq2a8KlukV*YWhYH*vrJyn) z5N~h*^QMb6at3=2KRLUmpG_b^na0|1NVOev02#LJ(Cz-bkFl2 zvA8gx689*vm2OBFt)CFoHt*~{Y0v%AdpE%YmY$wI$tTaqH zh^7yzNS-imC@6?|DhAsDBkbaf0Fn_k7i?hpw2{e>#M*JQyc^1tNQBj~$-Piilfi6Z zKiv7NRaWkAiAgPlM}qoiMT1Hq>R6*(X>kB#+NWovs{=*}S_-*H^!r3z6wYDulK-1- z%nNdF?RwwQo<9*vVm2blje>nd)SctF0Aa8 zv^TNG0=*O!7HnYaRk#_F?;eES@JhW>Qwtbcmhc&%1BklEMob}=Opcw#Nfs)L?N}!N zjTNvI>$k9%QeFS~j;5-|$}~D;(qzG)k%RN+H>9jxPthX;AiYC-*W~*9n5B+0$4_MqbjAnx@#vYpV?{k zxpPd?hxY?p0hv7&kzcnmVz5zTl?DCrYUE`OTt141`ga;^I^SCC5RH9)l|4J%FFLYf zW6bTYKFX{E#Vn+*a?jh#wHkS*K=#GAWvF$^X_=7X(#!>Tu~1D`4lrcIIFcHL zUxkRrBGkYl0Qcu!Sc9WU(wZ<5lp1#US7e#I-@d0@yYuNPFs&S^%Lk~Tw^N@u#^Wo*AL>YuWt3L)xgn@i@ zyCGy2t-D=P)&(~mjLN`dIKyuYIRrtpko2OoP`sr>f{@-KSuF1?nG4b&6BW)dhFI}2 zp|wKG%|~bREx>5=j{n`cVmh`?bjrptFt#daF6G@}TbiqBBg+f`0R`gnn=De_j(lDA zF3L-S=@Za5SAnNz=xwP!c*boZeh!I;;F#vWB-2UXNR@p2^eqq}=qh?pL4y@M8L_17lFWws{2e%v zsY_7if>oO$XRE@yMesSaaIY9pAk5+J=FAjY;wwh zlzAX5F`?aGHqtOgCE7uFc~N-!Q49+@DD8&-W`UgzHf=1PllkTg55Wj5_N!A5Kg8RP zs=r-Vl7(lSct7euHEnG>6mLwN-gMX;d`edJSY%+6)$L;lGnU>knQF3fB8hsSn3Bk( z4d5|Dv=jPMzqPuF5+5sd9q7N#UTzPk^Dg?8X*cwpBb#y>}csgC1YYqe74^-Y19KI4ZlG}KjnV9$DnCWw$TY|mtB5=K7%=@d(QC@Rb zUv8IP04qS$zc7i%^|~r8!xP!vb@La5qjQe8r}zh-FKNs@ATx#X%k+zj_xb+u(q7Az zEMMBcs_1@Tq1?hhS6AJoxmqvw<~)L^l~I3c%^1BL_dV$kbkHNG?(!ECiAzI&6Ak znF!w8@M*p>$!eZZ?9E>s9Bu6%ajlHP9 zi<#kc{16Q#_enocMRMq&r>UEQ_bUhXgFbyT45ewHZkh3Mjtx%c%MPAG9{B#>H>AkF zT&QL!#in+j$6MzyB~&?8QdxAf30Usv=wGm*><8N%lSHys4rs);#;MK)(_+&uJ^XOF z9MMBTuk_{Noi-EN$3B2U)xEesi=T`&auuk(jCj{t+9@Z?i)KCzJj_rG$@%`#9gl5Y zrS~U70XY~0=GO`tH<%-#d@XsDnzs4BS$!pXjP1!pNazxEE;dLgU~+skfF15fx(P_x zh_Hk+U8@JKP9p^pojCIa#fAivhytTq}?bkuevePHdK8Jv&v2P^ z|7;k85?Kr;(Wz~)h;9wcm#fvEUjtDY5&dCAy5EUGAo3@F{3(Fz#Gf;W>#G)9;KuEA zH-4QhC*rnJWUctUV&XG1EJ7r98I=xzg6$oaE zKxvIF_m*Sxy5J{BnG~yYA$agiz5GjgltxSP;|ZSB?c7&M51`(IO{W@2%o+w2b4*v3 z-ogd}M@O`~Y0~q4;&2{N?O<+Q5NG}_?B-1{c_o=fZK!s)gyko9u;GJPo#fq^i^!E^ zND;_%YcJ*|e$_KjsF=C7_UGdP%SSKl?}XU^_LZs{cAEMs{t*2Rt;E;34ivhLaK)~A zC9b|yuww4ysK?lY`r7ghf!`r73OG6HgOk*#j3&S>Vn`$g5u-6m?ESgc{P6;<8U737 zgEZwo+d<-`l>2wCbn6Z)Li)e~U(LN-(eX3%m!ePLmpk99X1KAUW&=e}eZ$)-yD@dG z4S9lb0&u9 ziG;B@hawq`NUWw)mW5+UyN6$Crt3n(>`_hSY1(`7Ytz9zP0)moi=FPo$_+0_$6A@wAbD){2`%7-}N(lW{ zGw-d%713dUkx%GsprT|bJI)cVF)2&i1T7QmDn(<8#Eig~lX6zL1#TkjTg-hxS8POj z8Ql(=_yG6o(TbxZZ8hh&z94017$Uy2bvjazi?danD>)9HThM*f8{NS&ab@gn`a@FG z+3hea;Uyh^s6jZW;`#|j>aZ^H zu9$(J&MW%S1s{3tp-iY69*XU+(XT&y;1PJN+PlF8v=WljDTRJe&kfjfTnT&o7surV zQb-f0PnpRPNdXgC5?M&Rne^~(F5Pr7uzcIYqoJpS9WB|-L6Xt;tppZHq=Q#ZlbR@4Gi&fv>d&0e>yfL{Ia0EmaH_3%>;NB%`Ok#d}VH*mGiyM7+93TJno`Q*#U8P9KwnmpR>rm)z?maOPqJhpqT8 za+a4A4|+&FFTG2F>sKK&A`&V4%QokC(QADonKubSnqxDIGQ|;?O(@&7anY?*Xx3bG zWAp7jpb2XYF$9uc#G+7#qZR9>u@FD}Rm&;dO8?@UxmkXKgeF{uYn}5DT)8lWb|#ZW z=L$B1V>hjlM5AOxitw$fBR)??1<0q-^s>$HU08ZFIH1nW4qee78sj6wykn_KU`gC+ zhkl);-Q00wdoh;ume{m~vauh?st*)2ezn{)WrXagah?AkZJ)=%jETb|GuR5Zzju^9?W#huUok++p!fd7`PYMlxz{Kfyg<_Zpj9{%@T2Z^IHN^V zGXM>Wyjd zw^nuvb;x(5YQyPfg1{zOnw>$eYW}pJsY~;dWI@x{t!+zVA48O_WQ8WkW(B?c9%@7( zwuwCTNIjJ%5>2Qt6G z?{I4JP2!ygsf(EE)r?VaBUO3zcbVW85d>4J))qj%XS26(=oER4Z(H+6LK|jQI#O>e zEC!m{9=bwMi*4+Lc$fz=NXQ(^8`{s1X}72%UfY!+3(A=UOLXDGbcr$Gw6CwB7b0FoZsJX?PeYUGFDXO(s4c&jg4cnqGV_qhGF4+m?H4|)%V^o-41uiv4B z`fJaW?Ld*G@VVTS*pskt_(tM^SSI1<*wR+{b=hezA6?4sj4lPqogP0af$V+n;`E@wm~`G%bJV&DN560BO009(4ZANPfqhj z+~m3WI+g8~4HT9>5TaI4ev#^+o8Mb3Bxjt4It^pK=fC^|sQU`S4}*0Yh3x`?As3983!}Inh@|nNF=iCtS_PD{i(C0=U5S?O z5fmKWMU!)XayglsokXgCX)2gSmHW6NE_KR8ZRVk8K7cJXF&cg9r^4KyU}+LZ%*{Jp zOQMWJHmV<>3J7Ie1Tz0L4(`d^AnI|7&Qy2)^ty1uPd(d~n;famOEEBWZ`yLfa zIRgkRI%r1`mrZ}=RZxM{LnvG*fcM}K&U(f`T%8-#hdObvU4(G`UALbwZ!-(R5_anM z_po`y_Wwv5=)w8;l+9y2)u~^B4nSOQpng|dKf*D{r;9QGzfejIDy$NPVC#68ti8!+ zJP(1sVd>nEo2-A-bN@U+?yq-#yU7P+8?Rgnurz9bYEE9jYit;b-n^)D5eGrL#1of7 z(1^X07NkS1Hlo;bdJbtpTzV0Q(5d{`7a`J7gD4f_%c0I1>4Fuj3hc6JStZ2X5JvQS zVWf%;U*r5pr9G-IwEq=1{(ZJ(OA=O$?IIV&JIWk1ff*g<;FeTbA=FAO^fL6sP@X8I zCU6Hf$8k-F&d6085Nmn0;6*-uEye^W-igWe96xRB>SPN3IT}WNt9J$Sg&6I}0Jkm? zH`3=JY|6f=?Vsu`Z_4JNdk;!Ak-s3pG=1l(K7v~7`3N@N_pIkZB15u`GV90-eA9os zX?sL@j1L5jLo2G@W}G|rq@nX?xsBB4;1fF6RJhQqG(3((**my-fxp`t>#9#Y`qg%) z8SNmT0uRCYN?{e)8ZJ*B--ipXx369G_UcrVcQqCOI%;%XC|kW(+0h@8wiFU~e_s)x z^%DSV)$aGeybX<2!vqpNyu3GfY4Z&(>9^l2x4+7~LreA{K1dT%7|xylI|4B3KrTPW z|IjiKlE;REdYDyg_GasgJS{H+GB4%)kj)JJnwZAzlT4g&GqhMJn>5u?Pf@cb!5{lU z=v3$~t@N_(&Uu7LK#%W4@|)HTpNsPrrZ6%<;1_M)5GN@b=C)|eT4hwaduur_bU*dE zNZNaOWq9Sq!!yWr@JY-Cp+`~IBOsmyK7l4oD(m!g@_W{tA;;+@kf^$K@-_{RrvvQR zb6(jFzN!7j5rTh1ttdH@$iOulp^JHVUhGHQ*#coRpew-thejk{PTAYNc@ZQIKf-56*LlE#y-*_^>@leN-26UR$e3ljHeL_EG_=*;Eks_B(N>j@u?hq zY%^{giFF*UG)F7gNA;t*T-}f+)e(^AGnuz5q^74M3|Fk~oDtZR9j%T&DtwG9VyOZhBmeI<{_* z{u}k&_TFct5&!{+1E32*fB*mvzyQ63cd6<4IPdo`mL=NtkSE2_YdCebOaKtH^vQ>z z=XmTNGXXS(&9~5+R{D*6Xa9)>=7W;ssh?Zixdk&U7Zs!j0Q8`uIVQVv2v5cllkxrS z&*s!?b&JHk2vaNyA3x>~zugI3PprMn;1-2l3D3b*QQ9JV-?CxDq!tECm31{s8583n zDr0$OM}HfN@*RjtqD|f7SE=@b2(h3Szq&rK6H?TpqaNnk0qtnzv;nA`)#ik2Kvf->AHnn z6~uLG)0r_=B^3By)0#K~4NF+=09dpF<4UF8hEdm%Kd1gx>aOUCSX4C^RPmjzB8ZXr z^+V{8R+ge{>FExGZ%*07Zpk(zHAp_itEels{|HzT)VPaSi-oE8UYO*1TbBu&JMA}j zJqiqO{r#Pm%Lon6a&}x=_!uXElFoR!t(&ND?f%E}>U6fE8%(P|={oxu=8vE+%6IW{ zY!%jwR7hR4q6sEWi^bh0o+6--FUu&Gt?P4!ESeZdww{=xhUmYFwF|YGAy9=xND1nG z*(C@2(sk*))~K)|N;z)4pzRaU(`CdBf@LH5Rb)NbjlM!tsVA!b|XuhUVU=tGw1xO#dbCCQ~jSh!4(J-VBs z(?{k}y*7PjntVW9cDRsD$C-V_*UkE0z##ZQX0@}{BcEqC%$g$b+tG&eVx{KZMLW5j zAZn0sl8J;!%`Sd98-psZc$cN)bC4Ewc>0vV1Ay+|KFB>4xm}S4$Pj`GM`A9pX`@Xy zfA8x+53SFT;!9hED;qW2+OJLNt}m`6dt)r5l~BN~7S{xOca7dwD%|?3P5}Wu0R7Ve z@OL2h1g-&cZrskAJ1gM+|45#GE;^IzeIWC}sKVGM>EP-p*OvO1{5A8jbEl#S16`gw{x#wVY95&V3$S!YR4QG36v%F!tsTiG>F+RJ5u zcrV`n9dCDlk!jhWLfW3n!Y^*_yZ21ZAwwLzI)B8e;sK1e}uKjAfL1@-^JW& zMcCi);C2PCvN`I1(*i5kOBgVhaY zj0BsuGWpjjGjx`wuI~x>Y*$)MTERNLReKCq+ZH1(yK^EVd*azb@>W6Tb0n|>HPh?6 zK0~igX*58pzgElSPssC_E|bu0xKiZmXJyEmE^nEU?C-X;8EK=Rae+%t`?WBnEqU>& z!+1ump^7z~rNO);J<`o)OnC*ZkjBN8?P3>M z0*X?OGOAZmMn70K$27wD+z}2&oftMM@~Z#y99K9#iYTJAtuYXB3E4Duu>2a&o%aI1 zQ`ts212vX}va{GrKO`mxzk7@XdhqNo0#=uls$sW(RFn)TDBpX?q`xBv{TcyHe=E|BK!X?ELKHmw$}(S+Ec}tI8_4 z_zO@T>MJ&yDe zmq!~BXJ_xA8?UBH;Z2O#P;b2{GKB`Q+MjG;rt$MLOB8e<7TRG2`FV2F#zOrc_&pR< zdBc=qpQDfwj6kMsy138l`5p9yG^*x}WOmzwLTH1MMIJb4iEl*)e$& zG&7@Lg&ux)-TRx0(AS7$i@3+OX4No+5RL(SIa^Hoe`J4=T7)#3g$n8FgdyR`T+7cc z&{D*d0?WjG$(Vvh>s^`ylS+z>bm`GVXW|LPSkNLid=i_p;5@c0%{cAF0ZO@?JFzjF zx4aZ`4%~bo;K9|h2v7ZVD15$6jEEZmw_rl8kYP2Za zu{}iRDdclOo6X0o=@|QMMob6pReQvyU_B3_01R(Jn;>2^`M&L4VAo-4hdd{y`pj2| zIU(1hiPhB}lecaP>GYYt3NGT(YGJiqT`b_wV`Qh>tk0^P;ebyr0wsY*HgN~hhiFW! zC1s(lAGRCfyjN3N@Wkxd3yO>O31q|dM;Ctm;R-|4do2X-c(6?|x~kzx{;yCsGHja} zkSCGfXD8-hUdk^PT!kJ+?hMB|84!yWV(#ta7g@?%45uI! zs3XEV@48(gg(*bZ5LHhi8}#hY?k6MB zX-V}q>G(`wWF6Z}QDsgl-8xm$tbU$N7~fuVDI$ch&0&l$A&>yRw^b9S)v9Rt z*F)FnysnIeSJ1frGseHdUiwsXK2iHH5=r= zFoRIFrCTybq>wPiWhP2K;I(M$dwb{u6;gDJ-ZA(+`_)L?(-u`Ij+lDh;-XiOa25Dp z5MbNaB5A4q@H^fU5YkxAT8i*?KUvX^(;gU$2Yl0)hY4bN1Yj~G5yZt`y)Mnkc|EvF zW&+2%X$fENsmF7Z(L2>PR(Nex(!j7?bh-O**x0c(74cr}RGIST&f6*YMh4n5sX;?b z2Eqsslc&=y4*l@+@Pg0!i!-d?__K=6HXjYDLl z4|~5I&+sowrBip@PA=X4Lf;DY_+{<|I?PBvEMA__k?t_>Z;Yq%7!X_qgJ+Zja+HTt z=Gu}##PKc(V6WO&t!NlCe=7T=B$-wled~Z|>-5wF@St^6FUj7CbHcWV?)hIz zpDdSZ43@dfVE+tT6TrS`2;sAg7W9F{ddG3e(wo=CTupr21v`ENAWo?9+2WPrV`;p7 za0eP+T|P(MEOw%KjOJ5h82D_b%eB0M_x|juDDQxobPQ|e!5(8gdMJ6^z@0qRYo+c| zp)q?Byw*(Lc0!%{3E-H-0yYfjPWaAWLy_!3;Oqax-4k>&A`hMUa)2?V(;li^C?qt{ zgY9!*xo&*ghIhhW%os#`JnR75I3q)8SKHKs2Elv!59M9ju?0EP;MrJfXrLo0u{0UD zGXZ9DX3QZnm*749vesFx5}o!ZW|TsIqoqeRL`&-htG0;&bX=K&|J>{tHX4Y0VYY%) zGp?nBA}RM3$p}LJ8(C?H5kIIEA!W0bXIIZguX_yoU_Hb&3O!6H%P~rBo&^xDc>39M z+{PU}nAptShzNrTfU3-;TlP(V$dFq7A4t;?Fcd<^D0+{?&cGb#JbX zA)6+(U0si(THQ-b8{L;exdm3ErY>g?mR_(G4=!+zuet zje)M{q;SM70u|s9ucr-Yrv~}=cy|)2kBLeu(AE9)80k@xj=2l7q)jKHoDFjS@&c!h z_Yv6ribQ`J-YwL>kpYo{#Pz}V$2}xDz09ES3AU7urEw<%b`N^o_a});AzU4dbKgpF zosG8aIMz9HE=r8((&|%ue^XqF_;*|8){ci%YaCmoNh{YK{OLHHIkmi3%pGsNBg{@s zO`$x{B9c)S;iZ(WKN#p(XuJj~u5OwEeq{x2K^|HNC+5BDlM-z1*3|>fu%6=>TIvG& zZ{uW0=I-ej+$~Z|5^3-_7V=}N#-hd_1Dv#_#c*Y5Iahx>6aOVHO3UGTx)QS`htC_) z(OU^P(6fuHvDv+$II<{W7MTzu_C5=AT9lRRS^lXSIZ>u7yPuhT;Hj(Ai^H&J`$moo z#A>-aWmn&5vC7f-h=y8t0KBAT68cN}r`wYhN3IpriUs(#{*@>sxOqFhN`=5VK|Hin zEy&cE)9e&Jnd6SP6EMB0cDj0knlfK$Y%S`~QAx5?LvbIb89)O*>@ofTEskkNVFcse76_R>OlDM%+!? z09N@K0kpCiPNSsQ(eo>^y+bPbL)RhG>6%v$iOzS8i6|ZTPYIG%)RnV%QycrTJg1}> zPf)OV8zaf02@BP7u|7jR1|ld6{<=IB0$}C(wB{euG@t?0wbygwB4>>wgEElZuDeo; z9RC@dE$2AZXp#(M-X3e@mU`oImL)nLA#Wmzm?QSQs(6Wcmt^dl;G$6Sk=T=|Bxl+Y zKL*-hihAK6VKfl;Q%yk!RsP(&P@gF-`ua=Jc4upcSN^PhWCU<#dV?;3P|v%o$gs^C zDK8=&zPEt1|Gy+bx_WMwnHuK>A9dphy#9%s^aD5tJrDN;rS_(X3w2WGghEZs{Ocm| z>Xs@QUbu`y4Eq4sCA}QV?K0$RiQoJ<1}U(0^Txndlx!HvdN?eBw61}i+z~H6yTwMmm&T|2 zi;_%UYo!RWtX<@kEV+CN5_!V-aLSvRVt5}#plD4HV)!CrFdesNmD`aNw34Yv8n@x{ zDV{2^bxGm#p187{-CKHg6j1@7+UjHOkRl6ZyZ3tg--hcD9iekLaM=2=P8}o`XI4=< zHOceab(lZl1q$Lh;kmU+oU+@NYs+Or)p_pq+H-dH5fgknS8Pf_&a5H-B+TMy^s7kH zE!kDWMRr*?xk+rzhV|X)e-N6KaMCM?&Z_t#LdG=eX;n5@>l56)|&wc4;NL@DN z{fp64{p+-lsYdxT(g32g!ec# zm+U}77Duvr^Lm?{NOg)%e!PQ5{^Yg3 z|9AJ_-3aXM z%sBsJxzt~+mK7eTsD{iH#icM^UWzI{kVOhu_%PNO3);aF#tpNBH$MN560=fj#;R|O zwwkOyQzkf0Ueok?_a+HRT0aoL!_Ac+tP`^vYB@a2!f#Xw?fs4nPQW@YsBiI|Yz}P> zqp>${dok1b^%;6?n`+k0`o{372bP&M}8C zovvCv_TO8s(&{xYy3pLC2YRhu>`C=72j`p+eMl#VRq*z|VT|~Cn!tc_`5)!8aJi$m zD^iR%j_Dx^Lij#45whw#|@b*n!Q{aKB$Voh8p{oiK=?XNL zQ65@fide7av;6p;ViumE*-!7vCzK1bC~Y$48t*AT#5!)T?BFlM-FoO0!w}rG$&EFT z-PKC$qWE_t=H#P8VwfUjm0W!pK8stz&g9x3k@D+fB*4Mh8rWR1dzoKc@~3Vf*Of__ zNK*9nDMhsYN-^SA%7;a5r3WDXK6ihdBW8CJQSHE{G@ZwqB;8bV4AN<6j`>vl(O z_WQf-VL)?rHG8)NHlIpfqFt5^i(L`mu^J{KiJq%zOI|x0J$nIEm6O7F)!>eVra<3= z5(dWq^p5u6PJ_7}?y2AzZ?}eX_Oj>%5 z?${^Qq<_t;_=%Zlz)biDFu(yWN2}`D5@dYX3KF$R%@GIrXXk{vy{>p`i{~1ge%k`) znA}1LAk`iNrD=Ed3!LGU+_^IHd-0f+m4HYaF-K}bT^ejontfau%mGG(vnpV4C0`m4 zn90E|qDKVRW4(CX10QYC0KXV6LwYAssb_#LN(-}UvYo- zNze#gn_)XM&|weW4_-XJc>>NzFYZ3E&22syEJ2GlI{-U6GO07m}Wo(_zJh_-)zpI zVb~M!+%0^HuGz7FEiSrD$y+MDf@ZDJRs@^R4 z0K;|mUe+Ydj*GCU%R)}`Gt5X2J=ci_Pwcy#(r)ZYVggrhd_KKE2)N&hj;9N!fS*mx zM6jjL#Ho_9ZcDbV64$$6vG9PRnIk*;rm?^2a`XIP!CHCR zU(=YwhnDoP`!qwM z5gLSQYH&l%#E_LOsP{>p^rHuT50tnV+`_B)Z7hc8id3n$4}k=~j?%tnjWI2W6O5_B zoU`}DE4(Cv=Kq#*jbl&Kp00L{Ej4#n#~-cZUBRa9^vL_^Zj?B>?a}(!$j){^`?*mi zr=lrGl|0)(n(k9KgqA?s|6NId&?h@m=>$xDsOkLPGPKK`Lw*>9nSTX+Vj)D-U-AqK zw(zSG3APX(#z$|qTx82^6dDn8hhQ7amh!O|(%q{_%{jJHcnludr1{^~oolej50jmH zx}rP|6KyghZnH!?@ICAw9RLzw4kD^p5U3>>&lzstLa>4&8D zASDeKfo8g+kfrn;w*-wmoC0&*aSP_X3M)IQzT060g0-=rc>SmX^H9RJa}J1h7;Jy# z=56OgH+#49mq{G!V0ee_Ur-{qAUtewY!A7SZm5WAEWE#vkB9Jb)6J@q(51k=b+C`Y z#fZAXg?-TK_u{PERb#_7-3y3c@>E-p^Q8DekNGI&8UHY82GPbYY*$pSe5oA!I?bmZ z=Mxo{EnZOTNVvZ!bK7^1n;c)1^F^UiISC>u5bqraF0}?{pYs_w$3mxQ_lVERD@U=d zV~m6%It;QZw_JOehQ{xt@3`^0N}gd1gh_`~O3AE2g2-1gv}%GeG7OYJ@#fMx?F5h; zgheusAOPr#QQ>#@BKGcXK}jV@p+RytI>_CLABc9@epSN?m=O(DWib zF^Q;0T^kbj0E&qkCr*Z4tu#(K49@nm>{b$2`NO@IrLr6kv$8wYW{u5z@(Z2-6U|9! z*G6uUcWLA6bx-ecY&7c2-H~+YZ*`~e_fafT2_vlHAfXhrC7+goH!eb}aTBbT)Q2Cj zEx75ARvNPj0H9wQU!xN8IPZ=~jS!ED%XjO;H;ahu&ZQ|z*jL0HO|5`E&YpW;SR4w2{v|YL;e#y8H0#`Ub?kx-90l%zob*Xb zWxpVvQM7K-klhA>xb5((X%#WDQSKww z?i7GXZj~VVo%7uOzp(nnLAjp-NVb>O5tDt8&=!tD$@YwoRS9Aj?_C{F4bCQa!}3{H zM9x@`qY}TOeXGbr?sbFedpu;vWPf8Tvm6K`-80awtZ`bG<|`w9{kIl4;O)@WS7yfO zQw4pubY|!aRAp#z>!XH1x~{(J5*N7oAZ!h@@(I`Y2?WmoE#cf^Fx-rdDowZ4aDjSY zl$hO)6u~b+dIg^6u9gFpZLLo>l;_xQsKiHkGsO?i95>&XxxTLz?62I1bm>sEgXFd0zn|RCP00<4p>3owq>s z<8a8Tg>RZ-99GHk9DI5SAEa=Su<2pIXvP*wHviw`saa*lgAzC0k}B-%$UNI+v-Z=k z^smXBq-&Y1hCuz~+MAU`(i!ai?tjQbq1#kxx^cbwfd3g2?A1CuLEq@REj2!Zj2|^k z1MB*f$N(L17CR1MC{0a31X|013wVG7E`O)c4dt)}srr)>IAlJwE;vvN^0_V;+hDgr zYf?kjwERQ%^FRk`VL$R0mTF!l{k%tIuH+nN2@*>sV>yE&;2&%$YJf#uqo8CTpVA68 zfI9E}YeR}*90NwIZ>sj!7ckL}@8i6C_+RURQ~>g87bfWQ#$9u5&aArTyOGpS*+J&e zEe9<9nzvLzq3*IOo3K**K%_BGcG zub_O`1GYuGqo0KnTQen)06QA-XrzInqZ$XC%}5n1mCa-SAbK>dNbUId`<~dGe;PA@B1oRj|UcDz5$mI2A$~ zIDjxIc2#bL20~MmY1E(4|CWdKy*rk`g)u0Drd5irb%z;djyni6^@yWoV@aIV7%XBF zgm1dqXv0qL%Dlc32fS~gN{QRDVp7b|x0(*r)x8>oi}@KociQ-mU>kL8lSYrEbIC3y zpQ2&+k1X&`4SXYH1R_@gt{r4fWdW3dR81x;_)GpjS{X2O@$Ak#>|b?5J1=?juX^Jx zo5|9d$fbVO_At(OnX;=WBy(q|NRvt=j-lG}_I6gY-^n^=C&WD2nlyH+!EVj+Ny_FN z)Y^BN4ZOh+4nY)v_zt))kL#GiunB$ljE=tE$kvI0&^g?6@C1hTYYBwR(Dug^-1jFmD;?lYDC7JP~=8*7|V zu;tW)97EF|ekhan4k5@!0mT+{pH{*kCVK>ql5dF$zTy}MkeSzLnDv?60tZbaN3rV> zV_v})Syl&}?Yd;1GYCltxA>#5y2!2CZ@oLuw$Fo+HSAkg;kgRx#5@M;(eTs7n*Yi;Yw9Hg$gv(K^I*<{C|keR^k}Fh zw$`5K43ef#p$xb{lA#Bbuf#M01=b#aq*kQ`aGLlU{|^e&c5-c2hs$HF>gB-wrYGy4`?m1`!m{}lX51;QdbToju9c!WpQZ^l?z!?x}wlYY2JQyCM zNv(tO_2VR_(wCWB3=aYZ+s->5jw;4~*?{a}aO@J2stknSgG<%FTiK0yb16{BU2oI` z8N9B8>64Z2h+CZYYf1a9Igmus6}qS4N?KXz>St?PA{P8ZiEnrA`WK=|$Oo04J8cZDd4DTvF$H-Vt<$`imn3BMfsVP??-lTr4UKAgP z%>GIR%hs6Gr?u=3MRfstJKdaTk5XD0R(=ex8u6~1hMYdJS*f3@T6VhgBogbI+>&}1`M6JoV zsNV)$IhOh=Aci@ty?*7?4Ns8Vi*o|E66%16$1?lQ>U(e5qrw;@S2w(g3n_i>;cOKX zr#IuDqtX)ZC}$kB-Dj+U=VmkObrW6M9Gtr?JNVJP_wcy)CTg+T7NI3w>T4K7g|}){ z$Fr^=ue%VOV~DJKIzMr)1SOH*tU4?V{!9BD39#LF00q~zQCi=uv33gUA|mKMHDX)r*>#pBtD`Xw&`Ah?(aueok-@!UesK2i`W>>ANE_)66?ze zd)t8w#LjSEtWkDwzK*8=N5ZDVMYe#tGS7Wufbaj>{x?#yc_RV0s+qD@Ad&+>-5Q3T_HbtYiKAv-y-u_*d7)MviXcLX(rz{4at*BDz5?7 zhnG26`cNt^=hE6= zZ3&bjUVYJDB^u5QP@UBQzZK%WMy1x;!z%_$7sL48XEdKp>0mzP6?ZNGn&F8t(~r}= znp{XYLxw}Yz6evZ-vo-ZHytv)jW2?ipWcH<^W{2yYD3P9Yjw`$=W8eIzNzXf6PmwH zndS2Qt68a*sZ0PHsmyIhIEm}IMk@$Kr*zBZo5uXdDQAN%ZBWxtYAS60JEQrPs~yyn z4O9EQDF2dYO5g~dN9g?o$kl3hA?D0-LC9Wc-g9&Gu$NHb{T^59{}s7>dyG+ z_)#4U`4fzewl95u_7W%XMvU zkz`GqijUS}7KL*#2S2l|-fOo;)v|PMywVav-Q&B54HxHupi2st5Au<}I1Jy$$dg|x z|ISb}e6Gi`lbH|#0Hz)^MsZc`oxQKPsEqoWzuMo_xp&!p` zik>BPHiI?5TN|-i`_^7GZ;vLydP63)tjR{Q}mpLe~Wqi79X;8^6t3D;RAF;6rM zAUP%>1Tq#`lw?FnH|yVOCk|itCR+8r*D3>BA7pKtKQ;UYWEwbhk4tp+gHRm2Ziwmo zlG%N)Ivg#`&nU7xJ*NBxsHpL%PuoKA+YQ5#qUnEI&piXCXa>k8C3`uyLc_%4HwB=H z4fg?+(D?))#160@MX-&;3_%zgw}p$Ed-_+Wx!s|5KSg5~+?XAvgobqjW=<(0gOK+b zl9yZg64qP~QT00+-1P0E+cks1ayO{C+63cjycD4H-6U2ME%C|!r&1ve@i;*cF>WT) z^b)?&UfZLWb*PS(gJAdO9&5rV?X}y*%3^80CS1%C#1+!;WMLY-;P)s3)A2&fC>Yvx z-wmq3%^Y?9?3dfYihPE;Ry)6j`rHY$WAt*K(1bNjX{qeqUmpaC1dxxuY}|Ksq>|J@ zI^~DHGO_P-2>wjnf;m%wFa(Bod?DX3zilWYg<{t(_^5tk>BqdmGCwf0&xw2MzBl0_~3%H4KSLFp3oFZZ3Xm4hx!OwsZTzWUdOWT3jOl3DXR8 zksZYbzo_YI`4l-`v-COd8aQ?dlhIwGAPu3BbnH^SHq-7S3uLvNH!!x^n%Af$%<6^t zZ8SgU(v@L(@I~^s;4k;!f5|1>5-=Vy>t?OGVl5SGf3w31F1O>p>8r2_$tq>DN zYT<)l07QauJIagt&Tps*fX@lyu($N#efu{AkTqMna|&f6b79I*IH$ZSKR6L((Sw-&snH$za=!&SBdm3l7%%%HCJ%LGWLJ#zNCSLBA$T&d(SG9s~l`F`p(z`b|2t& zfh|BSy5!j(MkE0LNyK>e>1equ=pvq+ym}%jg`GEkkc>v6vrHezc%Knm`(8)LYjh;af6^*Ocx&r= zCHNFT#DNq+NoGr7?r4kI9kw=NS#>(CT+M zXFz-T1)5H2ky$>2>EQ=O;T7e>Ja2xa=Z7kca%`jv zO|n9}7)2eAu~>EE+ZyJdDVuCOGygY#^ZKnCC5=&kKJaDuN-^b-QBJgVryf+dvUFlN zSSsh~WC#J|>NU?8?^cxWJ_-1kK&EMKA4b;Bd(X;^ESyETY2eq>x-2g>toocGn=OAk z-Daep6C=Vi6BRGjklJ;D4Ya6BW_JN}dF|V@kSAxg*vsm??4T#C71JX|sU(Q+LGs}y zyG4s;xE%!tEFN4&W}X~O{zY?WYBl7+#&6QmnmP-!JFDH{YUPcoYYWoQk*}soerfir zl?Hn+AnoK7whD*yyrCsH6botPBjM~Os)hT9!@H%7*&$hzXc1?TX$1d%^aNkqNTP3s z)3s~lkYLwnI&@q~A=WG03=cWz!^rlpiSra+vfs~ceAV{B(`{J!!WeP+EH$R zPJsOYF}1!h3E$rmvK?s|PyMmfqe9Z2%$ucdFil*-eO!*<3g-3BF@JvLkGLtN3QLJw z<1*y}2hJd0^e5p?!IWFuz)Ay`$2je%*_UvfjJwwYnB`2N;E)+rlyC_MejKft|9tDF62N`C>X(WVHJ66OpIti%-h;1c z2jmHbw(OfO??hZ(M5&X3A*02`ca|6G!kibO;=k~DVV@h1Z&-d23&-Z6!~;o1^8EMo zTFmO~`wF<|xx`VBiT){$@FH8#*DA!_(V^_`2{onPFZ?txTw3e1&vY-rX39-PBT zEMH+!LL0Mg5VsNhZHPlDej8rb8n{e#)frj2XG*@EU`PG(Rr>gG*GzRZ*HA!^{m)B* zih^*2Di6>@aAOjr*@i%pM75yFn4U?%Cu8n;6-zXe7jNml+f1w0$*XlFn77cD)~Iz# z=0>))r8%H|WtNg3W6IQUAv>xpUVBN1n}@jFPwRQYMjg2Y$AesGnb9s@6hs9);zB!- zdIy3E9pDuDj*YrubIn9%%FHBSMT?)BiHDiZr02Ma7SJAT7EAe(T=$sNqr^r~2a&96 z0ZLiYL#!qORHak$eo?%!ag`~PKV5g^iQ&BuJbyxU!8x?K5tY$he|*$g{>p6~l8kAY zFWQ?4viOgBoqkr;1Vs?|*2D0HCg^$wi2~!yMZ0#?9KvRZEVOHqb(#d#?R`rF<*e zQUv2@j|JG0vFFIKdrA&TMgb6yR9C>U{UR1~UF2J!p7Y(9K9C-JM<_m0C!< z$kRSZG5-CtOA2eNucLp0ILwY5Hlfon50f^yV=_8c&9sYPPB;}k`jT({fB&;1gYGQI zj2VM*q-lvJUkOeFF{i;kh%oQnmeVAS{$$ipfVM9<*7OUbnN$-g=j&*fiyzRegH;hQ z*O8B^y}pO@0(l`e}|B)l*`6pNNK zyGU#&V23YH>MTWD2pM<{>7CrL{mhC!J&oCt+f5g7(sGaM^1m4K^aqF>bv27IqafJ+ z7y)Mhr8o`<{wr1Wj=1n>nbWr2^_3c7b~Fc@H#n=A=%svFt->ceJ_9fK21+}aq+AEe zRlVOHy~o(22xl#b_716Q1T2Vh!S)6AjGO0yV2lwq$x)r9_=sg4aLRX@-D51m+;1^e zO@U0(obmijXBH==?bS0J_AR2`PU_BX)0-tfA(4{se0;lCZd2oj;g&RSzdct^Cihft zh4%`2%}c^4piW$9*B&7%-Ic;0C5-WN$~pgRLVt7T|{i3d#maqo*_!p--04cZ^ zT~-25I-zqpbXQj5K%@ipyFrIvtEk8_QW)&Gk9nm6F&a3j(st=6KY_q1dXHnBdiz8h zu`indi<)#Z(;+gBAkCUwftnN>tWmUzL$t~@Yh~N8OrVG_yz)?QWLr+-NOT~(gD*Mt zr&qmoakah7`}e|*C@2SOy2So-Ncx3+@<~&0v+ag}&K8P7BO{7ZzSE|qHF(ELSrlv5 z)7a~uyd69_!+tF5^hOsOZQuIsK$M6MA!OW-VZ|A+Qs}VX zmxRHbj29}m5ok-^(vNM=Aq-E=A=Y*Jp_!&Ia>xd8dR;7Ict8qX{!BFfN8vQ7uT>=i zJ|M}brh4j}!IVGLCPoyc3x4@-HK}f_T0#Bl#{yu!u1Iv4R?g! zL3IleJTjJ#TGr)8_vgXy;-}YFck1=u?P_TV6~!D~w3-qISoUeMKX|m6c=5zsB)t+kik}<82Uj^Z9napSSIX1 z+gR_i;I~Nr;*-AiQeraR#7nVMx=Io#Va<{L#RFHTcpo&LIhY{curkuuABjShM;ba> zoli|BPD&|rAuxM090sBXSI)L)4rUjH0v$D(_`y=7kf=wW>ma&ie(-z~h2W&_9db&J z@2ByeWDdXUK@c3m&+n}07A3<$8>*y(HL0uwVEfph00GyL`NT!2Z}UrIb`Z>V3;G2w ztd%>oe7rhKhKkDPi;yr3M8$PtCVwJ+Ky7Amjo@)64EGFb-85X`DIHtOoL#^^&OEQ8 z-UW`XFbV0vCZbrp+9iF4sHjSsb^XA5XU(bch08aCbc(5(+yW}9t zmnQGUs;d6BA;U(AfmGZF)*E=}B3p!_yz1YfhDwUgKb~D++D%`HXX6G`m8v9TVM*I= z`AFD>JjQ4K5oK}|vl=w)0Fx8ZLi%uET^eo+tJx*QC61NocG)Pgb0rC)Bdf?)_d8>; zfBmTKHfQ=A^wC}%liX=eOKTaCSbGn|KD*pt)#1;$spjsG^7f@f7{st6mp!HF2PPNL zWL_vnOvjV!i&Zq*mspDR*})37$bf+qKm&#Lpz;h9zf;LQy!7UCVzRQ4rw$Gz&aO9X z`g)h7CQ)5cZL!BQtn@?o0hKa}gbV^M3+a!GPD_7QibNvZsLlV^*ktA24?VWb4T)T*QTfX`4zvDay&ICX4 z`%!+dv?B|-oTV1&Jw`9pPWoktrCt(0OFuv09HsyWcmM<38VGcK;We|V!%!o_T=)%}S}zr${y*movx1yO zx%Og?M8E{hFsbT#4coa?4GJ^dyMfrqMsBW@`?q9|-1Y(|&q7kar_Dd*+;4A5*dh!c zG1(cab%#poq_*fts-xj!5F~y26IVj7cqZ{i@g!cL`Wc(uh`kK}aQPzpyKC_Y%%BVF zAw%_0;UKX<$c->Hh8AH-G^p%ijyp{6-B~-DygWu?a;@Po8%+5E<|T8I-uN60}hh5*4%>zy)vNA~c~Y+Y1~w;X%07 zSLno-xjT>{%oy*?fhuMq<~}%YQ8@pmzy9cs0>K4OO+-akJLPR{l{fqoWvPa3cNtSu^ZodI{09KRkxdldbH-L^)!)uMIy~;%7+i3e#iH0g{$V3 zT0-xmd-^Z6#}bUupLK-91L?g$c(n95PDga_FyDYZ9q|PTlv|D180dw+eKyd^^v;Jv)f7c6oy>5f&eG#JM_rg*xI+OQY4~XB zTR4yZpCZ~ryl#?tRz!vw*q-a$QRZs>u^@vtl*)c;UDUoKg(?f5hwBVMq3?GqRsm+B zfAFK{8E-QC(6y>`ftMLiM#|$YA*%pH&-krEzA(LP7njq5hdM$1VjZFGDeOByCu>rI zB0)_WC<=aKDt#8KkS;Vp5)v1jD0;TAdZu2kE+-92k>jd{>n&qO)!g2fJowE0%RSY} z_8l%d0@>#bIadAmX$LI}7mvo0i9ELuS#kQ684OvUVw&k5;FlgIJL*FZ66~zQl36_X zk1pzm)wo2o{#FSVO#AiDkTKe|NO|b#bfX379)P1hvgd=54V1IaJf3CJxzPmBvwg;I zKFr@V)H9|gL^5GM%<7!ZEsxOQe-7kV8RW9K2xPKKzL7e5Dg(8-9c~~+n`)_g{O)%@ z+>B#9CUY0x0{6t2)*A>z*-jsY#h6 zDs<4){TUE3Tic;8XRdP1H7Latn*?yJOHMVaqzuJ&8R#0`ea>w@k=Mg7R8BT28rJeN zn*dq@SrGNK@hcUe_!6(?f9g;jVD(Um*W zao-f*+kF4Zi#1L8_QoaZ#|9*Px5?9%05J*Oe`b*bUn%!*4(K3UH3>k%o80YIq@q-6 zSriMh%eoLX26PgQZ{Ri%bPF6zk*{SaE}*)2(5@-yO~_pei{<;zg|i%0WK}1faE-(+ zg%s;~?`i~&@3Q|o-vrC)S{?lZLIjd3eK6{jY(L>1fERG0q9r`M3I@Ex5u{>Kqxe#w z3mZDg36LC^K>5@s)nlzjE%y04K8~Ppw2dNGLi%Yp9D9w4S)fpk6x1qKevXzFW#_g* z2+)zfeqg!=9mA@n^vh!@Gm`57p-jWxy}<#B_y@W{=-5*;eYTcFMmeW79h>} zvYus?cj%LiuORHq?m7*+V9eNT6v^W3_Du91MvEqgY+I&eZd;B@6TTSpCzwGrE3>}d z*sT5jnY6~}bf9|Tt5Gv(u&;oP(7mo5YxJI{MdD~MSH`&4{LyDXNm;`$!s*w7bn=BN z*aY}dHFxAn6thv3ZBK-*R*eD6l@@bLh8o#~$Nhk%m@r~Ra7719Ez%O^usXb&rM?1Y43uh`U7gE0Gm>R*{p68TR8T%a_Rw-OIDX23i%z6EL5&~>Bm z+PEM~hVXo4D{+q9v9ebNu_hXootzlAj@ZQ|GkT6zf2xL@1&blVRI$fbg!M$O<2C7u zYIWhV>Xgfl``GUi%>Ef`c0=94ct=_?7^vwzXDpXz=0fb-RIGnV;YDs&zs&9n4^)*E z6csL98isz1+-D!+u!&U%NM+o|%v<2VP>+O$=70+#C<}AK+7gvrHY!9fjI%F;YPGIl zX^Y$}NlSm#MbHPR(5^ECm!g^K8#vi!So<$>m2!?Dc}mQr&`kt}h%aqFUj>RzPg)<; zFsd!zdp%gzOqETadbLxt@3)YHldDk~L4UM8Mhnv+frL(8WHvqmxW$0;)|*Yu^QoQ> z`{lg=s&_kT>IPs7?S_Tswp+7g-=GrEbd~ea{s+Y|gSWN#G`X(YsUkOcaOjEs+oCrb9UqF<Mox*1dN_R!QSUj5^zk) z4XalUJU$b82nEv__r;XpjyAs%P+B?%kL=8N}cw1U`{GQ z(LRfmuwD#*b%DKQWe#Em`~z?FHd(WaompT>-S^U3d?`Z#w7VCTx9AU!fh;|r7k5ly z2&+F1MM#l*Yq#(D8caQ#A;Oe$WH`_R&F1R**HZuS)fc-|q6jcW+hO)b(y*43fut@N z%X$TfdN%*`Ij95P6$9m#D(aM|UwCz+>jP!(x8`r;K5Un*_)CE|PGjtj`U1lf4XE;N zH;C}~sbB9zQP}!f?UpqKia$f3&@WpV=Hu5!nY76|eDoBop@HX^5BaQN?VW=nu~G4Y zf%FDPqr`F6OloQ!`pB?bblGK~oPMoena}5WmGQj)4F>-7_EI2sVc2kdXf6j1AiWBV z%nv>*o5?{U-_t?DI(A1EAZ1ADgJ#1r!ecTJnYRCsu9j#!vXlfgP4KIsPn%@Ta-X;q zoSAT}R9osBaW##hunWcd#>sE6fb21tx2CBj*5oY2+vCtQnt1a&A}>YLI^;#8=92NrGRpyh7M-8;8E=vyE}W}PCuN@7t)UsPzdEHmxe%U{ z6ee8~x6z*eC@TB-uO_KbMe|$qw8uU=Fzlz`ebz|QGi-{Cr^p<_QLm~xs`S^!a#Bee zCY#)vNLk7L$${>^6Ow9UgJ_w{C56050C5U^MpBgDPxB-Xw3`9kMSuscwogz=D31iELw%khv z?yc3;8G;!bx>69JU)miJ;6qo**-P_b?btW(j&IxMQ2^{P>k zHyQuw&NA0u8JE&&#rPRvrC(J5xSX%0C4sbUJ+mX%fo4NopHt(~nQ6$osG43>jx_Xe z=}<`3Uu%yE#KNgB!T%21{N$ZX_AFZ}^ji#e5R-WPqZ#XJ5vxAu@1yaoh9mmmFxddUe-66Ap2 zZ#KNj=AWsvlXUq8vJls^Jj*V=PcsO>%zBI`^NL}2s4I$k+ihVy=P6QfEV6wlVv}&f z;<+^sxJNF(L38`{Vq;MzPL{1i7-JH@NFgszNHOJx1@WFX-=c0s()%KrV~}^4adGRR zxhts<9_q@!*f{uiHslZk(ncGSp4_v(*xaR7dz~w5B?eGPyeOvSL11#(mH0B>`hrkT7D`?|-f!eu*30Pu|WBufmqbS4giM#nB9Ngc(Qh_yg-|;K! z_vdROpb<>i1NCDth61`mokzud^MprI| z;Udj1b1XC%9+6)hZ5iqey54BL^ibe<8N}P{oq4c4#Ov3QDqv7ul64o1*WdZ!Cbmt< z3uE#qa7m9HF~(i-ePM z&Q1RmoYs-Aug_^RQ<+iBn!ugqpS8=F)7BCHr^QxT^XHJ2$_W%@2&+q&W)6qF?gblm zYlJ5Os524RZenAnIlyEQ!`UK@-V1ntogK}0EgNHGn^xhG5C7qZsm`g-9aSJwQ7vJN zzFrFDsllBsl@V01=td8?(cg~RIf;ql-^^ERr$s2XGmQwMyqGCoFIs!<0i9eLsUGq+ z%wwe_G{mEx^4+#WYq=0;q;uet@B+R^)BZ@*8;*|eN}|sV_1sJHeMs3iWQZIMrpP82 z6V>8T)x(QvI;#h$-HvC4V4n`N4xdYPWBaX{K7r7-nJ2&ywku14A?*yx(g^6=7Bu+P zgOR45%~9PFKx#mdAOwLS!L@F;PGdIJMmg9?{gw3CjtQU zfo^I9bT5TIiUT@u^vI2NK2au~_*|-RayAC6ZO#JpTEA@f15{0ZRQsqUJij)oUt>W* z?yp*xYsfh*3`)PMJ`39^CH>`H0jHBh} zm+dp@4%aVDm$?C2oLwC|zYSxC&qzzfXM$xLP|`KwOOgiYegMATbQ2c4LpjT;fld9AStzWBhd^LbR_^Tx-6pNq&aczDn9~GYcGEL#{One+ zkfSBg>>A6RboI|)9W0)IF>(Xe1UU!E)_o`#i1pdU2px6UINyNKM?;2p@rhWy!}XPs zDkW=PU^$lSIiMe$4>(ey$^L(J=V9}uCOhDw9!Jws5byiYKY8$U1>;M9!LqZZD2x7l zPm5Ri$eM8w^^UfG{T-G+x2n&(Wl3~#s~yHdev_Zeau6o6dDbiXsQU=jGTB}>@|3GL z)#~u}^Wt5Lwe%|x9MD16PQ+7aKNLG+{vX`gGX`3FH7M)PD9Z@8zoP{~y-r69;={`P z4&PNTF2;uS4_HTAq=%AUH4Z-Jk=o&CTgs)&UV=MlN5IxUd1^zk<@ySBQQ&d1K01q} ze*?x?ApgXL$M-;gK5N1R3rA=s-I2Zj1!K-#pWGI)K>CKVfMkc5$!u;#u2r8k0%V_X zphAk_koWA4gFrd#z0^93W_LB#Kbm}n6j5(##y6wiat3Ip3~z5V&BE5&_LL8tf{+u` zwu?DuwT^AH98F>YoG3r{R~x!r)NSTe=(&Oka9CO3xxDMSfVC0fxUCa0X|ndKMb&gVZV{rjkIR} zsq*&l`h;$oU|Dc0C|rjY67KF3nNQT>Pm?EN{W2ps{+~LU_9bl%rC$H?{}9YO9mt&^6k>OTktDpSS|T6SC*0 z;$0iH(#f&-(Da}GEaESwYsim7hDJibL!-x6JU2OhuWxmTJ#&IS*C)b<{XEIn`B+OS zwva5vYPX9{eLc!FL}X?V?ARFhYi?(V|NRlkxh8Y$3d4G_mQdyP_HJNSj@U2a>2>eIqtU27C^8_HZycPPLpK|G z$;QSo5zBq(PD`2Q-yXl}sO86+D8VG2H`49x2DTc>@Vn{vZCdE{mzPS7Bl+(o|1%R- z98+%^n!LgcJKKmXO_-{~m@`Z3J=)&ZKS1|&+BN&Qgt`ykD^cB5FWNl@$t$O>8hq)! zNMIeH1RlD24LpOoez>Z(F!bvg(EZ2uI3&iNzymo6{JU0JV)5L9Qx{oML+Oo+Sy10c zc-jVeU6pjL|L|ELO64hHCCo)n@0*IpyI^3L@(~;4zTRWvW{-|0oY0iS+97~>KO0y< zIWlZ@t)5>vP>pY=N>M*asa{}Ex9 zOsTl-KylQ1jQ|yoiI+VW4n`QiB3Y?TQgH&L>d-@Px2k#pKw!jcPje|4VPGZ(9$Mq4 z)itH5g?5myU1nQ@Ki2QL>hed$>usPyUON*E48S#=8H;qtJlRDAm~d4^m~IRXAAA3= z#Hd4unj?3IKOEt0uZ6ivY$gUI!Se;d9|^_?8XZvyXZ!+9b*jlMhy{=*uNp4r`EO;& zWmTgC!DS;f7iP)ruqk>b~_3-iT-xaeDYixPA?7({)1z_DQ`uIDR0{ zqA{13oVAX$Lx-Hdi2{M9kx~f~O`8(%cg>+^1}OpdBxlqIK9gnkSEa%r5@uo6o@L41 z2kgzV`(g(iVCAI%6H^Vx7cECfY;yd)A&fOGyTG{i(#Uv_?Qpa&QP1bz;2SDwG0aDw({SAOJ)AH+-tiEu&`UsQOSQdF(y!K zTY;=qWSd}A(!2tDw(GF8=ei<|c{L>lz*cmyaPPfzC%qAED%7iaiEV=ypWe*W3gbh`3sG&bMNIWJ?Xl^r5{O!0@$1Ta;I_y!CD~Et_T~P{+bF~3aZd#bF{+7ro;|ByI3+`QWO|_rUfGob z5WpeZwXEa!Q~pSUML|R$s6|dyniZ2~=ww%yEC6QzOHMffHVD=vp#Nx}qkPWN!$FM@ zyhiq35$|j5Q6yeATpgV4G*waIG{yCqeHiZf04?>$8;NSRU8l@5dkA;m5N7j48R@4H zQn!~2%E%>Lregc~j0&89mL_6`+U;KN{Q}Uj+L~W*wVy1j@6oo%1UKf{4 zjnwFapzw`W9lDCxU%_yE1a7>AZa6GBeLUvT2s?RB+9#VCUD-x6C(Yu*se2ShFIR>R zISG-#3!h0KD^;T)kiLA>4iK}zWT{p>#rl#|rA5HIVI1$2E6iII&S8syG=w`0@6a&v zk1@+(;9%IBzO8~bn4tD6pO^kqC^vWL9PY4wt9TH7^5OS-$;iT7L1^t&dgs~+Fzg}d z3>VxAT^mbR*!u{98In?pTedIY#RIbcH#m|&x2^Fo78+z;|Buzg*hzTI{yr!6(Rmkz zV_(VTZ#EdfU1WG+&<{XTY^U{MW(^#RtDO*{@jPQLJ0Vp_%II&1z0MyQk1m*m_&Pp$6Y zEJ{2Eb0V*ZwP6lu3FLt;rc?AVAqeeQ#_(}ivRrovCFao;e60HJ1Oov;uR7l(sQ6(7 zIy(g2SL1o2xFMZbJv;_~CpB*d&~1pC@NZU*{2GknF+W$7&szh>?QmY@C>2D3xl$aq z)JZc`eE+BJsoJlCpdqaPwL+vhE8T~x9NI}K0b+SZy97G}__pr7Io&$uzI?!QUL0u$ zwY*--3S5$-IJEcH+McEaK79IocTDVRwVXLhqxf*zZCQBhZ1h?4UUj0!w&6k*TCdixt?(J_GXe>nE zW-1xoxyGf#a9Yj24Sv0P(+ggM!l1De`06huta&k6%&qK0&e=9|V`7uk$CJ97GB~n| znG9RS27VjtPap%sHoz}#FM9E}Bli}|`$a>j3JaYrAGz?-W}n$O>HX5zm>@E<*~Nk5 zNl`+lg4NR*Epp$vAu2z8|A>9a!5TU?q*LOEqdzM2sp^<3qHOp)3>wlo1C=1y^5CBg zRww6UOr*~4wjGttlN*M~C8*AJo^pgvB-9iP%kWilNcQB3jWB7~j{Bw{XfM2wLqC|v z@BqnVQ!MiLY^@`t=q|IvEwB#4Mvc`t>U@XsKDw3wbk~`Ki$b# zEMzeF7mUGc71}cyD=O&pO=X(m47PGX*O`>^yp0WS{SiaWa;DS~V5A{foO!s!Hx_r5m&(&uTvJe+^HJ6b(Dguz^A zS`H$0Qf~YA{Egp#aaJG5&yXKD$kxa3@3XpyY-!!a5QEMt5I83}TTeA8_E@_SjXVG$ zJ{qI>!T%}=|8lDTa(|_KhzHN0!d;fDPSy1crKD(v&5j*r@OO}cNryGn_s>!$YeGr) z#`Z(pDlI*zd;$FX<-XqY9<7cHkCYR)EAwfnq~q6s6T1LhdOv0o1t?!fiixx0-V0Mx zY3&P1=0rF;5Cp)Ef1)V0o(m9dZZOv-RdvfZi8<-$qW-B z3C-(H_kYySQ!^j-^`%O2&pUMn2Ak}!#}wr-PzzcROXF~Q0ZNf^$)JGnI*D@#Hr$wP zq=?{mV%1MwH(xEaPj!asut&_?qf2YFqaDU0J0`WaU5;N4UBZ2TW*qNi_lsmYZf1pl z#JG}=3)1Oy2jKezxZ@wo50$U)cLl92e;eb_%}4;n?l=L;KIC4&_#wut{Go-EO5st9 zSci3FVu578AKlOluzTu_$n%Qz6KJaX|-jY zvuB-swTMGYb<~Uh9qN&Y+}lwLuemy<;0kmCvk~!NyMh1?D$9NEHK0x8{1VXJ%5Lo} zK&bRWIF2tD$7H`p6qIs&wwDB$u;i7Xji~^7RUNtR!13xYVDNG{iD3u|a(2-80vU*p zeAno%#sXj*U8#3NT?+jE^{ zscn9yN|dyxHPWl-{A}pFW+yccZ4f^tQ?r}2)bu$0Y%=0gHVo&`O#8m(Bo#X8RI?-=r3Q_iuoU8QBPFsxo-cm$Ldmq z;2}e&r;lj`*n1Pebeo-9VSQH@iN&uZIj}t2f;mg+4J zJnZf+_}%6SqIYE?gcsR43k>B7fIvPk;dwtsbx&XRLT06pI%XV$tu;rRqAINPisd>D zt@{r4mTI^o%^;kY4b4wg7Ok4FRO_R^;h3m5ZW_}Xkqjr2I=kwIiz**Wa08FVV$37X ze33~!2?0#4`7-}&%JK8u86qtET8out6KM}uSzA7?J)I1JG>6CjxL`G=f>#$*$*5hj z#^W|3{-sP(IGniwOP`j#@3Qu-2r$ELy~iUWL$39RA;i*QrPqB4CA5>>(t~AwV1=J6 z4jb8hQI(|;A{s4}W7>`@i0_Oj-d~ft8bIs~^Pd3Szl&MdQILe!FM-?GNQAK=EHUob zI`V9xiNj`fWk5<|3LPV91W^ekLZ5dmkU&-}OP47g2n6v$6%p*JT{6}pPTs_ih4YbUP!C=;*5o0QsG>vh zwkI5PBv#6Z{+bmselGV?JSz%-aB3EIS^p0wwh$jR6BX8m3AWd2F-mxH0^BAMx#q37 zR%=gv?8Q&`U8IL-Yq_$_eXmj9d_fKaO(Fx~>?(mZA0krc;=xUAybp*?+k#kK%K$y^ z<7^8aVspb%>;~aJSLjz+U^;WDq<5oOMgs9Fh>qH&H0}FV^;;<>kyV~9Ag+jJ0UUiH zRs7Zgp|Y?*!7nN16zh1jl7#l16gzgMr~RN-rEW_dOzrp#Lq9Logw0#J#I%8h5;qU& zJO8aRxHOQrGjj-%v#g=QA1~oyFAr4hax>O$49`SW>RPNa6+A8b%e<}8M(rwKi8O)~ z886GU}Ho&W)R#$8VyUuZgU zaj;~aocAZz6MQxWm)ej1ptt_=6EFZ&2SbMn9PYYHUpmnGqByeEa*~9r3%d69g=i6Z z9N?{t$q)J*5Uwj_d&P8AqJk`q+Vf3@895fD1jI{O!oT7<5j#y(THcXPn5agvlh-wK zaJKp6-+%!O6cX~EaZ5sIT9_!eO7V1#LpS6_|ApQ<9!_)Bnq8_=G;Sl-+-_hKi$}3E zw5RDZNLD@*k*3p!_1ETeQH=l44$c|pav2urLur#92lq%tf+&v9)ao^xdtu)Hi7dm8 z!OY#bumB2TQm(G{+@F7H(~0OYV1xM++)Ndnn{SY_w9Zt2`uJ^9pi1Gt>ct5Mfi~Q~ zXrAq(j?T9RuAPr%@iU2*iI}@J&o4e_PNLDs2pL;1nIR5L+zP=7PNUiZ!ME?i17*gI zgsW}ZZ@XS?Ag6#(AJNtw$oaqu0&bW3;Nj!`d_or}=1!oX<WrhW3mc7GQeU8fNThAUVxQRd28Z2iv-5#xEs8&mtE`79*)67J}q? z_!HS@qj}{`3fi$VwZweg!Jsabye>z@y)XGgD|}EZ{O2Lt{Ptrwf+m-2v~}+lu41&t z9<6)*+=5=)7e#a@A%>E4IB>p*4^3j1!!cF~8#&9ws7n$kbQ&%CKEd2 z)X7SGs?|hD#LKidrj2a_-<**~G@Vc3Fi=U=D?L{_&#nLxz#Jzuk;@gV+`);G@K1bL zO`8b{$6g#V=}vSB7>?U|3_pv4^?tlooTgnWs|R??3)1YA<}c4M%`B%Z3{q%y)j;M(n5KM z;#aW7!*C|eybm3la)Z;SSM~H#P6rOQ8W#-~wC zSZe(^RictLG#Z^a93QQAPd)C0+$`MV(Nb<10tANGg53NxEfRG5! z;P!q>bF)RZ-g(x+dwe(q* z9L4SJftoKE#F|{u<)`(>6}2~FbvXnRM3rYqA2rESNJe$U)_daF6Isey`s6ZPHFG+M zMy0rUx9qt)fM|wbi59WfpAISqYQU%b``@mCRqHZ{Dbie3>vOZ4G4welLQw&d&#UR% z{JWNZ)Sw;?QMo~30(Aclto5KE1()v6&eT;Jt=rN@cK4c9 zJV1gXG!f$5Vd0v!hqKP?8eGUqo#>X7O0H^`nQ2QJ6F-TE9f2l-4%0mEo@l@QQDYWx zifeO4K&Root!+C1wG2w%-ijlg41}~FIb{+JOEtr|KIoUE>4o}z)Y|CDWS@rSqZuaD z@bRiv1Gxr|s?p6b%>jj&%e$dgRMQV9R|1ArfLKTQ(UQbGvX76AH%})dZ~WakGlnI= z=NxQ3B9{lk73)`1^2K8i&w6`JAbYn8ypQXW7ORd8h&UY~8hIvQm?M_syInW)L%1WJ zeW0At8rtCL(jYfE1Wn{$ir!$EjLj5*k1ZX;ITC(<{L&NFSK8!P>ZYP?re`(VASkXrx4XDhAq9%(1pX39J zXpfwEYL>(qCyyP$mWNG;+}vkFxi^*`r*``jR3va_$rfRFSO3?FiW8B{&&+yn0n1!Sy|9t|-JLcfhOR&uTxb!rcE)GSm^T2*5 zz2Bz6n#O}yab$VEx_%uv$E8rf^LK^hN3&1mR>9AwRF(Vybt3dtUP98L!9fdefV>Cs9O* z;}Id7EpWa{{UIu-)ZN--Jl{>ix1dns2oL%h`>qS$3EF~A8c6x<>~;u!S@OW^HE+2L zF9I^@(_yv_p2g!;I~RTcss84vY>)F z>OuqNsopxBu@{$-#@2%uf2e2xu7Zuqd*5Bsg=!-mHEXC^nM6`53yX@THQT0%({OUF z(AARqjd2HX7>+-297Z|glRy4P?j%Ba=EFrZ78F(n?76ReYB19s`JdqTN~OMaPXiB! z-nLh$s3)U;n(_C{4q^VOSvnJtGmfL=Chw{_Tu)*(yrer13!$F@<$#Lbyl9Fym=6e^XY8Jr~#f5vRKLDm8-s%@>-tCKWo#X_ci@-+IN14|W(6y#_!Q0@vw#wm9;(F&L95&cLqc)PN@` zbs2m(NX_73I$rErbqyf^dg1EZ_`GY2LlXcoK+eC8Y^IC~Ti*dg*;P2&4;QlFaz@#6 z0H<8-vk;BZnT~>+ysF6nw7&f)t*z&Vz5s>d@tt25C{}NqMCL|h4}P+Lu${$ZHFU%# z%+zunv(mvaGrWr{z5-&;W5_SX}?8U(7)jn0ggUIr%aWg*{a?3F}?@^q7P=r<<|t$Vv-rn*(vU z^@a<)Y7gUOo^VKF6<$L+TXt(32GHC3r);UW7$Q_zdEHG2peE7fs}b*kKbu}3FnA#N zE8Sl0f&H+XaA!EtZd`@roZreKDm?%7AIw#pSBn{Hj%b(R8?@;y*%X}Mrm7vbT$t)g zeAC?;OqEyvnrA}mO*nLxQMoGUOIEGs#$N4v0F?z|Tv7)_|qeVNG2yuKF%Rww0df>jtO0c{qT>=4E;5Bj9$QVBEn z1dc*D*jn!0$O#XTEo6rve&=!pQ+2Tv6_)(P~Q`Sj^?ix>WsNFttFTy zJE`Xn+}R|U&;_;tAYR<_pFc`4FJC0-sZl?)@{a8F)Y-B^`MPOK);`RrwN%1;Ng8;S zh<*WwW;k|I=4IplKlv5R0S>U# z+#yqEx&D%HO!q9CCtntm+j+D^g+_2?YeizDUA_RjJJT2!fsfF?Qm@l=OzC#Z@*zK& z;yS12n296MA*te6*^zD0QSe-Mh4SI>W)J{T<7= zQeldM(bI6`&`C5^4kC!q06(SP;DZZlIaNM411&*GHb!I8A~1Ngc=5L7?pPR?=PFS<=ft~ zqaBb^=eY4#-r9sg9YXGE@Nw{}&+lsS${AcZVF*kUf61{O`e5f1XwUrRGQ`HqM}3GR zrG}QAZO?BLRhoGcHCPE6f>;JY%=IVE$C7q9X4=a`mLVh^cN!e>(psgP@73GGj_BYS z1=Ogg%NM1Gl!2`vDz8|V1jvV% z$I_P{n-w_k3F~Q-K4_0_(@+;=-UxnkpC&&Cid1Yq(}(~(d-=@}zG0T&OHyQDu01|K z{-SCNL<*T)LBM^45e(r^LoD4furC0$70cJ`{zDcpw&^Vpb;mxngYqMphH_gpHw{7-IUC$<{2&K$@>INTb7Fl!J)diBX;(l?N$u z9yWcCbIN5q(!1Z6){MfPPsag!ZgbU4+g5eJ^BG@|>k31ZserZOChk@ZKi{!}!B3#q zei7HbkEk?=#3@r3AM^^y7OrELV)tbh$)WM2Vhh|)y+vB-zi6TG`V}jPd55v%PD~ko zDu5`rhjp}Zx0@{yqy)@*(dcN~E$?6EuKs)TbI31~OWiHvaW+30zO4aFJ(e!80GrQ9 zZ?cakz$Zeho5jO@l=cn5c*<4&Y&PriRB7aZ-m<-*^A7v%5d9P7uB0D4lNHu-D($t1iojRan98y-G9Y1ygM3ME zn5&3wvrcFn;W1;^Ii=H8Kl!5PZh8K6X87(TJ1jXxlru)zsjNvo10xtqVzAq*8+}*x z+7-@*Zws|{T`EnMxz_Cmy^IiG_bk*HIhAb@YABX>Llf^gg&UbZtn%CPimaXgldM%x>VW55ShtMa87%$Tnul+pDlnZ zhbnOCQz_cTrB}L2Ca2QlVkJ~yhnLtpR(PPAC4CdjPW6A5_|DrKplf1OzO7&)Afw*; z(5XP?a2IU20W}&CS9l|Esa?XL4I3{`=vT-8)OT^7fNOYh=sE1pUnmZj^3k{1P~9t# zi~riR?QFbCn%Q=LiBkO>IW`r5u}Z{?=g@?Hop>M%xM@=-1k=xqiAfXXvX`l!+fv69 zf%;+9i7IpxxqgGfTlj%Hx__*2_2=VF#e~BsqzfCZJgY;(;Jr6Q$RlyhpmrTS=Dk1w z003fRM0{`bzsxb880LJN=mmq>^Moyw@ zWOgbB^G$zFy$+fSE$=#~j~^ za{2((I2xaC`d?&KT{XJ;Jf<>3xdfExj~-D6b$SKyT(pv;`>D$D8q4jUBl5IiZ$56p zAkW5B^Fkb7@S@Y$f2#9xY~jR&?!gTh3NLeSx}!Bp{(3C!#{k&R_7R}b2;d#AjZ5;H zZ}j|lHVVqCmNwL`NgH?a9&^Xm(Hh+0E50midcl>Q`V=*{KO{|(OMU8R8-um0o(esM ziYT*DL)|nONt4uO8+g-mugcZwRc1T~5SR9v!Uzch$+QAsTE@7=x{!T%K}i13M$WLG z6c`(22FB`MB3WoX9GJg0r@7G&&YpjV#Ea4Ks7W(fWj-tu<|4BiurkIFMkr$UnEK!{ zrCCpPARbQnVJs+2VbL-hS14ir2-P;}+)>D9XKBYtHX^8UPrpKnpNz8WE15 zG*fR$_N)vbWX;@nj`a+Aqji}cVkglX^yU5<)R`=Z{1@je9hqmmF}ZcgF#5^rQhd!} z1HfO@vp`Wbaw`5KJmPIjL(~#yf0<1Lpar-ihjw*gC-qvxw1>(PFI7CSimBp{+NC=V zQGs=TYqR!RFLk<@*?jY?e&Eb8M{R1G*=hD&tlE{?Q2Bvv(QzO=RekCTs=5(V`7}|5 z50v}GM6{n-8hUP?bVL_Inn^Ld`T=S+nM&Oh1R*_xtc=*xxNAgFE@=402ZUs+A;0E+ zP{Regu=lHBcNU*b*Dj8RJx{kSzaVvDlP@!H7AQidQ7V*T&lpZ#*y74Zac1;b1+Xlv z)BJj*o?hI#&K8W+&9kcTwG(PPKW*O7Yh1brYX*z~9QmSH(+pk=~L zK+2i?dzv*fB1FXaxEbu}I<}gs?Fec_w<|6Eq_h0iyxQJK-pQ28R@y^PgO~)JKqT<+ zHG-NO%}s73$;j#C3^2N7X*ho}vZlBSV+0Rh(B6%Dnm$B>UI(7ppBIEnUQq(Q_M4SM zp}$n0&;WDqn zYR8)!jh7(tSOvG&01#9`x|vX+KCP~yb>qrId@=tYakUv)#+Szm>;`kLIm(+?lA8qo zXU}H}%qC1AM@`Z}=DS;ctUKFfYeclEhODZod?ppwRp)sGwdPP4iDOka4>k;7;;=3@ zZBi}dTP_g%`K8NRpGqm3HZgy-W%s#ZVMGi!0=$DhdK$}-x7mEqfz(@ zrCz`fx${EIcrLg8BJ@GYx!}j_)8OL?Z&B+GAhzut-py`Xj`{0`j7Qn{Q6FK>Nf&@g zp-NB=!gZ&nmf6QfyeZ0Sx7(;1p}T9A869C(=YBXx(FWpwv`HzVdO8s0J*PAKZ;=i} zm>}is0B-DMT9g;q_N2NFi*WEGKg+oD_NGi1YuYjhr4te$L0f<)sD!rKq<6qg`FyIB zUrUbjUCd-@3Tw)Rd4$eZ+^>B8IWN1ZX;x#;E;Cus)(U63okc6=NuQYTaTlOSt{dVa zbkuR429e~C0D;+lCoSE!rSOnFgyl@6pMHU!mGRq(gSyBwN-JJ0E3;PLl+R6trS6a0 zy{m*|2_%v~`_a)yFEWSbn$fSnVj6xXu6W8JwtMH$W8`c)grkR{0r3E1!QBYtZC3nM z(jsB>0HxeZedydC;!{1q1G-OL`rN4xw2ks3Ts{&Cxc@>ob-ol6QFkIGY@IWmsIaJ! zLasnJ$1J*>P}cPUTa}pt5lVZYv&*OP_>w{||8)S`hAj>YC(gxfKdWOo#V4=qEAR<< z(f#A@3IMv6G>&2E1}IFH&(yx*Wi$3D=|R-z!a;&sf$i2~MyeV|uP+grilnd<4afPp zDEXDS61Ot4#Q^7hF_9hWNF|4n95XjrY;3}z5LXGk&0{9qkDnkcALkHCNWK@6RkWznxk$vnn`E^wC6b-w&la*LmRxK{lbdDEcK4-)=2@;+s`dWwRuXiYPU}(UH z?TGGyYUSUscB5~0cS#{{MR9acP>SQWEXCJJ$=Iy}O^Vl8y~d55@)hO`UkGYUZ9HlN z+V0d#$4ZOb`k|k|Ad$qs9((qn-&C(h~!{-3FB5%Do*6Qqc%2ZB9l&wlUl_@ z3H`<~K=^K2CDOQ~>L-MnU2u|mDLHy^VOubx4zH(sC11R|XhS(LL0+;F`)? za_gJZ4i13g*xB z{(qRT_$y1Yxal;Bd$^pTKU>8TVXND=lIY| zG({KV-iN2IGySijxTXI^l~MjFJG;sOeHx64Rt`@}PC7a&d)T8d_#{xh3izFiEdKjX z_u}#-Zn=Xv(NY2X>7?fO(WynuRIn251fZlCBHksTuADQx^!5Cnc4#~PpbP5(PayA_ zR$>^pjK@)OEe6^A*&fYgG36r*QXhr|XV2t(69u}Qn+wh7NJ(i=W{7w*g@s(}7$ONP zR!{r&%YLCmklA5$4)4vX5t}G1|5ies%9H`OL$op7^Q3@DH3MtAkznq%6XlT)#f%z&6M+zVv`>D&VlHN^1n($u$DuCoam6js5&k&FRl6aXygh>6 zG}BmOyD}6YD>lv)MnwZ?S#Dm=1$&T9q?@ViXcjW2{Ve~981ArD@6@vuSqtQYLaW+t z3xe{}4H3lf*Pk0!4C6losnD}B#7L?W^ucZ>{xA+Twugp1QY_Oz0({YNdXp7Qf0ZEW zQ>%^CjOh*W=k9dyX;!Ge);ee;n7yk3=`bfw3a|H^Aln)~l3M}gHTy#!lr!KPBUcs{ zOb$V9&D~5O-XM7?m~Q>^U1}U1Mc8~G@npXv{+Qs%Z~d{%a$2Y~+z6&Sb_^(L{{7d2 zhS2cKp~7H=eom`el$hFnb!s#q*{^ z8U;BHmgZCm046@>?zY3M*prwShE=1dX6vsSM&dF~D05i8^U*#E^YOHV8T!AS=G)35-v%yJkL-IxItmkmkh1I~Qg zZMOgglK@If@5JkA;5;!;`^cy*)AT>!L_>$j_a-i^jhWX!##= zQp$l2u29i6v7KN%WsV-8K#JPB(STw|+hVQBDZLvyndxyyv$S?8vd%-pyATt8cB~Uv z<2#6EVj()hcCLerr9-3c=Dozk0P=u%VH0WpMQr2E{S0y-pIAhSeVnohIR_7V zoO4t&Y78SCql*Boq|4!O#kcyA%;**>WEgy%fy0{@?ku*=BRvdg<746<4R&Tm-xNy6 z@lmT4pHK;S8yK#1CTs%HJByfrf41YGb(IQsLdGy>KiE>4i#m~m`Fhq#>RVgxFtuW3 zpgfR{ppqV7dK}w&4FGb&3#9GUk5< z_4|5y+(DD7&pfqNTuVE6rDA=0CUYU-OF9H_aZ~X2 z9#c8qC2_|+dXa^Lp^V^L?Nn#QM4Cft0Z|{~WDVQwI>{Z+nOTrjE?E-z3Noa)7{Ne9 zUc!=(HN~ay4f0snhFn8k?pZX&iIEF>+!jx2N9R2&<0**PnuUCYmQ^ll1t*`#28Fso z#(!&h3s8d(3U9Fr+ukb%>jzZ(Hhl2kA4eEM$Wd?-(%wvqM7b7i&7a~#vEGjnf19{m z-ppt3>HJAWCxc`I_nR!DWlS}ODq|~<1D~+d#}~otJ6>kl4X$^bcA+=zeB(N6f5dvc>Dz}nkh#gcc%8PA2LNk&uie?% zn?yTc4+tZ18NW4}?A+I9QyE*513_#V{DD)VkvS&QCRF@r$<*>_(T3+2?dafiE3?~u zV=<7aE;u=7ytNfezwdr-)XK=G1ZTF29I!ro3h*ojBk{{vxjL=yTwXlH*>XVI(`_4P zM(ie;hapNuW;$CK28^M>q(QQ(vs;$=QcSmF?%zEunliqYlOhqp)hLgZZ4S>(olMy? zBvL!-Fb`od#HtB+(nVAiWQ~V1BXyhQX+D@poHyda^{BSeKG_u#6I(8Lt$cF8gw=KH zNH3CwpiW24?UJH*zU=5%UqR5ae$77&$ zk@jc3#la+jWS0KV$}aJQsfoURonv+zQDe!c=VDxPXu|3USzy#fV_sRU5o#*QGhz*Y zqD9XNc-Rg4f-W;Kp0R&%WZnHUvV6uXHNnA;B}w((6nS+NOe}&deqQmjK(^AxQcSST zySFD+Bzh2#*z2^b93d^03^J`y8NVLO)ZN-kuZ@a2LP46+UDEe_w9HO!LQBsr9!VH? zd%MwGTtUgiS|zH(m+M+EEYF{L9h}|VD<$QnxNoquLJ{%ga(c2p2WwytKQ!{Cjh zNCE9l2^vgS=BWr`X{hLmh8}Z1M5YMD=B-AIl0;e#G?gOnnj7!A$7|MZUqua2pvO{< z%(Y0{A#&Klekg{I{$^vPujObd8YGZbj z1^;ipwj<$C*S4oGr~=g}uzXnS*5HGL&vXQ%c`wLXy3J*E9$K zwR+S^&oNGzCWsrs)7Y-z2m9=oUz51AkaL+kae`rWBrs>UPuWl#{jYBQJ!bvJxa=Cr z?1K_0QInnd%98{uvXt54^Pi*0`pXdAeUm!=(%Ym*97Az8yzwU9@aJCir5zCFRSiPe zxm*5WqOM*q7Q}?D!^eq%hEkSmC}*_|a+s|vRE@r4_dKi}Uh4HXMRD%7Ly{%AdnWn;_O`$fD zPi6r8cn7RWG79<(?(BA%BxwBAmkLjGh_NIr+D3*-DSs73<$OOlwE+B~L4K4(u5He` zj&V>AV3cM$JN4_h%avA}84MF=Kpf8gWVUo1ISk2Au~k(no{86WvCUG4RQGgjbp)xq zpcs^F(t~E#4Cua;mrF{ceI>H?Y;pvqY&W0r4{m|2cf)J{$0E4@O-;BjGRxr*AHm`b z-#d*tDcE`B{8TH0?Pglq8<08#(|pvPULm{n&lAa>F=-)`6DU+W@@1@RJLo#Y4Sx|< zR57MOv|aLO>;>Vm1-K{ft`MJYKt6t+jCOSkK8Xa;_N8`Ibh_`+`Nl6;Tf7GX)A>0Yz>od@v z5kE+B1bOWT%!t9D#i`>VBC=}mBUpotLymsO)|Cjr#Qy>LyTxVbOd-CfrdJ@SfESL8 z`CEBk34*u(7Z#wvVyF62jEzBj1?k20Jn@in;EY7`unWE_Rp5cyMkrDb9Ru6R2|2AP zxLt>9Cgb$#o+e4mR2Q5sYP>98xkmY;vk8(JotNFOzPYk-=aT0*$=v0UXle$A5z$xa zvBF`0sm)ok6f!Iirr_HS`q348YMbBd2&9adl=P+e=S;T8U3BzpBEII=6mG=?zw12a zXzR8RHgL%$QO00?C-lu<*B{O(_=6)0}#6wULJFA@nODX6f}qTJ0rUq7KJsB02-*i8RCpM*o0_R4vHL zJc$3Od#YeTk8CC|<9|09KXQFo>)sx^d$lX|9i?(j-=c=w^3MywsBmGF1tlOWMzQ|j z1)FfXP_0DNvMatGS&2q;Q8Yk)r~YnfA`%!P+@8M~x&IotCF#QPapvG0WNP1&*br3c zflN4O>wtF#d2E7W0(vehYG4QWZu^rPgq)I4F3#o*go9yD{Ju&WwQ;(v&wQl`c8pvj zk@2PGbg{9(mzMh!6!|d%vMpag(`t`5Z^A^_^=0aAhMsO#^N>9a8O^VqSe_|eCM7x1 zGN_-tVe5H{aHL?{sgrH#s~P)E70Z}jbCdQyQ5eSf{i@_lz6L;#3`PWXdY|3*EL`iR zC*t>U1(bb#V^myCzp(Eg=)^drT2C4NAMWhCBZfT7&*?QcfY+IiK61JT6ECkU`7f0^ z&G?}3lR)|BF@$^x169#?bx)N+v)Up4+~ZoId@RO6?(ohW>=-tZJuIB3k8`03ZXT|j zRdpr)gF*oh_QhXH-yGq37vgfduD$yF>2KTCs?4syg@e17EvVzl!K3=im9hWwwngR# zhwx(dvMm|RR2Hc0L`b8=B#a2>0mc($)(2?kbg^b}r%jnm`kaS{rcJGrgVWXr3%*Bn z0$FH;qLpV`$%6bw(A>2QNjIg&W66eO%$)ngc>kr&9=1i?^Ei74WPpyi2)}mSWY8!` zg=`Q=%Y^OPNjPjiUm{)@J|Cv-+|FI$Ie1UwyOxJ{*@5f-p^b3H5fgD(MYW!y^U#jb zMUnZ=4*lc4l~MpvjPD+6My_kJT2~8fN02}k`xE?m)S!$;A;(L?txvl zhZ%r5B&=<4$4F!F3vz{< zbRo|>aeaQF)-eer9cZ>%1@Seir<%m#tlN!ejmBD*(Zfc?OMkFyE0m?|-J(%HlhDKg zQ@(R5v6Ni)Xc?$Fma|pxd?Zm0{AZ;c^s!6&DwE;HL(P(SJCiD$j&(7z!=7=!y_#&W zew3=k5M4&@o7!L-DSD`7#vV7iF#nDg7Lq9sv7T4bpR%83838L|#SOZ#P~#{3%}j7C z`B^G9KzsSTZQn&pdTL=UyR4#F8k8D+0e%Gx^Ih3g$8tzayb)dR(PAAeb@NHp5o$XY zO-eWV-ZJM0A9H_@C{o^wrQmFahh{yb?MWK8JNiIfo=kO$wFFF`XkrYzaV4ax3-9Lq z5ME`o#&k%qR~(LFn=5$fH5e;t0>7QIf5M;=>;8 zJMq5-*JKWeu~ejq|=-M;qydVa!c&s5w$m z><}o^(ILyBM__GQjFD)_!E+eZC3w}UIOnEvKfcyUz9QoR=D2#n*O&JIR9?s?Rc4w#AS?Vn><#ltXbJ)+hv-&qqIFC*o`D(#KUirtjxdz$oCvf?n?0|@yK^?;|(Fvs}F{AOno7v zwLitDq?sGRt&I06nP+R&wJ+S%k)F9heYK~cWwE8+RZPk7_E$p65DsbZT*!cfb(h7k|}m-F8xw(>Is<74?#1lWkP$ zyTKVNv-<+Iyt_9>7zXrW^vpT+TPp=Z%e7de6VFfp-@?oQl0sO^n{9wY5;Cbd%oECK z)?&J;!XSQR1xcfa0{pf#fk7mv@18lv4tML)YJ&^NzkQt(fBEQE3%pw!IDa*76UwfT zQ@;f*yUN4|0*jD=+T!nf6Ov3`nuAS95?5JS>R?YL^+H*)tDjuZZ^PxHM3iR5#uDk; zD-low7=xcK+{v;&UiM?Bl8!bVhPMW_&tnto9CSNe`iCW9YtMq>DL`oFVu;>+(6_}kg~cNC6glXt*Oj|g@V8)SUAD2*5dPIonxc*eH#Lacad^hfl>#!H^OEVM}TD`0y!l^q3(OHw7y?SgAVN zC85+MsgzZi^!L{0JPBLX3RUH4{%e3)Jrv#Q?HTxTA@bFrsT1>0!Mk908}U%)GQi4_ z_ze@i5CBYsnswW-=Y3CQ5>7-YMiq|jSzpG_TyVVi9o6DF}x_=_?=Q@EDT5#4aYWb%vyNAzV69)s+w0g>c#O z`_puNdW2puNN4IDS$$6ch+JH-Jgwyvz2cj2 zC^BaqA7AiG82~cDt=`37IcMc!afjrj?E!3Cbd4bvmz=)iJjj%`SGQO*xh!kA(V?WK zjKrM6V!fRiNID-GuBRMCR&S5rTp&?$OeV7INFQ&g58_S$n(6=O-g&eZLv%W%u_Dc( zD$6mP&>1GY4QBxhIQ3h$bd`3lhXzbs$c8F&XbI5N=C)Hj40&bOtl6DF##|Jl)R zGHwVdfE7d?7jEs`;Gx)7x)Rnm5yKMd-92kpTyj|%D7YV|OaK5FeI=6(Z~{piV#h#R z8F1&szDZ8zaMq*Y%!%P?#O1U-5z@-8Fp+j~kl}OjJ@p8%?}kwY5K#wn)(PNuhhkp{ zW@CDlxTy1K>As7rZAkcwfc3y1GxR2)CgCK6K93^$jZN{13qf+j+m}{Don(>5tHvxc?M`}hgAu}D2f<@w;nlA2y-B3bEVsG!fI1X}MXUVc^p8B3r^JOV< z$y*+Cg=`_R+*o^%VDHk|h4}3vM3dLEtmxBwPI!Pt*W(xbB|@AO|#VA@&521+gALG<+1CaVRF7{yhY8 zFjboxUuwi|dIHbSq5*C=SQ{Hn=x!P>8<*YF-xG9Mh$45jP1v ztm$*bGg^UtdjB=#a=>kB#zXnQi&TGx-UY1&{gITd6he(Wj6qn^V9htmpkh0LqHs`! zz>>92DT#+zBYwt9Pu}<IIV(hV%7 zl!hqjYN+|LlyOvtT+v%nF?6HtRG>HUI`>b$z3il_HO5fk@hcJLm ze<(Qx5$lr;dykvIjvwhQNu=xhi_6x`=zIK!=oCHjc-?>zA?g-+88UG(NA@{-Y(u_j zLKwtvz`YEWn;v@Ro99AJFar;&rZ4Is{jt8}W&d}T3Mid&^F87UW`9bPGwn`{{2 zM_~Ts%H=nqwS1wK_pGctK1yikfAt21p>E|+N?#rfMV_Ns`-0o6?Lm#+a_m~MgDbed zkzV-Mg1<-N-(wNzLVjD*1Yv}Tz%0DI{nO`bZaE9>HL~+AUP>uCUbaARQ+E8g@{*uV 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�x zt)&|&MIb`Ya)m%V-yUW_Z>l_-wX7hzzexkgzN9X`+JmBrTqV2{id=)`O9fe-%eFD_rum zJUZ=M_JE^F^ekvb9@lwf5BCjhV!Bet6MgQK&h~)P@9nT zyY5nk!6*pnM_$3jQ;_QDELbiCh81s1cJj-Q5b%>~6n^&QfSfOLKAcQr&L*>AhZ-$=*y!|Y^O(LvK zeyC8c+@__TZk9J#SXMb>@f3a+8sr?LA~GqpvT5|dXNLU-rDu{%e<4uoPB2~~MTMGC zfGi`078lv)OrFz=^XejYKq0iPaw0fW)E&Ilp@8RP{Ng0Bw(YAjp!dfN3K{qDKd=zW zxe5T*vF*}O`zB7?3syK@%!M01gbYHKNFBVjyg(?_nE=NF5;;a9P0*M(!H+Z<2y{}N z!XJLKWpgWNM{H}2=X6<3j`J7n>sg!n^T-D}6IxW%FOiP!g_&DwWpTq3x(V?SFJ)OL zQBWRT@tmdBjG>Ssfft-y3I;NO$t|-2NUmplo&k9lx&E8Dz+a-H;y^fpK1=4JpYpNF zqqV)ua>Ti?QzBhq--xZm6x)-fHt-@gml2><(?mK$iIrvA);|WVN?Tk^A()%2?z^re z8&@9G(SXx=7l}VjZ=zV)Ha|2ri6oX!kt8@oR^lJ=T4W}*E(Zr46k%tB(bvK7gF?ar z`OC4BSQe$RbnL3br8G<8nYDf2R~iKV7J^w36wXK{A&ujtt%AXx^Qj(wUnv{h>rBhj z8Pk_FiIAgmn8%Gah{UbXInMof;*sJUm^4rZ`-d<&K6woPSHkvjZTjf8EJE45!k~3t z7UPeG2Vwz93bZvkzp1yg_PFU6>J7|BFp0N?xi)#_Fszf{{uMQMoVyd0js_(f)KocF zLE4(YrJV2C$R9ADkk|))(cSZp3P&`b!k21~@!edev{X}=Z|{cqt7&%$v$Wmrz=WLQ z_qD-Pyw6O19Q+r^#-c>r!41L=+e?ypeEdlbCA8hGkL%uNCjLfcbJj^(A1l9>RO0`7 zv2+1TbS$*442(yQnbcm?W(0iCj@1@dX#77+pa-f<_r^`4JO7T=G@xiPzpJ&xs&=NU zo@J4SK1Bt|@WE^p&(_4hOG(WJDpVs2jAuhCQ`p$+FR$~ynk>STtX3Fk?+^LMkskv7 z-x)wyVZ|0xeA34k{yWp7loAW!`8EiaJzseXB;D5)X;C2Flt_6g{4pYkAO#%pq*LiXdW<{_S}%n4rI=FAIsLzL2V9! zX~;a)5f}QuLU!9=hKC5HUO&AB7qVmWAR=TYEBBf)ms^)&`o+FD1WJh-s0oAL`9VvU z08N7$L?HA$>8M8mDZW{zM|9)sF7T%}LwM!?igXce znv6UU@UQ@t#y?*-0RVasHB2SH_rn=?%k4PLsn=qqN=hQ_-*|FWKI;*|8KK>`2a{@=@|q}OhVu#BdvQQ zV(mhupBb$+*z`9RDWKs`lY8g^|Gm=Mo=ZhAs zqVhyNa2y1>fqaKJSP6KmOZyU?uXS4$7w} z1ZUZNeydfCwKS8!t3fl@ah%0s4>^Qb2Xn=qmN?o<*|N*PRTl+TCIZVuup=XRi?P>i z1m~y3wrTvH0?5ayLv(Yhq@mT`IN7eDUz z=L7cSq45maN#al|S$)~a{rDW446O(=+yZk$`fAI>hv%w2S!i4|3f8GA zPm^z12)iynq64zQ&&lJnkn2D0N>ZZ2X2V+v(aAjdhp5(u0n$mQzISxDL1{V zRbx{^2R^8I{-R3A+BI>{N>7QAOLK%*{724&PC7Dr6&k{$v1aar^-Hrxa_}fJ)=Os>+>?egi(iF*@Lgz7m$>m?K?YB_z^G$P^ZT^4PdHT+ zl&zk(mOAP}<4)nkrbCaNq8hGv77^W?Jb(~zS)p_G>J%ygl8+yg7O=0;o-VR+bJtjB9F|qgZD;`U~ndpE89PozaSxzQ5exp6G^W=-B=P6o!0$ml{ zUe8p=f_M!PjDsfvjXmWX43&w{+oB|KY;Ck(o7p?v5lY~x&9gi&^|9K|Kpklk*10D5 z(>L)_k`Sn(Kuem9=3;6|N9{{!fN15njZFQsBTCVlmwPYQ^IiV*cB`k)+@#>Al+rd} z=f*s=7kRzfg(`Y&2^gs|WYKZJn1J9G^1?{nt*OnX0of$$5Pw79KjW@aHxjmO;8us@`nWtx`!e(K#g$f z`;A%2o9YQnB)7R)CZ~fMG#FimU;So?zO;4Yrm)-FfHq9xV7Mlb$#)TxMvCF&#U|gZFuuvtD z$qJl$p7DD>Oi3hlFX0)tcJ1+2^QpNLWgFOC*q75>QAxUyUc@F3K z@p#BpoZUq9$nuS6p?SAI(WRJAo3Nq8fHvPdU7a1PFHZi>E zozxac?-soxL3#<>2Su+1D;2QEC|8+h1)XZ)UsO_38dQ9DAy0ZJza2bq7VRJH3F5?ZLiG`tIg3!m%QIdM%uVvgKVj zqHX{y9pF#_sfaq$Fyxt$2`*6E!`bOrCGh}Iz#zT4CHoGfX-}7Z^G)y{*S)Ll_Emj+ z@>z}B5|M7u+4ZcE_$<;6`OPlE|EhMOa$ydrrxyb&ia!+$zT?`q&iUN?f`6dgT0Fo^ zrv<6uP>kmc_@YJknY*wb z%@jy7q7o6k3Ju!01Uw{r+N6uoykr^c%VVBfgVXop0=Tdgk(Oz1gVfzV+Zq1tE*YYw z>vXs6;!>t6`CA-^%;qH*w^Gr~d>6{i65SvNAwYBgkr){x%hOmsNHp=spnmoy#!qga z$@%%vncCAB7adZKu&l=svAGsonIStzSk)jdYG>uiMsL|v?2-fM7qwpyjca*>Xa;2# zFXb5{do0L#osAy-=yVK{*YsgroiTqw>7mF&a`eWcjMm*|Fb`_-2vLNW^g<1d_;K&G zr`}^uxP^Co(zwmJ^VkflGg#Uc>J`$r{?-@;`d00S$nU{Bn}I-JV=xafG6Kka`QP0| zu)CB{#t-NO*jC_Lk2++94%#8%Ym}e6Z7RD?X{S6q0mmjR>@a)T$gh5m*x9fWD^jcA z2>;FFI_ZU&5b0z2n!FCIyJdamw#-;1rVIlzPU=u%x_=-aemLS9ivoD;;?T!X$@5Cq zMFFDDN1?TVo#>xWWSsuX>lRXYkugxN-SeFIZSbHyW{SgYClbM_>mBscK};y+ynRM{FM3&;evO`7*v{ zNjJcVyXw8sm@W9n0j&bi7x!2mQNcSAN2!b^aaTDE& z4+c;Tbfrlq!WSsgf9UgnMV0e^mn%F?9d}w-$_L- z+Do{;2!SAQe^bOLF4BsppbovkkJVK4N*(cscq7y!gz-SeOSFDD$lUQ>wW~_5Fq5Xu zIODr_ya}^FQI9=|cAEEd(Kd7Ms=%wsJcC}d;z%zZE`J4oJqz!u$ljvOL``0!zXo-yB1-XYrT*T{n+=*8+Wzswt>W+y9< zF;E0tHw%I$3#5h*>RNGkV35mk;fg~KbL~aQ59B6>r?`2V61atBLscO?&0?DGZmP{> z!*k-G5zN$4{YXaXm*m$RNox2OX{-2rQ4>6UZpXtOJsz+E~b|6NB(& z3B&MTv_V&qf4Vy;3+E^BdWep35WtOpDx558q_(}&^J#c^m-vBO%hvC=i&8#?|!0K5`DtH zgJu4}m;Xk5H@zC890()$LAZr)tdl;*c0%-}z#4rYLQib{tTJIL7k%LBJItADuVMBC zGXN6__sk3QYduNcT;YPhBImKUDGNOF9ed>3k~u$b7n&tFDd$(BeyqE5<6h^WVNLBJ z=P3aL+thF*-_|QX1J&ncFTp`vrIOJ97`xjs`b*FW9xjLnhSoJ;;t|H zRd$OCsC`)TpS~!yx2x9o>5QNVO&O#d-Q8$2E?WOlpO%G4iK6#DS{91vxUSGu7h*QJ zgNy1&bl}y~o&#p~spS(pN^a5&l!8kL_lro`sG6GBzJ?FYd0|sE4FU+Lzsh<-^Ye?n zJ(D^(f~nX?-)gmmuZK|YbRMkFYc&f?lD^V)ZYK< z3o7UZQ~v%h`It#X@YllDNN0af#XiwQ)A7nels%TNt2e1x6h8TD$#o(qv0FII?-271 zN51|85F*G(dx9j&fV2uXmZELOq%ZBa=lw)iL{#1sKzx1(cIq44lqvkC!6UK`asO@% z*DugQWy8KsQCpuka`QS%wnrQvI$+?(S(muuaKX+HuW)S-!IG6JW9<`j&({-ih7a|( zd-x|7&qDwr=?gqE=Y;?TQ%=0fP$CxX#7CflBHQ@w0=8l0+S6ZXQ1)?P3VjL|gKH)( zeyD;xyvyHJdf=i>1f7Gt#eyxF2u}_U@*=B$39vMN#ltR5sySW^@Q^w`d1TUU&tt8A ze+I5AD zI7vAgg8w3uHmUN~OESAZk!e{@bcpO~Nf*iP(;G!YjLlaeN{fMwkd7iB(^$;0x;9+OsaikA%d2AUy%! zjSchcQ{sWnhC+pPtONp%YpsU)n5gb)WQ(s2a*DB>>q7j;=0=hr88uO3Z^XB5wDsQ$ zOGw(hm?que{s1zY-Yzu7Ol>_;zH*(gb9jv3jLc#vsfQ^->)67ZZ-(8Kgid`Q3|k{b z$aq!d1yTcia4j+HpbRH>D!2*>j@QP@#Q;{UbVDr_UNjjkj1tR{nqDg~Ih6-hjxhI?~jY`;9Uz1cGp z7~z4#?rAtt2;02ZnnHbXGv{0iF<+WW+{YHhU20^v;8!=UM&;M~Qc&x;`*aH+Fp4>T z3*&2f30^r1V!WFbObtXjYT!%+ErhHmEp1pV^(Oe$QoGpX*57i7P~>QnF$utwy-#>u z^G{4NI-%?m2=>i?icrMYjwT}%t*G@6y4fah0k0TP=jaSDSGY*ptBIi)p@l#(P>NJp zr*qvy`8M>HNr)w!tp~im2lUFm)SyC#7TQ8Ro(RQ8$<7TLLL;w07wlyaJOQQ_eoym= z?D_`m|8h$uqE2s4EG#&viyU~TwcRP9`X9uqnthj}P1m{<=-|r9k%+(p~wW8#q z^JPKD*CdZIt*jZ*a}r;^rqb|2roV+-L`J?{YN?h_jV1vddv59R5FM`4niol74*Qbk zW&|S_amRYUq9LqPJpV{dwF#Q;C4YDEq+w>aCDc8h^NeZByj8~xU|u_4e_Q--G~e~c z)nh%Imt_|?=xERFN`;W1d9dxG5~k0U&L>yAB5qk>Ej8sEhThUsuCM8L^A{H z0h1t~Sm(;eKOzMzrL6i^PcbQzJX+j8?T8LW?jXXI4EFCgDyBk^Yb_QX00=dRw7{Jk zYr^QX&|QzztqpRH2G;t5Kcc1y=lsaQamgQKCu2(@RHB3npkFCAQi9kw_f`fWsCSmZ1kqnRX5sa*ZLd|rUESW7z0_s3RW>Q! zk&azxHb+*3yiQ7yeaI0ch1qsgmgVmW@>M-3F5XK3tg6wSA(h@Cb%{0=l*2_@o0_gGlv*Xe5dTWna!QtG!t$(ZAKAw4sKG8# z%S;9_Oog;K^%@Ee33MUIUwBFoeARl~XQBCt=Xn}rJ-ncG864E#kKiIt8fV;us1)L8 zN~|Kj!(_pOe0=@S<7MLuOMg1Hp9<5GSahLuywf;Pk*J2pFX!6x^IG1?44^_vd!3x6 zG%r{VcFTK!kv7S_gDQt5E%uA3fmN4f_UFyU$)-z)$8ng&t7B@6OBgKeZZD*(RL8vE z0P1siEJ@MSaFRF>WaWA|OCw1~Q%4bEp)at_(EhxMh_5S!D_0#fXpmR?v14xwt5T|M zsE!mAO}p#ON}Y;B)f$pemI;_uGcPQZ_Sh^-D}8E+mkqo9S`f7J&$eX`=85^8Hs0yP zIeMDOl_lIm7rytIX;3PFqeUm{59D(O-xkfgD-qEHx325kfMJy5DjwFLQIIdTm4iT) z>bRf4<~oG&{aeXo-(aTBT%>y_Y%AdyJqMzAvGtVFH* z_DfRow#t^cBpIfG%?Yk#yT_%z;=HmWKtJW3mNmz}GuMy)ODGLgmm_}Qm{V@Falb>_ zjSaB2y0Wwkwg(uFLGk-^wI&(Y)(sD_$B5xOXM3TJes+K8_aWNm@aLkJ1iruY$jLda z@DAb>QWEG{0kPhc9SVwD`#x;5IyR@q^>N}&_l~&xV{){j9ki~N?hs)Wa&K~{ATr_c zWF+hp2~~Hqa#M{p79X12Ri~Uh-I9Z7QbWb!{IWe9qL&LC**#)8qk;}a)12d~g)#ZU zG)>CP*knSxe#EkCKw3%Knx+k=)TxC|v$Y`Jb!zj-Zy-Y-yev1dzque?RE=E#ILmO8 z64QF;$QG1%jeFnAznXE0ibO>Zyeuoa;8244U62R5lH~j9t&9+9sg6{!@(ziof(bP0 zix|++v3(-6!>fk6dy{DN-Ed_MTJ0YsX;n8Dtz@1N`O{4VasEU;37ptC;qz^A(i*10kQZ2RvmcwAEnuK3cV#AmX{UE-ecHM6 zmAUqYOk4r&Yn?~jeooyz7S0nuWeeczChOkMMCu_-E5sDSx86`VnF#@@aiJSZ2MZ}& z%EZ*`b7vwb2erd;x&>e>Um&vQriMbVYMd-!6i3BOnimXI7c!7gm|D z$5oy$s`vbtP3EAi6hiMb3fplnmsL6;kIUfrui^ZG9=XPyY4Ia|- zolBc`Q5&nxXOKJ6Gm9dyiv3QeZQz%#X;r&Dz9D;q^se zXK7Ta%mHY(zg3};j?p`qVt_p*OlOc6HV_{>$%3%ucnUxb0G#+1-2xAPa^kqcWRF{( z{QYmmttZjn3FE|riByk?UN6cS;hmE#N?8|M85oME*n6qR5-l^1;E@jZnN>JzIH1hp zU(y#bGS`+3koh^;i>$E+b^|Os&ZZ5zqI@m!vQ1jQ zY#rL3C2PhFiP-6*Yn>1sLrYI3tw6j&dW+)Ae+TAmPdg`t1ITJldX4`B>aj;$iEgK- zC@)FuUCxk0U6Ntjp8<$2oR;T8-X#t!r-rH1Y$Z1q490rFXv(sF9$nM48^HjlV61HA zB~T#|9p2ZMQ9u}H?g7IxOnvF5yjRhm{xBKQ;nPMF2K z*i=-YzT7DYggv<(vt_LcC-WLU*%eMG6dBRl`hm%03Lk;3h$?Kt|NZiQW}~ zDF!XcPM=Ft&TUwfD>@u?;zn3!-Ny-yk%Z`AX!bX1LXjEixXipW_PNKr;>TnSL~2TC zO|JhNQo_WVE@Uoq6AY?(byFNaw{=}V%vJNsnoH>v`>(J13BdUP9)4UbvI4&*deyUJ z((&i+YaoOVF1EnUi4B(w)AC+W!+6s+X*0w*8RL_&^Bt9DHv=s4aWR$KQC%*Ye4z{7iZl#RFW9DKq#O| zj_vIC>=LADNX*l1Nh=8pKrbKCh!w33_Y-ELWqOXt8?#zsicHIjKrW0c9DsgI;cG|c zu(SLP#Qd`bn@%aY7l_(@0TChleJ-oqxjoQmVHgB!OcVnLZDtqAZ9VtP;OKbnNr1M+ zCcwy+lP|8o0C`udaEka%m=OzBLwLtLVc^@TKZ3kH4XTgA+PU)b01V~K2&DHUtWrr# zVHMmb?8Ew46v}BR8&n8UQ?sV=fg2*75*mWCE|h%{0SB$o$jMWrIo98C0?qRe^g8~4 z2v1RiMu<=~u@z{^VybS(YK$SpJu4B0EL;u`oNM1Fm| zP#yS8I%QVgzAM<{j;1&aD)YNB-QxMR1zX2?^(qvLkIF!;8zeLOXuxqVUfNXjN&F=# z8cCs|Y=PeqPjw?CJ0c^6JzAwoW~M{UoXAK5@uct2t_PM2x=6~Nkp7u?hINk7fRCF( zoyt&l1$mDbIIhElDpogOf0n>NEtjuy0RMgJ6Y?lBZT3`0zyaAtT+p1H6DWmpxNZN* z=C$?h<>&C>O{NL}Vl`?v>>i+c5ji9^0=%m5f)wUKmgVd5cdw$d|Hj_-JcD>#)}nQd z@A1(d1i%Q*9Xr$FVKVfZt)|N9m zDzWaC2oKaEf_Hj@ZVSxo+n`i}Y|$VI@ID#w_medZ5#CUk5whr1R6pe5W<@gVY%bBX z9aD%TplC}i?lyo2-lt2j(l%3bGVq=1P{LeKLqHV?fre_OKJ>!egeck^-CThf1-wV< zchbJ&H3ar7Xp%UKh`3{~hi}~+LNc^tKDRW5Ubxt~FtiH2xPTgGmLny71E59$8g%!7 z3#2h55yFwnqQ5DA!w&U8-RAJ@=NU+orRBs|s?G~v`${SqbGnL&)R9MpjpLp{wlq~D zIW_P{*kZa|ECEfV+~IObd+K}9*TO3=nq+Y*e`wO14DcUCpFyUazJ%)cgeYg^t78DC z*n4wIj{oMGV3hfVK|d&tX^JjRUsQqUe3CLq zBf&sPd8$j!&O%Glsgt?*c=V79Gr72iHd?*hHZo_L4Je2k!S$zJK&qy?v-RU~O<)_U zCLW(0x7CiP&E=>J6ocTs%^5}v>3@HsP0^N4RTe}hUSMG`@6WWkeo(B@Z~!_@e|+_N zy~rBOa>EL)a4vj90c;#QlqC_FFF~rlZv(^renSdIT+(pGr+SkJP4*K zVOMs`#v%1q9+n&Xbf9bhmPvE~IFM0xNCL%7Qp$V`m5wA{q*G2oL|}c=YFC9!=aA}o zFU&q;c}yaa2mKK_$CC_OHaajpP+IYbL@&R{il48ylL+1MyakyWwhW1*TdS?)OpZQs zod2KkWDE68&lBoB5b{tR_|(FQqvVTPzU$NQ?x<&s>&Uungo_Og;~Wr+b-{e>WE-{v zEELEzjLUC8@hU`$M>5UQ`bU^w^Dg4FG@tuO^C2`e|yU;U86Qi|lr=xUVc5m9QdvJY}$UCcQ z&^f6a^mP2;jxY1v{6{s}W(vG8q0PKltKfu_<{p@V?jCw6X=&SpOYU6}?`v3hKAE8q zf}95I#eLYd(DGs$Nlii)MT=_z~YHioqh3sXc{7oRt3K=dpZo0{Ercq!!`wJtwIby%7iJWWlj_)@Z&3*eVsA*eO3H^DO7p4Gq0 z?D#^v6vIjCUVNYlQZDjpu+X5F5L&jlr&w-gRObR(MpY&)b&m&v@VGKlQNV%@c+Z0; zoffja*4%e%%-v2)$rgV#hb}VD)q#lS_L@+G`{BFYAZJ$iDwV(tV#H-O5^)^#Gb)fZ zCkkZebxZyuE1v4a`W_6CYPl@N5mUuHpmaT|x+0#+dxhViC}*V~zO&^pWkK z_D=Xugu>s-gV{__N8DAEKdgQMYIJ88^uS$$KSn1|=B=v;tpNzqa62 zdRt?0NEGb&0t)Qzyn{5idF2^B_3^Tw4CfoQzs%Q0%~@KGyNAt&sX1z7bS9 z?o=h(O5aw>p0sbPK-V(a;2Q*0b4$$_g3n@(vO$A@nyv}GmC2+1l&$;l7CA2v2wXQX zw%lL1lKTjao*9L_yo-Ir4%~&P^uR2(kp)g=0nNrOzyvbWPmPA{kTXX*8XnV5A4mYL z!{yj#QDw#$y)_Ov(l9a9z~IL50m`y?oy*+#|)X?U^vLy1qXl5kKxyV@uC zsyn8$WBrsMkn)yFY;lYhG6hI`>Twz=KVGCk>39iAP;iimSOXJR1gp{O@%8iwF4mF+ zPMQNG=nATqe?r+xsk6L05gTpWUzpb`GMJ_5qqwxb%ya%?@|T*mJ;$o`>?NG32qZLX;R}P!v;% zckR>;Eyom)&em5!o?vs96p&#-koFWe`Fw`M@-u@5Ih=f0rTS>DwRZ7xFzEMG!s3An z_U?%V9*Rr87fyksUKvGZf(KX1)noi-1r7d4A3|i8iH%co>sQYrNVYgEaU{lPn8(Y+ z6q>}@92|A>i4#$P!KNa(Nn)=s4Pwx-oc3+9z)RC$*5RsIh3~U#g0Da-#u7{l zRKBH(K5d~i2=!7dEM45c-g4^GK#B)hNrgDg_$A$%h3x&(ZzMvsfN}`9jQ^|j-0p|( z^)-Kwur7#tN6ujC{LhrdRYHLqF>1zUh3*Lf%XE;jd&sjhu%09q^1!ZlmmWWoi36vGZ6(=t`bTYmi@GfrfI6=`>r> zK5Vt+Se%jg4A znd@}0Sd_L!qMmrx31V@l^!AXDI1wq3`|_}!@>*Iga0%FBFCGy$@F44FFCeJ0hzHW| zvHEbn^8i?Jq*SX_LZV3sRrqT$`0<|{DQ<7>Q>o8->Latw#3`i#$$NrCrUMJ$U#UO> zNAo$9CAi(6;EdRz1R{i0pjTj#^$V6er~E--BMQ94QYf*I4xtrSa4iOfjTM+3P|II< zKs+#sq@g3a1YIuF-Q=mLa$KQI-eQCN` zxV(iAt5H7!YG+9_9RgD7kEW@Rv>K3*L1QJjXalYj73e7^?O-~YWK!djsO4vV!+S< literal 0 HcmV?d00001 diff --git a/frontend/src/assets/nam/amp-cab-premium-v2.webp b/frontend/src/assets/nam/amp-cab-premium-v2.webp new file mode 100644 index 0000000000000000000000000000000000000000..05744a5864b1c1cc455f3869ba5e55bc94adcf2f GIT binary patch literal 137978 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

l5 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

7}A}wWjl~E4WTU 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 t>RHEI*tbBb&RwQB#mGYI|3#SVWcKQwfjN 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 literal 0 HcmV?d00001 diff --git a/frontend/src/assets/nam/controls/knob-black-atlas.webp b/frontend/src/assets/nam/controls/knob-black-atlas.webp new file mode 100644 index 0000000000000000000000000000000000000000..d57bd49eda484faeeb5e91d29d7d117b964b0d33 GIT binary patch literal 1076530 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%0DNfEENp*O-x`H{p=V_=%M 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

XbJN)3JgQ{pGUGkkitXS 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%0A(YLBQ2D5 zDB701_VC^YLIMOmch?~2cF z^9x6aR7wioj9g?*2DNIyVYhBYdy{C9h#UKNB}WQx>=zMlMRbs=JjI|s_u%7Ou*kqu z=w==s#;U`Q$F^Q^zlb}R>A6RwRQwpsio;t>>H`=R_xME!1ldFeM?C_)g+j|Rs><|z z>6`8qnfS^A-K#GvIuqRmTk^LX?YabG?3PM7E@cWxf$ll+5X{>4XPgR7f0V_6q+YAk z;#Sow(46TZDWH)m#Y|y_sQ{l>Sqi?YAm*GR1`wSvb0Ud7|5A~08I)&HQadGw&qs*3 zx0?2-x7oI+N7k{Fxhq3*%s+})TUc!D)uv?3o)N<_-V@^>HAe9#K8ImaskBqnx?ruZ zB)ep$BY(&IiTQ@q&PW-L$O|kms-%p4TZdkGpX(h0j=2k^9_1%0)+C(7YAs*ygYJO$ z;ddb0u^Ua%m<=gkrq{JHr=b`d1G@s*AnRcL1eR=Zd_qwz_nUeB(y;pb3@5Ko3|P z&ZYW_6m!lwF*2b`{(8h;FiSAll+_Y89vE_<#6h^0O%ZXsdc5J zXxePe3q3Hf7TxF3a;2^K0+j~tidcDaF-xaY9VbVZdT%Sy8vrnseCwLgzOaE@P<(;D zx|$tWoVn?z*03D?eA0E*50F5573SI8u^xMGk>f>%32U3y-^>{acEa!k;pDz5wGy|~ zo6y|3Q7NGDJEDu`ipGgPvN2 zoLWFos*}Vnl8&Y-VIr!9;%R-uHmzTxxydn+qnx}p^?IwNsAdhnTnOBGj14r+O(sI+ zh_f<3(jrBUnsa_6K`|89%0K9^Tc0Ss5Wq=y`tWbP!jI&PUM?_o@pi4)x@#pS^l_Hz zsQSS0_WIv1UOna;KJVNOq3Eu>@%$5||8tc7qoaeUN_K^jGxiP(LHDB|cywr$UX74s zLx7@>YVmgsW443HBqt2_JT1n_DiqK);NwO7?^cep86{x@%fzch$~r2fdkh*>f%YkG-E-2>!@02xMO`0 zBq-UVf?86PzhC4Tjwhu9%F1wZKUc8CMx@RncR!GM<{Vdw;WpjR33I>_aaTpos$O?I z{n-H<4Eder=V$*Qk5gy&So6iZNZmZ~3-$W&eAAjZKfv5-i3bmr|2;MRVo>Tr{QDOY zms^7Y6UT4JhXVw5P7-q(+SD| z^%iop4xs+uUDIYya-qis<|EE6B_WAbms{05@5WaCn|=t;^idfE_C$gxoZatoI#EQ4neF)}A) z97tx+8MvX|?Vb{o_o!?#Bt{d>D#9*=iJcLgn4i3u3Lg^~HjSg=um@GdKJ#Xl<58{s z%M;BbOU-IeS5N1*o6$MCj016LcFY|%R>ZvwPn%YgWL9HK3LGwwR3k(ikGy~l{dR6g zJtVv+)5#zLUpFqH7f**gdyYo1V`?>^=G#A6J7@Xi5^%0$V9%FK0>V(W>B9`DLvj+_g{ueFhty1|@h_m${v-uLO!u8GKx{yrO&upY;i%N#(Su65 z%~QiI;OxTtH*u`#9d%KP0SoeOn%3x+#@HqtnK)CXXLA7adsUD`nJdk%YYa@$yZ`$6@TSrz6gI(8;-AV zVg#K|V>Do7SQS?%Oh4`aTmE?DR$QFV8_$PIZJ~+Qd4Lq|j)2!qO5`9_?b4YxR)hzP ztc>J01JvsKX8`OKMoNsd>O!GOk!yfs;LU-Abq}OJ&ij|d zZ^Nn+WBUURhTyh84k~fi*v~j@Ld?idTf3d*oM7>MqEayc+G_z@F_WR&nb)xMveU)hISO+FEY z<8>G#T+9HVFp$4EGLzE)$?q=@EE++DtpZqo9A|e-meJVbt!mpM_;SS0O%oYQk*baL zk!G{;Cvj6*MH{$c8C;29^25y1O0BWW!k`u7*JnJAh&_}8ukDCNL_8bZI4|e*``nDn zKcJik(g~&p_Hkxm@TvTD^!QAvV2s4vJP^@T-%vhg-Nt(kIJd)<_1E}8cHd9JLRr1@eACcRZ|?Z$ zGS>gwpO>YIT69uDXzGnmVjr)W`WPx5NVvZRR2-*UCwOzJFaQthpy!@%*ZezArY; zSl|Fbi+NG*J9^jE?5OGjsaHxhBQ3b5aH7wY_WAPp2cbJI_zkRb?7lx&JM24y6fF-d z@0hC7tf8Ma0N6u-`)U1CE%GFtZpozP<-P}ha;Xefrt`}w%NVWy0F>#5!-yE3!Oymf zoGue-&)%KGAp6NXQtB(LBdXz_Z%3xGHV^Yf^7&B?HGPw`G1sJn?SY8+?CM5)+p&P# z+y%)E2%N7xF$KEkh8W^nrDjj+MPz~=?~&*pKd7fvDyA)1kjUXSX$1@578YDIZiu8! z2%d2-5N*_IP-12*1>Sa-(7i^UiuANh3Rgh4Y*`{sqo>+6#Lc#;0S*J`h@!>V24v+3 z)p{BdDA~k#d%hjY&6BVS+^<6&Z~$2y0TxmSj-?ioKPm+VP~8wNg4z6A^Nbth_;^L7 zH%Sh7ah2Ji# zWij-?R-7(;*+PyyX^M}FkhZL$S#jfSG($1<*7}0G5SWDiM8W;x59uyj>^doFc3_@$ zAtsh|7{JBH)6?w5pex42HrL5->Xp!ye@ zxJei7ItQD1%&DAyuIq=R7^+2IjDMszA;;_5y5oQ_%s^s zXngwhALnXsOWUnN4u)T_AX-S_gLB-0dOwcwKtV?Ni;o|Laj+=lwLsf278(&bh1$AJ zVzgiRPd+)|4rg==8N*bpW7ZyxAr7>$#IkYG69nIa1GUz%bGE0kJYDd&*! z`h3R2`uw8UZpgrN!2Hz=Psn|MK_p68pFtyGps;Q<1Fvg`k<;LC7`;eo)i3TON78qm zg<%RX5U#PGXPhc+;qMgMbjhcgntJy+98f*?LwVuxnyJEdPd6N8*!1j|@K zc}5Q8{u6ue*d+=SF6p&x+qP}nwvE%aZQHhO+qV0(ZFkOOW|BuyM{55dCkAz?Yu9^QF9fD)1o(6|MCw#g?lkJ zb2_ds-)|GgLSA=CsJKv;v1U;PJm4jcBIolWY5H3^$l=^Q(_mQYRqBr`c1vkSsHW~* zp6B_^BEomU)jkJC{T1??_NI^Ytf#g*FfX_e6H6Kl@3zkyG3x!u* zzV}R2z`Zt}O6ZU{TU1Zcrw1w|Jc-VWUne{ajW2F{rMJeet`Xf~-uG^WAUh-8Twf>wstQ@21X3?kw&~n^p4u&=VHMFe!W^Hcs` z2aFshvqiaaggErwJZ>rI6QKWuzh4$gOD$19vj1)Ns5UZ&*%-&nU1}JEts5yRXEp}e zJ$y`U;^PMdKzU!susd?0C-GIu2rWhx352(_*N z@CmZ8q~1W~4_^xO}>$h+=UXy_PK^?ljDHa~MDe7SDuLAu9)} zR?>h{uwLWuZSr?Fk5SJ*O*n4F8^I9D)4nXHfXLrS#smGV^J0%&`A=j30WiIy{cvI( zgr)MQ7O1&1uS2WXZK``C^p51OAdhIHsPCK(6Y-$g&BKTXc1Lq+Bu62yb$YwaR8Hh6 z@|%7^J29(v7s0Rv%;kGL>4L!Q!qYdomOw+f-uidj&%MV&PoFS%jL+cvSWRUuFGW^r zF6zHLAh9@$AfSx9-t(t1S2*`Yk3D(t+l}|{lhw@iV|FG4lP%c#)(^$VpVoK5x1+nD z^yyRvknm9Js5p+#j>t}Iks$8Yv7h6g`d|wKu7eh(gY{^YRDQhC0dGU1n`oqF8kw!e zE~LK}rfeBNxF$e>{YH*#aW&h#GJgbCGUQZCf$hnsOt z;Ur&K?W?q_u0pn*@w-{&xFZ2Bj@i!!D4OqBUP)D_1Vg@U0I+94_X@{W+vOQLT+B@~=e7KvfXzZTVIfvI+3SkJ5JTcG{3oxDns4|+Xgh8 z>Pw#7DQI4R*+^_vq{ZMJTUVO)eKS4vgef^IM(U-8X8Bc+(KN&4%Pa`#en27`jD{=Z z7wt7)$tf>wRX}b~0VbAoD8|{_!^6zmfD6I+7S~_Uk`JjTS{EECq=m%$g>{6$pfolf z-vE^;Rv@HJ7CeWs@+bx(EV=>Rzm{^%JKlf8{4XvGl(w!fW5P2abY;lBRA?~45_Z;v zPq&Nb%M*Zs=pWU3h9Tv_0{Vmdm_B7>jDCl{l_UCx+pFjQu&T5dFEYx4VZ8cmoFY#r z%LK^{|EiapdRa(?br~0P zI=lNVVr_Pog}8Y(yW@OV{r4sR?evQ?B|UvY02CzCB|(L?Z2XIF(I*)?&%IpbQoC39 z*yR)GJnB`Fh6wdv3|=w^ZKIAZSX~C!T5B`3e^?+n`5TR~D74%fHrtqG@m5lG zp|DGZHi5=*l$&l@pA+hDNZz->T|PC2IuFG>NsS;}w2lJGUd^Q-a&zP5Ke%2!lESn7 z4D5D_Mj;*vB#qyG^5Wv<5z0p8yYz*(|GKF}&sQwYh~927dtTpNa2RhhYvA(s`7?ba z=KGL}i3?>LV-{P?177VQa=IpwYJ8ZF9K}C81%;>GsQtcfx0-2&Y3j!3b6M6UA^Z~7 zA9mXRl_%Qo?wp@T|-CS%3<7*eOr} z9Ukj|>LL2_M1@8q({c6fNQ9&D!SAH@(bCyFt~)09Iizybo)1?m>>G^~B@Zm`sH)S9 zp}*P>*uAg&LE~c`{0N<9>4fIR;r6c{P&o*G-oh9mnQ#0`a=j!50AuTnk;7!BuppKc zNBZ!f*5BXS4?bd5aFtrNjzu45RGRoU;L?5bXl%$h{k;aA&7Qi0g zkqso<-uNBEQ!l2X%_buNkp zlD3B=0z5iIv-OpPtYm0WFF}JgS>k-HXI1|mt^n9ua)}elTwUx*^vJtB-$`nq_u*z& z3(P@)1_)>M>-7bxWuk`Wm{g6v*ys~Y>H)Gj-FOQ!dG<%0aMST%lbmC}wOTDEnnPX!?E zgsQA=AHl)~QTJMffuz*DY@G&UfTZmyi2x4|&|-WdAS)P_-GvSRp zoLPN?rY0Bpl-NvOJy3(Z+>AH6Ulv+oQ3ST z8$%5;shsyAfn{NxpjMRaVt$PsrI#BnrXa3{hx$JXmej+mI9ask=(m_m*w6O^O)ZYe(-&3X)ec9JMPD`X+Ildwr=jLHdD+P>u2nX}-@NDHnpjN~)3ZKY=AMd*eLeiy3@cLc!2 z5&Ov?S<4;EE3xu#{@_n50PHEy?Sk>84tcsxmvnm5#!zSLwNf^QZ;&uXa19u9^1k{A zp7Cg&%Ku3{?dn5RA_VM#tWxh)9y2P|r}Sr-PF_JPS-YHAsCAG31$BH_1NX(m>{%FO z_ps45Nsn(300qf3Nl;-en-1|!`bEQLxM!*z>$bD*n>~XZ#@ut$VIi?I{;6kHFYt2{ zDg_Q6_y8k)hwA_?vUa)|$^a5w$!);~9MUjAc0|Zq38Jk+2g*@d$FN^fl_z~V2XQB# z_^Lnjf{jYB=jblT=(o;SQpVd~8Z7od?!e>f8d|HoRND(jyt&w_BQ>F!FbSF?-PCUz zfk}5*Xh3}@G38n?15~3PXapnzgBw|q7`8(lHYl&}XfMT$)wJ6l7sDmg>7_p2ZY*Z> zlO87yE0Q3YhG#8`X~1EUliy>TR1U%rgMZ`;{s;2uK%RA>dmEn%HgSsD6XpJQ=bNs8 zL|!TX(8u7XOL@Cg?0V?plSJlzErNg%1#6r)IArwN!8*OW1?0u)0K_E;+XqHn?lkoB zD_R;epio_CQ6vgUwxO+mfBU&zBI~Q&?Yg-)yC9v=qaaS;vLaz>%{sA8)=%XJVBXMw zWnNcC#?V$3spv!<2Z6k4v2?I1?kJn~lDyX&x8O#K(K$bm-1XKkzt|e;VgWe6UA(QZ zyRi5rR6-ODr>A`jzI`LQh(Zn38&{|Jd>C>Q8dOAras*v8>;Vdn{8^T$!JqV2&NUhc zM}JV@8kY6UY9niN0j z^8HQK2!Pw`20JTbcH{KTMd4MAJR?m0?n>t%_^H^CIE#X7fy)`>-(m@HOgjF2X^lc$ z6Va36CBA{QrNZlNUWfnywr&s14c}CU^Rii$Z109& z$+dxsJO(k=(iT8~?7;(TBuIAN@e$;q1}E@`4?_@}j7sC`3wWa7PDsjdoFuUQ3UNG@;w%5CGxP2W}ISJ2+|naQ8J6(0>TlRean$9dF}Yet=me z*;Y0Ww@dvEOJB`(rQyZK9oUlB`h_OU%vnZJyLb_?L09F=zq(<(BwcP~&oHK{&~P+u zd$V9781YR;`aIgX1f24-cA+u(a@R!BBf1>sQ7w`=bxT*~-KhvG`z6|oQ^a7}#+W>A zqC%h&u6>@t>Y+0uTkZ_2A{&K6I_9(&H9h6O5o)24ybDmQ|I1+KxlJPbqr?5OsV}E6 zjnF+mmhZAW{`azFLcO%F(htCbq2KC^u9S?SwK78SkvbLvdE;E!P<8Bn7VSA{j}LDC zl@y~>K@hpit#1xk5p|^yT<}kvy{Lz%R6Q-C#HPstehvZT?ax)rK zc)W5XT@?H=3Xc3mrl>K1^ltVw1_(!Aev&SMS~26IfoCf-**XqiEF@`IZ-qCGcyCz} zJfZ_sZTNyAc;?EL-ic}@GYOg$Kl$3@UF9%<>+3cKaK6Hbk)y&~8L=xiGENJN3Tc7X9B)vFpSD z4#F>9s4lDBrawOumi%U_L96Ap5sq3EFp7yns<4u01l6T9_@K@xew+l4n(3>um>4M$ zS*VptKFpY`pYQy#)%ZGHTHA4=BGkz#3^xo!zijEDZ4jF=B7V!si?-S64xpve_xyb$ z<-n!NlFcapIzM1zK5JJvk`$irTp|4=1xa63P0YWf<-L;TuRycLS)|dJ6GvX$ox5X4 zyO}?(gyiElb;k0|85v=92IGft7+Vq?roRfG-B1Gf(K;H9ojsr;2R|{2OmqcB?Xufa zG;U>-E7MOqyEoaO!<|u$D?=OhKw1Y5pQcZ|WpZt%y3C1)hW3gfLsFy6p^4DL>COd0)ryHl_jbTAib7yiU7jUpOCDJp_W6r zWZ>0CO}2o;76wS_UsvdZ!e5sk3=ioDRTr>m2p+Y1qP8bn#7qJw#E(CId{H(0;dVbm zPfna#J$`Uicvm7$441yR(K!rxDKQ!H;&D=z23*n(FJpb!v; zXpT1VWHgo%&YBZB0U6G)4z;M~%cFO~uFYp}xnpq;cJBVFxwX79ntrZvjJQ-#gAG#5 z=eGq?oX=k>?LxiYrB?mkjqfxnkc04t6{y>4uiD`@&g@fJMw`swILU3>=8mA84{UQM zkXuly^I+!J24QoZ+~|-9feHUy#j8vAS;vl<4AIuv#E#Oz6<+4+djYIg``^3%tM|%h z@by;&zcUA%A(?(mD3^2RV)M}42KbArm!bLUwI_#u>YgG1KR+kDHoJH}5Nk+Eq%^cbJ22aqZ&ty!StTPKT&v*`V|i*c zw9v4P+x%R2*N9oM^G}3zCSn6F$`^36M|h38(!?IAOqD5NWZHhAK}0a>=YsUTyu0-{ zZ7*#~qw-@R38IH|-NGYUEVFJNA7ITMv~SOdL9_$WwbD!lK*e0QItx{cCq}l? z<(`c;1_yM)sZVNpPCv)gO2c^&sMv7IV5c>MB71*_`fN*{{=y7E&%k(s>&nFHb?Kyd zT7Q(?fd#>U)dpS|8ADr@r{FWS?+5Varm&&v_~9JbYw|wsU&A{pMwNgda<_SX-LWF- zY7sc2L%ckxC#&SnPe2q7rL|!jzG5>bn?eoN1yv>Ia0GA*8k9$XaulA`{|E{W|5OyK zF@W@(&o1~2M}0uDE`nMKhUD}+Em9Hcs2!;{fijz4Kh;`paK!#dESo~el04ZSp-y5)?)-QB!7 zR&j5BrZ;|HW*c=brvw?ISSV-@pg5noRM>-hy-BP7zM0r6WzJ+A`uRmEfXkF#2B4UYK}##5 z#;}K#)`c3W(&HF{gl-(W)~Uojry&*3yP;$wORSp{<H$$-HPg+S zg>h|qE5=d5m!VZY?)ml(xtn#;MJ^@zfDh-xaOON1r_W6z5;&tW>^_h0>h-=4a_I0F zSE#FGmhKW=CO=7W4{`q8;yol`Ce5B2e7>WHk`|_8PNH0DVn8*rcCboonzcf3U28$n zZeS({Nue-snzB zQOF6VSX%ZeYoP~vgf)&m-THelAv7EhLxht{c(6 zh#?w<-+@IgpwU zT=Hj$Hlxjflao!aeukxp%vJL;nxr6{Oci^bNr|>~h64ajz@QOL5*v;B>x^xT)Wp!m zRI(dUWdg?o{I>K%+u}2n@=DmCZ7`;(=8&u$L6jS2%md*M4OSjIp_pZxY46ywj0)B; z6u%Tf(XewXduK6KjK&1oT79ayZMcJy$@l)@`bkdv7H-=PYwSs?eUsDUoxoGf84lFBHIF>VAzU<(cOLE3zrC>TSJAZr~d*po!6f^wW zx6u1(Fj^ju&aF;QRS7BjP}Emwd;rY@-BMl8``Pu_r9+46UcwK|2W}LStcwW1HdTy7 z|3RFlnC@c5_6W!iqW)T^Jw6*z^NvgYCBtT>D`H}881N(Pk6!iW0cd%muE4ZqcM7j3 z!03GDGNBLf26v%$q-4oSymFLXRCu#9_h8nz9VJGQ? zMLwgLB%}%}d46DHdc8O5yyDk!(2SX}CX0!Y8kvn+h2+z;$=dDlH(R}rqnhws2*VWY8WaC@VQ%Nc4s} zU2h^7`AtFkI@YxcocgnRp)v7x*GSPVx)$zUC6+OJ%TVgor3^3sBie^o$Y9#em@;9e zLZA|+dzs1VsWUBG;R3HF8;wIc?zkH{HS4z>Vx^IE090f+Y4AVscAN`VNL?iY7kGfT z8~G5Kw24WGqT%>*WW#r4#uQzkp?c@ym{f*9Zb5^JNKl5Ni-tc=!I8JZ5;+Qx*2B5U z0O8;#NY*J(BVkF>ThHNxgCq^_qx8lR=Oa&sM|6m)i&!`a&sw$KGhL-(CP9(P(!* zET^MzE&HI^&jAA0=$Dj=TF58iS3MC!&YvGG6pAr}>+Vzoe3?;M-yiuUQ}L29(#><= zLUkz5gsMCvfyv`@5KHLQmmk9OZJ)VC*A)XTn>pmqUwj*hBpZf$F`GZlEr=RR?w(d} zX5u?G1qy!N$;~}N@BLSomz7oPgEV?E*cnA=C;4*9*%NyQ7`5M)x)8jromUTy3p?I< zDm2KZFh1AzrswLgKCP0Wo2ILf>FP9xK*bF}Fx6(Qf$P;hISDgx2%{m5#XP&dsgOOq znNAG6KUgr~jQS-Yy>G9c{f>K^JJOi^cxa;N;hp#Js1{3{J0~b}ZdQipzvFF3%VIEX zU`!n}lfh8&mpx8mbi}I zX-mn>AoMJZXSgm*oSxT?s{i)Q^ZK!17_d5_Dg-7W5RAyo5=JqTuwlZNs*0MirB(p?cwJm7EVj zu0aC}Nl*@>3Wwf7!I3{o6EymfUdy<}0O9D*NY*4!D`1?{@oJ(cTEXFq0woP^EA_z< zZ!3<6hINFh3RyG+Pg=atJ5sEoCqNV9CZ4~(s2TupdtPB@rcZ4izqrc1s*tCL%HCY* z{tS95F&ZmlP`H6!%+w-iMUXDTjAl(JujRwoLe>bO5D(#YVs^oA&gJa7;cyRi9ZXi=THhE=z1BKJUMi`<1}hc_+Jh)A6|9zYquw6Ss{bA& zbeZJKLHNN7)o!*`Z}T^5$uANWP?1>*7312#mbL&x5H=px3{0C=7IZbnH%I0L-%=AqEY&V&&KX%uas+#dtncp=@g z`yz;S*TXzU6nN7?_}?K7Xu`oy?ddi~%Yt5;B{#a`b89kRv!lA7!CT5wr8}}hT9>77 zM8+R?O_`wgupga1r*$y`>chN#Av+ZT#prCt48w@|cwXNU85_*FQGWn1)5_L`x*mNc`hW zqe$%GvRXy{+A9Vn-PV-DXR-7AaQ0gl1`D2;3YdwplYe^D9=h;0x`vp+?~qHG)#LW9zH9wT1k;r_X?mOgv9Ct`(4oI0V*AK@Ew5J zzl){>CmTyru&(RZMdm3v{T?gB+0%vRK)kfcL>bDA%mX zE@R{&xR9d_DmS8BnluWh+=&Bz?JeA%I{y_I&c;u?K8cEELbvtMtAm^SPS-r#To97S z>48VfRI4}#dD{iR%F@;mzpOh)^6o-!2QEnyp8#=P<}tI@N>bM|4)n*pjCc$GXFmM@ za6WVlTAb4|5kMlw6%8!uNzf}UtLdMOwGiR2Oicu~N?%@FT<~_QT3?}=c13lTygXXt zJTYYVF|3Tl@QOHVkhxd4y(kQgt!H(*lEBo-AxQL0e~1wh7dPIJ>n3Y5bI;p5Tn1dC z?A#Z{Y#3Zz7B!YVIIlWLPmvzO5F~8%z^z&#{x%)1V8Il+_#NXH^|rX`VRAlbt9hWnog4L?9q>uYNexS)f*JgFzCh+qyIU&>PnLpvufVDPW#YX1r@mu zWUS$>hd|lIC)UW9ocNJr$R!Pm=Pz4=U^W?%rnNUP_t8wtxOM^0(ekFd0#t%)1(W|v zy7>i4>tL3e*MJC7C*B?X_Z;oBB4WD_f5?37-LkSOt9?T@Kl`eW2?Kf#uw3rmh9Rb% z*i2gcMj`@^hSWvq5I*#;7ZLm5k-AA)VLxFt@d-bd1I* zCo2MJ9N4q8gNVGf)OZ(HwWF`GKvXhq34+j>DFSQ(Y@G(t_^q1Y?w-;1%d4RJLD}^( z%g$-VwsX@Yz<_5WQm7jayO;pN-EO4_lhg}GsW_`NKa$p4db z0SE_Em=GU;KXO}XU75cDl^v-y3v6oTyiGQma4~u_!bBC4Vh5D+p_?e}d@^J+GENzf zY#zrPHSMw(F;$`%E}QQc$v0N;ko4~k(7}VQQ$jOuv6YMsrNXU8V?9%NE`v+xWjxi_^sJm>WwGOGO&C+!xqPy$LzOUM+2VS&UFT|z^c zzg)+f2(zA8!((6`?I5tb+k8GvrD(4{ReG~2VAJ1CKqR_Z!z&y27PScN;3@r`|j8)%|Y z0+knLx0h3VzApdBC3HY_39;CMP8D2sf-Cxn!PSx%X<~mOYh7d8l&hYvFLy%#7qet-7Cv@kJYAlrMi16*gP`wcK65k!P|97pOGEAZ(-y4Bp{l_B(c$= zfHu@&(SU9c17!9m1&stJ_uCc#lz80zN?=U=E?V3!;Qf=bq2c{uNCjmKu7hk!_Mt&&$bWGXA}ehm3`nOnEutIhx% z;pV*EQz)tJTvqXxegG$pVQJEqvmpi8ZX1-By{5k{%^lvFE3X{;bK)oV32u;qMk!Qw zu+?^I$>oj!7}V1(-aY4}I{Nv)WktmPHD`Tou+ea3vY>) zgbk&_y=zkqQ%D|-YtE&IH}GYu-(`fe$Jga|5NSwdPlV&jy0I7yH6V)@c8Z+$?==GM zN>bB|s7_K=$jeEQeCqhB52{DS%mAf)JDse)pDZ!rv&?>9J z8-;Hqw8JJPdgNiiGN2%HX+?bnGrqUmlku=z2riP&uc&alB^%C|Jz%pLu(4@0sE?66 zJEMqBjBWa?&u|j{^Ka{D*s1SgZ5lhsj;gVFdi9=@0L5ANGZ?mpyfNKDZ+Al9ci#X+ z+MVbjlh4z81SIj*I+5nIdONex!j>eE>A^UnTyRZ%7(p9OV`n9*7n4m5MVY~3-^{|! z=L^IgKPE&smV)3z&qw=+{pw%OU^$6Avv}nAA3$f9rqZ}CnPVp z*=G%zu(|`G4K*{tJ(mEML%HTNxXI@Fo=3eWoS4;URF26ToPdfY*f;WDWaeVCq_C34 zu+zgxySx`&&+8U5H8t(g(i!#B;R|cUZend^WQ1lr*Y?ktoJDqdr6>?C_+-@SmKFUQ z{vA>vd=wjc&4ljPls*V7yd{8%b{HQ9?)!Yd&{HV8bQoxG$cjm0ggk(5aJj9n+C+j zWJ+Nrj$)^Ul74(Cx{}`_W@u{KtEDmKt-%*uhhELtM#~7zbgJ!>IW`6F_)JnLocT_x z(<3W-81WlgD7+mNbjgJ5U7axa&*%INQ(tWEh5Uuo(Y-<J2@(hqw;;GGj2TMU|aS@q-eEicG*kZr1B{nbNwp1r;CZD`3J{mS%M+ z3sQic_AY73OZxM?tby(Ef~sMgGjE}HV4X}fQla9__4<8NE*AvA;QC+dU)xC>I4}*E z`iJ&FJwnsyi?DpKjU1A#oMfjO_*V7pAhJbXh*hV{{Pu{w z@uBCZ8-LmIsEusQE%Ww@L$9wr#M_ZTPIGB&seJ}}UzA+v-leqbW_ZjmHpO zKr$2J9q?Pt2yF=SC!(?gwPn3ck6xDZ`XDaFOnIuPLSoFkQXcgnrEhk*Zh84L*m?LGO~F&>eg?mQhn=^7`t@TOSt=wJ%mYZf&yMZ^)f=4@J6y&tCf z&3YL7T1 z(%>~g%_sYdEVYL)-(ujYJe#uD$YeBPu585{zzO!y3qDI9zj zPuQZ@vyuI54r4ZbSw1Chc%W+@IfL0Z*{UYfFTjiK7z;yzU-H}%N-t)7*BVOx1|jq{ zD_d07ArDb&+O{ksjUBA&%!FyzxNvQTKSQt>-o_c61y*ZR48Oibj_!_2d!Fl8khGM# zib-sb6a!=qAO($lk^c+}|M9M8`x(@((O9{S(cBHY;Wd&5m+kTYJuI*kXh016 zU+3EekGPmfHVNhSM7S*7*K1T%ua{3QmRiWA2|u=%E}?Et-noVE&7=T?*w2d)stBdu zOO}Bv)~5#{!bOWS2dLSv)PNjM_y-fXWm>jQIZ{&(-#`h7Q z^oNX?NQyu__%C6>>R$6Tn^#OzsM)3UM32qK>6-^ z>#;e92LfPV>t8{?{R|!)m0=G&58HV|FqdMMB28og zDRzDdpL(#;H>X0EqT+?|@FsBdVdJ-RAkzd&z*5-Wq5Q%)k4Se{z7C&sts`4lbBtt6 z2o>%vn;MuR@+e$W4n4fV4^!Pv1Dt)HZr|MqLkfEW95>e0xfrNHX`Jw5#N6wI6x_wc z#z|qVY~hFI-*Pzk%Z5yr9ViBk&Lc9lu?lh+y0}iPpvt|RkF?DQh4b*g@vy?<8v==twCWv)e3Uj<+OXyNl}E}FxQYCysC|ij^%>FNDW6xo#0DJok=B>W zAd0e9R3klaCTo_ynDwI#$bA8RkGPdvN?ynM^J8PKj!doImM)aL_$TfvJ= z;8-P5yH8nNL%P)vEEJKXUhumAl_O=Sn!UO75LuiAYSC_m+K2E*2vJE}e4<3Z^2?h^=4y%{xZ^m%*>ha|pKFVvD= zXJEiECFF@^*ZicKjE zVZll~s^iUuQ!I~wd5j~$UY^V343(lhdv)1e7lF+{4*-$qRxB@Y#8jTra{u(zc6`Eu zuOtz0l$rB>UZAwBX+_3G_zE01l%`r+&IIRUr@l#^_mq4;Ev;vHJfmvd;LM%v8C)R~ zjZmn3al3w9lgk4EFu2a%ylX#-2L+@8Q-9O$uR~}ac@dTkvXMiwm67aF17FX20O=}v zj}^-;5vY2YWl@%WW!) zE3;2$?TwTP+dr3d*@}q$reATDj!E^+?@wYvya9fx9i|Rue1})Gr!=p#>D9@0+8Dwm zn=MNdl}n19QOc(rp!CV9&@HQYrr)#qA8}Oo=@LXYiV`>H4dCjB*B#Yb!Ri8=^t@B4$z1j$8ovzt`G0Kq29t+2gc5x{NXiyf-e;qn~ zKPUxtHoAJ0S0y_A>D^woeBND7r*COa;*<_A4M8OF{bbn&2{ww>je{~eEOsM+zM}ae zExKvXfHfTtX|G<68omdx9L%xbCe1Rpk2vhP62z=RV{%B^=LA$NCVo;GoN-uak`z|b z7;?ND?$eK?8~#3IrlzL7SUh3=IC$c%-^r+HhzQqgliCKERr`}w*C7gp3%?Qh_t1)- zM*NBv3LnRr-7>!GJ9`uX3%R@gB24i=)OVJc0o@{DBnIzqg%Q!afQ?BT3a{#`3NLm?$Vj=j^P%aiAAz zgEG_W>fadkh;D%;xa3{IqMAxeG?cd**ir;^-~@Gp(BdbM;BJ7@&lDuT?f$^W@q44z zS0X~x3%A6ao}#@MMsDve}P03RV z^bd*qYF1W17GwmQWDtJ;Ie++HI5+$MISm8a^kY(8@lJ)fC1;y8-*o>eG64xs@@Rs9 zR;snIL|I36TsXd1>_MlNO?Hw6Mkin9;D$IY<2AiRcC(;2UcNgz2{gN>-sj0$2W=BO zZCUf+FPtA_t>}dTJt>Rnp^hIQe>8QZKqHpO=Kv#F#PbKx#4`fxHfGY!ys_Js94c!Ad3rQ_?2L|ux_mCx?#*M z2*yBq;cc2GB#t2Vy$dB$6%ZvrsN5C;?l54On)QUAhCSRPj4RmTWoqvm8L(KJ@2Lg+ z-T4gYW*|u%lwr#s=mu=g& zZQC|y_r#p;xtOb&GZ!84{f0O4$@OOD%9U?1QXpo^1L)XkY<${9i^7}6S8}j)*cBl`^ zb_V#h^n)wUbm%(nqRAlNCD8l~gsn_kz!|T{ zBc-CjR?nx0vK8cnO`(HN!DOG9ieL3ie89gIkwF=A%pu^nQFt(?4Eo9FMIRO&J%He1 zLG@8Gxfj?Rn$^nj#=4`cNK3E@g;Yzt!&+~HE8`2LHY&#I2;3_x8z1xG8j4Q!^_Vg! zAveh578JHVXAXF{+FWB)`T1bOJB?O$b8K;MrUqs|)80Zj9dI^tAc0H0Ym!F5Ox!v_ zQ>=>XskKkapd^ZxW)zH@D0v%^1ZL~=Qr%|_j9KMA+i={b0~d?s{cw6m1&sM$sTCdVg^<(9@&tYiD7Hqn-8uGpR|S zDbrxOk*z%8GM-@%Sc3!Zho{U>y?LX#+wYscfrr7V`@iRfJw;4sA>@SX6!e0hcZxBX>HQ*FOC^l z&M>~_yYMVw{fO>C%9pa)tiEUA*_yR5J#Hj5Mfl4%MDwDzYBCqd*0qyPkl(F6Ta_DD z)4VZcw#85N*k*%eG*hHilz8Q5o@&i$VQ*v+OyPBxDGsWBOLIu%OcF&QVfuDHR(((S zTsTiB)bH`>qx(h$f*qpc0-lTP9Dy4>gIg*1+H(u@CS=j14I*eQq(vP`GJb;44<(by zyN$sZT@9;t-OKDaFK(m04xIrvSD2N4%ewsP$fR&7F2Tk}0Bi-)Jg)ekoZ^bA%(dLwNLzvSWCUb?aE5^4poN1R z&7=askPO#^<9?<*yV)7r1aW)S4S9U0+8g(Ix>F%I;1y6^WV*8SJ9RJl#aO)$!Y&7) zIoRtlWxCH=cB&KEbFQsxE$?t}XZncSET}U7!6*72;IDr*KZ*m*rd2^kNy0`X1S~Ep zjWu7Xw|}2Sc&PlpX%cR&2&XWxPZZ zaBRIr&(?gIfY-lSRfh^>{>3x$r3+DQ=bE8OQ9x*?k4ObKk-R)P0%RWFzVwZh4~_u| zjlwulZ5Pk{%Q;V+V5LhmP%FK{pyXv>Q9Q zh>)|qouV>_6d}qz1S&)|T6PT@(=_i6Fld3=PRHQHGrrjn!(GH?OZ&%tpfA>hZaJ<; zsnm@Xz&*YUQqE(nt``JACk&-llX`@tj&RR3Yz?MQ5huo+t1niYRwjK??gf5I|Y z!Yf1%^s|vSa?0)f<;n+C+MBnSxC_xEI4S{0gO|z&RoZ*e`kj`|lcOEbx9p_7LmY!X z(4N~mjQlUC0Q*o4RpJ_G7?kgCCO+}2`RUf1fSWC{S?rPo(mJ6Tj z#^ctSkqp+M5_V|8&7d6xb3=@ObY?|O>O^f4j1gX?V}P#>Wc zxHtI1&C)CHKUXg%jeXWfP}q2~ zEY?$14m6*Nj?_mAtba~8?-?7YJ&yke!vr3|0oo{bG% z%Wa+`Xj7QN;R+b`m_;tC+sP0;e<=DRr;we_3q=v;R*g%~5U=zBS(M?AV9mh^CB4w@aXQ(Wo#ffr{K?>1LmpwwqG^~1q4O^hL zGqE@bOzt*BahGv9{{rGa{rMMQYCCR3t29Uu#y!0bRVrYpZ4?1QCyt=ilzfDyjrPbk zX%Aya7bC@9s4vx=R&km$&d$pqVj@!eIU}SfF|Ebgcz;{1qW=rIN|A~v2H9Ro|R5FYnFI{fj1m%DZYEn46%JS`d^ z`H>AXNOyZ4#5>q*h2=$KltgG5@PcKygja|e5@;)D>YUrp=q3nM+F!7kvJcfGFfI*8 zgO`T#u#}C2f_A<8JTw7xFWO)GHvPP*tpHLw;SeICH7=s?|epXh;=-*$p zDfEK+Zo0q%kTbNdv=uT0<8J+(w5Rd|WG-c&lbeJ3tj+S%Gm8cS!#OTt1z5a% zA__nEUyp~GNjZqbVpC-Qz^ht&$LmU~tQ_%8S8{&y*{bYNMcslIb{_F$%fvpc!Hs6q zxY6yk^EVcciSX(qCFXZ7uQDp1Y`j*2wa!4SQZ--f55-sd;5fDC3ngmj!%*#=_O+ESwt$|s-nh>A~!EXiuWnj@n^($5UmMW(CdX~orL6Jpnza2oH|#^ zHHcjOt(qW-ud%wmuxO574h@_0&$i8!gZ2E)F&QTN3@%R_d1)s6^fm2aX5tRvUoK&6 zi58qqCeOck?Z9{dEJ^XVhZ|wfQ96}ct2HZ+d24xFE}+kbq9%U#?EIijsl&#!kaN%& z)H|XlH{1ue=v$G)|2i0LnfHQozsX;?s-};JkeOLmIH%}&uj1Zq4$?`Ed7@h=6GrSU zt`weYlcgW9aZGL~^@c^gU%)GPV?u|70M`l{!sG1bqIB4XErjZ1W>#6&*nVDtJx3iX zWzhKluH;^9#dMOD4YHTCHAVJzfLh*oa=lgXPw;Mz81$<`TdAv8oij!#AzAH)MZGw%p+*trDg(22)v{49VD^p zrLN!vUL2ZC!drhO?QgPzE}S3_wz;-I+oZsH+d4-&&DqYzFl56-ysifTHtjGUdLX_z zupZm2zc;t9bON+ocKbZ1wEj+ref`~&YqB*`gDq-7=DBr6B#!0KOsCxwDG z@1k5i$i2G=$i;4vs+f-qIe@J#L)gftMO+GeztF50?~eF*D>=eWUl%-k7sw1wuKNbe zUY^yzg&`{PTFmI&;bjQ`#9RWgqRdIV@4Y_69q~6d2_UoAua=xLmPVhl>~H!FjmJM= zWB0+5TE1fAhO}}yxVBf-2{qRO>D-~gZ96*Ly07_GylsT5QnzBqVPdWmuJQ6{4B4>V zY%BxaLPJCZ6}*sT#ZM*epC%h?Hii7uQfCaUy#IG|K7jh=LB|BNP1lESd6l?8cWWvl zk@8Ov|HMkE^*rs!Q_M5$s6S6#!l62F>-If#?8|{QLXcOT9kn_Mcgu@l;oum7cezkd z37_YpVCDiU)g=Rrkx-p86tB|7kNr2XQIu7C9XR5CyxRn|+i`?m-khA!4MzcQBJbkp zGd2N5cHYsJk=BrPg41YBXGKJ%z$Ek|jh=P!jI z)W760U~&&`m0Z!QATV{vg<1@&4?@M(l0cZtMh0K`>}ip4%C-<^zSzX>=5*6BBgYBT z%P3i^hgr%CXz?O^6Of{G(-n`f@eQkf5X07}ovh4`{FD1l(OearE{s5YXL_<7*bbAX zw5o$d;aszuFr~sqdZv*ebYe)FO(`d6S{RR1Re=}AiEK!cnfXu0mMz~(&az=Gu}ojpDCLW!5Ylr z-bpN}k;xOO>C?=41V3DNN+(|2I@fvg05~f2XB=+dmXsjv1E3I545v&k2pU^KbiS+x zz~@B2O^yfuzC2DJKs=2AKoljH3Yx!&l`uJCvf5Qt!SRl91ceSX3SjaXd4hJLA@^M7 z!5ybW@A2(~zi#9#{zV$#WTsw!kPPx?mg7zEMXkBmPmi9A1{7c;i^zxpN_pnQ4At3P1oH{ATw#7uA0-o92EJk* zF5?kpf(F^jnL6hSG`k$d6zco=oHF({>k9;)JGK z2s9D~tVs%)=Zd&NiOusTFJhBTzS_67Q#e>2TK3F}tmPJDBJLYN15=WSu>KkmVxP$< z+A#Z#Tg1!p6I8B1^0SvPPmo0ef#DPz7Z$=!fXR4?B4XcqiH;zQV8VO$JZiu z`kk`b`_5&=fB^l*qUriM=zeQ?Z1D8eVbEfE{UzuvFBAHe=@0-d_#6j&r5%CWCb?d8 zm^!a5&^2dCc-;<+J3DAskb|f&f2t@^CmL8pN+ON zHrXB928JLczGLNY@nEfpNBKbpo*HC1$3)fFG(SsIQ=Yl0hV*6zXpJj@2W9r|+R#ctb>_Lhf4=W#uP zk*}2y@JT#wi5{f@J688m`ri7OUsJ>g@asMAeB7m|agR$jMN~h#0S;cIP4j@me|IoH z`SIJ^5dLQLM5=Hi)Qg{W;Y)g?nV#PGG9^P@;tsTq&K^R6DM1^kM&p=+iK-)+fk7=* zjR^PqabQyP7$UkicqLb2Ea=u6wC_o2)yjXO65AJa-=1m$tV;B;uq^-SZiMF0HIU1X zLu7q_AXx|6?e}{dwuU}D&owi=fDE%^w_Z*A*X1cED4Bf!LA)psP%@GS98(P8k5bm# zG>aC_b@)ENF!xqGO>HD-w@TDK2PP$E3yx;$EdkC#wv8{W{IDw)tvGSH zRPz26m`0C@`Qe4S4<522GX^xKS-gF^g0H8SVbtg=X%|CLvoM7C*pl-qy(;rLNH+N2 zXhb%RpJDG3UgR7mK`yLy19xj+WLIeU7)qH)9{`s{yTc-SR@zDg>-I*{8#a>M=l$FD zeKvE**b7Jna<($%{1JDqj^G#Ktg_}yCP%tgxQOY;g&#Dwg9Tl$Z`*3%=qO0a_;QNO z5L|#LeHWk@UT@YlXh74v-N&d7Y&9K;702{uO$c)llP%#F`-c9v6J^U`JzTM7tN`xu zX^?ytZFM!zA2N0zrJC3^FlmHmreSL^Wr{d1`c!4H(x{^Sgh_5r79Ks8^4kF+NqR5} zOciW}6e3lr4ZPngQO0ZhC!ehVGi=Fba1Rn@1sMuo9$61#*|(UrfM7)iaF--T#L)Ob z#1!coyi8AabLm}o=GBXQ2>_f$8gqu{7c0_$4uMdRC|V=BTNurCFRC}jo&N)3x2mhn ziFe1NO8_su4-h3W`Ai0H>}kYSh-~^cgO+(IhN@b!X?>s8p*G~Oxxh z8pV+K$Kl?$JFN7DD{#In2a!o3PqC*|h<>v3Lw~mJT5}|4660u0GtVb9y&1f0#6UkY zX+4|#PC9$ezx>X;>DXPcHr`PQI10RYn7f%=I0UrQ?c0ITze}Oc>cl8KQQ{T=@>>3U z=T73U&h_BI%IBhjupB7{SqgyllaTvC*sBj-(W0~e@GKeS%oQ>vcS>Gm9~m=0);W7B zcAI!tOgwfoL^QO9YNI+5tV;nhd~kk8xMQVb+6QFM)l869X`=G4F#5m2~j_@*%VN@#UivLEp+?B-&R8bz?x1J7iX|EtU|Z zi=X;OH^?ZsfMgeDrZsU|W1iYVOmBwHwPd8Xf6rvhDGkM~hgu zE9(0|U=rf~DlyJdN2XSx!*eO$R~$}8Eaj`t$~TbhHe1exeVgV6AT%K>P1AI^p48KF zD02^OG7>W?W+#?_)y2iYLW~opTXVEd^&zl!ui&o84e$c+2;mpSmB><8r#P-2fv!bz z6jbU(#8=r)DYy|t%KM_UQD3XYEYF5@W%b;EG2(249X65qKIuG8G>uD%~_8Eb&g79!lYw_iMET8L)oCUd={UF z8S}DFA7sWiO|lRkLRuOs)x0@Hx=DMY|IVdAt@^m&fmT2%2xSO$Omnret31N{a7NV5 zX308=)JfNs`tMhyRz3fVwW(RxJi`D`@ z1eiTB!0`8-ejR^5X0P(gDYPL}d-;NnTBj`uhohOfo818Tp6&~tT7FV2p9}Fw1o9Iw zB@6RTkotoZjC=C##TeHm0Dv=- znpvp;=gtl(vl0Ofkxl#1*(&>jzE0Zw;UqVL2|BtOOfOF`^Z1&Txd2 zl;D!&2+)95?&k3vwz_(fezmI|YRU1NSF$2R$Gd5_RYtQYweFexrrGQEnQvNVc#0aY ztK@DCep^kdOj}tz9L{sZxuvaLI7c%o2stE%20wu6?+JO7>lJ}@M4SRnJT8i}zz{K0 z9%U^*7A_PsMNgyM3vUT2k1d882{~1VKe^38ZYw7wBwPP88stl~~=cLp1eg#cfuoX(W~H@&{C&ic!-Id$uM=jHe+5mPP(6@wkFO z>a5HJuB8f2Y017B6Fw*Xd#gaMO)P5$E0zk>0O1tsc#P8uG<)+i;9rT7fzyVMkUcLq zb8j42zZh=sXt&#R3C`oA@l+VG_1k18OpxYlLw~ZP zD;#HnY(rQEF8y=oLQ9rzKjER`G&3v41smq1aJ^yKEmXKf+}qHW%KI7Isu(Ju)@Vay>LJ)05sonVn>!+XhuhVftPEau2O8O4;*0lL2Az4zuZ$3PD-%j{@) z9o#Blls3(-gRE_owM7@UihM-Rtze^h8r(E$kQH)(6Nb&h_^TY2Rb#)yox5?|?Z0zk z80hLQ)e0NC_Tsbz%Zs{$ElgB&4HEEM)m&%BHp*nL79$w2O}>jgiZ`heXa4xZFtKw< zK_Y+z{Q+`cTfsnIf{vIz6P!ysFbK6Hi_I=-6)u-4-*l;%YxFDGcJqLU)I(9tBJx?s zyznT~T<;QgJvaq&oH@8Q^)4GwrVFJ?PvTc852MS(D0@EjfH1~aw-1x3PLU5rbOlk( zP1IJ7P}6ly$3Mjt>z4y;aI1TnZQ?C72kjgSah>ZtSd;C6$r-)dd_y~_G0x_Fl09Vm zN&kE=uB7ZUhKn}zf6e>k%fXqt8X>F4%%~7CNU}mLkzj4UMnYMV)X|-Dd=t|w51wOQ zH^t!vZx#Dn^hto-DP3t4k5QdU#0aceRS^O}st>QyLfKK9kTFqH$96{Qb1wmDtg}aT zwNKVlG%}_nT0^38tPIenMpRjid7Jq% z_8oiVPlV;oTt9;Yg)1c&4GKi;GcHKFBleu%nKB3Dl8;Ca!$857u-Nms$A!xn4fuWz z1@m2w8vMJ46Wz>?*Bg{4hlisD#6{wDvh*IN#aFG%v{VR(edjTju6X}HAt#$V82Pwe zY?w@09_1H_hcl?oNCkTvv>6#k6MXJp8OAgnsdoy~P?`lUKgsOtR5UP;{5mB(p#qxr z^FVuHe#_7Oa|%Gtx?*d-k*LY*OvrJO0KrK_tZsrGf&M)Cp8`|*6FD;!%Y3#@S^7Sk z!k4z3J$Lq8LXtZk)xIc15YJ=w?Dze&1@R1$60#Cjxe|Q9_zu^^ylgnc77LgMq1@D> zA{Dzyu&Zt%%M8QP?t{v`d+EjAU1Qe9l*5+g6B*@UG6Kohx`GUNyC<@S|$$c zL7|`XAF`(=t3pvAm3uar^cW(*t*l#tIF-ImXv=cmDw2(dDY{Z5kCES-(N7y(Vk#*z?da&Zgdqno^t zjrqgnMc8p8P0CrQXFhb_!u-X1ird%`KfS5WO|C!Q>Z6Gy(p23BDb9Fhhp<;I8^siP z9p5BS_&Sk;T=L_jgz~=mtpGrF!?(bmFJ0EVw8cn18UN*8cAK8nGM$Huz39JneCvq<#Ra7hY#!mg?oErc!dh{^v@ z;x3##}u!O5bytc<>+<@j-%c@QWw;2L$v zOqn9h*N5wIVJaVIgKa}ug{%Vd<-^L9@4n!n;x)6WBt{^PIF%*7Fa@k$ZP+1ls->r; zQlJpao9~3*(&Cj3$A5mtpv4>}PJn%)shk(4+0M(c;p6cj;u47jIs{F!{4wb%w~!CR z1DCc^s(X}ePVe>=HNVys9Zr1%G;E=mA-4RqWf*xPqOC-aRBh4MRx{0m{To4JjCMz5w&tej2EGQ)viuf&koKIyNeTMd|%T^ z{EPP*Dt>b{6Ug4zF<5OGyYd+*U;$Q>@q%0bSHUGw-1pdGSBUt3At(DG&ACBN7~qG( z*flr{ivki12FmZ`hyeWnIezj+VWs3wKg5?cyRxENsaCu8+_`S1KeXx6Hyk2D_un=# zRq!e0oqLJJ?u3-j-7%8K(%q#^RLz_cYYJy>ftYb^DsMSPDe!eTgb}%!U#fa#mRb^~ z3yMy4zLr+Js!d4gpJ!UtSzW|7*ItnA0g-w$)bX`q{4V>uU+S3x3|-1%)<^aUXk?7D z;xUbF$-m)!{N~0)(0x=F5OHa^A3ILOYftDJEMDARI%Q#+HUyxJgx1o71nNA&!H-Fo`unD4V#w91%a1O@f1F;)G*gV zB*`HHAE8?SkiF<#u$LS6jovNE5>MH$ewI0+Aa8N_H?Iz{v+~SOt^^{0C!i}PR{dP& zc`mmI;_yTd(xAhbq3xs^Yzn=k2*N#(IOO)03e?T?vynTx=iyHEUIq;H9$D2_R#ammhz#<9UB!wIry%VLKBqIkn__@LcJ%oQ79j;7&=)dpA?JE zgY;}9at1+@%YH;G6b7nFRe#gReKbZhN~TET8Bd?=R08EE%khX{EIe1If3&F&uu_l~ z&k!;5oCb}42a*^uKN#!OFbU}4u6c;Fe9w+#|!45iRXLww*wp`8f*4D z;hTzo!L3B_wN>BGzh+PWB9-HaBQP>`Nv$^DenTu9ijA_iQK!=dijd3-JVan_(B~$Z z3!Eqat1Z;`>}zr1%rQ2$^-XS#e0*h5|k#!V1nxw6*7}rSHS=EVfn^G#QkAI za7$}l9e>@sl{^6nZuNI166Z0UON--z?kcknVqB|kq@J1)y_@^(@QdiC#X6h!Pw|!+ zB>N}%yODFv874Qy1%RYJ0MHA2@;m{TEQkz|G0pupOHjfAl$t6{q3`K4r79X-dt zZc8DG+^Y<>8IS>cQG3uSoT9syh!WUvXdnfGCLKN{GQ7+NTAw*sT7VtiSEG`Hdg4p< zDj-n0qqK@1_|+a~)8h8#qA?srAVbxvo9KX7un&6CwvOa%`7oWh%4il z+4KQq-h1`!bk}0DOzJx`A-6<=>)wO- zKl~x-(^g2gN>oX5!G2Hxk=jcba04qw>QsVxt3JL-592~_LB>Y^JFzoTpMMQZXOlZ_ zkVFxy-8DbBKwOx;?Vg={FQaHz8M}~x7v!>B&Yb@=tFXiuDdybXRpuBn2GYR_FsA=B z?kgWz+P7{*Kyrc}WQpnn5tI~y>r($CQkpx9xg(AWBc^_nGmBKB33Q4Y+NAhkaa=Q9lhuB$(lJNn{q;W90>}sgvD0CH7QoXV9fh- zC{pNt)DX}!oZ@MIyxF8QJvtgEEGC|ypQZmWEwye}p{Yzb8nB49bjAHISo%jVA%jaT zq28niK)pJWDSV@6GuojWBFb|3Af-AT9d*47*wj!83ykI0DwqKDYyqHiekh(GA~D*b zvotzk)HtE=Lu2q;5~0A2ngzos>1UnY0+qvo6Vub&Y^u3mFqd}_yHUGWgi1D@vSu4%LK<-FtM}a+XJh^?(L2ouBBlIw?#?!U4fZTDAA?@jwq@xdJV30AdC> zH!I&4B@>~)5MW3(IKe_Q+5uanTP-~t-wBgLdTRYw1}#7X5B3l48ahfQ=M8qtBuw72>)Q?93Rl-mJFfrFqx0mkkT#PD-x06+1d*B&~qVy9!MM8EVL4UZR93n*VK_6Ec|EbTjs)iO$-L4+RzrGA#*sm zqf<8+j~dVwZAH;XU6R!#eaBZxU_N4j#F*l&?Na1kZpIG@WZ~qYrIGQc!97NF*#%|f`~lW! z!W?m@ho$7m>UaI^v@#ndY30{06>mJs47Z2G!(P<$gb1=qu#cn!4!;(BrB`g-3yRwR zb6yMm9WY;LQ30Ro$@qyw^uqCEV8|azE&9B3D|P}B)av6xB*AMmmm19u*->VfoayqN z8WxSEG%-0{SWE)BCYdHk<&tw@A+)Q$sr8}Cxa%=|!9HB>z= zI#6KJmZYata*bc>RKg>Y#j_Kz6tBHNHDa|Vi2&7Q)qhs-?0;wk7K7eeif`OX%(us+ zqrTLOL<#;#GtMfFeF8b!@Gh)cLP`9UvlQ=5CCB$PDm-t#<|JY2jLG7f4gkOV^_zeU zB;yRywufsOFG=@d=OJH>q!X=32`3j{Zko z``=Do6L@&+0NTVIn-GAdEKLK3^DlA%ijJxW9%-6w+iwEbZ-1F}J*6GB!Ay57h zQ5W65I6_Qu+-3>zr_UU8umR~OumAI7I=|2+Q6o3Q%VtmR7%A3;oCB7DZ!%PSkugE{ zmQW+eA@9hYY%ooXk#&*YG7J+Q%)T`UG(36tl9vM57484XPG-1@*anPb^Tj(oE5aEr)F1xo>pk`^1i`vz_ zh;VB7GGJu*$f32i!pxIrGTr!2!)SsynU=xsDeUajS&Q6|Ls=p7?69FoJZIa{OqR_1 z_kuI*Ui>DFEd@@#9Ux7#4-*FO@1F@oQ3q_bO@~;vd_)`dF2&|Xpo2~p0P86U zBmR-zYx`h;ZY+LuPxeF*L`H>JHs||9_Nzo@KPh&Z8yc~gyQX}A1F)M&!I<#8$QZ^A*=53jaGGX0TLX0OVaFdCCmWV!%XxFzR zF7g=j$nB4!e9- zen}a#>o1#cDm8w?5morxW(WRKzP@`P|~Sykb@0OPlBl4zgC zy-ZFV%?yFIFDns=e%-Kz+a+NrT~ONjw%p5iGbu5<)8S|jBH@9`6-+gOi&*-dNt+7A zNa)%H{`}{)DyC+bL`78a3v7D;vM=2`wpy!^>4yyk@&&i;?+OnL)?^$6UWy2DswOX$xO2cb>j)*v_H)DPvK{$Zo1?q+)B!s7l%znVtLyxmNFDROiM2C z2MODBc2qd|j(~JA{)`wrjC#pL<#(*=V~`vndmABof&@qVVmj7-2^Oc1BW{VHLWnC| zMOz~VwAdISkM$|C8gn*tC2czP$R7wx8`-}G`wEvzE*caGIA)v?e~j31eWy$Ak&8Vd zJPZQ_S-@h>Vjt!&qBY=q+vd%8IB4?h>P>VrI9#t$9v$uv=Mfi3)X6cp8x>!)E>cq< z9QK??nz`VaFEyf8k4$5ikE}K9{L!clqYqeXTMlvT1c^54-HWYEL5E!}0oKzKM*?E} zHufO^J(>OKo*YOZh>QzyY|jr#9M(z9e^Tv#6@w|VC#FR)j(%HYu|#CGWkYo{Fdu2{ z%u6Pf!1^?kdBLD57QUkvi$OJHYyB9JKAYiLX40qfPv*{dt3nFV6}g8q z6kqDGz1!D@TPjP*ZYPuUB3wx zUxKExeI?~`?+K%xs>4ZnBcw4*`#1Koelp{QSa=YYZu6sG8q`~8v2fD|h^RTv-P-S6 z(NriP3>aDyPLSl1R`?F(PFElMZ~F9zq2}m=c@xmsliiz}zP6(EWt;8bHKkww#=O`n zYLBNM)BA~Vg%}bDO!O_%^R?HnAd7m!{d5h~33Oh91k;>%fv9UV`O&%qK~^1J9~b9L z-nF~lbU*Aq;IHEn!0jc;|Crb)j|xQvR?8`-A+@N2PV{8_#Dc~AVuo;!ub&@$-nbUp z0|;sNaKjVfHJV5dX9jMma4=B<`sf)ClYZrxK$DhLJrsqn?)I*ws=DO%XcYaJ z!jfc3b(qxoMtmuC7Q50A|En*Os2f+P10?7t90LK(*(a7>!Vf@r`3nMyW41jq5y~$F z4OblOf4Ku#gZ!44gioxa`FXu5jHy)n9f7(wAW~HoNEcz$if0@(dASS|e82X|Fh}^M z?`HNEPpR~?(kqEW$v?|bK*A;As(N+NP#7b^(Qy0&ng``C5*zT-#!C=P^Jovl|tR$h=}Y&P#Sm=!8^TS|qejsNb% zihf)1`vqU+HXFY^vvy}5FKPor2xYZ@Inx!Ikar}+-im%^^VCousM(%Nf{Y-B~!NJRzJd-uH@!^GJ=DfPZ1MpDZ6e&fptkWr%l=-I~aVBw_vlc z>Axo*@;dVeC~Fc-O9^n+B~2-!BY|!X^L+~mG*`E;O#hzj4mzaC zO+Nh%M}hBZUO!(%=YxVl<2H2tf`td<-v&a6Pbw^Q@E?xSK9y#?8a&RSwY<%z>qV6Q z0WrbGh)dP*TK0^u3&QHWnRFehVQcMB+s3*3u``+?bHBI>dX_`H`|ehp0SYGzIDm~^ zEB|3&gAaevK6%?qNoNmmeT=BL2eY&$e~>F$e>LrMh@r zuRfLmKNKXRBdbb1pHA~2Dwp4SqD~C)=9GAmc^cQlsRR!n&;0ltE__o?5WZ-*t6wBg zD!+}@bDr6HPJ=Ch{GC8+k9<}rjt z)U%yl`kBq%t}+yA9U_c@nhdl$3l}qzjUSp-_Lr# z0nf4T57_OSc(6zi)A_-KGTuBMtMLoWIN@e!2j8$gsjBo+YEpYQMBw?|sHL_Sp&wq@ zs;$7J4D#O*&Db+9?4wFhwzoKIgF#KCh;`Evn=~fCIwqRX!7bx!_F2kUGF{a2I8X>Z z@56gafAuFV^*L^NULE!5Ac6IJCEYI?E*#htNjHG`xB~w_yfwbr9fs-b;%BN3JeKpQ zr^tHQ!Yoagi_pdD)lu=&E1q~9xS+`~@b}N6{~E4#*jf(LMc`}*`>?gH?J@GKxkov( zaNf*}6=dN_YUw=)N=yCUB&U78P;rD3wT1E7t4KW zepA>N19Ojr$6u4KYc*E955G{^H4W^4GO5zr$?u;bI^R`_*Gf3p-tpG& z@(Q_e8TA(kU^dYQQ`Uynaz0>*1|`58Z0Y5<2GGy%kRn=S+49E zmr&u?vle>njAC3E$ZQ{GV%WO|7qDWMbD2cvSyfdE*r%>@!68QmNwkJo0tX19@3MD6 zInmSvjO<}vgWQk*mi`SKzo_IcCvqh(nCJn9gGRX~(0IOr3WZ0q18CC{bAgNt7)Jh? zMuS38*)0e{&3UuQDO8#h)^u!BTi2g!6MW3@2Gvry*gve2iG=Ny-DZ%+A#tW=&uKP~ ze2l1_DZtu*IS*N=QXL*Mz2t$%i4B|(4SV}21lDD^#olz7A_`-T--E4wX@ikx#WTv5 zh4W@=peO}TR7>ZMS6b}zCN=H(fr=#@r#;9w6_jKJ(6R~B5m5n#F*4`3O(D+LvhZo_ zpU-{@1%8fG$zq0^fCyeIWJom07uY0M@xkHxs;;EAorJ(_$gEVT(J&vBXT7e09SpQ;_C-l~LGkZ^D_Y!(FAYCHloo(m)NeC42!(uwm&JCm7GB zzIc=G)MNIs>qqV+9)wtnv)3p=NrZcBw%|03114@)R++nv@8QJy&#ubv8@~E&E@5YO z{oXu5^ah3?%Ie^1wg)V+z*wk*?Vq{La}y(wX6GKb0|HO%c}>@wGP~0HW-EI}B~7fwCar(?KPzOzV7sMuX(ez-T&P*{T1}!JL#wBX zu(n_>1LtbgMn}xQazbOo1x<;CKYbMaYcXD;uiH)#g)=1_z*atVz$mcc8D~nt`7qZ} zlmo}9r|={w&-eI{8ufia#SxBD{wOpOl41kUwhY!3RQQK5HW9E(#m`kY^{nrm&AbZ( zzK>SSV1b*02-zs6jWf;VT_;xb#Nd9bEhjhQey$zz9Lt()M6?~}OKa~UKTjCN7wwH<(vP|2%x&Y;9 zgN@bo07{GrdZ!@kBnq8h4n#am@~_XJlhrcadQhv@65wM{wg12RZIA_#{?WewG3{gF zV!v&a4)%gwycT+m);l|(dhu;qQmnV22ssUgCwm{M16LNT1Lywlh>t1>&3wg0!ZbjbN4;7DIx zWGZ|S&u9c^IW7!M=gc!YFPSeg^w?a19y16ZUbahvPVP`XJ z5Nm=R!Qjis%v-(<_^FS(eqldaLy>08bUcYh2!v;x9(prZh@D~8L8AGdK!^Ej>H#td z(%fB@o4fnFbl~`!oWT?$uvuX8l5EClcjUH6g>qbFjTaj zRIs)h+mb>}=e77Emn(1|tv@e)=NX)#&vjcR_dUmSAkmvBQEF;RyG(LvZ{3O;(u zyrUn4Z@#jx5V22H5-r9|hvRI7KzMT>?j++h^Ri0=nzW!S zh{R~A0rY={_8At=5l!CqrYUtr7}z(?m8L~dBO64!I(#7SBQJ;q1`1XS@>Z6kmy)RE zGX6ZubsL<7zu%Glu9Me0m`{GYIqc*ECii1YfhaRof45fnieAhg;DYu%X(yu5!);x0 zPRDFBuTD~CrIfmGRf>{)lHJ7qJl475tbu;e(qWfNgJS~?(rNP{JmFEC8qW-4@;0XR zZwZ@DTH7a+_WkjOOD|0GwT7Lrr@l4aG=fA8-~2aT|HkXzc>Q1T_qvc({^{8)AD$2t zi4o$-dXHtY29G-u3uPX#-1%dz@pl`D%4Pu|$myXn#X9@c6WL(n>Z|_GuTUcxaWTg_ zu>sg63cgy(oWrlU&)$+x5b^gF5^ctG$D>RHe|W*kza10?(OaT6M6}Rz=(unLT}UP= z79|&kG${cY5b=@H{pha;4r!JyVGZ7QW=S;#7}(b?h+J;WjThr=qr)S0*Skl8S$EQ;Lzimt04GJJq=2tb)E((_xp&fMWv<(CP5SJ>XHC zm`o30@-e3LZHkyp*f=DT_WtyM%gj&lH-{XvC%-gY*Mme1U4LA6Wa$*4NE{K5&z3!q z)p@{)SUB^LW#6JThdoU=mHZW=;`ChYX6-v}`E0N?vzz$n8m8 z;TTO_h`ur8kRhoOk>s;rmQojl{ynQwDOLnkx(T$$i)Zpl`ie+ksA%1&U@cX4MfqAT ztFZ;YF2PykSN)lv0z6;PqH1T|aM$lJc>tU0M1`q(7qvpK?EYS2nbTfn9Y-{}yY6Ys z8k-*EwJAt1mr_@5NHUVIuv^-atPTYvF4 z5b>8a5^dU4+r4aD=$KGLJxC^L7Uf?IDbj*}or&S%y~s~T z4jGmX5ludKW+`<=7})0yl}1HSqpNs(x?Caeg7>gEhO*|fGS+6}U!+irC0#zqwHllS zzq=rFtB_aQnoNItwcX76jqkx02T)KzPCFsn@py*d0;p!kXv>bX>Th?j#d53o^@t8nmD+h{R~=LG%y92MmiBh{hlK zGn6{Q4D6d1iZjBf(M=*fT;7q7(U(O0gGFma1*nV21BwJA!hl#-XOiZK!| zGF#Z+Cfe7Wbjz{~e!gFEnZ+5t zSFn?I)ORLZhLEU{TmNzU|B%~v+6aSx@daNS)1=wtkLeoKFJ??PWZ57u#p0-MzOHhR z|BMG%&&S4qr-MIHDyIhtQ~b?mlE_4qWzj|Ie)YcOh9dVn6MmOhUpF9qQF@eWLA|sL z*R7cb}sQ%Ws~*iK*u zgsLO8kpqFZ@Rkq1u>*F$F-CT9Vi*tQBo+_#6d#eEM1~0X;hUH$S#mc_LeNJQW2XLooAK5>R3`~|M`kI;yz|#4m zCTdX?;$FR6pUG{+&uuZ=IW^5z@EH2!QIAAwK8?bC#2*5L>mk=8fXGIeb;pp2R$bUF zDu>G)(xHz$Krl7VDSSXWf)O_VRwSvyWLx`l>uG@bIahkPaFNv;4Juf3Fb)l z%~;wcaDozx`2h)2^@;0PnloIN9EPL7E@4NUJ{50}^|3_;K|4-4@mW(rAJhfHvd1Qs z4_L8$yGk{;To#J3ca2-qaxoKdRC-#}wcEUSb)j`6%P3N(xiQ2+73!*$c$-7VggaAN zJ`)~atha`+qP{xcD|&|ETnM>3I^Wf8n}H<0M4pB-zaj)ILo0JTbP${PBqNY00%*MC{h()eq`ja2TLxJ#%G-fwjK5qeYl;X{0Nht6pNS~LqJuQB`lsuY zBL_Mi{z=x}HZJvCdYWray}N}rq^Tu5$yj2+_3G^E)?R3Tt zO$7bzS~UCgaA5VgGH{u3CExyo z>o)ysLzo$36;8UYpAU2%1JodNhu`uifu-KSLe_4C_Px>rkSyP52YHtfhQr!G3O_Uq z?ui^C3#Ole$@0kFQj-B#I#<=jETc?3pdqpG6Mo5I`Ozn6AJiIV2s$Fk5&}k`mx)XK;k=$phGS zKhM6ILvT8vwO(v+5qi2jb0YgmEbSsZMTz;`w77}d@>MF$DXDV~!(n8XlzUF^wr9-R z;s%3&t$?iDhKYbz>O5iD2b155s9# z6$X}trJXB2jCFjLB}^2Bl&+Xp47WF$=T_eKUa4D=3|=BCb-K6YuLK6HE~jlzfKsk@ z{M|ZbMX7NeE7Zl$c^hjl{qhlj^Gy9>2toB4!)yvFMGl7MTG5-i35#$^mSsqaXsi;Ptr~N0;!YzdE2RXiwRkKH0g1 z^5^FnYFNV9Ln-~3(k7Y*KqWSdv!|^D;L#H-R*qJ378QX#!{Tn18Tcud9R%P);51AJ z?0l{9Qq51yV}cdqM)LjwM^YaOGKb;B^?_&R*aXGFJ~9wHGy>x(iTuea!b&}LJsNYY zR*6;;jdK-+B>v77dah5AVN*DwtJgT6Hd~itgS-%rp}zjK&O-h<>SsM09R;2Wd`~K$ z8X!ypaC@3SCZa5fEYRTE{g@pL-)oQiQCWFjhy0z?wO9@6wQ00wEp3r5#u80#Hxo1S z{78oz306+ukLeKT&-iu%>KfYCLhPHmRL z=np;f!xpOP2;y*8V`uK5L2e$dw4N~|SPZNIe4+@Y^rEQUIHq5)22u+-5O@ZRIr?n43Y z^O^R^DYm@(;0I57BvOkh6dq%NARt_i*{*&>Ho}ZshIF*b{LT@1T;`xQ1LS^!$uUlm zebQl!khzxvDFdEW21nSf9)is@@G6)a2B$sR$Uk*1LiZP7PGq0;#T|mjDAAa2;V>2N z*-ph-Lp6yZIEw6&_Qa`^v4$D%+GG&4W0d0`G-dPw9Uv^bY|^=aWlJ|JRI^JZ!3euo zxK&N((|(7=Ck35)jSH9O+J|zCqBUCUgB(=BuG;Z8S#(Ue)8(bpp|OSfs|d>)D|6i= zrx-5zkSil|o!mERND_!oae$vNwbK(eV$mg7Kn|)?>H+p}q;T*3O%mk2Q~y zg$qQ*PPgg$>%@SSqqM7eP|lU{Umu{XC{@WL`MUhmXd|u7?^yCNv7L8zW5m<#^Q zV*B;>x}z*RAIe`If1gn_0^HddhBo_=EZ*-|x4l`)=oNO5g;+W?885RgVuV6vP*lU70KwJ)Rww25 zYn99{P|B$dN%WXZ7;3_s)4n5neJ>H{B}NoWLiW(sw;C`25yZ?x0X_y7ZR{u~Cmb0b z+vGBGe%q9LlV++%#2}pbah(^`=XM4o?HC0S>{H~%(A*12-K1eX$2fht!4l_jDS8qs zipcQr?K1ZeoZmGguYK){RO4#FeY&lIcfAUVW(x=J-br*HxT`}fc0gsar!a61{|a1P zXRAH0Khk%eu=(mN(xFz^A5+BQItyavvRTo%t+QWmSn96HgoHY@BT3#mnA82#23}b2 z?S~;c)&xpZf}w`b5Z5i|8mN@e#Usg(%3&)zY_OWvK^5#4ds#4xAydEF>Bq8Wtz7w_ zC3vEa0`nwM^3U0d>zD7_AspT-d-}beX$01aIbpF@bXCviI1Pks*h^G$KzX(>T@*LK zjTn(2ER|{0=706{Ef4v59cxA#zW%Z5%u=&%9S%Bd99;70FF1bs($Pp*W4r;Vz~Cu^ z`$-gW%ML40T+U~_`;#OAoA4Hm+ZgGGW)u6ZgUq3lzui}A+%v=FYu`-R8oOJoJnBSmdE>x!-pyu za#U8VYvi^Zm^wc@lzmsR_l9t(OatLe61H9&6i~r;DtFnRFB_sZxR)oMK4XG=#d%_? zKxuB;2&Sg!KJENr7!=OPQE(<9+T5FCQ(TLR*A zS{9{*WrdQV>3v_X@ix|rkoa5fRd25!e=H^a`*}95;r#38aBivZH+*H{`7E`}2o` zHTNS}d(#0NPfco~{y(KWJ66^ZukMh3bb4M*wn(47aRi3J({JK=LS;Ds4*X6X zU5Ip;?TaXX7A3eS(FgZaJZz|;P}*j-sk&>__Aq-IlFpo42hU|R-ATcUUcy3Z?n4LR z!cFth5`F1Yui}eORUs(@WOou_ku(yc zV5;W`vvB$2eGP#@~>)@36@-YW?8qtXB!Ae0uup<}<{X%d}us)zG4V%jeFp~!9^ z?OJHHF!PteufwVbMr@Yw##?%~Kl%$|Px~ex6r&GsEFVhM6Rah23S+Eb`m^QpM+6jO zpVZAb>na2S7fu`uDHA4zAQ;^Tc|x$Fsl=FZkrnnp^Fq4quw8yt;zCKJK1(t4aw%j~ z!D)I;NyvA#oZ?Qw-87rR5>vc34%8p%2hVX=bj20(HOjcX(^CaetaxrqYJ#Scol1K- zz@<3|m#M?dC10%&Lu(R?y3AI)sMNs)Tf1YIn)tJ#6G(lxUE&BW^qqnhoH*c6vU=U( zjuDw%hd_D-omzw31-nc|x3k4hxxB5*Fc0MgfrqMgsQ`H_KGpdZ>n)U#eKjkJZ1Giq zA<-8r(xN{F^#pJ3IWhxo`w=@KN7#q{xGi(Pc+==(tZ`K-D7iX zez3S9PR4FX+DjGzi$55ni5zf>`6r&-$^GxXBdGCH-? zS2RT?{<=Ip8`eSWaeEEN413tTf6q*u#dW_X(w;#J4QCL z7HGss%(_Tp6ST$NCzyGqH~lyPZ%5x_&T^0wbid(#y*!wfdd8P}`kEqmTM$?_?@C;A zv23a4JYtyc6a@|dy|sy(=iPyq20ZYf1l|SR6A#Y!i0wtkYz7&y2Ec0AP(x0jd|dN@ z)r9@E^o`;mCuWYz6XTTs{v6#`B0HdGN|v^I`44Yq#wFW6slfQmMC~q-QJv@{^q-px zdj?F+>rYVu_|Q}>lqqDnELl(4y~iV!jRtL44|_!wY2FhF;N_2vI4qQI%jOT z^JGTtH!W|Gld&t3_Ps^k{3pk8JO`a)E+d6Y}n;_^eU$phvJx!0qsHWKJ-EHuM0 zqf=AuMnb45p$=vN%y8dY;iZ${CBv4lMHFkpY#^m|T}#xTZXDGp8JFM)1eKYrmgE)e zd29-cG$7B}jC$~*QM|<;fe&&qOqqj9<7e0b7Gjy;q~m0)`=gdHzw%iAM7;Exuwe?- z0WnPn0t7opSly(XPc<@oe`)6yB(Wnh5vXzRc89jiwcU82rzkNjNx1_%Uur-R!{G@Cehcg|vaz?~f8 z(fz6u-Gu(L_?O@sx|^*zec`?egq>C3*R54H=&LFW4swL{#m0JzAUCSFHa+7&N5*Xk zuwYzw)&=vxX@pUj0=;uLyY;A{ryxT0_GXXdcN0uVx^#gxwukPkzRB{Z=rM$;_%~)< z6-?kABP-D@;<;YDPxh#__q6;v33@&A6ulGaw*efLma1&6ItN2OYi4Hce59`!naJ9p zVZ%{tqV)~Xmb>pE7UkZxV+4F0z4uv50nX5UMtijiVA>jKA8Vqz+~lV<4DS+LqbY3SRaj$S#dAqd;E7%%+rG`l z`I1QA<6`EeQpl?Qlk^_pkS{4)hwc8`O~<3x_tjER$RitpDvI%0P})vrZyo7`eq}M; z>&ituksc|!=?-=wlvINTPOzLHs2O780OEuUiW z5{{rt;y>NTOqbb}umvkJQS$9%4fcT{k30Bta-U|QpX#1QV0qml4Y1^~Jym`A@)a{{ z+5PChMyKvQMC9I*tWkpf>Wf!6)?v|qB@GG?P+U^pdpp)2fPI99#F^Uwu%Klsd#^?W z1;HuUjstn^4KvL-a?Q<#wj2osa0QnmGQDY#Q_)w~;#AyNELaP^X*nNzCPR_^3`|LR zpwVs?&ze|mKbTYVqvb4cGIm1JzOg7+eB(HcWubG-Mul@Hj&SK&UcBu#ctl+ycfWJf zh68ATk{;*FbWsnu3 z8q2Ni*!T#aUB^Dpe}7IaOc%j*exdIE3bHP3%I5Dh_e~7#>UDuy{Ehb+g>1h``J0(p z1=f}0#?UZ{G+0h{e1PMIob&5=@pQP3zx@7yCUIhCGKk}`K}|I9P|l-kX$A4_4jDkF z>&0S&^v#z*U=TX zW*<|^xl{Ylg|vn{DOkx{L|ENp_z+yANg-OYZ+-f8V(FO*BxR7yZZd3wsUbi?YY)=o za7wZt3d?y<6P1CXf@0QG5yIXIS?d-rS9Z)xbx30k$O9c~MLe1UmKInLvtO8J4cOUm zy~I*C3q>T| z!blKNs({eT?=wQ$ghC~u7Q1DVW?~dfwLBpfzkv8(NeREzN7}p$xyX=@@`3}XG(d+4 z<;8I5*zb87M5kSAk$xL7Z59JiWHyoZ%r)DX`6}QyVAX=7w#s-BExb9O0|l^W{7?@| z(ML8{jwBli){{AfFjg@G*$Vlhf=WIc@cD_r2MSR$!W|^VUy~G%(Zqy8+&sKsXqP2a z+z7iIm1t#!LM6pi^V6I>Kxlhst_r4%vIJD@@l4MZ;bGgR;pRUactc8Vq4FS2&DeWF}=Hz9CK4-SLj@KZ9vX_ zJP7v_;ktHAvJq{R71-gc0z;xNeAuA3H(461C(PY%?(0 zLk|Ca`|>HQuRz&}`LdtHM7T(Pv4jl(0GRNbi9a$V5fs|VEmg6-as$AS(LOB z6hxqp(Q`cu?>G(9nvEQj^o0g1oQLJ`F{~&eqodc8+#ldPZW(#)%dds1r?ajSZ4G=H zRZukB7wVw=RX-8t{A5vy-#xiymX`W8w0$1*SdII2w*nc6ju zMtoPy%sRP9pD?oF)d53BBQ`{9>!3}yU&1UZJ?cjY_&EA+a#n(Wi%uCG)XRWrt7Lqx zq%X^XHwA%ZbE!r(=S!8UEg%NzO_SgN&|8=~yIb$NugY225yZWHG_i7PS-{9@+42nX zoD)1?7ZcL0oN%a=xSBp2Gp7h`@9lNLv~d=oD*YbVh2r6x0E431Oz7BS+|n&1tRx3y zrmGw(pOq`ctoh_H0Xb0&M&zzvs*`}3gL{W3OXF3PFRQeyMba9xnNhP`!=sq%PChO; z01%GzV~^xXET+jH6d|e5qm&r7C3 z;`7F01424M&!C(j+`r^#wWClNXJd$(rw#0pwBPMCzh+m<4x2E8?~;totn8#}PNK=0 z+A$kAEaTQwb9A+jsqedn)iSl_CdoAaQn%hJ%f-orr_A589_wM@e;_W3T?DwzGUj}_ z8!#E?tgxva??H2d7*|VrxBHK6gLJ1)?8`w22J8DWAN%?~B#dnuTA15_rQZ&1eL>9` z8e#mCLKc{;&v5(oa_1fK&PJ352a2E`cS6p170;Ok&;^&sY+eXH5~P;#bC4=0q-rev)0v#W-C%}Sn*Sei0t#_>H%SqDnL!{t`%De~S zpt@LPW7|0r@x?Gb`WVB$=(avX=Vp>(tb`lnqq$SDn zogskG?+lwcNi3MKR|@MoJ-Gz|M8 z8h@U(O+DGmYfUq$b}yVd)DT|#=f3N#A9SooW->lGAd_Qw-IJQk6*3Acv@D7lOX?+q zOIM+ua=pFQA@T3s23|l-@;4TAE)Yctb`mAEf29kITN1&(IenUjOwlwoQms9CJOZBr zhi%r2XwydP%;rgViI{)x(kWSFM5#t|8++70!56mhZ;F3BP)oDLaos+u`>Y_=I;oX1DQOmx1-80Dc+7!P|O)Idj9kvIDD5RirvXes`wq>2Zq{`=_^?jF4hBe4j zd(j~rE{toU!AEnRJSc035BA9bIz4O`TBII-`UAtz*-!8Sp^DrA`+p=a?}a-|&!m;c zWC+en^x(rZP8w<`6pwhWt6n>`0!%+8l?rF~;7b`z_EWHucZsmNCGlanNYg?zWxjd$ znncrcl}XAV**&J&1TrIlf>s};sF4(9e&&~op2sUgBSj>w=puxCm$TNaU$1SMSL={Q z8<2-PR*Sedge|PGAf_*w7mV4taD7HocS^;@)u0_p@zKGY>?POnM*Hae8Kh&4qckHJ ztos0Q-E^sfN(x>$lnN>zvbM(ttA>#vVpIX4SHI+hv&EnZE?_ zvzHY5rjNCM9dwo^pAdisQEq^a5X_6=(6&2vKaS42(Ixp7HffgxP+&Kg@*%WbpZ+EA zd(5f}M{S$&DpLA*wg?Jh$NIAtm7<4kr4~yy9Be3k0%N3Z3bGmUQw5cL-R~U`fe#j< zYKS{RNxUf`6-y1B)4ry62Er5#oYC%oVl5ak6_-~nP~KKR=GLC2F?mb@EGg|Y4nfyy z^@9sK$6)90MvS1xM6a2zo1cBB1{L^jTzOZZkmIsqJz)0~!PJDf;_Ui}0|4PPF@A<0 zMPn9yTM?29jhj~ruH^0JOwK5ruABKiupsj6S#&7cfq##K?DFuTc-z%A)PO<)w@Ft- zq3P#!5g7chfTQmwFkd}eeI8kBr9n6h(^!1d7WG2UjAzY;>hDtOV#B{89R3olmvyAe z=Dc>$FJ0qsHC$Tk7i0xhaY=+SmNiP6mXAZN=F4bzT>KBYH@$^Vzv zt7Z~RN&>-dD*cFt&A_BIQ+2F*t^l6{M|3BOXv5m_)H_J$keKiE{V`d1*|5f93wtKM z!aKL|SCelqQ&XcQaLtdX+qNOr`8B!x&HC=q{w@7BP}6Q`FEPmG^MroX)H1Mc40oD_ zDWsutqLV`mcleC2hs)a^8~6+Fwn&ou)`opJUYg{1gV)6zdsfyUZyu07bb8(mw(#Hj zV+afbC!d9Lgevj?9Qf_JdJw5FTjvq(=S8?Ek^6U(JT0ifP&($-$$G2Q4lui#QZAgE z`;R3wT}XjSUPHp_9>V*fA`NqqlD(;u&k_p{6+ub;WVezbW6X>I3R*jorbbedy%Sh2 zdg-VP^%Ui@rt=W?7l~TeIor`Ap34IoD?sk4SWDuO6w$PSf|%K2o-`q+!nI=yolWJC zQ2TZ)g$H{xc97b@Ypct%I829{Kq*Er-0*ecwyjcqX5b3MenU$5CjY6yTayb9dZQpTh)4l+gixLjg^vD= zrHOaetsKfti)uL+fFiqwv~Qx-#>`y;zY3}BAGTe@8*A#(c^AlwKIxtKqZD~?ZS|*E zBhE%LD?iE_rY}<=cUVx#Ck;Li5qNJdVoJEJn8Ztx(y`dkIpzKGb1y{Ez!~k@gAO-5 zyFx>pm^r4$jMFr=YbfYr(#~*g-fxUFC|}mltfvDARJSRi1G!MuVu&*K5KCS19*^0 z7NA!zYn!sPr8RmBS0Ug0r71Oiy9roSlBNW!R|Y>qepxmPl4vjyZxq%wdI9A);n536 zt1W~47;i_^8f#$pgx#k+=JyAyw*zaf6by$!8ut&{hHmVo)rRS0`zKCaY6x$GGhYqX zw;I+%bJ^cGAQPi_T~b=iWwMH@v@A+#iyB1(i?Mn;JErnXn&QDe+kZ0+nxScFCfj&+y#qe@58192(58&kn9q^!5HWw-r&6-WicyVZ z*LSVGht6-}Ul)G8B^PH(;JUq2_gq4(%3E^zy3YKN!+ZQbLoNB_eZwHzZBhC(Gb_Wo za@-miq>zTn%1jJ$+>&$tm@J)*H1JhE9?~RF?oNepJU6L|1Ru$I@F=e$-rpkwX!p38 zZ<4lKt$_ZxBn(Rv{^YWcQR|6HE^S3Rt<9rbbed z{Z?2kcpNJa4i}ZOrVA7HRmoVjdA_n^Ua3JEsY4!WTPfht6tT3yf|$Bso;P9V!u>6l zyj?6Ip$_d>jE@fH>>#y&xaJeUZQG#+DkXI8SS+M+z}gxes1`zk zh*1HAUip+2)FKot3pd}ZkT4acV5;WvdnYCQSsU%}Jm4ZjJ}w9iqEZJPCX^G! zp<{pKVG@~ftw-`XWZEhPpvZ0^?UQe{HuasyZ^EhvM{Sq(ELwbjx&R7d&-$$%k))4q ztsYG^6lf%K3}dWe2C@|agwI{goJ!Y+d1Y0+>H@aX=%k08>5G%dlC+UCM-qI{4~8F&0z}g5yPmY`#2Ws7fW3UsTA_-kL-Ix1OJ+tXETyop-;cWa`VHIrd+@@qSa-)?ud`W5d$*jy?vD zk%OtwY_(o9EOE@KP*=`#q47OcfuDG4LxPKk6`Ounm4~!5gEGSEJD_rLkeQ3p8y>{; zC~EY;MzPi7;8lZ;Uj+;+lYB76H3J*WBae=1jEoCt6oSfJP8;eP_98a<1qP6pd{#qv zi8x;JU%*${7^ch-{}j>x7mBD#<^|JV=DA)>Vy0v=tF#`%elC@jmn| z{a%@3DXbo}@U%V1D*<|%7QI!Zk951h;c0MJfY@&*-PB{ z?`#lmLqmi)wnRHO&k)!C_IR8Jz&v{e9~&Frs)|3Cskaw+J@pFxovR`jYU3JW0X zfN!g_iOI@DG1d-|NJ0edF`VRsI+&0W?z5HV6^B!nOZ*C%oar+unneCxes;I!Vh)o5 z2X#tYjfHCyyz*N_;O{oYSr_F_nx`=OMz6FHl;W>1TI-lAXWlQ)3d5r4wcqs*$2vUM zXEA|9BGX6`mTWzb$9sGx=c(#x2<^YD$5U-CLIoK#^Mj(mO^7~dFw5HgTGZsO$vG5l z&9=$5EKI~SP8YK*_$)A#iZys+`NZcRI!i zEH2Vsdo%!fRByJD{=m+DX}mEXr%{%NEeLku&_F3b)Ye4v7_|+i7b9sffI`hpK!X24 zkjCa}i#k`y$m{OHY!9{P&8y5G4WZg#G3+!`^2NM3M`8nJ(z((#;o7B-sW}pxe)%Nc zbuLFXtBxU}CLUDA?@KM9=$vQnn2^lzJ_UWiH<^JJA%`kt{(;BhW+=3Y6MZrQiVX7) zJMY5aIt2lLXk)e^LZa>f2<2*9;b8wNIWO{rbo1E5!0unaE7!s8?YHN?>~EHB0d*lS zDY3Z1erU!zJS>#8M<>OQz3SZD7%1%!#6=TIc4cXj=uu4aVm8*gxfBBY9JEKVL8pw*yfHpC{U33aXTeVrV84VLQiSzCp4L%JF<&qK5hJJ_c zDjz5g!wirlP9|<{A$5?}7?0~p%DiHD`kOrB#*axnaS3N58@F{;eH`_KM}QZ%en5-| zUok2F+yoQ{B)lb5d=OIMbws3LQ8!5cIf)ZJbAwbAUVlUP zX>p@6;%-iQ-=MDvQLU$@*Ppv$3?^>`_%0dq%9oBrFZirw@yjisF#%`@DI6>lL}$4U z(G2w3r5Ob)&j*cIf<8AU`+IYQ|2~kmp$ZaJULU^k@$so)>#~N~m!A#1aM#zCidA3* z{bb^vVx>Y7F5+r#yb;Da%LUE95&za47J?xJWe*z*Ab@i}>`W{SQ1%gYT%|;%@{^Er z`>(HO4K1|d)D)$>_1$s8{^{X3q9ML=@_4}cWFhVT_i47H3hW$5-f=Ohwk2lx^-I~ ztiz9XI0t*k78-!px4%xf2M-hG&=Kv{K2O{jV~)54f_eQ0JvlnITNQsJU+*ORCa4I` zEsr8Grs7Lc6c#|%0soiIIwmUbeJP8r9-(W@%YJXf(XwXJZKnh7oG2sd}JvU%N zB8}{OY2l#Zd=`@h2X$6Ulf|zFbj>$J;J^B$;I7ou@Ek_p>WemvQgrpPxrV!b>gDmI zJS2hL@O^YP+2NtJfD0xZnMIPYXyaos)$c8_L|4y1=yhYhScE(2kQ;ITSxQDjDA9wLNLl{nhjdSem#U*47Nj=~`ej7LJacq! zJ&t4^PqN+Q@1hog#TEyeu_1|%rfiV*Qj=+~HpLh+v=KzrSi!PzqFZMcecrZFHq+p! zDEsx=+DEsa!0KDLrkW^awK753F(Zt5 z;xY*4ja&58*!Z3m{LMn$)5zP95;(U4isZPe?*$Q902zCH7wrv9RwjngzX^#XM92X{ zSs|zc2`S+rn|VQLBxR+9tJw5hfl0|UGN0tdLk0^uOy(TaIc+WGE=}kf?}@ju-JQ=knEZkC(_k=AVIY=^=`Orv~Rhk_3R1KDJG zHK3oM+lhPggD`!hh~x3=8%S*>G)LmP;WAHY9=qWOop~_vM^E5vrQ)_v%lD!lu?XkuNw5La!s^2*7Ad#8Chvec(6>Jtsw9AZdF?rz)MLbEWnMM=^z&E zym$`_{-5tk&dvhx{z=!nE&|lH7;#KD3rhM?wwL2$L>R(rL}ygwz6VDWyUV`7olo7b z9jZ-Ox!#MnWo~%pXpG4Ve?AoV^|j1NMPGx*T>@1iHMrP^8tGYVqQsCSO{eYOsSCR~ z4ZpK)r@i!J_tGGV`K{^A>ZnK4Cg8G6OF=kL$t`P(0BZ)L@G_UbPS8L+t&GjAnG_n# z6biISNuQV`ZG4i}QB&DUGCTi^In0o%;!Qfb)ysrt|6D?LdvNo7I+SDRk#c^FYFPt` zt|TF*$?gb_xAuYLpV3Y!;|O}-TQEw_=WqZ;Km4c&^3M#VRC!ogU_N{n)JFlFMh9Sp z)wz*YZntiEO$3<#U2>L+&Chz-SlUZ2=xgmZm<#ni2Y<#j8a4BkZw6K(v6P`q0L=aY z>xX-FH(`z*((dl@$Bi-;h)E-uHE+{XW8-^L@wE!}${_DRisRhzE0E)=d=f=r0c7p- zS#~xtSsEL}`VxMw(^A1NXSSE)v)Qh0+W)dXTQjag$)&R7|+|Q zaoU*AUm4RiKN5jMz2u7=$UYA(V)UteY#}H{*I!s^yBTHPUCb!KlGqNt#OG5ToY@IG zV3#Vs@9e6I#cF?44Q!<(dQ~e-*78e__RlxoY*NjgQBh3 zD%pyKiI~Fqc!~v|0futU3hF?=M|YJA7K331ND(6wGc%Vw%xF%;btPq9H8}GrkGc(D z5=&mjSy;1qS$P!kfJcBAv$ju+2VXX!@L$Zga6hQb+n7kxvSzL(?%rOzpeRdsK^k!@ z7Q8^qY62&6`WmSqwDy|r{rp;W*xiEkt`Q|B$;BWO6Z5Q%v*Wp9YVfD31LF4ZnCoOi zS!<(okH~ANR`evEr?Mr#!>1?g<<>KtF4S@mW-i5oDhwFwm0Wnr+v?L;pr5pxPCq;d zXGQ_xzp?jD%c4Nhve>e1+qP}nw#~h4+qP}nwr$(qD?2wyRc<9!xew>0g7XLSp=-?U z9_T^YYEFSzyB4|=EIZX^TlzKYgC>hcu)7eo(c%xEU5LrR2;#Sf&%Q`6F+9HP(7sgH zPj;`6p#t2hBIS&g2s;?UVQpSb50*50hNx+FI2n4-A#=G)6tAfJmgH2>u@@eyOMS0% zDx&t>iCkYXknM4Dr_=CHRCX* z|KSz+{{wg($c##dHZ{3jbPhpVwOzCw4HYqs_2C>1It>Wnk`>f}euwTNA1DgN^p_$| zB5rCXb(GN@kL^OrxMFzfLmqJ#z$BiygtL{4{SU-zy?z0--n&w~2UXj**oH#7eqH&= zwgudKCX7)pD&%d~b`?_Q^<-Qd>;P$X7n!ibiEdHC_6m#H8V4SJ_wrehF7Jy&sdc%^6) zjlxvkuafMHZl!(UZLjqPt`*8;W1aT)6xR=Si?hOvwu5H|i^k&?%xun+yi)k9xA)MkjNF=>9w=3sE4t4TAqYQ*dHxSugj{>W`L$RrXG^=3w2s z5uLs4oPwCo5Dtt`Oa;zUGmkOH^of@lGwF-+nzy`FPKK>D_fyt1IzbZhQTtzs!gtq1 zeC?hq57s3>8`>WS#AX_Rm;b`=e-eK4LEGzu*_fOXz=j;ouINH6%rhM>A^L7|2ZrJ% z3Uu^b@xB#u7tZ1_=MlBsDMfZy&6Ha2F1cT7vBEB)6*)WJxKKOo-KYqom=#O3`w6&c z$vbzCnP|X<5*oNlaw4ikIh!$M-eheJU@9n* z_`dS1Kge4QjV;BmJmbz7Q zB~(+wE{B)eWCf|lqs&ky{vyBsrO^I!6xunU9rgT7^dJA4;(ZpV`8j!Nojmf`aPY@` zUrP3d92UOt@}7e6NpMXEb{ld`mOqKMXG&fSQJjpfQ;OquzJ>4 z>xM(Te*Uwc^ri8U5g4sSwXR)C7xE=bxT6_a^jqM=XiA4`kprN=P03dc4N~w8jI{Ia zvDs^lob7$z@P9&z{#D+d!GrnOl?|EsqA440UC_;7`w(zBrlmj}sHEn#MSwNKQFwlA z!JiSSHWMJPTN2q;!d@+qTJpHbYBeJ99MA|!n`L&Aox*s;wtcOdN@OqMz+=XmiSl4C zZB>uzl0?JcJMBPxFT0}})&Qa_DTryZJA&h_eISKrv{TAhg6_CxjN0ToE>yxJ%f!2e~E{U@1ZeFD&qdZ9MP!=Se0fca{no+l~MDsDb|uhSMk z)M6V;dOZbR*S}@1MB&Tb9Eeb&D8G6Og=Masb=gpvIhcA@W8FqJh#0%i2rL_#(cwbr zg+X%voDra9l`GUWE`X}>&?e;$bEASrb2aoq&qlgjWVt%WON|vqBJ1Us&uOGj9N&CS zM0>RlW;+fee>71eh>TZRHHlZ&OjKG@Kd0B<(sor9T#hL@2nQ;;C4C8C-7pMZ_NuRG z8i-fR+;0G5`V2+X5m$QhMPkv-65AA`i+?*2tLoZ=q+2!+aik_uvZ)W!LFnOIZ=lfM zs}qzXR(70##><(%4%Sg0*{OEB5bpwWohhjO zaIEiLrydb~qaub?S1L;jKQ(dOhIkFi)0$&_iCv8kkHKKb1>x$rvK9D?y=RC>n>KDXNGS96 z#qL`QY)R?*Cs4z;a_iA@`dNIrvrPqHD5nfHl}r}8Td&FUu*W4@S zA|&X}gK(~lHVpLLu*(w9OLxry^zXvWg-Gq+{Dt<|(}S(Ft*0*FO|EVsJjLOZ<6gPc z03P^XJO;m8DCf7>=2eiW8VX{DtnQ#Bdw)pbdF}L4j=)F0d84Ev9tTkDv%lqmemN1e z8js8K%x52>#u$Ke*dVNk2Dj4cUH0v7DIjxILPjb0!kl+46$8|w0rs8)1#rKM@Yh@; zvD1I^tiXyTwohyn@?rem*&y79h6uCmh<0wCA+C+FKwJjEym$v68yem!i@sE-w-zG1$x6jA)((+Kf`uF~oD~AwnULb|vy|tRhLe|zxrR*7 z449NmBl=XH|JZObhsuJ3I;XD2z_kip@e>jJ8{K-=L%EaTC5*b!FKGa!==_`7GUmpa z`!{=qVNvXwU*qGk7SHWjTrh#iEP{k3OW)J!9-ql&s%jcSr?cgFs?}9EKb>ZNPz<;c z(I*vVS*Kr{n%pfZo1(SJF3FCCiI~RuVwMG;1%`6b3Tj`!Uw4BK7KdRPND(IkH>ZF) z(r8x1bv=1bGc4yl_g^n*0#9DS*~-OjPgkErJ^caT-}W;k#=Vc2QdmhmiUShaCN4e< zsqhgd(v+-Qh)Yal7xYGY44~fCrCvOj@s|3+UO@HRD-+dw_2CC8kU6} z#V6n@6lQ;Xo0J%2Q^BR^=KV0B;v3dyf7W%!pe4_~?!o>zvy8ibFs6?bL>+Zyluft3 zmlub=mXM`?+nv?5ZNbv5>xfup8)RUtlnoExgC?40wm8^I47NoEF!w_{|F^W*qRmhy zfZ$CPtR(Ih_r|jNxd#y5nPfZ#GJbxm-4mNi@r!^hyzHF!#fl+4RG^M8*5K>1xynHD zWQ{S|w5wWil}ZMaiUQM3?-c=_vo<5Y!NZNbO&`zB~G>&%_ARmqnW0z8k zW@#$bUf7MIQX^ilMR_pI11$U-TiGE_i7r-~_%hTXVM~H)-b+eXw1p=@OZ`J-U(x5Q z7aM6-yFZDJG*y@-rPymz4YjXeq3HayHc=vdH3px&F}_?=-;U0(jsYpn z^*y))b8{YqfS9axnNSu5`KAB+Vce$n%Hu_8@=%(ZGuRu8*?FJQZ8IScr2T2BoR&(xeJ(D{RgE%*O= zo4^6?MN-9{#5pcs`od33!Wp286VYbZ{4L$gz>+DUf6V7Ad@gcwmCmd`&6?6`giXs= zM&`63w2L7GRAnhCw&lDKpZb5rSPN)pF9>VbuW31co-5@5ywJwDLgNRe#)% zlTEV=YRq+(Sa4qbqxwZ3i<}2#%now`n{*rd=_Z^Dcz8UAJ_g@6Wc_@+>7kKZXsukd zId5mzL;LN~4cv_gA4D=%44Jq0Ip#slW%$X!7S?*k2Vy0VmLgCqm*epHF;wXw`Mk=Q zWZKzfxI(2v$;Ck#st<|)FWFPx&c?E}AfLDK=6BF+`WBjWjO>i!ewjon4n68HU210F z%+VQ$kO?{`cEHOqE40&6KGT8yntu^SZ)7wUQ|jHK{-x%dOui8Yc*o0N)qf=s6?^@u zvzh2v6T+1q%Jt3?oCo&ES9}}7?UyBT`y`0D2tF&gQa{hUFfsmcG)PdI=C}n2_X>q| zs6HJ4m^aw2f}NIc6y%cs?aka9HAG-B0F0ineOdYq9qw*p!6l_sz}N-}0^0@%}QWdeZM>$g|XN02jVoSM_iLKw| z&TVxAA9N)E)kv~%d)2e1G1%#su&){A3r;RJ(mrh6p7fkOKiBqth3zp}v%L9Uh!hu8 z$>+aDkv0Aup&tuV`L=Ub(&;#+&A@U;?kFtvpSQcKjn9R)^BjPuA-#gC+X~XD@vy&| z&&$q^3)UdrAvZl!??~vP(b%{gPtRZz6Hvh2CGB%LUX8N>Es1>=l<(MLRla(NTGvSv zs_Fv?2eZH@v3n#W2BP+9K(wM8`zbiUHg5qa^5_k$mWE9yUAKgu@gE}v_bEH7NTaR4K@M3%{z>!~Sx(nK$F6K{96}kJv z$Fd~J6wiHnaal2f;h7qs@PxA&tYQv&ty&1U5&DP&3dxiulx67X@V~SagnO z2cEMT!`xU-)&n9$i4`BTw=+f@;8s1${ zCg46;=|8|3{5^Sm)f16vl`d3W7Np{)EExid6tmRai9ng_lgTmwW&p3*UbmkSgyd7Q zYC`$s32}89`N@oP?s-7S{H8z>wG|bR^?G9IgMOmGcb zX*3mRZqwBy-lMg+6gM8eX2q$Z-adz;1K<#_p=OP85MQ^8(7J5iZ}=B*m|{6$?XqHk zWdTE*B=l;zOIdOJFKluuke5xj6K>LDhFEk?^FaN&mqX5*@?Z34GMjuS_r(U>AMmIo z9(^3XU)Z{(B+C;c@11;vt{2wZLgtaW)-`^&&JpjzN?`H;a|>W7gf<1!JCif~N0H6l z8U56?9t$eVwpZ?k)3a-ePU>UmAAih;zElVQae?=x`fLO4-0^_`q%J8F-dapWYRT3h9k>7TGhWR zc_omqhW%c1GFbIoi$wn-nX5}q*I}6ivnvndr7Sg`TyV-lH$G&)faSBRi1*i3$=LG& zuZjo*Wls+{$8w1MPPlm{0FWX#us{15U90975!;J3tYn1_X^6e8WcA}3 zuIc~_)ka6pXFz#o)z^wJhk2(^38!+Ri|83G6kHKsTWVwBOa%+Ch@7DFH=>#QZtw5c zqJdgMO4YT*DlPsZ9bAAu!F|KoI?MhvrQAEj^d(d3rjKP?W+&T=>H@l& z0|W%Kr{mFL)Q zCEq30de_wk-li`dDgelZ0C6Amjd|Uv`oak-26}0-l{&#nzJvRG9mWGZGLcIki|-e@ zb}`ZX*uW1O;|WDoqks9T(qE2}VBuQBOB=CZ_sLDtelX?R=-5D*c0J&Gj5p{MoXSes z^(fd^lZE~-3JZczpFsZ_U@qpnDHu!$d^9Kc2ypvV)OF;698bX#wSvoSvRa$#ujc31 z7q*)`m_r4Ne;~cOz6T+l;kwdDh#E)Ofu8BXSs7=g|0Y>M_xh2H55)CU^fg{=%|95a}Z?ujQ<=O)TAc~~+A;IuE1sCC|=vDS3o$K;JPHNaAaP&$wzv_Dc4} z2>C2Jea3RNdjj@dA=!|@u;~J1qb0^SM!X+-Phoq|-7hIh$C^1;qT?HnSRVZ8h`<5v zTT#WG#w)f=`QFz^!Wp2G6Vc|x{)KIMe9@HBF9nE>EG_qWWv7<^!&+R48;{(u{6r&d zOTFB%4Cg!&)YGr$$A6kEL;pq~(X@{%l~~_eog84)?*emIEB~Xl3&flSlcs6wQGBKN zov?3GutrY9ySt$cRn&QLs(OKG9n&%C-CkU7f?fGsM4CEP17Kd=7u>&EwPb*a3Dl9+ zp5BE4`No5TL0mesSUNXWpt{zH-Dg+)S=P_m0~aV~@+9PZa*F+ZJHc^{F? zv=U(y)jhrT-PcD9Q#%P%J(QHZA2g--&A?X#o`Mk>MNa5@S98md&hyPYF@WFp0~a%_ z2p7pW;B0TmIf#+{!Avbh=X3676NX#F1%bF zDR@b{LBDlfX1EjPm3JfaquaG+pgyx3ZOgRK6C7jVj`(!cDO1@;Cau zv6*Ws7=Dvi6>|lwNF>DpWs@glqUs!xwC9SYjXs@dis&|2J_;MbF1-fL)>Nviqzgl( zTD*9Z_IOGFSPYoK-X&Izi6O}fRCbFY%d+a>mDhEjMQVM02Q$AcWAgLam?NyisF>5a zA=&hl77DJAZ?$D%V7i<|*F;Xx1)DL{`SS;Bv}+kv3Kb#Xj=<$OQl!)4m0R}GE_Zi1 z&7hfnhypV+d z91IzJMakX9)FJ?9LKjgsB-US<3)&2&w5T`{0ZeN>eu)nm748gLuH^(ot2V0>Rv|PD zbdQ&dE-SUjqqa?hX{?H1y2>#_R<=z%cYHV^5hevv4_}$Q>U^Arg;NEY_u zh>!geee*7@M~#%h&E1hG7$erwhU_N$QFLzq0qYNc9wxBA`(b2Jhw-*6S6VRsaO)F^mjRYc@M>Qj?!s0XX)c=b&%;firlC`9hxd~VuCp{(mbqj1u*D( zo8@{cG(wOoq*``ro2(jOssG>x3%yy+VP>uu9i0?Fma}gfA_mwEqo=)s5`8pZ8rPGxW z?TpF{^1^R}w8D59d38(Yf?G1qw)GPZ=tjXLN=D6dn_SjJdp7q+GZrB~X07lg<_r?C z26|5&-i9L5#|5||bUhbQQohqmKO$$H%3h=&GO{fIGC)s~(||mShUvI)68mr8-bzkt zIB3lHaV!Rbkz;qRiawx2+$}7)#N=`r+d)CV)u}Gnw9KO~?PEImOxeO+nPvbM17@%{ zi4$XDNVa^HohHcE%szbMH9cUFnwXe{Oel}+x;ioDaIaJ<;WTbcF+HRC{7d2+Yh4_i z$so~Hkz;hhCJb}2%OWxo8EYmUYTy0ij6Xi~*dC4@vB1b~Gjf{B7kP{YfAR_Y{7y5q zQQmE;5xkJXzG@)=dr;~8_`Ze`$43i7i!DWA)3o#j6ne)v5GA3u{*pQ~4l|1nXCAAP zEwEtxh&wj31Ix~6qcSy#xOtON;m)GvSWiNrxUD%Rfg+t_UH*mejPpnDE$9fo z{Ut}&u*hqtwB2O3TEE=CFltnC$sfRvbZfv~9;dSSO&C68m`CZGU#?6&Ik~u?MAr!7 zi`7MMXJWSHHsc73i8OjSUnyLm@4;T7GFsICoo1aWCS9v<2Q;LK4Tzf1dAK@_$FGMp zPChvCD6sePHRm|P!=`*%ia!4@5dS{`#1gjNiG)i3xC}MYs{!x!LN~^_1VL)L11L*g z@0ALq7`^^fGP2;-a_-7xBZ?CDNf1FEp6Ww9-k9}f-x*tj#liVwZDGuI=!8p2Ns>7| zx|C@E;8S@Wsqn?!?QvNyTf1N7bB9&3Q6$r@tEuaO#ghjLa9F=Bv9z9a23Ei|ie&|r zny!OGEinL^g;nC?g(F<5qr7+oy#%fuF7f&k$s=KUb}Ei^beFuM#s?p^PH?O%n4IDK zG;YhbDeU$LBfP9Yw9mNbH?mczyh%BD-C4#QiOyem#Im4|hj9_zobXnsw$Cgp6HBJ#zR3V|Wa&9itJ^jF@0Owp+&JX=WvA-M=5P}b?N`(>bXlLz zwYh6BgD+vZ-kl82hhGeBVYn@G-g8sQ=;c+o$~K>!cHYiU9VP(Cd4KU>{QWu8#kz`d zD+YRHvh7yM3cmBZG84{yJUW>NZ-=jMwmv!8vXqGTN7qCWG76BmeQ=g`4UNQCF#1{6 z7jw)c0c&rWU12-Y7r=MP6~rl@Lf0-@Y*idyem~zIDJn><@DYm|*xA zZpcyKj&mXAyr*VKRbrF)@|arknKsL;&@YJc5IUGae$sU=M0oICR-+AjyU@?2t0m~> zj}}L@Q>#+R^F9pH^I~M=l}(*v)q%88uIA@)(n>nVj#87=*m()k2o( zQ%S^X>D@GV8;c3=X5sRYwH!oA`Hs%K@$5CKy5K&^h}M2cf4vCKeDh5jXW~Oh>|gx4 z%2=tPz)=$>uxJEE58T;G`~LPYx6z>D5-MbDhj;OsYfw|_?R}0aHcqjjjBrB$+H&bwhe`&3W zgEQqXxF&Fd&fAP)E&?3dg5HpIl=JH)EqWqI4$`Ab4^XMD7^FvIl<$;6dOPS>sWQmg zoll5h6-Dnh*atx>>KZ_b&~JlGV{vcS0knx9%&7ifa_M05VXrpSOV=q1=ml{zb7EW27O@isj`5$ofqhm(a)N;IcN zT7cEA1O{DbH{3`AMhJEVR7;7g7nS`i^BCG>A=gXY%F5%Vk9}z%o;F=BxXDkMVo|wG zgLNC;4%zR@nC<2iHhC`YON}`9@aSZJdO3XlV(XWYElm!8dvHx4A)^3^-vejr(9lSF z0i&N`eKti;RT!^rsJ*)v6-BeD4mxxq;Z|+_#55OXP-|Co zIz^hmn)Yj9p!F8ce15Xv6-3Oo)M_05XT6kOFGh1&}!sg#!V_j^cZQ%Khf+8+&R{2Ze@We%^`67UNkl~WE+JrnJ%?bJEe@t`s9U$Y_h zf82QU<;gLLfQ$qreg~YPLqj9!35a@%@zESLnaA2gW{=;B@DcDuauspfv&gZV5?c|6 zm)~2z9m~qAFFdb{r+)=7AN{L22uuikBsb{jf9r`5efE8Wq$;sNLPcyH@npMccF;RW zMJOG_5I5ll7c4w*7o*Xty;acL{P{e1!)L3b+L2k2=t(~c=}8GP{Nk3zg?DJ293Z*rB~?q<3CQ|xy51(tc-%6)^79%=3!hl(|7@`4`oR>P(J+0FTguq z!nKdaJ7WRBC(Cg2qvng`M5%G#FVMWfou|YlP!OC6HE>LyNPr6l7Qfh6APNmmfzG3140TaBqBEkcoxzf^bYmH>-4uzgM_8U?2J+9`QiEB{tY z?^jBMD2B#{7A{1jjeG7kUIaUH2Wi~>>N7f+p>ZJ85}2uJiurzAzUw^;Kx!^u--{q2 zwfgv zm3B`;7lpyb<#=`uo0NzG?jh}%$Mt5K18hy|JFk4t7NhpvP1LeMo>*BIL_CxYK84#W zA<-YXM+c%6)iglG0lt}pBOtVTqj+JWXMDETwR}!Tb&6t@e(Sbe->B*nCH{m|5CTip zl`oDWFDD`T0SDsuWVlq@sYI8%8^>|LO81l=DMc;qzrR-rV(^_7M+pN;vz zL;f&|oqko`&#G~u1<2hcx^Qo&q2gLbvCd-(pe4*RF;4@va*vXPI#oF7?y9j7n-9GlUdJ1f_NoG3J#%U0~ zYUx3DZDiN}HnA6cHU~zK#M3 znrUiI;`SzrYE_ zZZ3zGV*W3#WtbQ%E8U;j8~t=97&5W#Y>?+=6O2SYyD{?iP9X_THHocIOmNf*Q$i?0 ziBp;=gL_EP;YQ5pBpcSLOVniwZee40k{sa61Xx3OaLW%@mUcdQnSK;D;L2K4zglho zDZ=z-DnNg5WJ4<(;6yy9g@@&Xp@M9%1l*Mo3#vC=&;7d~BcZjazP`4PvRDmvPqn|f zm*|Xv^%;k*BtYNs=L!=2%QVF@EXkTv9)*HTk(;NZH(ir_-Ltuq0Q$X=f=eTfXB{1C z>oRnSBv71vA;V!p`eE{=UT+|Jp7=WjgQ^6BJ;g&bc$|rUw0O`E`FZejh)MyC=Cif- zp#gt9vS%)HU}uEpV$W=)p-I)(oBbH6FccQ6Izb#oo{xj|Jh8N{B9Q&YxnD z$(Ov3$Ouy;WY3!4Mb_lCZ!(Ia)Tj(v0`V4_F8RfoE+{@tf&CmTB*!q25AT5 z*yK6AtXR&rCFp_Zpkt<>cT1#6u5NXtg&fR>@AJkm?2K!R09K4kEI@8=(8UKj3>8?T?V=HZwYwi8&DX+_Q5WRn06}7y>|x%Ntuw`klchyJ8QP+K^j(638ng@b z!3w{Bwq{FCBfWeY0|J={nk6<79?+-(Q*!;S9$z6<6S7~l$TySB_!{kyh5b^8mJ zQhJbwC3|84v%_6>G=>Cb@U-^W^PA_3)&FnKBUM0M;tEF3OOz^f=Z_mABxeyuBXUFX za9WB_Lg1NnhNYB88OIPR?wNp(dUpbpvQ5wM6!^I}|tRFyE7d$Bk^%Y{7UbDC4)kadqcRvlYP z@Xc5yL((g91F4a58#yr~d1&##LGrVpr(%_U8ZG1~9Y6#AI_8WX<${iK&4=xq3PY31 zFSNK*Qeh}8Rd<0{irnn@s7D-#-_xNoU6*2A-X1*1L6cAWY?EQ83dkNbi=^QOgSmlT z)-Lk>I111EI_hSdjd}2gR_#5)1L#DDj?luUhyEl6o$+g?+MmC4JF-LrF}lIF(=h2d z1nH#q7Vsxrh;)>Vm=!55)lSYiWmP-gR2ai^RW((|%yF3$2YU`tvM@}5w7IS|TxNqy zGmTUPTN*%EzDbX)W>95v2;JG&kCsTr0laC?D&Ziq9kjx=2LzC9++6O0Bbh`9T&7aq zC1W8iwYTx?i&${*t(Gg{QRm!$*$m6kr#JLWm5;8lY!dNP_waUVN*+2HL}2ZnMk(|3 z2xQbn`FKE(SSGqzz{|t7^1K!E5XIMz%PyMyxludGcn=d7IcC)TlU=)C#&&b4BsQv^ zZH&%xE1lF$U<-#PkcfV@#ebL9a?pvZwfQaS{2 zF0Nf)l|bPRNwcNev^##I$+U;nnCQ>yAcH!ml}EeYohrs`-;;cJO(by1p8 z0RYt1pGZyvl$PS;e5quLi%eNS?tUck%s$=NNjt}`>VHp;RO`Zt;-#ukUtxIsD(c^( z%mmoi?MJZwp}T|=EQXIMHTvt1cb9)RFbj+4ds5#_w0>cx( zyw-DMbj33C-C&8Qo1-AsRDMCPGgv|aIZ;*8!_Ec+`0bYFD9vBS`7xxysJXDY%%4(2@<`TYoX+I86gtJ~mN3`k91Ya!9ZE9tWWkiT<5YWwKBYnbD4pyjb=Ga3Zq(78 zNO$s2V_EVlsatT}!UIo=zWI0FG(1ImeZUfx@(CReZH>E2KyUoKgHMxOwTQmp-a`|t zK(E>46IC9*#*#_=ckBD>jV*o5LLh;)doH8Q=L3*YC*{LFK|-nQLDI0f5V_R!O)NAD zT_&3~aX@zc*P&UyfpW3x{`~u=jENwYn*>l|>Mx21k$|HJOd5GmYU=5$aPkjy?h&_M zd7GCjbnMw`z(At+e7D-X`jGUDDja$Zsg=3k^_eH3tW7&;llo3?ll#U7Jx?z+ecl;ugnDv>GAaZ`)2YH?f==2bH6pLnXc*C+!Q zRBY@(O!jm0vP~XLoex>(sGK?F9WjbBFxDL^6%VPP=~i>L?~{?jX%9~#Fbwn>41o1D z`E77oqjNW+0l4Te`wOK?O2|l@Oz#*1+ohp7lc(b{8~!k4_vvPZ9qU7D;c0u8tLQ$G zy6u*3yydFYj)pF~$GAG?vPOUOyTW)EAx$ORr2#CSk1{bI`TVBzSaid)?iI)8Vtgx3 z$>6l=oB(Qc!ulwY{}=wx7Hg~U{-pQOq;a!^QI4*;mOt6EIxV5=1Qp#&n$`9@k*RO)u3=qIsI(IUs7+8Ro2a^s(FS;= z5Z530AAY<#D!`gwIGT~HS?k#`OW)1NVQ&^6fuuBM5U(_+p0XuSH(EM}fYIH{^=?!K z@WWX%3lX`1)pX?V^Ph_Ke7$PX0KT?^$_HXabh~*eM!6Dka`Hr2UP3mb{C(UdoaQ>w zSbjQ=h(BKpV2rnBK7HD1Ycx%=`(XWltaXH;eVZqGLX3Ah;jCr8GXC&8j-lFNb;TDm zn^MSh;Nkx!0E2lGCtfC~hBlazoW!;&mUehrNI)*bFgEbUQ(GhPy~n9J^FddSGb@o^ z2Mxf2TiDngC<LD7aA{)Gb2Z9kI$=OrgR6P+xN@IRk3U3mP9VB4GF_%s#)Qqgg@% zWgENH_*m^YvL3Js+ksgXl)~2~N^L7DN1MNROoPHlF;5TKBO2;pFgAa;;>!**uf#W0 zKestdyl}uR$gwGNqNi1xk}-QkjK+9RO@h=I#h>{c2mfT=(G`ma&~xS8Q2>gw-?zt~ zOH)mP>fTHBaG0rXN8gUJ%WNme)POUckb?hBde&Q4j;4$AO4T}cT#EunJ< zY=EDo`|F;qQ0k4YuXT)f-}k7}9~9Q>N9C@;xt6xOxD=mVBlZ%KTO=f#PXT)W&ty>~ zmoy5@7xtlMgCE30crC<3x5#YPpFgH?_X8e6Cn;o_6*VswBqQ)t+%U!c?!oQS5)H=c zn%K_3WcUJPfZ9vIk8(c3Q8s=?rmDm^Df@<3@9IEdl*~uhR-Z82dsQCpD_G0IFdow8 zsm5}N4K3F;K@n`TA7SY^FQJM-mCGUI_{=;>A_)iby05TUfXH^j3fCPHK(=FJsS}Q7 z0pUNq9;!30e=W=@fs0~-b6E2iTqmAZV>6>WACeG^xazD-`UWAHMIl0q%Gn%slUbL@ z7}}VQg3RlDhUztF%NhX;-cv41@Sx2|F9)tr`KKN+|#R|{g=ly4tO zk&Gs54qF{k)?eO86i$%nqOJ^~J=B!M;(r>hdSf=%-_`R*$_Ynl*IveIXvmHEUfmw~ z0jroN_D3m-yMYoXkzw()Ngi!s-C)O8_&AI0`hrpE@Se^Eka)An7?2nJc?AMQmXlVP?w|m& zotw*TP!x*@fy-p_hjbjYweAjqeK89TzRgkVyd+7KR9OatUWUE zbFVs7h)+J z*&!Ne_cMmD1JH4nM7Nf#I7G+0!_DK>CK0klS0+6XHRTC@Djr&2|r~YXScfezJoyo*5+}9GFOK{MqQYP2Ly>_vWv+h z=0fCBJ-fc&AaqgUbZ&MY$H51(&O&AwUXS+_e6Z2KCmdw|_nP6L=!0B)sso7~i>=V3uXIvQW$#0WYBAP};omDaMIdw4#$p}zemx8mw@oX2{Q z{=JblsGk%ajDt7SC=Aj;o8JuyB!7zWcxlbNTe|g{^;3{2KlJvxs4Ty7&vmbYnjRB# zacQ$_ufF*HzsTeNE6tr;VlG53HS>S=Vu8zIhtF!V|PIDis*E;tW`!$0t3<+A5QNtm1F=j;J;9hsgV5;0LBPp=%?qDb--fCbJ_BEPf+uY ziV>604bpF|l5Msi7Lh|PT`9glvzHR$5@mCyJXeZ)5?UU#<)5?jh6i~Jp09mQuU$#o zy2(v;o*0`vGSc76biDLc5ugb+cz_h`j04xqIHFNp)BY$OCK&o^mwn90bZ>1JaHOBT zsNg)bFJ$TQv15SFNU-nL-iC%9&%+ySXLPh^##0Lj49O3f!VI$_!4UHD`_JJq?CM8_ z&DlwDRF-;e)c4u0&=J5l%7mI`v$S_7x4KXC@CEq3RbSq>zRP(xwmCd34@bBc zwztpkfKAHia@?TYT(f%BU`3LBf48v(JdMxekzdXr-yrIWwWXxVybOVL$+mX@I5JeX zPY>sji~6I9=DWt!Y^Sv?-(5n4!T5gJMA7VfC%(c^8_!K#+OJroS#-76?iuYPN~j78 zp2g?Gd)2tq{N-*JT)eSUQE@FN+2An+&^lyUY}{gBSxdw} zgi)bKtmZ`05}?f;C6$?}@Ik18Y0uTlJjSSixE2u50tXRii@@od{zIj!%0bg&zuc{J z4S9z1jnByEjs^(T!qYq@c4pBxUdGF?XBDc8VKfZpeXM+Cb{+s z@89|sv>&WxrByBvQnZxi<}ba8Es>$tp|96X<{~tKv|9!Fa zbyB)ltAjL@LwE;kF-yd5wmaQLVVkw z_g_^%HecrnkptJ6^=&^SQB2f7FC1g$+w(8Xec7}#uhOm?aed3-Z?@4GcCX31ahw(; z;aV3_3>?KFmv~w3H04d za7cLS>ho?hfIq(f-+uA_7*}n(BZZk}Rgkxb%(7(SDXq?|7r_@hWqqz82)l| zPtR#+mf!$6#!j`~7Q6P$`^?AhiYw=iWyl-x>EbCF1_H9Qn6o zfTFB-9SIlG6jPwucT&As|8WEu(&y9xU2j+PfVq!^$ zAzXYst%pAYt_0&-LhHtsy7&vnM{b4X@F3KER(zM_-K+WztqxigT|&dvlUtYQ`(Sxt z#A#QV;8W9VGPE%qznQ&tKLFT{eFMKs;9=*o_1SJwneM#t9@X!?9di z9aT-Z{HONv$Hf2LL9@)!>wFSw;{cpYN|TAOZ+8g*Fgwx}LH?JUh_oN}lf=c(@?u_V z@1Rwr-NrJ1So>BFqL>>iCFRV)AbW^UfBh<>EF8{j$iXT0e7Z!G)CAZza^l!BElR)x zn}w}LM@@`Nlm3{C4=Gwh*h0yP^BhtXSW{)e!7uUN-zNiRMDg`oj; zJX30iE)8I;fG1zYLZvkhqb)m-0JOXrJxR+vv ziUiG(Pm8E(Q8n?a>>#-aa7CNgZ^J5TUTwnv#NInF3EPHQVr|>D@wRQ-wr$(CZQHhO z+wOkbcD~t~s!TT7+Eithng4K}qwA@2tFi&XmlPe|n}twLyT>u+_4;oVQ5gvijp{0K z#B57xY;GGW{K1Kp+II5d?CBoDM&+~kf%lLq57S2qqwrtuh&(w3b)%I(;*2oxYma~E zfYAp0T3-kZ3x;hIjzvgR41)W3JWZe(8{sEM^NUDD;chc-d#vB7VV-83yz%~AlXHy^ zyM{Ld>>ml!&l}uby3}=A+-%1@=R`~>Za0XHi=%b#*6)lrwkfb?Xs(Sre{kqhPzDb~ z-D|;jLEg2ZYu93@MbRlRR5h`AhQ0%q8%mgZo&i3IN}N2`E-l>yY|875~>Na{*g#*l_r@03)WJR48sv z?2wp^8Y$o%a&IKy_~oRsxA-YeDr*yj?Q&2N<5Q@b$&N%JuD!^^c|HimDI5QfpC!^m!aeuemw(`BSz+1Ozy zd$Roy0@#N49jh-3!t}A)NTBWeh*VhMosjm{d?D`jbG1c(l&<~2|A{NSNvXMW0-!+Y zPH`%%C6h_s1>Ypte76eKE1f=(GuKa$t3fHu3?(A;1lH}Z;PZ;_c?m%{(mMob%9=Ub zr@$z35??ak-s`x_6~wh!8WBh4M`OXdBgW11=8Y||J^W%wr=t6`O9u=Wb5==#?oaPB zr(C>Zx7P&6YUb1Yvh**DSs?NclCdCvtAAckaS=F|1_Z+Nj`GKeaTJoyo1LfT$+``z z*|M$bi_|@qyMa8Vji!EZTrd$Hy&wq>A5gA*gY;poZH-8G1b%xnGy@4~L$S%JV7 zG*jsHpbrGI4a?Z!UIY!}e(O8vxbhhfxp=|cH~QG)16ax7scXSjY^v;g-zTv@jVGXt zeLM~0w$ne0!O!{o=6jMBH>+Zh6Uya82&PiL`Kgyekhi55Ozz8iN9jGF@ZrsfG)EKR z=iKxFMWF>_LtXU2oo&0U0=OUIb}hCe{F*s+gEk8-f^M#!lA+}z_yw?ZckKA>#Q$!1 z+}Mdup}sla|En}FAqT4MqbsFoq<0!{<2~d`#BIca#Nh1)_h(g%y^h-~tzS;(M)8yJ zm<#K)S#<3lqk-pKl-L?l{^)VxEqrEjINw*$?Oxx5r^B+Yf`@qV^d$iHqdqy517$DI z1@913h<}D9wiXil~i$mH<%!hvC#6rQ)e?II7@^Om-KWmZi);t=P5KwFV0eV@ z0PJX!D;0COkEK=dJBzvGy>u`Z^NjJ~-vC`2w!Rr-G5&<>OD^Lh9Tr~FW2{+1fZ7a? zkOn=Gq^VCy01V=Z1NWlW!i5)&FhPIqb^Udh$AiFPaS*3scZj<9s<@{5=S`2DNmIg~ zn;n0S=`{OhC3a=rx-F|*6muli8qIEL$;M4#R{s&ue(m?@8>PMdR>tL)-K=aTDafsk z=j)%+qU@4}ZlNXq5J+;HlEYTLL9n&ba=xuf#Z$7Biv~NVLP_s=^MSogz?#u2{CVYO zY};aP@M;I)vo-Nlqr-gUD8At-C_Jr3t@m}?)l5@N6E|L;tFkU}p_i~G|9!)udbtBT zi)T8H3ma{iCtQf}Ma^LtEJk7y-gsF7ZzfUluP;}@=b}XknQ@Gw?fNB#2(n-9F{kCV z`ad*GA!4JlSLL6k9b3Jy@&X6jLC+6w7qW9nz7=23s?9CMdD?!)DjubkCWOTXxRkn7 zgz)Aa3)9?shAOfB6gR2`;XF=ZW~<9m`WxwE4bpM0W*+U6`{G8=!Prld2`mHTe`r!||AL;9%57udd`>s!C*5t4qu8mCXyyyxwFJVh z$J^%`bZj$1AZZ$czI(Y=$inam6ht$;w;$fh%PSXK99~i%S*#Cw)d&t3Vs29hi>}#) z$kXZX-&;*jaL@;TXn;da{Y_Z@0ViC>vf~^ekgE3(LgRQlzPg?Z_TIFcDU_yms43n% zT}CG8^&X4v^^IixO9rM5tybciea?Kr*uw9&Wq2Inca)zPj3c$r2Gx&-!vMDqU!}0} z1OT}$(11f42FQj8c`J^L9#)bt8ns!k&SYl;KLK*fD4sge-vc%w&Q?5E&>GV~Shwnz zD$II`JrOCOFckL%x=VT*hj}e%C}9|)x;kV^r!On&q=8Vmk!o26sQyLhGFe|^-tHr} z&xnu)Zrc&lSm9->CCKJLJvVEhT;QUzPfFKy%-$tl?#JXUtw7sr(!7}FzG7Qeim<;= zDtX7l&nJE38^X7-g(^+{BGW23l;Tsi)G=VTuhC#sd6-Gx4O@G%`eg$>`Jf>&BTCx2 zie|}0u-*j2*wYjM=}urA5`=~u=m+g3SK%=yWw~#be=aJTco53T%iVH#A9yK{&>B)d zy4cBAG%7HdY~{FxjOE81?`)dQka(0yff#+v{_xt^De`gD!yDvz_k^zLk5EIcm9UK; zVifXjupw)I3LGB~et7hDwIuj4xgQ#M(pGBaN75qCA3Jk|y(&m?qXe1vSA`qGWM-Hp z^~?SEzS=nz1fhkidclj9Um%F*Y6RQipx{T?*@Jlg#3cmg3+uzmaTma}K7rUc2Oa4p z&K{Rj>6|&$PY6~R(%yqbkpGJA#mFN(Z_WnVYOzP3@GZIj(iSG%B(0W68nRGnp|t9U zYXA+I<6f$CuGuYk?DP(B8u2Vng@-6aV+H4U1D;7XZhhBaP}=`L=-%S=QI@{7a$DJo zy@1~;&g6!mu8)tlaY7iA1&owhsVNxbVMP#nv{elUqx!24T@ioc)}#dTKwbYYC7)r_L@@8ZV_opGTQ3nc zmlnF@*=R$rGwY96_A}0DT;F_~H6R}ygBINZu+@?>{`Cr_6SBAv{fWb}^9O6I`y+2b zKxzxU_n)9~j9vuc6$x^4=Gn^MGyjC4On(1TuDMK{`<|d&W?#3agU?i5J`R;oSB&fF zU`*8_t7~87KtCH_gq*jn{*p&fv5UKLDegwn@5Q-sivR816p-*4tkEB+2=k&%IgwmA zwzpc6`cCloqE8BLKh4o>h?X-L%=6>oGNvGqUBdgn#oa%F02Cxs#eoGitlCA_=oj>x z;GQYAEn82zZg%yu>2n9IO5K!1lqo2fjS*7wEh0u?xUKal(bE?E=XBJCthCJUksPNS zbbc5lf}-WBj9FlG4)wG*XHA;}qed{Ee+>Qv-l#u*_ky#!>5f-cg?P%9$&4-io-xJ5 z7&Jwj7Qp+YCg>1dwBt(uHs5G}lEPf9#4auZNIHxsQ}J|iH61csO5ybsRDzIpJeO>{ky3knvbC{PmYR883TcK2yZWnx_$xxC`cxY z0`jX_e-vJ#p3-fAd;a-*>H33?t8E=SCI{(5Gjl@nM071p$Se$W{*JFPbTsH|isV=s zGJP8cIj=;}Nr(Cq?Mp5}L#yXj225Q*#xgNX-AOCDRt|Y*__`H(U!-k-s_CmAWSQ~L z6+|C#{}45yZmR*1rp#&#dA6*>P6j`Zzks13uI=P}rU9#i9n_D;j{loRPbpB-M(>-q zc;Z*!al)fYqqzBm;sGAWk{HU*BFn^vgfL$_HAmju#XU)S-SeSqn@xKM~cG0p0{6ZppL73>(O>ywVf( zb@Gtk(1mN|F9Bp)TAuK#OF{nCrh~^bmHk zZ<}tvR%i-|MvaQPfH=NRa}cX|Og%qWQ03cj`=XL3WBM)|6#H*P02>x+ma%Bok?RXW z!2!zwA*jwL{f5yI#&D|PImT#aAuNpef}*CpZC4SY0wglAGJ=c4fYs}J;q|3k&ia)X zU;?mTUulC%S>81rI3_&*A@K-CaY-_iEk73T{>mDvLVjbR1!Rcs=5ZTgCusOx6%|_j zIJjkxAgCe=!2t;{^t)l{=OHQF9{=|beE`9s;R!id#qJWx#$QQ;q)O3w(!Xfdq zEeVEDMg)v=E*zg0fF#xyDAd4tO&dIoqFv2u$FFZ(VgokVMj4 zMThWsaX`0_G(PZ)v+%_zoz1{#PYInDe!QEU0UrWcA$r5}JQ&_V=m)fQoG|r)nJc7l z^?LwCA3qEyq^Cj-6NDk(n4~ShHWB!6I=c=*DS@`UiK5d4LRvKdrr2^k&o=y67B<@N z7d8lPC};MEcxCw`Wq|I(I(Mp&A~Git%-@DDYmr0_*={db3v<4ewf9(I`#KJOd>q3Q zgpKM1HJWz!dqh50ZWjtutzYa=igdiiVhrf*=Cc>|-37jB;09@TORMnt~};aqk6xq#S)K+n%6O?k!HJ-p0S z1n0dK+-_9i0q>G_&Uve5hQ?z$d4ax{y)&unUMDQ3PEHx7WsrdtSReL^i17a?)t?af zkZ+4NbzPcxmQsAAA#o2vaZWUlD?5_t`pO)vM0{bT`lpZT;&mNnBdGsg5ffhd*uQ2A z$Ezd=#scv-@V#Q~<0UHC8cPb{MB2@D#yP+gGC%qRZ61A&AxJ z2f32qkf+Jb|d#Wc^2H|mS%FjxjCFYQO+QmO8!PXUC}ji~Odw z=_57ksig+Y11`wOoCd?NaDP&V9*wRD6Vpr^%9^t9jVH@yN#%bh*!5C$Q|L8g@(OJR zS{T(#BRO5uTi^>|@#e_k+mY|x;HaSkolIk6uJ2cIPErzx96OwCt40`zyFp5AxMLV%--ETPGv$*QQ)D zEkg)1lrpBUbiTQ9H2o0@rnx+D*9q4H34%||#A81^bhlqr%*q`ye59fkZkn_sgH6<@+#)}}P!O%88;(X(7+c!Skkd8&_OiLo( zK(dAH^>NASXjgvs8Zlp$;X;d7+|87=WJU6pU>TR8 zZO@-OCz%CR%NJ|kR-OBP=Ni^QF|rs4k+aqF6PQp~0&%n!OtI zinhR0@ASf?z(SO_o@|5!J&x7H>+l5IlPUOpSkU5Vn)ZsbarZ`<#B4yDixqpHb-BW> zw`qiAn^K`BSF>Ap(p`$K^{G_5VjILfOvKq65!pr^qDu+CKQ}^Mo;D1$Z1{{{_5SJN zi0GYT*%cv9=rG%%KPxkWr#53G_k3zW$Mk5h#y&L&f-hYItc#i%Y?}?Smj!?(!WFrT#f7rb-o>YzE|0;--;j4_1}H_Mg_H|pkDF(x(|S7yaTaorD}VwYG5{R%rId`k z+YK}tLx(m1PqKFF&Z=&6N0cIffES$Vg&}eX2{IV7qM0ASEq=!6_9jZ*r>Q0gZ&TaF zUES=aN4^3LvLS@;rM2OyGNfmdXwaJB5@?D##qM80!yiPAS(D#NO=o88Boxe0U|j*v zmRAyJCuf>H4eu8kLXWLj)6X%r;&2`WDmI*i3pNMa zvb)#tQT;YUp?FQSS6O)uV|Em>`^3i-O-M3lYMi1j=FCM)qPKX9*mNyBft*>1Oo$r( z7`xW0oc9}-&~~!ng#d``_3ke>tgxDDILkk1hz%i|fk8;+)fJ0&vnK`m|;+#|M?O8dU%QIZ{M#o9cr z9=$0K=|62RWjd8RU>4!REk#8=x8zK?{GEaO(BSmwo^ zm4cwZGo^&Sv+2y+($ToAJju7>n@m4QloX`^*JKfWOK9rQ_*g1OV1G4>MAK|Xg{R=_ zUz$O$Zzshiyi~xWGp0PpmIL)BJk?bL>5x`%<$j8T)s9;2v`!Vq(;pmCo)1vb%>V2@ z^=RYfd@{C8b(IGZ5UprYXQc-{rF3(N8Lcdm&sV-H=933xGoMkPnM7BX7)+$@9i((Y zM0*{R2Q+$&*ct9}xcNzyOCT?ov*)Sv)h@qMCUn_<^iCjiyBvzch=4W18xT5lX=|R+ z(F*WnzX{+PkM0SfE_EDq{t_dN>YJy`HzyDcCt2IvUX^c5^cD^6lH-OR#2|@S8}0B2 zUnC!^XN}6OY8cZLEH`^5-p$&{R3{yZRPvfQ3;=oYP+3#8|8NZMHhP^6Y~mdkp-Vy# zx!JycfTY&f)*x_PGN5LRV^y9h9CTuAI%&dhYYD#$%&pG|FGuTNrj4eggoF9f%`TXK!sRVg3%Swu^8s+Q>Rwt4oYKBVi|UCVZLEZYL@oQ)on5bti#)hg-jEW6jB%a>aj>Cy=&{7`tz{H< z&&`BsAJIWT&iiqI|MvzZUt@pU3%%#)9~6M4G!o7uZ!)_ZMEJ{+V*kxj7Ut%L9ql1V zjS}F$o)DfPIZSvPm|(`jk(poIbpRTH-Pq6Lq2Ts9A&|KBt>zARY@yMEEs&_0@>Z>5 zHrU+NHvo>-LQ22TeuML?FQ51;`C=2D=aL#9;mA`RUYrCgN54uDX)1j3#P#=svDD{3 zI3@!JCd{nsL7##^zr|P|d9}B)(%0t(N>kv%`gu~@>Be1OKH1nMu{vP?^8= zn8mO1JF4-?V|v$Jt#?06W4a{%!}3-HFG%RvEhDvt56j3KbHRwK(l$>FI$XKfbq@?Q zreF~|&=N>A60D=UKb5#7e$CaHpxxKd&jbTFq+ zn-jbwnnkB-I0)oTi=~5AaYxy-SLD6kxCJ+o49@w1N0hP5b zc-RFoWi0vMBh7NwIN#CBGU8<~q!`124`9`E**?H_rty95x8GZ<24 zp+()MA1$)zFX_WsC6+2nS8i4Bc9bEjKg(AwTKO{!5V3WIhBcE1YLP;3O!tzPr1tlD> zL)~1xIF++6y{9yNo@W@fEu{MEB3LMBcOtl)xRzQ2x<5!Oem|Jlt&$-7VRuhd*Hw-| zi*uUB{7B9%>eBxTN|tAk$hdb`Fi(ZunbeldD6kd@>G>VzH=dwjQlUlsPktUGE`6|B zw-NHeju_V*$j6`4ND~CKRQkei?7S_6A5#E02v@UKKrOO>JLfJP`pg)Jp*B6exWmjEG zNt{CDdkg1{7Pj?U5@EBt?Us)Q5Zr??Wn zm`9?T75GUi$Bbc1EUV+k*hJP0rr;NYX^J!VU@(#uD_j&m1{un?iZHJeEM#)UZ^`58 zzF~I@a~n$0*j?KmNxRiPLR~Gc#)c>o4BUnIXAZYU%AI;|P_yoLh}d<4KO5l(FGQ!s zPNUs*iX&RXyINU#F+`km9g{z_wip`tW(N4M&I^(oj9#CU21g?ymo7a=Tqx4XZfhxn|2^GFY6?oGB}5;OkIrFeC|!WxG-&Bj^_0@ zN1qD#6pDc8m)z?)0fW1C`>^G~)|`2bbi$Qt;h#yHI0{g7IO@a1kr#L8?&yAerS}hb zy3h`M@I-uMWt7}98vo%5NEW`Mn={AftV_Hbfr7am>TKT}d}64smqbs{X6-hRGY3=! zrGfhj>s-DB>C;pd#roqZySvGqU{Rh2(FQldj8t`fwaIe4{ zY06uBEuhP_mO>$oX1hMnbcPyeVjW*?i5=AxC9+Vb<&D>6r~GgIClHz-1i(vMpbb4rj$|0dw833+AK_ZujIuv^7aH$8}2#Mb+XS~;6Wt$uT za>Abx9HRimHp}J!5>+4LUvLJbFL_XTJ^{uQu#^i1gV;~8zl0^BF&}%1fSV|7mM>12;?niPub1t_9_I#06{(dpC zStmmdz#p8eY^k1rm*h5&`;&}54lxn)qaZkuaQDh>D=rmwL3C)Krjy9W-{=puyAYSl zSmsV@RzOU98RKPS$q>=8#Bnu%nu?3_2zE#)!5sn7Jz9iY7D{8;Vuymd8?OP_67_K8 z|Dg3WIM>nC2N-twg`bx9X{#NaSBX_>2gTW#eE7ZwnS{U&*j`>ImVd-|Iq&~=tu&~; zkxq>3!&iKLgQpE?#|2HmM^t8&`xjxd8!-+c7Z7-U_fm-<&zGwQC!>m&Gv8&;45%$# z^j@98rnRTcTb+-iYY97n&NdvFH){c0%oxZU{5|;(T>h_z%jc}H7j z3Apw>$ZX@^?gPD*6+6rcH_nf$I?;*e6C55Q0!Ht4p_gyT;!gNV`kMU(}l3%aXu9u#eR6+MwUB#FpSGrh<6#zbc6*9%r!LeP*zQGCxH@>iaFWnn#LbX?1kbPi20l zUa2EOq{>s@sZfr6uVi&TztWb03(?ubY*nr}6QHKoxl{h8e%cRfSN@OKqQM38W+^f} z7g&JnSdO@%6Nd{~jC5Zd6z9;f`1WkeDhHTFuX5WeaY>`Pmz^zlKg^>#Bz{8*mUu5n z=$OsJH3kn$$iHWU5LaZZ9~iYcbFgdg7^zIa!nGmA5ojdYxX>uvQtOwcwMx3h$Qa{$ zARND^p`lT1o^sp(d<5CXP;G-XulLrAx>pmd3#atp;CZDY4~|2lBV;qj*_FY62}N^@ zu6Zil(bKJP+<5os;3UxkouiV;a2M>t*Q90-Yho{++Lz*ax9zvYd3fO|&*<*P{N#l& zF(`v&Vqkg33vO$|gesy`-bz&J#Iiq%t*Z6rC2HfT6)`U8xwMpOp^MISDy+rbX)>9qRgB}$eh)78GLM# z>5MT1=cqC zNIN?z@tYjH2;~5 zJCo#BiU^bipV~t8=E=P3v0L{H*9Pf{@^@|$r~h$@gBB@V2bZ;i3W7JI6BGddch2JM zoM;s8X$>nf+NC|>WDE(t5Kg}{u&`*hPr2>@z5?vysCFS*w}%_WJ!^?JMbr9l@O;uy z$0z@cB+Fz?aHv483&!w>ZF(u*(b2E6-}v&v_dwSz3&FUS*{^W-;(knq^VPSbC2<>UXg(;y`-Ah*K#&JB0uc`OtC+QHV7BejB zySA2Tql?XVDX*TCMzb{G<|hLCX`Zf&)G&h+y#!rz^{RC6(8@LHpv#^Q*%() zMJC6q2Z(~hoWO90DsTm@lwTBA#6^v^2%e@lEf77bJ$AyW83hF{Q70wS-7paSvZRGn zko1@Ax9O>e$l8G&P%mb{?^>>-N<2)0p;5QK#8^Z=4*TFmGO~hdK{_~K0H68t@*m!;67D<*?^%>w5KxTBVNBHxok`&J+D60+ zJyD?%5(6tx!E%u^+NnN#*mk@R8efq*VSO-xuFPZgJ65@A(W3NmIjX5(c(VT++JidQt8AqD&KCbtPKk82s6}zZvP0 zQt?{-Q-F}vjbj^ zLN^62?mXl;{6e`t0x`x1q=~G}Ep9~MeXKcgr8VnDsA@d9&sKIHI9mfgbr-ah;;O3CIP$j&TD06;>mb@<~*(gTBe-nXv3g z<#hcSn#o!qbhUuVBQpNF9N?-k;*fIhLgs7{6HG(ci_y8zr`7br z>$FvRy|k@xRgAg6X$7(Hu}#q{L2|mu*2ju25}AfdcYHTLg+au2H8HOUjSd510J>>*WQS~7=!N7J(M^oCW*oSchpIuz)!-x9f7 z3x?PhVk32Fs400$p6(%WU)9p`$DE8{lMKRd7X5jR&mjM!(HI=%?^&OZU~1=;g2FxB zI8G|_;*1SPeKN4)9wZN2bN3bYKm_BWe!ymbUG+s}43f*1qG&j@)llW^*;&N}@0sIj zrgMBo=N)sbXad$gzCDdLeN4olOvO-jdL1@RmsinIybXd)-~gg2o89%OH+ieBdMb2e zC=tTMjG;36k;0q+ri%wq!&1nre5u}C+>SIWGvt<}`K6)c94he)F&G>!zISP5kY=5o zhoB3=9GV3TKlLkyX-O%K0c0D3(#?z0G+OKT19p0?9el22ha65!=!;nK!*1Np158f8 zQtA>1obL2KKb8tSp@(r<7qzCuauo&)raHIU6&C2%g3M}h8+iHfX_WzRnOee zSpsUx^UN=_J_k||MOH>ADX1HL*UKXPk0lTMEIHpEDFs&*xmjjp2RR$`^^9nq&b36~ zrQDfX3$5DHhhE*7yhzpUnQ=9EJ}Ct?ZMQFTT*{~)qvNs;fc6oXT` zbx}Nky!ylpGA?{ySXfLPMBrT7Ho9VSMJ95|{MQX-^N4GsBR$5rRPs1x%eibyfk|Bqu~*QOkDQTb6v?pV zE5IQlC-`atJZf&ybC2uMP&&IiJ0$bqD6PYY6XC}|nDJB4+=@@Pe2(*X@iwsPu02g4% z+j35%2g4AuRBE#Q6>dW32%Y2r00oWCUSOF2d~uMn zp5R*qvrO5DG4*;;D=VzCGt@dK>OV$(^CM*J6?ozZGk(hd7tG?5g#Iw;84@At#(7{) zEz-U!A$R!lh0eu2EUBomIW%SoaBTP*)1&7C%jX=f8(`auPPgXbW|wLP_$8+SH7Th* z3NU~z&X%@YuyD_Q99P2~KHuUHefUI>^p^{et|KM*zccJv)sgA>V{AUn|y=hvR1 z`)-Qj&xjSg51)M=mw>w%|9wZzdDv$7y_Ohc3g3AJOb9`dm)Hw<%u z9ul?*hn&(*(y(Pkq^#u-sTma+un$K%8WRk+DzprprV{YlV$`2o`!O&1fg!O~L zD2@!}^YR%O3GumWSKBItOyj_dR_K5+U;FjkpM+xsOs^=_li%MbYE9cjcr>&DK&-NV zIbScgnU1`1%1mB}AZnVZE&yzwO_(gk7rlJBH(3>F>tygp^_+Al;smXsP5gZlw7S;L zX_Js}H1Yd#r&I1lGBq9SJ4D(`i!)!9M}@v;ZowAdiDrRS=GM`R{!!f|*`HDg-^W90 z337Wy0Ps%4ew*x1cUiy;us_6tSw#;r635tp-QF{oV&>4Z8rqc%jisnNrR;pz{n`VU1 z@9(c8Q{wzf=Jtu^FQ^_Du>v+_WJJGP-d%>BpKF;wzZoLVF03l?Z4EtR=idEF>R(^7 zaJ?&boDr_1)g5PP4DbZpC>h=T&e`{zw7sH|>h6Y{~Z{ z${BAK#T-h2`WelnxP(R@ycJIQ>cw#it>ya;JFUhRHb<&m7ArdBMZD-?CwB7=Cc95L zWsx05XKGIXOBEL1-KeyaQbTg75)B4ZjYs_)1N38FdZnlpv~1|4QXjBY0-8DpsQ&CU z9y$4O`WsS@6Csc+Gd+Y9*p;sHX@TL#f){p%oOhd;jJuN5G$W#&loj%FS|nHdQas>O zQ=BoWEkcik*}d5W`&?NNiMvb(i`Yt94a(<3kNLqg9r26)w?h@9++5_=hBv(|kpfBj zzhn=JxWJ3Gs<;u9q);}ys?~1gDk9EoJ0Z+g5Sc_nu8<7@p&mxE0aHb;O9`pcwEz@T zQw{Mn&%+C)@)M;nBs?GOe=s0OU|eIu7Ab1CC%<4q1z}<1Q#{fYj+F)n6tKNP#zX%M z&80L)RAa0g<*&3*{6^NE%RBwxszepEHd8MxsI@iFJ|XgY3QcYa+iiBIAO{0Z&3pbF z0zir7z8*(Jw_W3<-eMO?LTPFWnt;*IlUQI%stXBJ=vt9rHjrw%_s{)9jXgaUOX~E@kx2K0=}F`3efjnKuOQ*yRZvE?am03TBJTo+hnG8?Fpb5D=it zn`&|oW_}IkAf(}MIr7%6tW2<%QIigxkf#;Mu;t1@!6L?atNq=puTgW3>d;U+x;ok= za$zW~LJ1S#M}b)IlTloYPBy*wbz4!-fwQ2*p-r_Uubp^{evJNYUtiznY1BZR;^K_??wk@RXJfh?*S`fIM@*386sBvoC;nj7u zc5hmMK^ErRQ&KzV)saui~{6_^pPN_eYYhs$#{t)#fzYC4O2#U8|FieKVfG<8$WjwE~Afkc6rW2zDjx zEf+Yr?NxLRR{_-rCSB>pbkURllVV_oGsZIU#;Q_nSQ~O4)h;Yze?l@kpcK$t2-N!z zWZNnBT0E!#6u%`Q`ECdR-bvW*Gd~d#BA>j*XLS?oI@5Ee?!Q>Q{Zcb4JGx?$Hz8-I z9tr)s@34Yz(S{(l0$EL(@BW@JE<=A6x1(le_GLnbvql8sKZbm}%&nXAR%ZZ?aBEK(h(O+!8>N1@BDzqtg zDv$P?{+F|S+3zd*KT_EL#}pP2f)68L&0*y9$p))xwe^O}IY5^wfk_^!**8488NT`hJ50j?)X0qbL->I3^3gNbf{K!;A5P`V+sIxn* zhn1fj+0zr@xer_*1p5=Cd;+et4n$GXZ>I7eA?*KGA?()$`r5qadtZHa9CLvpJDnJ+ z$FRL3bPCBmUR)W72AfB_fFR?q-NO41N1hSyE=asXCuoz)=+Q)WO5~5|K`d$bTDg1M zpt}0Fb|5!nad6f2ul)5r%4#B<$ zaF34zPk3vfeMhJ-zW5A1f{#D>lSBI?l)nxDpu}@t55l8bFL6?CF$*Q2w6uhbK^W#p z%+Vz@g!#*LEQv7di8b8%X3-A(ySvR7(^Lv}YEz{*oBY=O-2_A;n>9Q_;gh+EkN>ah zuD;HtbWYxaAsl&%@<|yt1n-z-@$Am)H-3ty3rilxElBGwj1LeHpi3L-vUjGw^=2TX zVQ<-TRxNDI&}Weo_8pK%<%rN_DuF?wM!73}T`RAVvkn^2kUw>QY8A_dBDDy|kAv?2 z8HYX*$+_TY-E&{N9{CtB147$qL9SS>Pj8}suUBo3{wTtxnYfKtgq&Fu47Wo;)9Ma2R+THPsz$l`Q=OA*Np+mPP1nYP<>S^u27PTqGOKt<=^sCHx{_{J zqXHv;Q{ZkM(?F{?MZwB$*1`jZ1%AQ&uQ`k*mRvVqjnKbkmliVeay-d2gvSf%a&DPa zutZ6N>qR+{+6E;{)}5d2&833+zM8O%NxTYA37(3+o6SG~!falEH_m{bWW zy>>9#o$#bKJd&gnlB6Lxtxn!SzKrkIu&|~3SI%$9=YO1?ovr!|2cX3B+Djy3+-vsK z>b8xcptP`nOvV`EPbfB_G=K#w@u-eB9Zs=00_HY~1bcZdlQmF`^6b@Nb6o^B1w8;n z`mVO?wkU4+bC5Zt7CPC*;{G1Wi^x9QfQD96+b(RNczLZX&Y~s}cA%B0#&Bw@RNNiy$ zNdK3UYpw(MX)@_LTg5X_yY#wi#a7li?e@qQS(jiWepLZ)t-at~|Bkme_fZ<0)>Z_0 z%rvDTzlsqRWY(2QIAWUVxHg%~2{d(eIWJJOW`uPp))69e3_Y)tvATtdYLD<}xa^%e zZ0irc?L#q|*S~dgBD%Z7ZSx`lxQnXc_EVoqNa?tg zm%pVQ!%1OTn6_rGO9FP-1?OgM>g`xeC6dtlfB{)FTAb+l>W9d13 z+)f1=OjAo!qf|N=p^ZOw6nNVY4SFb?eahal>$ZA1{MK&@5I?BCir~2kYtEa_r~PGE zcTp(+eaE;I$fa4t@K?K`pOKPQA4Ik#DBJmamQHK)dCbP3y^GJC;+V^U4f{7v;-m+^ z>ll;Ezl^rj5vM1k-=Db>Pw-(v&Q-NJsX~<=gR$PdZj~AOy)dgr!WLd3Vn%fk+%_3a ziyPEvWsZoN`YP)Ot>2LpOo5FFMiT1A!0o!&;A`0vKU>zXS5n?hRd$XA)lt?KeJeAD zw`(&A^rbb?jM4$6U)=Q3a++)F*wg1y$0h#(3Ut}3m-5aRsKbZD^*^>5u8m6T$ItZr?qp^(?(Vfncf}%`U zj$2Yz)9n%DI!GdM|DJz%ug2jEp`hvoLtGF2C;$)pzr`?>kZdQMHS+xp)rQDU^uj*} zh^Rx!N!XyWV2j~U?-%e?`$fJh$K`-h&lG4&?}@cl$Ms?!9IZ~gOJmR21SG;)GwJ-A zDNg?fd+*pR2ox*{UfVYM+P2Zxwrv}IZQHhO+qP}n-rg6xA0}er&FsYNhqv4Rq4H!^ zX4Od{vEts0iyq!+NgX+K=EO(?Wym~rz(EZD*-vi%brx?deqo_yBFsQe> zkpBJO1=H6|u)kDy8`bD2C+=oNPit+Nd&?bP^y$QcGfm3%&7xg;r&(C2o;eSLHns;+ zSeZ1kTz|{#W>|U9kVIEkxyu^Tgj?1&u^j>Cp63M)qbYHecYiZn1^Fys?|sk#wBwa_ z-uQ_4phuLCjJw{uE~`u8sqiu_L0ze&e~5In(fv(gAufQQ>@^Nmd=4|vY8^$0LGvNH zs0aWa>Gu=OCBrTOeSOq+ASPfVxZgwFt>fe}(j$EWc=L5E+xV_He~A8)pN4(=QrMYW zkRD7#GiuUQ5X@)k4`CMOXki0^e=VF!Icf?aXm4F}7}($=ezhma;WHouy2azjBZ{o% z6bunU?rx8Pg(Ic9;R!s5{OHFu#|+H|rE`#Ra7l={9OND9_C_=lnwkzBBN<6|OSqC>9hHElm*o&t5pvNVewVJy z1h`(M;4>>OcFlN%TOzXaYb%n5`du8wLFoplYJjH`pK9<3fJyOPTpv6Bnplmn{jpar z?png?JamUuenb#_jsk3OQ{Lf_>RyY~iZCvN#qc;u8};^=`!}IwrbSmjYM`>VmvPE_- zh?5c?;|pY0Gdjb?+k<0&lRK(i?u=E?7Lk+2u~Y0F!t?Bd1jzXbL+7f_gNzw(v&wjN zF}Oxh3YXCer@#+>LjLqH~JG9m{l?z`6YJJ%{%+Cs?*R6^HJ>A^|Qih>iZ@q_aZe+?<; zWixpV0#YQsq{}l9O8X+3VpB=WINy|mvblwXK_m)-`$zR8_dFmI3#(;#kN0M-cx~RZ zfE%8s=aa5!>qWj<2PzmLD~x8!26DL0iGfol$W|p0<-K zK2JvtitQZX$*kot!S+QGyD>-UHHT$%Llq_AHT2xA9BjGFOP|3Ea25`+AW$y+5DW~8 zPGxfCy)a(|WV_$r1=yJg%d7F@1!XM^+*Tl_?2_Zn8=<9EYt^^r}n7M0> zG3^|Mp$$Vc(DCI}g2|l$#Nx!ZZ3SOLm&psl;Ap09rdI&o$A4prEZ!-UP6daE@^8H; zjSnl4}a;&G6U8o16W*9>VBT2K5`G@4dxc!I2lbag7yLZIY6zYiz)WX ziYO(;?c8h7(ZZRR=7FSC9661V1_R5$@`Ynf`~{$p|GmJiL2wguA}T4gpTeA-gA&q{=$z*gWHOuo_2dP0xL69H66)H>CkC?)I`Bwn9xm8K*aa^l)NT&>f9~| zRh=wqvY&*zjT*INGHrXtoV~dt1Hc{+6Wp_bkIsz!pp!)8(5%T*!}D*%&d^ZsN7#JM@Hg4U&j%s#W-xdB$$RSw}O-)GNU zl~YH9$jq$EoRjp_tjh=wQ8{YLKNZ*@a;zQ)6OLu$_2bgPwxWQ{nq@TqQ1ahL$#nrX z%;a0ExFq~6=9bno+-*OlXctFCH-bf$-()`1j@qHHA*ZH0m+ws6838tTPSwH+!(_>_ zllq6N-F8eI5-wvtEIE)E#FNNKw}y{897>&@y-MCfBYm6d$zFr;c=3IqUkKv@d(m`F zZFse`9&Jl)S(^8AMBE3OGyNNC=32@rkTmSZAwA$`@t9+00uG z8UbJ=N<_d|CFsAt?v-|3xms25qJaW)Gr-8DXbEMR!zUUbB+d`$W1(M|*InNG9s&%4 zCE9D^`*07B*Csz?@fWRpypFKkfm(JN$DE0d8B?`?fiTt@tJY8xC2_zTMpBe zHZbAFW-}=CkpaiCoWN$dCgBH{&T53hNQSwnaq`UCfgb78nUmAO&Hpzso=yZ~4Ksn%lyrLEjgQKRgJj7Tz1K-| z_vTC6RC~xf+;9C*>j1PN6=T4aG&e6WeKue@!D#a3DN0|2T#n>`poXGV)feuslACDD z-&_l)X$kFfN;1n>f|JIO#f=9|6ZbD)4Ey4$+9+4Te{msdJh zJ5xmBJ7b6Pv93IBD#@N_zi%U29uQl@-DJwUU2JN)K^Dz=d|rn|S52oSPHEdw1N%B5 z6El!w0{)Tkh;ryXYe!r7vK~Cxg~b@&Ut_H^h1-y3H#=oT(>wn8*hrK|+!G5-rAY$P zV*%XR)a?0v`E2aaYjyCygA-nnY67EsNc7%GwS1}iUj@Mj*EUVLB$Y-TPMrFD-ct}A zSTl{MKkO5g>yIl6#Dn0o(FvR9mmdP3a?(K`X?MQRf=$iJwuWro$ax&(bZXeKypGoW%V?fx zWN=>hD5UhKE)Y3}+tq>MyhrC1n&?g&p1@hgD{)awGXTIRCV7#Wrf}Jt$O}^;$Ir=2 zsb=`x`YvGX?S`Va>%as+Jfq6t>*sP3W=24@*YwDeY!x<>9r|TWuSwb>LT*!tHS0^I zeOSAg{_AqWk4A~e*Qe4=7{M{`=!*!}2}{-Tf;n5fBhG1^t^Ov#>m%yHpuy|?c=in! zP(4qEdf{L*p6)iz94hMKwNt0Nq!G>}|6uYz3zG)N7e35!Q0M49&4ZJ>AYh81+6oak zW?&*}NTvW#3l+m(dOewuiMk9Bo$5T}%8}-DsDyo^ME2ezvIBSGc}_hS_joxLU4qT;A#b{kqI_2 z`Ba9sHppv#_aixlIk?kX{Sx{Fuy~AxS0;$m!N7mlQ*EF2{rr9{YmyZw{-^}j8qD>|>cWQ1LN`xC%C~8ji5KJ#FpY6( z@SDXaT^G?v+v^|&e2Q@v;%2330?yD8KM400F(|lU1HZ^I8*KR$?>T8NFGVF!C;(DY zbL%cGJ3D?}FSoO((0cG@%YA7Z&)&{m^q|U`uaM8US%#^KSgLUs29|X$4~)s_mTl*u zyC1t`U>yVn7<$3QopK#8)6#a_sBgG+X479q9qO|%x?ejrda#rBH3Ccd3)?sP((@}t zA56cW%eHQfAwOn7M~2mi1O6~EFqz_%>P~yxkA1m?pF=VfU7!Ervu2fd-~NvLrbAbb zNxV6{sjN@tuJkl5M_sRCd5&^*(D6Qq78k)!^PNB_xk4IjvyUajqy83MQ3V5!2?C1Y zmtm8EzB_F{6yvuMIO?bBGjMVl?UgCJ}$i#klFX|~M&Ilu?94l;cichC1Ni9I0<|k$3m1;CHGxv`a_L=6TTd95g z9-BYMmrs{YS9t8sE0S{>!0T@hROkp zkWme!d;=$;XRrOE4MCX$Ucd8gGtXJ4mobD5)@{NbMx1>Mki7)gN2xs>j00W?_O2YJ z!uPsg^8go_%=y*=w6>E8<@?6!=VFgZ^=|7~F+W@`%Bnp05&>?bAqKHpVNkd&mal-D z`87%r(0!i46*Ef`fdnRU${I45!zp~^{Qho|?B)_5pwR=@GZz$w?@tusbZL<*-LIBs z(QP}{)bBu0?JO{(BQbOikD_t%8~snh9g4Gq$6rG6C0`pKAa#u@zl-BSD(`ZpUl`7) zmXy;QEE!!IgvsV7*tE@oss zJeElB@oet#+VPf0r4^EwaJG|XwSI$Mefe&7u+jlg#7F8BuGt4)*_>Qoma_DQIDwd0 z*fY66EIJKK=37xvpH|@JWk~Wo!8-Z~`wE~jCJlHw|5MXJG|cuQSO%YXgcYwzX^Ma= zY}gyfy-^4XZpgs@zpM*$VWeN-c14<)YTj_}zy7pJ0@grKfMF0?*e=llGc9Vv4gY{! zV==`kY*n6u(S6^n)PfzeujHQ3ncuk97N1$pf2HMrC|$oY27aCR9~@9433OqmrZq$> z(Vg(IAAWcKb_PkEe{n{{Z_Xh9rwjk*x-gqLo)$6(e|6m^m8a)7eXcQmzt&76`;oxM zM#xarOL2Z^wgkO2CBWJ-A$kN^8{f-&CKhM1uKPW#b8hVO{m+t^I3vAhnWXdZ4!Q2a8U@(@*?Kv$TPaW)F3g-tBnkda z6rw?*=mTk3OFq&Hx zNFD)Ht5W=45NABo)iaIwLm;cVZ8;bKjbviG+fAc>2UbPltQ1;Tcl!@&Mu5b($gHB9 zEI~-;-*peJkgIGI$#X)tDUrFA=JPR0&(BOAdz{Ge{!e~wz$dJmH2S7}26iVqgo1`} zA$noYJm;sv3D-L1O?9r)ExjDe+U^(&+_wO{E*2PL!**v^eLUQ&-nQn}>cM^w!{~a3 z5yi|tu(^x?M4LfsRn`B6kj-NmL zFDhsA8~LS(`>59DA(RdzG^M7KSBL=VMidK5$U=z~1ddJ{C?5ntCKuN#@m`*+T#4Jg z7QnYXEU#ufGB-+nat~E7f>#-=luhJt-BUtlO_1$aK*;x_tmaDrp@7rO*flw|gM1uk z*1cbk8x^~F!_v5_kb;~`CHCTvGwP2jX@@II!|Le-I(S+0I97kcSm7)j;-H{h_~7X2 z72V3^Dh7}N3Q2b(zC_sA39E89v%w#em6_l8zQdju0yf31jLG0Y-RPR`e_ac(jWP)| znBzM+iX)naYoL=TYXs4_gNen9?Kp~lM6A&ihr&@$-_EQ9d`cM&21sM;PsnN+b`a`~59cgcy9{7ib(z;ys`~f?loyO!Sj$Wt=_uMa^v^Jro-V%B z2N$}W6qoyeNoOlZVfr5=rIMIAymS~?Ru%vpYjRa#kk5=#BZK&72j2c{a>18xs}^e&S@FiXtN35wr5T3>k}i zyp;8_*lB?h?ha~HvT00R+4J_+uB-t2+>CHYyNlHL9xi{7S8% zultOnFI6bB4)*#Rn4_FG?rR;WsMWlIq%E2k{#l~*f@NXYG37r@6e$Zk&2W)!SYRrR zyt~XV+of{l=ON1b9^Dj`E2uXfj*o9Lfka=C zSEu&-^=3$k&uVixmLH|IY@0dqU3U^&ogpTT!tlhlDIJl@h%DkWqAPA6`FbE>@y@kC z&@xqK=5Q;>HnV$YbDfB!;&F~*zlel$9Na+1h3xvLu#QIbx^p-C2LUFxq+2}cOQ4Mc z$91De*qhiVS^KfTGvm7UF4WPshBjt8MuUv#&X;GriKd6^YtvH>> z?KeS@>m%zt5YK}ld`?U3T4QVBoOhndY+{#U76o=eyyGo{ahpEPjv}H>6|5IFc8cbP zs{MMkJ*5vFkpp5$uQX`T5muRVw4cw=W%#o>?g9pA|C@34^jtnMip%*h>M~`s+tNY8t}QjE&6iizG>! zSN130t8w=QNfT3iz)uJI$}_YhR{9=h)@ogJ3uj(feLp#9Oj#vQQb!=3IG$~D?tA}P z(mWqHf~k|~*_Y4Jj*yAP3#HtN&>(KkjW_Xuc4}tx)07-_nJdUPCTAE0rWoz-l_2{p zOk^$bGz@B)dSsaYw*#ZR=isk9qZbMlhQcnL0mt6t7M;9jN|C+a9y`;GfYk}U7MA6@ z9wulGo&7mNc)zS44#n$1d;EXy!dKBp7I>$J7Lnn$?bd2&;mk?11CuBY9z}}-fTg4O z!LcO}0Vw2s%(H0_Tt^-Xit_Fx(`6-k>4HedMZU0kdx)+aquZTf*aL}i4Pp!!rQ3N! ztD?GEWsUgKBhL^H?=AMhWI;j9o|2GtsiTZAaM4C%s_w%#m1q~VR^wvSb; z9jspob1s+z(4;{dm|z0+ou=O0kv1lM=ICb^Mse^6IdC!Jgza12a;H%IUgPq*FX52F zB~c+SrJUKPw9-ND_0CnvR+>rZ&6oD4jye-S@K>`1(_jjotA7_P=-2dy=cP96t=#$g zO#tswH`$MWc=nFAp3v}p3oY*n{aSkHF&-a+GW8>Gz!{4zknzZpvZ+jE2&>mB<0N|$g#^Zg(W_Q)%Xm>npBioH3G19@tx}7Zg}d!MarW@fUQ8<=NJBZyeZR z=X|0XGP#oRYGM^kX}5>pnV>lOgH-qNI$Bynx6XyCrm|X>0rC z(X_&GDx;N}`p8AEd{mIB8;rhhP#zR7U>Vn;Og-~V7t(HmcQB4|p?v1cWMztmSU~)V z?Gq--8W|oBlp2iNn$%-X;xzU$WwNDrz4{oqw&@sjxCQ@Bw(PIF&c$2-#ssLy0Fhc0 z9?+pTBSCrKQ0gQ4F3m>}k9TKxfntcTDIQ94ukBo=%EFzu0RmH1lw5Afo)g4*e(lFh zYPhalUob6;UxntqmVk`pp`ZNkC@q>EBEwmN(O%UNZ)^7+y486NOR!PXkn@n)#C=wv z6Tcwej)&BQ?Qg1+0nuqD9NUkyUgFf}Ry2S@$6}a~X@B|FeLOiPq#?x;{60gv@Fe&I z*Q*w(MC4Wva>@~0A@g+0-mxk;Ac%F?2%{^TZ$?0So7Zt_)ZyWm34yR6oxsaRRRvzq2c`~LEMGi1JIg59BiNM#+&2)H(Pj9-LoFsmbr(=p18!{46 z1XEL{R4Lpal#RUfIpdgi9_eqXUqJ>!Q>$+ktx+anAeA8&BCgxET(JLOLd9Y)N=lL= z@M)z7Lw2*F$xS7GCi$6M=TwDc8G9QUz6QCL7klw{>|GGLY)$%7RR6t$#4;*M2`3sK z$x&#CoH`BX7Hl^Rvxq)Z6n}buDfB%39Cg?xK|8i_lf*HucSc$FTR_DJQPJQw8~6#R z@xItI8x+Y3(a2T;A`of7jd3oMH7aEu1 z?Dq1Mh>Q3vEU`FH#X}NE&f14$z{Yjj<@8;>>gIW8d+p8yDZ1WLx$Pm`z}igWpEHW$ zLXCh*aL(oKHEfHUv;Aopp53RY>Rr7(SZi^&b#k^oY_2G&@rh{KMh@y|?tE0^oGh@7gaDaqt0L~>3q zAPw4OlJZU*B}M}UN*7hvU34L5Hq^xrV@4m6x7weJ!rX5LsYh!pMS?hPI7e`5WANhP zbjilW=PgwEvgUz@K7solkhOEbbbX9Z$FH=;=V z{*2&F7dsUyL3B`-zTBUt-EWQjy&f8eIcC!eBC=QxzcBjT$Swenf13>n2RvR#}alRHPLw2p(2LoH?G33ZjGM< z9&VD=iG$~|>m)-M*vOTUdb7$46zy!9Hg4>0POS`d*88E~b0^IlUOuCNcjIHvYIzyk zku8^vMeA}M*2I}mGrZ7PdGA#wBNrwY85XJYjF2V~(X4(>Mf(wJ$-ci4t{_&Wt99r^ zcljjY07ckOB>N4DX|-G5C^G=LJ|vEG*!Yy#3@AWg95F>{GCXT z$f80UrqL9(!1ytU&p%=2;b6xzgChHxfvl1;p6$%lzl9a@H}|OQiNhZNa1VAS^ zFNZ#uArow~KE^cu1&Q-Rz)%Y-1X&@2qa+dN3_c}o1P)YIrx2K>>JHhvW~FKoNoR+q zVfM$(CQFQDWha50Hg5)CMQYxMX>nfe3P2e+%Ocxy>WPh+zE}jGt{qgx){btt*~pVx z343R1YlsvI{&#`G5tpZrdc{KFuf%7*Mt{1*dErqbx%aLaLD6}y&O85! z?!$rz&#P9<;UaA=7lH@QA(YH0G;a`blxE&uHGZ0~uFru#st~m>@MT*^)tfKipsYuq z%b8orD1&xPR~G2(I7jwwHV@D-HyBG0>38+#<$NhmvOj$no)7b;+Zur$Z@G{s2&lpxT?f9QJ=8Cc!Wv z;JScs$jLa%4@qY`!NHf9Bj8~1Ff0yblQObn5yFZHU6Z9o2uzeZ%ex5 z6>fgXl)&25jR&%z<6SZh5wvqb)Y^=*1S-mlUnTQcJ+e#O8FZv#r43*==d=>PCz|9* zFR7e9vrNIiez-(SqU@ra+$H8x=XVh2dTbnTPw~?)dd^e30LIm-2CB(vk=xmycAu~= z8m!Yf-y~1z0a79{Usp1&S;Hke+Wz%&*$PP3&Iah3aWhIpEaJ=%YZO?!&*2dEL{&`J zT(9)>!im9Edp>@uGH{Ms)wB|caItY1(N^UP6h|FcBG7!EMiPJ4c!uX0f2&h_3-f|x zx3s48=`Ihb@9|I=cucctY>|mGC?8O=oRg96H&#WSO9NRoWn$a;8&Df7q;U7ecnq}s zSM)pi(U&9=IEsw#{6S{|)&RECziIL1D#KWPcA2kP7l3<_)DIhEPhCWT^ws;9`UbPd z(&xYuWEM8ko7fgo4RD(+REpFR4CDZ`0!vEhBiS-R4jX?%>xGdxzWELHu!50QGTBR$ zAkN{_(?{Vz6%C3YIjirH{pwe%moRj8sT*e>Z?`yOC2M*}<+O#e0jtvrzfH>u^VR{% z!8w<>S2E6R%=D!qd3BwjDz|raqpU_>)k@iVGCIPgQ1GYf%{U&+=MJ>_s#!2}{A22- z`D6L`J)P5l@vdc#LIUG`(bL{Jy&T4bLk~C>#XT^4FP^R0LbIqQB_~jz5KB2d{MD-$ zi%Q#Z7V7oq%AJ>AbW#Q$ThJ8U59_^(UTMEAe&Ko6NjY4m&*#B$!#RXd8-)}Op-(U_ zIBO=&ku~-^@WmEkmxR3U7^wOQ`yZC~>hn7bs2OF_OzJ8^oS)>&KF$>ax)y{H2w(!Q zKiw=<2&M$F^x}Cl?Rc&e=qq z%3OCAVw$E?&T88&dsn6`3hr*vv#mP+! zgYgN!e$tBYc8EF3039$9%3Sv*`qDZ)7A}N9{3G1H1HlJU1LAN9N9TZE11s)YW}abi zSnvtOiWwHs8vca7xzNb%nPCG4b;0E9Sl@E*l8465cDl3#EVafe;Lus4AJTF>5e9PP z`wY0Y>wW1Ini?@dKqt3pzKQut@0O)kdSZShX;CyoNoV``ho2Q z!nswoAKw+GH4qy_h+7Ij$k*^6psOqP-1U#jf!5pA0+^~a3u+j^kezI3vr54)~_q{L{YLi*k#pP4^J6>+z^{36>qvHHxx^Us6h9fUzPh0@LUe7S8X0~5sITiT z)#XnzT@F2klNw$3lILL`c-$xpoJ2Y}tT8hILrgN;aPVAqoMZ_7nsR%PF;Kimt%1?D zBu5@g|5sP`DF3pj;cf@eoBQP$cjw4d2=-quqs<#{5h<57nhFIueLqhs9k3A8+mynS zCzPGULLr%%G=@I$GV%T-w^0Jg`o8UH&EJVT!-&`V~1#knNkRKs0xJfD%;7Flju0_uXk@bG3c zM-wk#R|fy9dfP@hAm+9!^XgP`w7t_d?0FHI>*9LP-T1TuVxvpTpRroAxb~l3_D?VS z&-F5y=heHn6kq`9cMQjTv@mjx^)~)hTiVV?xi*f*>mtLb6SC;IF6XqewnFueiQ?h2 zp(`()WBvi(+w_CqRv(pkUv$PC?u96PMf4m36i669s9Wc4XrD*;6Rgm|lOY_9pQ7(= zW0PTG2)`b~oVyXcA$1^*MsalZQ#3j)xkUed72q2S$W62bQBJ$iu)3L%OY^Z9p^@|; z*vb)p{@x?c04LoxtVDOs+^auWBDaP5{(nQJVveDtGQ^+mIVbmxeFGtG>aersPkF93 zJH8d$cR24Sl`IXQ7t0qOBJMXEg6rSgCv;25&E$RX#64DZO9bg7Mbe>QHKkONLBd~* ze^^o+K`B^#{!Rb?rvLx(^#5Obl+nPQieI1fkC-*$imGu&QGKOAM@{D(kR*|y^7R;S zN34D4&a6D%ow3fVSxFOtw=`ZFoVFGVF?M|EAYN@Sk!}HLUv1sf80h{GV~Fq;WVt{I zQh%TmT!-|RHPHQ>Dk!o`(8|g5wAqz8LWyxBG1@HGV;rSRGKKMb1I)(&J_b%Jwk&ZYi`2M%~noq}IS0 z>*6;TzLFm62(T7U*561zvM>%4Aprm#jfAEr?f}w~DnYi{-&e(*$t4hO%Mg@C$aJ3ir4|r>q2IsZrTdhtWhhxeaMrX*5>pfL`hg{?y=5F98$O0~FC&{v& z*n}>W?jps>BGbNoG5_kFygzQsoh;kf1G+OMEHsl$5v`q|p+q?1H!XJ*8T*);|7N0L zQ{m7~{G2KydXG}zbo--uDRE04tCge%Lk?F;1(Oie7IChRtMw@UozCn_`)E%LK}6u8 z)AinDrf^%_3OqCHag!ko1Kw0E{v3HkY;?F@TGJv}4+cSdKsl})D3%F?yb-)nrxYG#$0_P(3>XT_9s0ikzA;6$W2 z!k9bl?TR?tY5C6vy;iGH#|+s)pNh=P(L_HWIb&`59T2#VA z<&CNFTKjMGhO90~cXZXLJKl9aQ!lUmo{lvhtcf=N#PpsmzQOI}C?~UCiEh%p1jIsq zu7s>phVxc*eQRa1rN9gw^`Mm_W>knMBpIRRaIjWyL!nFws>qI6-YIDX<9#dkoLtn! zfXr2@$%Ufd#KvGmo0L!C95rBZ{&RTiNPXDi7$2s6tWNAr%ySdmQtMNuI$c3N#=>CW zk^fAY|3aorW@s?I4&-~Uqik$QW7nZKJ}*BnuIq?PzLXBEmHRE1Zvqmu5@BtR=5WPm zitPjyd_7%>!Gnp^Wj4!-kQ?Wo&QfeMfyCgp`jK~wi`tcE}pF>{9la4(P@Tt#Z+ z)O0ublAx_iroQin=oQxy?U_+_DB!2u=oKV8vm6o(2FlOWC_mjG8DYw1L6!7wAJnHc zm#Xrg5}h{Pc@r9)Hy$)hfP6I zw)p$5^Kw6@U9Z}mck++hD(*(m$CXDnk#D+7vvH_k=QCdEhAFryj%7qr15^tNYpzZ7 z_rDUeFfhJvEm^37>4XXc`01NU50whD8Joz&mE)?*BX~Zi@01WMugc~^zbB{a;5Yl4 z!$WXZ8Sq+38+}baYjj^oIJ6DsDv^`v1>Y37zHuMfhq#N%}!=ucT-kJ=Wi`}J9rZa7@1?heZQJJDA{eX&=+?KkBhRQj7x`jB3VPH(J2 zxy*TJ4TzVWZ(G@ASr4sA|JRfLvV>De;abr;D6V8R{t)@h`7jj4K^+B;fD}oj-fxha z=C=08aAglmHz|vqOj;%-;(^)=lXXo4LyZUO`i>4t}lHr~`*en?sj!lyOffE|` z=-^hyO1QuZ2j6ztD)-$ z*gK|Ka=>3s2rZO!cHoJ?PM>IL0i}(gR$!llmNx(xPbaRH@BA(107z55jf8nG#(gxE zFvg}K)XlcnGq+Z|`ZCS}41I&xX_?U*Bk)$YPNrUjzF&q*rm(>E{)DXLlSXM~axP;_ zx}tDDR2Ji(KC)j8RHV1u)v8^}rX|@LIG4(qy9+-j66ahua7a(<5H1r$y*YD4?_v6Y zSDzrW!hWKdFZT6$u^>Ys3jO>>&13iUd3EazSFCeTUKK!j0Yen4)9r;iHO7V)Nz0=C zj6qM5wXq~FoIAqSxB>7eXq!y6BBwLUKIw4%6aKQ#@t0L=E5J+EaH>w&LyP|9^~Lzq z?4qX6$3z|{q&K=(JKZVzf>yDHmEe=8pBsjf%|6o)xzT@X!qOLAyUd_*=@W;?kDy2? zYY9;Y;(ZU$QE^StTWc!l<9whp@eE$PL9!8wGewIpTs~(h5=C*uK;e&nsw75lIHaz% zqcbK-`SbE^>QWE8mPx62h?yW;|G53-#a`Bdu~yECWq7q@luti4XC{VYt7K5fw1z#+ zcUZ4}wEa>#UXV)w?{$w6ml+TQZPXP306u=NG>90AeU2+OB_@EBnlm*qn50z>5fnCV z1@D42Ldkk9B?h-bR^&zb@AGFB-ZpI`HzIOfr4C3SRl}-Bk-1g+I|1tfE)bi@FVnZ& zOX^nQA9LFAtt>kpmDwX#flh5P$_h&T`+-0g9~%RvE@2!tB7ZlPlFwS1jKHaHi z<_^=(8%~H5u|FcMfX?g5RMNVA1FJ|-%Hmt{sJk)M2$o9<0NXVZ6TvHAA*K00#jWAi9D%G@TR*l zw^^0PzFb<%4_jA02^-4#Lbw83)jW?%kakWp!7xs6)$>kO&6ut)o`sry3H(pD=fQdn zaEqGNZh`kPPHJju26B|6qZ z&@GnYJ{{f?v_Q(~EW9neX;Gimm}wC@k8=Q37XP%m{rx~b!0rLLYbgLXfnpz`aqR5A z660B)@|w6yf`yw6&%1XIp7MlyK)-b@V(S=t-!xYaNcfb{MoDKEo*eA#m4*pi-VACL z_APW}8-U?r`g-Nj&t@KgBm>Y)Na%XPUsDZZdd+@9aDy%iYMa zTEWp*@-v;Z=(>$Va?yxzl`QJVmoNH+)DOJz3Yi-Q6wP#fU@Sxc839)m=sRYeaHub2 z*krnHosaUN0xAR^u2`4lEY_tnKC(hp83SSreV(FEAaUv39lFj1hDT1*YN{7Cms9z} zj2n~!l5<6}rrA&pUcQb~eaaS52C8f<#j9o)J##fF@-i*G-Lui-McW^^MlhlVpGx)C zJe*?nlXW71a|SQA0zliLFl1iw%I*OqAW_Cu{;L!5sUPULq`vsGEd%;xDMX!O9xuTp z#SF!nw$%rvfUg3Byd-+C@ClSYnZXYQseAqSoRLELs%np+!rQKON-hCzHqbUG@nCIb zfNOZXjjwtIRVxMSCy>>do&Llw1sXoHabNQb*>?cvpn{nP>I%$j%X`#i76d^Xd!2t3 zMyL@#^%ML>cK9Bz{$R{gKgaa>Cw0=2+KY{JFH+BbvvJ$}jfBoA8?{AnU{CM>N_l&d zy+frk<{)J!!tO9yDG;qHtg`E&JFzzG7pe15}5$BL;eeZJ3pIjpLr^01iwnJ z?W9QeEntj}t4mKIv`Z`?^(wR=7QTxX(t7W(ikriP$@k?C*fbc*i4rmnjzC-5=vAlP z^9;C%>pTYhGLMSgEEoANWP`|I@#G+It1RV5yPNyw%9@eKpAE)(Tj24(ewfN1_oKY& zA@ylkzHg`Mg6`WrI_=yLt9ow8FC@OwWCXmOfA7wJ_U`0kbz>t zDAh>LWprLs5aN^6WbDmX^1YUn;D)D4wO!t@Fhc|9LOE?`{_{}ejQbJ-`R59R%Q$XV z_B8HGxYqai8zDfD3dqnx!PXVKJ9qRx4sU_u8EedBV_;ajUOgzAUd4rb7_CMImNtfQ z!4@}XA`?r0&m4^MWD1v{$XrQh@pJK0i|Vr0OpDNciWjJ=^vUjSnREzj@0iS^0*s4P zaS+iwVc|%P;j&+OQ~Xb&g_{lcmtQ}g^0a&KfPDjc$0Xa}41X?2*sS1YX;&|v9PGla zh6!B$ENU(G17b}lfZwGx65y>-354PF$Ps$volaCiTvl1G3Q7RPN=v$O)4U zVMZp~$8yjtdCyl?9S3W*W2xWygWMcVzo@tAE?e*()2*9lw zxgoz3`^Zxh@bm;erhPqc$1zNP+d&LZpXA^a}S6nJvkR-3O9 z#YiVorjqnF9Vvc;RS-~pu;m8q?25TQG$w|X-9*Iz__Y13;m|F~jj`~Q>?>(L8enim zjZjZpFO7p2m#;b}5gyq@g~kiVx6lEJ_#W{NT$F1pVCED?u(dutY&Jl#NrKb#Q4TXu zs_2`E**gBy>3xU&$X5b+^4GPjLww;_r)1|gruQN6ZW0iP9aacGrkR={NRR%l`nPm-PK!_95)#}x*S*Owg zmJQD%L(90K47ixXCKqN{)|LhQ_irZm!9`AUf@iA7NAyYwi zlZF(x&L9M++}C^waC%Nx7Zx4Kz+s|d0DRPTTD#|#=)_cTLjE2<69q7^tVF1#t(D5m zfy-Hu9S09^pe`Bh*rt7CsdyTQ9<8dMAhJCsp{tOlKYQ z=Jc}7bm%34JVtaSYZF&6+9uhyh3Rns%unA}wK@8J_{dPF&-J%sATXNqf!@TCLHxOC zKDT#>l_!dgA>%EWOz%77K+K!GO?U0oSSDJb7|&q#CB*4GKT1Dw-ws@5?clTW)Ye}O zK%C1ov1#@zUT$ZGr%Sdaw@{Tvp-u8O7X7ZLU5TP4Bz)vcmT}l3%Oj`QSA?EvVlyCs z%>el`==h|8%KDvNH9OdO7u1y!9iem+lc^d7&5mc%@aODHui)3CfwMka;A~>@T0H{P zG)a#eo2+?JqOhlX-2h_)0{-t6=^UcLioPT=0lv%XL_09j_C9E!3y`s~+p{mH&s?_* z#yZQ>Lr|jFII`H7P)?3*DLfy31Jt3!MVUaXtaAAUzI@-wU&eHIX$4j(2PMmIBh)~0 z+4|@X9*Ie$()-%Sw-YY}SQOPHF4wv@d~Hn$P!MFmNMO?Fw_SaMd-(s#>wmtysG%GF zmDj)W`uBSMd%gaV@*`EZEl>&Smct-ehg%T!+U^&2@6>_Q2;&j?Dy$hckJ~%S}W1%la%?%@x zcZCO;M${YY2>mLWd}EAx=By4*F0PH)Ru^il!X6OgemIbklT_4oy#3XJk$FirtY?!1V>&Y2lIC)Q) za)NHkV57eSUZ{A&%=>b#BEu{!b&7D`W1WuMMQdw%7fWsXaR>6XSMvue=6xA-8pcA_ z#4!9>D5ze@HlO)Vya3GxmD{K@wj1>;yg1nAcGu*4V#b1S|0 z5a#Uz6Vy^PKyanX4nyMyzazb>Sq&$|lj{WFqf3h09sJV90Eit=^r7Zu?0%{+DR5b| z<)mbP%MmZFC{EJO5_^ngO4Cyx3P0w1XW_bt&TWT0v=$M*Wae+eJN5%IAmaBBK<1xP z>D8urs=_Ind3f?dvzbXTW7WlrBs0Z-If z!s54jtyfr)5|=s^?;>XM;2*s!;}RJwa9lbT)b*$A6kUlOEchw?>&++du3|Jiwn=SywEUlQERf^IgqiPnYvv0Fz zmadw`0|2L~n)yJ2iWU0lM96Fb!kX)G4lKrNj^dZ~oQqM+|AW1E>du4E`3JD_o^E0Iu$GaQ@JalTRzFRy+z&dw zL6Re7$q%1_aK3!FoU5P!{1Fasy~MzGzGTl24-&U_(r@eEj>g~Fv02Q+KfT;gzZju5 zqICV(QmPnxntnTIS(Plt08t!4fk^_3CWSL%Y`EP+a+_a&sKy)P#S2URl+Jclnk2#{ zaluroaXbBPR*4Sqh(Cz<@Wnm>{dr@Q^I*E`eIWcUrgmZsGXdazIR=eJSQMP5z_)xq z-0r*48w)J4bu|m?6*I722tq9#|q*Tda1rYgB~RFpk+NGx_-f_S+%I!H)L&rZ0Z_>~fUL1?@gw*`@M)Gyc z-OvD0?_}+F(t0c`a{$bKnW->|NLo-j?@yH_7z-ZY-)|jR0vWWEn2yNsiUlp0YO6Z_ zlMTBDgIwykw)kkS%})LAG(R;+?}O*uH&Xr38`yiXLbwFAx_J?Eb_2c##Bbm0ghbj5 zLO-3YOXJGKM43R)ETvoo7RD-#T}aCzn+F_)MhF%#*NBI_Saq*j0tt&hv4~$fos1G7 ztJh-PWAIc#!us54$DM z1Sm1g_QVQh_9zPPL0geJ#O<>4TZH!!;!&T2A-}xk+mxpb)ujgDDKm>&;wO$qYNx#E z5<$@qQ4haTR5AK=fU)f|$!7c(E&o`dnVqW$huJ;DFaNvR)ax++prljt`^@FB>aG;C zV1>?lFAGh$gKqRi9s>*hcyZx)U}Uc5BFwVV%3SxrDT-S$=)%ZcC;LSfiqs-;0^Zy* z-@hcKK>$XXGqFzeIh$%fCDQlbM+S zH+F`>4ZcP5x4Y%;&QWUVaR_4cBI!xDaLN8ch#X26H?ETHqENnONG@oT&D(bDFB+=< z#skPw@GGpHGB~Jv=SsBGHyb zmI<_h^^{TskM9^wQS}D(p+qhbBl1@4;|{e7%DfJGb_d$Kxj*DkHRAl7_{Ic_#qy>| zuz4Uo)r#pza;!SYeak=FKDY{ClcDb=EzP4ckHyE?<}}+I=mVNsqT@_O7Cf%bu76tc z?JqUhqdxOe&c|C0nRlau)NoibsJec`yK07&*?fN zo!_K@oL~+l_l^$8gc~{B^)zVX(Rgp!8#T za+hk1>e_QHKyMZ2Pvwjd*>@P02bFq)2e$Z8%&fC2QkTlmD#BNioXbs%8?Px}q5eH7 zea2}pgyNiX&*jznj8#)yuOF}(kd<3M9`H(&CnEP?+;)o{Eq`TL`6X?x1oz#yJ|UmA z3eT-;Nz-(}N8g>?&3b^Uc~q6f5>TdY(uRN5e?YXkp5e9X_RjX@0QW1}24>UNAygVM z+u8=Eq5I6AG@9AnU(C++saFgsq+V^1O^L!AAfmUG zcpG_R9{O;41Uh%eLaRD z>CbSvPhZfMvN3hMeF5z+z&lvKh`Ebe`Z1|RJO@A{F^#jMs{ruo3KgqFD?5pa!kuFC zG|Be=6w3_&xDmMw(t$c&t37|^C+0E3iSr42p12;4I#j7fD~rXsib0Wl=L$d9rO2`?9@5uooK2ao$+JV9OT^GzeOhIq z{2cbNosNuvOa{Iul~48)B?10CjiV4#l|&Y3aPNG~4218t#r>!*Kd(XgBy}!Sfq8Bi zu3E{Mr;D>jQ`k<&Og}%;<3)m(GxTBE2l_L;9fP@swl-7Vy>OSm5k!2ZL-I9P&aYJ! zz^AkKCu^1Z$Hb}4P#WGbusm#{nG7QhbvAV54(R9R;mPP4F@eXx=_4eHQpqfc*^XiP z1#2KTQvgFW@>2}HZ~%4wVG3{M!ZaSpiZ2}KA~_&C3J((U%{4JqvE*eOhh&JzPlt?# zH$*mm_--mgopc6~A)90Lrd7}3zNROyk+Y_6s~-HwwdtM;@%k%#EY5o3co+C?2&6&u z61(nu7#~2;$ufo>#V(~eA_bSX7W6VH^7hj%En9CM0QBciT|&LQ96cUO9nt6jwUuh%*)$ z=fH6)Y?cRPtY1&uM>1UDIux*+1-1#>5)7&M18k4YvWQx7Dv8g(74^WJAuYPCQ~5!Z z%C{O%-a(6SJ6_@d2NHZnVd3zdx+D&*$vOTWfN z?S+!mi=obchML}*_3yvhs`93TLDt}&Yro*%SjsGiI4?mhu>br2NyUaWmGL9R( zOoPW&xj{AD$0vC=*XgQd zt#&3^QhRhb>spu5S5}Y)l>hES;WL3zzbR8r;phL`kR-&R?1EH|7V_K8r*>COHDm!`X6cB0p7|wsJxp^C^IdzN3L$(1 zixcVJDJ!VbFJarE>UbS;3)?t%F%oefLlNrkQtfgxCYqwXP*k~jth*QkbYvCrgV5gM-tRr$II~wnherwqZOjQU!OiX zF&Z+5GIfOqvAU`&pHfVa5*wc+A~4;y5a&GEdnhewo4PosO$69tAnVyx@pq~%O z6N*ND%DFd8){&wB)#wbN&gM$MojZ84Je$-M8X`xY`SlVD%y%*eEZ|h|D8v~2X20!9 zEkxdLlnwJz>fsSrN)H(+i}BFqk$3XI8r9w|-XAAA4D&vN;oBq5QZIWWk!ZL{nN12^ zXbqJ#_P;RVzcAvzFyem}Mqq&#;)V131cuY>3$uja#&n0KXW0bAz}+*FIMjjQtBC!~ zD8tD-bT}GwF8>uTCm!V?4vPO#$oJHkAjhF}#L%d8K5nos#Q}XH89{sgW}Alkx!2El zG&=A<7W$G_JvKlb2k^WfLB*pkh|SUB*?pbt4c=;x`u?@@v<~W#*0op;=(?)2W-D%# zEyNa2Y%!BC^Yp-g9|}}W-HmD$>P`E60PYak)IxRp$X5M~9rBS4!e48$uwI^nkj*rZ zu3G3Fk)$z8VscAOf4hdRKY-ld{=GG`SF11!UtGhK7AOH;3o%xJT6|W}VjR^gTnVLx z;t#S;fU@tI>9@_3Hn@o!#cVJwIk&eRf0uAS*iYCqQ{O<w*l!B*RB$NHLVkQx1I@Z##HEOh zWANkD3VA-Yo{w$-UY+q{KT^eeeaiP|m{lx<_z~KnEL6KV zG{6CbwuLL(m+{VF$lue%=QQayo!d6owPh#|lQMKdF+kG3okR6>h(OBh7U1{mwID-> z*uOZJC|FemxBUw{R3{nURW}(y@I|FFW~hrR$SQZF%h|fz=fv2?1&(1y$%Y*{E+)W_5Qx)<8uE+#-&2r^Ty?>*?1AX zv61{A226nxLbLz^x3AJ~DNLe|0p57?0psLK=eTvaGzG6gf!vRxq6zXaLX1D2STv-E z^SgZ%sAdC`lQe3az}R(KUc(DlK$Cqs1)ZlPOFOg>bL%<>g97Syut>enJn?q*A`u3N zY49anHB1c9J4vr?xQ^<+s{4G^x+^Q7N&vI-`$P*Y&;Bb>I{PSZdI!|d!GowQ$bW0X zpbOvm9EK~B)rqVvlDq}+g#t`O$$Bc)stsw$^Y#M~z9a)2WwLb#MyEqE;=$8~EC$uio zl)e?LE&6@0_uA za#HK+kf4linCL5t!Yz7yY$edg1M95~>WDefwPa3pEu#VZxQCmRG4)a@ zyreaY6#%HkrwF&T)BtXsfzqYeMaL0gIJ2yOEYpL3q%%VR&V-Hw%pia6w4WMYN#vp` zau}kuE|(>*;l99Jm_%BdI8LP z5Wq$clh9WP4%SKs*Dfme0%&i{h@PfP#SL1bc+57z)GZ1ic!X6sibMOlW+$!G6Hz3Q z?q+`kLiz**xl=la4dHOHdkM(Hlv7J0wh~x?plivj)}fonx>2pWIJNI(VL%o6A@trMDJ5^#hXpl;Ga zAAX#Z(v9apfv<0j$c(cxv@uEdqh8(9gDpn@B5E{tY3ts3Txm3o>e-+k9Y=oeJTjeb zq32h70i5_Fj&#qG4zk23K#L=6$7Fk2_qiA(G152ZSrSbX>+ib}gs@+_$~GhnZaQVb z)kv|$)5LMFSq_Q*$lfA;8NQ3;mzrm2^QI|h5J}3cX2+z=73VJFDNe}k@|X^yTV$Ov zdh~oDR%g~}ge`=n6qogR-O#6q3tnsVUf_i)9U2t^${DC4zO}CP3#IHJF{v35R~|Dm zHN|$(oI~hsR%Woff6>-#CED#mtoe8gzy*Zso-UHyY~??tUe|xN+XT8`wq09$oWLdRI z^MiX!dw-t73=?e=I42m@_XGN9qac{%S`p5KWiJ9ooQ3LvYSx?*hzEGgl?r3enTmZc zd=R{bsi5sQP0o_J@hNPeQp{kkfY4y_9TC<5yo8>}ghlA^q+eAPd)vop8k(jPoQ`)pgSet5bGj1CdqZ#z1Vs)I99JT zT)}C^utn_giF$(9(2w7dVK3s$DfnoF>LrgHLg%qk8Gv^9d=|4dh|L7uqGTH)4}+V% zWjKlMxdu)q?hYB+rPfuG4A{#lmgw7w46et6D zZTJ=fM+GY{azOf+P^#aiZgvmhQ;%Y+4#=_m`0sN`JtY^1*Kr)9G+YCJ8D^MgkVe~| zEcfHoqzNmKqlmnMsk*)!2v%DFPeYK~CYpA|JSOhlcdbkCR)_l~Wa<+z4u7{>D)yp8 zC-{tEhFp?32E9Ie^@1Z}=8t8V7&P8|8itQ%ZOGW1%mKKF)y3fNeZ^vIGu zsg@yUS{g2&Nr1TE^Fbg5*@r_A($;GFCtXe*`p#z3t8Q4l&N2`FJ~SwD%9?aK{mm2* z%c(5HB6J5=Z#YIr$;dA&f_KMD7n&+~=a}2%8!bQgC7-7&N58m)!iGhXUaidc7Ejm0 z#Cskuk>wj-Tz+`)SOX16y)E>H1u4b-tLf7Rfy(AO=2?v+960l&WwD?X#o0+_n{!XH z4HS1__x&M476|SgFCfnJ7xTjs$;pG7^cd$dPbp@qTy21rOaWW%kLHH(V2`?NOl|<@ z*JBoqett==RhAgMD+!!Rs-c!uke_}u4Sx21`XtDpA)dv}9`qMP@Q{BT5Jg-Z% z9*!cmyRtW5;qUZnb{~ez$mG4dsQg=!6>6|wUGXyK8XSg8(tsc#^!EH?HGo76#``R5(xKFt@J7 z`P)vtd(;I=*EP9vl1L2ij;jK%FpPmMG)iYh%3u$llqrJ#3Aj@yn+4!Ed)1qA{FHT z>Up-NZ_JO}QPE_V1EbV#l+SLF9z*agu|CBk0b@}|+lM)1^%w$EUwJa%%kK)O=LFxq z_=tJE_sy`3vccNkvu_H=5B_owp94&t`Y{B8*S8YS;E(OLCotKUV90eXLGyN9t)8x^ zZ6Jdi=7}Z$=dirTDS-dWUgowj{Zldgrn7pc6!|RA6{y_J|1>retW~(#N*?aHuHt~W zFvc`ZOkm5#U8NR9I+v%nzz#n?5z4y|wY0!YmV%0QbO`*{N!%2*kC&b|?7vUA(RQX~ zm@RMn5t0L}4~>)&O=E6o5_AQ#B62+={wHT%v;ASP?2qSU`{I{qc()f%a}}C6lAM+5vk8vJSbS??RWP zhSF)CnQlSE-D7v-+4tmfbHayyh#fvJTl%=|>9gp;ErPo8$H;10YY;_0qcyq(<7EQR0DD`?ED8O zAzT5`qw-YUcq^6SV91&Axw=p!#CXI$*-W(n02abs{HHc6N7a3K8ypWG15lX;PEu+j z%z{^u*y|^|)h7IVjJV63aE`z{hrrC#pWb3krQ{n=9`+i~Y1TNFROm~m+0gjz%D_*2 zwLzhUgTEVomlX$e(*v?1>f2!QaZs5HGVAUn45(@hAcnD3V-S@C4qpX~%M<*t#nt`m zEW?iuYD`S?=#)Y#+>Yz&8g`=A`33q=7yOok_=&il3SS_X*_b9Q5miMDvV5Q1ePu7} z>}KE;>J}y$EjX|ZLfPs0uGX5wFLEod*=Z6Kpj@yrIJK|f7oNk!-+W{bU!QNoD&Z{S z-`fAW0H;ibhm?Vx5JYEUB&x5Pqw-lYT1fc`SW5FGKlw+2s338DFS)0VeY8Xq{>ul~ zQdf3Cy(nCi%(pm^3oVEEE$0|8d0t~{GJH}n=k(PASR&R=AW@7|rb0fwuF*RWvApy5 z={EXab*iYpn>qP*kE44bTqVTI~4zk-zgq{%9a<*lDaX)DUwB zrFOzPH4*q2QSdnf2z*+}UNvREDMeql)y)>doo9Ifi=Bdx5>o-2L|Sa6;2#=GckxOi zEV9J8*Ug>ft5C%X*}F;{v65p!-E$Etb1Wq&Nh!vLfz%J9rpW^Q4Ba7at?I)q4XUtO zpLb%U1{v<_sA8IjozR6TbNT}ClpTWEy}g=xUsrkDmkSB_6}yLnX9m6qpOKl! zWcj8#g^~1(UytP9P{>d79R(qEdOWXd;dNwBVT3pG7$}^eXy`5j=Y5Y1fS!2BBc3aX z$57Z)_#=tE(z+^-#5>b|#kp9L!2YlwYSYe>2st#;q3`-$#>xGd>}IQbN2Si=u1VIZ z*FwDKgEGRLn#JSuA8*7SirUT~)qqGU+c=ZY+n{(yOa}y5~7M5;8ID@sk7oM-uToA8VvtBiRHtUo4NdlF;N=`d-Qq4Z{9|7EZk+A zYxy<)Lep;G;@>)n?}Bu2N<{bl8t)?VpCPz_(9qdv$>|OERV3=Dgt%&{w8mJ8$H|-6 z2IpFj?O{sHX$K(mXd{2pk^7<&d*0AAoDH^{8f6W&X-Q#Qf7`68Tad%4^f?_FF=jUFf$1yyC1Sh=jLMUi12FD9B8fm1*iLV zD@b6R;=O_dB zdNz)HlZd|s@`#cjJg#orutM022RSexvwF=26ct;@#NJy>3KJc^Pr( zS@OaQ%|uVTxhEHV>ISOb-ySj21TN@JZeQerpSOt*XVJh+u|n9Yp@M6+_Z{a6g_%%- zf4ofuSyS)jSn3s?=&aaA2ui=x^`ZemU*ZgwZ!?RL*cOzW@+@>Fa9`{9o}DP>sfJ`6 zo+(2h7SAuMyX;t~D@#4f-Gmh4o9Rf8Zh@57x{e-cFYqi${!@P|U(r1*a|Ul+q*1X7 z@}(Gn3HHb``p=8ljNB7*n1!wQ7g4ddqgb#<@N-^eVidGk$^=ncU-(fBZR|R*0B!k^ zIHE+@g}PiI`HPkunymy#j)qF+mdaWK0N^5@#=aPEa2H;GZAIi~WO^;p!H>ue`yY3x zkbDH-GG0Ks3*)n$6-#3uqh}r-bZ)8Cl1x0er>82mAEHTNkNP`sABhg_DhPidlIswi zU(cI&d8l6}oN5;kmtOo;ihxZY=bv*VCx*}>dshoD9EC0zH+{{c*y?8jsjO<7qwczJ ze?`eU2S*^PPG>bIFXPPNP@1O!d(33iK@^SPFZ>98P>5s6?pIjAEFk#8*IM#DN2m9N zFRlMJtr{Mnoi#Hx*U3Z=>soO6rZ7bs>w_0T9=_xUYTv#K>xq@}`tjv=NZOaZ?@7h$ zWb}a5XoDua0UGsCl3e0PuSY3GULG_z4pDUu`#E*j9|9aQdY`=G*2+LS?z*&oBzS7= zF@jD@!*+u2KVH2-RJ{lHpAs;;D$ghjzeiTY4l8cp_8!1O|BlnE#Vh>tc`(D;S)!#u zK>G^}-6jUXjjPZeXe*0kc=zv-Zd~t4>{DPR{nf^dzGzPw;?^?A^Tske%*AN*tjP@s z?v=z&+SrT^0Ai;a$_G7BAOeZ+C3)>}UxyXGmyH3D59vX_1yXIwqOW_I&C6KTVR8Yo z^rNbV+7;MB<-`qD?qHtTfT7Va=~4D9=!h&GGjF`}9;;YkCh{gfhaT;&>T(GL{fAdc z3ez;lH5f^)jRCmqs8Iu9AcB6D!k!U5^~a2#wjW0MFz7>cZmBMg)RubigpAq=e`x=M zS?sfL^cB!0PGRVzu6@-MdOPZWSDVoEDIY*+-NAYo`gd9-ER3joT?fyGDH+vO%$0A! zGY1Sa72Vdpr2ml@m}XB$%xFE3kUx=AnLAd|76H6*Egj_|PMel0hUNB0k}oJqN(I5m z4lzi5jh{=UTXd|QQacV9!*2Vd5+qfH8+f+)6lQF*UwXom@Gt3Wb zs3DGl_NTDk0u@J=i#}3gks^hK5_SLpgy@@DATlK6srwfPQK?z+E*lJpW5T_Ghh0)w z4?)P3r~i)9=yW@!%E-I;$=h4?D{6%_bJvZT>C%n+a00mFo=%Jh;yuSwoNwUxY8bbd ziPz&K!hOEpY)ZC)JkG!>pevX*@4`1*aWI@7eF627dT)~hvKKqFa9yE zg*TJNC)Iu+H!Gk$FjBcgkU1aYm+ubr84&u|sbTnGZ?#%MG^UNaJ671;%+#F67C|as z%PYw|K&<5tozUcWXIPA>>rB!fj`_%ncTZjcdoCvvb}%wAvc5e zGxxSU2KAMw+OVE>6PStSDb5yf005x4A1s2Q0TGWK>dd%>hWT6UVE;BLcg8M`aZ$b4 z0n@JDo3cYQ9aO4=FA}HE&lNA|U&UCuFAWWrFP#TcAYAsLT| zt?=XB%$t|2gKXZrs%L=oF4nHn1m-(2!&`RB_suwuNe+T_5;*II-EqxJxP3uP2VeRZFdeQBt4Ivzpd2oKU(HX^0q^%D&RCwkBRonk z$IMPEf0s&Ct1C~l8YX);%s#e68-23%66;*`uaydf4U5BnddW|6^OR-SBvLp?L7%Hmk1 z+4-Wss%3ira@nAR-0nv`V z$%ZnssA{_q01>b1N*d33qXMp2&v^9Tkc$f^UI8-qk> z&k8ZBH}TB25g4R^;Ek8=3&7Fhv|l4#JMjG<#)SIqQ9g=qHADiHdh;5~e%g2z3!~F| zim}M`X;rJS;NK8x1&lKfwqpHL#H<)N!gIC|-(#RV&$>`ce^$r5iKdbw(L4dZe-T9h z-68Hs2iG>O-=gA|ci6YA!Q?B#Hso^>BX|vlk7`#^_Q7)5_MopFUhw4lJhh;IIFZsrj&!^mEP z?(UyON0#ac)VuHawr?M+ZZPWks2b0;wI- z6Fn?jS8PMT5_ zb;8i;3n}yM10EzMa3}zU-w$epk7)<%zNZAnrvp@3zy2RftlN8iHav#=yxo!7VY_yX zvdcamu(&Sr03T0%4E^(Fcfu6i_Z|FMG9~`2;Kln81^m|Nd(dlDoE+=JHBk{UTp0$a zKQ2v2^1X7@UN^wuogU({WY1B`IpNuiSw#&bs95SbBCO?acixXIL;c-sT^V_XJ0}rT zB(Mw9vjx;EWV^p`n=*ngO~D_7un6V-&lzJ?8s_8;j^M}sis+RPrt_&S9L@E#Jp(ADm@jAA?D4XC6vzL`gWHyS%|$IVSqouMDhE!ZdqpA>K2M$A*c{H*W#?F%Gc%U;sVuxHRsLJ02H{=<*X- zf+X_O6X6ZJdtu-7B_?roi*~~nPPEErPc$z)h*_)ipm8l~6)u@>1@_YEhCpG&TLtDI z;w*Xnqg#iGDs3z7?M50E<{bX+JlqQa7z+$b+}Y1=w~Ut@vR*!Rg6HeoD(lKJ$lb?d z9Neze*z=roVXcTkyZuOR{s^$`04H0Bt9M;qu6NyV&I?X!)6~rf*l*F?4Oz%jw;xuJ0jlH18KSR6)mDrt1WMew(f;y1vJJckWv(Y`XLbikO;;LHta z430=@*48sKIj9x~C|4(#Go-C#z(KBmsRJe*+3lg`k*Icy9- zNJz$hho-aW^aX6XjP$!Z!?wV6Z<(eS zz2Bm;o@N2w@4Kmc7A&v%C_C;tx$@fDh*2`HqS4Qf?ViLGhj1j)= z>-VMlf5%6_R?HA(sD8e7zhnKIZ^Pc6Qe?7w7($H? zu{beTLbFP^rH;`O^ZVp1xB~tI0%YO)?6f~g*hDX>&?tweg#|3WUn%dXT*`E*%g{io zH_jXD2eWACO2Otby`kX?8%BTwMWZ)(N(?^HATQ}rdBhnOfOAzmx4eL*Bw?&>w8hc3 zs}$~FdID|DAks_Rjkc)9SH=u-#u7|Y_5{9rYbBQ+&)){t-=B6MfbbZ&Dmj?U_`-e% zDdwGckj!%^n^_P%1|V|%x@qs_a$(7%gR%AN%$_8zY^g_(`biFgSiH=jS+9*Gm0j0( zrwzY1d~Qg_zBf=4S}KcT`P_)NZ;*@z8=h^{^8cw9;`mApaM5{Y){}HHAs*80B{&a4 z>}AN$5q0~>v=xX)>fjacgd>t_n$47IRJt3nUhP8bP}U|=G1CU(r{4hyPlLY%!imdL z@#3k`h=L~LAmQ&s78m6f{o*##2LPA}4oF^G&F!>~R2;EgJ#;}7YdNSG$T3RZBqQ%$ ztyfy{o^Ycs3W9lki)?*!Gj9B)8w+W+pIvQqU$QI+&FIlqPx28+ynjQy@>YcfmX7>t z0a{ZZ*2)e^3#sXZ&L%|RC`oO+7uTh%)CC_R&`Ln~9dhs?YEYHpg(agC+-Mekx?gE% zR79&7P~v>lSY5jvwk9Ili?Zys6vju+`JDR>vBu3fZic2Mshj5c>Jq4Q(`Y>nD_=c7 z!Dh>jWg5uCB7C{pD0ZD$bH~FNBM<3_nZjXk3%C3dCHCndbMo=_5LJq7mi*azwHG*R zI5esR;RY`>bd%%a+>jpChO&fb_V$GI@il<)k#z80_*E3O8QZmR z$zBgwOCJ3G3GA@Do_TL1oIDG=ab2s|&2>-O360UozoUp z&Ay6lHEHH|X!dIkoeZ^4@+_>X&CcY>fi4^=YU97 z(FnG9RV`;GC&M)qGq4N&X^h9q0M_vuEace6{tC_}4{0ul%Sw zWp(tL!eJ0sY@HPRw6UD6P!BxG?Ta5^#q^vZAv2PhTWNXphV*oyA++pP*Z7B<4+OVf(YXAA?<0^{y8cwiqae_DGm-Hw6kZ?kAmEa;@6bDd6{9xWIq>{(t;> z6zc=Ss!wWqM`bS*G>_Xj$s2ZRnoOlyD4e$w5K!IrtMbh?_aL?TjOo%!5v!zUp^2Ei zIv3l{PC>znHhI#MNH^+|HBM0j-5O-EEE5|z3f5q-V6+yxq8f;hCTiR{|CK@ZBE0}% zz!#%&&AbY;OBg$pma8l3={UP4z_J`Bsg@PLnPyc0yJDnE4+%&dCNFI+uWKHfV~l+A zRkbKqeb8Yt=39{(F!@5yDefPceOeV3Shs=stlyVG4F8^_REq8JgPn+aHh;w_s?&IA zs5`tiepHd=_2z=}rM-BxOT#J?fNlGbwyc+^D<6JV5#+AHfBdWFegjN2=R;sev&!f) z4T*4KZ@MZnw49PKI z#9OAJX+hO6-(S2cXn`dOKP=t=F_-eoMkzA6EngDn!y2OL(;#NQSY#8eMttLsSq|yCJ^DeX)5od5%ah6 z=*x%ynMb(f9*UX#&b0(DlH5G9R?LI-ePxIIGcZ7uWlOvT%wIBRz6dv`&@5R8BZe^O z8|Gt`B?aq$3HjQHN-**;00FMO8Prao&yZbXV_Zf$`EFujVgAxrd%LFrG-i(qz7uoF zeQWnN|SZ(8c?4%FaOD*Q0` zHjK)e^-ALJZZ~Li7TnP}%$T>a$v`Z!94DJaV~gMIRe#bkwb$4JeGMa#6#ZV1{Pi%|iv$Z{FOGxh;+rnoFJLheEnkyxB(+9-|4y{64 zUz#{;`%TQsJx!}Rs+0VIGnzY6bES^#^o22#QtRc6?iA?(W z+$CpzewDqTGS5OA9}>r}giehF(NY#p>X4b+GwH4T3}no3%V%xzWb;lLiwsqe-2qOs zO40s9e_eW01_$v=%Ki{3^1A&q)fCcKsbz3o-UziTjt#^evc%D(Od~1ZKcgd03p4r^ znF5;bKc6x8pN7}@HD!>R<=_4cYkzPe(r@t)3K$U{H6(2irzfnzGp@@tkZ>4?3sZO+ ziSdN>@r+Sqv1azR|P{5{hZ z(?}kQy_VVh#nq>;YbL1%B@8p>`T*HEV1L+utIh6wov&lwdFxB@{{vW7rb<2oz zZ{rjFp}P}DbwgiW*pupa`GB!@7U#Z{T6DwQy{r4{o-$+4E!woxNJ3+SVodW<2=M%Y z!s<+~P!J9prpakF9H+w#*dZr`43xv}1M3Hzp5>Uxqsw#f@1^^?xh=;ZP3`BOP+A~d z09b{1ZN}AK@q1h==Q4H%i6Vrf>kM_vhcoH=*)7iYl(90Cv`ZerP(qmh2>#zpaF-xD zb;`aq)#peQTt|!ki=ag1iRI>^1;DM$@EX|We7y;}(hq%@^VKK&8gz%-M6ErD$|w zk{Sje{3lR9)QguHYj~e-mgL+9Jz8)J^}{$4u~G3;;x+WRZ7^;Wzc)5gNa)j-m(kv2 zYE&lw8Tf7ed09F@cBVv4EhW|q2LT?<4>uJ^(B}1epa%R${0p!^bmXew(i(RUvi2#+ z{35}>eZp3`5%T3NE7l)fj5^|hk9(MtiztpCl$Il@2N{quAiwBQ4YMm_(Yvji*O|I3 zuFZKzx)7+ADdUC!zey!;SUQ=_eEtB8LEojpH{t0raL8d@WS+`WY6YR87a;?mB3a^D6%0@oKYjaJfuoPNRh(1S8m zZlW;X4ipiqS_u$}c#Bl1OKf*mTa&A{m{gCHZL7bc`cfA;IO4~Y4sB;&+2>$bqZtY( zm3I0!%w_!ppH#Jul}{9wQe!e`p%yvVoL(%*56cqbF(^wfiMD@i_=0NNA4O@LV1-Yg zEM=$=l&x=aFj{Q8;9UoI|C={ls+l$Q#d8tJu-ulsKX=ltcifPSNH$cltZKmK84y%_ za!cp#zc;1evG=`h@v_Jh%Myt>e&+U7c3V@$l2Gs|eAq7ZSF92bXa9F<2D>=PdS}?* z`Q3c}FpXEd`i1Vs$X{9Zv-65E?NYfS0yD!Jcp452n7zusPRl5{9a6FocU7}Xy5qn* z;2Aya)L+sxkj~1Z(<{e>$I^wvt&>t0$H?lQRgBfN*E4KyYQUG+SJ7s3#?>@)h?>f= znR$MeQ9SOv3fOws3D<-Djr{~H6P~=zyK*Ev25){3FujfQ z?VYvOY=`~)%!m%fmZFS%=HZ;+?Zq0{wh@J@TZ3Lm%IkT~GOk)C~-wk6w?|4g`o;SZK& z>gDDklof<;y;=4fzq!qx2KB9?y5612ssgKl`7o5m0nQV8mtj23I)<__O;n4G|J` z=RjCXJ6cn3k3TH&f^>I0z`y~#ixJN}(Ovl-p`L|bE}R+aLBk{bhECyd%4HZ9El(3y z;$X`$*cLamw+of^Z(tq$nNy7n08&1nvmsRqf2exd4RK5SNb*$au+|~58W+T2dlXA_ zaG{GtEpAN4I+YTo4^g@wAv3PiAMCwg`M|<4jvS6Vj#LA6|)$z z^wK0)mjUf)?sthTGyt!DVS{k*@5jxtBiaSxD_gW!fnAhul4yh$gdgw^@w3j5gbBQX z_-H}FAHMGg2h-UJ>B85c&#bpJsUVs8GBvfdc<*g^IMe`~bU*>ykGkP{uz#?hfn~x| zH+WYMg~#E|9{{FyaK5~AR-5gxUtSo|q1aNCanC)Rle~NcF}#qBJPCb>ptNDR6)!vJ z18K{FJ-vb+^))daj)s%vV6|*%_j$M-N;#wQnOvr-ry+E@UJTx7Z`R-wcA66Z_;94> zUS({`w&cGMu44FuWtn=pc?e|%;ahK2{3LGeuxCJhsid`WtPPLT3=)%XRyc<&C zop0$!Z1XyzNo)*rvMsN+K~pSI>3PP$|N=%g<{K3 zhHAL$l%M=!N>(8B;|rF>XA6FHQQ`&Z?zxYF19+PvUU;m#{54EH1HV-`{ig?wjPeUQ zg~KVAVMw$*PhN|It;AqUy!@XYA6fr4*5R)?-S7Y)k>TjG0?r%H#l z0g2U^C=T0$SfYaqT_kF8Yck%6lqh|K(%m?jag+W??>Wmm7LIZ3P|{JX8mKE@W9Ab< zTjZ+E@#tU|;})xzCc&BlXh-vqM{J=1c>RB>vj1;Y+5d@YVakY~QV^>U%5Zv3{CT44R-eNQ2g-xD9QYw%QzyD{WCW>PpP zQZWrUU(7sK9dilGjh9&eZ^P@X+6WZD*nh(7e=K+vE(=*R0Bfw^lOl{aIBppOfL3p5 zg*Y0p%551o*}**s>U})WP65k!9bcu&_xnzjPT`IG4FS(i6i|2;>2|$)P0ja*-3-UM zJD7hXWEl4JO!Hf03NFXA9E1av+_b&`ux>a4FMIL#3=PD~%Gk)7PNB(6p-7vM^p#1{ z#y4dXHJzy}yZyYkRkjV(g}fUHl!}pKqnwp8Ux@CDmAOIAZg2RzjdFH}Ygq${uB9Mm z$nFVFwg)IWlzsUmC7EKvfhjkNLn1G+GZ;ke{vP5xR*k2X1?KaYqQ)42^T;4R^89yo zEVm(Eqwv=fJfTjfub06Sc~SYx>S!&?qUvU%g?0!t4+K#0KUwuZ z8mmIq4Zs>J_@oHq4Nh3b0ie}eS|N@FtZ-XKOmuM%fqI|(X{Uf?yh*H4<@@=dN~iEf z{(*pJCkiM$k951*yP@V5;#QZK&^q~h(U*1D$ru?j+6X8*EHLb{3xn$%1pKj$*@g&- zx&t7rp$2a+=qt=bL5D2j`+eBEmmL`<=Z40p+(_G{4M;Xb0}c~ zZy-KWQ1Hv2hrz*gdQ3Y11?Y3*ZA~gjX1+vCEiK*$8y*fd04E(#!1nEKxEAbR>=$5} z@Yqe>wJqTZc>PO&>0O*}@0_)2JLK0_Msy&y7-ifG59cH=A3+Q+BqL8kA0jAiSZ>9u z4th`8vTskXpeKDrOo!uFOB>ovv4dchcK+@QB@}#33J! z^wjH&E!md*Tf#L2zrQ3?FE^Z_@R$!n zD!hYj{eYc*oq9N&M9P^tsKVwSE~Rz@GoLUlt=@FVQZ0I@EwfmF4~99!Yea@l0`=g` z=pDswD2Bo$$r_I?RnkcQN3MbC;aI8NvTr@?gCRpax&c^Y8J`qktiegkH~_SIQ!B)ApH*(th{-PQeo*hjp>`5j#@oaiRleU(s&o=> z_^%M~%yVU*bToi}xVJy-9xh@j5xHTE?WJ;7iLg`+D%$P}kwD-K_JqyPeb~x!6 zRt?mpuQBtfpe=IE#zbtei*cLPbCY0Q0kore*aNoE0GCmK#4muebZBTKy@Ap9k-nN^ zCJR{m@XRsWp}qosNUkDI`zE<|(?YA_(9+v0cjM{VHANToG4xLW=0ks)L%_Je`%*)W z0e4;(%;cBn+!LN;uMcqh&q2ut$o2^CXUT-(pNAY~%FGO$S-OG{vOwpB4tY7|gmzmi zW;?N;3NFK`^^C?N%Y0hZ-QN)2ChY-qi(*M(zpCn+&e&FbarcNMJzLC zl89B$UmVQSjcF+0_z%M_5xf28QpXjPx@~(B6(EcWYkNeZbPgfhwX-X91f<;YpiDv~ zTntf*uMTPetcigsTY$TP-knnt0K2mI1zik=Aqs)LR7k6i`QF+mf8MCbzYz8M9^blv z{KuRiYXg4QXc_m30HlIu#jtAb4vW+$!=4^Kq(8K|cfpOy-FNvO5OgoPV77A+ityf` zaHm7VK44OX7+_4;re=xzAau;NL@DSAQCy_~!_DpM%Tzw9)Ss#ng@=qQlKrNi0n$j4 z_%kh1+nJA#%uJ=l(D{^HtWvYVL~LKp<|>|KzCpu9ho)52F0q5O9=m7Tfpc5kjB%Gb z@8uz@)3CbTv#-hx9tNba(c5wgy88kGm={C9_9d}+44A&6s>y&P`gSYI;OR}?mu!NH z+UChH?-%)$G7VYZHDR_Dr>RmO+MdXnad(x9`ChunQx*EweR?mvOkFp7Ab0xf8U}?i zAeem}Pgd)f`xiz{N-hP1_)%_+*vsQo7B3B#5kmq>e}$E*wA0heOGSVb8%Civc#hEn*Y>q_&DUeD`R$;Q`qFYxGy!~+{2@jdGvAk{$lHw zlPygSe{>5Fx?fuFh?qy~+t&HrxJG@5s({G@&CY|N5Ze7SRXH)se;nD`o7GQS?=`Qo zWPj~$JTteh=%PN3{sq8%ar&aw^%`b&~JrwYk zm%(b_S|U2;=Bp`v$4|w*3lv6Yx4K%yGJPtESo8GF!93HPfdY>IIOGzsGk76&R7I)V zu`5vl!kDzWOC(C?5W-zQw@ODq%AE+xBviu15Vi2;pa#I29GJEVxEJW%JuLySBa2_u z#b6kw5ZF(JwBlIkt$q6Ijf(t>sMq)K-UZ}8?gUw{8n}rDN5Lm=+_VRl-nF@7=hJcZ%}204Q3trx2AyW`;pj!S898(hwDTXkFcx||f7#2|a=T@rHPLI#eDbY2oMb-63{jukP;r$tFx*}q9Qmu@V87~%pN4{8G zMn7$>*MiEj{oks;aYP;Pj_6dNUGZwyb!e+uxP8}k8Gg-KdHY}12@os{EL@XpJD1=G_KItA2q+l zPLBca2ITEASAP^_(kv4A;e0T?bxE~O0@2;zivw?!273O`ADFk&I0Ft^N2TvqXe0c5 z&X;#>t+cX!tvKP=n$-a9zo<8PdLn*e$h*aUSx?x>8jNM!M6pv^%#2rvtsVn;5<}%2 zM7{9g%Gx%FBgBpAa`cCYby{~?`a1B-b{u6l7C@KL?1O0Nz}It16@ z1j=`|6DJeDU=R&VGt+ZQxrj#=ae2e>I$*asOQQ1!k60S~ejmpH?nhC@ox(e+q3ls|HvSFto`+ZaqUmPdO?lQ5i_U8fs^9eC zkMn_y*+EWWlkdWw+_>`qk51;{`@!40tzS;IJT>ye@fC@Li~=P70Gy>mLnG-mjDC*w z-{^$d#KGTNQ_w-|v_k&-PC!x~NZ}e*-Wd`{OJECImi~ z8*&V|^L&Uo|CvQnmDmKKBDRivw%rmt>?@)oln!QypLBx@5gxpc)kxFs4(v<$S{b_K zlhtAE^omUKf**tQf&>|PbxY^`8#2z;wNno02Ejy1M$I#uJk~db!`J&c>raUmv(Bc2 zwAJ)=Kn;|3jt~1jWH{J zfc!_CAnO$ax6pw63s+WOVd`EquF%-;Re!}!PXQkWS=FK$Dfc@4H>3bF0FvWbW!=GBKH}lQX z|D))j%Q(a!ev}&{_R0j6g)74q#IS(U->_1Zc6xewNr|pu%x9->o%kOX8iD&0G6kX6K z(7y(li~Vj60TTir%?&vM+3mfi%cg;YDT%??ww%<@^RAM zNE7MTs6z!iImam2q2R}dxhuLK$6_Gw964c2K6*Mp84iG5UihRg2E#Cgz(^J5Q0eOAM^^k&0 znn40Tm;(GLEp3cv|#bmP9i}^r1XU@}=q8u2i%{p_1 zAl)deXNPsFV40p#qN9N&JyBeTRYmA4z&L`PP-Rh#&$Hg^tW7k7)rQ``LX2Vcct6kh=DP@E$ZKWwCPb@P@L z^UP_{;MfPGI1!WFhJ;HzOI_d2`e#tuZXsK3OdVVrH7U6i4B}h4HDb3+P+7b-Tty5E zDE$*FRcX7YmzR|23c-9~s^|?&%(mQS4B?@X-CBn=D0c=bTTuEb;4;qMY6L|@F`jS2 zN?Y@J+1YWy8l)%mrg!Qc30*V>8<*qh8Ej$#3b?1VV=mXbX*RGmso#R~9b2s0PY+S+ zI(b4>eK7H07WgD?kA%cP)IJ@ER&--O6(_5-0x$j#4-=m{h1bnaB9a(YH-4=V+}JS&9&VhbSWfuq%sS)cIf-rV!Y7g|zBu=#72$$F++5yQtUK*x@%0M1N@BO5+STXdRV)P@y$qjY0V9I4quD;{bS6bZ^@%i^xv0m4J9R{4lJ<2Z$3Q z*L9EzpU5{F;5Z&`$Y3Ig!lsD1<-isA;kzQu#0$p-{tLiK|L?Siyle`l7a2U4WPFu!|5=5E zrmI*>E<{Z3I7S@}#qD`9K9WgZOJMF?+kejHHhxMn*fM2y>PWWbmWMI59q=XU3iKA> zXYqMyE&4Bx4!Vj%4B~saHDa$!P+7b-Tty5EDE%`lRcWWEmzR|2D#2WFy67!T%$D3n z9O03X-D-z5s6r#(lV;G*p1zOfUH}bO+XQG&En1Tx!W-(T=1dyE5510P6GrpolhE$# z_pIYA51aB?Ip)HKJZFhT=M@jtPx=_-Tqt99m{Zuqo47AG;T*t&lX>(}_})S5r;{yD zjeK?s5V~Jk@3NRj>+9y(?V3h?imHIgJfdYeY&nz;&0dfSBDWR{?8R zb3DK6m$d7n$~)l0IwijtW8}nq<-nnGBD2s777+Wf;%H-1F@rHTB5bKxFnQCSBC*Q5 zy9WJx%tl|en>@%oi=$}@q-EeoI`5aTqQnUdL@{VSbT~G#tuTjzDj4RbaTNi2CR&z6 znSFlg@^cy#=~CNmQMVaUm`OMyQO&VGMnPeet{f)kpO5J1M;qn8Y&$bNI#+TYMd$V( zusrzlF@Xcz52K1ZjklBYO&tOKq2uU;(*)_L{VUtb#F8nczboJ?dMUPZl}>9o%N|#2 zf(<_cxiNuyG*#rJM02L4`E{dKq2H8kX)*v5AgGtLMVyS+R}ZacPzz(*8?&+oSJdvh z+riuQrNaaOxey@kgTFDayHsB|VZ}f%O}5e|Sjl(rfSS{Zw0T(DI|@RvinJ}KQ|hk z{#nWpg!%~jI{@>(H^m`fLf~V$F2{g7XJRlAsawi~w+2%Yn;u0XGio+oT^%;S>iL$- z6-jl=f)}DT4Hj)};)xAZjybN~){5Cq?6-`|aB?l9@z64tR`u6vZZYJGVW0P`3|0fz z647xdUrp(2ZZhsIpfEbSwY4IanKMbmn&&SZ%#+P2DB#$4!wwO7r|OLPRJ+_9icLM2=bQH$?3Y5=UszG+*4`@Y`o)Bj55bz+U&ao(xN zAcI^Xsuqo$&M>o?S%vhsDPc!#4V7x$e~DS;`c9KmW@}piyT$a?(2M|vrm`+0vy98E zumSAL2+YG8=w%jayjai>BHI9%{*#WLh^bxhHUOO;eka(yADeW&2p;qEwb%735$+D$Ydrei zRa85HqaBa6=G@D1Ty$)&(6`!)0fm|aP>p6vD+)Om5p9VaTajae6H_|PI%r`n)6^8E zH%8-J*{4pu`aRBsos;6&v?KY(53e?$Gvsr;7T}gUH~Ng5Dh1KuSlSc_XY*$}Oc+gg z>Wi@B@a&%r?rqu}aqxe$kmAfzHN@rmjO7x3JlW7+$)c9?-BNA;FWmYh>eAiK+!7XEM+<$$Z2d{#61y{!a9D zNah2eAN*K|D^0`C-wt#BvB##bWJ_*2p~)C?$Ar3XW2JJaC_L-ioxqmJ)d&r@89hqMgwh~vLpm6457ipPWunhB&VwkMl2DDYL5K5S@U%N ztE^irBG%+Xg-bk5UEBF_Dkm>9tqww#^^p3@To5oY9WZ9LX~v_X)TYm&0F|M45;klDyoKK;#p{)pz4l-bW#HBzv|11 zv+bfaNKfc(@AL~2x?l`8Cdcyw*yJP>a7Ss!e5QBZTwrTbzX|0BwotW~9-`Jw@~EnM zZ{pz`@L}9O0f~XAeKHWO=;lEx4)CR50~fX z^S;Qc=Y(`w^EGW_{$knQW&@t_;2(oHD9CX^wyKq8@+&$7ev20sa}}&uB-H_Bi$`>v zTCHVSiV%SNC?f%|ON$@Wgx}F$Ns8j!HkM&^ob3Hg1)uS~PMd15K06`}6U)QaqI@x+mk4WkR6wlX}bJs!>0y zEnBPhX*?|ykEMCT3f1Gmh}+@J_A6DpaA7?`bpWS6|S<{2%}35rj)zV8oE&p;Q=YTLg7d0}>KA<+az2zXJIo1e@@?Fw zn{XcB;qe^$7<~Vb_4Dzjr$#=z1qj`btanAsgY`}8+)iDiK1Ef)#J=Vxz@HG>WlZl4 z&av-Aw)STAlh!*es4Ux`xNFbOFDSaG51_vWU_SOIIRs1yd@R@G7;tAz3V%%qFTULk3tqU$eO)sqR?tLeyr!qODClv4P4l$Fy5oF16GW_e{^4MrZO%Xe zN52|&iP#;ylsc}W)a}?4r~qM1T3f>srLzd(t{~cKOi-J|#v4+=gl&D%XawY;zlgx*TiG8Z@Q-n$Vr-^ce>%dt}V%WT*PTSv(ac?S3 zs9wH)BxEB~{Z2_%)ws7;#3-S0w&zc29K5ZAizs*YpJ*mH7`QOCwFhv$;h~1H;d#d2 zX^HfE_@>C&R8e+Y4wAa9T~_W)XBVr!a2@GOOj0|>(P94&t4$8qto=!OF)Q2Xe~^{I zSCRKy$KeG2XR`7iV*ia>TJ}6F*!0WxK7fxPcvm$MbjB=O)t^3hek=Lcw%I%^kB7MD zwl^;yfQ`!Na@?TYTyuIgV8xQXzjm+%yo}Ehke^Rl?YVdn{?theTBaMI6DIE-EG)b) z`FNupvhib01y(U%L{(n!xjT=ackzW*3o68<2{Lkz_~$iAG2qajS_3{zvz-BA6`Ool zngn1DA@*JLEJ#BL9W>da-+_<VR_v6v+q!q5)B!FyZ=5iN~#=#@psMGbnhxp?iH@NM#p4kdO z(d!dk^h!p+Z5}D&razR^HS}PjQ>p3+Tyd*Dz%U1`CD96}E!i^l<=2GbC7TOZ%TP4; zviuT6OOf6Pw1QR`iwvSg9_-CUFWq&l@+v!AMpjhqoOKp^XR>6Z4C%7#_*i9Kinh7Hpgm zB%x_KWX(Pt*8BlsyFn7Xs3s;uYqg0USjo?z_i*(tbpy=W*MYs}Qz#n#ZY|8Cm7n3F0*V z=SalN`}(QZ9#7O-x$)WN)LHYvl`=Pcp<$B`m_s%S|zb)ol_S)k7L8`fc<3!g;MS*n4lKjLsI z9MMotUcGY-Vzr<%X347l=Be{b$-lMD<$h@_#=W$?dubnRMn;$88s++m)2jh1mhA7B zgDv1ie35|sTGmR>eN@#lBZXXAa7@oLfds~~nOPxw}OdAM6xVT+0bI zcuWDbgn1?xXrNXfP?Axni>ADtXWA3xCqQl}5>yYv*Zb%)|0pcCA;>B@0be9<748rM zB`VAhjEH8lK!sXVsUX$j1P_HOQ`bbn4@m$b{Lk<+0(tNjAA30ejzSC=L0JvdHpNx5 z{R9DI+t;!t-lF;kkF32MU4LlCJZIw)4I*l^IO4K<+(u`{E}$I&)amvo?)M-uHVQk1 z7l9*|GzY01Wi6uN?mQN=bxKd*LSd92poXBFsofG+tbpxW#Nd+H|d#5 zZ}YYX$m)G0kxOU#X&uLDHL)Sg; zSaobE!8hZS3`wuZ4WvfKd+dE<=Bcy&fpr+@!Y5F47HeSY4>_6+hBcIvS8iSZuvX9+ zvusv>`P}*~=ik`o@~}J{;a=F@KEDGtE2GPCgK~4t>eYZ1OZNY6V+(j0pC=%{oVMEY z5LLCpNFkRN9MSVaAc3*sW{LLOY-k-H>{2YN0NUHA%wdOUhvM1fIlV4h&UGZ{f#{%P zr=j;srAe-Bccg{v&qW^a$1!Y=>52hXjY-Wz?rhS<2Rr>KuH_UPJfZ+v#5|P?G*GJ# zD9NbPMN{6&Gwqr53m`WX395(T`(7ke=Gra}xDL0Jvd4#jo7^(X;k+xLPd-jez& zkF32EU4LN40%zkg1tMy+FzkwZ)MjVK9-tio)Y;A#?oTmxK9uY@`j(%edP5l&pw+ff z7%Xb)K#ulONf1ia>vRCQ!?o1#i~A*0&^OH6v7u&k2;+S;gObnXe&U)~GJuxpwZ5DRjxwVdlOtBtp4#||lmEcOgn(rP{vz^wqe0K>I2IKq7CW>a? zH}MsY+H`K>(s9Ki&7!NlcF$-ZSxQw@_$)pj(Wl0x79e-K;NpXwhKg%B$p()pfYvF? znqZ}YtNatrnV-<&y> z*02Q<^+eBdSp;K#{qy!|0l5gAD;e0^4HG-&B>If|7n@-j14d9*1GPhO&1^480NM7f zqKUVp{?Q|AH%HeWnz6vyxJ-kH8ZC~v;tsdjnXw0GTL5*Y^O^f;H5xorsFPtU!h4aF zwI2@AXTy&EXP2>qkXqVB5XOPvDrXp96s;FQXpro|uby@v$(C5L2&AMIBYJ|gftqvy zTVVf>zdW}K2m!qXo+#M|*^e2X$blJXcNP?|>P2u0W#iK3)lfr(Fw(fVGcnc@eR$A4;(R&l(Zd$qUpa3T|Oz zcXEJQH}9ctyJ5Y2G=hwIc`RGf*P`t5WxNXVT%Ud0kBo(TH!nY%YSll6xYp>$_QMPM z)V^98mN0xLaD?&)Jv{&AmE7;Fn)(s=JcE+7zm3W!4EZz*0lV|PiK7X?%?^R89B?T50j zj8qs3OVu49jv_B7A^LF#;=kE&xvqDnH6YFHL>usgwc+!d6qvpvpTI|>m=%#p5>|t#{A}Y z{YwIJ2{@NBus7=_cHBwy1$XZoVFd$5P*wxAf8x5?zLNm5?R!NNZ%F-TKr<_guZfA)*bMX!bh%pPYWA%IT5X0tZ9-DcuNlY7(|t z3&x8ugMPQ#&n+&tbv|pj6EuM7!`-*nBf+?k&SCCUKfziH&;&}AUU808gk86dx~#p} z`Z_Y(I0Ysjc4vi-mA*IhRkfMVJh!mCFf-pA0gBbUmInUs!7DM*OWM~&5LHGJ6 zzM+W7m_~&GpuS>ng?c1jCkVu2bKJe_d_af7G4SC)!g>P!vl++N!zU25sKkBesZXcA zpxf*)0B?${m5ug1YpjOD-qVL&Lh)J5yl;+s_2F2}HK`U8%p!yygj#N`{;0oL-rL*#^fg{UvmmXap(HU!os+t~%+ z$W+}rJ6b?4?292<=pI$Gozk{^a|sm&^n`}$!4xd5Ck8Q9$k6Fcf8`h@!%n_&g> z@59RX^Dk7AgU+Jddh*($1!_(I#DX|Bhxy9dx)eCjMVQ&t{fL!ZH4cT zT0VUX)cXQ81>^j>Fo@deB$60NmQAZZP`q0-LxMW);i@S)29Qtl!%DIx^ch1?Ez5 zXItnfR1B-oL>oLnijFj4#w6RY&d+6?Qq^>ash|4l@y~lOlP^IVaR})-d13`mhoY0^ z@6<#%6a&SPsfRTP}Funga5y-`k``|AlqgS*TbTqR6) zz-l+1)%c)v>flbLXQ+dX&nzG))k)%3NXOE}uWi8@e*~GLHcv-yx+nR1X7eTi^!uU& z7a&a~+^=L~3a!2HDewijb5IBKvbm%TU!L-Wk6wn0`01i$+0@0})@S}qXy;X znv=@`E0*lPH-jzUWqgr<{Cd`EPk*SY6^0ABwBVSY<^u_g6*o$>UuRP5Wf@QKf=ZOOxCes!U#y1wSVNi15E5&kN+i+r01M{B;## zzzE7}pmr#(o9QPBAltfAH1U?yKYn2C<>>lFGZr`#-k~M@=Jwj!qcPBc?|J7Z6+X@n$9e|k-v}{soNUZYS zzrIqn*zc9C7?7XT^QPQ~cuLyfI)$~a&e?TcBsIDy@J$fVo0lBWs?YF4{zDF@aT|cn z5tmw5Iuf4b0UIB8DcdiJ!+MikMj(MTJS0D`UD>%D4hp zW;EUg50IiGO_(vkHl*`oIm6$g4O~!x@m&fR2fHkYqaX4x)7_M2Q~&_=1$*u0G5)Q6?a$wL9+2?W_7j=*-9v>xA#Qyc5TD zr{SJKiZlzLmc;d*G z<-Q!emy5!N`W34%W#gn_|jlU_!w;RcmR z_4)jE!U-ay{$LHeaX=@OwTEVFQha==w32q!ThQFPQ7NDasM_g;SI}Tx4+C1#iaY6v zx|6T?8$@_!G5ZUc0`WfX`I;~~Pw=-IE(JAY9=i5uXNT(c=y$FIBEkua6S}1Qga{PY zc_VSTHHp%4P1tYM-bJ@I#=h@$&|r;Chxm3iY5E^b$=6h311{2zn-<)^8i(~!bl;P797*_Tp)q5 z;(C$x%WQIu9PUA^r~umAsLW%VXq)26f5W4odEQl&|*?_{`z9Lz@^ z^4l@&lyYvw};pY{}?Q{Kae$Y z0=`JzD%@cNN>rGi7!l28feN*#QbDSvNgfJSrmo3?pOOGX_+OFd1oGf*KK5|_U4{Qn zHFS9>$YxUbR!g`jugq~(Y_%ZV*cH`)&ky;Q`bOpPNSZDooZot^6RaP`2!{7Vr7(e&zW#;zjXHp8=ogYjbO#p6Zh)j81O=QiQbt`7XSEqF*cFR4**E5$l1)$#-CAbJ_GT}B4V&QCt zi}}(QG-ueM8=m*HI<}PHOL0<$q}SvcQlk?+_O3At)Y*RDIt+CFgD5&nH8AyC98HHK z8p_G5ceX>U6?EDxTh-q_cWyKJr?$B~ERV;ym$r8|AArru=wi&E++1^NCE%Yxr@vdl z7Vt8@NI-r)tF>n#s%nLiLM|;hre}pf0;9#v674tH)H*rbBUn)Zv^P+zSA9%aHS7pI3NB|=IZ^;V+dGIzKdN_YCLkt)}Sq;<<#C5a% zBmrdGcZ5a+$}yKrQxU4fd;Ym%}(>bHty;>0qGQX7ltN0j?>P?*i}_! z97*4HugYps0Md`oCh6wvn6emN8VRqSGPDa{<3T^%*eLcBTPh*09nfh)_w=U`3XutO zpO_`z-4EN1i1?e4$=49By%;18f(N-gcRby6V}bNCKl@x60{P^F%~v@foW07Y6iSK; zK5Y21Bh0G_jnyBof)0<~yW=8OZ(us1K0B?mvD@w_KA*U}DFFRGDZxcZQwjHK*_c9W z&wUDf0d5`C!MtoPD8tugJ>lcmkRrajXjwLNvG7psGXPNd)`2~>ciUid| z@cl8i!rulVNK~@ET^j}R=Cp;K2_J$*o5rd&LX-_bGP^wYC0r$ z=bwbjWve~R07@pf7oq%w@Q_+%9ae&iM*a^kkaLP}(62yr5~2nPIlo!wKbw04s$OzT zW8O25W(sNPDxDKsvvl$LAl1pic($fT(y{T6#c3EB*!c_G$gF5JhnF@8N3?rU4z#0} zC&wDCPcmIb%}c{9muqiHmwbhegjo4!ZVBjikKe231*ZGKE^U2Cha$?ZzG%QG<9NmxG}Mn-D*o0Dz%w04JdIj^M?Ozn<#A@8K?R+ zh^sqeUj?at&7j7_AhWrlK@u|GM!8zmr%)r%(NCM{TmwBV}3alW(KXKPpAxbB$X*O1ClM*&=&uwM*Pv^=o9ld4V&hW_dR zV9&npCylRl$P+X{4YB%l$h|+MOa?2<+1e>mYWeRx!CHDqMoV@09C-lr4HLs*-0)>wsU9o>y` zqvwco%b(~Ob4=%ngkfMIVL|;d+KsrUp>c`RMx#4_(m~RH3S(|jNX^w($KrcPP;Fy5 zuVT=_Lsm*o%E@<~eTS1zESmL-FsDBf`{x_P@l9t2k9jkcSAuh#kO36ZeC>Kojkma-oeA2L0hQCU|0HwnZ>R(uuonco1Fe~rLzD=IBY@sv=KAv03Fcb) zhy1NqeaG~+LO>I_3(jd06rtIf`(t?5;mj(2&0z7;Pv!guVtL98ecEN68Z)EJ`u3Kx z7)C(zR>y8kzK5PP6<66%tJc7@xCsurVW@hG0}%rlTzs9;V4eKFz2y@F*SW0@+#?>; z*n-v&95yovDPO#tpf`&c#pkE1&{N@pr0f`G;a1%uQv~@BSVY8^c-ONjW0+-2E^ zS^H)Wyn^8VR?yS^>$%))l5hFvlUh@AQLc`kiK<6Qg(*>yAs&?;H4&mk`}`D-NROMF z3qOY!HKRvyH<>0>^XJ>fpjz!(kG@(1B{ zb*D-x1VP^12sLlF=BWikrK32Ry-4!CXX~0^ogv)|Tv05N+aDzoGi^FG*0@bf z43wGs4`Fii6AT3kJrs?piFCq(oF}P-kLcnclDSHC%7b1mccw1B^gge7MHv8EB&2s_QwZv)8Sj zbtuEAst|#k!EbH*kpxQ7N!6E2e&7}(tqzIYJ*`0dmfKE)K|U(cJL2*8d=YN#K-U8s z!}va+R!vKl*=!)n*#*Y?;EX3AY9CBiCDAoV=A!o79U7Ob2nxoy>n(p4XN~Jn{M3t& zpxyNF;g5#7VeHnJ;2$gYp4DRsis#jR=-rqu7=1<+-(0xh#z|uRZQ9SkNc2G*sk84m z3Y=y%0e2$Z55*Tn-jjxpkjB7y(G7GmGqqiXULe*_F5F(7IX;bc+M19FboM4j{-sA0 z<$iSn^~9yL)wevaT*mG2ILv90XnnlFsJe{-j(f)!qj*%YTGjaMyhRV)q(&R<=f|j2 z8ZGREGdGg=LLW9e#xW8U8g-c*vi7>6COlIF$rm>JO6|(OAzRJ_U2JmPkw6zm9B2KM zO}DHsWU7;bAzwB?I5Xh81*0o%@{A2I18lxy+?96ARQ+LRtW1${_G%s*uoqj3J67%IJ+^!LwptGNGCfMhvDjVZ zx<`qP>b{nV;;)!H=Z^JFI2SQbzspu(L|ZP`(@}^tMB?J-J*5nEDOwCt$*C9r;yOv{ z&pSaoV*nxn~#wb+V%i66?Xx5Li_VjCN#1AT6tMaErSxWU|drjGo=X z#t|Qt&6g@ZOn{DC6gRp^?s(}2>`lh`Sfw1@6Ic?Tg@#AZhU3l%JzuAYL}3&ALwBVg zuS4vr!zCps6WzSFM*?B$H!?=ICQIy9ob`2r=gIl+lQ&O5*!4;!S zOU)*ew^5kDX8(wu24bJ=gdp80uhf@#>$P@W28Jb|=gkj$+%JsAo(=lsEkH^DD4040A1d zUAfAe^G*o=NS9q1nu^ zV7Aqf&fMDQGR7taibgH-(`_u*bNgKdaMgf8= zkgEJ$D{jG8qRlB7IyIPwu_7DtX0Gb@&?m7!O(>v@cRG#WzSBR8&Ck7l`!&fxkX13r z4d;3y1Xrop{M<_|$luZnCHHB&r}P$B0u+B+?GHOTn$dNIK+SOu<<#&Ocn!G+lR=zM zndx3|aB@?q0zK#;suxh_ju@PCBlx6ehc99~e~WQlcr>r;*CQ>b&%hLGWRZp)(VFsw zh4co<4x<7+=R07_-c_bqW`bE619)(Q-%2YV@fs$aArKq#8U+@pnkodeQDlD670J(_wk zcgeMQ#$);{r)^t_y&EhkVhodVRzO(O#2k_g&y`!1N|I1Vx(1Agz zu`$>8qdX@m53b{*C#__xe-d!*J?KizW6XxaC zH(hVPxj?T|ZDA#zzZG{8^SInLNEj_qt;_75ax#cA=aS4tv9;V&ZCBfX;W+1eyUck_ z30fJyTL@OL*tfX#N1YA=fmuI03JZn%l`Ez||J;xvu2XDvuU4-%!nW7^?9c{2gdbtH4r%c(svgnuI$3)3m=d!kVXNsB{n;QCAYd!FeoY*#A z8I~THg79&a9po!T8^Sik2!+P>H^lBx-rL-BGI!nVRyhqbOzaAM_EBs` zTb8yx)SO*CLWZ(GcGNw}(O9`T#Z<5SoV)j8?2_4$4{9NE!7)pYBrrX9caH2anq9-I z8zx=;qh8oVpiGyg%k)2M2Ajh%Sxv+wdsj@U?qZF?f*nlxje>-d~RR#7^-~8_~n>Jjh~qw^7|pYRVXq zn_JF?)RvI{+uZCee|M9kaHaaCGJxSW_e>GK6KJCcaHl>Jwl~0BAbF;pRI_v5_z3{> zT!G>+5*+XdiC06ed=}i+b}g5K;}^`2R`K#|oSD;CJBXFqiJ&@qvabs=7|^~Z_#*%; zNqSwgZn@rY%pnpj$e{t@BjiIH6k_@;W9_UE4hD zu?gwcP_-MuA!iyB$>@&5&Rz|fy{v|L{_4+dEI4mGx^WoGzk(HobGm&7sBOTt%*|kp z=KFCu`frJ{FpzRMbt{UdIcWMA_~mW5rWRM8{mO%^%jmKL4ecs1!1%!-Ny+xU>cYgk zFEefyQi}OoXa)r#d#l8V;QAc%Dk&~b`PI-aEM`5UjPSS}Bg8rEPq&UM(?AG~=P$D` zyb+i7a@qb^d>wUppNX$b0 zQ3(C~A>E}*U8lv(4lHxdBqWm7NQ@R^(edwsT;R9Un7I#k>#!?vl4Kl&Msa{anGw>= z&j-9&Wxc+(x*0SAEbf}ZtBg~-S2jV&FaYA}dzS z4v=@@`mh8hwJ{?ORP~cx@LVdF5i6E9N|{22CDgD5?UriQp6;gdE>fufqK$QKW{dBN zXgNKi5S70QR3DsaI}yFC5e9WB0s}vsFQlE+$^Ah8lrJKGJu!m(m6& ziKC58G$l#M#e`AGii>-3X!F1Ry3US}@ye}c!ud(dxh>H%wZ{Krr;X|WrT3pjRhnRM ze0LISJg3CQ-~bp<)w6vM2I<+Xh)e<rk5>SDec(Ap#iNG2#(<1L)OzEi+ir0JM!r8aMI!abkp-1{}aNBJDjX-NBk{* z{V-~-F0p1@q`w^P4=OFChuygSsbQy0wZdfaI9&>fBpuzmF;GlV$@!I)e656QOi-r|jyH!Mvp3AdHts zDWyrIuzqZpyYv2!h8eAWuC5RF*E8$Ui^)-3A6D!Crl~+{i%AjL7v*`{J3@96&OlBg zK+?5=VNqEv=rdFM(H0@KzW=~@Nxui5B-DfuvYzCvTnb>xo6314MqcwMgtcQx20FvW z-d*6p7u`CXd1YdRsJ84Ao6om~^$DP#8MP2xwQ=QGLB2^0cTPp{WZ2zq6%eetgljlwMeI3Yi=n{xSe1b=e*J}R1h;ktHb1uZaS1K?~)QA z-(KmXwXJVLf0*~RU*Wi=0I5#YD+VoE8c^C!U84oZaA^Rv<3Rs~&e!}u-uiH79hC?% zL72MSkniE5n=de(GSF8eTb$Iy=U3ZY31!)fT7Jw zcujx*XyLC^5tn9(wGF6O+R0Vz2mjGZ5xOzTUHyLMFXX`V6(d^C^vmFZNa_&= zX&z-?}sf{j2eAFXMPKl-9L}25^;YD$Zcuh z>yEXAd$STW7CEX&ONW1uXgux&)K>pOeR=n3!((-@)0AbspQB89tAIF~zor`sPr6F` zal>yc$_&!hoX&PTzgR-~&OJNe!fCidf6`s?6`%6bRR-h)YXk&|iI{{fK#wtm zS`7W<#*XPVc}h~XgZ}bL!8T(e-91ga_RM$&9}aaWdmZ0)A+TBHcI&Tz;^B_>?a{}h zTEDkn=Fh2ENoh*DjQbl|%epL6#2QUfOfxJ(bcOMoD=a*9=K8wy{Pb)6-m6>Ajp*zmm*CQ+z`9h1aG<3DtT}45gT(@ytR_& z3jE2A@~HYOF-KnQ1BxAvtY?4fg<3>Ft)HvqX^+OJ?OgxvG_fsl;EdoT?r+{5+C4*@Se@uMuW`! zKl^^ceMw}Qvb^bJDZK_r@A&7s7i)qH{rBu<3&w0HLmNnol&Ep;8fuCh?U(YzK>a=!`m#P}0sis6#B3|iiF zJe5Pq3Bthfi0Y5%DX=THgjsVga4Hs1(k{PRU3UmZ+%JdXF(ctk@CSqrUE7+c^t1xK zxNZY~kH_?c(v&(4x_pa~Mfc6qu8nqhMl4c| z)pJDWRyB-i3YS|vk?m*gWNK0jMX7jC90r0td#bFdI(|BZbep`)1~u`Hi_s?|iCk~r zJpPI?)YT$%S~8+xiDy%tDI9bWCztmo>0Ja%RO`JI8XO4Mp z@*Je}0{g17t(QiO=Mcv9xH*Dmb-f`;FfUC2SyLayw}=S1kdvVbkebkxluWD%?Ag@Z-1hpa0(pk(a zG)Q+Zp1Q5FT+Uh1iw2}1gu>>H4_nuhh9;e|_YsdZ`$evVV4KaFw`v=^!S12C1(~fQ zIW<8aPqMHsMD>RSmD|6*PM z5vAN(Jn^1eb0a5n4wvgEqN17C>9z3W;Oh2wVwe890LA@j&wXfOSX_c*mu@eNr{42K@tmpN`vk$Plu`P|okB=^j5#Di!h-R_K zwSDqy*3HWB{AaB7a7hfV6@s~)b|M%i{<7OitX4WbqM1JbV!S>mxE(=zUejatBfk2d zphSG;3Wez5x+Ha~S|#Xc6Z=5ip9f)K(adg&93X;tIc9L}eYKC*7E1<~qfCnjOwgd& zMdCLu!$YGavwJyJAy=eAdBx|Pr7qYhwpi|5`;7Ehp*gt(K=5D(-5vJ1$ChfBEmt+< zHC=(1!RcSK0xMDeddd+}jCeLP@53`3FV>KcVPUJIX@+aA#{FAma*F|N9yYu~j^zr6 z-lm3q|8_uD=m9Mq1Uvg=8>vq`QzI3eTT4F1^c996vSzK zfM`pF^?H9&0|9OP#Zz&RKWhZaqFhrF z;o8a6rqTe<9ag?%lhr08}BkHOaM#6l%MUU~1T zi$rO`t$=z8S-`N%ZlwgVy2~ZPW!F;dI-T9etogFkh2m}L`1?06UB6+YXw#~ii5{ih z@Pw^2I|@;3!*m5YO`Y}tq^KSQuF9+>aILC4J7F3DX(Xh<{achJLsM01FjK+s@7ms; z_=iysQN~#ZjhyTw0g6B4iQ9OrF+Zb7z?{mU*D8sJ=f^43zQbK?v96L;rh8P4@;v1Y z+-a)KOL+WLiW39uYF`%>9bDUtOsU*dpK3()aQseEUGGnmv8K86mMM--lt9Dm51A|T z9!oz_uQ?mBYQNr=KX#ILf4)avQLlJ@yTQlA#Z;Zu7BHQuQ1fHCxe1{dgK8uU5s znHsj@HF+oDXb#o*^B(AXSxp2$ixN&TQAibD@{F*mgq8r@8FO74EcA>|lAoCH+apDz z&x1%~@lna=C-|WgNsY|Svn;=`3f}Nw$5WFGSm;j_3b{_Jb4Ygq!TMq?%Qp%YRoX@I zq|A)k57K34D@5tCLCC(Cn2FEwI2(_7)50kW59>=iFN^N3T^1n-K10wh85IDau^Q^9 z8!mZ|Bc1jLcS257nWltk9LnB6&y}03S91_gaj?oRD`8*%?c8mO4Gz&Z#k#{g41sZ; zI3j(O>9RU|vr;%PZ_xrg_ZlUC7wkGQEPv6Zg05EZn-|N5s1uBGYOlz9zj6z2B^#X!g2`R&{P4hwsH=tJK4C^q9l@(QmECSDjwkIx z-8}Y_{;9>ys_+L!KEp*x&8wp^*Lq?~djxI3h@IYhSk(s} zCuPRlk^q|AOy?=V&`@N!=w@1ls9anwq{~1_A6mw{uO2`09h7EU$D993(kY)BN9yf- zB1^qB<1&cVH`pD7%7pN>`F)DzE+7~5Hb(y~OqZ|U;q-{m&}?E4o(ZGzVeqLSW8xYt zhOo6VrS<5TuLn=!UC-#*$asc*phYuR7QG#IWj=Gm9gDZWeS56t*8IX``mxG6>{3nx zF+e$&*BVH9K6k0K1M_m5Qu%W`wq=~J2hCgden3qVFHmbKvT{b)342IHj6jsPURz#jb*94STR3wA&2_qGC($7fIg!f@}_tBD*maWzAuPk!Pb z{S#q%ZNw32!5t|FUE~PXAFCu6rHF0HUBREqu=R`_4)a=iixggF`m_Ki6Q88~&3Em_ zpxKjueS}Su@AC7vdsc?z$%ijyCL&DBJg2$3CU|gSIS#SWj}duQ=dBQ!B3_8~>Q7|u zvU?eAMSuBk0=sYuCT3VX9Jj*iH|kLg=*_QH9F~48tH+-s?Yj#S2<;#&ofK0ca0!>4 z_CodIsiBQjg(s7>{sEmZy0faT)2}hL;s`z@YIfYj3wD5g+3icjs9~G2NP;%zi@f4* zQ!aG!yQHTSO;}17I{cz8mdr(K($@s5xO5!{ft*>XOqd$}SclfCoVQ!ouy)Gfg+Qq6 z&F*h^?C_duB(4i4wDd9Tic`h?j>0609^~EgKuH=sE-qCd5PVNFfN(5VnmmW{uViyT zj@uk38H1pK+D!9>G1D2O2?Jhc|7lGRXrhD(cUwGgYAdsc41HaJ{<5cW4ZM13rImL*qf2TlbPWh+fb8wz9Lp9 z;>K+DjvFrbVCVis)s6MF(d0{wW8|fh8ho%~zMwsr;$r?vaTnUnKArl{enQ)*P#21q z;?t0dI$;3cVLcf$TIs-b9~$AMfhh=fM?5WJCo5uP#G^9PlbaP>9!LoF~KyXy;!{qLk4Yc{7!q7mn-`UH|5y7+g1oGU;7k;5)|j_Y(w0bLjHZ?#7O-B zp2pp87ymNEG)n)d&+MBO5rg|qr^wau_Pj-%RI;^7af)ejp1fZ=oVAhC80-5B_bfm@ z@~3A!J=jOy_!8c-3QC??4WOu`q)R_>o!OHs_GMn}5MlhzHIDDj-qF-I8>*WAdB~CC|GhUS(e(}rCP2_U=B4i9-)JCce`uE*QydPA72ILy5gk-xn{#&!q+egj z@bbT*e|m=Zr|gZWlcg&JDB-!)SS+7AF|ijf@oKU&I;0X!deSg({Q%I){|Uo{i3ua^ zh{?*l;Nd-RT(iTRCsiBaU0jk&mlKWXGWjx15t_i07B6RjJ9*p~=OfiBJWP9yW)Q`%e+Fy$gXsJA zssaSuyvCTvEK`>_M0u2Nl%`p8(IeF=yUOr=__s4vR?Mnt^D6aSZv|ZBE|963w+`yp z4grZqp5*wq9AgeyP&~h+e@@~|h+#4Qfpr7KTcN^5*n0?UbJNY0)=X!ly}dfNb1W+> z;M7CtEB;%lpQr;dQGO3+(_$)cZd<8z{PvjuctW-!*xgoDFLqWm4QyX*AdzV1apT;L zkE<>2CmSwT#|_n3K+9$p_2Y-YMj~5a@|E0(ivd~V6dr^4Mi@8 z5F{imrv7_EOA^xnbHm;pcS>g}`x`m(X64UZ(57|G%;-89{U)S{L9X;xnn~xUPZmyb ztS&T<=Pi$ssZn7O&Y?4um8Go*LCau~;`OcG5qgFu!GEcW>D2&9-2h0I@7aYweQ&RB z11|e3yW;5FI9TGSAzk;d$R^9I>jxO~&Su8{dsPt;OO;a0Xic&*d9@sDgqfos!S5|U zzhHVNX%+}^i~^gO{ktM0B|veAQrI-eU#v9#<%-bxSr z1bY;3wsl%&l*ocYqFu;v8~ruLx$ByGhdpa0=mmYAx6bLAMUjm-cP-f%1$GR(kma`wV3zuVyMFshmBeaDmxCR9mwB?>b;y001zbam5aXJ^iBp1Z#+yseRAhQ~ix?-Yu< zkPsYelXod{K8Hd*BY?ne;3t&PEW|ezH7{P}6F^riyxZf81_Wg53P%Z-L`zx^!$ql4 zf^OYWn^?W*GWpZ?L4Ulcm{HCCVfvlg9H7W!5N$1Q0|L$wHnu{E0`NJQ zC~C~tuoQ30gg5Jp91kHK|L7mCpXPRK@q%$y#GIYbh>Hpa9>ssV7|~$%k4XK<*NI^6 zCMadvOW$r_hU*Ih1HAl3m=Xm*9Vv3sZBU+Wg{q-XBapE?E|1Rs8;i;ov#%0G1*v=T zw2$hluc!aLXQAaQ#@E$GzpZSfvON6@EJKNG+yzF1kQN+?@Me204gP(wbaf8sDZT7m zO!_TMu{)23Zb85E*sX(?{lVNi*;y7uNIYlPZVcvc-r8JjwU-Ff+qwAbqJ-4UL8~((=_oaRCQk=)kd}dWc2xI=`cuh$^;s)6I7O(>%6I z5;#0>Mer{vJ%@Fa&hT*=MPn`$NmbhBnNf!u4~PDdk;W7}N(Xu(sYar0O!wD+pi&e_ zTtQndfaDb;ZsY=0)w$r|Pyv{{3~+xjN|ITRQc&js3D3&RNH~tNK%ZO~B}QK>&%8r| z6`#?92TvvY0drE^%ZN z_pStZ5Y#P9yNWyenXFPfF^e!7<0mcD zud}{DtEx3|`ppJX_}2J;paUArrKH=7{O$aEsWq_sldR(BlbHkaOg&KEimxp) z@(77y%ayc5sOeRA4WtOq1};xnT?stk#Vp`XkuTDWujYymAb8TqRF%OEX}an7D99Ic z$_QUxQUbM7d5n0e%Td@kZwAb%SOfcZoM$Nd&cWZ}km*+SpF6amWh0OL&7Bp{dGdlS zIPneOp(k(DQsgG-A-U6T6z0BhaKq9mJqJX3qm0L7Mtg;?2<6#JDvd*Pt7v=N?>1W9 zx2Yx=e^b}hm2aHNb?r9^*t_1*AldHW-@R>Gz?r1(3O^gi${Y)xK;GZL9u!{BF6(pH zhFfHP(|lKFcHB$LJ29RzzAVKwmXOcBa?K%S`N6>0__ccs)EHGeq6~Q#_+?9I8JF+P zPJ6^d9+v|NI8lfOL_;FSP93ci20B6BtXDxilaXCvw8i%Qjvo?~5d(`qb4>}vLrFHa zH`AbcniMKQMvQna)=$@4Ywc}un;A>KFRW^F)M~P4LRpef1r&@^CH}jdxDr_QKs;y}r z=&9^@>@7ObP#fSr_A}(VsB^KDE@Bz&FccTRa78_8<1j|4XlR{QpLr*`N@ifWYjAK?Q?hi zyfU%R?K*8iS{99E2WJY<`~!tXwCZ^hqnFBp zYNac@oMa3M4Zv+JXn4qdA<{}AeHAEM14#eJarm}pMcmOOa9TE`W=?2TnJpfA5i67P zD(+VTO!Hl5WJ(exZ*J5s-%b!XTciJ_j(M`yMKx2|7 zVn)}K7Nga|7?@j2oa2a~<@7LtRg`(X5D~M#{MLMK9$OAK2sdHWjor2FQ4BlnBQ({L z8tlkoA>due;&NeHDYxpq!Oi+V|6D=9gSnNw5?@7D)CmOph#g8EQ_F?z1X2mA4oHTw zx)7-2`#Z-+O))Psy1ZTXU%GQG)J1#zKGn&s%=J1Jgn@7%msfdkx9zRxRk!kPb5HrU z9QWwJ78YW_#&V+$c5(XNDDe6-*{0nmVXV6z))BJ6s}2&U{xFvy?`0pY#loEp(!H$j zOOR>kE(nzhGVqzCd3~@RVZ03GwrT|w>QJl`gu@2kwIysJIss_2CPGdMs;t&*beZ~f?QNy#VI4h?xHu^;TgU7oD`Qx+YRNu?1 zsoekx{u}h3O^&1XT5GKC?!pC%$P+aJ#R}qOGw+0n-4ZU{%nXgpS=R zdVAEQg1k8&lDH;Q>)f#OwYy#K*id~MHkmUWsYE^LCXUzpf1rU5AglWSq;0|QBTAX8 z-R63S)YNL=2%HX~^{MlvBxmLpB7wBCHly?8oU4UM=+Q{y)l74Scceo*QxUTpd~Q5- z%N|9zy?zB$a&LU3b)9@@VEqVr^cyU_b%5KM+Aos*Kl9HpcRO9>LI#blBk;MLRj4#3 zA;t<@x>;KEF`k=yPn({lz1BX;9a(O1A#J=LCbZC2PRcZ~2R0V4vgrqYeo@N2(#*py zC(rUwvdksM*u__ws%_XgPzw`4N`F+aVGXgjjRc3apG>U%0;t<^KJY#8>r5{2d zKSkL8Wz8ZxyZ}tun&~CH<`AaxS>=PU)Y&r5xGB@o&jNFtC7_Z*DEKFOWlkF{wXuOK ze*kl?MV?@+#7UaET*Ju4K{=$(vSEy@ZE9xmz6+G z#{VEY>*c0QX;s&Xnvd)aG;t(Dv$~WW#otbQpQ7YBHQU&oiCjwtiCY8hDVt5PK(5nD zVjkGm-9>Zj^NE*Y>so73E)kVO4$9nbRc+?a(yU-q{-fUjSdH zK}1_7E8gO*}BHJ@id3la%CSIY6AaKzN-UL=pXh)q2pv9{10~VEB$X zs|}fLfjYc~=%S!5h-0nrm7c&KJyQ)iFyNs%L{b+1Uz5cOcowk`CTUhY3fbj>tD}co zfs*n;OzLPf!fMbQ(^azp8c$ARkrVGHKOuG4c6!#%_vI140H7rGiY^5ZIPOB8MwVr@ z7V>sj#=Rmn5zp@U&00lCXV7=|JHwj*Xn^sRfCcOXaWm>7ff@;R0S7gA zA(PN7T4M>yHv)%^YOQOafdQD2WHJE6lhR>m!lpuU<7xuyIT_=(qxui#FUPg!9wjk2 z8Eo`WepsB1D`IVT`=jC1V#Il08+UNnHkxM{>is`7ncV){Ty z+J7$Z%~;@{GQr@3D;)tl;30704A=|kAY8}z97aM{KTe(uZ2*y|?O)B;D{Q8tZJn}F z6zIg?pHr4&RrI)oRL^FGHM&}3#F_bNJ`Ny-rhx3q9 zNDf>C8`jpQI4T&ZM$RZQie%XHl@O5868*G69<+BDc*hNBsa!l<0Dt&!mDUl&NeR%7 zU`FLIwuRFD`1oBI*XI7&nH82t(D10lu|{KZI{VybRKQzxcOOG91@UMWF#*+X8FmI_ z7uhRSx0V<{HLFag&-zTM(En)y5xOh%kL)vEl{6T|B7VLCrA&Tjs*e*qVjS5dXnMI& zb@OPw;B&~KgOR`G=syEYf*LI0DN||~`1H9xVBV`iC;&<$GdzwWQiQXxnT>55Vm3`HWiI~k^W3{Ex}{ENWm&ZeHbVc zJGT*{=4!XfLYkdpppkg8h%)^~w{k+=kpl zXLd~5;{sMJB6(CX4bOS-cnvM84+B%#Z@9bTx~e~aV&b`4<*&4cJuy_AHZ}r=xgX8~ zP7%E-A)-!GR0TrNj9j@|RU(=hB~r&y5yvmr=ultLl{P9!kM%D z+Ky!$I<9ww!CX59z&&JpPgn{!Sn!fpK;z^jADDq$TM9!DJ)L}mvP9BUm{Qa#xfC4H z2Aiq)({chH9v}E^Iir~tc)s5Eu z$kad#;Hvn5HU9C@m++~os@6*BbTCQR3*d!S4wMo<3R2RyT4{Q6uUxQT$0wni^8S-l~CJ*^`g;Y zk6o(z$WSEv;dEiNc9EibQ<>5*RB0;l*6P-vq?|-`_gN&8fPMbO=&fOEhr&4hLS>By zWRkm$`P-HRYz*2Q*KIPgaqnC0Z_vowBo=nGA2C`m-L_H1$l3{%*$^_<^wN5|M`Qy4 z%qL+}$SAdx3&gQd-}XQ3{)*$h8Arvk-{7U&;Sfvy)zlO`0cV)^&vDn}y3in{t`!Lu zBdMmlfE=b_P%qELQpR%8ZhiX9PD|iMkX!!<46CLm1QKdb=~+(wRh_TUpo{T%T;;}` zuO}F-%W6^apPOHv@G8;qQzI`m&1T^;RGxd>D?VI+x&k@w)nrLfoeGQGJ39ceZes4dC!OGAHhsKqnH z;BbHQy~(OVH0$l$2VV&0&@N#5t6wv2_suMDl&ftnGJ1;S&A?+ZwXBO>Df7rfxKTSVg`qomf)T8oAj^A_Lyt%>CKe+K zJKw|{q@!Jx)$fK&9qU;^#QZJ>FBAQ$qe}R#g9JTWy;%~}=o}T9(2Z4)mJQ3^*?^0= zQ&12mq)}~^$Or*NqoG@co+R;+MR9i>bQOigIev@lU$%h!PR%?d@6q)stfVmrxE<=% zkE9>^I$)upp}Sbv`T?N`GjI!9a%je+7o4K#*|wm`{(a_#k+mQqUWNs7&uDJbY}OTa zp8D;f-iVVZJN4ZM+r}Kt^HQp3oIx`dO3#^>u{$R5h9*Pw3y<;P=?fsX)9{p$2yb;A z$E;~4*wF8Bkj^&`=}WXio)0rNLA;Dp+Zy z_=7f>fuZDJv>au>8?QkCw}VG3?E|KP8`z6@M6N!@=MODt6oC9McK?6KZXmV8y8CO^ z^V;KkT8`^w?s9X;17q1qeLYZ!htUksB=Pei(jS?B0wN%3hpk;N%aKpuFJF9(lMrbv z_Q2V^zyR!?Pg!UbDJjUEVMbAyF=wpb*Q1z5fVH*|I2)&SD3?V>2&C}A0g;BT2mgr= z!x1}QY?(2ycgZYQ9erw>$fx8HABC9EZX&eUfWoQIQMzRRcD4eNlW6Oshkf5yuZ{o8 z?Rqn&y4REKI1YNmBh^@7m)FJN9~^(;h+WXte+-%u&r2_5pozpu!7WreToC z=%Q6e$gypah{>AWV2~)jl)^>2x|GTKxI6&?`jUkXza;LjC;=i`@u7<#)B5@}dlfz9 zm^pbii8NcGB3xn`((e}Vlh!Uhuf#qLrHlKEV`^{C;s)GU2|k)JwAd_$ju7T=Z{G{U z`aHP}WpQN`HTQCSOH4+GvyWpo73^g%uL;z02=_(_BVhfuK{rrtiJf9?dzn6DtMW{i zoR73JT^b9pkVA1`H2=|>#Qs=j(W?yzMXE<*WBi~o!j(QK?|mMvU%7ks zL376`5dCGpOBCw*KK!pvn2xI8@{Z-vSRckwX~Q^KO-43NahhfBc(At07nN`|`_GX4 zw9`a+&(bKc2nVE+dEpm(I3i8dTM9;fiD>?Klwq@8B%|kJJolA|oI40m@U_}yAWSdN zQ;R*CMH)HNZd{K!7<)!W@5>^|!)@jL-Ts!2Bb|ALUnjBK}0YC~R#Lvnm zk$F!Z?%*Yj5unNkO%D&8HjNiAj661L{M1%3rUnW#MutGpj-xn1X`?n}gj5*|Du8es z(W*CVip0}6YPa8FWq7I!{eLb0MIKwfTyapz(b5pR#*3si;wV0-cnudMfD^RgGImy? zem2?AP?Q-c^35pdc-nfp;Cm``Y0=k$BN&LmYb_>4J<+MZRpS@^^#MT2+_nulyb`IH z&Za3{@GifH$Y=TT*^qiL_;s!?rv?ZW>W9&?`J*i0IFZ0(K9$SXW{4W?gfM=Y1T6&Lfnmi&yrfCeO*EU`1FI%B{(jrsIfaVWe;>}_#87};DN~J9BU%X$JYBq6arCsXYlaf-f)#`}`NU|1W|o4gl&Im>tj(N5RnGtZA#JiR0GOtNWv< zi*9rpBenhW0j{n$ygFP~DpnM({4%Dg5r~67lvfGj+(D2%%$`=WA}0ol1+Bq$56l0j z&8I%4LY6G!jZW4?iI@gRTw9>YXBMx%J#=YuFkZjGijBZ2p8V^kx;I9vWf~|$B%yJ& zYOkCRUPJ6ExuPRA2n_PkAYrN_2j@$Ux-7k=M!^xw%*3a|UQME*d(udauGbf8Yw(h{ z4p!C!f^Se*;KMgz72D>zR(#i}F)*ip@_HMKRjJO{Fg8eSsqmY+FVW)k^LHhNa9yd3 zH=VM)k@gvJ-x1oY9}#np5R`xv>@TReYeJwmQjWWf4`igsN3XFNy#)J?wCu^dPj+v= zl#Gh@&Y0v4=$Xj}BLA*i?BE;pL8#3@cGITYzsJl=u%AV3Xc-y38PMVE5rG5`Azv=D zYZiP}>A=I>TsON4#WfvED&ErfkYq8ejoNZHWI$W31M;$04A)I32ytZ&qrYINnUi#f z2uNH|DCj$Vkzi=wwc=!22DIr%_yT}|Ix?lszh!Qo>41Xk2~aEGQ$|J%yA?g;I0Si? zi4B`!;vK@PlHS)aGIs7fuBCwur7I^Zlgn=pQpNyWgs-)PYQG(NE`CkE-F=jYjs$R9 z%HqjLY917M6dCjn7TzQ;D_E;u-B8LEVI52pg@gMZ!f(M{k$C>G?PdWItthdX@wzt3 zcdpJu!HB^HQv=2CkcQwK$7r>{5-FXJiS|S!3T0pWD(zLO?40gZd(exs%bECT{eskPd5 zB;XtD^tzpJG2XYt0x7H4iIbSuYW6F6SQ_HAxl-1L@1#an9^jgIGlAC~$IRY9oD?xt zc4CxnmOPn6(QG@NkX4*M3!#rnM|9(`I-~tz7xkPl<|`8$)QgXPn7a5@GwaTk9Dw|<1?zYsA?pPY$AdUYjx&Mo5g?}r#{6Hq+ zF4hUKj+*7@gG0b&lI<>|&R4bQ9RGeQ_VtE&I&;G4O#uSC2m0FJ>2JdJLTmnzjS?{) z$OMJ}WM#fDf}ojD$YJNs75uVU4enH`i*WFeArbxrN~k9Wca>7L8vn)oGfVw!43KQk zT?2N5Pz=j?yqt0p^*|aP$jebdmvKM``^T*fuBra~wcaK}`ul#SXn^%@@WGThODQ`U z6#D{BwJ#RCxsV9`K(FzZxrS)#X#&nipv@#Q*f@=p#iDl=xd^2QZhYE9{;Fz!{6ue! z!d_BLbTUicG1atK7O}pQ6nXqx>uAUu_)m<#g!1lJ>=4NjpHjFy&= zDFovjsU?<_hOl6{o;4{}J(-q!-|Rm#*zRu2#WaA0CxeAsAetCFyueH zWT#mSmo>hFf=?!62vqB{zV9J)E-M9v2m0|`w3fvg8%~Cl5XU_zp7xf0E~SjlKEk1# zd5Vh38P|kwIAsZ3E}OUhislPTo~A7*>#j_XP*C7Y8|w1+=6>}SU}WL1*$Or->@4sX zQ4@|G(Eo|OcWf3$i?;N(ZQHhO+j_Tc+qV5~+qP}nwr%g6RHZAo)3@^_)tyf2{D<|- zF~^!ZDMyAaQwa(dHO^h>>son@nswBGhSJg1(Jqz`LunCC7zZEr0IFXMc~vOUn~mF+ zVPk>Zlrq0Cl$u2)o+bu^!^QV5sR+`nwet{iA(%z8fDxd6#jxEov%p@ev^h@$qE%%! zb=q}8g)X)Mi0?ArBdWuAUeI71k?8Iem>}hgwl zzjT5q?M4PUB*BnW3d`?s8@ZQ>d|A@C9U^tCWd#IbFG46kP8R z9hTUMo|lme$<$eggRxUo6wjwoYnH?S20^W&TY;7=@|i(?dlh^cj?OZEgA-7(fcQqm zG$ilZ@g*#$G3ZC-uZ&&bFiG&T2$w2BQ567A zHEiy5Sqgsyd;aWY91lxrvIolO4&=n<^_+o9nw0)8KVw*aZYEa-Mt*EzSs-hTAcZ5{ z3yN^F6%M8M>{p55EV+c}PEr_h%8eFMz0K#H*a>cze5bEqaq)jrjd=L| zaKJDs^7wr2%fkB)4>yH}LEm)te@_`=RU!`g%wSgXZUfhR5Wwk$*#~TuPFX#$8t9yp zisG8?zs1HN5y>7+5zvaY=N2gI$c_ugmy12=)G{efGQjBM%j{hdXXQL6SIBPWbVtkg zN2fui57hfS*z2HeV`i;t9{fb}gRPXkF`$b`&m0*hto7R4ttspe9YCW%7my4`va6<} za=NM<(rE`RnQk{IYilbk;{pUghNfv-D`Vjxz!&beksWh`Iv?_f5_fSo+bVq<*h2%a z*0yZ_;A|^OPSyAjIgX!tRQ&x@@X?H4zp)_GFzdDy%vG*xyH35#`C0e3NLY?pm7z(T zTjd!vF3PBMu)dQ7_w+hcxqz{@Q4|OPMG8!vm%T9LfXzB{CgMfYV)ViDOp@>AdQ2lu z7;%)V0PM>0o&SE}Wy%q*BaD_zEo}Re6_)y{B;>CHX+-hK%V*$a)m%Z7fDB1L_4)#Y z%Au5&%uMPkF(Cb@a$zZXIEj+r@mV9)qY%i{(s~u%>$9~RNr%rO_>Py=^{iLcW|?2! zks3zm8l$zUsRFLY->^ATWP4T+ih~&Ig)%@W;B<2iEiRo9Kd0FZ-?x({r|L1cg;vc0Hp zF?J5Z>b$KS@TXK&mUsT2h?m8nElFz=ayU?T`sN3s8$tFlX2C`ad}k*~M6*aubW&B# z5Lyo~iA0HAC-Kjyb=s0}IGUNe*$sg2Z80{?^hf)|RQx>Vj`l0u{a}?iPbYP6f@N;t zbP=vN17~R7sNW*wKEoVO6?TN*MnHrb@oa0zT zbmQu#=0v;I7OW)FfUb;f#8AvE8VC&MxP-NKfBtM-#_}QOanHMgE6rsJ@1U5awG>6z zQGedLghN&TG8_iW9C*trij@j-5GM4H_cd1J>BI~s<|p02$oDAGeUA7idlXWTHAW%B z(GUr?X&Sn=m;BM3?2LpwINrH9*$M5FT4FWPnMCJ=mmL1GbwDDL9qR$0rOFH}Q8tjR zCJ(NrTG5F`6P!hX;qhlUxB<@d**~5`+Z)hp&paIOdFfqJZ}4OTVd2rP(WOr#cPFo8MA& z#Dv|a5o;1j@^QoE1Z${FrwaSry=XK6oiS#~6aKZ(mW zl2GBRP&o4lCtF(x{0B*FdZ{Zofft7+lknDGN&7>A-rwO_(0%SF|6Dw7JBPxBk^8vd zVc|%t?Rr6uWxj=QNwydgc&}1$@AgMg2_t1umuD0s&+?Zs_D(k+n_C3M2>;FU)~hu* z|Bl^jvLp|dSu#hdEuWiWx;9tr94U3m8%lw^YJ8k<(59V_T(|8CTQ$a;4hks>kU`~x zMa!zQ(5fLT5~a$9P){cye?l{wLNIdx9e1FB!L;wo=Kc=Y*Szp3Y~YU#KNkGl3>$H) zl!{RcF{IjjNp$2RG{y{9-4!oq*(UhsFhitMC&+|6sX5ghWDEjWha6xd1i+dSsay*D zmNg7f>HbUG@(sU0DkacytMKvlRy7~Z#oiR*jK)5qtJJ3SAF^*RgK{Pf?D6V(41@H6 zzJM@^cigBn;P?4OtSoVvzqL?w!_`V*V;tME5h9tZwTeRNVpQAtdgP@nUj_*9(epYA zOF`!N5d9Zrf{l=&!0&s?z3kO2l--0%HH`=(EZpD%g~xmbdP0Bo=5PiC=(iRvHZQ?v zU?VZ9E_$Rv+>$cQn6G*K6dQmo43L9tD}*Q||C&uYfiSoi>c0U~l7}WB`#&mh)ou2c+U?PCUQO8yoF z70GoIvMC#4@tf<(bMG#P`egWL4RuZYP))6IUUD%O-sJB_Qe`M9cOmfqDJml(Rb&he z`O~Ve_i@(LKWV%0>+Ya)&!VSZAIxuEI%<5%y-7U{6B-Zo_c>+imQAZ0tlQ%rpRt^z z7`~>!G(x#e(n!Z60>SQ$@Ax{}7f2Q5o=I53kav%+X(!I$*g;6t2jZIMV zkk`#llMmXo3Q-%jJ>YA`cr(GFC4thYys>CG^%q*TWhEk2xe#iZ1mw?XhUPY5j{BMO z>}F?d6C~`_HWZ@Xc3LYDs4Q|)(bUUS4X3FN$@!fvB6zg)^i3xWY|ZaQ}jC6e0;?>PH~+9#b&$Wu0r^6 zmNK1v5Vf$q?DM4~d>Hl?1^#-Ilu(UX0i~VAK4x6@pfOwFn?Dh6BH?^5s_eVS_v%me5YEou z{9-)Ajy76K+6q;vtttg73lpG*IrwM%>DF>J*@Ts?9jdrs!X7b?@m;AFgIEQaLR(ON zMnOgL*@kQ>M40~-`Up69DWbj_fKd1C5Ju|gP7G8^Hus|cwUn#DNWO`NLl0kXu;U_M zw>9pSC3{V?+8H`zlMUPjNpJ)1qachPv4`;q&Yq%@is9r4Wnrx0XpEirH^wbD{TMXXKXBs`4mWG~+s;)3ts-p4YW{^hsd;0px8$))Znj` zP|OZ1cQzPFnY>AEj&kI_ZM52?%Mo8E!HYExEeVu<`JH*wagfxu11k}w%9&8tI3Rys zBc6T`cQ~DNgn<5JD9HKl6+G0c@-%M3m$Nt({LU61bGN37WfL``+HO-)!aX#>lu*qF zuVl$NU{sEba`qaTk_WY*y1$IMKkI@$Y?=VrKmwI>uIRjLbB6mPY_%UpwpSHg9VQv- z8``_S$V7Ix>{U{EOMk~|htk8{DyRVQ_0X1q>`v3YQ%2s1g=6?HL9;J!w47Xm{&6&i z4esKDooy4OR@e$yiqpUyU>HJhP?h49m}IN?JZgPwE96z!qmrGuha!-K_#(gP8AWYc zlP+=rKBh&!<*Xhh;7AWTpbhLAcP|9+!{+53o&>1s(w0vQ2cuyf9-y4eQ&L7+AL z)@(F@CUTLzo#v6ieT&jCHcE}_+r38>6F{OnWG3+q)J<@D+CQqC^}J^#qjYC9U0lZzyU1f5+20Q5jiw9G0s;~70*k9@>sU*w1PoM z6^H>b%25eHW|<@9=)q@kjB79Nl`4%2I_y|Smo;Lhwf(VIJO6{A6!zXoPK$3f8)^TlCP^8P>MkhDO zb+*d11!4R2n1ULM#rV|MSEjE6&g7(^m%xtTGd69S1G9lc`?Ebl!6UeE{m55d%X1Or zTivQwhBujZ{!UdL4~!)qdjQ^7ON>d;`-_`_o*s2yI}1CU?X(A&Nlk)HnFiC19MZNN z(KSf85^ev7sh{?X%-O?10|81X9meRCotpSPu=j^1T`$tk@ApXwm-yI~b|3ysY}(QRmvOhdqARUsGN0hcg|$>! z=wTn;n#6rYp9&lXt2}tK8j6)Fav&!3z}FR4#L2iUCgumdps4q7!CjVwCkGT#pfyH5 zqtQSSwrMK5wwJ=;tlYH395~*YR}l4@jDQcsIqyu(Y!m)4$eLbzE(Smoxy0U1^H{*4 zb#WvcrS|px!J~#TAjusvoA?%M2-3w*{i7S?8arj`yzt%M=)5Y6g}9WL7iO=0F66|( z=YV$LQ?@Ny1G9cZ`_o-QAtSgj{fHOdi!+g=8{LZLdN#4~#{gI{-dcON{Xm z`}6C5UY<2yI}1CUt<-y%@eP6v*}9YUEYemSF?C3|B5hlCnpoSiqLbcXd3!i$AV7)5 zgJ_+S6BECC4gt`_s|7lRUEh~>Rtx2NPHsx!UnFYOS1E`FR#xgyzyLL!Wgaa{fcl-e zkFU(iOXe5_jENZJ_X(!5f_@V0`SgfPj$@%8r^i_N%OQ0I$ryS!MZ`~whNzj>C$oF^ zjwg(N!WLU`Kd5L|tg)!WJd15#dZHdx76bnRQ<+4M*t8n7=f&ME3N6hZ#s56Ng0<&Wzlb zWp{H2hCPpKavZZ=ge!`rh`=ZHf(I`Eib^=i^Ey1k7&(rBj0q1Wg~Y-#D2Bv84)?y@ zVWltJf%9cKh|G$4N!b5BNIqUTkn^iJ%NB zZ!DUQ{l&Iz83`yA&V;(g{<(91BJx`>E7AG}y#I@<*Wy}p%5gTOB2EFnwZ+HWsitDp zL=CUB+mIZ43yC)+RQJIvT6Fdwo+YE4xk9GoNy)41BV!T3I%i*olgEaWi&*4s{ao3$ z_*^G^Flb%t0;`MX=JahxW+A(tGjCl&lj~$0DDP(dbR@QF&~S^hwNl)W*B0dIAPmdnhZgOJh3(@iE9SRO+9x`+nS` zll7@jdHf}7{{$pEHUmIQ)oECwOdwlLo@`C^f@6z@Sc^QvqmM9f1DvPRs%}HuYtSpt z931aCnH^GZ@FXvQmb0ywbY5VuBVOe#M+2@u*0#;9Sxz3e)2NBklz=P##dPbaw(+^< zAQZ@oW4CxAUbMF0^qe)F`$lZ_FL6S=^@OwAta9iopD!?z2RPq&xA$=hTV8BMsYg`9 zHZByTEKGnJZWxfonai!FI(17MUs5%Ngk7fLtJjuG`Z4w}{Whfhih_#d+jE(gjIj7m z^ksPTmO?#K1R-vhMU2#y>lCDvVqp!xFGUyo5prjJ`|dHBWRC?tsTmFl)R56MWlpL- zUq+iyza{L0FS>xvyow$>KhZz*=&Etaw@0^C4XHd;-ewi38`Z2YF>a2!zK5}rV)*I) zlL)2PNJH%o@q~CZKjN$EVBm2fKyd~hfeXB|fp0=9z31JwP7&aPv9vKN4l0H?~W z-|EY!xF3aC*pDB@y@e&25fn7zmMujgB32=A=HX7Zwh;LDl9}|AR&atY4h_d)ExwX> z2ZDUQLvo;dJWfL5nA*-EaG~TrE_hftGU_{CkfWHd!CVt82L#?L6g;|pP*lQ+8Pug| zg~&4kWK4WAO~&RHfzcv1hHG+3%vk(G#2OQ06@9-|ubk#h9D z^~~973Es6;*~F+&Ppyww3doe0Guqus`gyW`-xJXScNRyVu?a{-GN;o7G*g^}B})1- zQ{%|hQqI~ntqU{EG1~d^``5&IIWOroGCKvm@Jhq*S&-Qy^Z<```e-}Yc}wI4cHZGt zUUAaoQnj$FZBB7^ydFi36DI^*@+hTSM74^@HvpkPmK?c9^K~b+0w!myYTh)at9%OQ z;;bc{US*X-mifMenBKzp#XG-@me}#8%Sqdz>a}#FAZ20v)o@3EEKHwm*8f_wvh^ZW zmW|nA7O;M5He>uVdB>n7DZiwkBKhh}wh=8X{tbNr9<>o)+Xz9Z^KlL%b@3tvDW#Zy z)%#t})n=&N!N8$QY&za`mTOXyWh^yd1WkprtmlXEGSGV-bNBt%Uk6@A*R8jZKWcc{ z=$QMR`;w+Ojv62HBE+>))~8Ts>u+w`VWMK#i9XX1<)=tJowhNAcocua^KyT{;l4oO z9CFNJ;Fl*|I}!qRyoY_{oklip0|TM$5qgJoqbb0WngK4 z!D1>bwad^_c(HOm)FTPVPvDeCAj}OxI~^%t5FG|`sb3urwT?WCtN8sqP8q+K{oBm5 zg<{2Am8h2Qf}HpeO%Nkg=h-t^W)T>j2cw*ue!ApQHK;BiV*$XbWFMOW05+6J`GOC+ z=*Ei0;S^i**MZAT9ao=mn);sB2_Q0+>oa?UT*)TbrS7@(Nwh3L?s-Pp-Rl$`a4%FEwg0|81b7sc?JotgSKVgP{VuW5o~=;v$mc%@W!#Q3@t z{#$}ZZHIzrLV3B~8Vpp!P5Hs50%+_@*y_=?-k&T>{}C1Q+!@6bQ8Y+`o#-i<^-(JH z$J{JOKV71ZKp6|Kj_|lm+2ns!<$t!S^ZYNdtSZb`Zlbb7&wioZ}PMI|2A{aTzIxpC>-=i>@_SD7=GX zm)BDyc|KoIC{qk;HBlcuo#aLn0p4d&S76240Pkb)szR_CF!cHHK)IbfmxQnvQK_zU zK!MbPv?D<>AO%yzzj9YYcV+@O;9-J$N4wH=qZ(klRmO{{PCBoE0Swr|4mTl#P#I2IgxPz+;J1W zG5%JuzopD?eQUlWom_C0-Se)TRRR|>I4L&QdeNih5=G7|tPC?O|H;SrB*Ae`I$+%V z!!aplzrm&_p=>^CD}Yf%IF~JWJKi9@UFF0Ob~`Im?*E4jMV5_YCl#JwgMH_DR%!j- zs~<;qHO99i5YlKknBG4>MlBF0dY7#D@v<~w*1A|&<{J_7u%F;mc?Mr~uq2fB_&CIp zF_z2d)iHt>e`@jIxJuQd1u5GqKdqh2f>R-%U%8)ctAa<@IanQ*Dd~^AU>L{r=o;goL>DwIgq?(n`!{DxhfBBhLNWKff) zHXOBqw({5-H)$jBzG2?ZkL?X5gMuI1c;4xBsd$X@Pur4#Cluc(Cy>B5;Qfj*j8{8% zDjt#)fUeou`STm_McyvvGr zd|OEo-22f3J@&K|2r?x@*%*rzpzxfwUaANw0!QGCGW2qM zsMLh)Zx$1ni-Q#KQ0I?rv^dRU=bG?wu(LW)v+&`CJyxGgBoRLXUkL5W&U}5zIad%= zBhI~NPeF|$w_FxFWtYi9ewzZKfjPRTrVT>HD^L}j0r?jbFh3gTx zKgb@gItySUiVh&q8B2XY67{aj3e~dqUy6SI&5V~F}U7By-n=Po|zNJ~ghwy%|h_7kg_;0k1>|v+sgAvIM^|`~Q zDw7c_6ZA!$q5Spl-b-T=oQE*y1WaM129!fbEMl~}!Z`*PT*>K#&aQ3j0n$UetNYmA zCE=&Za}5q$i5cg@n-_Vph8z82vf5Yqd-mc&9V`Z<+K4veAqxb!qf<{9&l=D*Emg^9 z1G3dr1DAJMP$6QGr1=)57X z5Z!ul*1ZJ=6%5lii?lq4f*pyKdOt!ZU$A(aAoDKY3y!W27grgRLJk{j`Xb6gT+es? zt2GW{tyA@rBs*-T`R+gA zQ_y>NMICei(^ckoJ1^@gQXe7GO9&aBu%q|gbwSs*vA66F3hH?!1VqYp0PENSR$$Ph zMD+zgX|@J1uUuU$<12Pv zJNWNl8Kb_Z%=|7$0k{A0j?t<_x^@S56%sb=YZS>P?4p7jv~=L8bv2Yn*0_o533v4h zc7E(`C}|Y@nZ|QYCyRw69e&!D4BepkMp*#_zW#5QOkliQ*^}^)qyY5HPtG65i4lk+ zPGyNN%mJ%c8+M3X>S=#dDNu+NoL@m2b;_j`ojFU52Mbj$t8cpL!_IAKN*>3JKc(+< zzLrFI-VM`^*IA2&aNKc@;WWnKB_rumO-e3WsSD&Sf{*+NrP$@+pL>RCfg(W1Rs9G2 zF9PevIkeJxN)VT4MRLyzC4g?lkpu#nz?(03E7d~ip{)FQzRY^wn*{p2G>>x4XOzU` zvFwDx<6V77!FBHhfazEfRcbm9(VUL)^40ydYXPoBlRw&2NIf%5fc}$=+gp;R)Q^1KENvkSG&=p@MhXG& zN01%qgrck5u6Oy2GPuzGaiO`^vmR~7a8i1Hd8lFOcP_>U3668(K9lAz&cDR`OU!>w zOmYAay~JOweek`My;y6Ki$TOf9C8ZKl(xqoAEh9~BrU*120w)?;m|zVX?-PZ=8#|^ z$5oHJmc-fBo9n(Z8TdaR@W~Q0jgQH%L30`0y+!Q_2wKb3ouf)Uj=<8S8~6HShu_}y zPx$Kww|6_feXiA=C>uTeFC&wfiRS3s}bR*9mj? zBSOIKpZu5@RpM{vTNhO#w(JWODP_#Of@_p?z_2xSqz5**af`7xjSBYe^!6|r6#U6L z3(kAf*?mp!DpoYTp!nJ;fdqaYAJ2V||#1bxVKh3J8(vl9G#X7^;GS{V7t@QqfRupB|!ymqdFLXavM0h@p5>8iH z3xzN|a8BV=CgBCcsN-~tj_QfCqzwa3{4u4N#ldg8dg{IcK}S`6hCHskDkeF!6Z-OC z7pHmh5Ay|p&iSEug6M#2&)19PeCdIVJ$Qc1+a4PP2E3Ja@(t$Xgrt$oxdIa0TuH&z zE(Czd7!g(KeEm0|@fsF5Ho)TEjIWDak#c;6%@5GPNMyzZsi3Yiz_fahX!Ky7YMv5>CyDy!`yxKLy)M zSymj0OS!&qPc`}y((YjKw7Th4dkzCW5Pg^V18OdZFQ!y14${=%o`Y>d7TUvq) zl2_8d=}pcxNLERYaWPwvTLlTXAg2K(Ve1amA0-V@JtS7~u_`!mq!>;TBjk)(IQKC7 z(Wr@u(YcW|xWmjZGcPem?NW5(o3|;P6Z&V`JWV#xzLm$V8Vyb?tPE2szm13ZB0;f< z+GNsthtW-Du!Sa1AuL97s7helDCygLH9W+~Oq$rQ&Bn-5ock~B^3Aa@8 z>+wCzdj^@9lAhBRv*+ipm5i7H-gqc~Mf)(DWALzdHkr!x6v{mVk>v&3e%M5U;f9ax1!j^o3A|;QU zm2ry}_Z_sL4)eqWHE1#Mp;5u!p4=QHfr39;XTW)HIJ>XPU&e@`=M`Q##go9#;p3VL zjCLlq8|;(hfu8ur=4v-65^>D9AnA_SbA4yZ9*|2tB0UTP1zW=9?4?>YQ(Dr6v0SA& zTV}g-uNL2Z(+(%^c+lip_(Jz)goowQDC2aJHI)g+0cYh;ViKM+iaty=ZL1wSOI|Z% z#T`+Ko$vp&uBGfL60}p*VJP4#s9};rJE1QPaJ8Q$eY02q=$su$AczUPbbCEp&K2*= z+JomtzwWYyW58Q!CtYJsNQ@uKo+%>1%@*Zd?mz&Tj1*9%%++~w-Ns&vq;+AfJ?^;y zqKDxx6=nQDOTxr_&l?0t=hJwXmBFU3^H|l4*N^wVD&`(^FwOKu(A!D23m`G-ah9H( zC9zPtr+yR#*=t@uJ0+zf=zyg%FqwGWbPQ`&CLUvue>&;zoRRE+W>Oc(&IVMC7QOq_ ztp;R=N48Q+hk69-D=0NRu_BwqaUbW_Zf^!Cq+z9>@hM^u%=4#LF5nleD!0|RbZLxp zd+H+m?UgLnsP=D5Sf@UY%RPGdzaWz@NDEe8#e)~4n2gwg;F2;P2`@__0=X6U_GdIZ zWJiTVYNpF~YFI3m(!@js0{;dEFn9+$%A5?6H^T3cEjDF9*3sADzB7P3S&4Tq>yBma zlaAC+Wku0#D8})hUZ8}dLO2VIp%dny9KtNdzy>A7q%ib-QXmX~ZC76-9FWyFH@eT{p!Q)n64yn=mP1Zf}CDAUI$3czydogy| zdKt1^EBax7MKd!&3UXXXLP5)VK)+NRd5Hk!7e)IA@n-Vk72Mr{i zwE?r$7Y=%DnyOM?pwcS{S)8%skGu@PH+OJ%Z4V3T2B!H($n^mm+W=N!(BnjoghP|e zxQI;2>B_820(c{12o>iNmsziA7Mh%n`Htp&cD5Y(qf}1zB;iwI?l_u1=N}Gxg3=4LDZEq>* z=l$3u3C?E9#bKR)JCqGPq4>l)f&_d3A6AWFygItk@Q@?}bj{8$UZzTsh-1zaNUzO+ z>or<*iJa>i>T2XE#0V~KAx*m$(~8cWWGBJJDA%-hJoVrgw>4zWk|tf#_q#nRB0L^P z8vQk1Nr7PHAu2= zYxt2SuFi|(R}w=2-Hjs&1TluUTI*Y_iPA+`1MqmC^La8440vso=u^lkiOFNp4Mill z{*;XC)eivEwj`?5fd(I@bH81dgdU`Y=MA?v5V!ThBz_Gb-|^!l8g0!WPdl;vw1$uxu>X;&rQ7FwsL#?grgI&WbFOs3Xn zRijeXQM(Z2*Vbxt8zi%@(ZpG@{f;&5DVM$l>yEh|QSI2mewHB`3Q8>}w7|Ol)VuNd zv(ugm8CaPYe1aI{pZ+FRPvIxc3pdo6)+kJJ3q9f3h5Emk)yaCYZb)HfFTd6C@lF%C z3nC^kQe(<7W9HGC191ZVOD^PWVmFV@b`XDKdK*W$eih*t>5KLET!^_*3SVRK@Q*!~ zgrSF7N_NaJ1r3dGQQD!o%as{1AYfsF1>He)1Q8z&d$neaz3>7r$!g8wteO!nWs3k> zjANhTuh1S>w$-m&fA087>S3zwoFy1 zFHz~{1uxFo^2b~U<6Akqd2~hwc7rkkB4zu7jcovHFz9lk#vq_cW?e+2Wp$-DBm%sV zF@#9-3CskVDO)ljtI+G_*Qtw!po*>K`HCC#GsJ(X2|N2`*>)jY}|0+_zUEmWO z8I~hG`k{v?30w5^ixe|oKbw@96V55L@F(@+*ra zfbPkW2!a^TTdVu6*+l8CtPOa2$oo2700z9VO7bb@n8@V5=!qf{)Ob$8^%@9(=};C~ z>`a3X*Lm2fNJbCV!t;jPC%QlSOi9)oxFAgI=d7WxbS8~YMFni?Dvx#9VC`t{vt;&G z6Wv%xB)z#{s{j(MK4bCTK{5@cOWIRTu!Yv?qkVKDf-YDb4U4+C-BYhtanvpb`Lng! z+5yQPVERvr>9l91?IqSnqW!{waA5f9S(&3B-C6=1G8N1GHKxL5qv_Hs0wPk2M7NA8 zOZeXhiH}_Y=u=YV$+W3cTW7a8`%R{G! zO*VN6_!c$ZyLqX)BbF9lz^ZjJbbU>~{kCiidF8{$Fa9gRioPGlPy5)J-ugxI z5sGlISnzc|Lgrao5cy>yYnaN|oC38xmD%{7B3VD0*i&A(APsxa zzr_4Y%zsM^OuFu8&3{e|<2j$6HS3<4AyM_j!hVhc1`0|wFRaMA(agKq<*VzS3K>|5 zCw#IP1dIHMYU8(Yu#8t|}=rYj_00;R8#ckSH?uabU zjq%~nQGahko;;;go&d!_MFGOmV=k;SqSdU2X@LVgH*{B-eGt=HbtCoEjM&}WZ--w* zH!arLynl+f>>wGjgufd(_ngtPJ>9@Yg?uF>TUR4=?SwfMA{I$jm<b0p_KTfYPI2H6K?hJjkiX-k~$^ zSc0svMGs#UhffzP8;t%%=3iv~6J#L4<*r>7NoO(vU1HuQ)5gkn?gtO}?qO7%x(JxW z;4hHF?Uz8?tDuDTn@ZgOyc#&n+K%^9i#i5Tuzq{R#ye@$-A5y<7x9bMlsaf%x;Kv{ zHeke~I?Ro~c*2A^G~X0Ne$T0*`!QOmf_v*goYY})X~+KXKP5y?-a#WewK~g|FJ=3( zWl7?t30>Uxkn1!k(2aD04!W?d<6VVyK%G9ajm-x@jt^w zN24HT9TrMw0hWOJnpVSJ%;1>WzzWto;1#ImDbFPj5Xl7jgS`+)2vWBL^RM^+*Zcp^ z@%~cpQSM^^Y9G}qOVlJ&$O}cUZ-oh1T|XVtK>>P9A66ecF2}P%zG$Vlc~OJsmq zwGC{Yi_j44CB&5MheA?ps4|#d+9b6Bo2%$;&>p@6{pdW>22aaC80? z>d|+MBR~UrfRg^Os)l1}s#>97nRx|aw+Wc*hkqC{Xhwfm^QPr2Mmu7#F3qW9>}lXS z_v=4{*U|kA>N&nL@ig{Obj|Vjal|HZ%(B*TG<`a%k%@x+r}l?MnKs1C$Y#R`EM+g7 z(-}aUQV-VTX@RxrrFAF0`$>dw%lOi&iG%U+WMKMbZii2XZi5YC&=2?1IaZbGCAhX4 zvE?XmAv`wBWBjVTm(FzH`&sWdU|Y9!x{4y3GMxBX+>zVWRna1UUIRG`U`@)V_>jSus^&Lbw=yK^XCw~Y?y#9^OP+|I2e(wJ33=dcJqy^ z(Ox4jTh2idz;}hGzi%Ke3F40u%I+ykY%0t?K1JE(Ix%}Br z^dklKh#}`;$rCy+m4Jm7xCHX-X%O+0jQG*_t)?AHo)Nj?4}_JCDspK9Sf$9nGiXpK zD*Ht>HRu>qEUkMGL_KJVmBqik-+%0?b2WOPvrktyb66MjG^w3RY~OtRq!Hm7yi)W> z8zBo95PhwgfG!J^ZN@klQSG`q<4<-A&1x}TW3JoIid&pn#8eOY~R?t?xS6HHlw1njrj#kd4jc3 zX4`K$zR*<=OF(Ihw=pat&fGKdCbI8NZ0NWDoFs(1cV>TDvHn)R$F?_%)3Jg`&DsR7-`9Hqp$a4@T6L zrc{~#)#LNayfj;(4?OjFemRYC{<{*nb)MOSueUHHT$OXI!FV-b{uHd23FF^!mb~c* z2P3L=OLxTCdbWN!!h7gt%SCCE4U3op1naHEcRTcWr=u^Hhcc4uZBam+zvJjdWjC2# z*XyJHyXU4}{b&V6E@cSut+*Atot>;{?yLrK3cw0{m?pHs<0oq9f|Amp%t5dm2KWL_ zw7|YRa(j_+cz?wgi~FOtn<;+BAtMY>3-bx`?BP|C3KzvIA*ubdpsb4J5=F(nePK_a zGOz{M7ZrVzEr9*VxPcJRCx%>rB~R?OQUn%K-JYWSK1g$)Z7_s2&*ERHto3wY2U{5c%*&swD2?{qbv8i?7}roqM*nmB*^6r%CNp zX8Z2rCzS}-_?4R|oVmpnJ{5{MO`gyr*477-WjF=<`dS9?0-^P=|`xTD)HQ$vwU8A1Fa_Q>_>s$fyL zppKjaunZq(0ImM;gBrQ4s5&vdAFPT4zK#m8fa+{^j`Ok%r)agrNM%iN3AH|+qR&RY@Q7>Y4P;{pW8Q5w7tY)gZhnvN#FR_qs9Ynh4oe zg1sTto`)OZOy8KCE~6dxmcxS7^|^UW1%lP##+xsBe$W*VOF$Wm*O3e&F5FY{hLW%L zOz78TzaMZH&t0~<0_PHfxMke2>-BZfk}y$yIeTCQKF(lTqtPcdaz#lkQszKd4SRfj zM_OVZZQGyn8h*UNv;Ey;oA)L^;NT$!sJq!ZdG)^?7W!w6OTj6#*QBh9r5X)|K0BpA zpfa?5I1p_!=SzUS%pgkt2A=2T@O)P-XF3oy|S@SbvV%Yv1wl zX+P8bKlvF zjnpy|7BLYB(nFi=yyy8s*FY=-Wh~vrG7mp<%gUL^d^oYD-&Os6!(G1g-WZ5jNDJgw zaU*UuGeOJ1MGfHWgB5r?L1>P{pV!D1CAChTfnYW0^9dMhig|YE{3vPr@`5i6^Gj(x zng4=AM(Cp+0v)jcl`DwtJ5Qs-|K+$ z9bu}L{W}0rOPX9^{#%>NKmFWziQezj_3`O6(jk2*YU@0`3txL~NVp>JScUOoz~U)H zKOHKd<1A&<4h}|C{rcAtXYCuWhOLyA^@z1HrMUI?((6g(1Q5sw{r--D+&w{cd zhHE$l`{tPgfy%%ZU{7?!O)d}iJ&h>-U(NdOY8Dgci0`LuDLN%65+}ri(*@6X6`pVc z7S1eWsn>9|A+KXrd7}gn;^a)tpBlI9Gua@k#+T9I72I$}T+9*EOLHt6t3rW?chiT^ zV&{3GbM+Gyze}QP_k{x_eBpQFQ`!Yjq`(|fhOSR#S0aG*I`JxTe${+syYq@|80lFI zt#$XaX1TZbVfVSlfDA5Z%bzC6$bKNO$aDdL01^ zG7i*jkAEINGygE;1==$b7|;6>@XF)GS^xU9Dn}&;M&JZ{a6aQ1ufP+I#lV>bFLocS z)Z?|wsjL?PLL8r})2wpOJdyP`uYVdHT*3`u#6}-7yEMVFHP7dHcsF_oD|MLXJ6AqZ z@joZHc3C(;!sq{Q?447WCR`Am-?nYrwrz77)3$Bfwyo)D+qP}nwlhB<7s*A|O0vHH zuveWr`>ERXS?`p3#s?*&fSj)DQ{I6DuwEruCdvCdTi)`xWE)C$5>0p6>HNFQ+k3y$ zT(kFqE$iRd3m6tg5lRJACwXvj^HjXQngiWOU%QtaZ6V3QR4i6Xy8kQH+=TkU5;m)&I;)w`A9BP5HVKQ z#c|51^G4VjM<=hDpT71|DExGqg+ohl!Ab`kB5i^rnT@725<|L&x#&j|!)iDUG5(!k zf`ZF7X*L=4jwRyIsI6~n?=}f}@uif#a{Jdv%X-*In z9sQ61mq6pgSLg3`UqxQI42`BoN8p4}$)r(2kyM+tygH#|&1;(g0zH#X!@;mwmcax8JIMfy74mXCEyv_Bo5KxqW2oUn9 zSKU2*oxK0#^}jAJbg;Gm(cX*7lzX3MD$%=bybi2MdeZU8~UYrsCGGZjyc)_TYf7CFX!r1n+F|E zSuc=z4+7ZeVG{ZZ!NFST;MzsyUI6Wl8PUshsiZ+m6pz^^gt|om1dp&PS8-@x*X*Q~ zdLo)6%EQb}Ahb_FkUO<=*bojEyO)4GTsf^Yax0Mq2)dTcS{@X^+*={y+7`t9+6cwo zk#Q`Hi$o&KQ({k#!HWBAv zxb#hW*u#%=a)$97DDd@-5t(szrZy(&e)OwHMu_DIKtzqkE`8l6pDUfFQ9TFLv*XDB zokynAJ?#8yFOU;|#F6e<(m|FO1!!@E?U-y&>pl;IBv$(7JX@k^V*PzLk`VSwSJ{Sy z!CmK1NHtPi$ux2NYqmpD0J4vWf2Q9e`Q`63w0YCiGl*nmRv~Ywk zZ`$>xNMv(0oJ4-X!m&1SbRdMXOH8qWi=mR$kaUCNearAw&Dh$_cg+2BCL>cOx=s9y zqrq!%TXg-YrmH1hE>Rbi>(#MCoPSugu(wyv9sIdXSI&eHe_f=TNrTQ1#;?4X;KpFN z;VyVxDLfs*mM4TmczL1HWqpySg@MUT6dN{9`g>A2;!c+NTUSCu2DHcNdDV-}6UuyW zM*XQaX@2l%Y46Whm|>!A0_Oyy`hGwkZ4?BPTr0+zuk;p#oWhkZ%IpvS-6m`-#yaOL1EKZf@#?^f!Ax+TxxGQeFrSv`l3(Lxtp#Uc zgF-o+P<*vEx3;|AGqtF8R zs&a+%Ez>;o+7YZS*|D!zU}bARXG^M^)2lVgBS^W`q$%NCUnS7Jc?gxKdDR*TBVq-x z+TgC>bJ*Z(?(r^1>@gDu1PN@qQzEOoTd}usXB}fW!^36exQ#?8mJryTDhm-(!KAQk zuHSMKa7L`Zg>gGMLP_Mqh|bX9(pgo=3fpR)(^bn_?M#ZK_ULf-wJxKdtRM|2|J{ee zXCkA>OQ;9&T<92$#u-r~4rA_HxSzm_lvJu5q9FbCGqal1SV>=?JmpMSM!H(1Jt&)D z^IJ^WI!H!fhnUB#L`Am-LQ!MKNVsqHHYQ2Hr5o{%aTsbp5hI?g)4z#*v>vKEN6y3Q z@A5$}?XH??$U?x((h>PQ^GnEj`0qW;ckO*DgoqI=P9%y&PN=dkVcVhV1RZh<+jtK# z5^-Nc5$f(T?Q%0Fn&Q1MRJnPr(WCo=RnzX&u|OC{Xh+`(YM9;X0631R#FJi2HlC)) zh9{~5QH~D?D>`l`ea%A#&uKUoWx1e5Y{00!{^wLXE+1_S>%1LgoEO*)T7q9v*R}^pKIV84q0^ zc_$C7QSI##0&rr&G4C@OzCGhD^>Q|nh=!Y#*`&~g)=){~-hE)!hcy}3MB>|rjLO)u zOgL95%JDgCTJEat6@HRHSBeO55ttFqmCINlLluE`Rw!k|OEc*s^e_Bw1mGzGk43&z zv^I>%-jyHZ8_{lTq716&3QaKQS#vtLd3ZKvTU}|fi+ey#`r$!GPSVlV@%LAYMmEpO z4t;6vjR~KpDr8KX!?}$&pnuusf^!RL@fJi4cFxS$|4PG@K);{9_Ja%b^>?B3h#th| zWb@~jLo8vCL+c$`vk^H1ockufjA7N1GR*~M1de%yg_?bH0hj&)xS zlYzOAGck;C77nH#wk=@slPC`9dpkq=n{kcI3XhaM$P{IV3E|}XjEZ@z5E5)_dsupm zi?x+eY6$E0fdzUg77$vgw!_r;A?U=YZeGI;`Q$bM^yr%AeuuEMF#u}M7kj968NZ({ zN)A#UYc(m;-*UuHFM*q~v&0!^mDcpshboBm-dVgZu6x^|1fxwtAd@XdbjNu>0ZjTH z2E_XFM{c!go~C$;ZXSWM*nDPE(nNjnB8B#t%sHEJKcZd61Gih-3wC9GjZw%}NM2#h zM93R$mZ4?H%(7^2iqZ%&T)Aft521t zelyN_&msQWMvmW_*9ZH%HT3UrbI3IZ=RgUhd^3B<+KzK?qId>x?Q!T|Ol%8FJ68f& z>$pry*hoqlT?ubkp3hV-t=!F>61PG*`~)~E1mc3<{bC$dESUD}fT5&4VRQUo=Mo~AmuskL32P6n z@^ws?VD1l{&>+c?y5x_~KsaAMT+UTk2>u9%w_a-CH($Evj|YicJL$jmsm}Lzc5D_4 zya+FX-!~|NW?z^k6gRdzEF;?{Fc$8fk;I`61Ybq$XGR%L=ApyUm~;8BcscPX4{>n9 zk3xZ$#soPIr6Yz$rSoxvbr}xm6UhkL^EcZx)X%+s=A+R;z_HMmwCb?|;y8fk{Rk=n zbwO;77SHbMWN+|Rd(`i*m6vsJkF>7Ea$wh0oi$rYqihkjcv6d*gqfEo2K-QvYT9me zt59$H=L2wu$fg#m`$vxIXWWplY%u;>lZEy29E5C^fppbE?}#LgSu&G*TE^Qobo~M3 z{wd3e zqR*c#GIC8;AwWmR>X;@4c^WtrXAwWXslo5MUc{xyjbrvab9hteE3^|K{OUJ-{@D2& ze4_Ubcl}t1y3Ht`L|hff;9eJ|DUS$uwa>Dl(SyW}_cEj_$LH==;&2cF_2ewciERu^ zBCBAdGpF!kehOUUUC}(nUGlsqs1EdYG3ShucA+EG7_7Gl*uU>NjwRWH)k&eaN*q#l zBxw_I2AS_#o9mq3@RsUWa;G_<5)k?U|rf0^RDleM~i!0JwL0r;Up6wbw!E`QwS{|P5;JHpm zmRz7n#hqOe0g}XnI!+M)N$znh#(ZC1v|slOPe-8DZW2 zQ2Fuzp*A)I+TI?5G5wJ$+3QojKf|nIA;gc=4r8I(#i0QXB(yDB*}hD04oCi;CO)Uh zu<6{kxvu?#@-QhwClm`L?bkU}PlpJk%x(dGzg`P6bcp?nbBTggRd73?s6%y<;azo; z5u^Yl6)PU6C-S7}Hx@St;i6F;#muY&nYX04{XoLX>;p?otx{jNIH)ZEa&|WHX=gH1+_UOk&2*uS%@N5) zlJl;YrJ~;AU_E3^{Hta;A&0qw0*Key#p;a9kU>s?=A!0ScQ|jSk*2Q(jk8Z&=}ei zdWr0ND>&KXj5uLt1to;aa*bj0^33xy>uRKnV!S=8nXnfPz~%?O{>6&_hcAf86$CDR z2gr^HvexUMK+F$$98~Y`TRtxLUu0e?v^{TJu9}S((;FMfyD?x2loFx^61abreM?~y zeGKp>m=74IR6576!=)>D4+`Xc6cn}91IGm+rc9BKJz5l)r&+LAg05Ya@8;~K<^~Kw&6Oe`>F2p zRqL*-fGPpZ&hL{fu)O-OMCt6Kedrxf!v+tcvmyVT?g3r+F5oa+k*rQ)ZIR?HOehjy zB1+Lysa9=BPnowLh$KIwJ9K<=xMb0jG42Cv1LG1fNddc67Yxlh9&_4d!_HYB(tJ;z zEyVc>YD&%Fs>OBgTvWGO_SEsA@wOPIY?{#GGy_wto^a$_2pJY>Yhrz?y?eBJ-^Z@N zUdL$NJb+Io;$B_HF!Naemcll^AIQZ1qi<1C-nHt@RL^hmhncc~&I9k3@#bFh%GS%t zH)T75)l*cpTIYf0gH)f*{iyvBNZ!R!phv&7FeR~dk*4geaCP~)MF|bB^ zfLoE=12nX!gYwXPqV+gy$I`Ec&_p&`kY{7HzSmb{@*|xU3UDTL9AE}#*TI+eS3!|t%-n~#&qO<$2WCo zhUVlL?Tr~8g!Pca_~DaeW0<}gi$C~Xj$Ir@co~T-@t+y-pBeF=8Sy_gBZ8D-2lE7k z22<{cum<2I^h747+505G-!PF{R|Ddx3V%+@!Ast@+L&>zevzmq7~>@fOa7G2c2$}r z!6kFSRH|`1X*R3G1bQYMM1J^TpMd_nG0J%|-Ss{YewR=?F@~D}@V*>_M)7uP3J1Feea4Y)#xxZ|7ZwZoemGxr3KrJqPCx#)3QgmyvVZ6>rt_r|{@muJr;Q{Elvgn>S8Q?v(}dX6&-BSon72$BZXZYpc&d0qD^AAcoHJWEGk5zYN zn1w5J)_d7#!X0#@FY*{z@W+b_#{(mCH5cKQl~(4u2Tsx4ioq8~<~lhqvQVTJNfYqq zmIVQ&siiLlx5J}vrTL?U!A*y5y#qaCW=(BZQ}61Yq;qFT%583wHJ1tgO9!bJvtV3H zqu*bFnUQMJ2a45s$5BRF>tFJW5VGrEl)}(mPOxW!8HdQ&-ZSlbX;@aBl0bDaIGIEhf-xzy$0l z+|H2GdKGLAP`oA6YSPImXJR)g38%s6#i>We@G9l*4hb*^4kFVLtKR1m;bIR@3%N*) zWwB)6v5*=MpJaXL46pJOXP^W75lhDt%5SIgPz@i_HNz}IaG}}KPSF1!D5NL zDH3cxNKdt529g}B4sze}&$chF0@!5OdudDasLW%@agI67_6GXEZ!OVrreX^oS7%qZ zmIC`r4K^uX$cbQFsJIzMnnu2%I*GWpC56#X^}|u2t1PwDDH}xRv1Zi2TfDH&fz2Kw z7!e+Mxw{qgjIne_Ih)@&pkILV-w#;ftoBv_?@S_T-Ao!+$w^S^-jq5{M81MMeu}nM zxP!K6xxUc>a@@lhe7rLPECyOxVwlel8s;pey--CV?_aQ^qUKJBNfdccRf45P`PiED z5kY5$op&n^4s4!Q1};;s6q_G5&(c<0LY4Szn9*o;=v18<~3@g8+&6VK3`_?Dq zvsdA{buDR{F8JuXQ@U9XP=6m)WwQkSQ8#JBKkGjr+FZ}{UUh$G`*MK$6=MUlY3mRs zjhJI?1Jlrb7C;)q>|rnkr^?7WzqozLkGV#`x`>6UnA#cpis|-7``p6U)+2o*n#o5@ ztxo@z@|DPl-RZdH2`J-kBiN}`QIa0hwnSU_oU^v_(kmYZoMq{iKnkf>8{|-;@CJ(L zZ6!Ohnru4B-82cT#50$Q6XIQ6DmL3aX6oXiG0-POE-(X~mW(DcM#M|!*{@N$MeEc>7Urnh4-*Ra-R%DWft@;8FW&kRVu2Fv-i zszUe-_Wl&DvVholwHZpoI|i1AO*E5Xq@m7+j=TZ=ynH+vT_Yy&SU7!zBvC4v1u@$( zEdLM<;j!50poPB*5ARxV8Af$W5$fi98*vZIJ#A-_BmQx!{I#&Jl7$bt;W z7D#IYKk{t4r$W8|3LlHJo;cnGy&D2) z5WU2$`yD0(5_GbRp+~bz{T`8m%U=tAnG|{ZX_uC*HxC4IbE`|NmzSf5MRpMP=AG(_;h)8wL|dns4&>9h@Abhe+2$2_a=q=tMKEeZ{~+ZoMS}7_H_CiKzO8yw zh)NhCb9<5}SwFh+u@^%G_pPB~Pe|*eUld+}9GO2slJu769P5qXFX)vMI7e}%bB;V? zk#P8 z76O5IPc_lsx~c-Nm}$l{VU((v0#~;!M$&{*1zN6xzoFonzq7W&25?A@GlPgDkyjFS zK;VDKa+gn9IL>rVlO&48q>px(d+NnO)MK@31W`}aNj{#TEvYnVVuaiMGU;OMte!Y~ z@mQ=L3m~bVCRs{=&Eh4kKI&t|qdQ_Px}MA4@4;0^2SK{JBGIS5lVk=0OOEE5ewzyN zp|-)Bs`Rp}fq@EcNz`<$5uYKFePxR+sxxnRbZ%@JC{moHr~VGY1y26)h%)|72wZGE z4|mk04-qxW`q$yFy!oGiE)WUV@^rn&@>YEaVF+3lLJmK)8OugyXKBsB%cW;psqLEh1jo7RFO$#Z@Wi$Tht*P9veY=0B}Lr?#qr~lB?f9UBy^zGAV9~{ zEO_GNKS>l%0dyb~Ga5F7uB8~1rJLis7+-ELz>9Xw*RnBlbV^b!H?5hcz+Fv4*6Pfo zwm9_mT@7%v5f7PYZ3lL7s%|i&ULVtDULH=c~Rt#8{FHT~T5+BFD}tUPKuxRcl#PUSG<7 zqt9qW*grG$d&BD{x^U}>C4c~tsI3HLxQ^01EB@o) zdgAPnx2&a+VNUB96WSN+e{=}Df713G1duJGr6_jJw4ak=LXmnH|HFa2- z9N|{wE6zZjsRpo>%wezkRoN66>Q$6VDD>g_zRN?h)l-Tfq=jARK;atNR*B@$u$%D} z*61p=q_mnu5D4T>=wq1S6&k@_a&^DQ0zkRUjowhkuvw%&7loxm5@*y@>w#uC`3l^Tw*1d3uKOXQ!?Ht^sD)kdN$j)hLpT0 z1qDzpOiETicrIgkm~69Q(VVdZJOR1+=y8h(H8T?ZUj$|#e%ii}4nxA5qntfO%`6s5?zGHW|_{(?u>kq`49 zUlR+{c?g~F$eZ?lwuN>1ysd_HOBe#RpxkzM!%MzCiytP&!wlQR(h}TgA3ev>&q)Y1 z67TdwJ2vLw5N!f?5W|~LjKY#LQBH}Li!(4s$uos1klKB=VYN6#2zvUbQCf|E( zO@>bj=A6D-087N$2_%}4%2dd=*EMG6A&z(cKEp=eyG|8Vvze1`_c*2(!qq+wC$J*L zQv@VeU>Ux)qs5Ld0Qoy##7zTX!%kzBp@x`4D6JFLsfobXh=R`; zTit9S!g-blu-Ga1C@~edNuMkh81A5hpno+&vem zGRIPilALO67)1RrYMLUz&(Iy}-l{&_(x3{f^?4^oYLMx%jw<&1uoJo{bxvOZp0YzQ zr?>aF-dFZ(10_O7{+}Z$u95{W=_PEj#Kk8!2mJD zaKH4*9XDh^{pCU;eg&62F=6P3g|kcJu&UA;+UkqkwL7Yzwq{#@7R>A|WKD<*TAU@U z|GVs-F(7fM~0nifsBWI^u=MjhVYRf;XW-;AUMOxJ2~#y zRj#5Of9cA}Qtvv!mc*I}apgJ{8QoD6`bMBJBs{xYvgvjGb(eZ#P)byB16(EvI(1fZ z#hZ{8NrMqkC$W4Ov~1A&J%?#!k_WE5Vqk-H;K^BmnSKU?N?4x5WkXZRQOK@1#|ZkA z$7YBi70Xxl9q=q4&73i$Hjhz?|Ba`==yip|5`J8%3b%5lDpZNCu?R`Ksm~rGs&*QHDh*{@|Dzps}|5%vt*PG6mLY}ND ze0B`>&l%Fs?0sJ((5U{$%p;e6D&kS^g~JQ!b4$NIRCY3!JKWIO#yx`86HLe~zwu>B zZgI#HhB`rXK{HptFeYjPVUIqK_|4l$u7!teb1lEdUufD5T>M)n@m-J(PKlVlU*law z0W$;_5E?ogExElBeu_jLl@M1gmDU(52{`!^+u&U5aXm~)x$OXi9&O}LI&wc$Vy_#T zhO@zTb3A`bT|!Ti<33x&s?3ETpGwQu(LVLr+BZRiK`rS!IUP?O5g=k>sq{MhHs3)AgbO zL0{?&R$w!Wk<=EPlKL!kCU9Tt|DKa1=B0*Y9FZkMAeO){tGn!2q$^83%H4z%>X+q6 zk8XjK-@1+-WiRk7N&ZuRD__w)EOQ2LU93^D3i72Ghza({GWw6>+l<^3bC`v%1Qb)T zx1(6FNAh!CWnmPySjq%bTVME73~lT>umElOlQ^P8+J(7XAO(n)9-6HLN{)s}=9S4> z0|4M6pT>R|aBvsie{DtNXJmRU(ZP?%4*MT>sE~XG;4)u8x{DHWoE6LB9%E)69&~Q0 z)RIlSwx_2mwjW|hVUPMda36^d?J5X=AX4fOonOzJcX_B^C!A^*5SLy8REmL3ALpNQ zB`1c^qIy@0E*ym}7&raQquJ_bf~c%&o1^c#aDPS1I)_9es!nG&r!3>l;ZT~V1AES7 z)yJ;!A9MJ%mrnpO=D(9W8fn(Jhthj%Twd{dYr zjrGBcAP-;i1GR78h4;isdH?wFJ0$PR-uI;8buxOwYP3NU-T;kyDoHN!qt~O9AukV_ z8;7bohyR><=nnx78GTOPacgBD9d}(?KN7vP_838@rC~e4_aCp`AgbO&`cDa%U6p5) zh2Ntp;)WGBaC;A6p*7?6YVnHPJ`ZMCJ4>}R2xxzSq1(hFxN{ZR18rrK4DbFu(v9yu ziF*pFq`%sj(HHIcgSfQ}^1QLk4s$UYGi!1Kf_o*glRh@11Ay46hVn&E5{N|Ndr4V) z+}B}+?`2~^svgqqxX7e^yb(ma$Ec>Xcp>_qfP&si&l{=VcHehHpOn#I- z3qB&tz|0@-yvHh0n2EY6$fZZStGZkQLI2@ZlEO62bqzsMYhwWZbJVDTFc3*UOJUE5 zp7vwLPumZpd>H&8I=568Pijj&ctS?)gg>exR!x(5wA^470Yt_Bgq#WEv16sWQQ26zQ)g`(k(jHPN^LajA6I^Q3;Z! z!VNszd|dDJW& zsKzWY0$kUrs5z}BvVJsnmtK_pt6R$u1iVh-2ctfu~(^cn?A7lvlux(&%(MrOL>=_{rN_^($(H zG;`ODnd#Dv$8aLJxr8{t#Btw5tV_L^B=a?`4oxchc2^)NZN@DL=mnY@9*&GOH{QpV^c~ z(7aKc#ZSIZQW0#a!>`7Wv#_2p4L1A_@yXr6^DEj0wF84xbCw2H`l%>U-Lv)|lm^Jd z-7umEBUb{zmYw^c-bit`Ur!$AxC6O|-bCy+CLcJhb_k-I{~;e`v1J~NCe%WNl_4v$ z2sO8;-y?6Wp}!+0|HBu&23atdJ@=;17+=+GIzC$P&?I^=4{9MPk!%3#D3SA{aDs^BK`v^oQ?p!P2dK&4#{+DBoq`uS0 zd*3pK>(xmuvECx2?FG<>%>@qF)1mk&^GiUiYthZ5@kzBm$ju694~$ga5M=Jh_~p9; zeI|rHc3L=o_*<=3FpX*B?v539H#0Tou|=@T*YZjV4-jklLnk!(-5C~R+B%c8C%JRK zW8!4AqKU2t?0nhD(97%$2K4Llvt>Y(UoK^FG>Za{aCn7wT7atKIxWQB5QaHQD<+K0 zPeUHM0a&@Cuuq}+`RXV#2b!T%VhUHB;hj$g@wd{UH$b-trH-qj+I4;4)mZR#RqFRQ zg%BdUPNt*Ck{Q*YDB_L{eQb03cq9*T2mV>t3~;ne6bGk@fhRr?+HG}V-IY*0fmAjX zp2Qyxh@jurlMzp&^ysJ~Sg(G?`2FIfPKojLT zK;~M`V29TRWF}qlo(i9pg#2a3bGl2xn#88_BXh*1?J4f2jRqe3!8 z&FR@g3O5nH5}|r7J5m1L)Fr-)WKp40KLdVL2}6N=VDCvrHa8qT!(-O=*>)|U<*I|% zm+d24ZGvNFX@VS?Ih5QQ1FNhgV9*Z=t^8dAH~P9$pN_y$CW~7 zOe2jyv;1Rop(>nz*M%Pkb_Oc3<9v!t?G0UAQ#C6bYA0B+)-o|nhYA^-xBMd3f*tKe z;s@(G5d3XhIt>{P=Jf=2X0lB6M(kkmgV5=P!+Clg@spL=6hbP4&jy?7u(60z z@Q4N8@imwPxnK!AzQbsd`*BT2Y^$JF)ks@w|+PurWmMFmmwz5gv7Fpg0|t!Hvw*Dkaw-rZR*90TnAtJ z7cd>J535KF=b#)e{$I^cF@f**B+gh~y(2tIFUQPID}q2T7lC>q#WVZC3O+}!KAdTC zAhmEZg9xJDt91Qn4ZrQ}nqu^@&~Tkt`>DP!tj2TvGgaTV!BE^Eqtj)sFiZGQxDB|Z zOvNdgYj{H~R37#}PR*i1ysf<01c!QNP?g28%5n-se^tx${^hbk2f5vkYJ}Q^1uOYk zn~7o!Tx=uapJR2gHip89tm7J!&K{|A@19KXqrB$_FepW=W-qPq*cf~=6M9>dR{5d) z+b^J>;vzb4NZu!gv};b2(2_L~!%NVKbKX7)5GNbT%BHIALI6a*sw-(c=Z_*3Pou^b zE#d_ARk53jz8_-1KpRDW3d|!IkRYoLY;Ft^p*<_as@^0p+eTuL0zx)kx-S4ni_`v% zbnU?RZj6cb+oOCG-)e{iD)r_ymi@E|EEYzm^%P@K>(i=MVZd2sYkI@2jp0OT=QH~PszpM zbsWbi9rxck7-pDfkVe~|Y>(r# zc*#CQA-^^H9`srjC&&75O>|@|SEd2#k4w{$e6Jj}_YH7Fr>D3q*>kjVZbS}ac5wp< zDwcY#2y6M zbRkRa_&oDW?q+7tm?4eq!xDL;)lNNA$)02n0szLJ!Ap6|i=5`#Z!AQ9c4W1lh*?p% zG}G+(C(UsOBv6hGnWCyv=EB&~>XCLkr`{su{i$ixRoyUuF>jhbm0pU*5c6ix5=!TA zeY?w9EW|#JFd-pK!@dM(5VZ*r)CSi!`-qVr6eHAbqZu4xFo^)+tB)NQf5&q(!Qbdx zKps5lQkr(g_(?xBkO<{#tm;h$=#m+Yb&r}TheKCp)NF_Sl|dCsm}YM+#CxU**f22# z<}DyU#({Pp44~&7m&V=k$Kzs=UH$?~kVO7^BD~>uFYKFs#3ZinG49yHNmd2yN#;cd zv1@gnG_J+1!ll!#z}`CD5GagztH2yYoTaaBx^*Zr7c!9pHvaT$H+_$n9219|7VW%mcD>Zmyv#VXZRMl?k&^wqR(4&_R}oD=Y2PA&w}N(0AnpFD-%EkJaekAxigL!3%MbUIyL zSu-ILwqk}TQ}y$;`yFe4PY-*0N|DL#VF)!L)Z)Zk3C$|;mO55T%>R?K@Cw)s1jxeg z*=c{0u!&w$p-~P`3kz6$zf#^&xs2&jm!W}FZ=5&IA7;_em4eM>dPBnxHk<$libikn zlo))XL0;0c@`y7$5a+67Zg~MqNy1p&Xp5t5S1H25^aR?PL8O0ffh(Rms5=#uxTGNHL$JgA|@a*{s5lF#wV4*G+pbmkUci z9gMAiXU-&PWlKGR)K5w<#NuTp&3bJVsqDJOJ8i_h;d4U@_Pv3c(9)l1md}j@`v%Dv zu;JN8t$?3;A&#%KKo^~7W<5zK6XGG=UV`&r#9oGiTv7LrEL(vDqz+#3PB(wr_4rOg36*Fxhe)=7dh;;Z%Ae{JY6>pvzjc8~x4if%OWN}e$(JyWzeE@)& z;DF?{)!a_&NW~G`)l(Nlv6h31fgGdsO)~24)q15B?+G{hqA-Nluh`ZvFY_iqy0M66 z``Oh-_a)nc(2O2!^`roS#77h2mA5K9sBGj{3(%VSuvSiJdT322bPgd3M`>E)y|^xA zr7rjofmR}dX6V6(s6kb#H3*f5Q8BGzV5##_V|DFz_?n1lFUqp_QaB$u z=X2gW#2Po_xEY$3q;9&`t4om5O{4WRtbFzS1e+~8mT3?Vi}2-Yqu6y;%^eS8tURP6 zW-5olE!^@;wAiPo%*n^wLv$IkS;}YY)n3r7;n1iOggd;*e582!ZBu*>XKFKv2q|+> zvBZza1UMxGQP7RR>`|bGNE%4h$Y#>|4wOH+qoTM;bSzVc+?m;V(`&k4Rq$r1B<@0;Nt$_8tDuf8c9fB4Hid=4;m>c>zBUcX8_ z12@}kFJQ7S!O-hkg68eIT0LD++aLya%o9ug&tZAbQvm;$z07T6#;0P$O=tB?8S+`a zD^R(6z-e3-SgUZel|0;YUBv-$QLJgYn822ehe|DqbRJJ{p&fog5|mF7YFVL~ECm(q z=n(j?llUoWUvE7h*gN~07(3HHm@RMnk&*+f4~>+OO=Iq85_E;VzPL)R0XzZzjXfV+ zcczHH(?}`S$z!Xc14tayD7dIp(w`YH))E>}wwpVQzkVgWs7^d~HO z2HCr_l}?W4X$S5Z$U5YOy$fBE8cL^oWw{3vcaPnT=iHOa%?Tg+BX;<{Z0X~+XUw99 zvcoK%x$C#ZV=JlCsAs7wc$|cbSk1t+7l`CGS zd_8Ek){WdMr$;Prs0QR=*aZwuLbw8AM&+rx@m4Cu!H}~O@^qm{i1CPhbC_xY04#*N zgimc&j;j0eHaH$W2B1G0ILT>AFbm$rVy~aG~omQ?qzvkX5vs4+3kqf-j0a67K6YuJfe7ZmD4UGQ5D;wRyH zDSUxk=3ttzL{=3u$nt%1_x*WUXEy_XRjv|gh37=>2=)mwPmo0jy@2`Yz##5EZ~OYvIEd)OR$)%8HZ-ZB zSokwEfB)vYwdUni12}4f0ks@-z<1(&;XH!KhNZ0WE$@qrBADF)Cbn=tyt0=YY;m5R zm@uH(lU49e-JKFWy@fD6kqteFyosT;;CPhITNwiA%0N6k1Ml@TvFr~9ljPxk+tBUu z^4OPfMdmR(PgG1oYPUb>ztCN+AjEIgC-i%BrsZ6uugf*&JrONq`hjPfc)Gd^X9f~j zZT$I4*x2GohyGCgwbr@FJGFeekvD#bgUbON{eDQ#9cF#V~3UXmgpeF{#^esk<} zY)Amc*dsimUcn6fk%R|wR(J$${mW0kT}UjGSPXmgFI_ukTb*@rFXr?W@=_Nu(ET&} ziz9-!DStnrNPKo@+moy$)E zrRMElzzVUP%_wz#TF^WZv6w#Lnx?m}zYfyB=aJa{35~2y~|0s=VJFa_L3P z8+D#3Ex(4c^e`+<>#_?7$V9Cnc-T7Bo#3?>ng z2G!7blnlLXgdz?9!hJ$RZaZ-JwmzWGYuF9Q;K*x#qAI?n${s(41<6O`>xW)OPLM6i zIFZqg@|SS+OoA4Xj1YGwV~)@iJI1|n=K(nMTn|3;-SvbZ8~nVPY~#!yd#k9o><$zF zXj!lJsdNb}am9iw(z?XH)RFRDm48A79;*Gu5Vly~Y&)r1?6Ry^3KeQMkxUO^M(mg$ z`b+-8uDL@j2fR!yn+DqA`>@$$;5vn7LlO@7>4^2xnQ@SgAo~6c+&+7VKYq{dD$x!C zY^XzPlr!XemROM@hZz4F@gNin>!^oL(v~eLum7_jB5c>(OiSC875iR~ zo(htEk%bu3c32n}McE)ySOGajB1S)9N$o-tfe%lUpztWp=yk`>ulHVONO&HY+?TY5 zm)-}nSDIyWF9i}$prUI;&A9XPot8L$)hL%dx3{8eLS~Ev>3cG-qIi@5C*8lq)6(Oa zq_v*tcV7d%&(dd>C|>n-7Q~XO_5+MiqK+0zWaLPmf~O6wvS`8Vw7UkFgT6NkUX#2M zQnXR*ZUy&l|1*_ZY$}bSs6kHPdrzBH{#5`HdnM22mDNw3g*574OuA#H;2LO4w}UQPiiGb(6z{l}CnM zBy69Q7fIkD2BqgNFLBDi*SedClHC2Wvo)LZITt*+m&GD%)~i_h-_jV_yFE)}wPvrt zi&g8ol8@ymEpCU9a2Xj0kn$qYQi$Y~&`;WcA8=Dx|3+YjO#i|FU&Dx;t@HH}uto zz4w19UAAC&p^kd&eAi~JBsI*8KqrKK@0JO;U&!f8w$BH$Ky{3AvA;soS2upqia;Rb%Nqn?aCW-7cKSWlYPYgDs7<-9B%7H8%|}-`VUacUnwHigWvO1|19~|;sJxi_MdbeU4Gs2u6;v4W#TW4Zu^^m z1fv_hx3^p!%%l)+nQeWWe}uz^94dE4=$;;e?rN|64R1)SFO8tZ59#!?pW#bv{~f%2 zS@~Ns5e=7d5?Bd0(?v=uST~-V_8JAu04|CXQ=EyQW8r_W_YS;*#?g1~v2EL)W81dv zIks)vwr!hpY}>YVr@8kwY11}M`ft)E^BLZiy`H_^{Px;@fJdB{BAUuR^~#>DUpk-k z>p2|de>ZOz%tX~&rHj*aMR5RG3Sb<~WlF!GO6*hcfh>hb#vpA1oGQ{>3c9gG@a8LR zx>s%Vq%v`iU@uw$-b|`jR70yR907L0(n-Nf8_(Ga^}rS1zW4!>Pk;VG#J7WGgI$w> zo1co?dku#Nk^4LlzWFpeY*g3Fqz{vX%;BP^BZuQD^)F_CSvPpZJ3}hVr0GFH`I&#<|v1zTcW zMV-xMPgeG%9o`;h#B=?rB6~W#e7GAZGWcnuoZ04FP)DL`%8MGXxrdYK0g4P|TRKik zq!_bf%#LCg&x!901W~=YgZPM5BmQ&`>KxRGQg`>n$#HWB_E_w zi|4`fXrYZK)Nc3o(7z`yDt%rWt!185*+?|k3Sr`g04n@H$L?PiI+a0a{JUZe_GIJ^8%gS$zY#O+%aR+48V>_dwIWYpOro9*)FYHC}u(c=v$`-BD_Z)H*l- z+0j|f3uq3j$_u2x^KJ1rnP!Y@Qu5h4snHThg2iB%0FuPWvK18#(2L+Axq|xDg$$>` z5TnGdA78o#hny0|8qGZL$(?ANJsJt<+kegSX3)u(468ju7olYj7v50Owm@(=qQ*AM0!%`*DD7hSo4)Tm>JL%3dzCRJU zaAYM0do8q zfBE6u)rk!~`dS)IuZmSEKcLy)jNeY69?FU3R7V<%tI_G{rg4X#QGPYsUraHpxE!vd z?M2N10hIj&>W6x9Gh&YH)6No~TcbtuZ=rk`MK$T_#g-2<Hrsdf?$4=Hw!X;svGUi0eTFqzuX~dOuz-0YVel5_jBu zsa*ih60l#=d2Z{@>;O;Y?$&DLUvWpDg2lE8nDSLt`fPK*Dbg-`?;OXr`Hks{P>&^F z$MDO7PI;6?a!^y5C-k3cjlRGV^yZaTO#gDTtQmrogTo1nR?kPuV$<|P!rd}8!W5+Wtg-U8~@y@N!W>CCl za2Az*wd$I`7=7J)OA485JBRoJuwb{9GZp{MPUql$U^X|(-|n)c6wuMWSc0y{ zti|*sij;8)Z|MXrd=pj?ld1BO>-Sr0C2M~j$cJzhv4%~ZOC`b+-}eDqUD+8v94b-# zkASSNgK8Fkq6bp}>@@gF)eE*li3VHa`flZBIrMO8hgq zN2pQy;M`V-cRcv(s}C)R7pUCBS)TV^jKl88b0?LCYe=XQsVgP$L>`j9*4iEqGN?N3 ztif$YOnrV-eE*>IAC&%s(tl9;4@&<*=|3p_2c`d@^dFS|gVKLV>A$4(UsC!nDgD1Z zDTRWfFIxMtr?sVbVnDufXJ-(T$|#b`iQ%uRabWY_7JHQOwRFb?%Kmc{d^&vWBlGAP zdeD%UMy#}pNM=%jFoNouR`crPEsCiXr~hzAlARbblis~kV>dc{4=L+Z4q~c%OL-Np3bmSqx0r6W~ z$+8K*myZbX1nCmyE7dl;s!r5kNh)~AmbH&D_{W+i2$UGX3?Nx`Wj2bt1XruKB%|2 zvHRAA%GLYf1`u?+GHiT95o_6 zI&K@zxeEXI1{V|iNTD|91&@P1ZA)`oOCm}P$gBJasK~PV6Dvi%$3^FSx3_i4*A3M= zqtFv{?VGy)RE#Cyr;b_@b-0p=>1YTKmVB2GJn1wHTKur~j3uBHU5l~`{{oS~SjhPa zbJ1`Qabz?t10Tj3G&()KoP>DC;Q1P3o~Bk!Rs2m#lQVI>XORVms#^Ojjy8au z->RxgQJdqlixHf(YNQ51m}kTT&G7_)PihU(8jQw~d%mrwj~V+39yaB}Le%MHY1TZm z_EQe3&%{B{$w1oFAcv6gM`53;;Mp>W)Dj>nG>^_aPUcTOAp3I0BZ`V<@6u(tzdR+; z?1iR>7IMMXql<+7V9J;AfuRunTEN#BPtXx0jfIlyVW6)TE8X839|XZ3{@zu+C6Xm#1yazbF#D4-s%6VINR+68eXCB^_H$GH>Pn|G(^7(+20m!pa9)z!{ z724Lz}7Ilpl?VWC1eprvfW%;zV7k|H~hF1CUjTPo?t?SrB0s81#S-VmFh zQ{F7^CZPjOS>H0Yw|Q5xxBAaYp2^43)d%>F^BR2_=+d1@Uhxwf3kbz#es&j69-T+I zKl7wX>XQ)=b9jDDdL=(~7`tbxCQ3qkfXFcwuTsuq0ps+Z?eZ2EpYZk#(gN2j(*XpH zfz@Uw9Xm6L80xKQtv@&uZkIYNG6H$-=04C~-;n~0{F#X3FE+;$4&?u?0|`oyk4O|K}DY+yJ;%liTVz+caNvsxJSrjuU{UZxial5;Rhos0d!AxPQ$TdvV zhU{7l;enyea+@V6R|YC;KG%NdtqvaLs%=yk&^8=)^D*nGut*%F>`d zR@cXLws5j57Q7&}DX>U$19!B)Qq&>shGx`8e6Iyun!__0joZ4}gotm%8uC!{<;j+4?9a$B|NfkiRjme{ZPiBIi|S64e`DvU!~+77}(DHKoI z7qsd1s$S9&6w1EZe6o-VY?^i@hmyy*HZ(0u=lJ2yGnwH!H*r6tyheqPO5UK~?tZ}U z0uT5*Pb(ix_7wf_G1Z#I#S}h!#cS>HbSfWs3#Trb@X_Fjyy3$7zUOOOH!=J8L&mGNg-J z9!(j?_28brT^HC*<@HsB7?d@l3;UoGbK(+5MeJi)NxZmWa8iCCVR^PMcPfIE7n(^; zVBwPqeMOlWygU4T+s;_`>CDCDHu|sQsP1kaTjk$#$HcmG)6PDu;w#89ayW;?`AEZl zc_DWwpO;h&H)rGaZ2g?R%r@p?0{gk{M-;XjZ8~%220p;O=%b4f(PmYDm#n8_Nf*=K z=ZOr>KWt}oHjn<$nxBgqzKAb6RMk4>abyq_9%PVbxfT8NWu563$(5WnA&u`rRky;U zx4h8ritC^;SUDZc%wm(1P{7@%9Pm0{PjG@QOMc~*?pkA2zqyH6Hpr2x=z)oavcsov zdBw&1qxNV+G^3jZC_7lBX6z=U=qC2uom8lzPAteRccl{Hc$N8D)vHtn1P! zu4qN&x-hSuzCdQ2>3M^fY0p_3Qa1k3V&ax0ht&XJmn%7kkhOi6l8ibmz&H$T9;6~R z*$+qlmEJ&gzE=mU>wO|yAlVrWo{!oHSg^i^C)!s&;(&HlEowcs(+n=n;fajKZOwF4 z(YxOGn9n=O4)1;zs0ywrtnF$xf7gTuRI4DU89IF@8aZz-RuXYzCk@Pg3buM)&0BK2mK#mLv$^ zCi05_diA}rQ3gYikJG0JDK2XybY67P6AQ%R>5pRwl$~Hw7yU&)%XuA_V4vJ$M@CP6 z@^&OX2qPoan!FG2V9(j(C>q-%n zczMfmfiyw`U>iVfA#ID7(sZD#IYt00H1(3U$eIVQ-Mff$mky0^kNgVlB&4`m5p_d#pVZ=~e05c)`s9icPo22Oyg+1w1=TxA#JgQORk zXLy=ySK0yv2KuQscNM1pIV9V=lhN_u zo1rBHw`JOM_D>>ac@?gT%}1x5r}JZ*F#vKtKr94bf6hd)o>JVRzHW(3yH%p1_uP)` zm}4KecKZJ7-pi}CPgbTJHS*oz1&O${JS2V}+;6+OdeTc6y)4V~X(lqi<=6DCkWHy` z;M>Fs;*<~J3l~k+3U&{l?@<@-&97i|5ift=I$&P5`)LGB2z)FT7W>tcOVWvRJ`7TG z;$-BNP3^NU$T%C94q2dU1mj6*RgbK4Sf3PjA72@@+as#aaf!RzVv9K+z4&|GMkXR4 zhi!^Xs`g5Gsm~8CXX{r<7D4=w`v9bQC9oAP%@HeCD5o(f`=JzXduu^fD*CRV0r}?7 zE#5=aJZQWS#>Og{jLvO$k|&rn995}=^rFI4{{CrH10u&RE!7e&cJ>F3^?25I%W;R@ z(T$@dD%sEsXAm3%+Xd>0YFWFJBsa3ICn(A4yyCZBlv%b&~YSQ{<&4B&N zd2E{3ky)vfs7|VFPu?h|psgn!{1zC9sxGBzM(=atFC~6!vhc+R)Fe$&`fXWZKgIZG5~t9aP?Eh_b~ zll_E8#9g0^>PDt&<4%(jmkGRU$qdIqpC?mZ1Ac%_Xn1sVc1DS=9>^P`gWkr-WX)yD z9vU6qskv8$O6tEuO(29V#C0eyyuuonsyna?8q~lEMo;QETARV|(?=Sk6qyndVRys z13gvybY`&Dp{YaGeLZ>nplk)4)^&2NhPh^i!G)J+uKMGXONtKaL+CF*%)8zcJHIjh z*M+()eXg7!VvZj!;bcWt38=93eXk9d^fueNh%m+7N#c8*z01YTj;! zPPt4qR2$O@dqSZ*mrFj+jIB*U zxnTFaMK4>gKd=|rR21Z-1MwM+5!oQUt(mQ|D^`WdL;!LKfE1O3D@mZ*eMpKQ-ANDM zM0&qi#pu%*%3)ICouq{4!}#GLN=N`b@l{=Z7ea}h$SnpaBB#y1i?7ET@ki^n%i8tJ zLMWyNf4Px$tAd-WLw=_!sVy>g&Kd27h>B=r;w$-l)@Wo*WYjBSeHsgv{cIw&A+m4r zaIUjZS3%%-t~3GK}gG+ZH$`6-- z&<{gQhq6qAgStH(;}s9}FCUfqMDjpMs%A?Ia7*<)$Z}aWPEzQs&A!!|;=snX9l=!x zC&BgV(Gn=!rGChgE>hq0S$?yHhOXktrA(Nw)^mbzCXCKxAJ{bV)~lKSwDJ#OK02Is z_s3`c-uN}dZ6&k50;^w61NWu@gt3mfLli*P-W1gFj1E9U8bABXojQldYaaL+kj5d4 zyOx>u#&+@q=U~u;*TX&=H|ZfmG%}}gpmxp6F6&hZv(1dcD%Z(%p#kR>9-Yjshu!-d zTd$OC;m^>gJLfnOG76B`EpUc54UL2+F!~ABdt=mi9!n3IEnzFtyWc0tdDv0U9OqU_ zbVUqaZg2foEE}JJ$ebR5-X*|H^k-ubm>~E_cF+Of<|85I%-cFiMSO#}vgiu(@kZ0s zpm&h6U@Djae!?X#L}=g+R=rhgtC08ar?cR7ul2S{M;0ZLN4+SdM@7i+^D8!#F1Vo9Nr((%9r}&?jn*`w)iLVo}1BETlF;s0S-EpsHH6BQ_`=l ztqzw?6Rdm$AU8iq5na5lJgQ@Wgw(Ce(%d_wx9|oIul`_hmY?3cSOmiP{ z!{7+az`xcpvH23C^lcpq|1HRQzQ8&$VKCf2_4k=ZlhAjFNzB81l~dU;wOHZYbQVl2cp%H z?Gx+b*t`j)Z!!=aS!&MX(pC-Mo28f{7kY-)c{`EP3eGxYz94IRxleyzmB&C|VR{koZy*w0bAt>PWS(--il zeB+FN@T&J9f=U4TUe{L2*0r<`HY2UWewA`<+2Ki_1xx1Vd3POn0bkfJx0a>SeeN{$ zzMU4eL?=!=MJ_Z@NN7jn?$R=7_0y9ItZb%%sxMMfu910=))L%@s>yH_cZ>`3@cvHwb3(2YnAyBh~V z@JVt#iO=a&x}^}Z(TPT9@5&Qf7Evzs_#S;xLGPPgGBOMc{)6Rkaj7C4I&z!o&Lah% z8KB-UBil-IJ$FBnx@XsiKpTLa=F)RFIhJOZn9--hXDqwQz>V#-1_#Q9yz@Ls?(HGjywWVRzi?%7sb+ zjo%SfI9J$mhY-ZkL3IOKYglz&A*ikI1|#(8GEYcoa5HzA|OO5ABelqO0c_5q3N_AUv$Iv8$5(|V(=sjYHkcjdcd)mL9*-3oy+-eG#HCZ zVjF$qp)-(vYEOP&%Gq#xnYbzG%3`C$tScVfi#_=fGH)GgJ;E%nWjVNyAWd_FI7q99 z>fZ~jXgSvLYQ6|$f0(8f!NqJ2#|W5v|6C8p;hBh`Bz=Yv%%;dvWrx&YHqnyIO%$j7 z+DxXIM4J$OG`s1Yzt8YTJCC&OBH-CIt8ztal1a0G0V61>g4(3GXtW(CK$kNWE>=)( zv8rPSBp@kV=|v{7(7;@8^<_eNJPN4w8E-WY&@yg}Uh)jDJHcx4Y^G;8;fty2euUxG z{d>Z^gQ(iBYa6|PGjIHTPvuh|kMTJx1`5yejOH-#K8!)XCaq{spDT}6S=}fry7>}! zTr6^H5;Z}Qv{z#2{*v9?h?nxh8hX6+O^#xuq6?hX-g6Jmey9e$Li z5;lYrI>pue{edMsX4?PB+oo!&lp}a|f(W`(9RZ)3^#01z(33!QnZ)}Juj+(a05f=& zqyuive%Pe3Jj}nB`OTWS^@j~HH6^k=M1``?NTJ(BoG;Q)UlZ&<5f&M=dO8^A}eaVAzIee@sB*Q=v!Rn-y^2>|_$2*GJkLlIYL0JHmpY}9+MfY~n` zy1^Ouii6+cyo(Nrkn|c{K&o`o9>3h^j392nN9!*%5MkI2o9RjQkaWN%p0suVy!ydA zDv6-erdTV!cerw!$v?Er=52pk!DjK&-bp~d z+^e-_AS$Ybkb=(4*(YWMLHwh|Oyg}gSXJBET_adf0kk$ynMU@|_QW#Dv$~tH9Ir{x z{n0^3j)HF#ixZq*=t%R~nfBe}4x-q8ttj|e)Xz5oxw=Fa?rzqVUC1ibx%~lX3UN=& zQ%9}br6i+H6-jylW!7p5F~If;WP=ZO*r-f)#4{)cZWJ>$L9z=>%X;EccwChN$A>3u zEOi=nP;O+-!a77uEhgX1B{I8jW*E5s#3I7)Gp>J22WNMSTgi;bc&qUa$+&umG$d6o}f@* zZQ9M8OUTHTBpdiV9@ao^M+ikP(XEVHLPTsu`&qPdq@gdeDF4^o&#SkiS)qVmk%9|S z9O&!8+M_(lqG^Rj>}Te|8uQPjTSzucEOr81*A=JEkE|7J%c4EJ~^bW3c$o_jjTqH$`i;eRuGMH0<_iD96uVIQOs?(SK!F zt9$3|w@l|?x!uJ)w!C>?+9<=_uH^fq-|zyucls^W11~x&4yB5xian`6m{H;1Tn3sG8@T66bXljuxX~Wz1COzX*f~iD zo(Pkt8UD;I6G%)|g&8L@q&Tk>vwKyxm%%Sq23a*KqlfKs(Ul{8t#B`B&|3b%oNq?l z>i=j8d>a%ZHiwhm1RP&MFW_huIF!f+EU&0PS)@0n`ojqCQ`e04g$?9{;sf;6)ojP? zDCcW3J&2^D;R@4xdez7m6$85%uBi74IYwlJu%c=0`Rw=P4sHfNmF44+y53L6(S^w^-qe%4~o*&B-NI@!e=;unzY zAbusN9j*)-NNKR*7>BR@OyYE99HHr)u+yrwgKlYreb@ay%dN|3cg5^T5>TozCH)1h zlan+WljC1vSWcbzxdOZXSuKS9AMW$w>*hCn`XaPse-r9EtpR>#p!|Qpra?Cw~M7nF0Qqu1nta*ZgWR5Y>a9O0hWx4 z%|WiO(8c=O4HTBM3ia=j04RKG=&t&q?AJ2hz$qE%VTdk^pin8&EC zx!}L%(GE{WQmTmJMic)&NI+7&?$>l;#j)w7&bPGEQW{jxXPHi6qz%$6o61d@Q1+!o z_xomH*kTvDT_~wC+eVypBx&<-N9k=Pwi>P{H`_o-VzR?9iF25du2}+Fv=hFKVkU<5 zARjp)SFk+hXw$;Dd?5cNk?7elYrBj}Mw|>?;#jKi;F!`)b2ur1iV!L`Jq8KSzr9Uh zq8o7+Iqzlk8EA{MLiwGdt+T0aoS1|aMA2U77%hn1iwXP5SI(1tC}}In$%H{opNgE< zM0j`EUn>2^THt4J1t!36Ml9S~S8_-E0H}w> z?dbHDYM#$1IXG=i8nN`k{DVMGg#g%CXCHn?HTu1VYnwvYC;=PTDeW^rqaV6%b>S>- zbmwpaMey;8h5Ru2M_~qZOjo3lvHRDY#9Db0tH6)nujj^W=*tjJ8p4f@jsG zJlenfvFV4mDA4fl{GRYZi&;R_PIsh?>Aa&?N#-P))t zJC{xw8rr+ffor0b$Jq2<>5vRHxyg9&@|G{9s3Tjqk3}+XZ zl=a9id$%GDj17(Zd&I-2ok}B(HYNIWX2-Yqhy{pt32n!X-?MK<{hHQ1lVK49MnFa# zwM}8gbSHtIE@v`avY^~*P2UcPUqY$W!wzA;sx1Y zn#CE6*IpdG<>&=kCM-`Vqv!g-Rd?n00 zC<6dhT3n#4Q4Sk*e+1SBALvf4bWO}5x2A_BfksysP8>%U(KKa%EJlTM__2^ab>kjJoexyz z4H_?SK!n_!72;FEx>$`s8Lvw~aS2u6DS9oQ4ectKAJ-_Okvwj*e`QX}GFu+&%9C26 zgmT@Ga4Of^{MI~W>Fp;6WTN8@<)mVIq;>I7!sGM+OOGh3k$cc)vpk`lNcNc(Q**?D z3Q&EbvigI@%S+M$n|j{b1Mn6A@2o2P&-VZ4ZGT3}dUDInl&lA#C@dXfd*;5_iuBmp z?qq4bwO(2T7XCDkw~RM>Bt%o@GmeA+T=LicAD%bbq2zD7PU)#^3&FCXBh`r?3h#^5g6n)uecKhiM|DzA{mw> z%_;P|?A?a@rTE$UI7-t6X|GLd58d(z+kxj(o?Dmk-n#j*1gLCbM*2HiCl6&TE)THu zu%a6ITMc&en`Q_b$!(Jx4Uvxa4zojdJ39kZN2%o zp)x~$v6>Uae)!oqL@!}q?6(!C^NOU%!p7VQ4w+oZ+laIfRb1wrX?)Y%wohM#rc6@u z0X+`{5*Q0^hDfi~n&#o&HpQYcpskhi40e!KFrHP8!}H?rnYK7x5N&kq6!dP%6p5A1 zwv?dVneaWn7>3PJ9Z|rFQOQ}zt#!KCK!<_CY7Wu<0}7xO%8~|HDc}m;>F$#mRoFCR`K>%UvjeQR4e;$iyW5(67a@D+fXY?}kvf9G4ML0`SvpBLS`1XJZ z`4*{%0N5eW-ICK;yB?=`-z(iaeixWIA8;r}67e@rFm1k!!M`-<;RF>^L=co6{gAmB z**Q`}zs#ouP)ZC4G+9X7X2h$I<77~ZuU{WMvf+}5yBc5}7}KWBvqEQ0{|4~)d?ZHC zE|)VrSx`|_y_wC&)&SVA6s-f$ED*)lk*8j57~!ayWwA8TEb-P56>I+M_HYy8Lc>Ns zJ8`lAvpP;WV~*{W*G_M@k}h}`+S>P-JMRn`Gdn-+%4k3>>xV={aGvCc^=BVau@RNToU;(`NmMzCB(%S^wky(1f05}>|)=m9US zb`ne^;DU_@wYlFXb4KCCegoHw`}*jIA5<>i47Vc}Q?l}rL&OPU6s&gOTC%S>`*~jt zShMD!EVIglo|NXnf(BFmWB&eJ*7G|fK zmyadfPLHrms1n+_$89z%)8@0OhbOJv3YP=m0g4;Ir}0f=?i zjvh=?FMztO=+OMSogd;X3&!{7mBgMJe`79yG;krjh&Sxvy8Bx(q-cHvF$D$pnb+!~ zn=i!8F@qacVNWlE^XlzB%Ij z)n$1T0hIfgfdt265w;W*mgtA}gNqjB_GSSC-EId={g*_|U^Cdy)WmaU7SQibGWW|I zucWK6A?!BWZ0N9FA?yk#W&bn@mVM8`%xBsMQ+M(oH75Kfu`jkWfbU1|5VcR9Qo zjK1j9{p%zgNsvkdQG`>5N!}jEF)yFCB(bBp-z5{qkTEJB0=PPpc2tmBi{*_J>aVW} zr>uGv+poaK5Ijp72-+jRo7JA*HowaG);Boaejki*&2Ma--2$7I&}F$mxj1KatHX*W z`hK;s`aO=$5s+U@BVQxxiMJ%BNIwsNb;z`L0N68DwoeV`k&F3bh~&G*RBfcSEZm+! zg}``!TSd_9cqhKVQJc(;o!Kv&r8yVj**JV+7Z$cziTV3!`ZnhrNc=yX7wrKd6h*Y zniYnIhlVsNtuicF8=wmCSAuM7BBGRwC$#C({|wc+9h+ZyS|^}42c7n2I`;G+iN#bb z;E`N-LQcib+J(0p8c8pQt8CD9KV_5|$LQ_?vRt+zwYuc*?ONljo6Y=g{~L$T7rIdbge% z33acXy){%T@m3WqvrV7G)~qQWFM$SoJdK$IZp&DpX0hGt%9WRn%|rLOesMJQLU#?1 zpx~v7H#qNSbQOF}_d$d?U~xcekukD3Z2m9jM}cnz`-=UagGFaI;sF%^5c&NXz^l&n zG;lslwk~+$p(4mnAaXw7!@}6}*oDy})-xW-Ma<@1#%A(j^j?DrENWT3dYTCpU<;#r zitYlbSE5+ruxW9uRHPM-Di!xGAOv~4%(n!`hZO+|&+ve^iCd?>S1GN^XJuIkqY|hZx}K&knw?@t8cZr`s?rs+CWC zTFsNn7!pBT5gzOeTbUdXNZY$U7m!+rrF0p%_sWcmDC_JE0OX2bB?kGMyGxV7rt{?* zn76HDFIOpIAC@6<5G0zPAvFH$bPZyLVf@5w^sU#Pv08soB4!RwGZ131~sMt-*LfVqyDRu|85!&u4;2Pn~``@0nx(zs$!UW0D(1kjDVLFdFv@9py zt|(uUbV*Fwu9%d%VKcvVSf+~Jw_Osu<2VA!n1|y~Zd?76X#DKUSD&NQ*l87m><}(T zLNJxG^$)#dg4_+gAaWnpTS~8fg?BGTq#2rUU#G@t}v< zd7w7mfCuwvGuOpGPtpocbR_OUD9(w7vSo+jU7wkQmB_Cww1B^&x_DfN*{yC@D_hBb zGu}sDohs9aB%si(qUC_)99FcOGxS#b z0lW8gKB~X3KpvwBsEgLFfje8T7qc^bfrT(MkZaJ5zB4Iy!EmnnPYc>(X*qzFc@Nyi z5%xQhYjy*k1da0NMfSK;httscf17{*fyeFVtUxGzA0!p;vKHdDBVFarkHq9>MLpiYJ<~l zM{>{!ehBsWUY6$(`N#3dEg6qNVfn#fHKI9IVJe@dS~_T%gZ7%nW9=ks6UNomh=8c1zIF9A%Wpd{_?9w(9{<)l#u2WF#pRD%So#BLH1(;Bt=n2d+H) zYM*n>&;n_s25gs9xPJSHrtS>o4IxbxyX<4zuSJE{Ryx$VS)q&K;-B5bN5rObu8E@I zM}yO}m7Vg_7^r?i88bfH1*++!!C6ifOOMu8cgNmBz_b?nuiC%m*^~A-0^!j2J?9B3 z{D3IzO#Pm5t)zf+qc*le6A0&ozXXtX{O=UN9z#wK>@yv=i+{sn(PLsRB2Mfu97d}g z_I;peq%LdcT-1p{UfYC?n77#Pbo=)^vn7Q10M*8^t-?K8I=Ld$;y?-58s z?|vg~B42v*K#{|5#HH57ntvkXN)ha7c*i%_b3aoe6|^PFn-wM`WKF{$yM>Ok0yF(G zAYp#Hgf!w%^XS1x2QtPai^%pjm#vH-it#*Zi%MKG1|!q=c`94KkA70e$MAq}BfM%I zMkdtny_4$&t4VfBe8E^3k6sK&rSwVtkKW%Z=hRY7bzaXUDg48OaS(-Oo3g|YZbE^s| zB6AeZ{AKvO5(+Bs=FccdsZ$> zOU)%ei-8&-lqKh@59d0a=>D5zANiI~seAJi6Hr-rO7HjMwVlQ*nw9!_TS*i>uw}b* zFSg))SBj#eLby$Ha7N4+E6pHGt<|oeE(9i_{&1*%?!flKxvt~Nd!i5MhV+8JwGfToEW_t zb9@@@6g9ykXlzXk{BsXT%H7J?%5e*+&NaXzeyF`~=&1sh>>VZQrC(x;ZSltl3d=I# zoQ3g35BIikRdTzFO&}wTw@*7LdyRvJHJjN*6MyJi^X2Q&#N|6peeCu}=RPu8m#UYZ z1+O{bx3NlbhXI@&upjl4G~KW~6Dp4K2EJPWU{8Q<=8P`1$ULIUt9ATaTgTzd#T0AI0_@VE|$H0G$NOH=-EH#Lwol!@W(K z)cUO!vMJp@TZCH9dV z^NCA}U`Ryff7k_Vjv3CQ&5W}d8Z|5T6u8fKGLrOWbuZn?5oXt4z!6ktI_lIqpXj^? z_pG5_h_pfO)8}?v6wz|;)Dpl%z2QQ7{39zi`q3tLfBg{IqP8`tik07$R)mVfesb}< zb^9A$A3;4WRI8zhEKMd$i#X!yzm$~@#d}{vHxk}Mn1!d^wHC}T)xH~7q-B>@j3lX0 z;)EBR?de)uhLK^pb>F~k#dE?{ko-RcEOdtL?*2LxN)PeqS?=oxORG*DxlbNk0#A%< z12C+nxBxv3R`e5`l|MN^VsO8KfYNSw%^gRc;oRolwr4`GHQYXrR54eLS{V^cG^1;q z-xMLgnqLK74{U)_Cs7$dLW8XUba}a#PR#8Udc}pZQ}yBcqHp^>IPTM96X5W4*HPtt za#$@uNSn;rA@nJ3&?p7E&iBjnXp6zzVF7dIgeUyEV2LW&M(So5r)dASDqx(eS zYwmFmj8Q`@eGpt%cPf{H;pfecpb1})uKtKxsQHI#A#jYz5=+_eH^aB-B7qzOyGCiU zA>q>KSp%e35->6%N_6xwog;VB;K!kXVgl`IeACDFv4yQq2iRz_M;-Ak_z3mh4>GRU z%2Gc{j#IFu!ndJoe6!PN&4Hs+-^(yc*E<6_?~#9umnqZ!J*v=4c5pj=pqyvth7UNv zK+4hJNJvjzz>4du=Q8?a5q5EcM%0ch0U#LUjSx>K6&1Z7@%X-hgcG?d(%P>GF>S$L z6BUpGMg&q+dfH*;8E$y}8eKJu|2XgWLAe zc%jt6*prteT+$KS6#N&ksUvXh=+3hl7Sl^o-Poy;l_j$?;VzF+1UYYqa3ek{K$gZg znY#S_R>IEopi9#N!vuBv!;KElx*&cNPZl^Z8g76uw5MFT`;3&uu36rxsA$4o2q!Oh z^Zs4Hxj=kNaNWp!2Vdd%$d!mZ9)z0DqW7YldsWY#_|GT<|2V-oX-~cn!0%TF4xjcs zuX+a!9q1$)Yjb_y@>7!1fEwOf(sH^RWAJ1E>d;qu*8h*+hw&Bn#nJ@CG+0T_V}v7T z#=AJ{`2rPZkufF)SG<%$W?&;a9b6LWDSEbp1&1^U1+UWI1|#vst}S*{Th-Q}+fMo1 zEV5it0GGyW=K>V|9*w@1tV{`neqRM(%YyC|iLJKFF)&6AviOQ~Ro$vk3WT3EH-aW| zPPp_fWTEaGtPaCDBu6Z6CD07rq=y7nh_@#DQ)dB*9;#!DTb(Zc0F--OTVr*qIkuKG zAx!}3ev%=CbQmf>Ir&=$NSjZd7aHhp6WO1fvYV3k4=$TI)78!_tl?tJG0!eP?Eee# z8UO^{c#$2!x@^zGeASJg;iEl)*ASl8_sIuU?$Ae$4b>wzDlN79=6F%OI#fH`_>fD# zEa6c4QOKGF*$XP>*oMHp4Csq#JgUVHu^!KgnWK~JhfAahGA(DrB~cUB;<22B@w-5Y?wY{4^iC}8sm=3entEH8fO zlT7o_f$`>j0;@Vb_bggVPFMV#_{9%q@cWf;&1B%*bqD4!`?xmleWd8}aj1m2U|dZG zVX78dUil~o_*(lQWWR3o6+eLf&6W4G0MKJ&S=`rglx^n`PE1yT>xjJ=bYr|qj1B`s zQ(J4x5hdA25!|!u`uK-EC)0gltt^ zrI~q$SBEUQdP>wP3}egfi6;pPt1^+C#fU^s4!3dDbNkE9A)`$8E_x^j%|eEC+PNfB zlk{u_^9^a@@?9oB_l9E&Us!A_wJI-zH=XdiSY){(0L~BDPWvgEZkb<5RVD<2zpMbT zr$KiLMwi><7#g4kSbWB~Ds7f1`$JEee+9>Lj=S*9WhCz!EDymsAcxIw#L)^}qX+p@ z32>^?RO(YMjih)v|NqNj-=#rPD|q8BtpJHFxH=y`DCjw`r-w$(Ki>^(|iN2k=kkT)4I7wWTE-q*s zTNLAe&6|fuaR_t&?1%GIzmsT+K*BjQ;M2lu-$<{J*_{l+Wk+1xB)Apy9*@)L0o1S@ zdg4HBm4jlAWT5orC11jc&#FZd8l4GS-=a!yPxY#*X$W!G>Tp_#i5_uu|G{9pp1Ju4d=eoKa0iBy?*ySNspgZF~|+$dLjfdUQ0S>l%)V{T#xn;RX%dab#K`xFrT05C#EHjpYO0VC%2A2Wm4tueu5OSYcXV+rz?)qTj_m@X(i z29-V}Jk&Zs_qRv&?EGP|Z$da%9e-{h_Ce6I(+N{P2@Vf0b5+3)_w_P_l=-|pLjS_9 zKPA%zfnRs%H-$&@I(|LUa(eWPv4-YpSP`u$-(V_i&t}ep!dE)cVvU^_CY~h}AE`(@ z15jM!_2ep!B)Yz``^ypkc7XY(jp*Wa9%Qk(TmP%HXiE1GeR-lnBN~T7x1OEB`SZc= zr1sI=(KDtqD)>35a@dv!S0n5jjT9vhEbpkQ-GrgH(g)bJr}IJMV-@@eO;AOweihWw za;=nw;Tt53p@CeLYV?g+t_y~1EpST65kuP!w8XdXE`gx!nwW=*lzW-_2NDu$T!JxkhzvGMIP?s|VzQ(pN!J2#(Y~`)Eix>#Q;9 ziL;m}Sw6#9k67tl_=ZN;qgAu{|Cf+S99i1#7-d8Xb`#wc7=GVmN62{PR{wh{({k=g zOnjOFlU>OGYXaG~C6#T2VDM@cmhnXdTze=IcqXzyjqXBLsRo)04tiu7U59z*-OKA2 zuNLUly<=HJPH|*jU0GwvyFFi?^Oe(iDts5e@UCnd-Bbu{AhX5Zj|LzxJMhe$3)p-^ z_&5AitIJ>dB(prVVSEJNz^cx#eabeHvsHg*0g1y{0sv*)a#=VJy})_Qzi!P2Uun90 z9V=n37&p@)n5xBAH@?b2em1@cx$j#8q)(vIfP@EH0O;}YEFYUV%65wgXC~{w^~K)w zyK&xSM#sV7>209O_~o%#fsi&>a6lMP+@es{n-uhN{%b?j|FIwpP>K+(Oy=GqA{W3z zP*I*y^yP^3ig<$`gp&7kFiew)G(D^I1a&L80xv-$CZyp#K2j+YD>@@f5~(C?3hsKTQ}#HOsLkch&-kUFtEn+Vkp zGi^+-n z6dnSb4ifv|gd_~N)m)YcQ$8v{j>a#Uy8Po#(%$UQYl{+t6m_T5oer<2V19Ei4mdCx zZjc|emt3XCoRsChS;4vJ7}7x)XKxRy;X}}+AYvP6gP3AxKk>wvjmSJ6gqrWN&$66H z4WEJd-&p;C1i=JpAE7UR#k(WNZzq9w!=r`{bc#P4bA7+cbCU9)+CI9{N;*4Z@KgZm z@OQd4|3f-Us2n=H*fz)3IbMOX(zJq4N2KRRUX9C4hK3QT8(}}v`3#eAqb(AdQnrH_ z?PFa=0lHUxvK3IhBk`F{^NQAibKK(ug-x1KB)5trA-ze9XueCu&cxli-eR|dpt}`X ziJNTV%J|Fo{(*PLl5{YeR1Kflyf5_ah!E#*NZ5 zI6_|)Fd$Vx8;?2T@49DX9|fEzvE9Wl*|!QBP3eDTWIW_DsDR?G0rE{2UWxm2tPKtz zqwT-M86!ic6WK=lqmc-&MCW+HJ;RE+P)@}SYS@J4Iakd#Z4&7ZApc6-E14BpR=WY) z+~^*XlPj5F(R?~1bbXy75`>NI4&9Z0LAne1JBn9#8|}@@t$B2oA+Uwa6ni`v0>Ny< z49dR~+lb-UH&JECUu0W^29teC!&ChIR1fkRD#41*d^!lShQ?@|ZFXW?k1BDr$?aaX zt!F_@Di?p_?MBO@F>PT?95s?5PzhH(PhxaanUO7ZgqIVIz#$!RS_>K;b6*KHQ%K%; zOjPnQqYTJuly!@cF~)X5IDbz`N+i*Y&jxQVSkj6x}v4VvhElC1*SBFoKerDI+MSq zY160EE+sP*WQ^ZH#Nc+) zVzinc32|qMc^K-y_{YUo5$3f*1L>pF+b!s2)~D08Q)*IB`fgGnhIDDLSnT+{jMk^t^@1& zLvB-BQevu?2w6`>a6&pY3F)yF+P8v^=ivEfqEAf0W20oVBRN(fH-KV!#<#eZ?&})- zbJ+g!?(V42gj}Sf1P9Q;h!vvdqS(TgwGsqsl17ryoaHzki74l@il}+#DM85Di4I>r zKZG4CL@Mm3GE_6La6i(;k^o>rBgi@NXrcr8U7QL7I+=7N)I=F&-f3VON%yUUeAwLe1lZ1v#U~D@|SP?MRJO1NB|=X>|a9@@tvxs z^b=yrTvhfFX30v7nzfakB zVRuhd*Oi{jUJHe$G)TfLjP`k8S?z?Yn6>5Pg|{5)&n{Y{p1ksuXfSz1CO>EDL^8GF z=Tq)vZr0I3421nS-7`Urh}waiD00xQk({rD$svux5i)O%#P@n*XWs?*+to9`*tnXH zd9)~}Igvg!PJoY~2#9`(-5+DocRorX-2E_*>XP^mDOeG_AfaP757!tzEFrJY1|zP>*gP@naOYsxJ}}alf<@>+ zOCr%oa&VzhxTn@H%W9W&OOP?f_dq!PPQ${Y**@jC1NaJZjG@|vXx$#H7j>^D*c49b z!@={*L>(Q6#YDNf}EqP1o_iNi{-0ktJuVp zvgY+`m_m|No8dGV1}o>f45@YDB|ym84i8>9JAfVjjZoNKW~8ob>T;-sCGp3UMv!yt zT2~kHvoIM1bUfxnsD?7!qB$eLNY)8hd9HH0;y#unH*#vNBhQQwH-3B*mlkcnqLCjh z_X;jocUz`DFM@CINpOOxM*t%SY}BoQ_(D}n_y#d)qJEY04OmgDirH&4kjA&hkA#el zoeS^Z%vg`ojb)+kFS1J^gI6=f1=f}p^+ZL?toyEd-#&F1?BedhshD}`Iicw-I>x-K z=0jIrMZwMaeajOLW)gFHlUDtGGqz=%s|Cqf@^L^#Su@X=(6BQ7G6a=W+8L`=QeN3J z6K5g9UzU~xY?iUKV2Qmr!H}A!z_;T~T&siSXV1#pOCK6~njnIzf#cR8aF*JaS7LR# zlEBo?CWs;Q+}R!C<&JCrklUz&mQ6qK^EQDY5KN9tHH)#pGr9CNlnlB>xf!zC?5P z7f9}U>z4yoKwT*U7r2kNQ$)Y)RCc$mIG(ukRUuSaktVLy1i9ZRu(PD|EeK<*U&6ai zu8`tfrj})YM;)_TdM4eNwH}zcK?&QFFM>c2y;c6$1ZgcR=0N;>4hKd0tzJ4N%G1~f z>IL_%B)PVAeFb@Ppt#QSgSaqn9U6svf1$firMmqr^gm1~?eNFxFm(PzC{5y%g! zTGT6uX#@4Wn49O4TuJOsv!*n<34Rc0MBGHg;Cj+xxLOzkb!UNn91*mf9wxAgG_M;X zVtU1I#pmX+Wq%8I8%EXGUE3Z-f6gg-g5FF)&+THvjR|@b3;=NNesjg@cTHU*#=2Bn zS!{{HfUQk1;QdGe%E+Ro|TsvP;VT$3AgR^gdVJ^Pu#T-<=l|5LYVOanpyR*XZrf+EVA$vpJ)ibSb{jZ?a=aS?-j=pGG{?jBz4ZPPfOF#*wnU8XQdfO&aos?|UeRDO0d z%2gQUTs+zw$j@hexA}6f-&*@{G^^))KEGfOvd%lJWo4f6kpdV@-6rCU`07Uh=aq-P z)`&ekzs?{I>>uJvbrdbL-J@%l7AWpu&eE;lA`+(4oamz02DmF}Vmf4{%VnqgS0Zag zsdVSqWHhDw?_Me`| zduP?%*Go2fkW=MzLnxM(eac(vf}UWF;?A~C4krAs&4~q%&>KnU*&Qv}(SZ*_008b? zZmw9pFUhOKSQqNc3(YVXur&w)I%^{~s1KCo~+hZ8rNiu17myZlSnpj4;!C44pW z;x0}wq^60Q9jvdZi)nW<)d{FET=S&Ei9!x?_BSsO#);)T)|@DdSxt=nW}a1Ff%`{^F8p~x()-GQ$&C3 z%j}1EIaTPY_ZnLR;ZY%U>jM?nA5Ln1W8b9jMZQiqMYqGpw@+#1R-ZP+<)fc2yz$`DYLssOJ38| z}BR^c~9#E<5yhwgp0AJ@D=M4Q54vg%-UaJb?3soud->rsqK?iN?YRhcv z=G`e^829g0omrF3D=2pp4p6;O(edPqu#6`)s#!H=Kmj16FKi5#K+wGS94zt*l>k9D2i?g1nb~H0BHU z)(8)*aJ@XKVtzwSuZ-BkuEId(m>+S%=9TCNydLq4tMV_wpuZBV&-^+&S?LRyd_Uo3 zje@SP#TR>5x9iD0I@>~Rim1y4;DYvXc1q|M?Mv>qWk=(;zN&<(%QD2(8z6VtY3~EU#fAHod5?^gY_&yOzviiFs#WFAPtP%|Un<*o#oSv zZ8$k26ErTiTVeG()hIgT=JzT#b3dl#)9;bi{RJ_YRuHCkiir@Ygv(BQp?dMu&_=4l zv+-L0fOZ(|Syk8R_n2C71Rnww8&1Lno1R1JTueQQd`*YJz8ZGj z+u_C}WRdG;Z2t z>qMuft~9vOliW))YU~ytB6?g1!&Li@qii`k-o^{k)O9TkVL1<*LF!} zcdTOn$lZJ*-Lf|-_Q0kqWBR{%mM8^qnUc!@6w^^?X+_i+_OO!LP(xLE90QQh^&{6> zmAL0rq@p=Dlq_V41IVpN=Y~J|GyM2fe&zytPeFRh&)etY*@TI=XOU4X=ysmEHE=WE z=~~CzOM-t9&Dpi<0|l5jHx`=hB|-JJ&m&!wabDFk?T~zcV@ke&W9_yUUzHj zb}(zA3Yv~~1@9?<;mo|#PM9A-Byd4x*t;FsQ)_$dW6|L;E>xGv%3H%bj(L${?`Aw) zXWb)U#?6@Sy1k(X66PkOk0zY2ra=E>Y-tu>J^H{%K{k4owJFWUREr_Lx0%%!;#j#NL7T70|!7G{J z0%}MLx}n0S*L+vJZywwBcW`&%R1Ls~9oh^zM|Bs`8~WBnu~1${#F+wEQFbbM1oAxa zU59$V$-N1`c)=5av4IsE8Z9zZ`BzGWE)>>W>X-sxbtKThw=@2I5qNLBrrA9bnbY!1 z?9JdJ(ga0L1-GG8K6>*MiL13I{G1A*SS74VvM7kZD2G7*WlIZfh1iG@VTDA^P_Sy* ziQOq*jIZZcv8YULuie*EaJb{jFM?T!UCn5VnAFSU4HMycbN}>uNcg{m5!1eL{1dqN z$Q0lscXrOhn|17s=kHraUePn>zxh-N$?{)(H}2G`U4>UiSTy+E^J;rf#m2T$)Hqo7 z)Q6k{b-~&~0v#K~DadB?+T&IDQO~pOTKwVA00`fA$UW;E2d%Z%Se@O43nYxRV|_+ap+}Q+tKEN~iewqAJ4O0B`pL=PIR@NQ-~_(OfIOwSP(!DO84P?R zv=(eJZZR08Cjb^xNw^MKpGlrP-^Zx=J6GSr!qt#tVBkK`JSz)Yn0Y4Y_JPrgu z47T%(CgVY4x`SDhm|hq00Tqi4tmh7R>|ilNET>1?j)H5&NTpS>kG%Z98jwc|xPQ>4 z(OCxs$gVUC#rlEkbX)kGh;u#0=K{50vDuRSC&ru)#C0NkBhu~NHDrR`!+x}Toz}z% zs1I`cgh=F1d7A{7d!!Eukt$AnCqp^+ypsNKjQdU$v&IIshOo`8Gwv4E6z`Q7Te zgFoVaIrJAJ64n@RKJR{TO{WkVFFRw#ygT=9ol{bi#{cX_tFwt}nI??C_@!Z_yaKCSxietg@g zP#2Py;tS=zokpAMBzwT=P|>4H#=TDGY&BoKMV;p|-qOXn8SW6G6KHw16LF~Fg&{32 z1>2Snf_$0FcRRNcPdf|?k<5QH+($I}w+pvxy$rnT3 zBlLGnMB@Cs@{+IIDNTz-!Fnndn{D_4c{5N|${}#ke_eNpH>uw1n67W)Vg;K7TcAOt zZPGMNQOVBiAMYM{QbHyB{~mJ9t=Dt{Vk=h*aup5WUcIApCM+e92=0Jx0`wIFD<@qi7SJiU~*w<+#UA#+^^gH;Y_f zg!BW)ZlPN36l7okVkDX11ms2GFf?IPCAoGzhWV6&&gQ86jfUd5(%hva1|x%o7RC>W zxps}G?P7m0oLmSy>t*8s3YjqH4Z0z1HALY&02Sxl=N3N+J5O4=^N&XtBuQaNcs^x; zcS;L^2P$_2XoCyGf!$}%qXTyn>$x8WS@}SCG_(OgthC<|yIIv?1~7n#<{^=$p5?#* z)avZY zptP`nOu`rxh%YjsG=K#w_Ne-6I+Sd22+U&?3HI__Dm(@9x>Sd8f++39uUZUy(`2`P zYjiudGw!#AOF6)O9|GA4$fBI1ZM6ph3=o#Pi{!rnyz633U}a5s<)91lBJq z{@(!Gn_-;DLXyA(hZO=X&v02m)b}l~E)NZpx{%KhFHUkK=IW2v5_hqZRQMaif_W(; znPjJDwbGW#oBTT=Yy}gkVCD3L@g6Qlu7G@8$_w4*U+F}AOJD(AMbxsKv`@x^ zs9>J4HS9%k{9PF^-=>bgn>jE}L5Gzw?~XqD!=TRn!TsN&#r{O}buM2){qv-&Pubxw zHQ}9Ur!yxE-sC{gd%$lEp8g^~p?&3~m1vvG#qHmBDP_`r_h^#>oCEx}I(!OSY+K!x zDBb=io?-+NA*of{4tXf8u1GKc>?eZEquAg%in^_dFPJbPSm>Bk*A$kYn^80)r?s|F zC>!Ti5YMR|Q-;D-2E1fNpx9|KN4kG!hQfdYuSc){)IsD$y5!|jws|`=A!afGG#pOX zH_z;*95IY@9KUZHa?s-UhSZ}z%DJALnq!FH5!~bRz!TnTirmaomOAB#q^f@!Fg3jY z-_q|P0F*f1+i_$}yA5929d@xKl%}TO2^fPsi3O&ly3in{t`!MpL#d|wfE>nQU@yE#=SRiN&C2O1Hs$=8I-ehtal)Q{=&1j5dt=V zw;e4AtStyH{1wH^G-YtAZ1li}y5%UHS>zCkLEeaW1_nNH7*qn>!Ac>V$}CLu2Qtl@ zxA%eCzxlNZep*0}+JHiibG)kC zme^_4SKjh^)_1xp9p}vjV7 zu~Ne@m%qFhxC`Z^BHkDlEXrxY$2>MLM3>n1tdECpX&w&@ssJ3h?~FD*d6;CTdyy-4 z>4aAhvw`IYucFxALyBSX0Y-*=ttH5^i<_wh`wu!!@lCu%mNM3q3b!5&bxc9YJSvN` zBr**+d-I9dHc7V2%tPmLrbBnrX3mF8B-`C;<+fDbM-YyP(wR8V43hFQz zIEOBNdWh$zQTtARCra%o!cK`dJAI**^3^v-ZixwWs{1e_ zi1J;@<17`3oJ2kuLi`4iRqZ5(fgKO7A#INI0nCJnrX>f@p@9>A!}cd3TlGA8@eKLn zb;nEtInM!2`IF>ko^sSlha?q!%I;cr9SFO>ZT>*ySk`k4Jg{{23rTzV9ji?bdu%8vtt=z#Dy5=_pPHoG2OIvzA^aN_7g} zhhne`Gb(wkWOc{4{k8?t2YNB4S&m4ux?>fT?6HG zkXxN zlBE=ZCl0L#TAb31r0CswTs|Ba{GSsQ)R0!($R+cd{RW3{iOFQN^>{7@g-tmQgE^*E zjIW{^!K}vhA)>Bu{Rr-yC0)MB4S6f`eIui*sZ4{<_n$BSt+n$(`cCVN>KDO+!AzT_ zvo32yhHc<#7NH9BA2s$l*y&~PG6xjG(Pk(O{IGNvkci4lkj9Yoe9QoEpArfSP-zFy z1{aP6yUUzI2ktD?b3X{Q^5rDn4;PXo7sy1@PjX-FkRn`vmSg!L`%X{<+=QIkX~e}{ zXMmRVfMKLph!{skUxT-AJJU-T9-Tqa*_wz3S*du|o5&@wMCM=JE~;e%luLd(Hlr}6 zfe*EVOCjwEq=6IE3wuDOJ|YMP$*UJQy8Ta9_@9jxLJVll-g@MCd}XD}pN%5s=R&7? zHPBnuDs`_xZ4iS%cX_n^Tw) zl)q`F7S+znexodSh3`PyiI6{wK*c$CjHR)Y6mq@LM&E5}+cpQK)d_i=brWQ965|;b zKwXRG0gESei(^I~hLqczaCn|Qy#^Zl_W2QU9>K|SrSTmsVQUv#xO@> zfhqMzSg>5ziUhNsRMWk07ULkGyW3*!5s>$p28=UUX=irXLfESs`^9VR^MSoV?-g9i zKK9E%$hJ=wm2uQYfoD0~7t8O!NBnt)I?#c>rlV`)4>0A%*zBMX+J*-+VU8@!H8T zDhj<7?hVQB-0C=gb$~|=Kt88AUd2r_?3CIIA9-zyJ3W<-^Ts@|-ocUL`_2zW;XF$* z0#7W~5VSm_B}Kun*Q|ORG)(ebt^>R{sbQ$gZ_YE^xk^F-9}G(d<&=&bch zce?hm4ZHrwmX$7 zt*Cs+KN7;0(Gd!kkB;da;9}%+$cM+>Q7uPEN2445bLdH;mgFUTQ|{>+RistF=;Nbt zkwMTex5p=ypSN~5`$WHjzY5k?> zN`8x&uAyP4mdcpB3ZH)+dNpkmEh9ADp|(fn*ciO+GeMzn=KF7W99hxBkl(;u;q5TL zQzm5h>V(06F8er4g~`DQm-5EJ-n>gy52;}m+Z(Q~?tb3ZZ>etik+K+WJRjJOeOVmp z^C7#(yHuQ(45gTdVt&(8Ns!NE5}(-%@VeFvlkkquzToCWMPFi9fiBs=3}=*e{B5oa zK?nLcA{nOu7f$hRdVgW4b#ChR%>0(t#qCg@24He<4>fm708rv_=PRBu<-2fU`_S1! zP+D3-CT|1_B!-w$8p52FdfGUMjigc@1M?6^fxWew3s0ZCr`Ug#AyRAoqng6brOP!B)=1BB=2E$QEO_|HlMU@Zf9qmK$5r3wFIWy3o* z(u;WM_5u444EBC}Ff{bF`@kaLHc<-YWM*NaACgI(o?i^osf;!u4d&jpCLp9CZ@Dry zEo`bQpsY@ut%8D(YoqR=+z+gG^5;5w);<(+THs}!mHhU|ozbD^ms!wb>6%PU0;@0W zNPh0!K@?B2qyq5x!9M{OC$yp{dbb`I_xlD39mqF?XGc{EGrf;H`P)^rf19bJRz}$~u5!&k!tzheVoungs(`6`{`GfY8F_f5Y~c12y|v zCUO)Jbp_t0?My#zc$_%1Sya@{)ceDOUZDrc%xs|dq%&`J&!vAnBJG+XvPK5Jje#wN z)8Oh>bkHuB($0VYJfK!*`=4U_pJMwTD7MoW`pc%>y#b3=NbkH=Fcz6`JApMoJB?vl zXqr%qo#HRIDry*wFZo?VlIZ2ujrX*@^30DoEs8g)`{%;VBSUZZ0Q`n_(EJgLa8{k` zDX(4boLyXhQa&K+I6-~!$7E{%`T!sW4g(SYC))nchPMAD2E#NribHHy+{TPVbFa>3 zNWF9DG_3Y&LIwsPMv^J~i##tJN~Ub0B)4j-Fx!;Zz8Km2)>jxiT>X&1V5mRW#Q64S zXVn5}bI^~Brklby>d~l=Lc1hrjqgCql~6c`K*cEsxyjeuH(gd90us>~Nzw?CUe`(B zl`~x7jw+P^+W*XJ~>q)-E5Ojcg7Os}=Uh_S$6;&=PG0(mTag#E@l8 zCo_?g-t(HhZa866k@By#v#WOQP+cEP#x&Jyoww>Ob#aX55WHO4rhaK>r>qL_3*Kzk zX9}74^c=szyqNzwr%4m)4p(N@G6R&|lodg^&%s8v=kLk6T}fv`OFjbKCn4 zmb~KPA~FRdSRk?Zq~c%}tmKmh!AvC8(rB3bSPJaTm27wh&8MZlF-RSTMmsv6S*ThOj22x>O)5!rzIOPW=IUYnNe^0@p(>AROUCVRGrJUHv zL#?<=@$$*8FPfztl=u0Mg4xQ(lEG@(DHHvj4SfLl__WqKZ3XFMe9B+}Jw((BJdLhK zBk2$xiS_Mdar}H3Fh3S9gl*j!XW(ON*pJ7bgHTWx!H~h9(NX}yd-_)&;K4;w^%h)- zH#&%JjB>ft`tPzJ=>0()o{=za^&at=YxXz9AFvTAlj`^^WFeb>yUkev(=9M56NaLW z-_L%*#6+@(Ai?j_xd{B)UNc+tXk+=CcJ~n3>c5fAQFy@jLWLJ3-M z>N_Y=y_jrhC`t^J_+=G!JZ~cZnh2-haIH0b+M($fYxx&+lqh+=%)lXO*G~-5jggLC z1p~H0F33L4#PWxyqeUctM|9Er%mU1?%$L6+O_GdBZavbn9NCATGdD-Sq=@?caZf~} zK*aw~wEa)C{qI9t0{%jfSd*o@-3td*k?Cf~pzuj%;_F4v2GQgjEu?yz&pWXbe2r^= zO{+1+7c4CB&8OJ5MKc#qzE9LFlovQX*R%105Vw zmKk11yMk!o1hs?jkjW1SLO=?C@+eypZe;^KIDa2WXhFM6<1W|)BqG=|8T^~6PD0~l z1K4Tt_lWeT0MRVm+N!bnDq&17CRM;rPtS?2vkZ$GiQtoNc{y+!8-% z5y19OS)TP1l1D)TLu_&C+^9FOc~-l1AmZQS4YX1%h5)yw?`wqW)CBc#i2~O>q+56j z(*VO#=2Gsb$L$cNvI}5~HsNg2yJZ5#Xk3c*Ys54Z!6-P-2yenYO}j0~4erKxNJ*o0 zTb2Cvvvyag%J7W@4tZy|!k3j^=5KajK1EPvIH8_%ONK5yCY&h7&O*}3 z@_YTe)3^C0F0eUAr)djywv=4+$_@W!rFEQAaU;|j0S3C!7CPN!q5qI2-C`uFFVYj2?pOotPo8jOdo~_p!p&0%mgxKyXY=(ej#=eO#I2 zdXI!!ehi%6=UmBpSM?8$&tE5S*bvh|Cf|`KXjd9?pH%_eNoveKzi!0aX5LaJ(uhEr zip%G_T>Ia|WXaVj8dqI5EPaELqD~)2-{`9Mr)Z{iQwLZl2tppL((-!$^_UR8U8t?d za9?1dB1~;0D48b%7kNZYizo|xXD3NSvq(*JQdP|mTKP}4N7v@2?k)(`7h7F|jn-xF z!Y6L|IZvXX6@3T&r?%3RqO-pRna5qi#7Mt-e1O)&$;hz?;<|tVQ?ERKX4q;7mb_}} z^7v@LDH54cFj|wj{je}LCd)gP=b4j<6(Ut`0KJ1yS2J*WdM>I~(=&CZ zwL2H}bL9NK#-Ro6EDk?n{vr{{o=g$YO10+~DeKEliYHb|J!x07DNeJ%Xy+>IT@mMG zJ*QU5Zs&E!DG$bFKxPir`ajs|qitj7ERyHhd525b9aMbvOBqE^LLEWJ4%^Hb!W|?> z8C7*Dh$d?R0Ihf9g+M#$Ot&%)|0`n@_iYa+YJfS^hC~&*$o1_{_ZH4A-2P#_z>dw1 zy;T)2sN8HYWDt0M0aKwvf1!XgZ%~dzS!|wJ>dBm}irQ6MvZ>;e!UEJ8J4v1d4Apg- z^VN5fFNTRnxk1dUTpK`l@{32ctb}gP9}*6}9xmRVtA_g^I;JX)OUwMl|{(u31!GF-ZByb3FV?kMn^S<1BJBNbwqb>yDZKU+k62bM+;O^G=l)mU*Qg%X zPWQ$n$r2NVav3MSk`{j^ygq{^odzeC#n(~Rg6#7r znelD&EQE*9mWE1AA6|)W^1hgyS5g%_QN7(6tfE)l$7&w1;=_rrOxkxBV-t7>^ zhI&_L{k0fPL=J-ySN-*!cxTa=V=BX0@h+<<;G+O1NT!CtXpiM~M?%>eE^M2fWsW75 zh?2Se^$2k*?cxD$LJ@f%12pcA?(5Y-e+Ci#P5e8+a|z*zrF+Ti{$0(sd`FiA~EMEo)@X_-+3jB<(5A>8V)Z)QO!y2&q$i!4Yg?aqq zhqOir|4Jpn1qzS(YER)8bcAe35GLbVHeabw!NG=Ml3nyj1G&ei8`EEM_{-J-iAZ*= z2Y{9;Gq6P2K(?AZxSDE3Cl*a`76pdKpW)yJIL~J_JcqV7px2&xINtNpyQJRW$zA|$ z=G(8CJi%VafD-mXxCwwobrO7fU|rkj3dhJV?lLC6S}d#BdS%@ zb!y^>aL8?G>TE;J-4@U(Rs4C6=sL?aDakUH8ZbhjtkXTHuWale8vuRqJ1l=6o}Iqd znRh5#xD>xF(%Yen)DvC3kG7`CDl(eZSYg$?)Ky6b1YEqu+c31kOFLAp-%2=tmBDwrb?-d2YK`I)$uL!gN*ZOpurdcGyaK}& zo?(=&OV0uv$9%ML$OUM3rX{5t=xsl}=J$5eq}<6BnaW;?=!d7UvZ87(U0jM<@P=4F z*X!53ttsql7Gy?AiPr$*C{5BoDg%0++)#N-?fQ|XVXWQ|sPXwl13P1D?8<+j?*D$S zsvnaZQmI7NRc9bzf-~V)J&|&1A8v^n$o8fDg)76n?=#N zS5#%L<<>^p3brR9Ap3(e1`G!+oC&JD@uq^Z{VcblZ(KbbKGFsO_QH1LJALp(A)R(f z`u8uUdM)43GM*58;{L1fN*+~)A>OM{wMFJt%N;%uIci( zZ#c{+a-JnR>(rd)@d#b%&64Y00sjM&2=xW+-A801w^Q;WxwNUjZM9A5;cgX}hxl?} z%TRKw>E1rAV8qfc;`djx7jJ}|T%yi#1cxp5{GGj36Qp|Z5?HEz-yPuJ*BjMgt6@fM z`$AZw-K*pt+RcXVs`ZN!YzW2ZR*bQ&V)8gDU=oS4=bmO>Gm^e#RNbktZ@0SIbabG9 zDb1oztn~I=83!AMab?9j4dRZRP1bDF{kPZ{BqG_PDFRxt_S^zx9occ=_;Rr)omwWv zNd_35e3`u~;;fwKSiY^7wM72Ml^-i2nNPEr6X4=7efjn`q_7I{5m_rRnWWI}hul`gI z;q3g)FUB+MsNASqMd7^a^*SR4f#)YM6*}}M3OI`f`|(GhyG`;*YGa4PM5|6$s$vkN(pDKvX%fQygtJPoh~*D3|y0Z!Q9}F`J~z=EFkwV5>_IHVP@>7lPi;w5rBCL*L%Yj<8dC{#gK=(Qq_) zsVEOi*+?kL-mT%rhI*H$eY9x}1r7rcmwgPJIj2#WBg;craV{$;;KTmMNT!BCXb+`! zhr-wzF6^2eWR69ah*H^o^nYWQTgUwWH}=k{TeP)X&eOJS+qP}nwrzW^Y1_7K+qT!V zm3@*w@U>i|*ovQzghoms*9xwF zleFdd=BI#abmsq371wF_0M4s4iJuidBOjKHKRYEpslm+qC1F0S_N^>}C6&xxSNdj7 z4szzdp5+A9$6EPsy+8#frNH$YlS5?gv6c6U+(?x@t_(|~S+&v%2E&yh2F5Cf#|9gx z_m!dtT*T9EyuDT{G|Onm+UO3Osora6@&5o=r**@Gcjv#V@~^7=hpG~rOc$Sw*)Ay! zKaaVi^8$BvWe$!|bq9Xwzq@H3pErsE@;Tl>=RKSbgUjjO!~UAsmY~c=NpK@+dL*%M zr%KfZnOh})_(Z$S%e~otPV1{r`A?zT#Ld*SgY&t%18Ik=-_3$52Atj5&FLlyOh1Y&SwmvTp zNZTDmO}TgeJ$2chTb)2VtKMh>x&5ce{gj331VB4>zKuO01=>dP=KK_teeUus)NjJN z?5e-a&tA(y*-NNI*E&C6>P|Y5APJB{C=%YebH1yi9vtx?!F`h2{UlO9e_merFJ~d& zAHJorXKVrzk*t|?0j(5gVTscItkigNwUqM?Et{fD3ycoFf`N5$Ud}6ejjS#~Z@jW_ zd=_N(NPWQL-G16mcHUBXf!%k6guM~f_n_o4%v98Iblj+|{9)V?YP2y;kNjw=Rshf@ zFJ36L)2=K#<7l%;p15yk1W^;r(RL)N&=tP#V5YZle(|m^<7IYSZrt6lVO9v zt818Y9r|kpoCT9I6v{H|oC;s|G)?s0n({3TpJW!GuEZJYRA89yv;43A(>y6mBFb%I zLG^|Zy3=1GsueYKYvG7+$gODUt^zIGC(%h&X?#ZZ9OUcfrI<(!86!|O=xsGtHxEt> zfnND9SALF;_nxXwI#w)Qi|?oC&yfY`^Ufc}*wCcp7|$xM(JEc*$s_^-F5e^WTraQu zaiz4*X>pYo>ju58S-@Bc_MuMOr~=<~UT2y|9IICDKe~Ju!GFJR(S2^*?#(HZWF`xg z(ocP5Z2?Sp1BS{yM=4v8nFBb9`D|;M_tEJ>i%ZtkUwOXEZsV*)xtGo}k~$YS2v1;b zP1Tw|yb`_S1F?Cj->7w;mp#zR$&CIiQWK1!JjCFn0O)miOXVTG=1rJ}v35zI&h;Jk z?|`kkC-aGV@b|W)azd_0r5IUHo`Qf0PM2MFPsq7*v@Uok*NyxW`~dT@+oY)$p+XO1 z>njkp2x$>lfIcp_s3v(MKi|uavokh^E<6OYLsA-k0CQL64s3th>>r}~0es7UZpqv~ zz6}QCd7_b)guMfh-aQb&K2;%A``?e~pW~QHLvPk$tMT^pVGzOpJzr?O}ns2Oko*0GICTey=Y@Jtq z&mnUI94N)h22%DqM!EVvDVRb9wSDpTkVH zgnG7mWtg;B#^~q{Dc3fVw-;AK+2gOuMg1hL&8q{-dGFD&vxA;dyW=E~&GMl&3`w#0 zgFfIoYDj?o*RuKMIrx5iWqj!D)p5vjW#c9IEk6tTmH7w&E#v|Rd$j|B$2Pe^Y=kpL!1y zBmM332HJ$CBF7j4JNynS!XvDqH1__uQ~;H@5~P-a@eXjkRt%fi^2uJlS>WL70s zh*G&7^Z{|R^&J83+z@$>12qp$9vdDo&dzXgC(ZZ1g?~>8O_V~eg}VBy^nMkZ`sThkU0<2S#W7NaZYl`?WXLVxuyqz)FGIjG!_`@I@`t7+G04?NV z2Yan!f%{ga5p0xNx3_!GY9@d`9*|kYf3XH5UHvuQyF#w9lcy{S-lRtr)L1UWCqKP0 zd+u@|Cj`AtIQlmzdxR_dxE;>&linLUP@ww_@;Sgr7V-RlVW+nsH|NerNNsJW9c>oK z6ZdM3AgY5o)__D6I?MLz&GZq@&R_jwyuyykjJsA8&nsW9(_;{LeFIaVL%*YdGij0! zLs@Q|Tj)z4u83Y&TClC*|AYmoJ8_mc^&6&TKjEk2EL{kbh;oNmP`xmOZtoq7YE=&2 zSU4gaa64MMyHE@FMs!G37@v|o7W$@UIwn#>#t4)Sct?%a&Vds{pilh9m7SsUv$wd5 zjuuJR;P)o_dvsFzqU(<`);BsO#poaHrt-_KZ-dHEtUxoeSw@D$WkSFYyCE742d5u2Cz zgIf1?#sjT@Oe<-LnqVB}DhB__hhC$%R6f*ue5a`&ZLU7A&flDU2p_Kle_d@H zBjiR@s+RTC=?@s^O#W8SpqxEJ+oXqbeJlIo$~Paq`E%K9RNxV8eF?%=E-m6p(Cd|2 z*=TR%*Gt&}cFLyE$){j;KuW_eVD9R?&Yf42jU!aok6-cYZJEpGkD-8kOElbEzefPl zizfoun_{FI|HD!BHB>|z*K6C~CXg&+YqZIg`Gry!7iY7{);d(xVzhcCXfo?t5&Tr0 zKN9JLT_$}<772f#Xi;*Drr-O zba$J)5r0Oqr{F{ck`Q0!8$G|U*J!~*F5(e4-T`qxwj7O2S_Xvio0ttf;jNVKVktUrh#P6WB@1tTa!j`m)~wT{0qr0yG4BxSBl#p zUPZ=xwEWfKP#X0dRsSm<9;N!k3!6f>@)CBr@DW*H#n%|8qR{v)_3xY)((u3^&XcXq zgI~Vz_1lA-+nOinsa5|~{?i*33k;WHOlT zK{gl#4DF#ji+C^cBYWZgpj9uquQF@0pF?CrOsXqBsSvm1Y_sN@9zR7UAQ4HPO%TvZ zwHB5r>&Q+E$Crye=+v^w&a%MhMSM%ZIvEc#Z>SKAh+T6G>pTVT$9bMA_P5Go2pFAzsMDIPjZd75a>tXz2ZU-ShWaW~F=ob0YqAE!{Kj$+AgfHMs8TXpk?-W$dL`F70y zoJ}iMjPB>=^_F*j3il;VGlB8%@m~!ONeV#Ey!>cLwm{c4O-zltPqZVq%GS^W>MSxH z?FPD~h3@K_Zo|NTTC+>Tl)QNQbD(kwwhPM%QQy{w#It@rMP4ZNe$>($LeN@EX3>sP z4zJn=MS>3Q@mh9$(nzOJId{tEO}nb!(H_$95IDR_e4YJmbo03;WsG6Y1BK^x^ixGh z5jcWom7!Pq1o-llZH#Dh6*lD8S4a+kQ^o()SR8_LR&ku}KM!sfecX#D%H2uyw#I}*=Aqwn_<}s)N&w}1vFWV0;d`yIFd9ScOx62 zQ%<~Lc>CCNB*%K*kdK~40tH+qmKo;H+#@)I}r$4g&nOgn|a8L{pW@(33hP0N$ z9PNVyOHWOFMk!V@1+k0WMS5&~@)$Q4=x5j=&*g4rX~kXz^2p*rHvYt75={QBbg;B6 zG)qj7%E-ft{!5xO4_%OuWX|*v`?t#&v&hRzDG~0C&VfL*pp%?Q;d-_ zX8$b09L8Wq(C5STVLLeVZw?hDF$E*ufff`I~pU7;x+_L(lhEf^pYK|6`V8^$0 z^umWhz}n%IszyWU+OUPj54udowYp-xblq=FHF!mUz5sa3dd$<2elf7~OA5n$8JApP%kA5y3-KeftDsV8RV>kR5{<_L-VxWQy1rv%F*%%UAWrzMfWm?ZP@l0 z2I8?%mIcYV@eJfbWfANYl@OwSYzzyhzr72*QR;muCD(?aH5JaG?I#|ce;E=9+I_@p z-1A5$oJQo_tynPauJ}Z|OU6Rr@GA6m_O{S1;2M)KhPVh6p3u=x5+Oz42%3@ypY7-2 z%RW(#?EHhEa^N6EH`ZmV(aX-+h-{8@8}olFP`NxI$fum*qh!kSDSt@3T)_=SE7?1t zt;nlcI@75fy6mI?Gp22SJN(GlhY8x2GcLm>Bs`%a8qXHyC*#7lKF3y7fV@qmc0*$^ z)AqQ~QxidgGs!r;M7slnMY4M%(}yy6vlS~tc5gU_09)fX54{5)xpgJ`FrA;Fk_5q0 zdlcok2*W!OrAm;5_T9opkcyEz!cm#zW?T0HER{(OB?zk0>4HQ>^YY(CVy^f(<%36< z<$jcO35Mk{E4IdzdYyoGk%Jk&C)-X0%3^14ODG#OCU+7BSCo6XTQ13Ze)@4>OhRnPc)B7~`UJLUWcY(qllt z!h{IAfok(3-W~U9&X{=P1znTWo5or;BV0=t0koOWhNqc8gBKY04rMK=-}#1kC9#~m zA;m!cQs%X~H`|j=D!OSoBWlcI`U|f*$XOh5TUa6bM?3>H-}4`Q&<4A9>$Vn$aO)q1 z(sg2sO`UgIjOq0zmH|38^#8y_j!*fZX!53VdMUJ}1zR-T1D#frc+?aud`NM5V&2gw z#e3L3Tfd%&wZRIC;^8O#THRDDg0Xnmd)rKw_{vvUmIYzGP@hW{cLl;OC51*nRGpD- z>LCDicWt(~UMl|Tnb4wCIDxyrz615;QFI>VL~lVJ8@edUziAkO(+)ln^Y`z6IWKJ^ z>~}sM&Nh3+fIb0uD|*Z^k$y0+3(E>4e3+MCV$7W`2XlJ%<>FhqHjMO)$r7!HU$|~4 zQgMLFH%H19Y|v)lL!*LgF@w)XMKft@=8Q4Ku?5?U3}0VijP@fkTMbIK0{91op3QJ>w8! zg0jp(tb@ZAKN~pADD$VJ4g1PI9yg?gJDspKRX_2^@T~|6R+US4MQ5A8`Wg=thrpN9 zC||pLZp0<~12H_J9us-Wzhg9mzup}UjsG{Rt+%CtFA8*h&7j?`bPIXq-Pb?-&w>oiJCLC-i!C6;uO~b&Nou@c{5DG%H^A;ip`Ugm0z~HAKTyR5D0M2#J{7 zSkvtRDOvr$d58AWVx24or25DX6A_C9xD&Ha7|%M;^{tgjmxHo(G=orG1 zqQE-*j0Ll#sH3{)_-3UQO!sU!^7Bxa&VpU{kJMcRhAj8vJ5W47_TZytxAd8rvbPtC z6rQ^uJU}`a>Wqaf6qNu$>p|EMo0V&V{{q^7H$dZbDU{rt=qj)*yu=iMU5FmR{|(e>l)bST0Y^ z6Ns1r&c(+6LCHwyCkz-|4NkDsigv^v;a*Dz$A83Z`{_mSgVcjK9h4h}W7=L*2}ZZ7 z?T{mvqb)ZhqdO#z=sm%;vIhgLiRolcPjId^)gN0?fDS_dJDjea15%Gfw~8v@obCmHcCLIqYzG>{pM9c8Oh{`w;5;$<~e3!d_s9{6k+I5n!GiAL_s5CT$n~^?n-4w z3;q$TwuUq7cL zmYqAO7|0!Eev@;9J>itBo0>hW#vGA?w8LE2xrpr81OOX5~zz1Om~ErEBhj@1*X;>55zp zBdW0)-^FI*k)B04&cpD|MX8b{p#wLuQKS;&P6^qfRc{`?nTwV?XA+<~ulmgk96N=r zGL7bN*i;u$URUz%lStx|0!}5jbxorupZkTS_Wd*j@v@WE-w8i8ZNus!uG@G3EDZ-t z%?Q2;Di7=3p{$=z6(h+cAbBJGAKBtk24$W69PhgVxs#Q6_p|R<=0E93{Z&>K-G^hH5GR8ZkBi_eF@{f> zgL4V98G~6tA1~IXoZ!$qUCN7N@`t@cEh3r>gvczryz;u_`VtxIDvnmBVEdO1 z^n#}$z?zZN$_7Kpny|%&FS;zo)!HJu6+6>uN<4#*d#Y8#zAh@`)@DO8@sB+(% zoPSO^Sz3p#0rD5X)}Dg!_BS`O$s}bSpvwIW9h{@}oIE{=RE(6}?ZnlzExeUFYR9(4 zFc6Q9u*^@&i>D(OC=X*NtAY^qVPjZ4`tMofj!^GSF1|1XtuA*AZaa1Bx?@Nr=>M&f$3pkKGoVUkk2!W-KfSBwc+Id?WQBPE+ixA6A3a^eHkI zkMt_cb`gemAxe=V3GKgujUtsGcSgt(t$bG6tU&H(;NL-rAgPekXOej5fHTSIp@)!OkJ?Gr6n$EAq;T`M|JZ;8=PB4B5mOkh4&~Smix?^8^039^ zQ<&``pJ-)YzLe|3mX|zoH2G;xj$h7G#jT zmj2CXcBw_OPI`=w-G(x$h=vgWeB{2mf-li52%|Rnsby8%GU0QxYa$}i@bqz-=O|av~271!d5MW*Z z)8ZyW={mp3rZ2iA#`XLZ%K;r52YzQFC#Jn$IC0%DwHVsnjV+oNfzE13JYowMzo@u0 zJ{Rbd?LA~)rQb)z+HM6!arc$?scvf&!B{lpy=A6Ked#ML%Y(4ipf4m#x(#8MolPSk zs?SNcco%?rvb$1MrxgG3NN7D4F(tdDJ#lZo_22mxxx4HAp!=~1O zYrp)tuyscuyaO#wY!b<7yQp$s{hJqPou@A^B9)`%7rSwl?UNs6w%U>H5e&qAgDeYE z(!wdoxyn7*392AO-RLM5&)(}Md4tsJLvv3IK}!prLmN&Vy6z|v2|9elbM51C2c1U6 z?2TA3?T-0)TXOqd;Lr;7Ro17`4dAMhF^0Ja6kgEbS0f=s;4qp~x?ar(;M1>Bw(Z=V zpmMgGf|m5A;`O(;=N=F3Ml_@yj=b@#){ahpsmPrSei1Z z9J=j<05fN7-z)v_=vxTdM-s2X1|>Y9BAU(z7pCI;mcPfxWPrR)h4y?y5!2_H(8D4@ zg0sjNy+m6AgGEx>0yBm)c~catLe@?hh5_Tjhd|LR`CwH7Bis_GuPKLIpO@t=2k8hQ5tAotx>G16t6!I2WG^k&g(5(zx2!N3v45V4%DLx{ zRqpGCwy5N(A=!GGq3b8ls}QkBa>8v=U>&^2!Z}jZGTjP%va(91Mb;ns1*j`$!tTXq z=xzW*mc@ykE1o@i@G-M{`YbQn`%6U%&%Q3~Bkd1%#3B}mDuAF3Bdm+9sC7c=y0FEj zEx0Vi_4pFY0Ua3!eqkafroK@$deb;P71+~*EtnsI&S*&7YYP`WCA&N@@9UG}-ECd2 z-A=~ZVFg9;@RR?nY-tq2SlsQtY@|qiCbwXfNOI4DCPoCcz$~yO@tJIBWQLhdX-;*FaLTOw(}Q)%DICS-Rz*P zK@Y!R1F|{RO$zw8M8(p$AfI-!kCLeUbYPE*Xo%C zW8ASceb!!by~^0AKJMSk&AXvWi(8kKD^#mm>12cKHTldUwc!Z;1N7#GzC?AZeZfxb zkV70+Ks#%^lsJ{$bVLhxL&y0_6qeoVI)I@~rMY>ZLJ|%+OGTgBooq?*Pmij#4d}t* zzn+sfPmY)Z1TKh|j^EY+jN653Xr|F}0l?C5(A0!&D2KQ`Q+cL41YV*@DVw`&z_`(>aKK3$*S*vF05Zztck^dR2|x3GGd7UcW~|o<5dN^p{*$S zYDl)6r0e=A3o1k`kQ{Sc5&aZegNvqS+M)@nYx?6kmYh> z7l`N0?7vO#oIEN^_Iy*3!gKG52S^7)owA69q6#2rBM2K}t7@J9t2Y0t&HqWYp$`MT;v=YHBHI(fYkKnwc+-2@=tBvvcW~$r1TveavU7wyDi!5* zOp+}#*mZZ&+Pm1WLl9R#WDlQQbo`9YIpGnRbfGI0_U}{dL-TwEAj#{k;V#FlY9KI! zdv>On*Sny0_kIzZ+vgU)!X%lebdUgRbentMb@_(uIcO*>0N|)c zh_$)=juVw#r8PLKJh!4Kll*WhI2rg&V>a~rsQc~z81s3D-M)zjiv%&7A4Dka#p}Kr zx5R=IVUBk63)_>X#vrXKxpPMZp5KjHYI7C#<&CY<4*Zi|?l-&{d*+Q}ToKCd9%o}X zu!$70ZdQDg$`n}JSOYq!ZF0>aM+Hl^i&_o`3Zd_Fct<&1Z`#6u^O~DjNC2^Shn_!~ zHQRF(%O6NUS8BF`%F_y)Xy^l!OxsC}cKEjuqLVak+w%`SeLc`;)SM67oMOc}5iO?< z^>w|44x#4^A5cyCv%~!=*$CK{9Yw-YRQZPvzn8R%ThiGV^D1@(;>w%s!Gnj6pV<{J zJSvkRbhX0XYr1`8ZlC}pd6PZT&8S^HXu?5N?;2nf*w8*LB!b!Ix(yekKGp^$lgQ7qCxeBmviNFhbP|NHt!#=#R)!Kkb85O=GTd-$eIL4Hr>~3+^ zhk~0)5$k6pw`fd(bxpOPLs}=+9kNxhWV@*qaG(%+-$(Y9GYqDz3^;FjiA4ku`}XMt zQ`mF7$FTf?1axI)Dyckeu!#oWKq<6c#Aru$Ob}h9aoZnB^z;otUr}@4Y;%j0=S8%f z+SNA<=G%oHGkrj{6)z8ts%4{KTelSn%TN`c+WnqV%Wuf%-ps4n5s0hqvWAZD+P`L2 zz3`|^2GKPN`feHaka>XukmSvFNw;El44?^z)O~A#QDDRSwU7vAT2l7oYZ2rRv7sSu z2!J%}(KN`fzt8LfeOO(%HMK9-GSP!wCgCN{#+h(E0TyygHOypPQBoR}IS5w50bjt0 z7TH%uZ!a^C?yvdcaDUWRQd)4o){l5jWKA}s+K>PKKzuBI5Vuqp^RFYCq!pd72_)n# z5DNj#)+3%$CV;oyg+A4P;}l zTn8b^5^(kh4k!XmuNbHDBCa)g^5+Y`_5Yo_Cr~Q;uJKFePzua77LjoKb6vBsSY*y@ zjrdZ}*H@ya`xH*C^Q76r`Y6jSH`$<#+j9;fNn`;hMPSF3)g_KuKp{HXaxo$!(d%^> z01QcRvdzME|4yl}xr4e^p+Y zZx~|>0lQf2LTyXm>cPd_o6zsqaM=_VxFLv;g<{4e(@eo_a#{DkwU`OPLexM;my`Zp zCFca=`iVd-r)BZ)$0JQiz_hGN-rj79U@F&}gFSl_gd|D8IS@Fg2sE*3oWzT`Uhm4E zBm6LMH+@NRj_sHgc7POkBy*~ce@{7Ltn_PH7WcZh$iX9 z7wZBE`HjRvKyw9%XOscp?GGVXfEviyLh{*pLT)gop9s`KdOG(;JlwblOzZl``_pX! zOywGLphs_&l` zCx?p7nXLie8u;o%^<+=Nsbx+yOIe>~srkAJwP9;FAmk5Oz;PkiQAJm?VC>A2{71;X3?3DX_LoLDC&EyD_R1&^(!{d6l!DZ^^V@s5ruZv`2)dLy~O( zTDRajqbk8LM&|=|sKkX@7eCE|i?}afz_0MCI4p3J5g{AIj7g@1f?MS(KRDdqwbj&? z-5-r(9#dG8tf-EXy55Mdq|f748xwvFME~f;7wG~C`HRFtKy&qrr1&n-M^#- zOOB#Sh-^&?uj|b%;!PcDqYo#zKERVrEX@WP(gaJ#FpFRgF3v}006gT6QARC7Z?@iz?~ zsblQYqHw&e(^!q%;>RNM5ztA5aLcrO`IhW2I)*ACvOOfcpf^2*H@>Bg+>_w?1c!b@ zAhUU?zQe5VanPtFZ|;xhlE&3)@V@VmdC|<;8z!LZ3t8@(j=CinfB~OE{n$2?Z1JCY zEH5z4Qz|R3wu$^?X18)y|C5Tfk_z^d?H)1 z=Uh9+m7?tIayEp6TSyTbW+t_2OoDYzHlst@CewM0BmI+e~4K#0?Gb(nSRx)-p)*3NC=qieVk z47-?PX4U+YwbjM~Pn~2+HjL%YCU~m>I)_LsJR3c8KxoR|Fq6xi z*{*&cKn)?Y7L%drL{)9N=7K}KbWoFkF zShCi|0#BP_PiCbqjY5~|V=DU9M7JJILrD0*pCae9OPWtcxu*<0+stY}0GkQoHRAlJ zfy(liRXaD*dsx+ug6GRZQQ}96kv5L!%^`TH20DXCEV>-IbUUi*IQw?tV1)k|ZRZAWd@DbQb@Y&QyL8=Zt3tQ~nCrCR_i0y#P6>*{3Gv{3$um)n zC!C0dGY47bJyK)D>y%y5BmsmtHCwA$>z;Ei8*JV5GB&b`8^MT+Icj!gfn{r5B=GQV z_7GO$vLJM!eyZYsMRen_c!-2A{BCkayXb`!luOFc{i*Cm1h7#rUMMqQ5}@72~#JT0#=OI)-JYxwN+LfVl z4Efr z*dtFU%CD$^$`&(0o2L7*e0jC}iM3qh8PY%7QB3TY6_YNx(Yn76o6!;-=d%#2=edVV z2P6FBXgfP_?R)VitmCKT`{A29QyIdY&pfM5zh}FActTJpPKYPxE1tm`Jnlp+oN>T% z>(NpzUaOqKW(gp~>A5n+I{VlIS#Rs+xBk{S)Br|Y#4){N3oKjXVu7bmv#YRNn@OQd z^)(s)ZK7L;r6VMK?oX3_(kU;bpgdfPo@Zq@EP%}h@f>k>*-T~o&8l4x={==sN5S)9 zqbTtu#Yh{+^WqY`Sr45}Bo<$VUePZ!X>XaqWzKEab_=0~kx@g)(B@2)OCXWVSQslG zGFtOA7~bA&4l$tUYocRo2Ww>b{v=-1aJ-&9;pL*u>W0IG4#-HOGBaG7#ZEOWU!| z8{fkZVI4my-zVR=(V`IU0_Hho`tJt&Pd6CC-+(zzn?Bz*<>=&~NSqK)&SyN6Rd~Yj zSUB^LrJlpp2D}bAm5pLRh?6sQnlG2dbx0j3)-uGE5rFT%rj^UPY3Ll zB^2hBmqTTVnWRqDep|V^Ui!vbDRvJUnCmPe_Q{UQkX&y$IDk!Wj*RhHjMnko#-)J~ z{&KXQ8NBd4eG%63Q}TWDO_{9-;m%X!Ugh1kUOGA@C=w^clk*i#XAT^5A{I>FWx983 ztrD+MPG+$L5aM)So@AbR?uM+hb@AKy=o+pEBQ9i{*|i3iu6DA()2G@~SgFgR(53j9 zivKjyt;Nz25-MlXu zCgBTzn3&Zrej)|skuvmrDZLf}Y%++~i1VuwD&1RB?ZimyZb>~1o+}+ei61UPT0fdI zm*A}e=oloi_-OFT2B9f^$w(@7ZoTrm3pI?)TttR;XR0^^i4?}7SbmeS+LNL1juvx> zK}BB`9bMgDCBx4X@#4mlMZK6mzykfdUWC>C*vqAZ5&m_!l@q-FxpWuS{#E?> z^hukg3gIqL=w0jIyHznVDJT*r#FPCI&twgra4Z(iJZQOlZ> zbLNF?uzCI6aPJy!1S2lyn9;cjmZfz*&(o{fT~MLRqR^@Oo`U}|-lfOV9uhwPqsckt zk{gm=7AZr|x4aV(z-EJZg*dljp|bU1)h3Men%cOn;Q6#(nD~}#q>bZweF5HLfX*Qj zi?2qn91xnkyTs%&>$YRRi%`wTtR-YpmtOjPRSS?OgAT@8yTEhM%10muK2!RRDJm z^O!pIFM|E&2nH1Sx8vtu1pChsEaX?dz*}RA44c9UU8CCNw8^Fn8|0aI4E5!Qbr$mX z!65U=_$csH@LNjd)DU43fcxVFG7)7-bb$uf{`>4;_)cfsztY;VFKc-!` zHKaCjAn+zW@}YNDz%F7L4v-y#wN-ZJPcD1^bv*W5V3GZ zNG8u;tz{@PF2IsM=jnW@)N{D*=*a4&t>`*yM!s{cduBs?s)WwOSk4_D1K*4Q)d-(s zH~bG01Ms_;$I)WgBsIpxVe>YF-lv3LzdNL4nk<37b%XM%XO?*@Evi??`$A6*`X`sVTa(^Vbx;D)!ALxD1$BbL1;7<@z( ziUqUW{ODk{)or#*gRA+hLTvE4-eP)~Vo>{K1j|fNg2b#RO5&u5;}4f$PGnyVC7psN zD6yFDkua4XIZh?n!?j6aIEw6&_QYvZakr8*7h;BUTRD`ZDWG@i0%2LF6AoFYZODdi zn%Z;+<()NB$miiapqTqfn{k~+FBc7kgX>rBoMkufDKrl zrgZLOM(Sce^P|8>u%|7$=)j(|hN;?fvz{2sV?4bZ6k=Jj3D4#2?BXLbi3=%ly{%FR zARP~ZFQ2EGOMuK1B&zRK|yadwQbKW`2^Shk{B@78$k71b9(8 z;LMc!+0;Nm1a`#hdNznI5JJE9ET81ABnQ-73=cpDNl7z=gnRm&t1eE|1Nr_}YUv_zd;4-;;S4cF$O%(p{Up&!UW10+^!U&5su@Qm|UNM%nGVG4lz>l82%WmS=ZGD)U;t<7Ml5 z-F&i`&cs;GogRa~lmImd-{ZUNM-qeZbBHI=V#p+=+9hEVHeKFlm_P5cxOj>zf&ks! z8nx3K%1cx8_Ud|^}fXqaE!9)|k*{^~u& zopk@2_gTY%GM=M`eL5I?Se1%}bIkm3e`O{0rqe@f8LV7v;Bn4kYKUS$2jv(mOi+Tv zth-X;xR4W1S726TFO{WDf~PRCh@X)#MPIpAr71mS(P1cx?1J{#>D_VXf;5L>n)B1S zgrqUQ7wQ~g$!CKO*=P08h98>Vk;%KD;Ns*w;C^ytcL};qE$Ap5JMko-D&i`{mp$*- z>L1A!%JA)!em$JVjxBtM&~`Cgo7Xob?DUnUHIJ6W!c*2}lyle zG%17^@@8h?9$Cail(^1TsTh!sN5EIFBg`dV<^dAc-%W9RA{;H`R3KlE zNK*>N0ZMtdj5g6C04lMWg59mv0Qa6?DRQimGpGpc`4)dyn4y1C*kJ(91x~_Dz-|va zZq&l$0>)V}t|cFza3uAS5VIMMU7vWSk8DsJ>=OgAV$k63%J>$=z8>)hv>51!orNa#~hbKQvaP2pa)0qxp4LcfwW&lq!#C9|EAi)($R z#hC`Xpc~A%4<2mzI0bDDe{Us!c;l@2z?=Hch~R0mT*{;=l+$P(TG=KGf>S_~J2zsW zV|v<7IT=$7{ch^Y2hQKy_b;tmu2hkY#hnUFZBr+uMFR#Q@nUb4+3W6@GV59%YAyneu^xIO7BI67kO|o$B zL#>YMc}q)LCu>dHQ9H_&SJOKH>#h_g6>~mwddJ-SrGg7>I7KaUPtbddCi&kC-|9;X>tEw`n=JH3 z;4-8d&-*o|n=uAea1MyvSOqAoYN~h+ifFOqKg@A#hf%b12owco(-Y#xstf0dG)JUP z84P=2ZBlNyU0N>g5~h;O@ZKAz5;P_B{%v3^+W@J+ZPu1_gud|&>8ukocQc-y6?MCrXPqCkwZTfxc#NdLpk?f4ilUx7qaK)FJ#q$KvP%_JTC-h_H}SvoC7`4 zeFF&YqKNOT0_@~t=YtXZN~I_TkyvLDDB`c||5n8%Ndx{I(ABD)PMWOB0-(;sqNy)G zEHhBP4|-WohKE5X0^SlzC;A8zfLtEOP>3jtBJ$KYx8JAx!**I@zm=ArR-wETI_4|E zJ=P6YETzm+MOmWAZKk59o*wA%A|OiXd$H^S{1{)4z@0-{nka6cIZI!Ehkv9(^3+?* ztybp2rvmyCHH-bCV^yXp3~uR}?>EqlhmZz4>f5vX^|EvDq;w1!A)?{*5dH~MO3jPd zjAHo)sUbI!gZygXB_DWZ1MYBP3~S-QH0sZY%kS?b-X}c_3l#9lHa1bT;AR+uqz}(c zg^YqXKsLJnYAivWZ~~Pgon`Q%QO)AKq9d!8v7&3O8hFpP?wSntEE7BuWjS`Z4R|vE zRwI0lS@SuF^Z(t!Jc=F(kkA;GfXi78e4Y?`{ce+#t~2uoc5$hVualLbgGII%_2i!D zYc%vFEJtgeu;!h?oj_Zop7Q6>zU%SAE8OB1dUU?&>zc;zPE~c#f$!f|4gpEI51;oO zVek}D$QR0R_NIf=R<~I%4yxq02(Mv?JRuC;o9Cx??dm!^_ zDCHC|Mv2XQkBp`K$ayHm5vENJ%bsTwza>VWjJFl9J{Q@a-OQ;VMFq1{KQ-iD2zr4x#PTd94?(DrCX$8O(>uLj)`-6A&c_WdN=6KkYrPyGtT6BuUV zq7m<=3>VdQ?N>0WLn7*^!*D8yQW=%&?6S!~5?3Tg!;xDS43VZ`Zfk9XNw%C28%yXa z4$)(Nn$)_F6`_msEPx6t&XzLktOa+{7^-Z~!**gQk9qfOkc(~3E;N(1vH2T`MNC+M z^J$TaA9;V^*W!7KsU+AmLG1FgF>Vx=3+}wfrQG8IY-wERFAon?+VoGdCdDX!_qhG=cOUFyu3j9 z`5ZwT323vw$L*nnIP+9m4{&`Z3H7sfmwgaCQ4Yds~{T-8mk43EJd-`PcoPOT@S<1@$0TMq*Wxdu zZU*{@y2q>P32QO1O#U!?B_@KzLMef%+~1WJ;LLbHbE8huzopQQquV3G%I7sru3_&)^5NoDYUhN^0Qx-lh+jTe@&9Pj z2z<3SFN`Yw{gVm+%aG4TU}mUP+kvzgw7$oYYxuaPD*(ezc)^ZE{=zfGX=f^xk!uq)?Ml7m5%(C^a_~`~p zWn=)nwKWK1@-0!g+pBPQido4_fFG_E!c4h?Lk;3jV3WVRbrI(jiu^T2bVi+O-LYkT zRa1g;KOsdc5DhHp(=k{_iwLX$Fo(EXs{tK6z*c5oBxh0L-}1|ESDK)IQ`%qv%>_-u zipA*;KW@~(;shmFFsvn?p0OwO6c@GYk6WI(XO60o@9h!=vjGqoj+u48o(YtCyVyvF zU@waQK-3RJ{XoMlN3jlHdbosBKAHE_&pGBFH@X-iV ziyqhn&SE6efZE`5nN3@NZN%#oBwBg*wulCr$JS-kP9^Vml$*5eDsH4m~Y838m(Kp74^FmuK-@55|I?pC{dX%?eVqKilS$_!Q|Q@+3KT7RbW9UNfut z9Rf4d8Jeqw1hY^dE6sM8-7aZq6l-T+|KIfLVdZMxeOF>gsig%6wa7k9Ngowb^Q9s3 z+WS2p;v>nH4Q$%$dd8qb+Wfi1aCrY~x&*@zK<>c8h4pD{4I zcF2&QqJ=Ah(N<~X{HDMw(oSKuIWANOOy}8oFl0GjiN8v`0~upFjPHuWt5bw9i9kMq zE4f>xhzF^Gz{}YY0JwHqC;Ln1;X}Gg8PwA+MWMS4DZhIl6|ug;5$GE(#$SS|J&8)6k7pbfVj+%d0^*VD`p}s;C8P&boDOi-^=OoH^`hWsISypr6S+J09{w(Wt0?P^@{4O0VxAza` zxE)Ywt$^E;@>%koKA$W<4y&|K)9;6^-M?rWd$3hhaNJEi_BaEX`|tlQ6#mVnFHuki z>nh@GOJX#-!NJFXIeK_4nzhbr_BsA3E$Z57L447-I)ocHO{8CP(d9Ovb=8s0TyTtV zx~^z+=g=ax?5$mQZr_<=;i`%*#~Jv9o>;#9nlvv=N$oIZ(>Sw(Y6HXKYPsOjr{m_@ z`khF1!C}7S6|d!p?$Y*`d=Ch9PWlN`R84$(8^nSvBkHp1^3`-wW}(n2_pgknX(y2i zL0Tln$soWG$B2uove$zKCNHSXT>2#5)_s!+1u<<mt8igJ=!T zOeg|JOCnWnKt-q&qZNU)Q{cdoSahfEc~he{((LLW7)`+21kk%;9$WB!49U8m#Eh^q zFjR>d*T3YVY`bY^%aVTI2?bc$Q=OaH@OiT?4{U$-j@*< z+Q`8~(4l6>>SWR@#vL}FGcgJzx*ae}W@lq;3vp{v?`yabGgxVEd7WN@X0nohMRB@y zpmf|x_B2NPl+aHJ{glv83H{tcKey1&E%ejK{WNkvjoc3l{jksv3;pPXAD!@{6Ml5U zkCFQ^az94yM{55_?H{TAlMDUiLO;3CPqg|It^P!-Khf&{{ON?62fm#Z!fgcDVEdK` zm*yGb+DJ2`c`&StXPB{}q{P1gnqr_9wzuAE2fFP=UtDI!)ssg;A=;9{<6e#NIsceX z6B7&bw;}rby_eOc=Bfy0tZz!+?g+q`R)Y#jU~n9(qVV<^c=~1GrFiw&BLY@KF}U2L z`l1R^hu!gU53-5^Y&;+`6R2+C1_-u~S>d1XU%mmTsAByXp>7(3NMK$o9?-dPnZ`7@ zz=-VWGZNJE;I?UiH{jxCnMkQSld)fUUc;`68o_ zwvfJ^dz>O3yxKld?%(nWxu-_pxL{#TA)Hv?OtpHP;(dzp1|P0@cEEumjx`V`y0r`Z zBa<@c*d0U{Lu3@BEnAF$mJ4FHNFq_Ev<|YFtz_Y^CU2*PG!;^6iRcG5SPR&V8{uOh zf7|TJ&7=ym(8Q~u9f+qfti2^crDkm3b2eL^oXWbcN?lInBg4z4Ipffb4TK{xX5Bg! zHD3PT)01D&=^LMNZN*6PhgaDElGF$9)8h8EYO}W$XBL0*cGrJ^T2g-7ckgt?_k^!3E*rJr{|u{_5@tEfxegrwa$8^56w zd)GhE@4Gs1l-BiB1wC5zQV!yQC*7kastQn-vG}x|fHl&OG<)7-BbvmK=^83P@BaX~ zj@dXdp1}9i{fRoEC%%NBJN6%WooIFJ(X#l5W&8+h=sG@M!y zt5CYf;8(F_IdAF+2eQna=@VC_)44SL7bj`*dd@a#?^z9P*&PClRBr|J_zlqu|Ke)I z95tZX+2w~9X~-X)LNIOGqNBpnP+oz(#*U-t6Y;c6^ts7)yDmiQZOeqqd8R<7d0CMN zmYOYHQAvyc0>H<4Y8%r@w1)_=4U$`q10qbCprs^GThDYdyTW4`Wb7xA>=#v>7) zVB8YyJtmXy9z|3I`Er+OR2sJshn)A*Ppt+tvuxM^SI?T-rBFj!srU3TiS=aQKc~3D z-mYH(gY??zi7A-dGRJmmiLCh3W8o*buPW@Fe{zL$fSf1z)(ES0g==@S&xYj@ns*dA zBn_nZyIN|+HL$YE3oSn-dpSLo?RBsqzo^mAo99PgTBG`2dfR|2`}VJs_lXd@J2}P< zg6|sO9F&lmY^g;pmYQ|Kp?2S~xD@sg8KLh$E%3aZXx*X!@m zSS_dGav>1=GC&RaamVWwv6{OmbpOUo7@b!+#vCY!odadq(6O3|#-Ae6*# zIA&eNOc)@(D8}U!jtJOhWED;B$Ju1fYvU&hQ@tUZ{{cHyu_;EoUUuapD$*s5vQIo0qe-Qu?Ne+oMxgBwiw+rqF)P)4jLpa* zOv{!qrLgkP)fUb&9uQnqM&bT7cU_gWsHGb0uL}eIX3b*1S(z7$S3TKNR)gtb^deqh zD;w>AnbScd&fr_SV$e_mmw<9D(hIvqm2H=Pc4&AC;G?tEBVv$wD59W#6GPP;>Y(JvE=#i+h zo_{QK-;|Rc@?r>Rdl1X~Oltt*4QkA4%gy9;62PRMP*2~Bey2y5ICN$|jn}+j0BxKW z`1ewmVvHxXw$j~+mb&rXT5^Wz7k=5MPYz1(JvHtC{lO5%6rjm>6x`j*|o$3(Hp~JrUlLny!S1#mv=atkLhlZ zOSIdT8>cuFhG93DUm2;Q-y{NBFt4Y8MMc_D0%BS4V3UrujrspR-tQL4?9;0ttThFN z9Q_Sq=dq=~!#r%;0tN%#>xU;%*fAyeXpdn4*oMtN-};S+L8vJYuS|L*l&7^ z6p*g}6Wv*Uh$U7JV6B!7Ds=9)F4chO9`3pa3;Pg%nOs7kV%&@**D@Ky;&~O0Ujwe^ zwq&1*ov%Gj>ssN93f#>g^k{&YDU?MkwT=+MOrgK zRRaq94$uqn-Jzb=tk`&{Kg8=ugZA>rO5+KmrSA0I=i#TqAo)Al8J=MnI64~<% z$Ie0X>bpmWU_zjEdBz3}NKnK(adnJ$PlIc{z;^yqKEQ?;;FGbywc@e=vGPa$H>?if zp(Uy?(zE^rRUqJRLX905|DLS?NwqXum)ZJh8jgDDx9;_;?}{%xglu`+pSM2cgt{K0IV=WyXypVCFqF6U*tEX*O&?%O~|M(rAGI znjL*C;vHE8j|pxF*UM)hKfM+P;!>98)DfL3q6-0x$QVf;t5W;FUzvlret*aK)re?x zMd-FO%m!u=8@3cVqzq(sJ6Nm4*Raz{a?jtTy4pOH?RBuBJZUga8)k={o5J~>yV*d> zdh{>g;E)zJPis6Dp9z4}mj$lPfj9mgSu*NSW(3G=39X0%FUxco2ww{v0qFz^t&EJwquC!WGMQLQYxlc9>qwvNCF-FwqUBIqKV{ic>nw z?Yu1?N||JVwA|>KPw`~(-=dwFhN|VuMr!`$m**|LIKHsoSZ%$BqFl9s=aH*I~#?oGD5kFh^Rl|4`SQv>h@ zA};B^2p}ZB8!N=?kYFM94UzWs6Qq?P7RXb7*e8#mLqjRaw%*Eozecu~Zfghn&3PZZ z2Bzhsd&2&zLL%d?wb4HksSjggbF{xp?rX)@9M? z+Z6oW;$NiM47eh_7XvVvoua#Cn)` zyAcE2l?I{yycaw{e}bp#lHh?tab-?O5>Ne`Cvm)(g)CXQEL7xidZRPO|D4&mT)U?4 zU$E5Q^M1fIs1EJ-&IwER;~mi8I~e19#DUw<9~Z1EOE(qxMzNz~rQKUP$_(vbf1qOr)dho^Q#IrE3+3 z0TYQhDO|sg!b~GVPaiX-w36sx3vL|65mHn} zAMGfs!Sd93k|?khi*dmI(LpEdlJqyRo@_KE@lza!DvNLjHEL*D;K|rl_y1V+6#OH7 zyXt1oZhy%QEqPT6*UrbNsM2wYji?Vx*#lq!p2)vV#G+G{4xVpDLW`>viO)>V4o*@* zAMNhb3dwZxC`Ww|AVM5NLsvFrR1-jG4Fr{C>6@U%aYTWL04V2+W1tkArB(6=z2mb^ ztXn?X5AM#p$EmF57z^9iXJQ088v@zxMK(Or8Gw3$9Rh5*>z$6$v1rEBlXoKA7%(LF z|FR!Pub(l3GffI|K2;|e<4>$Cb#kI7u6;HYnqhzAzfT~O-xB|~w2!-F*qI^IKApno z`4Cyk3}WK8VxLn;cDTsm+4>p(E+_r;kvwmr#FXc$k)716hW1*OAa+-ai7T*dLoS?$ zhQBFL%sfS24}|;+&L8jQX2cXHwAsT8gbQ=X50610Yuc`(!rWX{jkUoJQ1p#)Stat` zX1m`MtnsmB#Qt}oK)QKdoeGMXH&tCjgXhMIo9*&%LMPQ89K<$sb~O=@5N(Qv0)K5Y z=gI6AGw24(&O!YVXlM&hil1Y1$p*!mytGU1?v%ut8Q{3ad{wX-aYGR9%kj^({&mc~ zzJRbNqiaZFg*>9zW=KsL;_8w@Zx0e^SSMI~CxgmszHO12wMntH%Lb@! z-qbFG3gSw=U!YNpA3M)A!wuGc^9BgG|4vVI!Q7T9p?gb2Etn1y55;3$;o$O{3#tS7 zG9|EHXss7&ySIHlim>3koAe=V7+dhoQY*2Ug+*RS^(Ecg>80|Zs~PD{jc(Dr7~a|% zCGgtE26Q=aNRwP(xah;lF=04N-vHa_AL+@~rV682DmQ&rd0T#~q@=Zw`t)-K-E{g; zNvJF?dOC7=o?<@zK`g<%u?iDvNWy0ZU-O|9^`Lwk1HD<3u?BOHJ*P}X{2a+ur z$f=f1G4AcUmncDzdWo3M;$39^YC86EvEW?0Zqq^~sP6u@o4@cEiKof=uSCqNA(Sd+ zW7w>ZJPB){)hyNwQ*rZ^he@5wuKg_~6ffR_2lYhQu1rf7(T?Y+;& zk!}~659gV2-SmkN__l52Cnx>;SEm|qe|%&;!8HEyE`ws*p4J>6OVtd*J8;z3w;)J!ZVD<|1- zd@Uc;H^`v-aM0}-BI9nze{~+=gK|5+`|{UlVInQ0X-*u_t0FlQL=1@);x{R^w0+C& zMf0~E63`%_)8{4IPO%u6g=*MRW)#+v-E3hmlUT#aDE)c-EZo-SDQl^Q1M5PEc~~>s zZ`Twd;L=U^Q`Td68oh}V-^#>2U=(mw3x1`7N^J%#M#h87(U6tVp1{S=t^av)^fH0D zH@<}uU>-I;9M~OhxS^zOD*#-449aNS7nlhIG86-?%=}`C8B#K8Rc6AG-4Iq09YmLO z*73$xSJNc>hH}9FJ9|~3I13gkM4_av966{D#(RVa$373k&|p0wjZL$v5=EdT`>)KR z5d`DHb(z_^dT|&dMCMFH)5I?kX=utx2Wd4DxI3I_exWrK?g1rXwc~DbKF!Lgp3+3u zpZ1_fn>uP?Ka0z@WB_%X74m$oOFqGa*-+!*L_^i`X)Q6w^26hrK|FgP=D$6JclmfL zeSe3na{p~7NYLisFb~y7p2BhArU zA(z|pQasdxtRdkQ>5KS6X1@R+UHbb8Gi-=9FCQQ;46(tSdLcY``tE8A3$^u@W_#As zKXjW~F|JO#qt~!3@7-c|mlfiewyljyNG9Hljm^!TduwjC85{4&xK$d*y)jW#oO3iId%WR~kh}s#J zH7@zf&h^|ObNhs?{+jI#zDB)ozjI1NrXPKWj=;eb^(F4#f^k1*T~?&2z%QBs13T%~ z*jlu22j?BZ71*mLWH1GR6weE`^W4$jV;a3}2Z;_70K)lC$}J=4Y>#dL$#vu*e`zck zL-%w;egs3S0NkHw@Im47btqB>2}b6SIiZPU3#VV>AS$=CEF8bPq5ZtLQ59`BC%LcJ zJ6#6X#nPDb3!KzNDR?tGrLWh^q8sz}IuJv4k| zC2v%Ae7awX8pddQmriJ^jb}03ogfa<7&?NgHl>0fWTOwb7+c>2J*qVymvYVex;@Wj&hSW8D78JiPszHBn;Dde_K6ZcsyiE{_$r ztHQ$TQ??-=#7`p76eMn#pr`>x`BA1n%JfH>{*TF@ew69|f0Zes2UUQAn0L|__ZILL zWJqtk;T+iX^`~J+VkW~UCXUd$V>SpYfz()zD!FWnm*?&xJIR|R=4jofcFkEL9cm^n zYCpYy=&ypU1=TfoS@nUJ#wE=QW<`^*YyD-6^GG1u@ccrM9h7ng*R}OKPG$sAUKY^s zcNOhf%{M30`}@+Yoq+=xk_3u}Zk?F)D1p#4HE;yNsZ>@`JDnyCM7%H~0+>uQzs!RZ zD{K|+&0mzeO{v#lZ|9nRx?R{H)W=T$3EH>j*E%HUeK)dSEFiAFP$D|`9XV9TnBerS ze0QZ&#CbSF~P&gfHX6+If(iB-(-wl|?+C}ufy zkTL3uOkJAX{W<7Nahl|pL3Xig(p2-_vic$o+_4(!nG7KDC*@XVLhs-66Te53Y3KAJj>|uQ2ocxxYm1 zQtXkVTNRL}w=NeuV}7e!@)P<68-?9xz8g3fd%@aY@w{KlXZh@}@SpUtAzqdyJN64} zhlLh-y&0_oVfi%V@mfBfLJ-8OfI@Rm&|>LIg1=LrJKO}a>$=Cilwxgkp`g7rrHlsyE|nW0wupia(n+Cb(-j!N9P(TJ9}Y&UQ`>>J*%EdVhyI*WxUU zP?7Z((08^FGCIO*(+Og3Dm?BN5*E-iy=lwnY=SySjYAD;&^ zUqJfHtztEUJwU3I?B~|X~f78e`LFt%$;7(3g$Il512shHzK4dd~bVN0Tt!%3uvOh(GfgL_!ro-;YasIFM>163vW-WzAdKb0^b>Sc#ezU)bPxa>^HNehUR4W_>z#qhG(#h z4NyHTCN6xZ(D%(U$5)`wCSl&+?z*;CzkDRqeJpxXJ(zWf)Aw6$9uI+4*?TCxMqfX@ zr{*mx&~^9DQEskw%#;{MG&G%rM3dA|3$$mFbuMT#8`XUq)~U5jaJP4nkjZBGwUF@Z z%Zxpn+(P(ijP%JCpwpZ50rRT+7w+dhW{I`6tv=Tqq21hc==FzxcPYrESj2ya@Pf7T zbgJTud(4rfK&UZjXj@f`6p-5oJ4gLPK^XH}HV=UF(Z#v!t$D(|(vpkHdjI+<>$^kD1v#EJ8};yr#5w zyHE|kyfcX#QhHQavT`An&;*%|ZENxoz;|Y|n>}XovYO;;IK{UwDK|E~}N@Ym(-KE$tA>zazIBLy|!Ky zUAr)=4sw()M|E({7!fRuDtpCV)@ZMr1}5sy+k~gh%c8Ck8U~aVF+VLU(Klph93UKIC-gB>k@~QH zf)m(~7z&W1v{?_;l-B**a9IabxH2kg{M-9Lt*+}K2fkSmh8!73%iTk)+`@4-%>3v+Bm{9th@le4>7wmdzhF|WXIMc zR=Ujw?CdRBD=34=Yn~)v3DtUDT{~&+y2xlFbj6fzM@U!8JNTNGA+mJYO)6sAphMO6 zA4@b-aamHmVJns73c6>|V*MNBeQkSi40R!AS3p`m1Ow6$esAF_sWmsTnGM(&4Bh7w zpwxyD;Sctx%hK*Ur8zp~ujczJXiewHwI zZgRt{v6eL*>V;*^Xk6!J)l=svOw(Pj2r{i%s{=|#@0!fqlH_peKVfmtR`Er9N{1ZKFDpf@N46V( zNppChpmSR@AC`5m)j#C&POu}mod&4<(h$~iF`c_@_$N1g7-(Ss0HLlH^c%aLi-0+( zWsTh738bxF@awCiy1B_Gd#-4Et%gizVmb8a<%*lfjbC|+0b19=+ef#)VXYiI`K4{( zgR2D_4b}lYX%lg_FbSLz!-;gc9mdpJMUNIRwu}|R_984C*6;@dOswK8RhKqPe+C8% zQ=$>1=rTp7Ve#c1zwHK_)XK_6_x+iOei|mI;#J#K5-NTY`Pc5WAKkRA@^C!OX*1MVUwqi+nu6CB+rwfQcNkR90{b(ibfMk)JH zci$zcu4aT)De+oyp6+Zrh4luL#oEQ*xk00XQvrWI)Jp@l(paV0bNxl6VBf;8;6kNl zdU`nt@wNf12Zxi+-nex0b;bd1E19)rIK47-@-0gS-S+eA2(BCO5S3MeX4ofit&%Ln zg2fur27|diyx(u4E=eW4)>XY&lMqrgPakoQ=Dd)$cd?d=Nx$i7tOw<_9_r3nq?;hL zjJ|MY=j&t^-jI;T4wHab(6;@q*VtoPV+r3S@5M;ZAP*ILIGPzWwa73xN(6i@`Y}D3bcnGH+wY!_fmGT1D!l)@fBVcVT2!Oy9$X^d-Rzku zF^p|!Ith-Vsi72a&!y{J(d4qI2R3g~X_?^Y?js_R$@6U?;xSbkd$qcU_f;F|lPN)C zv+A=hsvcf>T=t!%HZ*kj-fl(mcGaRa9Xs#)Bb{Ux%LnfX>oi{h$4)f5fs!rcmIC0& z;-eaaaGaJ@jT_oeQ`v|BSmP~-%geuW+sCDess3&$?A@ED=oS zCyQLcMy|`QMicHE*etbJg8!-Iy;t}D+}8C}-}a^9Y#Ie`F|DCG6ut=}tMsGIM^8dL z`JQ9$XcV}&c7~iXV^TM5K8PuoxDoP62++u=d37_ip$b1POjge`u3_3IzuAh;jJGMC z2~AR^sR7QZ`atlW9q^j)Ls(NyY67! zVPX~D)?x*!n(a1U5?{41a3W&WW7gCp7FR=MpApn9x9GPNhk>{H&|yt7fB&kFnc)STq(Ue*R53LIyK4go+vxPIs+j5SuBN`c z%szf7ZGNhNO0H+!oxwOtL1~gf(R1A4JvFFW-&MR zlN8y6`g_&4x~`l8BU9Hnq(AwEghXVG3f_x!&RL{7Zkpl*G9-#@&0pGXf@00;%{yGx z0THH&gOmLAITCT-w`<9(s)OurR4?rJ;Lr@O4)|WWocG7bBWA2+v^TL-I1q0 zv}E+D$;3557P}6}E?Z^+F=P87DG_T_m~j-rGFVA;d=Qz;kl9Fiv0o3n<9#YqIMD?g zL6F)6RHU(vJIYTn@_=?-BXT{i+X6nt;fajKb5L zaNnFPJ9`{*VE+WRt`?e?)x??K6vnF+E_KD~34vXZ<%0~C|m9TCW z28{Y$+f4!rX&MPae>RAA)>e583C}6AG$;)wEnSm}kpfCfKbPoeSjZt?c|tXKNhyyd z%C1(;x7{Er((xU0V1H+t4CuAMp{mBH7F4cU@APL9B-l?@nQ}*<`t4c|c+K zsKi_Vm^bCxfUP1yY5r1w88IBN)F+%|sf~_KR(#ywQ09}vS&sl>z~T<{h8BXlhiL? ziO=Rd5w{NsmWpY3b=20w^IA`hm&{VFU|U8%*z${w(n}wRNE63tfXt}7LAM+1e>)Ng zJtZDROD!Oc75h5c=rwmG=-LHcw2~)$II2Um!wjZrl-nzIHHCj%)iTq(U&lVIr(R}= zh{`qAGY{n1EyjWdzS-mi9(@-yluStyMvHrBG35btDB_s0(uu07aDWz%x17#M%3EgK zku({wX)EInte`VY32oLEOg5t4|2Xw0*D@Lo>xMf0pw}qFnU*K4+z{>isPc8Fu!f z$B|(9_)-%k|IKfl7%G2T&Rhq|t{Ii*La#?%&O(2EKKAZm`ua&_{aFrTd@<=7Z5zGc zznlQBwGUMIOn&_M&LvY;qwW(?A=lsTm-}a!(A;_!4qIJMA%9-m20* z#nC5FSUg<>*iP7esx<}UM0Ho{iS$##U* zReVA&NhzXA=N*NE$F(}t&7)~zSc;2M>a`n*q*gGzf@iCrU~Vg${bGr8nYsd#@&TBT z_Xv7(7x7J5NDXWt#^A}`?>I`$m?0%_M(yWzp9u{Sr~&J*&)~G}qSl&tT6i=nlClYy z#J93b#O|r!GWbn+@|b4Ox+fOOQVw?y4+#+!0@-485gS-oO_}w$LPGZWZ+f2;i4 z3I3*pXynkpyBpe2Mw^zRs}~;EGai!L?Zo3E*_6vgqN!5X0~OGI!T-z;eNP4X-B8Wq zppz4=%nh3E2;TXS_Z~=ZJjz|XpEkm}qC+#cs2QI5*r0m+H!Rh3+cTtSW7=wuipi@o zHH#D_xWX5geEu&OIol^`p{RpAtb@?nZX#0Mt#DY%#46ffyA_CP-uq&CQthFDnebKL zS!=5pVm+mO4jAX9e87S2T0jwQXIKP2AoXrh_fq}sPqqo}ua1Y_a?na5I#Jf^5y=!z)JH6%M%xz()W19*1!p)VJhW)j_$MyfI~6*cgRVQRL{K>trWVp98UeM!O%Jm;D<~M?)V|vGySyJx}6*hNO!r2?VMI>gASc(TkvQc8gO;m0R3I$F3^U7Lb z%K#6*CF!#rdFF`j% z$e1j7TR7&41DJmV1#!%ETPiV?@ct?QZsD!ZVc{Ee-VxyRf!hFVS<>{9uGPt86<^M` zU9<7$W%&Vf?BN@f zYLz_pRBL&ojEW8scdkLfqE(<~A%+oc(kilByF}L;Q$iZ233#LQe8F{x(hl>DI$Zsw zrV(B2F^*qN*G-`?$gu9nVT5NdDyu4mSYfx8i2T)GqfLxbM&NaBNu*UDNk?j!o{?6E zvOC!L?tb6*8wV;IEBBfPY358meP|xCr5K&LEIz>jH9AVz<{K`93;&47M*uV(W6X4S zEpd=MBd<34n7#l_GB584-!eKMfmQ_6V_JVgO;X=l>EB;~9dLBAy}gD)4Mvp=6i}Z7 z>xP7c9!Flgo(X*SFV*h*>wdLgL;tYU@m^c9RulUfl7*z4gsD)x4z2}7@D5NXc~IJ) zV9G=k({EH;>9gF|6#%D*{y40Z0JXJVE~`l#`-3pE>W3Z#n4C%6*n#{j8kQdSEYT3C;ti z-U*4af)K7u9@qdXE6rKf7&W`CiQn`sX6i2JI9yGtPSG^Jc0U?Tnz8ohm-fFb5fH4-NX-mP22TEZiJduo2`9oW zMI$Cf%F2OCs%_3DoG(g@VcDvhsw1X^;}6KyS~ZuxX>1(%A5dD*hfwVpjj1_ga2$Al z_Wp2mPaybxP34eBgQnz7mpwFiUtHv5OOqYV{#prCi8f`FkvUf8CtN$jlgFj4W=5tE zGy=d>G-p{ z6ETYN+qR8Uwr$s(o=nf}f(BbO=y=U(w zL_i>BT|-$$GWbkpKQl67AfCAlZ)?Q#yn>A@IkLq6Spd*efE>`W$KX{CB1;YQvs{Vr z78xxx31)fkt(Nlca&=cILn`N&UYgll!?NojKPv{{Q!kR-R&AFf6HOT1l|H{$(dX<6 zS{WJAu53VTpI&RBfz=M6?}L)Ej~vnN%w{96K&kP;xZ$HxXw{2cSZISLHZW7oMg{R{ z%sEty1MvhGl*DX0%C@?^69MUG;cP8@96^(E%tw#wr0s}w*WH$9(&0yUk-!l;Ufo`I z8n2$+T#6AW({%|bE};rMMepJoAR^+S&dMX~o5zTv5nEc8`RY_xp5zK8oa?r@Q@P>h z^2Xy^eLVitb=}tfpVZy^4{cTP;jAY&+ml^{q1B1Hcp_dblEi`e-Ma9%-On>r257XP z{Z#;U_=~AyTjkT=mS|qCT$bt@R6WCmZ{hL-A;~&(#1Z7BBt)N~Kzwg?XRA7t=yJAV zS$65XnJ1WxFcpHfA{nBKV(uS6loqUtYEfN}1mYM=E*5BCjV4wZv#T<5)Tt187$}}M zc!|o7cs+f0A+c03FHV-1#J}~8ht5FysXh69Dd)oNW#Xo#D=Hz%YMm~poNvpFka=rb zYU5^vQcp>B+YL4VfBkk8dqrwPoj`V>w_@g(#&Y1yAIfv|O~VKN%I25D0cRA+RXH>N z`twJCH%(@`0KOig8fV5ZBXg$0PpEl`vw&So*OWv)Xv`X2!lq_WB!XYDKnB4W4**l-pkg36#2o82#P$1E*F zZv}+OJo(EO)g-apiAx}XKmTyBEKoBn%bx+K>+mBBzVij4fpgVs*;3sHfzSBBHz3?{ zX#Y2RU2r`D#n|k;bDBG{RmDRoUDxRCKECx)EqX7a?U)PmHD3BtBr7$mFkMiBb$*#k zbpqnnT7ZBqHr2xK1?|G_!q6#?fn|^ZZOA!=SLo+QYg*4;{sj)ajagnt9rlwhv24rT zbB`d#YPR3$O+ttfrLxBzr!E|djsRE@xNi!RT7E>OfF`m31u#5a02MoEd02~IY)+uG zSdsGCvh~ubjDD3+3M`_BWq#n`rKp=s!F49tMi%C03%s171(x?Qe-8=GpOo3nkVLfNH`EI^7!rta4o$E=d?HL?OKb z?;u;d=knA4@aCu3HbY10Cm{|8$*S#F$&wvJLTDiZMMZs~YlOzLcGPk@T(pfOq2XtV zMA0S`9F`*_W-vzLwZ?;o#TWvU2m$c6?n`_$zr>h|#Di{CLBJ>FroaCKC=9r%{}fhr zZrpQL+x~l;qU@2ErCH&sFK>ld%DQipXz5Zv69yR-b2oB^)Cs^pKAhf#)*a!{zPlDT z*bBv$-?Y~9gsn#}Hhu~w{)+%}QfKGP{%tUt{urByVlG|Scqq}JP#hIMW@FY+Om;=Q zxKxAo!@2v;rG>E)bNm%oEVZk zxUk;<`Jw-9fl42Z7IL@-pbmdEeQLXWZgYv|_1a~ru0h2+QtSaKKNyy(GfxafPF7sx z4GzTj!CL`6-XL{{bwX3hwpk@|x&o-+1@}WPs|k-?vge(tajkM!JeB zqJr+(pR|iT`4KX29UDEutWf$n$!>?i79jJ@iQPi|yNuX*jpaO`z+Wjg%U|@{GWOQPY$YOTz#B`jcx(tA z2H<@socwxqn;hUD8PbkiKx~(OW4^BW#vfSx(9@RtZQAJ|=MK-g zGO+v{3A$(W4pC!eHh5XjL!u*F;XJ_JvV6;5ph`4rBfLeXe0`LYfQ*T26uU_B5)hai z&Gc6DnR4PJ&`=2OlVUq$(QsqQ#;Y5jJP(s#&d-e2)wg)`1nyUFn)O(rpb26kl1xZ6 zfwB*mEl)Tumj+QvwsGs#%FFQj+Q_G^&!jojH%((9Z|R)Ilo)i~!?tDHx*~itPSJqW zifmtUWZYU-6iE(RENGD2Ecl6dxu1FyIa(V~pRcYNvq!0rqkQ8*`-bAcxXLpv{*+`0 z%CCxRe;frK4np)pcEq3QP}z<%@eWT9?t`H5#~t?ZFcU>&51Iwm46fNVL@9}egf5el zd?5aj!bb7dt4wO`6`zjZ{@QIK0DXl!ZjTwIc~8&aQNP@kT{{ca46q%6$;idYAhp(k z-(-WNBCJC!O;prHL_AAPjcS91Fw&o#o4rCDaC!x(o+jbeAPXHc`1+FjYUDHPJvB0b z^cUlo;YfiqKl@(sFVBJ8b~z$w-fN}Au4g779|wNhAb5v~m>)Z$ENwe01L4->FCz}D zKQIynkqPN{Ou8RejGq$ZNp!_Y8F&q$Ec@x(&`xT zACF4c39Hf)V57N_C@8_Q{}}?o``{j0_^u;N6s|r0Bv9(Rz44znybY~%sKuBn=5ACK zDC(qWBbbcnB)S!UXmL32f6L}?kB@vk#Pb8PR~e9%UDR=Yc{KD^Hs71J$-M%~USm%M zXtDfgU9ktGbR3CRc?%@y2LVhV^uyP>Bl%kY7-c3J3%FhZ0iTeY`ZBN#FrWiDrT7H> z@L)yjz9q20iM2V&<*3PW+$NrBwsYnY6mVVpCZgv2bK6mQBf+Lr!6PqAtHM=B!4kHZ zY0o;|%%y%J3^F3-cHk7Q<40h;KeY|5JItYdYb|cD6O28#Zms1JU7K2X_y|mbg#dF@ zbMx5txi^yf0Gp0tE?vN6C{Z_G1Qk1Kb5c)SYDJ>BSe5eCvHjYqg|QQT^T!5IZ#c!t zZ0Q}EBW%wF&vRN0TTIFf`7-Gzcf(r2u)NLsl z(o}#Dz@8Nz8nwXoyxn2#gD+o5eNZ25e)ZnKcT=ZnLcKbF*7~08gw(-DQiCenT3wNp zR1HzhKg>~LXB2+^^@T$om8ec~@!wuK8Sb?(OZa)AFr)JLu9)`#strl^jN8tLugl7# zNP6DalV`zk%lo!pStntNJ;)GX?>sD_Qoctm5xJM&(&}XQcB#RwS$|*)-u6jf>?;|~ zw@Oj6Cz;kp=N-yFzTY%=vSS=}wcOH)?4iyIM zU{)l+lIg0(bvkHF`;%M%goWMFojZQ{E4*HHJ(Dp=ni1RKvBtp__Z~>{(2^l&tB)DmEqapHf<7X3<02s;xEoGE!m4FI0Ab*b6@%2I+(2`9^-lgUQK>}mNOcU+2SXVo0yq|S|I_#kU1I2nDELi3Q zuCC!R%pWOiUq|Z%*-XKtWfP>4+M2^3aU#-DHei+~s~Di7UT3Gr^q|5Rnk}y^-(!wB ze1TN1(s1dMMbDW30I31B3;rIyGBt+`loeBEPlB_30N(X&EQ37oJEmwn@217?H$yewYE%>>Lf8iObZFsNUpft+5*~BK_;Y3<1IO@&Q@uy)Q%t zskidhUntx5S>pWW;R3ywJ-9f8=|qxrDBl^ylAFi&4y$36z1_fGuny}OIQ=06O#fl^ zzWXQF2dj^lrV3S|yS6DIqY>fXsPHP{d37|Q;-MjQ2!OZkP~wZ#4bD^~5p<_I0zM@l z^HXpIWKbJ&Ug0hJ)#;k%OP_y{15ay?*KvpatXnMSa{tm3BiH_4W4 z*^>Z!v+{Lc-U_j-&Cmwf(v?v*0x~AC(4mye?4KS4~ngjMZL{A zYmaVh;v7tzIX`nsXYaznLnxNs6sxg9K2z9uIN6|R92FmKYtB$ic2&HTY=hSGh3Ed2 zwUG~7uSpZAFPg@DuF@&ZF>&yk`wfe>4JG(`jG_VQ1-ZWD@R+r%D3TnsSik`JN#H|~ zavzN*a-=q(K3^?!dbd)3dzr@F=2f|Yam5E(>@lej6qbrBe+)%VR$Syg4#dy#V5yE% zkq%Ecp8bIFyKR>75K}p1H<|^u4DQJ#L~+p{30bSBUs!OTwC*%bmFqOchl`1>K8{jH?6r zQPS@n>pemoaC&*k9!H_pAoK0h_`8z3Y7{bS-Br_o3>IVOp-BGI-}+wg&(46{b~wXm z-fG2#FJ>kn?*?qFVZ1{`O^zH9mbRP~fN-nw=V5y`?rHIY$b@w|CS4CI#*YZ{B-`So zbv=eqmVMO&p)#315&$9aiN*S1SX(DiO5BM8DK+(Zjz%TwMAT?;u#wzI6y+gV*84#4 z-Z_RAzUm0$1!_+|2o%7`0}Qe&qlb#;iJRbr^2HFq9!?~i6P3$Bm4;s7$eRSbx!d?2 zY79-Nw-;}^KeN5C`uJ$7P-WYz>k={=VJd|ud5UZ-Vy`^R7hzATBXQ*pjG%-6j3fVy zBmYPoL24TbWWKl}3V6rsR zyUmwM$+KWXA-Jy!-LNIYt!3+P9=vk=Oal1;Gn&^wQn52Q7QPIB;zffdh{;GYVX^qj zK3%pwkvLr%L})q3Z8xfKBAe@@U$?(f=1@O1%tXEA@*2}(&<#$ymhGF0@GUtcf>Nup z{i)Fj>p3taxM}gAA#!uzXX2Fr>dj?o?Lhs$yJk$EWJ8Yg%|;ztih~m>FE#nnl3^$; zRJMTF3p^YI>BsDde=^~+ofqPro*&&uArsGf>=O|tipU-{ifn$l=GGCVB$|-AP0k8} z_(zMG#@lYN{+%QJa@qoFw~GMu7wfq@W04cMxP-?rzc0IS6|EUyJqDAOjgv-dZ34f~ zhDb&E1G6+yQ5O;MB0Dvz2NlA|e12j126M>a6QFXDf?J0ydh*NHpW0tLpUv>O@fS#c zDRBjkBsklf|1IC2C6K#5M-+`G-IUm^>?Gu~pv`rH4}^&Msbk9WuJbYwE*+r?;^5|E zLlFq+kbdWshiR3>IRXAecY>6Gw=l{|pjIecR+~2xAPipFiX4s9sv#4!D`$9dYdw**6B90w*!iC~UM>X5U;}K!s z)s8{eNK?JQ$t!yeVl>C)z200uA!I$O0pYM$^MrrZ+FRdW+LG#gX-?TZX9z0%fGF(D z{GM2<^=ia3A2(QY)hP{HWBGs+|+EOnKWI>m?8!o#s#86$r7V+q+@O?CJP)X3#&^y|q@@tv7rZ9-si! zr+i)Dv(`7sMa}%q@#l$$*{u@8Tb1oS5~vy%w$iDix3Ehhec9idj6Q@tay)MAV<3-9 znL!H!OgAaCL!U$OPUYFV%~pNl`o*=3mgDVD$U7J}IMyE20o`s)^KkWv7UQ9v6THE9 z%E&9(KhB0;Lf%E0u4lt16Ki8x z(EF)tq}Rs4>GLuJ5fZ~=9xcm>w=2q*BwZ4dwksy3ZrIFk9hSMG_idNN?l_KsGUnkp zl-pMSBpN^a^3~@kHFieDAUlN1kq}I!Z2dzonILyVFNoZS^_J4BUkO0mO|=j7;9y$U zB@`9=F^J=j3&17B4h(u>E@j%^-z$%<@>Rgk4ovd|wL}B`LV#lK3^Q3HpdbFXLmI(# zb*FME7=GT|2o+Cr)A2&3K7ZK$1NV&O>zhUIabdU^0QpUPn`O8y;Kw1e+8*@gx~cs{ zzByP1bMTl9d5(1p6st+1JFA=$ubed@oQSTdG&hhRf%){b5wVMY(#9P51-2IEpA2sH zFGRhBtneqbHlF4M=5)A(nU2Dg-X#F7b`qH+gU&j8Y*H4sHSMtK=JtFVUbWEH*L8A! zhuQ{pdjkIEOc8St!jy8u;VHLem-1u8z1L<>t!a0~sr9!({O-?+mE*j};$+e_2*s{O z0Cl_@_8Dxd&fIE7?4Jk$g~38vOeTnYeW=b6Z zbp96rnX=8RR%aB#bY^J3m@7EQ;td-2{n>qY=vs%eb!P>Rjx6vgv6(!(GJeU4MSn+S zI9*G}nhnKM${Jbs9ne`t&s8yel|E^%=URiLj~4fhF5&xG&g87FN0)0X>wVrLu{(+* zpp3dd2<5QVIgZ56JbUpuOpcyV)y)jzw#NlhE!lY2PQ=Mw)ea!{V!NUA=$HGEa8v68 z-Q6A6atTF5zYF4Ab^^G7*oHvQ&n8WI#o66I&s79I-Zjb-(iRHz2?2_^)yrgxfWGb0 zZ;6c;bo_XwWcBD8;S9|)uprygzB3WtA92Acf-iUvS#kB0s8uwa7P`7R^RanSF}N3Z zlS&XOLDg-TyVy7cHgZjmr~wJ#R}t*wTgDran_JEVRu_>!Yp(Z@zrM^;xW=WPR$~%) zIfGdDuT zTVHpyP^lvjws+4lWAXB8+IdhID)d8sp;2vI0LY)?YVyHDLNsk*4;R#=QTF0SkN8kY zVN&C%zsH#+yF8W+LhFVekT_vr&$dVw2t7fAoy2s!2v&nE6_kVNvuEtDek0srl8 zNS*9jc`kSKt+(taia;e6Ecrw}TIyi+_MPGI#w#*0ZOEl`Lg5)hOsv~BWW&@sccf>` zKII;g8)v$wKGZcYR0amZIqKt-Rdz0*b=8_oGYe3aZ`_#DV`xqKSRC73A~`0=hEYU^v*KgUZS}T< z2drLfv|LhjUpJt&mzdQKP3^P#lOD9dX6(2ZJ0+~h_MB2 zhEcK6lrCKc9dRbsxfYCdHL*u`_N}rC;C`r^_1KQ^8?rYVQM&b{_P-@C{T`DKK#oFy$TAHB= zNp?WjwuT0Lb+9m#{IEGEV3t2xZSbL7O2p9CuqNN|X{FC3kg8Aj z4{*z9{p{>I;9=K@;a1ka38DlQgNtf19wQ}m0OhZ~_*G@pa2Fzd%}^xq^(hQ?$GZ-K zFC{iyplZWOd=HY8g5jo?*8*wEOBu-C z>^0p$XwpT>mkV}%QF@T3=47_p>BR!VXYSb!2S(im@{{(8xA=sIw$eW*Fdq|3Dg@*7 z^?o&S1iBndbRBIFTk`ZfmK?homEVm}=R@H|f#r%|GP9VAqT4My(^_?q<0#4^DX33*lom;#PIbR$3rA*{Q2#(15Nv) zZ1?1#2yoG;ejZzI$Z+T-A0xVsR48^U0S0OS1atu9dv zu6b+az}t~tBaI_^9;Fk)p7x9!_BIxx%t93ebb>4Gd1(gw>(`ModLThhDy& zK|gdi?6b0HMzN?ETzgRe!?Zz)Yx~PndrVVfTy_~Gaz#-h`T8OPcFDE)gD=eAS><~B zG1X|+^5k9LY+cGQlBJ_5OaI>2oLMAqm5EF`FUWh>r@8rSVOsE`Pt3 zuro90(zM7hN!|W%qrUn7!&^&Q&RF}v|H5m~iHOIT5suNr6^a*c#^l}OOBbBVdCt!9dIsRM zcIhO#dWTWZb1F(~4Jm){F#j4hJu#H$Bj|dk@6OY1SzFFSym0*N4_M02UL4mM}oLlV&?B3V;sQ$hRd5k8YE?WBs+}UQmn4RGZEQC?vs=Aal zSqlh63_bnWQEhZm=7$AGk{yuGChQCWH97RLu?$qsjp2qpRy!}H%XW&)s?Jjbn@Mmk z0i-BdBgz2?TTYJl<~fb*@Xm z3_oNys_-?E3^1mLk%#$=ien%n>rN3@gHo88N`&c&Y}((zV|X^kaPNgSY?THM^FU~X zv-3yr8VfsjxcVQh_bu&ii#B2ahBT}}3?cgBat+1|_OY1OvqW)~Sr1;rw>^sta(HVG za#H>~u@PV)1>sn3An8}g*MaH=aT3hnU!P%ICC0`oEV_=j!HX@+0@c3?DV4p<+O7Go zqvVpNoU^M?q{t(0a{Nckc0F>z<}3&{m%e11BTe9+nSbmm_sid4mY4qZx5thHp@(;f z8^(L!Ev&}k`iDX@HD~2d4v-j}1rSi$4X?T5$TOVV{M+_y=(UF1=aDMrno%ngf{A8y zZS$KV3^K3+o1OX7_4X#s#e_`9Cg zKh+>l(FD{*>ovfgZ!}BV8N9>77#415$=Xo0fI!61Gfy4Y#-?O`Te2tF0r{L~G65u) zb0cY-{U*ZFK2j{H_?H+;U0WfiT0Q~Jf^9aN(-3ukWQVS;fXhao5;JYVpWXmkGsBqP+I3G}WangH3_jDBsOoKFmky~l zO`X}+27YYa+%Ts;ZV;+>j&&`52x6-Qz$Fifo!?>Q-ViXKLSUr2o(!rO8bIY#r~qc~ z`#L`65BuvAE}K`T-=nwkE;W7-3umm?3v3u}zQn!8@4{fka1%hD!OXUl#^$!60&NbQ z)VAYiXHWMKRw|#xPrS?DjjqZBHjvq(Z-)aAm>qa#P7mT}I1l?jAt%)@MChe!X8y5d zd;rVYJhjc(ijDuQJpR{}$E|tMgCznPoR71=hmOkg;mt5M;A|n7*JTm<=y)wpMi6JFWD#ICST|(|KCG~>~ zl0>kt2MExRvH5%>X*Q&->BJ>0X2Ws@iP(Z)c?4`&>>6+(3vm_obf@XP2gPklpl7(k zJI(PyUJlg31f`CVGwr!E{B&J~21z_-SxE|j$MdAhi{q9L7sed=(ILuZd~mSjv~~X* zc>d`KcL15_wkGbrwc?`rF^LGB{q5_Bnp(9Jse6^nx@9TY`bm&WyBoGQ=Y&U$qwwaD zb^}0m5~~{QcDLDmx69SXAO6sAxqF1j_vKr!D;9z;6N^FapTz-}CD5Yf`sH7VatY z;m=y@zBj}eI5j#QfR?V2f{%=rAii%wrC9o!7K7`-_7!aLe+qv}epNmQOXoZfo2&#b z!Q|s69Wkhqq)8wzaQ~sLtM8cJlJ{>SbH+YNgdi|IbLQ>qzwKi&lHk*z=2>h(`+DTPCQLH`ssaXn5%dxG8UX7dN`9%fM#K0iY3d|5~efuSBCKoges ztL>!Ou(qaCm#~<1s|6%tYd*CJuwf}}+8a8Gmi@m&B*B0WXHiqQuP>cK7P3C$=lnHM z0V!bQjk+&)-kz190pj;q732KivEC}Np?DPkKMHZd)KBAMUg{3sjXIpxhgP`}`N6BCczV`SO_~BWv*zj|MA)T`J+E z2Q@v%j{|DCpuM3zFp#%eeq!RP?P-?zg$Qd82F5Lm%)x_4o0+K zC1=^1t6Z^krRCX!fuu8j{iI)P2ZXI=_Fy5Eyc=~n{C%}1z-_2WjxfwoT~n8REi8#2 zrWAs#L)RZQLEk9o5TK(82SQDh;WmvqenzTJ;OYzYlQq|g1lf@jTYWh;q?qxO+nAI{ z<6r8zv5GH{iZwSCYK!9d#vdfdn1%!}vcRU@%80L2)uitbljdsISzo|a)f(9SrUNOw zYkVkwuLu&?r9?bZ5wjV5XgqYz9E7^LdU2>^UwKby z_&m)Zrq7*1-l-|xMWyaPQ&z={?$g#)Mc(BxMZh>P))af|P|FX%Vk?GR)WU=i!#w+0 zAKXoO$5OYOy=z(loJ+mM*|9y)RI}zy0Fmik2Ro3oE_zTT49J_rSbqOuUkM^&1M71xY_a3a0ny84Mp7B zJ}HphJQ)r{2|bFsK>_gb={aqN2CsGs3)pyq`}P&pL(CG_`5o1Slrg;Qk^t9cT$8>IrsEH1c=!Mim+D zG9Gc#M#NqSCqEfjSTtK_+_wOq0rqiJJ5a4V!;KQ2wImy2X?-|&KI!P=lknImnQRFT z707kLSRS!W&&9jC237W(A6{J?6#qNo5$OxWq>1`P*2jNEwJLhI(Lf5{8b9Lie++YB z{Tms7B6VYaQTG?wrjWs_n&JX$ONn@(B4*ZoRlRMU*bjDb_25*@Jog;a^cEdq-d6LX zE3Km7=KQ?o2?a5UI=)J&{Ja|fW}K@9$yxG_aMMb{OYvAF0!YN3g_(*5kQbPWyMN=e zmy(URBswxy)sGhx9Mjl4KUeu7zt{fsp9YnbD=|8`34>~ra~&ohm=vpC`TG=2h4@Z` z+Zo^%sk1BNrMPX^Gf&b*XD#zL5+z0PEAk}I&zLbj1pTA{kM+yXtppMFvT5^MW1q`; zo{46c@3}oYbc%W1kBo1fJZ5EACshl#_z9Eit0;A^rkWtUO-&~kzHw5gH7;U+H@$;F z!p+^Y-R~3*Cz891zPs?`h?qFr=sChlRWC|~KYwuM_F&Al$P+IA?vKvPuVxQp-vPy%{VtBmjfEzP9MW+MjcBsSx_*E%>uhFt{5jORJ0}Ly3dGb-F%bk6 zciwIR?-T`w~8C&}JkYuZ8g< zr@(2#fkt+h_>`gnP2o(7SJcIvxoAc58gCh!u5HJkGb@=1Rl^r!*IJeHcIy(_PBFX? z0Fk}X{q2SoR#T0@2_59=5!b6SQ#k0v*mN9lHL~VCGNqEC*OWb`!J0TgAWI-Sr%pvA zAd8dDJ;Vf;#HV>+WHz{4f(7~9WRs#c7Z@6hJN%Hk_lB;znv%g)vxcYYq^Tmf2)uqs z>cF{KgX&hq7swlG1d^x|55PJ}j70xNoT7;CY}s<>&ljZbQll*{3sLooOa39jkO>CCR#Uy8qzxO4u=1qq5ym)g7*c?N_XKexTy;Y!cBR9q_7jF{3DB!>( zNC+pk^zYM!APD$03ctwD?3)!~1L1=1-zC{P>%#}l9>pO19&pFpdC2@GUhmI^U8P&_ zP8t&5ul54x4W|NE&8ud~DKQs^@A>+f6h=2zo`2`itgafQSr_T*qzBr~5Ku|O5KN3% zn$U(#E-z!u?LvOhCKDb%Jl4saT`s2k-`vg_3q*WTkiLv|t^lWeubiuozuq=bbcw8n zxmAj$&)hJScy=nm%YBRV;uSEMv@s@+n<^71hw5Bpuy|-s$&@?8tI9;-kd8TQM@-K6 zZU$SbC+-0i8jRBwnvuQ7!n;+&S?ti#VSL&TA8EEr)*6KIdi= z!j?6s+q4PYv>w(d{*c%VPPE`A0@(+-0u3l2LD?H$oDw296MCv)W%c5PGRVud68&T1 z4Z-fFu&Kx4gCFl~<8D#dapiwxCQ__S%fM43s772pv8NUx^vZnd!XUx&2Laf+fsyDZ zfy0E*RkhL<1Nl`X)beO3Xg6Zkf5EqD($r>CR-I<$!AlLBYQ1EG zc6d05hHYLG^|w)d#C5!a%tc(DaI@Y|i0A<>)UCvo*jj0Dw`KR4LL=(y7~rh#AD2x81PDa1QFKlXzi9`#8uc|@ikC+c`IwZg|^Ze*?&QGqms-5A{yfj?n20yq)m zpq(N(A8~(IhVq9>d@_g8WJV@)4dcx_J0AG}0gZT}yE_8byEG)?)_4VRsCUG}Zr>$oOLK)s*aCrFf^x+>1dBq$^I`q94G zZTcSC8E0M-y!zAd!ov`|{P@nsNrr2YK_eLgm2lPL zI9fNA8QD@tXgSdc9MS=&wV>f4_k~b1h2)jLY|TNc?9X^l;ovqoZpdCVl8Cj@7LV{* z(xH0hh}?>XF-`tblSjhsjIB&n;=V`)uZev>kS7n7HC5X;$G~=j=SlxM-eDoSBm|M` z@0Yh-OQMb@{!=={t8>9GHO^Srxsk;T=vHilm%r7&h0lU3q4ByLgg?7KmwybaXC!K$}gchZzco;X+($4R$m6b)>_ zW#S7)hW@$DbgjD1Hoy_EXylf=xw8Z~OWLv{idx&Vuq3K4xqV!|or>-F!`~j7A7F_- z1DbQ<;DNTt$#dRNQ@3mfC5IeX;Yw6Adr=R`D`eq_=btq+Bo(_oSyt94;PO&@zI%D| zC%H#wOBfRnEzo%qgZO7H-y4!1PkPbzYAnowDDcjCo$n2n=Q`Ykn)mNh->@ntJzw4- zx6@8KsHJ4@@ZtOzj$DVMjJat<{HIg~-52p)-QEvDc5QB>iZ$gdGJn~U@-)dc#Bs94 zb4c7&iX%1nVpkU>B}ChdOsUjVpK54jf0^Da^VCpYCUZ+swHP8nFZ8|nI$0ANBRz%lV)q67KOK!*XHN;wv6u7tK{CIB#0aS7L2 zZIo-ULnXn5o!#xvy(!5>o;$#)NgFqB=))tmNh;adQ?4gN;GKAxm}U~@$H)$w@gy&{ zThWwyN=%!t*WvgG*U)Ti3z`X~{-OUVFKz6sh(bUdqA}XUomO8;Ja0kb0Aw)7GSsA& zuYlPJzdoD2?TW)S*ts`Rbz^mHIQddzA910m3LB)5FJKFzu$aG6+=Y6xN2~U;7vDB2 z*oEY&aJ+7)ak4?P4W5gXIK5&u>~h1~^ms3*0xPAmCNeQr)lU>!n8Lr$f_fgVfQULQ zKV&I!73X1^<-}5l9^lxc4B)QqVF8>-N0xZ}SDnj2{|ySG3;!n_?tDA@WovP|!dCU; zlU?Lfnw=BKZuiJcgH?`xkLZK(_Tcj(@R$N&>WSSR(7{7f=C=&tuOpy;5v(qKxq3L5 z*$Vw#+T4oZ3Y7=FPnBvHRm0t^?K+wsQEw4LhpG9Qa-TNt;)HIWj*YxtPJ5PR;JJAmh6z`N$AZgE+8v zfGgQiw9I;ku3cK7u#GuO_vZ$YFrDUD7roZsO;HomJ}X@|JKe7mSu0YxJI6LZT!7Wq z868UFuDNW0j|~*$yvNtR^45_M58-7 zRX!JlLTTBDoTV=4G1e&VZ0qD;LU3L-(Gg^*lh!`V!b4l7QHM9(uS57&9M%PRxxfkc z$xp_eC4>=CCgAI5 z{O81ekbMqS=yzrZHDe}+psFz3I9kMd`DaB*%rLj{*$xD#+XN=I0 zO~LhSwbBq2c>IgCG@5>laf%Z)Y-WUh|N2-h&}sCs8X-SZ1NBnUQ)h&&tr`RyPZwaN zOt%~*8ce>>LG=YvKNN|2{HIWSh}K~&j)p!mScyQavC2KxxOh?S%P%DgzozE9KDRqA^jShLdjjf&D)wuyC9+qNa~wRh%g7bzrPJYQk@72|xGGu1yOs zMfe&jM2XWASWdl-&apmQK)*zUERSdCZ94u-V3D2=YH_pV8nLZZ-uu@o2Rp2;3FB8* zG5O)lSk3EI2r-j}jGXtlA;BdTSYI}Mn(gAGQ<_67>GQNXIBi!M z1pgzmv`B*NhTcAWKLBgKymyl@|J`Pe9c6sxt~ts*v#0_tr$15mNO0Efw=~njaiGX5@KCy(rL+#*jA&-6Ip#zE60cea)Wz{N z!2pM*etI4XXB~v99c9U9l!AD2Vc zW$Wd1QAUq_dxxhFX~zdoz(-bLJbnUj#9?fXx1ahfcydMY=R<36FmiH-iWvC7$j_DU z2}+G6vuJ%j6y`t_cHi{moqJJz`tir%_j&vG&QTiNb|u#aS9oYYs<2%w1-*n zEc;z4E@@QzytU!xi+NCs#BWH!66XmC9lgH4%IIzhd3iDbaY4rVj!~063%mM;k-`it zToYUrjz*G&3ys1pwRT=oqoiAej4`$Y!trw)5)#SgA;%5CN04O<)jCl9a%a7udoj*B zf6M?5o?9Yv?=UzrOg4R(RS|SaD4J7v#Z&Hvo@RyP%DY1kCy5r|6q!VZJ8v7dDmAlT z9dq{Bwiw5|X}2NH!wXM&LVr8zD=&nJK^Y_y4a+l@e^VVQR354FTC7qlmi1m_Ri!s4 zQ4>e4h;b(T-t8cA<=>}tzWz!O9tC&K-?E+lfLKh0c{yYr=|B(g4%vJQ*O%8aITk3) zit?ZHh@+9>09Vu2!?j{qsJjbnlSng5%I1lMH~?8YZnUb-bsKN*(pR6{k7UZhv%I|e zS?6AmP%w^IKE&QoLF%g)PSu6tT_8BJxRq{pNBLQ#^*xwsWZs_&=Lu3Zh?2h5(!opl zbr<@^U(eHD14imHl&lAdWl!8i3JGT=wa!|{P*z8+_`=BNxW4*^$6;?8R0oy3dnJ!9 z9yERAP%Qnv+)Xf40wS`j4E|>m{(TuXkL`U%Mt|4;Knt=Snmo1+E|m_?G!>ntHdrg| zShx|3lYUV{*yLpVON+yFUV0AVg2%2f?4_vQGYgj*zqT6Us}m-1k1dt<2y;wESed4X zVHCpJK*y1rq+7EeN4~$xD*Zba&wOq!nA@hwbM)lLB(BkJBrpy zrH41u<)4q&2L`pnY0Yc6&wj*JOCfm?C|h%oE?FP$DD2%J#|+wygcG$eUgs1zO*qiV z9FSkoG@!|!Yw}3AnX#3uNZb)E<1@AG`t#%@v!ZJI;_TUK@I35Z!8<5K7K0#iwR(Qu zvLNbc5;!gyQZvV~{A-KTgx}T@eifKopAlY;@;y|D5vR+)oc<7-XLGrLeuD~InfR-> z?RYk{Upl=I()xDEHEKt-eBcKI9R_qV>5vW4z?{K?LsIT6RV21y1_rQ;a*xAvnbiL$ zSR!s7$#ErMTPyKxs}2If|{zW+js5q=ZH zoBq{NJQAEW`jx@JrdpwjoI!5@kLL2c_ZGZ4kAT@6p*W)w2Nx}ORcogYWR?kx@wf+j zzp=%D|30?+9buELvldCho1y41jyZbVhC?qJgTYR*J3?30A_ zaj%;Pg+L`#^E8ds zO=n8B)Dc=qHUfuq$YCpDa>92l*i0jF>#tCEn5xj2=q(o7CCddnh(!{yHrnA4zDPM% z&lZ(i)i97inMW1VVl`ovlRMMUz-7)PAP6vB>2Cv_l`}XfKhYc*tTukwrB3xwr$(C ztvj}D+qP})eUnY4QoA4WA*row@*AGh=Q-Wg=X8F5@i8TTsSX<7BnJc7U0Lw)t#T^( z4=S0kh~%s$G%0@4<@=k8App164R%(>%=+n@i^8iac}AH0-Iex!@KdqjNGXHD4fJxB zHbFCzbU9`W^l5H4fRVYZ+U^*AU#0NYVMOJ@5C*F|^Dz&h;X4DWwLfNSNh=Upk;u?8 zv|i%B+zAHqt-UvygcT|>;4+xXQs?vF%K8}c|InY3%bl;Fh_Yre5B>b2m3pR{L|#r` z#ob%~S2;25B$pZEvXBTGI__ho4W?(r^xCnhP8F9C5(W2RbF0be`|coU*<>zg)2e2c zQaRJ9H_J71OaUIq;4 zss9qWdkcox7Gfi9S(q7RYQEkvXs{lK}QB`_V7EefvC?B%C&l_Wy-~n_XzzR6OlMS zue{_dcWTpOaj>4U#bz76K>iF=l~M>?biC^>@g~)K9neO8ePH7iZmF< zIC`r&G8VNx*9G*Qn#6^A4kGf-Dikn{nBZ65o?Xz~aVl7UIajGdUEinw^$Fuq6-*&{ zG_Dz!E?)naiC(86&Msf4-+rV4l^qd|E9?3~G*rJVUf3ye-oGA$yPVWGEvlWA74mXY zBwzDV-0xFeoH3y-%0dxA{JLJcM?#EZc)~*&6&c2yE@2^;XNls5a(Qtiw54jI&D7;Lcgn<(u4)_iur3WOOx^Y4G{}^X0#*hCWE&>77yiB3Lk( z>9cg!<&DU&4P4D4RAK(3#y$r-y$oLFfI>Lh3}t~ImhJ))QTd6|7?Pfknc(eHLSX^Q z?Eu=~!m(g?S##*Xoke=?|9t>t@GNNYaQuzF0H3Rju%l9hqtKs}Z;WLmdv zPbuLCJ+!UO%9x_Ob$^i__mebAbYI{jyN{jg|EdR^FJfDxyt-Lb`uh&9zh-!wmL9%s zG=qwIYG+kD|a{U&>_psL^E z%$x7&Un3KZw2u$0yH_*jssiFVy6m*aBb1&`%0I7avb#;d+QYY}(PoH=7?7n7R2XByJxpZjMl=nP}o73S8%yoF(Q}w<8m(5%&$-8*gP{Yzzg1 z10ALQEV30@=qryl4xcV$K5<9os8qJ_`SM1KeqYeXeF*2kfVkB!N_QN7cq~Tr-SX?f zGO&p?;(MMz!@#%4?Hb`p2}l;X52`wq9$e#({`+bzoOQZt_r)kfDtjaxJJQMZCqSLD zXzuI4>H9%3sH4Hvqx^58lYP(DlEw4RQaXKeQxd0icxebCiSH-N7D%vRv`!q9;X$z* z0rVA}`G{}yBM~cXKhw9d?xtb2R}*TJ7+A3Q?Kivntpv62^mmffj>2qHe*0o%?^|C{ zGM$DqKR3%Tnd7>s3qw@1M@>5eeaH2KPK~s}Ht78HAK$z#^Gekgkc#w9kBNq!@JkC* z!s8nMpsm-z+QNQ`uSmoeBgA~Q1~ch`307EY%6U3`f^|P`f_lJgL5M83Y+f-v7K0#_ z%$FZvd#fIp6l(;LXQLjooBl$%iDBec}NrVSUv6ZT>(B zr`_*FMzo*eC7mN@3xTPr@fm{AERa}Yim3>5mTH;fVAhhVxeUxB9Qk&3n$9Pv6s>=c z7u{?K*z|P~5Q(l;a|?z{gIejn1CZ)opyT)q;*`%%iq$D;H0rEOk1+o zqyXFPf^)Mr^mb)=BUm#m`>umbpL+M86fXkW` z`FV%00(=G-?gv}TA=$_=ftZ5@n?44O`@Icf?hzppJC`kaD7#xX)66Pwuwr1&$tJ^# zT%g)LeWXuE)OR24ft1?fyEYC}b^?}3ePACl&rEyAy15-A;?CfbR!Q}nsuawlppB2{ zdSG4*dN83nazF8d$+j27WHT_>({bu;V>^$X?!O6aI?W=!t!91?-cSuV)K*5|>! zK`~pjc{e);k27hj7jEneBtDydz)64HAnkGd%NGzoqeLw2winWQiMBQN0yEXi4x;M$ z-J>TaCOw-vjw|alrH`yqEUy2;xaR^>MHR>lZ_cQsJc(;bGs4q4i~J#-ljPan+HJ;? z8`1<)i_NDnj-+m7>IEi@4}o(GyIc$f$-V*VfGu2*Uzp~BpL?%>aqb8~3ccaAM}Zia zx@J-c&s6wT^p2zmOLf)Oqq2^CP9E`5hzac`M2+?e2N-v;3pMB^KP>k6eD2G}%ez@n z%L4fKT8@p$OlaVP>|xSKyMk!o1hs?jkm|RAYZF0^1^Tu>2LMpwxvxhN(XH2bskhig zQc#+jLMC7gb0ij+QtHBj6}na=nDwNZ?tQZu2LavP7K`c1g*&xrvfEAm>jCZpB2mqn zo?(b7yrif9-D85E56cVLj*qA+cNp^r`x-aMSiKw)f+`->RhWvuxOR@4E$|SfCzCTS zYii8*1F<&n4QNy-Vm*gsGshTWJ{Dru3_R)YA&i-SxJb-G-k;+?`wdHtyh`Rv`euS` z3cSeWD!q#rMr>pwuSxz$8ErlrvnZukU^&!hcG0uktPh;qyU8MM9L}lr)SwxvVIm4z za^iB7&Bemj&zrO|Y42NN4k zBgx|Y1|x3~QB8t#_>px?H7zC#5Esv^FmGs}zW8IhdxM1V-w*&4d))d;q)+{1Z!^F~ z4$e}F4!{B|!0g(4(EDK+afb+&*rt5OQ^CWgm1bUMixC5JMm7PS=L*sK<|}13w6^o$ z0Hn+c+pfBovhA~2=m~wBdTi7q&e?t!5qAocv_h)WNHKR71#NIh%N6si+mQ*;j{S!3 zPqH;PGJ}D^fsR#s72Ap^3HXCCj+iB4Hg!kkpj^K2`SwPO`B>b?eT-nwfVk5y&Tt%c zd@4co-S+FvGO&p=;&Yiy!@#%4?Gf!k4NMVn2(B@c7FOqnsdlp##y(rK`(~Ifl{FTI z8{_I+1XQOaUhqD2`gv3W?qYoP_(zT8WZ$Q~eDSiofJ)Q?Ss=T2~*boEGE z*fq;w%JvPL3ppH~k+P0)uh}?uL#6SL**}sfezm-Ock+zS<^f;)dNH({!)163jc2TS z({0(7OBxBKB0bih)36L&v|)GTmkQ1mucSMSS$wsSY~U7-EPI5jrg*16az`6jegK%7 z?$870=g!Vb7@MY0_{aAl$ij&RvU(yzgoOK{UBKP?;6IHCumpy;ac~%7gSzpNqXP3M zzDB7*yL4Gby5ViB;}?y;^KPPfGg{@tYRAB2J7W-yp_15W5l@t3fn8pwjGY9*Ao=wI z;s2-E{;$?-_a%^&>uLSlS<2*_p}3>gF{?3s8|ZERZR{+P^z}iseBV@i;ilRBOwj6q zTOouQ#=&zwCU0;)wr83{1;4uFyGFVnL7SY7W7_Jv1er0THT{}Uy!)g`)`!jVSoB26vnEdXZaD&CPNsJ!g~RFJ2F zCgXqxG8RTRHfjMJ)iqXg%3iAXYtG2taZ{(L%dqP?Tu|QtxDN|8i0}-SlSuFBP5MCS z&=op7g`&GLfr7+kyX50Fg?ssx`;Q5sJ`xzNe$(&KcYd$qH*6@8jTQy8t_Dl|QRa`o zylMVcxjJ_5|0lEUw#5`KzQTSi1&Xo>S!Xz(*aeB4j_VfzipEnjUWQF@i%zr;5D=gX zTgu{B#_p9SAfzE5xiU6wO!S~<;X}47i9+c~BP`66tL zCp=*ooBB_A-x9SD%M2NtdjL#yFkJCS*MJlu?i;Ys1&ACuHB$U5va<_2PW=>b>le}W*vE0E3=ruB{ z5WF%K{@|ne)RRFKHV?%UJ*12dirn#_FKE6<^RL=6p$-2@N)SD8_h;Etus-)mr*(@G zGVEv|Suc>+9qRbDP^WW#G-2=3F7L-Y+Q{>VV$d9M>jmr&J_{n?J(FLr_JUW7pqBF% z%h}4@29bY!ypl^4U_AqPt+BwtQQ(z3Ls4?tW4b539R2&;d4qu(=%ffxl#6bNuqh}{ zZ1Q!*Kyqr2I%k8H=$mS>oy4x0spK=7;AqXT;(u+SLm3Wfqe6@m9RJ&>+RG z6$xfTsiymYT*hHwFVDp?h6>ScJ-Vz;3&2L8JO2oD%cf^IVk%GRSq{Bb?eEZ_i}83I zrN-RvXDH3fYEki_UIIt;MQPTilK}mW;0Up)2=($IAXeb?B9qm$iaFo_z#EI~c51>Y6&^HA#y?OW@>DK1REy?psLn*mb z;+bMFI9z=1vMONBx;qcS7lOGo3mE=tHw@c-GYjk$s+)@pAexn?Q>Q&AROnJ0fQ0Vz zeWLn|m&J8P(FtCz0m)K67;B^X4;V%^aT{LGR9)1{6GnF70ApbFCrj3*NcMd{WiqErP?mvrTfFwTH1&lfxNY-;@wT3#*U)E?;+AFc%H%65d|1l)Mt-l)8 zJ|(`JszJN;78FWYffnw5{s$?$Xx~C;v`uM)%&yvJ*K>?S;lgi3og7-yRgYWKMB(E& zvt1-~`{ax!U?KM~Scb{g9+mRS*2Y5AlD;LYMa}aVTrznS!(i2@wcB&P1nH5twyOqJ zIP5$6l)}G|PY^|Tn3;?^mQB!YNT01p2qXWRnhTh72`Y)P{-|FpWm}`Xxmi>J_zr8l zWoimgRfgexv4*UZf$v~oOBT?E6VwZPK&C#z7fyGTmxA5h5&)EV-1$miO#Loe*gkZ& z5R{gdkjWpx0*N7}l!h>8rJgnpVk7x0kAZoJqrl!;&E*7@thM}b-q{k5%|H(Uk>L7Q zUg3bLthnnj4md#H<%--b%(SunMaCqz$axfZ00MfI%qkeKRJjlMa1Qmjf2rkN(L@g^ zy{!T#x{(q%IGoxW*y3d}0op;M0zG2?w`L!Endpz6f~kKczUyw^(UQ)9Hpu2Z)l-#- z#@&dV?83-%^})w*o~>a-2gVkC)@L{g|M|jlu-Wi>RC4__Ch8bx@M~_DP&t^bqNOQt z#yLg+5t?qJ%ZR_?_L@A^+Oe_ng^pZva0ux%r6v1$9)CmcuR27Pg@?(j-nM5j+wkRDfu(xi#z-k$ZVj&dmE# z0moLZmlcR7u$QmCMoEao+NK}W`S$iU@IfFXEe*44PvZ@G1t9-|j|Ed`KU|DN;RD!c z`ce23Og-Z$Y!fS=?$7~tpoO4dc*)R56>vv>fSDuzo3iz@RQTY0dgQm^h-O^i`Tp3G zgO`7`pq}|GjiI2luz*a)7!*h-HlZ|t1uOBWiZ>lfu{Z?gF^U9xc`lPPP>k~I(P4L805%2P z2SlP*+ZaZKUEQCx=;C&5QO zf*O@W-xkX7Seqlap)9J1pypAIV~NJ#aQ1n~tc11f?mmWG3gXcyW(26+GUyD* zDYjFrZY|Y^XjY!inDv=brb}r861p$)kL)vAmDC@_Bzn09rbzx^tdA2sVi?)PZ+g8@ zaaXNK9@#|zOt3dtaxdUk0IPw#doy`{`v_z#T539qN&akX8+~M_7lBisSH?!! zt16+)6dgSoR~%}7f7Y;=NVMxaZx?=&(2AT^JrPm)D}@7NhfJEQ=_7k?1tU{BQJhn= zRgh;P=v0Z{pEJysUb7-628;=*&iVk&pVAgcIO%$SIK(T$R!7FPZnhpG z$bh%iUFJ>r?i&1t3G~2VX5B1s_LB9XkjV$yS~R7P#kRx#EHwwn2wDy7a1t0tl#7PG zo+`POs!`^uuRE0`4Mmx*9Ji>frrRyVy`MxdRVEfv)JX$00sakxDAC4aUfc(};y!nI>+w4X!sj_h6>irA7*7KiK1P8w0LRXeDE6i(}$e+4< zG6s8;O-Z-XexB^#_e8Y7oyE~-YyuLItm$+C%@ikLiPFBT)Hrh0l(TkC>!M6^jCQ_) z{xxx4&P#grtWH5Mys|KS7G(AaJ;0-#KH3g;-kQ$wZ?te=`^QYrI!UR+KtZ8aICbun zYY-GW5^%{5gkrXS=6>bw3wK96=*ohDE&c#`u*FKw#vHh|Z-MytM%9iBSY-2;aJD3C z&KA>WCSFGxz~z0{nwEm=C|KhM!$qYBgJUA~O4p~)#R9#vgp zR6ABv$OHtOKS$hno}LBcOXywFV=Jy!4ZB;jfwAK4!kjlzg+3WPPc%+AmaW}LI(!zv zw?B92-Z!ofX8w?6qzIKTPJLu<0E~G7hABKoD_N770XT|zZ)%(M(dj@-O4rricznw5 z;;clvmCZAgyA;|BPhf3KR9ief6Fubtv3aW9sdiqL-_a__43ieC3dT|%V{lRdbUVJJ z@R8o~Cr-jxxyDoH`3(njz*gN-ct_s(`B>37BG;o*4Xvh3LBIrM$S->&X5Tp26yBBT zMfwd^f_dAn)BP2rLJw!_$rrW^ZW337KCQ6)OZGy3d5{%vYXSnY2RNngp#RiXmRfuk zUzl~=B}|O;tH%duJ)D9Ziy*EG7%=t9qdvn{L$KskQ{{I;0^ETi@;U=*HkdRr*k_cL?%Zm!>un?dx)hQig{C_@s^6Zz?S^4hqwg7nWf>aBC?>UgdhWn=Tt=hKsE=ocSg!Zh)U-Nxk)tiKCn~JZ z4YmVX69z1U9#WU$Q!mw3yL!CbDYQhBtbowU9-jhjEqQ%*0?Iyncpnh+&%PtQXG+r= zn@%n3H$yiQEal<%?32II6?E*NypB<>meUx&5T4AvYyRUzDy!F{rPp)YOA(nySYE=_ zM)oh!CFIKMSBsO49)L0~LYGMG9{BRc)W(X8wHL%G*yQ}K(ItH0Nn{fLvV!K65)U6^ zqQ@!5@q6f}Kef^PLkwgv#_Jgtf6;2!-C^)yKx|B`Dp1V!$~~uoqMsHWdBnJtb!*cJ z1KD(>C8o-!XfC$nlHbtfjS2{J*~s9lfFmt3PT3aX%om#!WXY*UOpRYorBk)8v_15j z+hZT)@(5g(XnEdB*5MbjB5Op>GVw?fX5B8Ky)%xZbNH1KQZ~grZER{4HmZR7-J8$K zb{MB5@lmDT!8)>Cwn6T~zZ@6=9K-R7R`y-MWUB*7flk6MmJQ-u){k!2jGc@0V=t{AYm_6SEMbtl3W_33dxZv#DA`doBhRFC8&o>fHWxR~c6CsUa15dgsv zHCeM$R`x-8hT9zyYViSZa@SKii+x!Y9N!qHf6zc9KRU0z8)!QUa@S=J+;L*W9{*Ov z>ssDoD#B1diK^qdy$MB^YeWL!nHKw9Z%xof-HhTaYc z)h8=0oUQs=o3u1m1E}=Kk?*ARu`V(ur^G zFa`Y979Xv3Co_`BgQB0M9M~*9SeGXE=y&(R-u%MqPO*oJv(bEG6Ru`CN~;<)iCcSR zlbEBpM+0ol{k|5iY7qNTh5%f-WqDb3=Ie#A(qCjEr(5@&2kP)Bct&vu_1?3ihT!WZd288wFM&qL47h@CgNkfVZbyBq_Xl%2vw?aUVE z8Oe`zjVREdV!gFXS|mh66{KJo&7x0y*~)LMj&g+OVzqW$^fVU0+;c=^fY=+(R_Z;> z_y)m-Y~9Iv*3#JX7-cDD0k0S)-pY0Ln`(;md;jv7Ib^L~>WE&h62hETX;WjfZ$q2F zro(wQW6ifoECPXX@^E>qJ;VwNsc%u}NOeA)X07}&8DoPV)n~{ngH$kJmCcM|rTTkB z*IAxPX|}P{fDr;^o$f*X-^Tv20ni7(!;1Ie+39PYd57|aOYz%cy&bwpJ<-+sXlt76 zVxwt|6;{nlUF8fwz{Ok4t;fY>Frnn`6+^DFMxDr)9eWr{!5-X2YZd6L{>u!r^h1^U zt;F+J8GN@}_s&zR)+kPqOj8x82A*p7GI$M)RzMsS~#5T?e_7l^)$_crIt^h z&o0C&krybj@V}CVi{^GU@_oU9ER+x)#jTLJH*~Nr)>Bon>?Z$JbQe(mQ^nsTeEQ1ZsT0 zQNYgF8aoQ_sCz#jE9yt&hEysMwbbbdnBYu#m5-#HTL+t>`*OV~zhTNSZ`%zzs?o~y z2sS;zjA5RiSq>3s+N=MM6;lJkUuw*3N3s){cUBi^4p zh_bc(CA!a%kk6($34uXQ zefcQkYBw{`9>{wNm8vyW9_hGRFHyalO6nUV$P3?g68<6aDUZKo?Vo^T$7TR%sWJ^q zlm%p~$&;h0R(NdD5NnZdc=QnlZh-T2TGef6dkuQ!nTz8+C$mH94W8r$&~mo*lEDk? zbtEM0hpKi0rG#Uuu128kN^Kj2pqpX-3|%N1E@k;~#uec`R|H1QB##9X(mRALg2^$1 z%iH*GAETg3g-@@}R1e|w?A0&YGxV^`SO_06364vmx7#R)bg(YQ-?}meP_F{V#l)MV zMn6r077co$(bYr(r@p*BAZ^eB!%f-w!Wg6^OjQtN%c38W|3m)DY@)WDt>7*rG_2wG zO?ho2Us?O)$pI4r?O(3!|G~WCPz5Z+)P-9O59)RU+`1hE$5R5~tSD zsA+?Ekfc7Db$t636zRVoqtjdD`dg)1qVNN{Oo8=fQhaKgYty&EXL3@|tCS;P$C-8wC?C7`la&ednl676?lX!6u<+^`6)1Lr zvl4d*Gq^>tC0lSdnLRV`+CfJd!ZI8{5ZJUVF6h$AJ!%xCk(NmomWy_ zYgg1Dux)vnLs@sL>IXnz64RRzX8^HAf@_!T*Or?=CsoeBibvSwkM-<(P9PQhS!3EK zRHX44*>jMuniiuY)MX4o*`T*nSzX;ZF$8+#zg+k^+TXkXcF?h6>6m{%MSTv>OP_W8 zFvf%=B}aSwOXPK)~g5$eruynLnnO)-ffn{9;wFyEy|GBf&n{VG~*4lg{fz z^N3^F!kwtYcOG=}eT(jW?RsxUkt8!wpqPH*BWnX-%J{DIb8%OZ`Tz^StE#FOl6aaeYT^V0OmM2~ zqHA2vjiY7WU8#1Me}5U6kKH;=r3e*z2wP8quvtixxB~QXsaYk-3;Fq8c8r}V5Xc_j zgn^^ZQ~Sr_yUe(Z8x)Ytzklo%+mxm}+dh!%4hGJwJySMT8Na*D+sw16eA!%;sJhpJ zocI7uFg-*UOy}uW5g45(y^Om~ruacMuofVF9>A)251YCCJE&>ih;G=`1XkvdHYCGT zOSZEB+cs8fH_WTlCoei{X=hx5g~~z&EYNz!U;pVUdevGdn9>-*sH|Cvbv)$c2X;nb5L4~L z9GP*K{dm|APm^xGfWBw`h;}latQ6~xV zWM*VG!ztIB@pTygc8|PJt6`O?Lj&gDbcFiJbY+-?eJtTYcpUGJ9cFS_@KP< zq5DY~Fu$l%`<^<|JP?HbW28`Lx3!Vl{QCh;?ZB$nxb=v{0}|uc2G8sLWH!VSI{mB? zFuD%TV85nnPE3AfC(y#C-THfL_9Oj{FNvCj`uEhU*%X8$eZ;3WMTVhQq4lxaXz=`0WwPdn5y`N(JqLs=R5`sAF_k#FiG0ZZT*}(%OU^4%D5#`GM$0kbR6< zaMWxBFmGyr5#T%PHtBJ~LH(CkY(uE_`VAeuK}!|^ML?enCPv)hxM2SI|B@@J7i=7jQ4J7Jc?|uu= z+_Vxzayi>wK`~2f$&%fk&nT4XCPQrQqz=%rF9+5LL0)xs)aoQWEiXbvgJT5V6~aNK z{QtpJR^~0!-15|Ye0(ipr{AwMFhlkyyWr@UD3YO7NdwNnX-Z}+A6SjG&&eh6Ee=0o z;*p4CPo@ZHrP>RMmGosN#gqO@J!x07{h4Ng(auxYyCTlbeom{B-OlfhQyPrRgv=VM z^?$I_N885ET_n%9^A4-@ij^Ukrj1!?d5pE=eJ^Z~G$G)cLn+xLs$M|81_%MNYIrO56%judXQpDGe2% zhC2jgY4mKlnry+!(u+`8GG>pS$NH|;j7F>hOs6d_yP%*V`RqWp5hE=633&z{zLrp1 z4@Ri@b`B+V@gfB&p_qHo`&r7-W~AK4z@bNMH2$w_B_svTvbHzc%fJG^nOOFAGa$el zmSz^Y+;LPW$?3YVnF1SRYrA#hk=CX@Ar5GnDjVFD-)rS{h8pcc=Qp)vT8Fkq3`lR* z7siN`0Sos4I<`Ol5xMs(Eb{iNW+We9lsB$qcY#9|R~72FJv&NUg3yx25)JkD%wTWI`xPh}m)C&39EHqTKbin z`dfL-aKZ3~y;lTnbn$*)E$B;+h|U< z(7}teMImq$a~JcAKfjYbAv3EFN~JTQuCagKoJK^!E{WnV@g=#0$^O!z>0tys%DK%E zr^Lwe5LTQ^6APy{8B;ozOPKL)#l;t^%(wpAHt7GmQruh#KUzx2W!4JDHF1jhPbm(j zvpsXrXXuy7vi~O(D}0iJIN%I9MH_QQ@Br6dTvv?ii3Vxvvth!pSbrB1aSd@Bvj?tP zPHIXRnbkz(BP6s2Smoig(@U$zP@RVC0mBhOf~)6%BL}QMw=bl1JyZR=^0$;YUrs03 z2pJ0ezNgg7{x{Ipi(mfRWv!DlAN^0Lgt>Hs&m!F&N84DT0Y8h)K=iM>{Xq+`YiQN@dCWH_|u!rGU!U5PcV~vINvz8x6yK2-Yi9FM^wX> zj%1`vOn@rxXpn{Ji_J#5HA@>`Qnf$vJIo?hFU^(=Vr^jhEs1&M`Q=GBXR^&0p>ZGR zOYrE;gnFh3LY>bG7%9tF$wzDqIey|!SWcPx!Oas`vPP_nZvkxTj3$WE@iR#VL_BVs(z%9ZxGYu~q8yBt+o z6>dM8X{^pI?HG`Lyl;%r$$jQ-;dIEH3KQKPQf~ z4g?|P_2ug9H#X9mzu&+qZJD*}Hy#mqKw`aH;JH1X%m-M)rXQ7khgU)A9M;q^yKXvwUmh`h zMlw;VR8cOd%9=*?+eQb4>}X-=7X3FQElf#aKwan??}%;$Sx1=phmD5-vnK`^{=U<% zoUZYQ%SaQh15oNw#e)7C&fE+4}~D{aizXdbAR+0&AZ5vSimMV41ht7 z|MR~>*~3!U!8k<%^gYd%(^Kcmo!O4z{d2=%^FNNRtbiTCXK&g!hvb1q4CZ-;rgTFE=8`94u=Ed3rQ>?=InRbwNKr0z||B|Ru+om8ITUx5U0t3}>Q@*z;2O9MfzI?E)t(svKFrs3SKc$!`i~@EPs@w& z&;AhtpK?L}B7V0;f$TX{ic3vk0Chi|NT3Wz0Tc=E%%#xHNgs}QsNgQmN(E5~os(L^ zU!qe)FY~48y5;v7A8P-Hw?&< ztmRfyow}usFR7X$!YE$B?KTJTw&=3ohgp-j>?3jP#K{1#q#>lzMXcLKvh@xOQ zQ~8>Rh=T>)NnpToKehtXk$7I9oH-+LX`ftt=wiY1{p1eP#!zDJR`Nd z&QP){MjFukB^8>32u_K3z>H|U9Su4csQiJM@_wGe08KIwVKe(&8pJI3xl@5Dt65~| zX>i|!*{iVikaA&E+}8t7rDQyLMrHjBEH7?^rKDg9ggsz!#*RPoG63J)!Lu>-rMk#; zIssKu+=ysUdhX?JrVvG<3o^w`E-uf%eYVV3Ra0*F%Eba$ zs!U}QulIA)gn)B>N4`Rl-PS!=2x3u(*iQCIPFzj%34jKZoDhMK7kS@^1!o_X9=-3- zAEOLfVGVOktWZmeI>x>GRh(Kyz`*d=y%&bk>ZTIYN7cE_tAmHV2mk-%ts ze5>v*Q32?YUl0w+2I#V;fvH~ag?8jx#RhsnjZLPl)ljFb$U{TReGrJpT1ghB_{k%H z3zbK(T~tAc`o2Cij{W;3;!3gmtD4>jg4RYln|73Xc=Zld?DB#%xI#b}8IKs4K%lH< zs?{ZrXh-pI032TVpAGjqstH^}GTI;qfx;6y>R~Ln5F9~c!oaij41DoB(xH{VA5<<3 zr10vBYz2Dp2^*2kp=MpdZz(c|Cm8v-U3{2KSpnr2iI*#=&PWA&8?+gD1xrT;l|!eM z6kzIv?RTpe8T$Z1>q6#P*tnP{L`1{s?94=5*yj82k_wQwp~OyTBzp2T2YON>P;eR< zr<-U;pubQ~Ph`qqDtCrrS;)>c+rWQQ{Mv!H@6LfwNWBWH;azMd$@n&JcP<7g-rNOI zx9~H$n~BG$DGvd)F)reXd!1}JTa8=={|@L08d%Vor^Dgb5!MVx%Rx#K_3veNY{++Rg`A)Whlsh{ z1|nonL^zXgJF&W(_q>$&Uuk$`s|WLlDUPDY*~!X1nMm9^ry=H0PHZApNI4X}9_f65 zpZv{n$A89?W+p~pi%F1aW^dCeak6VR-{RQht7w8IQS`+mXZXXU8Lj*v0L9B9q`r+G zjGW=#rcCL{D^kUas-=}w0ncJ_+is~zOS#$48fzcEN;UocPJ={w+`*~|wN)csY3dLzhL$mMJ&cLMkT8@qZhNOLuqC)(I-`-T%zt?>4md9edy-t6e?0;VB$VKiKulEg$?SGt>?(_n{!}Yo(c(l4p-V&Q$I}j*vqFp7U z!EksL|JH>z(aqr+k}w9j2o#>s(T@`#Mc@b;lLwyd=HSadQ4VeW0->l>@5SGeQ^8~`Dfpf9(e^4^w`w0C9R)XR! zG@~4_hq+hN!SNq4TYq|xhLqSTFi&EB;jW+~L+*ebSXz>M_pZ%5*sa7{u^a{1k4 zC?OW9Zf<8Ts!Q#DYGbXyRKD&o&$MmhH%c=tCyx$w2<3e=!QPo9-Z|hU(Xr^ol);iE zjqAmbbr_;oY=b-6sMKXP0bhq9B%GQPdHMNMuaVYC&@n4A!5wU~oP~Q+5MFAJ?TYzj zdQyVbO+q9Cb*#1Rs||L2iZOM5UvYn2uAKr4)|E*kzMJ z{Lv3tCuUbcnY<&Jp|~s3y)LCjoyIVD2TrXI`uCJUA3otD`|-ABC(8% zQNoEOMspM!A?GNetrsL9ihxyL)Oiph4&-+=f+5S{#OO~|&}O1aR3F8*K}yQ9sV2?s ziup?gL7gy*1~0ulT@zVpAJyn2LFqUfs$=U7A-A`^BuRMq1Xt>)WM(do!z+hhuT^N+ zNNoJN%*2(gNM7NvSu;u;w!36Veq32in7D^n2HQ8FPE&wa8Ha%DSxInW;=HW#4X;1% zVh_N2p+1o;>hy=6PYe!&s5~ZK(?J00>RfAfK9m2}F``8(cK~;Neg){wCF?lMj$8*n z(07uTeNi(2r|x?q=Iz=0a-82l*z0)Qn`!ch0(}7Rly{qDAbn$C7nBx+`!FrLz?eN+ z3S@Wh&cQc#t{?0imL^yWJ#}7{r{DmUZ3>skU!_jRg+vBb%XXTuZp5B9i-?MF@Ir8M z=Hem7BvKZ{c7cjI!b(!^Pcn!F!XoO)V422hX@YP62 z9x#mNn66v%0r>Q5m~At6C!ka?K;Fd#*%J8l4K^&3ZPlub|4dXSM+ow6t8g!of&$7n z94DK9g|Q;~Dqti09Ga#CDvNG2!Oz4I)Avd@Jo*-l_L0ORzd->{sDP&Z!HKCbzvbut zG3hU7U7BMkn4DPj8--w!nnp^rtD3MLui03`3uF;Zxgo1#Q>W zBmyzGN?#=0!2%43&)`L{;6<_ol&Ak19!%)90t(=Vcj z2J39WKgC;Sh>Td=-|Y|AywQq1?cipmTooj1cN28ogYK^o-qfFU?y+Qg-ID~VZ<=di5mRjRaRmvX$kBxW+kJC#_oL1-i%bo1yRu{ z8~RA63@_j9f(VojC`|_=6>RNp_=e`Ycu`l+fHF{u9 zu?rk_3ntP12G>-vw+rh*Lzhsq0Eb${2}M2}zt7U-}tW2=i+*-i(gzap;=1 zmA$R~yjTn2o3@LRR1BcvC4pj@i?oS&-!T6Yxi&+l)u_`3Q6WKAE)XuZEG*c_II`U5 zI_KYhYzwQ9H9)=s*xC~ip8n=WR_Ub7eN@?>q5U(op5vz{;fj&6yY1MTwuQG+2d$X4 zXnNw&5$5?xIk9x)0;OT>WEBviK5Pv0N55V3+!3nX$;B7?z}4lB!M~2(I(~r4w!MYw zlF1+p3~u1oqF8A16QSUHmS|>7$qnKw1$%_7f&sG%>bE_YnefPV6s00!RKEmtvl$TZ;p0n#!2ghS z%5k`>xoR2i4@sr2MZ8>*kd{aae_4jMXPVV0O>2CnxNGsfeHEOMADN{h=q|lmhu_td zEZ0(#ibC)jcWH0$5X;wy4Mq-+rN$4Y0(e56;C=mX*!(wa{&$AW7+Sy+g&o+VRD>R> z^gZdOm^>uY_aiaDoHA?pB0Yi`;x%GMS}z9|ZN1l1Px8s1M`%I@E(aQ=auZJndbUTc zocvL)1nOQpU&R3>d`xe*t}3e`xQe2lCADgm$_`qEK)<$qJUgY_&Un}ox;HLO@{fbI zxq?T&>QEhbdKzozk&;zM6gIG*%yEbJ-O4{#?srPkXEE;fn|!?RC^MYffs?r2H?~T9 zpO((Q`1RhPI2Uul9eGM|C*eKg;2^)E{xeRbEG%a) zpe-wSt4TH=rfK^q^2>$I6CH7z!CH zBqU?R*;lQSpLAo1LIuI>!ZM-2F>6g=tzG!_rf0p-j00C%?F4XAxTHjdGteugiz?Q~&wT052gi~Y$L zdIofnl(vzGs%XGo+5sN}j6 zgh0uWHZ`q-!PBVlqIs5*3}(OMm<0X-D&O`Iu1_I{WO;i5RLaj|3YZhQ=z}&j_M2}Wf>#Y+&>}X$SP0*Pjq*!97ZFXk zD3VniCyznuOu943Df583&{@0gnU0`9&eA3)iuy+y>(f&D1%uiV7XBYMlE+uja15DX zoZ+%LO3yfr$Gy2)g1qHcDO8tqJG_l~vT9sbr7cOI9s)6CxZh1Aei~beN*Tt08ZP}6 z7hP@1u-yI*zYJN?!!2<~3+AA~^SgID5t&7*!%0@g1OowbUw?yvz63q*%mm=3-&=Q* zKT;kA+c_dHKKkU_=q1@}*N%f+bqiW#Xt&^Mb}3s7KAK@4eAJOg4w1Qq;5!V!Hi=WB zncycpbf4wmM+d7p;Iac7pJ#0$kBn6n)esT8`6o ze3ky0>I)=CT;};!VJFNS!-efrJ-}DXD`dK4LxF3k92!LqR?W3JloZ6|40!u$)e1B2 z%+aV|n7vr0A3xU(b}{g z8%2Z~7RM$M5xJoJ1)kt8mOO!VpQk3VnpCfd<#s);OwQ}4(m_p#{9zYB7s=_HN$5(p zEo0SSFCypb|CRy~D>jJ@kq_^@h)5Z+v7nL5tH;hARB5??8U`u5?FA!HaHdbs=wfg; zDZXf3q^3YP>^UWa|BqiAB&+)?pfUkoGvM5)6<@UJ@gKc8@qe&hNm>NM+ooWG#aL>x zx%ARRxu0{jzjXnL9_{O{3piK9V$`ON2wh*NQ~YS;A!7&?N3luZ<erDoG#~c08pmC7IZ8TF`%}@jqw=V^J_MA-!||OkIi#mHe8mTA z!^2s=H9dWG;D~N97SdhDRtqGx`18)K#0f}HtDhO{gGSF=t~Fm{SI@of=0#4l@kYOdtnO9r zo~@)v2a6u5E~4Fd*a89W=+qO&vlet+OGV<@fNU+*z~x;ARFGIWDgL@JpcX%U{uC+l zkoF0_Nl7`wJqr$6Tlv^DW~6qp)49AjI)B(JM7KeVWp9yQ8N>9=B0b-sa7TQ#!H>|% z7cAZ;$h_P4g1!60#Z}s*h}{O8u9%_-*YjQfYMq@}>s0L|88WE+$uJy(HN;nnuIcJ} z9ekc0Cc+r?c0&q>ea)51r~!x^?y+zxyG0n% z2NkAZbtPa@LK57qP-d0SjXZhNm_zaU&=T_4Hk_8UIq;ajP_%M97`vN*i~vO6OIMU%H#i!gByvu zv3jT+koRmjPdb%1Ehgf3KOQ1t`P~MJQUsn(Wn(Os3iIvNw^o|N;+w;RD@g355HADJ z#d>DLPAydUwpRVJcT;a^1Gq%$Z4yua0jdJpS8Iqpp&_jrL+|!!SPwHMn8KG^GAV=V zj41vOlr}9d(a{{iSU=EK^h@_uw6aag0hWm7N(loLzxt&Cmz}!TxazW{l-bSm8sh<7 zc_WK4KkEtnRoA2B6Ab`W9eYYI#zwim0M!506Ogm##*vFpbjSN2o`4}Dr?6!h`Hb52 z-gBsY`2Bshs9FDUBFgJZXa&vdP_o3S(g=c5 z3hei&Y`oxnFl*1Uf?nUHF$vB?m{CUzjO4gd%(!{9=3pHEz_LrY4wSs=y3eml(^{}C zZpz%wRg&Q>RZ@eb04I(H3&-NHM$hDm*{!1#=T|H8#@62odxQ@EOT}4oppfS?E{u3Q^JF6|b5_!eKY^ndn!;6+4P7$3*Se55uP-Fi1r<-36U>{_<-)R15-N zR=s@f;<*v(BCr}HerPw>l7TLpeg#epGJ*+v`jq;ceR3gmKFMl|zVoXzumG`8V%&9se+_=x+$loD zAm3 zgtan?9_Vkqp{-GD*6)t8&_PaCc$FG1jKQ!>J0EjQa!-}8d9{Mr6YkfnHt=ejf^|1#gerKs zC6U&zN{{6GKxx(V6dB1Di17t(K|gm}K`ULO>Sqpbs*u!2@~vC!b>6D|Uuv`rjX%5n zk>xTsOVRY$=HIn{+VSB2r`pv(C2;rJ>?fxY#NMaOKTzG3z zXkB-15pU{13w=1=8K88oT}`N@pJ%b{OK~i|p>5o0gBs zB{wWGgFa-H-0pLlZFr79A0%m`EyDGXO&!4H1`F5yE4i3YlC0y~bz^@tGe=~D243n& z7d^{^*P}Ytbu6b7^mt5Ov)IsTsTmdVR%<7N#ey@F{xa=TzazajK251XAG zRl8j^m~tYWG0W2p_Jsb0#~;VqybLODZXhMpZ!UjOK34ms$m>v2H6gM&%aRf4FV?a( zXW$n!XTMl_DL(+n?Es({=0o!h@+XiUhS|pVCS1L3f9Q8Tsl*jm+9V;k0f-13FDo=w zgV)%h@LV`_A|c!ojUT>+J9D;ya1j?TMs$QRuLKC2YyBz9bl@X8 zOR$9eBO&%S^fQ~M#)d%6PCal31RmJ48ZI|wwx#vWmUc{v$gnG!@*Q_ZIYVZgo5hR+ zu5G6;?g%W_FwK4Z4PtP~3$9x@q~}ct*D2!uy!D`eM?rwsUxZ-6svx7wNjI0tIYGF- z!cfa;S$unONK@i4Evpi@*IUAvO7&)7&t3$#a&dc&gC1^o5McU@O9^EX+DILYdmN+GTuwFOO4g4V|JcE zNaC5miQ(9>r8f(s=8}jGHJ%PiNOZaF`2c7*+2iPl;#c%TnJK7^JiHMKYi{eB07_mYg@tCX*(*;+#{X`61P*NI|*a=p`0AIj~ z7TH!tZ!a^y1DU2%0FWycfudAGdCU-Von2YlSV%dygF*`iMk2%+4&uRoex2X!PMy* zkG7D{A%*~dlc&TVARZ&esrpvtckE!B?$_!jc=l-pQ{V@0ldSBwVF+(@2C+Cqhr0x4`cUSn8(K>Rw=GnJGc*4RXYZ=mE_&Z0CU+s25_Qn>Ap zB)WR~ps%R8Z#KC_O7p^+j_qn2`t$9AkD1<}S_&8Yht)EXu&sX;2+L3vp4xq%Qp>OZ z%)Oaavmp>y-DM3O-L-$sta{>68V{nY7xdlI?;`U6`6J1h?vQRpZ|eh!&0-NP5Aot= zj>_?sQHX$C&>A}zZe`fjakgHiWPZL;lEl70U}uHbHWKlwL~=kVJrb7dF&wh?as<;D zjXkOUQIOCgWeS88(scv< zY~@dCo=1rzTJ0vB^rB~-4jHIn{r`G)QhQvzAAW2*aDVN!_qHS z5T12?@jCCZ`}BRs@6V$+5MoV^Uc-1rG4Q+a2iE3i*5tTnb^ zl7PV9-&426i_-3A)F3|^^x<5XhMmwblO|MO8WYj0f>P@+N za3=SbH?nc9l;Nxyfi4S`Y{uCcd45`6!u57h7C(r;lNw7U({b4_oq=RZh*gOC5hOJ9 zLJkC;v#!h@{wvOZ#rf~c`TrAEkmpRF*PYqg#VF!O#1nJnk7V^8aKh$J++;boXf5H- zla8e`1Q23$oE@eeJ8lK6u(fkr_~`1c1jEi|m{~RX7A>_gz*EOrlUONBBG4sz84ADE zQ7wm3;o?5<$4S|35@(W7?#Y9X*D~wjz@`Iu4LIMbAu@fXRn81_9#%9X;CV8U6!;OM zqzz-av+-W4fKI{U3(tnn><}6<*Gzw;Pin_rrj$;D?H}Qbf}2ICb9&T4U?vwer%|UkQYt%`&lR@h@5FV1cJiu_d!ml}4gV_AwUyYM@(G6{Mc->w|c9<-x30CKT+9_N=!;e>#N=4BE^+4twDNMez~oU(swTVcmJVTBfF3 zw!T_|JxvDYGDC>{^w)S$cBTy+z2~R= z)kc|c8z|zY4JNr8c!$z3ug|p%xk2^kjF8*qUqlpo|>)IsCCOZ zlL@kFdKnv8#SLe`#T+%gG{>^BD&l{5H+={#ab6HSS36PmyCk}HUpzp<7kW27rCIbu z3d|*?@BUPBB?8!}7poTIQz=lgJFnb^k=oImau7IOGK>^EP>8U0IBhD%Tk+T4M`HF- z?~w&UQ}U9YSmM}n>2nvXAD*#*4C%^Hz6TO6h(WRRCS$QHMd2AKVi$#qx+FTZvbREp zpDX0SjU$VEIEHrG*jtaj=;kxbiuF6Vmoo^!e~fov94w%2(i7 zQ6eGlw^%2Wp2^x1K7RuOXzIAV@7OPcCVYL7dKJJtglvf%qMbERe z9p=Yog?J7>y=bPi`DW27i13=yuqEgIuvQTNl4PKX<$iGv+N_7pCK8RSLa*o-oV2sZ z;56g1ZM%g~#mJ~3q;GSg%q0*{W+;r23m&a`8VqZ1HiH;Y@G;i5v4u4>cz+TrYB*ZZ z&4ELl*IMyY9?GM3hC!QuBw(vJA}_n31S(y~AZ@(t)6CKF%rnwVwxdtSTw@NlTXIN( z;H92})dsu{S>=slK#1d0HR?64*(b7r zmW@xNgG;z!jM(TyCYNSd)|Q2Q5AP-qA;nJf0_UnnO1|d=*KP|3Nce)UMyJ$s9!LQ> zq;y@MiY`O|>viH);=IcFingZ}+fdS58k6??$MXge;(PMpR`$n@MR?18TKfnr-fG=4 zKxm4dQseXN>(1S7LUlva=HS8Y=}PwiBKgrs7G7kmwk0UMgN1BjP?6^Zhn9Ahh_KTI zyx6fM5l?4!F#$W3ZzVYIhIx7|p=tk}viQQh@^YvwQRCF9+HXr2mkXa5ONH)1eKYMv z#6Fo(X_Bigdwa0y&5B zL5K_4rnapCrK_FH@N}tm>zDU7(z3RJHPC;35HGAhnAgdM zL7dTC^i>+nrE-Enn|s7#FF&9tJ);6DnNKHfxa`)**7nFX)JU?WOT%1d3bLKIPXy;= z*}?&AWU05G&S0#Z=G-st4fCC%{k_5)+sO-N89V;7Tee}nSuWHGioEUg{jx1fs|ZEn zh$}MT&@ltvv4A`U}rylED zC0M$hN5Hwdhf)Y1egtUG*XC}^51<)}_V*b(KnGHf+`jU}U>ePDadlzC5 zk-3Nr?Z#Mf01_dDMZWwdZMiE=?iD3!AB~E>Dl)pdw@QYeC+x|ECxd!EzmE&rqxLM# z@i4|eU<1zx?3pVV>06jjX@i-lMcegU@$UiC3rmIQBV<61lep+N8zy~Hlg&UsHj@=P z&U+D7_hT=oHb&Uj!B$St`sdPJX!}?3=hG)mmI{O$f1y{cU+-4M$fSU9tRQ#xM;xOS zc>IxQ7}KD|&b^g-oOT(d^&&v9<6~8-RnDm=vi|1Pcf-9)m?4aqs6$5QCRmo{**tfz zMt4Dl4zqlx%6kg_$9R`6b9->u{Er65lyh!yep!Sx9q;mXxIe2k;w9qTin;REhh>`( z(raqtUwMzG^}>X=WJ4_+kE?U=7JYPf;TU{XIwk**R7&HYZ z{B}y?3UbTJpfW{_QYLG@Eu5XtyrV7TI|lSjwH6S&rH5olt~TxLz@|2ahk49KYPoJ> zQbGTcsNO_S6?A}drwF%nFt)>UVYx-sNKJuea>FvlYYLt$3qgZbHo&nY_} z^}6{l(n)i9OLf%H^pX-Ze&B4`_BV;BND;t!V+2@`Mnss}p5LKaG47L=*vRKK3!V#} zM&~qEF@Ni9U-0%Iu`_n^RDfNkxOoL)awKnKY<0GWL@O|Wf_(9fk{{jFSJhgiO4Bg> zg;~TUDD1co9kns0wgn&nW!a>qw2_^lrQ@5u`=Eu)t8c$X!H9?sf0r>_>i?Il4f%7WZ9u zgYtuz_U*}S$|@W<(X;z#3vu+mAM}ar+q8X~x3O)neOSAwAz93ts(zQdfu32M-gH$5 z9k{`5Pdjw47M~-7j_Hb=dD2@V~gdK6(RP3z;^@Vgoo+4bB zIzL|)jO)nWudNk_5PwEf?!bi68DED0o7yLaMcbDXfT`AYnruBFK`dTfNx-Z3=Fa5y zJaCY4uH?GkkMdvLUlZs~qj7+o%ErH)rCWMlVS7q!f!2akz5{{i^kJi!6>T-CL?&~I zFMuF}b%JcB=6g*8AVvwhz;M5$xvQsbZ09;>Nn*t!lE=G@eT|~PYOz{%{3xet#Gfxv zmJ}LPF@l|bnKUtWR?qDHxJ*`01rU_a(@Z5mX7S=ypN+Ai(Ot0?JuhV+4`9mU!@xZ~ zk!UkNNm2>G2jWTx&!$a;$?YIS9lfmQQSw}fS;>)Qo`5moQfo6cu!)PPce^7-*uEHe zUmG_r_RV>VRx3~dzvmw8{Vtce>aJ&3AlhJIiR{K?k$Z| zSonXs)7lWv)JS!<2FhwU9HutM^t=v{8*K4{`7J>;KYD^paG8oA4=i{nl)3?ntVoQ< zLz8i+&KCg^}R`mz?@DTjYQZ?jusY{KWFWIHR>0BNM|e*tTfQWGD=I)_&{^yx<16C zqeKChOpsu~nvmh@`hQ2~#JSE|d}G-2;hA%rvgESY9mv&*+glUWb_gI z6-HXp4-X2HkJ?9;;@R>E$$1u#ou>_QZ}r&sFswL=?bw~!rK-k(6S=sLu@u7`{6U}2 zxliA>eH-8Q-iNo39+ttbtsZc_8|&sAc)P)<`RS5%1e~eu69;f#fQ7jV5cJ-x& z)zPrsDhsLMw+yz%=YEOqW{gH1kQFF5MhO(PnkurGM!k&qpv73E|*gUMMtK-(+b-;KT7{BNsEKLKOB8B2L~m zOKAD7#B3C(vQNO+2x)a$n%JbpRQr9AqpV-_Jnv0^FZM0?iq|Sp0DtMx3usU0`q&Jy zB;(nwJGYTmCmP>tG&-7v*ZEyRlO0jrln$0BC@llNJ?K_vvk+O84DE<`-j)pK4NUE# zWk=dQ5dq6ltu9_*lbvUy|3nl&mB`+K#Z)IG5n(Al2^@a&hFlv_r&||{>lijHWzIBa zTO%*W;izrBt+D_4od~pAh>Hc!0Dq=X$_QR9G34X!wopx=tE3m%J2Q_kH7+FXow_s% zFs1ryPwJXFRuSyl^py|1;VDCN2zfI(;-6X*)GhR8;Yrz4z5*Q1m60 zxmdW`NC(d(BTelK&6(%+lz@pA4O}`&f(2_zhN~Cw8;@4tZ>vNL+G{~rSS+eY{xQkf=x|K74g)A6nA9Qj)kpVGr%Rzahrm~n`==U( zjqs_vA>PEH7zCg)kHUc9W#y-cv?onA-EJlvts+?k!Zg6mH$@Z@OnSQCzr>MvG%ANH>|e` z4wT^(we&q+|1GjaG>rY~OB<`Ral1_pTGM|8Vx8CH8q?hbgDNmPNPe6GBzi4H0w-CF zc&Z$8JnLaJ^&C7|k=g8ogt6+vWir(XsZ$oiL3o?AJ64aDtB0hif>G2*oD7jaOnqhuEBEhi$-k@ScnPRfY2K4R6Bw|%9JW0GN;%qbx9b$;CC0TZ zQ0G79tt>rt%ZC8YGj)r>1XXMFv&oRT0)%xplN?x#Hyov}n|YVxm`cP5a4#?9T5KOO zw8HQagmO_UnbV<)dkB#yZ(F4_{8ys3ij+BLV6236daTW?QsQbueyGtlZ~9)3W*sYo zi+&Py%H+U5`gDRib9uhD!^|lJ_8Tspq%}zAOT zA<|RUj~bX?K$@Nq7V}A49RnKIgaX&}u*uXzNvKzeA&56w+%;Lg7$T5M3Al?7$DGTU zh(Xy-OA-@Py5$&nHysjtOJgY!sWH~YGtEp_|3Y)&y*(#lq`?4}Nfu|unwIA51OCP4 zA-FBv|%U4DN~OD6dCfz zG3(t|?^w56u_l+mPl;Pjo!nOF+{1`q@=zQCP=!}%HAQ2p{AYHHw^{dSb zn%fE}7k?-0!NzIGab#H{=cyl?cWu2r2YS^gO9hS@^qU@|+o(}U*CDaXV=&Jk6C$&1 zXA|hw5Y#8P=Z}fbggY0!k17t7(JYnBBf-Eus$>kD!^T@Xi;GE@Z7y01U?pO`_v0qx z-6XvlCf$($?A*hjXw@H$%E?9??dUq>nFL+5*|OuwMy#o3hUX$a2jy}m-;Y=PPN;TT|lFTILUfb%T95(ojcT7w*NWbQyAz3pU2W|O~8 zGPf;!Yw?Vwq6E0tSMsfPPnp``_(+0z=v6EkFeUwjs5AF%(wYJ5(SM6oxaMK31$BFE z%&k-7>q391Ft+acUr*+oszQo?l61@E!N2--gS+y0zqZ3IDEaprFP){d$fizOOivb& z4FK2C6vkDy<)V~GDk{OBkNUJYt%WyaBD%w04`reRLNa<8xX|{`gu(Jv>Z;aR6_z;Z zbIFnxQ@HxESQ|y9!!4v1z~i1i&|9J#4I0A;T_VS1tym`=>g5!<9rWxDwfFLV$sp@Q zdD-!d@s~?vO_4QI!oMEwOEiUh%LmYd3JOUx62oIZ>1tv@FJDpo@I^QeIL2@#m`n3Aw4y6DJaW6O4&f*xi<g^Z%5(=hn;r4O@H|6-XJ4M*ynyE(s3W zQu~NbebM1G=wl_&ELBh@%mm&3P{ClAb+u)9HE4XdCxU`_T_~og|;SAP;$ke#mx}v_VgmMjV#vW;!gPuZ_BXODiv3=Lk-*co>i?&i^pGCjx zHNK4=gLWGgy*!2R3N|G&-*z#DZVN?yaew}r>`J_I#rvpcM;Xgj%{mbXI-pF!!Z~cZ zx3|2Qa^2>pu>@8o)_*^3HrY?suZ41i6(T4`V$xM1aa6#Gqs=!XvYW!vD#lX~U&u?3 zpRB7`qtuv|JZCo;L3U1k;P7t0c}koup1^!2ICBXGey<<1)`fpLX-Z~>%;LDhN#zat zOh$I`YY5Hq8>0s^>Dh3;1VDn=zxYtccbloXs@Vo$XO%dr3Hv>k8M%Ft?<(c?huo~9 znX0sDd2ROvWpXDQrf$2!AasK8wy4bV+%P25ey7t%kfwYhb~TNK=0*_Zz`ditebBhJ z^>Xq}*@-r!I=G>dZqcl~7WKznt)GbzYBX%tH1+ydBL#3xa0y zHgu&Knh%HNuhLViw=ODmHsF@|Q$p$H&un8Hoq@2JRtS%O{zPYmX*^^CCwPe(o4sn2 ze5jvW?0(R@JK8b8_alw08|`h+JOY`tSK^pg@|GPnuE{OaQMc_@E$x8Lt@`vy!W>3@)x*_bK>s7A*dO z_G$`ROM<&crlo<=oyPKKUvc<&vpz1X0>Qi$1O3Gp{Fn7pP;Zp^Tc1y9(QMHan?{gw zINHYAT~@oW?Z4P5dzwcHSX3g$1hG|xm83Wd)_#2`N|c;QyW@Ai6wiCfR`-B!>3bgi zf)4nSn)WUSr4$o0yL};;p{FDy@h=_I>@{rDLEytGl*}AsW(RvKE2-C=?wZSB<)Qm1ZR;IHIl7r#cZtiQ4PFjHQQ=c@oDh(jw+^}M%PS{quO0QS~N z6I$@UlUY%_R|Rg;9stNKs#-2&r2yaU&tj~?Z(j5=F{RHVM zXQEd#IB4z!(T-eu2D?X1n}1(UzNvbU%%8$5w7X8!Uc~z?@26bOfU+-+{Co#wM5ss| z%GKl^MH*_ZeakR_OKp6U2|;x`LY?!aA0T1kdY6B7`6n|l{N36b1ULE? zEgT8FC7`@@t5=N~(*T0i*haS*EWr(#921mp`577@J>Odj8Z`xbvEQnV?1q4Mvv_7} z(ULx7JPY{o9|1j)ZoEGqT?vaTfJ3Kh7HF)q=rUKbvV>)V!Syx72-RG8X`~ZN%kkF| zzpc+3kWE<09*B2iSZTn}Oy7pDw89DyumV(j>-0Coq|XN3Gvy?eZvo6VComZaOX!60 z_?FIeR~aWlCviensc<=}wh{^}!?*us9`0$KBw|qtn-IlS7ghbiQ?&8#M^UEW zO5UA%_@#V4NU^>L{>V7+91wEEmzu%^Q^VrthpKo;MS{1{yI|DXa6S+HS`V75lZelya4iD6{Mntf`K=dZEFzd3b zZ|W_l*aV%oL!0BKqgLTgSmS!{I(7*P81K<#s1ZM8*Bg9K>Se;A*~P@J%O<=*OphpX zSxKke!BE>cTzjOvks4U{x~Sh%!gJ8H%K(E9uT(a7ik%x7sH&pba=vRRhn0^BI?Y{3 z3snegrx<5}35*w?@lZ~f5O(D549Je?qqeY(_Yff#^)(ct>@Cx-Fk_%9-VZ~OS=1Uo zemLw}l;TVxFBmfcHCd_# z5GM|+I@kBvWo>J0a|YPk_>w-nSumll}nk$FjPOwxV@yXa5alW-kk&akpMS zWSa24w9@9%Bs|0EsK;M`zG^;ZBa@x_P5|S`t$(O*!mOp^dgepTlVsr>QL)2qy6!5$ zf8{XsavqdpW&GzmFf&qB@=(4u?*uN{p@{Y{ z)6S>jr#m2pkpbY=&M>6OuXyo@|1A;atw*DJ+=LboqSh{^({LGX*z}mFV#nXe5b62R zO31i5#GCD2eRMYzypPo@N1Nu)Q|7avKi>(^6Y1ag*OMzD2}N+&G_69-4OTstDmK>e zEC{&%##q7H3vbN~QW<%^I?|7gB}1}FYndalJ}hfZ80wk(i1jvjK>`+_8Xw((#@LL7 z;CtrW11KI4IgWJ>X7_=m$KB2l6whkQ1wMf zFddo~9ocF|kau-_NQi*!_w4iqnGFwSXBXbbZ2VMfX1@q0O=Znhk^K{kijcSgGo_oK zL}H=^f9DP1Ac5-Pp{hH+`=&*>51OKb@0ZLt&N%9AQ&>d;Ei=7A+kM1N*h!QAwiyy; zt- z&Aw&hw#M@%*!KpY6~@Q{n0eaU#qxncrzVHEF4(lG00eol-WXE1{biyz;l(-ET>~>8d8KCP{2iKHcU|>L58_(4N4LpKaNq>bZX?ZvQTx7- z$3Nbt>{`8yYZWBC2ibj78 zhpPC;`i^Ga`r+_rqPdwWQwN9_gI8PZ|LnD~Gx?v``^P5H+9=u*Oxw0?_!$l_1yr*u^azT--Lgb zjvJYeHIL$j^F+lCH|e@-#DJBfv@3Z~j+OCWAE2x#Rmmgy+I-V!BdyKvS$c5k&F^wS zs2<0d^Zv|ZB&=U+qQoNFqb%DWieK))R7M7X+uOs?CO_iEWBzv}ly@GD>TwfVK!{p9 z*iOS`xM9;1!iwDhBSWMY$IBt(=1{M;`}NViFz`NBFMrxJWY1X7g8_V}Ku;yxA8w{s zLlTPMu<2Tbnj5ToELCi*5!n!M{f%*gwHIHTnItmue03zB8cT+xlU6gwVtrUvn=sTf ze`~1UUiY`x{eQmK{jH&XYpCBE>i@enRL$bg3Kb#`rCBhjIDn^yUi?g79Go0+5mFZT zaF2U)eZI;?PSUoTJ6(S%^ItrNzTpK|pRvI^)#6S)?uQlFJRe!$32~LtOY9&sk#uOv zNh;Q(ace|CMLb_J9%gMsZ+wTb&na*fVlPlK34d${VJpo%=xMxWmg>tkdneOoKGSC6 ztD%)H<1%)`c6BSA&LK>A2}-PzJ-9^Sywu4roO-eTiHYVl1bU{bIibGM3-+~`BrV9|;w*rrIlA}1?@&zy>f@wjnndB32|4lmV_5`If z3_Xg&P?qzyUHze(w1=~rO3aT=&0t_Knr`;HUIOWt-dEUhZPZxwgAc;*?kN3DTz`;Q zJOA1q7VWUTh3ZO2x4tWX=`wltSh4Y-o_SWp1?f2i75AI8_kw}~v$s|lCe+dr$<7BJ zsFH)F9-qYb$RMFt@#V`vZpNLaIXyl&^k`4SzimY5<)#E_wv&7=Nz3B|y9cJ|YOa%- zjlw71)bI++iw-K0Bk1x$O2oG7Bc#nQ$3BGT;$54VtPic65l7Bpejvs6Jh`|{6caLw z_AW!)GTmGNlmv5eV^+%l{o4D1hd!`Ng7_XSSr?46#vEkshLPV;0UKA8#z9de{Nz+cl)uv8+t8wcp;EoeZ2hY!WeuBNV{ zo7;|qlqlu3-g8U#CBo1azn_t)^dw%^_OLa=HDp8+gT`Qyy@^@id)!-l+5SqO#W=1S zWIPr^1|qXQWd-E7Wf=U~3ku_S5LWG|hCP(>Qw^BAk|B1mKY5%yu;bewK+#;^Lls`m zHvc|F@rjm95UU`#83-#sHq$|&IQlMPuiVmiT;q>QeVSBtxOV6k*)cCp4uX&|m6B&< z0Wal*RXV2v5RthFpF4m9katc;vw?S)I4d$D+9U}QRL^L#q~Qq;ZR zce%@wtcK$A$CCdW(FHPNa)D`ddB^xlr|w9()n)bZB|H87^J1|f-$-3CmEQX-v^P|Z z74Ji2YIo@Til$NJKtIKdxshoD!&BkhVE{Qa{oX|_W=23D&-LBhE5IqA?48hwigN%@ zUIh<*YBvQmy(sCL>@gfZRj8N#5d0^wtd|~GQiZxaI;N3RrIQHsSUH0t4dct?gK<8* z5$*X)+>gvb&UjaRgbgX1?uWY9R-4xP#76Ooy6mA1+gKS5(%Eql`RLC`*$p|M1#CFm zk%FotQmn@O07j8%9rw!YdG-XJwjf)!Ui1%(thP{A1N74$y{RC~GE?{Yu06ma>sW_R zRaS<4K9SYOsnBk}i9nkcuw+95+^>J^z)4m{#hQ8xCtumZC>RbD;W%ry>ce`^^|9j0 zSNAu_nr_Fmy_4qrKq7u61IqZ|J-NlLn2kgmn2Vge* zUD_VIk5pi4=59SJdqL)}D)g;yl4S}5EI}Zp@5c~;d_St6T=nWM=Hu|nS$Sv===eGH zWz42{OUH}QVTM z-cQ)y`?wOp{&0$4D0sT&YpMTT(Je@DIO-4BYgf9Bqpm7zHjjTL0no#jTa5q@9f*xy zMpI5bxfTT}TEJ(k?Skx;kD?=SD=AvyQLv!nezA|a!-OUdj>0N+1vATitG)Q3^MO8r zaZujFbRZ1(M{a4v2FPPq+w-OG7sPqpr`B2qyCdzr;5U6bPT+WLcq_JR-MQ6^ptZ7% zD6o)j>S=`H11%OKUW|Jo7*uj#u8Bao`;O02wyxu>%oCP)C#B|ObH^jPZb}gE2O(=D zEyKhLT)+h@e^mA(DtQ@GrW~liM+~^BV~i}|uh%nH7COS#1s6Acf8ttA$9%-@?qKph zqj%cn;(#Sp0mYBWnB@!74lrqWoT`6nUGr3};#9WYYT@BIG4bjB^F&joj;3@px#OXK zv$qT@+B4V4!T6_Bl4hxG)i?v@a;jwnZ?Pk*E@NV-9&;%bM%vMfIqwE^pkz_OA+UWhE+4lHDmtn$tDqGV0`L5 zQ%(g|!`;0KdXQO3m~Ke+(Ltq>y%RSZE0UV-8%ZA$=iJv|Ys$g_+FDN_Z!+~2T;qKj zfdcwi@7Lu3;`1o$l12M(O3$oEtj1bKoZ)0keZ4URdR6W;eux&HKlyTy zjzCT((r?)FuBtwL#gzth42u1<{-QkU4;=UsPm*Y@Slp2x6VrCc0fl$cpZ0$BjTZmQ z-=$r!Mb~NLf$~qm(xGpD)yMKdjlB9+I7g|ACIqDXZVv#E{aO0&xegWW3ur^5wXJR-z9GQK8yL~UKGPi(_^kh`|^oF z6sd{5UzU+*OCgKft zV-uC@A-Tl?Hv=rL>@Rvy(geSUu9sfb%}nEM{j9Te0jI3#Y8@-IHMMWdnhZv3fzc zf9$etBQ8ZIqpj^?8jvX|m<~vmp+4pO&3)(d)BN(b%MtHI?m_qaqaYqjjv*nCB`?8QX=Pxe62D&gO$1r^tweatkc4@7kigKqygI{B+7w zmI}Nj#$&S14&5DVYmC9hXG;t(>ANiUd$W2=uk-L02)9oo{^yw<7_1RRYzDb}s z=uDY%Q;KnV-0)sb-i9GnHQD?|uPs%mX~)5<`tF!;TDM4ir1bo>B*Fu*6+ zusk;}iq|cDV|5>&Lpup+#s`a!zRV|#fql^k3u(nAvVwzut{69naSa@5{S~fuCgDFB z-@OedyFGTJq&kSHL>Os^T$YS=P{7VH==Yx}jQ?VYny2+_ku<-Xz3FBl4MHIxE)#Ni!aSVf8doaW2opJ5KGYyf9;fGE`#C^ROT#_!Wz zh?8U?{Iz7#@Q*L!VVt$d6;=bHvh@m9$fC->!=U>B#^@k{Mgvn;l96w|bxQHARqPIr z&lTw0C?wxbc##2a^qW`KlYc#{27VP@C9|ZLn#9-iPHpxWOjg<2FkIMnF}--GRhS5l zHn|cG;$y!kJy`WFg@lsDbMvJfy0vlU>r*2Wc%ow8a3BSU{PON?v&HJ}H|fQ;}Ata);Fa{lch+HsnkG+2xUcZ=-BVM8-%A_YLR>lm^O+5C^8$q zBY!qwJha~NfVSA~oG$`r%P{qe_dj$)5KH&edUlTJ@+BeW5s-2((g;9)zI1P|hmF@t zNqAHo{4}Sud^|?-rn5X%Gv(+AV_S07$aI2x7cFZ8T(L(HyUYaBUm9VCA1r}dnn(xg znEHxpuCuL%8$(60#niqLN(^xFviHbTFR&~GF3+X($OLjSKcLMlf;VEu5fZbr<}Lz>+^ z{c*lzc6MJu}EVkm5ME{R(9MR6Yr#umH05c`rE{87+c%+;vtJUNs}~;i z_iDt#!}?-r8hKb?(8SVO(c)Ux{8Db=XTfJmY|Pp66jLb0_)+2NZ6rz>5nB3)IjMzY8+%aW zFgm}yA_A|ssq><=Srv6JFLelTI8Y48-J}hBR48*nfk2PpdHgnBY&#q0kdbfH0Q<0v z%w%&zg-HyRyDp=wHIGeF(pqqB`YDZmI(3LRsDyEBcAzBD1!*RJO1(mFLv9VKSz8;+ zrd**cdix;QLpDtgWv7=^;dtTb1^;yr8!~BiC9ADXJHtvL#q6?`RvRm8hVMJ`tcE%f zBNbz{b>3F+Bc}Ufb4pnS_k`gc+Dhbem~;SM&)cszRPfuAv}m7tO+OC{hU4!B)$oGE zNOx6DYmj8iDk6@<<=fy?Nvk_N*B6lPKXd^ILA*rjJduFUcrNj-g%v2V2)0nYnUwmAj3kKVbT_aW6^HMz41Fa+Cmgq~xLFB%&LAVYM5@y*DZCyP= zTpD75IQ4^h@(kS9*S}O0ekf6I&hgA9`OiFpBH1tLR#4>ULDm3YS7s8Em55-h>?4r` z{k6kzlnZEMLW;Z1RGd{9N?I)XGiZFG$E08!-mCQJX7z_TL>e5_F=aU#uI29q9}$6F zt@@)5%8e8cVdRx=aXlzS$9GEesI$^Wj7bGQ)gsv<&&FhorCA+&D=b}q#PUktgNbW* z)}G441ZEZeYSA4uH{LFpK-h{(T@y7*V$3+ltG;x=YB(lv=yFhJ{|tsHDhtgAh?D`k z4YT5ctxk7m$y(;GUg( zECRf!m0f%+_@Xg|hdQ7rAdz+c-0gr8FJnAS(~6m@m^*v*oPrG98EM$HXy6W>7z84miCccRKB-bmx$SlW8?D;(4SIX*S%Eq5X)JW zt@)V@8aHD5N^|S&VrC^JYq^2+c&GXLT1)EcJ*2A^5K){?Ub_d%>TSW9AF(vB-TW8s znX&fVYuAgy#cZ-A`{8c(X@0;1%Jy052rbPbOA(>|PQ267h2|!48p$I}-3tW>aNcHv zx3V|(g}MiE1HhhG1z(fF0uu_YQVMLXneUQ@;R%wU_o_PD8&!h1JuN1#po&e|2p$^# zmLO5{G({31@^9Dx+}qnRQ|z!-Pj4VDj1hla27#P^c3o9g-sffCOHeN?vQDG~j@^Jl zS0McibIk0|w|tdwwdYwoKsN$Cc* zOFVeka8Y}S0{vP?&4q&1aUK80!f>dUz0rfY7U0DUK2*=F1SIHsi>vLol-Ul_E8?J< zA)Db{?hi87X<)AgCF=~Dn{T<-vTsZ|l)LUjETNw%x&QtHZ-b08U|p)Bg&HO~XprH> zP}FN765-!_%BQ<^48a_hhUV=@#t7bsT72ACsmvgc2n?B8UN2eN%vo5?Fa0U`N{f#> zUzuepCxFF;(S)~A&+FI$$W4`d)xt9z0-oEzAu;TK!j!;E;g|0d%QSQHVn~LMGLoca zT}PeAlfH0LN{s9fH{gojeUy||7mRoBE>Mzt`YPVh=Ba3_g$3zBgMM5$JLuFDCg9S| z^jH3$H>iM{TF4s}WO^&xQd9z{EDc!&?dg9P#5Uxf9lcGUAB^uH1(-*TkB0U}n{Fwo zJBrvYA2pRkaCU~i5BHfzI}z%eZqRqr4QM9UQI*JmfM<*QE#Ot&m|ghhL)XDUAMlNq zTEXk9W(y~+G(1H?^^)M1kxYq->Msx31HrX+{k~l-AJ04qCkQhhQCpoFOCs?gHZ9gQ zUCX7GP_dO5N{qBwsw~$hF5HAVt^E;4>HcMLPguIfJ@n3#0k% zZ`QK6m41)|aGS7kLN-W6JHwibXRsOVpnSZtMv_E&6H$F%3;_IBt=40~EB$!MJ+J0x zTez6JR(F~nflfIAw!++7URCc9PRLtH1MRsqM#7;A6SGIvio72yi9nl=xNd?n4iNqm zs2A$R&4f9!PrJRtA2Y(3Cn|+t+PFzijg9Y7!Poq^dm4EQQVi#YU!ELS`Mn?l3m{{c z_q@G<$-+oK+J}%xOo$vXlof(HkdP7{vY7{zMqFA#u!>E`1(=jfE%QlMG-R-l!)Vq{ zmDAd6_QHs+@tz1A>M2)vPv&uO9;0XJT@yhevi8hU%T-yr?bxCSsQRz9;8s`LaZ4ny zr``M|MzysUJe#TK+6<~KcYemeSA;A=WB)af5k|DLCG_8VagNKx*btOe+OYUI4sSEb zE}Xp(d&R&1>V!rJT@F}z*q+Xh!}s&{8d+P)n_bD9o+-?K&U#HqjQ%t~!c>R>iwdF* zZlsvewf2!8E%Ks+r`-WOx{N|%+Bgcir4*ddXve!kkqwx5eyROJu)KCu!&<6*6v1M>vFVBg=tsL(vtHJOzc#$Zu zmx^-2$myUF_DBSnSWh<_lK3l5LRLh202?*6Eb?USs0VzmdHt1>x?6L%=di!xhLX50 zhwbD+TS5$FzvFA?h`PHTqOs;0ekD_jWO@!(hV=7$q_oorTVrU*RC&%U=Kbqci3ZX3`C6y+w0YFdD#))snJx zuE;7ZvIIk!jxJ4&_1w_0jYzklCuBd_cmmIqv31CO^BC@D1BLH6bs3rded5!>BR+4f zile#UwFrR6l$i~(T0Gn#(qtrsU4I?n&7~=nFw`TT{M}68=Xjw)pAnnr%>~brLV*3> zU_V>^Au|Y`aPV)Qx;eL`(JBy=t(XMbesX|>Lmeb;lc*kgEu0^MHWPA54`$*g^4(n} z+<}J)v2TlXZJi~qk1|7C0KvR`fu0x{-L8nelB;zTdikpW&NYi7KC0|fRuJMx)&}2E zV-=N=j$x=9CYFE**{47K7ixD*LU6!ZRzMO-Q6cUEHZ|LCTs(#BOL171KlH^XBHeX~!>5K6(tyT%IclA;Y~Mma#GT&CQMEgffdLErW! zOD7n$rY`Vw`u4M9u;xDsle%7m#37nnPrr09Vr`9q*(wDYE|P=2U^Zw25+gW#4Wt`z z4*e{p*~Uvm#xU)+X<6xRkM;t$G7hV0>k4b_@hhGPEZ=wAwQx+hYHwhw1c15O;kxIe z4Cv}x$Tw&B;QnK7ejeQV0TFI|`K0_aBTyWW@Rm@~K}fmR5ut_!?R;&*!|hgKagNTS z6ykO~c%i1HBu@0qby8t?-F5A!h4spa+gZsyyoklHdGa0c&l7Ul<2d$ z89@~E;4s^Sy!1>*YqfC#rTYPkf^EMwTH0oKQ}$)OUN&8XBxG(E9W5CgPg$UZ&I&=B zf5Oc|`qQ7X*D}Q1p7qe!GIu_ZDMVA<`O1Iw2za2h(DI&a6WI;FD7^FRbQzzeHSIjH zrlGi7hD)35R3Q1k^vN8kB=Keh-58u_AmC42dSy}@a0)PM1vFhH|CrV9Mvqh%w|XQ^ z%gZ+lLYWBvLg+7q{-0aYFNFR==r4r+Lg+7q{zB+4g#JS4FNFRkp}$G!ZxZ^Og#IR> z{|8AZ5WKORh1kvf&S+*IS3klllavR4`qxjDYeHiQej%`#r;X#TND-vF64c?@3VdzW zpHh%qX+uml&B_*Bh2nw4!hkg6TX}%T%=L&5S@B7ZT(pi!?+^>CIiAZu`(O5cuy;yM zd0IfuCh*vrKB6M}r=uf&_PQ369n`)uQQtn!%$pcl;YA6-c&Qh25B6n@$dUm0hnx#! zWi!yrlYfEhX@US9YuYBsr6TmQ)_U5=J^MMdmo zQsYnjYWF-VP9^o`DI6UD2fr0H)w~wx2Nz=~Ddr_qyF53cc%`1C*>G{tAHK(^8(KN9 z4ebEt444%4t2g5Fc`t;WBZB2p8eSc>jfjHwGvj5mbSs!n$;5ru_GYo5c}j%hzDRi& zH&RiuatrXn+gO;`nkgLOg=XJ}N~EB3TRd|uZx z(|p{-J#M65WeJPOHa9X471%As0SCR?Rts5XJ!084sk3E(fPy6m0@xe7Wc=TrQFLo`60M*$ zid-D8TJ}V&5b*JI4mNi*kq6MgWot*YPSBk#gE@r*zMJ)33vO>@?ns2fQ7s{el({vT zv+HvU(l35DY98MbPA_lzqVd9-u1xDzt{rfLBG%WjKrFvQpg$IHOdVRw9UOsIn0o!@ z4w^n)UMMJFFe#g*>yPTmE_G9u2&_K`#sG2V)4&KKlZ(P?9TW(NylzM=xXj=Afm&}3 z?bZTKQ_~7`G+^{UbOJy+a_$dF{p?khm2Xc;7(u}+VmKMtjY2{PFCVnpU-vRFa3Lzo zx8OR1{+h=3XKcU>OAEc2b)}{A`uqvh_~e6a-=Ri1r#gG6pjoyjCXJK76Z$)$zZ3eq zLw|SZ?+*R_%Kv`le>wD*Lw`B+*OdOZHvel%zoztSO24M`Yf8VS^lM7Lru1t{zoztS zO24M`|9~kKfe;W{x|BUO&@(>VY@IuyqdG#dO1W}bsHs!+3>UtI%MFAiYtIr#ke8AW zeTD+@z15wqXj7ug+KOh`rSoQ@OpYc{URCZHid!?|%wBg*;ip}0qwSvDpA>Ivvi!&E8QYOSiCh=(U4{t&`^ib8oTlE zb-LHT1_NF2FoMop1x)o0N8N6phI0J;<+x`85~$mph{&B zy0R|s&5@L+<5ZFyV_ZI=5odgIl3vA3&Y4ks@cQ&5VJ(_F0mcC;1_d;2;Ok1>7^5rT zt*AN-G5WYAh#S6>j#bbDiH;^J$8be0c>$LREcd9H30mtY&Ahh)X*x*n0qJi0{(A!O zvICWbM!k!CSK+%+iWLCeSAYKM(9&mIgCC%!ypLT%bSaFEHXax)Soq;jpfyIh6Bf}) zJ3v+31}fND7c=N*v+a^%6?-`OVaL?eQnw zRU$l-sGV6%?p?rOWnrIy#-~D0S)Vsjv6VFUh=jk?c9($pe%5=uUr#&3e`}g(qqYs~ z3w4?9{i)T8ICtC$=Zhm9X+}gAw<^saD^#XN)SyH~%owJ4dmP8SeA<#kkLJuvCQi3M zF!NN|zQNk`wBZvd+KbgNb%*SY2gB-0$tyQ6f-L2{qOBJhYU-C#kxPGA8?*5skgX=Cc$R{zH$9yOKDWu9DnZ}8^?>p|KGIVz}5U~ zgQ}(iw)=|nUtC}sPE*G~ItTyf1?MmMKFzQQp#2pp*&1K{L23>Fv|b9ZMTxIM(AFXZ zqk)P(bq?EPP&{iEnR5u#AZVq8U2;2xe!tYKEK|3g!=WLc_k(L5D#FT2=QdZ-%dp%8 zG=@^4lk2_GJ0Z82p=rR1fgxLLlx+{bLSh094o&QDqzUdPK?h^!2{R0b^e;&}XVaKP z|3Y_xjJGu^pTUz~)<=X|lN&w_RVxeQIac;$rRaw9L#dgxqt=Y(+J#CEjbGVDC$x+P z>v9OtoL1C9N7$8o$yYDTJ%ibo-{`>)3{@HR9qQk5^cBy?VKT9f{xOv}MD<`DSO{Qi z(8tS)FDg{WYzwn{_(-(Zn3?NlQswxUaQ>3q2+Go~ITE@s{!!~5Gm z!n^lqA(4HS*u&$62w)v1ES#iQy4 z>ILW9z5bD2(v-@m@CCdHTRe=h9=ed`hm-D)P zF3}n2#h~AU;KV9=6;6B5<1_!r;z_mEK+Q!tPHg+?aZb+8WP?I%3K>QBF2O+RmMb;u zVB(;vSWsJbKcH+AG1l{*2P#V#qkxABxaiMhjP>1^=(H-j{1;sscX18CdXO5Kpgn<7 zLbq0#CJS^4kZxdrLi~9r^A-LMXAby)(qFI)%KeWI>Sb~f0JKFGuv3w@TEPAq0;8Fd zE^`^%Ttuos0i9&7e~znaaMl+5grP zzp5KcLvpwcyJ@?(a{<^a49-UNN=?-#m;4sZ*?%?y&ETcHk$`-<_IUSDA0y4hjs95? zSQc$$=7A$qb!Kg906DoK25F$Xolmz%TJyohmFbP{9FG-DzpU}u?YC&d#H8YygquWG zdVGV?-mw%bDe;EABce}?O3XrTt<%K@It&z6bBgpIPynq^mNdXh0$2FfoivL30*1ht^>r4Qf=|^fB>M z)y=AG1YT11NEuoLZa~$fjWEC?gS#|1k$J%L7i36amu!EhCe=>lMG~yr5 zm-m{<+Yq7B1`BJy=BFlM8y4uWh3WUD)qGOAfIT}1F2;htTTXK_R8%;L#;SaPwdAMq zmnc4a+4B4>h7~VvA(rZ9R;tOlG~$s6JEO-Q53;z z{$et`aGO8|ZvuHaG-z(@d-GQw?~gTm{Py;cdB|;+RM4z=4w(5xxL<_(MYvyt`(G9H z7vX*p?ib;H5$+e^ei80Bh5Jq6ep9&L6z(^L`yVMB^=X5-EEf62C}_6w&p$xoP!@kc zDc4*U&I3;-E+2uHaaCmxas4@-s2)eI{{#{-q&u;J~_cnLLR?$A) zj@U$D=kGUKPOq*J&hP>~3$ks^MtyVAR3BL|t}?ZbK%n`nK-LGd6*Ez+p4 zIW(n++(iBaT^a&eXpjBev%A;)7*ZU(#Vx#g3C3IbPdFU6ql^hRKl`^S9j!gpmxk8w z&8`^TTi5seeTsc_V(qe;YZ>wMTUk`V3uuYCN*O!V;$p_$VK{k1I*9K<5@iuML}wW! zDy(4ivDb;$6i^F)6WWXbq_m0K+@AOb_BoX#deqDvazf8hy{sw=Lo(Ed);1?6$ukQ} zQd(?f*wT3LY^skto1>Ati`r5@@JYB=5TUZ`Sc)D1=A%x{D}S$Mptcm6E^76Z72%SZ zRkqhJ0?BNr%6UnSq=;|CS99FV;5bqR*JmTpdsqirT|Wh=7;HaD^VaRtem?=tWplOv z?*G9Y;l!ijfL%tSTR}`@fg0WhuTTxNE(%Dmcl>J?#>huMJW4jku*a*=xRIW|O@#-5 ziruj;Wvm#UWp`p5q1FIZC;azLWHMj30jFHV_14lx)msM`SJ|cT;*zrg{++-6571i^ z7PEtmx-9Gc3~9oA2*&B_{YvBrbUB#FI@%z%#OZe|Id(HDzZ;?Uhy05?&vC;?aAUxn z@H!f)iOP;#F96FYCr+={EU#KSO-=9w8e0ZV!tZBYQkdL%3GdiF2hz>EXK4@ zlrHXIWZn7z`@Q{(K^(G3t#Vv;-h#V!VxyJj^J8QxwFXxFsVnh&p*O1y!x%9VwW?GO zX?xvJ6Rt6w_zSCTrDo-2@TL=f7pn|c1i<+r`)NN#(=E#jsq&;i@Rt<;_6+Dw!RT_E zEJFj-0ISa!SEbDoWq;@?3u9PMM7-j?8It5t5agb%mf{yL9}448Vc>dH2~N|`J*xE9 z#iFoY#ib?%y`WyBw;TR8n$=X1`VVTd@M`DsDx_!4?3z4+?T;dGx+{2IN%69;THX38 z_dq(EvnQk!z!1Ybo4Did>XW5R^b5a+<_gh_ zWsl}%h3V`cW)%ep05QV8K@<}(TLNMjB^$*=-g4_+=AaWnJTS~8fMF253l|ImegJ~U?P*m*4AkH-xfJ=xS z81%wi%Ct9vy`!sqWoUsr;hlChZtwwF*Sz;yc6cJT(^u#h`FpdP-W}3X`qZ>hMiwbp zp^ZtOs4%Z~nZYFg$6R}?nVa(D^R!?~BTgRd18jjf&a`t)?{4+>YQ*MG5gJ(!#IOw@ zCAs~{ebu3!%+IbJ1dg686I=y`_r!S~I$JY%coY_B5q@}~XwL5O68p%{6bv**oP^eg zY-E>d?(Li1zQW;alyB~-81ebe%@nHXxxWDgUvmM2>jd;YpM&6B0^XVtoYWp9rHM;D z1F(URwrw7IDOL3)*7QM&i3CzKo006~!~cpwwX6GA0;Vid9X5I>Zb{CLXLl~rV6Adn}*iXqb zp+WzkJRUWfV|agGjQ`Zz4!vo+YA;`r@)56WRw{@?9BLDOoJF;dfiRzKb$Q%k{qS!X zhz_A>&M-LCNsrEptp!0?I_JTZHk5LY3%lY`2yR9ec_2eDB%n8#B!EL=tGV&}q2^4# z3>;=-o`xro<{#VWYgt$w7GGxE!RFi*S6x|Y+gB&_gIX;3#=IflX!c6PXg3w4{PR}q zUJXJC_SRS^^qxgac^YfXxJmh-N`HilT1pB4K!UJiSW9yPdLOUrr8%$tc7w#>EP{YC z?0U=phrP;qAbR4-i{Ea1@Q|!#svomCCXj5w*0XXXM*h6A2e}j71*OZN)Q5zJS_kO% z`kV^2y)>0dT=bdgBR#) z(JO8ZUU7+58<~3gG6MgxRGeevlA_u2wQ|^dR${PrQbBeD^au85FGSov%M4$=m zhV_~1{@;Jj9DbY%IgYdi@z;sV#S;1$?9maL%;?g=QcY2R090h=BlM_5K9l1?7Po!?1bNUTz6KlOZbS^ zwyP8+AdYnizARum#zB}abh1D-){9u#_2Q{rpwc8{)%0)+RMt&SozRzZ?-lZ?9yibJ>LffH= z+FJ-^tFr1NNj?J6M@C&mJ{0l1xaM(l2h#2qpzP~;-4Uxw8`xFQ%Ah$K1*eZZ5OXpd+z6}%~6-*Bj2?!flKxsK!fdK>2HAH?{gHvO2`SX#F(y^c5| z>wGK5rkdE(d;3m#CGY^$oo0MzT{UR$wthvxipyifbzHg)9u8KtYVi({fZk zGJldDHU1p5r(wQ@gF8VS2@alo^P9Gj9DERzG&UOyP`J|=W4ey8Sbe?(!ZMPPS zt;}2I6R|-Oc#ABQL*CuU#J>nhaH}q5+Fql#m~`s)_K1(sq7VD%5Sfm>K)zJ#GkTI4 z_VT(Od5+KCnEajV6Xv)M$(5sAa#8_r4|q&(pVZ50Ws?NE)I6)kay~o;P`DnOtrbx4 zy=d23ws;-yZUA0&H-17AF{k&DyTH7f%{{B=lXBGI29pEL>DEpfR#$2at&?KEEPuJEBd7k;zh?roxqxo*_Ph+v`_Ti5cw2>HYEHt1$#8RpF=>7rYm@M4CEYsa~E*?IWa@8S@H}RTSed~#-TM?n!DwMp? z%g~GooEcZrwzZO-wScWRY&iVpFC(^|Lq#s{W2&OOOZ*XLx>!`^KwRI_rcPLh`iI%&wI$}wT*H!|kpie;$@3f7=anBA@p zd}O;HFMfxrr0fm_xf^Hb3CQFD10lS7`I*v^5w6%`TCbW|Sn%A)LEr zd5yfdJeDOY?CM`DuOS8kOkK-}hZeXSWA$Dno2*G}d{QGmG0_>I`&{Cj(yH-c)}D1j z01a$);2tqg>pP(_HTqA*g_OA>{g;ng^6%kZL9+zlqZ}>`tf~EvZNHufMTi=|Bz< zEGHA8IaypH-Pli}VuHB08sqxwF=b>TU=3_5MqHkl5hk>mQyJX8RLxM-^&J2}K{8nk zA*f;1F1k)XuipgsM78B|#jYD4C`{_5o~MN1W^C*uXTvdm8E904z`+ggHy2I$EO7hH zbxq0NGxv_6Suhp=|AJ!k_gC%ORX9TH~ z{gn>r6{r=dx{DG}7_y7BZvE21pogIHl%c}7<}S!7N+K)@*hw_J0mM`asP;+dJW*Hu zgrMkB(|9c}LLvOdY2VkqD@v1MM;ETOo(%^-l+Ujk3_s?S#utBRjrkWtj>CB;Ji>78b{@|&wr$(CZQJ%dW81cE+qP}nHu|PWnlw#LPSfVJ{rMhkL}l?MQvndE7Hm;tgEL zVuJ4n5`YcOYKjBU(_l?E$yxcE10)7(0R)tG%WLj5@&fBN|GqODdZXd?b*zf9X4J|E zZ=xAp+x)Hw@!k9;`1jBbD0K>j9wao_8bFtqd->GdL7`V%C_7ajwlDgw--F{JJvIRr zS9b$Nz6lRm=QBC5&x`og1FquH{(;Cg*00wEk2K=)`$5z3-95?)Nw{xGrmOXAEOavI zibEVv;uWFl<|AFVJWRDkC~>}rp$P*xJ*K#Ib2&3(9!qb?aOgE3J-UuW1eUso#7pYD zcXIk3IP!eNV3`Q6oQG)P@=!483>Uz~2aAoXVGDp3Qo3`sN23 zl3RCQ?r>`CD4VK#+^}jJnVgbt8=ab`0O<2}ir%RSZMm&5p|wELok!~me~munGqmUt z11HuMPSyA)`2liduV5o=EJxrEIESl+0ObcGvU1_rYBhSBC30_S{-jxx4?OpCA3t7B zt%dm2RRp-dphOQ0IdcVRhi%E^c~F+&Uvm7!q@AQ(6Hv@#ng}g=VQT;X&glHjCAN7K z&;WSuT?CI!YmXU*iz|OtqL91M7jlj9;0}8Z9VLIwXEe}zX*kMYdy?Xq5@_!_BmCd8 zZ{a~qfeF^!OKop>TH}3$T5*Hk zo6N<&40{Q&%sZ=QWuEbp02oZ&CSs5H=!XO6m5036h(0{O&L9lzAL2-M6fLvfqiL5G zDC}U&(yrek5TsL|=%Us7yD4g7IAo>EW~cjAB56eubdwqQ{+f?8%$&DPu(qT6o8Mq5=OatNX%F7hU$gG>uJB>8 zV&)Wc44S<`LYL>?p-s+wE)F?Lau6T_n!tS=tX6YRskS``%0t z$$sBlKpP_347m^tK>VaVUX;kQC=lu6*7J5R#FwU+yel}NA&3Z6_ZK@CMs|xy$&bFO zyKie-&A2@S_^F^O&`yZ}hMDwl&4N^@XtM8JoSRtpHM_?C^7Pd@TX-eKp#8-&13NcL6^KJHXVb0^;Ah(0SZKDF0M*+*k8n}K zepSn~L-dI{y&k;Zne{X}AFk+n-L0+L!KjHWXgb;zxF-jOHSvm*I zt?jXoL4!lTP+2A|Zw>1>=0S|Pn{juYbqj|cH)Fi(_JSHnn463`nsC0F0#(o0(k#Au z^oEv%X!I;=Q=E;i7Dae(Gp}n`R#r}T%X$!CA49PV*1A1dFX~=Ruqm9)oyrZLEVZZV2(Zx=p0Xat_m*y(iMW{*59@ZLJ%$V~z*dS|x z^%=1wEmHbKj4~8(2Uazk;q`BA6xZugX04H4_&Lnv#RFwDjUs6rRM=ti)+~kkl%hq4 zN~IXHB^;R3UvNyyU8Ie~Gs!{+c2gQ~e65fI{)J2=C?Gzq22F?^fByQStOvm9eubHy zI<%a6W+q@o|b&}VQ7 z^K={(3sc7FqCQ35A#!QTI0nJL4M5gS01oy7qL|T?o<92&V&=dxbMru7u?I7T5bz~W zDQg9|0A@0LBvV*_sTnzTi}xpLT&1lFj{L^6CdT=Qib)f&F?N*Ug}dh1Q?5#KmIuA~ z*S6Aks*(Cn6qz>PD4oJ&!ajpOrjH$mKtJ7O;ArB`58tt=`1rXJj-=5ZC36)`1`ciF zVP-1cRHvsfUt_7R*%z^*g47*ZiU(DlsI`m^yMgnLg0-A9|7<#?u!o7bo+l?Rms*9` z$7GnXLO59<{cYT<0S$C@>Wk0(?CW3zoJy)7oJ~z97oKrar!@{jfH$3^LBj3*i@j|M zhcgBsYM{#`Ix#R$cQut7NSw;|PFkr7!>o&Y%RSlIjL#My&edxRZTYXA>s^V-^4US;i%Z_6&2&JIFh((_o5%a( zf^)L*jzNPRH20Y2?prEdHXPO9H#7yF`lnZ>1(qUw_2eVOXmKp2UWaE`p3K3Y!$Ouv z({wi+jr(^>q~-%!+$=bUY|9n)y-f}Ke(jD~AqUhnU@&A965otx^)DLzer&)ol;YU9*VHOAj-D*AzdPEuf2zyal-y@|i z1DP?Uhcy~yAhuv39Fd~U!zF@*jGF{kU`RuCj^IxpdV=^U;#>`l{PL12xGcv27Ly4$ z4t04xtb&EqDMSbR01l%)9`(tO32-dw(Sg|_0V0my8S)O7p)H~UX*b5mw|HaNCBNat znFfydAp4?ibf+o)!J->aLhPWg(z6_xfyTMFj;lVa^$lZkxM8<%+UE7a@FZ2L>A8#W zOed1@xao>$J2Rm%%NOxK4F?#=h7x;ITt_@>QbJTF-?>dr-**Rr%O-Pyn^rY5qw6HJ zo8ZFwxl&tc#+_f@Sy;s}I$-=FdE1U75CF4wR+7v8#3;UhODLA5owjvtx+FfBa$Dg> zJ$bHUOHnHxcYS&W-Ap@ZBNh|A!H4poIkF#&(q^X+@SRcUcb>;~bbH?TC++$qXQw zpYbfNrTV%C)eqZW-rXGKn~;jM^XYFQy+k{7|DxDo$yy0~Mw;iWaeQKwWyH%}Niu|k z9>HkjvVVZ>OcVIr%Wt$ZNqxpxzj+~#XV9n2!ic#|KU-$eT~oK|(`uIzv_(P*1WHUO z`bu|Dd#Bjz!|cmJOzxCZ!+lXohlC~OG@(lJk*z-7RSW^RzHYIxF=aQ--d*J1RLL>H z=I*bx4?>)a4``^6bIx-*gG4mO0Y|6d&DjqM@=it0i&ZTdW#aY&eyM=YpB4h$t;ToZ z(+Mk1>_w;EQExNTRx_>PW`rH{yc&Y*njsNV0yDou!Z9R*IC8kyZ4kr@I_-JHwGCt(T_Ap}2N$xMobaMOCxFIG2snXp0A1pqWn ze)L;b8#(Tm!y{Iuriy6<8iG1a(vwv8XQTdP78>{M2;ktGj{{mTi@XyQgwVLk?6mv8ABl=3u?8D-AM#2+E(GW5=?=6cG7 z(L?7`n|}3>#ZmS6+7&UW=4be9c#-g|s65ocAML$qNaZtp>?!d*)y_Qh#rbmTHz-1q z!UyDGR>bwsba-VcG;QVtP55~j#v_S%taLflt(nlM<+J#&h68j21M!_H&I9fhNq%y} z&+G=r&zpn5MZ=lEb@Qs3(N#jKO<)1NT=9)Gqs|ZS49vnPZ6H43oNc=ih@V+&bFt-K z0%ULJBJxEE$4xEk4)Hg}>}Kd;ch1Y`Vx)@uZLgj|7n2T}h{bqM;DJ0C_RKrOl-bFj zI8MkkJC7qfIz6v_Y+77~rOFB!B|8L{2@evS{j7)UoO?u!gc*~4k2kbnlKfPR@uc(h zG{}0Ewq~jIlMnPHB-2*~`{GTV0KM-&a7fBF72Yk9M!qnkYWiL2jQQVSehWI0K`gjNIF2`&PHG(q;uZHd`lpRtKE){l>z>^pQn$*vY!}mZ%ZpGWKX#7^6w>egZgW6u9ioQ=HbM3 zx!Qr}biBbz5X9Xa@Pp}YjUUr@421itoX51W=;l;oSkEQRke1yh+sYBWU~1Hi-NasH z9Lt)D2Y>IDQ}+fkOoBLmg8iTiuQ5Futg=rI06F7zAo_#=^0yXaFg46-8<0Q?FqX`u zNQ%@14U3|gOd=fr*VG!dPKgCyk=52DyySsojY^`*wFfg!=p^mPd_j0K5%j?yLvETt898F`aFB>O&v z{HdvQyA>-xChTz(IB8_4%HRSw*>rdk;Eg_|hbjMOtvqbR(3nEB9mcp&202zmoWJ)U z<6}_@`5_@#uwfY`Ci&}f;yWNhg4_$_ZdT9MmLb^N~Qo|Yhd^yG@33J+E@ z&1$Z!3K|?+j)t!Hrv16B@tXHb93#Md;j?nut+ zMQZ)5VKob2Tt5FDYdu^Ng>D67Y^R!Jqo`Gch%&Yd!2W#{5)#SmCd&c9i<4yp)!JA6d~30wb2-X1e?$ik zoLwY*=P)=lOf-FvRS|TBFO*Yw$yw@xnqrCJ%C*Z#kNFSD8!)wpTVckR&Kovv?gP-A zR+@AGP_HcYb29cU7ji|WiXFTY7k9o`XRU`2fm~nf08DmLwqS4ak>Ce~=S((!GN;2b zO%TecI_;Yap|Y-)*HZZYXoDs67BTOk;{8C!Q~)F?Dp5ziz%wg;J; z%OlxD(JT-VeaBzG z%FtLxV^56`jI9ZW=D-T1JX*5;a5KDMnlskIpV#0=ND=Za&^+rU$e+sgl&H;vHq z$2)sQ7-wB0kDP=u7W2W6`FI?*Z5JZT__u3cZ+Y1c=j@rgNNq-(d&QI`QB41;)0Q`k zY`*IRu$cxj@*aIkI+%Qwpeo6tApWBK585wlT12k{2X2Bdx3e(<8ZNIee&Ft2er!g(@*_tlx(wQf1yB`ra`C~*$-fa1TZmj6gq3)HCN z2w-)aglcxf)lbpxIeQ(z&pHQI2wc_&(O`Ue(34l}beZhPu>VFk_6!C7AV%UW_9CLG zhE-mam7FyYC|l?_p>uz2Q0NU9V=dM9Nn9B=Z%uNU{($GuuSf#yzkxL#=1L+h2}OUA zTEcwqZ)DW5*&3oG@m4zQ#LNn&fb0vk(HN)tVM^G45vhiaPT zG*{OI4Nfe_!ZrHRBdlt_7Xp&S2{Kc_Br`aRORzaRqB3dGP(F%bk6ciCw#R4bku+DMguHeTx=&<>?JtLi%a9#bt2 z=Y^+a#ZI_jb+jwHdkr5oXfqOy*Ft}lQ{Xh=Kqb9Td`{7TB6p#|E$U**T(ly7i?@tT z*S6=+nU&0htl^8XZ>`FCzjF<3Cm&u2_>;Za{o{riR#OenalwF+K89Iws<7Wtm`K)x zuzMaLL8Z&Vp#lJe>tX6B6vL4w$EJjwWagOjcaEKePC#FEruo8%;SAiE4kxq!w5A6* zLEML*~6#?My<3`REwE}DZGN~SSxYtJ0!)bfvfP7v|TAZfx!3g zg%sW1lw&`3Pk(O+0xR^_n#&C1onJQiW1P>@)X+3@A?dz)NKJ=t?&UWbDgfRl8Ij#b z2|MzQ!8>x7+lNc>sR8D3AT&S7uEg@l&VnA=BHP}!{N3~yZZdqICfVV0dsWE9e!`{^ z9b-H_;oJ=3I!gcB6?=@4^ri)FqW!|KptAHrusG)$27gFR5ft#vH1I)zH}aIX&c=T! zSu~hkVJBM-&jP%$X7sTX=gN8!qK3v4qa88FMKdUHE8_fp|EX9kOJTkwg^D(;V#FnH z{)1p{6xl00fL8+6+q8FBn1~0@kr|zM>$bG)@!Jm;FW;n$iuU%%gbm24$$MO%t{aTt z-$;WXn|>_D4L4WEbW6}5MQzAw8NF$cAuQp3xc7mdj?*hXGa3w%MSU$w|b1 z2l*jE42~+vfG16nNUT@%G2L~$X3Iw}o5Nh0@jdh|>(BDjW&5$m zh!6@!h{9>23ZxoQ9~Pz%H<3 z&9If8fL~n`by*O=p*c8WCVn9ldurV?hwmfpA*}rp)U^|)TkU)U|5w1xDWh?941tLp zN{iD3QVm#p^YQ4G2{z001LsmELpRgL4u=aw+nq|~Ruo>OA2B~BM<%W8{cG}59u76G z+H022xcrSsS8hz8hp=klr_uFTWNj)4yFkwE%7Q?n5Kl#WPe6bOQbTz9piadu28h6c z-Ug!ApUkSiMJT$R8&*c9Wq@I5&^``Qaiq2mbv>vx?lWy~NTcz2;A?ZrhmhiVF)!Q z1DG(9j~e*X;gpLbU~Z$xFxQu|Sp&tW&t4t2*F|7cPy;~3Iu(mc>`~?Cblm&CI!-T` zaFwL|4ze?zuS*nGHO(k^h+qEWMl#eZiDTk-RB|i!^m9ll8HA{QR^f3mv|RT;GxW1k_?f7l9`A^=Wp>x=PV=axCI$ zHiAXigjB>oEubf@UAmqLed>xA4;ROjUhKsU*fHX~RAVSHS#%x2j6YsJ7Y6ltvKvZb zN{Fg%<+v8;^!8_;$1KX2%buPSNabK|jpBxYdToP$fw{zYinZ*d`w%S4GnsNe)5>(H z%t3+=#Q;(KMr#uKV;DuQH^3Aqo{Wre1IG-aTlg$)mn!b6l_;Wn@PP^U2FvaRT}zqQ2Q*}-K%FZ1oCS+O$6s{xRfV4J>bU& z1d~0Wh=?((z3D7UMHk<^0eN|~mY{b$MejI_MC7fN0veJ^Oe2E}!ivZoeXJkzO&7Wt z$u&@=|FdRS%FTD{5vR28+u9X9AoE{szM#wZW$?Jp5=(rWBxGP_Ej9!9+2Qp7@P-qY zfXJR$K_zI^TXw2xW^aRl1XlS zME-0tgw0W{GZoJrV}>LrouzzH0n>s(+X1aX?KG%8>^*$W6llSf8&sYsN#Z05oU_PF z3j0O_*6s$ddqSroj@y(a1u5#Y@G4_e62q$nz0)a*BXgK)s%bhNf-`JcVHVh3i&1?E znmagGoh1CTw|NZYm-*t;rrYX{bPU}_eX^w7sfnx)<^3uk^gRTC9LsY%j)Y;i!9%md zCYprY)D$!UZICCvz?f7Q5~$dvxp!!Qi&>9JT!UoO(EN1NGc0oVw1=NFD< z+4KxcMClAl)R^=A45@ipEh0A5i|?quD8ChQzT9Fh>z8w5d#5iBIzkBs9TFy}&Dso3xN4sP$EQNI_Q371V1E^6c z)J?v0Z!TU(nzcDnOVa$(P;w5XScWJxHYe}9j0#w@?#@Hdg+LDV0=l2t4gGfC%mQ1v z>gFOnh-QW9)M?KNC7R?0Ac5O_pNKxgWl^0`RJ^CFf0Cp(`r2sT1G5dBE!E;Z}fzTp)uQ3YCy51lx4gtiSrR(^$mB$H{MS9j2|Wl~YNa zxz$X%e3O>!GGon75Tkuuv2GB=!r#|>6g@lor-?whnwO$}@9LuT32pv3B|_&me572h zRvBTWxbYC7|1$O-yvb0hm+yITSTzjE01nwcVe5mB@DfbrUaX>#tD zLzI4|M|^*Lbi&eC#h6b%L8it?GhcgJ{eKAizM+&YJqdjBrHb(}A~G^Xrtfhfxg*?o zuRNt`1*NDLJ4tPunM*!n36ItcssT6Vt@%T8c|u`ZIc*I5u=#??DSN;W)pIrT#|G7lYE!5HJR!ni7G@VaTD%hz_mfURcTlaP06N+q9^9Y4a_9`Lh!IP^>!?#aq{L5V#|}4P00L(_ljN;&+52-<0o%Cx8z~m zgs|>J{{R62y0D=teP`-jYXU+X@{%oM)xyFEc@{Zl-v)V94i8zP6c`|Ekh|2^welQ3 zZKnnermdx|Q7j#d&>|Q+3OwlYS3e*4EK{O89la^R!UVZ4W_Dp9F^h;li4O#ajqOoV z5vW#c?aJqjGmB&n!AJRwVzXyzioQ^3d71)5tw?X=xNVOJUTE1$7r$#>{ z*4@rCLCh6pWjNywLEkib$@!M7gL0xQ?u58VR&LXBz%WGgvD975CFlsQh zaXeARut?}&^-JUKXHto_+-E_ML(gAYWiQ7W112inmMVW6D#qNQ67&=lUbS!W?erx_ zboj+Pusnoap>bpPCLVy0j1gj^#yCTb!MG#E<9C&%0Db%#UVtX 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⋙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 PQ{W|z4fNa9|HuCT+7PsC literal 0 HcmV?d00001 diff --git a/frontend/src/assets/nam/controls/knob-cream-atlas.webp b/frontend/src/assets/nam/controls/knob-cream-atlas.webp new file mode 100644 index 0000000000000000000000000000000000000000..f28e17dba6f6ec4fa268c5c5db542848bee4ec22 GIT binary patch literal 1251412 zcma%ibyQSe{4FI7l7a%#-4a6xQc}{5NSD;0#2_HuBHi8H9YagQfHcD}fL~f>KuH0C zcm1vR{(S2_7OY|2nYrhld(PdT&))m<(Nj}a)}W=tFn+C|W27TtLWqHZK?eN2!vFUx zuc4z_7K?#FZaG%y#-?(zex?$zOB514KJ@^1oXIu6Orme5yEFwqj?}-Dm(xSElWd

qu&$iU#vLf4h`Ct$w@?A$SS|%iN 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%0D{QmEMqkvH5oS?NoOSA?^~KqMpa`hj0W2; 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\wzLZW(!+?w>n}$r4!B1;|q|uF%nfeN#f%Iic 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
Lt@qL!w=i!z$XC2NsG6+kicd z@yh;q%v$Ouy)H?!7SSNhGcd>K+q*|dhl?sE2;_`2D#ocmQ4JsWXhFov=~fh#}ji>e&BbR5-86F!yJdmg+tJ zFW;R|#cr`2&z;Gpat0OS0X6pMMu*uOPJ{}>-`f`vvJvu%j-1$?jbiTMYfo9)*nm#8 zFIx2;4Cr_3n$9%~#oTc7m7e)^cZpv>3Ezp9S0G+($d@=+6NY=1Dp(`QvJXQt@a`9u z`H>*&8LA=D`w?9|nvmX}!a~!Ker5_&PJ^S-|NBgqD;}y|k5~`%X;+*$ZCYcK8%oYL z)m%im-6|tIO8IudFQ;x!2NXN0hN+av!GiE)xXcvL{c)7QwS`kSA{{f`IS@Z1VJ3+^ zI7mowaG{@=X2B1sNkj{6bRFY5P=m6|x=%q8F>t~o4q3#Bs;Cj3;oZd@>WiEH4wjXZ zTTzL+jUEP{HZ`3=qDv?jeTldu1`=P~I|m{4XgYd~!?Udo!sS4E7-w%#A4J9@VW8s~ zkq{qq|Iuq$;U*Ggs_Ayb6_=w)cBmEW9;RN^u5P5C;;*`u>PK>9>|2DJ%vb{0Pw-o&JQg<`1|mI?x|K7pUK9`vNO zzW74O68oy#@x}<$p*~7aiCpVVeZ)rFXWKsRFuZg?tDR2jizo`@kkj#;zCb>^Kog%^ z-CKw6r8$aeqkt)_>=>$d0zvdSAH0$@O;{KkUWDA?*e5gIz@79v;59*W7u{kcY{O1V z)nv(l^P6unw%Wm7aRt~Ex;K&y8gC&S!jvUQ^Y!w^m69bFn$;EkZdu2OETJFCeXR#Cd1V?;vF{NH$(S5XV1& z5NxeO_R9v=EJq$3t_7xDr!b28%$rT9B+7Z_g?7ZH75B-^5e~k3sIO`A`fh)a)wIA2%W?iF}%_5pJdWjOvnpL{I9>0NlN*`lja06?M)Be%t zTtNSLx8=$(T+ca(n+Ntg z)}y7rFYNN=GwrOvoZ5G};B2mVU&L`CGI+k*fK(eoQ$Amd{S5Lb8()5nCsy;d!3ZVE z&s6)Y6|v|vo*Awci(5v%AdM!@yP@K6h*O$mk}liG`*kX*E{dcYY7#cX#_TZ|=|?I9 z{G$16;Y&pn0I25?(`2UzmmKPM*HSU+x3_p8$QC#k)qc8h^g5WHAtnMOR=E#M5!dnb zVBwgj^k_Inj)}!10)>hugS#fLbS7AKt!5c0<(IZj4 zOW_^40@cKIiMY*@7zrIL<)YE?$nqeq~)$a zokV4x5{8UMl#T@GU?lZg8ns``BXsi`BtJ+lMmt`KiU!LP+si#=6v)+*sEK zEOL|2qeVq2lx2j*ORX(4ceWKdr@NoV%=5kOH6cx0MRCQw%~A0(oUJ+F^sua*;dMB!tfl*Uy}$Nc z;Uhsb`kU)9JTkZuPrGejBG(XNfUO3(iXEKgpTz_CCfHVu(r}6kUq;@dSo^6rx-qwQ ztQQMsWMFDtCpDK*Qfv~Z$C8%4nPHhq!tfoE$#<%Rsb{-ByEhCnFjj<|XJ*D6dkg|W zL3m@!Rdhtda2cx&JXtbr?x9muhP#}(;@ErgZ+o9yzvv*;G4Yxhnyk;7lLO3SN8Ofo zg$L`3%I@f6B1aN=nfQ2`ZVB|c5wO&nsP*2bl>nCQf2S17IvhNj5>+X1}Dcf6JB zc{Hxc8EW-n`}1U4GQJNmaA(9(VqV{Qwm<6Y{5VheV<=wF8UnCrYSU?5Z+b-BaRZ+O zRq#<+ib(H+Kw)4YZ#^S>dRW~xPIp%S97iA}Gc3$&nKbW)>tGAY&za`agb3$Ye9lcb zG3vD!3jpkTMl;(h!=r%q?^r2E`tubE2Ht?+Cf`lfkJtp&GDbrL!!GrJE#N+!?9U(Z z7W=Mo)_UjVK;psf+&4I}V`ZRXbBA?t6~_m$u{~O#_2SVb8}2r1P~zWra#j3Y@di$# zC#r`cL_o@s^=gntYr0n!Ac3dN|9@JDDUy%f7D?Exh!b+4RWJ32Y`8HpZbo6UAk!rB z-9`ufZc^vNI@mQ{Fin+XvjH&rb2u5hksn68>rZ%$5zm@!53JvPD$_Jf2+iIs7u-xe zuC22ky&Gp#8o6}7aDv|+X-&7eYb48alu^Z%!!;y9hQnw!vSE9GPH!ZgZ3uNnLspE-Y;19geh^@3}Su+ifg$CqNA`J5#A}aSj5} z|EU;f{ZWp|7)XTQG|{6@>%_L%XI1z=ZNqkDxMn*aCMxv$4ek}3_h#+ znf|JmQ#n={z)T5h;BXn*`ghGh-;ta4TQesUR7J(Z-q8KE$=1OHUO+TqP$N=#n1Ohm zol&~^63!B(@Kay=JxFw;>BFFws!IuSeo=2&9uS68_$LkRz7x++wAgF@R3tNMSvrwO z7p0>0_VhS56Xj=Bv>OTKEK%hRfQn$Pj5oR0qU zC+n^f_%7cjx{AoqYg008y zD5h+>Q9i6JF~P|--4xtjPr}L&lo%Zx{a)|#Nw}bDOFJl zsJMs}8g+~F3ed{{Kq-TFBoo@m3gUE)RZ1}9mOki|DxP%KaDvks`N5uFFGpqw}%s!j69 zRS>~3tP&Sp2lv*isz>XeREn^+6u%ZAG@>RJrnL1%@7d|CFvC%}oNMiH^72hzkpz z?|50^0VbAJ4gsNLstW21uBca+Uqm+go*6COH$B#!eXu$*o+vi$I5L?vI}oz+9;&M^ zgLU>+QEG~aRs`VQDy`Kz&r{ym#_9;{F?J(^JZ0-R&18SY!To~tw;^H|;EJ^Z~Y zB;ECHeP#vmI5b@9^WBeM6DX=nr$^_AivmwsX=G6Tu{lM(YC!k~@1u9*mM#Zt!>8B- zV*3z^*Wa~957H7Sp_+a0z>}X|&bAm~Fgo>VhJM|j9mWWkZ1-Z)X5$_B*YH1?>7#~Z zn-$b}w@u=E)#0^8bEpEp|5;t~b`?Bie_bTX3Ar5pAL^3MZ{8rzm=%JG!bj@iNUL1x z9K@k2w1mzQ@?#s}gU^V0^M|RYHR6oSL2sDe?n3L|gpMDivDjV8f2cgs$LoXCYJXWv zW)p0D>`oz*FPAQYdCDDxi^pcXP&w}cfJnz zoBCQvC8@7+VUgE2I7yB7IY|$Y*t*$nlx0xTH8&EX)=0-+xI#ch>12xZbB-_DJ2Qq` z40}SsDh6wMhHd?KX~}sU0gWGvfH~gw*nOF(u5EI1J*EdoMO>unKj1SM{X5@(h{Px> z|GeH$XD`~BY7txLgXJQpe~L|kUhEr?K)!=+_wsv2p!kQLZ(dM;9XdkI=j2&(uP58`cgE6- zhj53+QHjWCH{;HbJj!`Nsa~=g*<6zT7IC=3TLcy_ebgX%kCruhC@4F*Qy)jt+tFCJ ztPJn_-OdOD^9vK{wi4F|>QLmr(DQ$x=l?h8IY>qvi(W1k)$;|>heT_ideFd_^}&JB zwoZ5A7*|t6WW558RXfMM-i)QV?X-|3ybQ}5rlIf;73VoiSd3W7iy3wZ7p^`Ky281O zn?`2Jqj_CDAyHcLYI+1-oS~jg$trQw+~_1f|J-e`XKuVTXqcwyDZbr>%qP3WmcBg^ zdE718LhHIx_>jyaKJp>rgX2^trUE?hQSzDqa75Ot2K{qIS>u4)n*+|W) z)v4%qoA8~SUNj^X43P^Mxu0&xT2PH}zY|=9=H6IMI|>O%rw_k4Uj555@r8?FJ<=kA z2yhRg%|T@mn%TXJl*(zeY5G&|=a@eayn}XC4E2Q{KP3cF9T$C3y z?QP)CqN4n2j>9* zsMUP{m>VxVi!RE)CfO+l7orEq1jE7|y)J&6I3$+h-l3Xn65IA^=a$ALB+T}%LeTvE zH&9Gj2Lv`BIBJ)#F{Fn_@H`fj(;|O<%stV+RlRHvCUN392?R*IGgJ19b~--rn0Yf6 zl;X%!-QSp=emuT9OtM(Zc`l!I zWoiU1A_cKsV@ieA#h99^%MaHjrXJZDEVo8dH%hMErth~*rWdqmO>zEPTsDEMj$YWnb1tp6Ca6X>1Uj8x zMEv^*$_x@0^b4IZerA*s0040XD7OLt4DDyG1$Tw_iEe7Y%TdB5{n4N=zUKd#<;E0a z-C&s;61esl7Z=B-MUQtcgHnD%w2_WDhx<03*=p48uqMUDb6)2avcYSAWglt3E1kDS z(b@^_`TX+&wbKYq^13{88GEpn66ej(-Q62q{5pI&Pjpx)x~*My<z7qO@S zon9gR(%f1?0xFPal?8i@ij;-#rf&x-paNK~uxCS(RT9dL#H5I z#q%1NqiZ!0;5fHq=>kPbA^Btl&~p)9N8BjYcmx!5RlYe2Mq9Z<$Cp0 z9k1#@QcW<%e5ul6f-V(4H=ZudVzmSK1|W|U*kYoF-7NzCB_$s)LJrAn+mms5#MKw1}_EnrLhoK{0(=ik4K`*Dd}oug&UtL`A2c zJp;zYpi^@h;Qz;yHyS5PZ6 zggvF1*PHS^$87kTCvD+Vb-U(0Blc@{kagrueVG5-((y@A`|G93^WjKRT*2Q9$gI&M z-Xi><8!k>9aW{M4bp7E?wanin@DN(};C3$ymty^fd-2ligEnVz5a zd#`s%9-ZNX=X+)Y*>6^Et0ImWw|lCX?t!EG3;7Zbp!odmDcDoP$lgjM$ZFdsKgD~{ z${Y)pc^2PXtew66aiyQ5*Nde4#ZtTa6&G%uWH|~XAO)fGs!*9#QXh@&WyBz&Sr%z9 zrx>VdcwV|rAfn2E#VY^F0!5N?Wv2#0(=H%z$wR-Bi=I{%(4FB|8zMVBZ0`u%t2jLN z#X49EMlK5X9;P=l8*#)}13muJgq`0m%D-xRn$=3(L=KB6rj69}4 z_D2qd!GQlN4ahOJku6HPV zoO-??l``sqLm|T*0^dBs8Fidku<*zHtCY2$Z%+Q_F{@YrqsqbfYBN{kS?6?c!n6?O z`=aETUh|7aF)g55TBe46@**yDSa~TlJAK$AubL*(h{s+tfBN1U)I0-Y3Wwfy+w;4_ zNAg~J>rvwDFPZvk<)1|;e-r-*NDU+jpT!bj8IFkzRCLuOX}lv}<9bn^FX-L*4x9ch zPN&bD&!vQ9f*8M)uIMOj0R<||xti&saLvHQUN!tO(wq@)L)`M^Mh5#&=JECWE``g& z#>i!u{7+-2p3-7MKq1ngsLLbuQ!K4JAzoX7J{#!7 z>-Tgf>j$#emWO-yD$W{;4CVi_ z@mS}#O}pPw!}9bU-kmEJwgDp$@Jz&*8Ab4wB}7o)Jo+!(fl=X{v(B;lZFh8Lsq0o)tsIgs)udQE>J2eEx9X{8*B7T|5!FQ{2X9_W4O zK}@ekQnP=a-(ZK)G(4eaY6{3=Gn+)v1v;UC%mn{CQi0}VLa93bfX(qrD8neYM{!mU z8tTR+2mkwz3vX|w}P8uf(9RAl*1R%FG@cl z3_7`O2GqqUYO~hQ1Gys$A-UB^c=+K?8UbsL-nPZ)TkA3On-3B`47Hdv@$U+BgyN5< zoRLqdUxvr=$Ww@%P#?5HMA@;5{|a2}t6UZUc;^G-E)=9BHoiorKY{r6IDrI9ZCeql z38~&WPYW&mWo-n!jd9M+UtO+qO(X<4#lr*3m1%oDoWm)cRSS_TAi^%~7x`;R1&1c~ zUaX;(bU7_O@bQ78yr#TM0w2A9S z6)F*%;`}u4{SFUYPD-)^d#Z){B$}b_cY-dV2Whorn9(44T`zrk3~`%0{96x^2(0!# zUH1yAo71kQ8kXJpI`rVMvrMW07N+G1FM$o*+x@S&yb`?gV)^QHZ|^z64bCxP?I8JQ zINeZ~HAnUtO!`pJW_6CN*&JAPQce^4KP3^hB$%K(cNx9vYNTx#ZM2`P7MLiK>awXm zkHi|+y$X9V4@g6hiU?RqybC^$F|8j@{!XBcpzy$cQHYY}#>xL8iR5pk0s!zU2+5bt zK|`i}3`MmE{^W240h!*g#ariFyLXrom9Jp01+ z#V}c6ELnr{yN4lMaS;7Y#@;mqFROJ$O${Q4q_9;k5`@Kj4I5_ zQl-*NZ|4b;J(d~q&t6iuh=yU%3$9#aC`^7Jom$K(%js{l2zV@*;+j;4VCi|&A3DPV zZqF10y}ib(`8)$TB28x9$EgVYmM?+d-#xyELOBYySHTeOglU(yjsXD}JU>Ox8kK+M z|Nir<000zS&s+dNXxE#q$Bo74vlHqBG0WoUru*M8##WjH@3uMr|CN;6C$Y90mb0B* z9lu9F0e`|k*r|VZc;Zm(n@yzXVjWqc<(FId z^D#F0>*eQIqc0~sGegi+1U{BF3i41LCPo0cWXqYPFXS!BrF!1*tX}$DQe!Cjt;EJ)zASH@}T72uq{|hDR@toS%;XM2ff_5t0P5os@fAQ-ICy=A7yUk>Bu zzX6CU?PAoc#MVnoUoGqnib|oZSalM?r&OVQY?Ol6FgujvLEuyurg+0eQ_=(k=G*3A z4Pv<rHg*CTHwluqO9@bHj;IMquTn_JJgTL(1dV^VD$*wXuP)^{ zBo&XESup+khnpLTltqT-k}^}FrcvuwSL zEc>I}bfFzwDwCClS7;&zopH%9*eZd0z&oj(%wo+`kc{cY!&kFL(Rl3^mwe~TQjh^N zg?i!giyCzEqY@~r6PR23@zaS{F}w~$a6?4ggs+atO;2yFx`sk07LsIPFA&gus8w%v zwVo!;nZ3Q^cYhXU4^h348U2a-sI*4Jvh_hcf4%j98uM3KBEL}eS9PsGSaoIj{QD4+ zU3{W`u3%6olSk8Zmmg03#pYE#wx} zq#p$JnK|}g!Hf(cuJNWZXq|XAaNGs8ET8Y68ZNdOB%-&LduMGa81}p0@*jy8GFu z*&(j1<2w5@dEC5?KIaI{Yj6$0cTbM^FH-ToHCsGLNwhOC4qpFKM5%M_nOQQR8uV}o z1haM@zvRr*hFO7wK$D zt$6`+agm)-TkYjLeI6FYS0-Dyy((E49XFsU+}C-FtA{bFJmbW;!5WnS#}gk~857_K zSznYYM~Eb-*H+bis2k84Ax_HN$U5!k@9`wk`g`SEZp1g%v+N2n{l*u`;^oE@TKt=e zWNyBKR(&;haAkSv?C$|&tE3deY@Uz^W|x-PjsV=+wLc*!>Wz|g^H|0+n}BUhRWhn! z47d%_KG%d{oSZZwkML_Gvq4~_SGt6wB@1%c==!T>zfFR9-%$s&s$vo?cVmO~ur^NI zNoSEVjw`9KoQ@c&$=8CYXzVi8ro`28tW^o~?kD%6++t9EwIT6YT0i6pwPe&SjclUg ztY_?iR%BGs9bX%QZ0D12qhl;N=T)XxlEhgJLzXex=YR&nkG=v4Ei#FL4SQ@bDfAO? zW{$vOIO$XMsd-|+DvT&dSffslfVAA>x_;*!C${a!K?PZIHTR!=s)bW>h=o}y0H5ua zWmD287;csxGs5FhH?sM}YU4bX@&X5wj>hxfR7KdN@9B&ojtb<#KiL2+QU3ND++9qu zrDBr@h(obQlW(pHfN5FT)(eyEd)`NvDoitV9tXEY(Ah`!(NFXMaYyN$Fhru z;W(6ep@fEMq*;;OxYg^QJ7D?h`hthHVaz3ah-pSkRcjgM!Ab0y^sF;4csm|Sg6+j~ zGg-{AVvsWDzSj2JCMcOzslBNv#7_&}<~|g4ff35$$2Cz|OpncEMKI<(y1zc7s4X@b z&JSft?juoA=aKXG5#mL=!?iYs*q zF0ux})@Y<+uPG%`l;&NdhIC?L3m*7e5GA@F{OfI_D7bEN-BN{58W=N7kze~XVL!E{ z34frF>ez84gpt9#faGQg&WDh_)E^ti1+7C0fCkrV^a+Z|->+)7-*DmBzZ}(&C)BfL z9Fhl$MmwRH-u~CN9F&7{3Q)3zw}~v{eo>hkypheC^R?5A*nX&-(|Pnb zyVLk0`-4P2IP8L9ThG6Iwz~3hGlWqt!HIuAKv9{ZhD&S@@3v!C9{@t~$EcM$5w$8R zFKZj)LgJWnW(yCbAH$UhZ(ksKI@toEu`LuI(OBMH92{sXpZv>W;DP|vn zQ>|9VUFR2`DjfB0gd;-kteld|np4(?RvJeSkU+~cE7QUsb1lmb2UWJJe-EuNiLi&I zkbI9V6Q!|knbu^Klw5KkT7k|}{o-2en1)92lI)c&zR-prqm6n!r1yU=&yP%lL~Yp2{mAA+k%b9Kl zWc>j6EjO$iQeQ!_@(frI?+S|OR_~t(6%Q(LOP`1yR_}UHZTeM$AQ=%=lTxx}qrIz)sOCkt>sP2qmPxLn^ zOo|#2`u0gJkbT#B@gkwt507~>uvW_sDNENYVf8TIr7WDq!5v-)ueiEeujVeqq;f zq9ySE3y=eygnvakx(9S=cPLksyGD6*a3AlVOLmsTuil*#KJh1^ zJ@TNp_NXJkB=^N;g{WKc4{p;L@B-2Eti#FM0DXyddhB?WqL1y72bH7&&>QhcqAu&d z-#A5Ch^aD%)Q)jrNc3&)IQIY5?EkCT|5vmBf4|cHSF`{BpxJjK{*=yX8r#bYy;--` z_=G$#?YZE*34rIw=va}WK+l8LMe*GYX8MXTe=_ARVun@9BC}lcT@`a&V{n;#HF`Cb zWAFUzFceJScrV*OFH&Ym63=h@kgfS9oxHy1GE8d`$O6Yti10LH*0^UQCf!Muz?S66 zQYm;EY+z}mYfm`7w>YHH`CI*I9f&l*%9=~}V_3c3$hNfPg!$F#b5u1}8#4MPpYuJs zgmY^-ILYtW@hgt<-T5>P_r564R5;0IJo7t

`N&pCus_V5E!kSa#%8$`^O^&$RvR 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

icXuwu=v5s?hy~sST=d_Jys)P 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

pT<^G>%QP;_ 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

=!H%*|>oLQ&LJ{>(DZE@y=udK>uV3yI*vF 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 -Gu4oHvLj}&7s8ufz#bS^QwAsU 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 y=HYOdETPY*KSnmCoOUkci%WpDKzVJL+U`DVN0 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�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

J`e-#tW-_H^h2-& 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

RU{FMt5Y8t#Pqr8uehRs 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�dgGTh2xW?tIuFFtfTys3$ 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 z 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%0DCHzS8OP}8lB50Qde$owFLU5xHZ!d_1>Rlf5_(D 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 literal 0 HcmV?d00001 diff --git a/frontend/src/assets/nam/design/bodies/amp-head-body-v4.webp b/frontend/src/assets/nam/design/bodies/amp-head-body-v4.webp new file mode 100644 index 0000000000000000000000000000000000000000..92fcc0ab8efe16e94b4e4784256c9993d7ad9d41 GIT binary patch literal 389974 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

+?@xONONtuP-0}!b|-OZJvbMw9TGuF8tLyp$^ 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�{Xnsb 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

!HV&XDYKTx@vFmrbA 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 literal 0 HcmV?d00001 diff --git a/frontend/src/assets/nam/design/bodies/amp-head-body-v5.webp b/frontend/src/assets/nam/design/bodies/amp-head-body-v5.webp new file mode 100644 index 0000000000000000000000000000000000000000..7d6a300aa8f0fa9b95cce92638a316213b070795 GIT binary patch literal 1327822 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�z(EQ9!2pqjG%-I2>ZP|BxN#-jx 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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

Fpc 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 z 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

k9p?V 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%0Dbmb#Dv1xSFaItMjoD+TI6?ll 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 z�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

)FGF>T@I-Vl4oW*fO^z-0P+-H@|d_ z0!i>5oJugDMx>RK?$rHgSv_WyGg(4Oh&@UyUS;eM5ju1B=wz%jF0CR9>zSvj|K-k$ z=*?HId}1ML;H#7D12)Uws=on`=&mEi_A6zE>hG4j=}jvG4(PH9m>)?FBhrxIOYbjlV&VUHO zy&^9xzE#gxP(V>v6-1E&k$Tkx5$S?Q1l7H%^Cu|9l4TL^a;1Z4jB+c{)u5^%EjZgV zA?64hnqm+5UF8aZ&n;Mx1OV(yqWX&{rm1G4t?#Nbe_&~6P+0~)uP2UX2!P74e7N@ zJx3V*R#^a=de?4Y=)mL{?0BnJx|JnL7Hj!;Y8xAG=fcOs(&at0xEKs&K(lm2c}+Kc zpIcqp^31mIG1^u`o~5|QFKHAYY0Oy>{h6aFRJF}B+0VoC#AmhpF6H$srNb(82M=u* z4u6GNE0&c*3f^MhN4T0MFUdWhQ!ZLo2|-f;AUGx%BeVrh{=UP&@;k>xf}X!5zU;-i z_9uBZ?TS0?;Z~H)pk-e*bA9ETOb)bR$i#XbwsNVp=B9VyFZX55-Lb3IuRFTEH|`Y_ z7#?Caoi+}RC+rk*!xODCle?`NP1NJ!bhS zXYao5nBuF5IRaA+-yrnzoqT!y5_s<7-21#GA-v_q!;J$n_B?L!5|`ZfBVOxeaoo}x zm-daT_1)ob{CNh?R+BmAC2rvl(IFv4%p|Z=;Dyr)1tw4!DL!%N`=sIIV<(2>;dVeM2HotC9(mLHB|qQF zxl=B9e6RY_=LHQv_gaq>Dbrw79Pp|J0yYHRv<9Or;X_8j1HNHv^b;L=&S5>XC#*Y; zUL3}-FZb1Bwd=Io6sueYHnykqln){hWr>seZ~J{>$|uKJp8Usj=cXcG_Lz!HWkJ@y zoxxrPgwmF}#q3<`gqWXYHmP0hRvm4DrG{sj9=?M8nz#Kj|EP(_OWud})C4YJ zQx}LMyfwN*S8Y>G9s_uQGw2lfK&>+iuOczoWs7W{F;4t~x1k!D1cPO>6qY7amR&-> z_*TFc_{o>EwEYbkZtrLcm;<=2Y;i=zlu0<}5)crvcwgW=BfoV4uhhwAO=g64na=XBL{mY!+!0Kw4J6RswW%`sp)k%yM0*DJ{B zDAEFK37_&)K7O=)VRBpuFHe{#902n)zq)x(Ar%B(k#>T$>6@bUo&jWXXSmB#jUL=S zFLGwwsboN-vl=KO4K16uW>w$2`o-rBFLruz-bdcy1WFLC*PUi1^CM8$B_`H08l(tL zl2nD*0)SzTQc)y`(Y>auctd7vHZ(z`^AJfXm^JilD^-;xV-Oj>*7 zdUL14X3V0@kR#$=Cw-KCvxjSbL*`&07Xe^{+-$vjxY%MRATOsUk`p>pp-a8PsW5of zqx0|FYGe4>|JDf${-|uPvP(nG>;qH*i%6liOErKeZPT4!XWV6yXpQM9#8w7VgjmEy zq-dmXo*a<(;4PMZ=+!saQ%`#OE#Q2x&Na(>_xEAYnE|K<1Q=q>!^b&ib=KB1Mc~pO zLRI@2SL*=`OZn_S@A>e}srgvC99^*U<`0leh`qxKGH*2I;9}-T1 zrv|w8-2RtETG*vPOU64-)NXvNZBVpYMGwTA<$g^(bxN}oG~7}oR38Jl)c6o|P+IBw zQ58d9r?95U~)f^rGKBmgd*oiZ|ZNYqP+ir~>RlcCy zrPz|Bn$~LA>?q8+e+;Oq*AhU@saxl$k>x*Dx!Lm9nsC?U*2JRk(qDcQJhZ*-#e!ez zJn2$h)^5RxVHyz_cu$h^Om&wTEbaMUi#RYkhUXTp59`mwd_DVnWB z{HG_Q7ut_vgRpYBg}c2sGIC$JB9-Gdw8E)Essx${>8cX#z+fatn>i+(rdn@!g=auu}G!s z5d}FNC#9%fICbJxtR)FGs5>_U%h`%hZy%`fO>5iq96a0Y8(sqaV@z>%kDHwx@#V+7 zSQ(Ja?GhHp-W6jj)-5uJSj41oo;?PypQm;BLvZ?9)EX76ae`1k=yzpJW)9 z?$itS3T%AFab1db=Yv)chtkAtp4T!{*2q?^ea&^#Uv{h_@%Dm-uYB@Va>gFxiUl6? zo!d8Kqd(`np^M9}Gupu5dcwg`jl6kpCWfmYTGqd&;MiDmu>87n*2%{%BirQf^(@Gx zKz#z|o%~t3s_>PbRD&C*~TL;Q66&KW}D|3X4A_~18H_{U~Eyp87oj3mkRc5#c<35t7WYNB1>T2Xd zji$C`5!8kqgMzP|cG2=4gN+LUsOPCY>jE%&#nVV~(ersqLx=r1hxI1z^krfI*{eD1|xK zW0M6H_|$^Z+V(kxY9bH6K0My2wM#3QeC2!9@R!L|wLkE7fDYjB@;_2}dYt+U_is^l z6Gup@Vw&Xqr8wO3H(=Z3H9(|5gUnsih^ts^*BS@qpRR zH12v|8s9B$-F5o1YlQU9^O%XOc0%REwY4dOz>)x$g@Q3=dZoLsm5XIKcL_}_+KRji zRpbGh5(w<;w`sK&>-<99C%t&q@jM{|#?l}&GW8=~+%x)9G7i58xcyn;8E|Fbx&>U? z*xHzrQEB!wY~CmSdHm4No^jX%34M1m24Mp-5?sVxP&>g|q=2U0-K?ujs(AOf_xio9 zk-JoGH9zye9^O-vfnK1PdHX%0yEa*~gtq-d(_O6EydG>wK|@=PNc(YbWj>Xwa~Hr2 z`o}y~#a46AwR82V2DIT8*Vn0T5ua4uUwS&FH|;vhyK?=^ zecKzgAyZ+1NC$hH#rV``!*Z9_gwr4^r6-QqQ4IEs($ILj&8d3Q$fzP|6FulYw&PP> zEGQiy5fTir4{K$UbX=VpG`#Iu{TQk0R$*6vC-3M@s76p37-Mw&tyQzCdd6QeL5)du zv(n@Mk-?3JnU>8q=CvMOFfjRWSFWeit@0mQ!cm8vRy&KS_pXjacPYJhA#7SZ_ue-H zTIyb`=V+o)_0qL{xAh)?4odTA@*x#e_Ac)Yb3x`{Fv9K>jGU>K{I8yA%pf-7n!KB1 zjB$vQf5smZP{3D(ts4(bZQB@?@S*JDqYXJ!Bvhb#*63(uYpyOhkY1@N#}$%$PZ8^`%b-OZo+j`Ss0#Lf7VqMTsvUyTJf|gJ%sR-l z9Eb+h$6o(+^A?9M?b$gxr4KuDO_U}-O{_C`FSV*oeKW`bfzZy`D)akeX0r{4($-O9 zdXCC9MW(vRx-RHIp34$T@>-wcb)17YI&yhjT_EQtk#JO z0s{y=HUJi8W}vneqk{5~s9mHl7B~P7H9X3*tTe!^U2UkfYZ5DAsvgE+(yN0nK3q4g?*e3xOd*Up%2DAI zucmZgai@F7KAHRS9bSwr_@Q2YufUxe@L75RsXX@S=8e^`k%QHE#ni0)wrI08aJ3D}niDo*K}t&iOh2*^nSicEny!LP=;D(0ly`-dpT5oWo_9Y0f7 z5D=8n=EkCXlffI}(MLvLC|ZH|l!(64ik@+ltab}JsC)~Q&ZOH>VMU_9c>ZJNY+!d8 zPv4N8kTji^+5-;&a}`%JUEqh$oK)xn011GNH9i3dAXt*?giV2JTDlRJY8nxQ`m<`5 z{2a-G(o*d0K*|vAdj6c^^G}?3#Duhxx(u{6_@j98Vi7w_oGnOd&mOuC)>+$?Y)miJ z$V=>?cFxG^h4ao^e4v2?4#d`juu5Gi*j^%mM<1mrS~+tvSF0)LC|A}wsI)ac*!K6` zcksHM7r@fx?ia?T!DETqEd~dk8LxgRwuHhiKbx8m-L-9YgIm~qb`%(b=3p(y)=vJH z-RimV1ES*5ONAXvhYg!x>f+{W$Ezq^xG1)3|L_H=Jh(e5%Us#ZfJ*C=vDXC=i(k>@ z>dr^hM+aEN?U%A1=PG3%rMykR0Ku$Te6viXrviT~(SnST4rU-?)1FZ+H!=MVHp zj!Ho#%&8`a4%HNwI-V0Rl=abp+a0mcWwzJ$)Q(#soE%%rmMcbJN6W6%$8OlryShdl zy?CT-Kwh7Zvb=W$lpWwLaaf`|dde~4RtGhnC0C$UjZ;-I;s6xLVw>2wa!hO%1Y z5J3=*@(8kJ1)izNcfXH+Jn;D~I2B)}QjtKAKItWiEhrk}+2s^#DFDLQ1XYc?bk=P5 zve>}Dl9^W*P}bf?LEo6Gc8P(ybuxPE3@EkESvwlS?(q9gN};!)H&4C&)C}hFrH631og+?-Ft^3`gX?1^n>Uuo_Ef@ON zpX$D9^sGyuws%==S$p#U8JQTijJ@aB+-zUtl?=N*1V_W6!}@cpxZoiUhUG$?r$U`Pak%bh={2JezH)@%;*`5{U!%Pcp4`lzs*4bxMaYsYeQ4JRI2UO17#JYATYN zFOYNO41L}x0AL$BzP{Tnb=;fOs1{iAM645U`eZ3R!3=QUXD z3#wtQ)v8>pxtRw#;f9%sPqPOC0mqP;xRNdwBM->J;GCW7>+ITq-5nO2CxBo{#k>H>N;+085d{FGoBYZNe6R*h6Nj)} zf<|q<*%Pt0)$yqZ^M!9F8+dw6(KrH9DOI%Wh;&+n%cbT*wRp(IPxCl9`6=bgmQSa+ z_I3vO#ZtSn5Gzoue7Iy|A8NOUU=OKc5|l0r#1{aOH{l&WwK<#x&bH8hW{1RbZu?>{ z)bEaJrkaIIvBALUVQI@vx?i>7i|!|s*HeO!-Af7?81n|kB z<_yoMr41Wb3nze>0^$UZ++tDulDR4IL~c3Ti4V>IWxtCvcr(kI;FOSNtkuA z>k`Rxl=RSUc`^ys7hfdTFb7prp6^mWxBRH#-!S@NAS%2lIq4buCTWXw4$#j)ERtGT zgf)Eq#~rqQO5)r^yrG^LbaPQbJSv4!a0uK=Hq0jq786&zfzgsxkWs($lvPHEBLH{C zg>^19@8SnlN4B~f;so41HP^d%iAf@zQ@otI7EW3^tQCg9hF7{+QFR~#hp!bM`t1uK zA>n{@KmZn|0Q&-kB3UqMmXmH#=6f8`TVVkcIIUR}pQj?NS1KJ$uVetthrH@3o$-Ic#<>#xE)deNDBM_IOUbWXPdj~ zJ$lPI+T;-_%~Qv|301ZoU}99}2xDwyz;?hnbRE;{i-}>aOD#Ew1s0m_HtJ%>YC~Qy z)QOtYvJ-+PTDo_sGCdl)MSSh1I{SvT`LJ|eL#$BiQR1w11OENeg0+NPEX=s=(Ai~~ zC4Y}O;$@USh(?u6Lx*ev+Za#D%t7@?3CmV?|K7@Wq3UR6N$J6optEJA+`+BZsJ<*4 zKCJJI5u6Ng8fs1DY+)b36gHSZX^==%jSLRy34nsu#g!wNj?Jmb+W}^^1#4U(x7=%2 z5%{P?21uq>%HPLSjRFi@tFgxp<=-L2Rj4swhi4rlO(*~Wdp6)VD?I>X8lwPa<}voM zS3#DAT4!eJwYxSNPu+ZYBYaP;5JwdswFi>0kv(KFMmeNxeMqh7eOjmGTWC)}wR+Bq zMt4eAw7e5Z-EOcUAQc0U&Q{}m^2OTS1|`Ibep)@}0=C8O0S&=8JEf-hOd{m=> zE9;Tk5D6q#r-C4bCseV>wSk);q=w4CC_tS7MB-DPTQ0aBzHv>CFg3X7iuR+YHvx2J zjfY>^DR*fEIsl}D>SufUlhQq9o*@QF zI8275<#y{dVb&)m&+HAH0PmnRWE|zyL_EOYVyyg#a;F}&1ugqnA321*Z1UT)e&Jq7 zuV-Cd-^^8=`4n!bl%R#fexJ*)s#)dwD@GW`04QxOZMf1=vmU)-_zIEs=Vxi5wq(9J z%vb(?F=1GunPO|n!J4)(8PLN+Lcda4!5(VmJ||tzSm;~3MyYs0Ui<5wsJObu+{qMh zM^jKh&_PrgsVp?4v;bomG3WEOk{C-QYn-#7Kh4IWQ6Njf@};1yGCc$fgQg^_L^go{ zH0;j`N}NOGoNVM;*w04dEk?Ln7(ojAH-l6is&Wj{DwR1~D7$pEawebg)j3+LF8`vgG-idZeRwC#Oe`D*fPmQ2;;b@2*F{Es z74{GWh6uMMrveCfF@59X-?4Uo>|LGGossUzc=shr`?3SPARh%R@*E5bp%yDqEim#; z2r$;7k<(u8MBMbn26WBqDpDtC#fl{>cucPG#T$I3m7#z?Y~8LaX3?RxY-oIDay7*{ zAz1Ep_hiJ9gaD z283EkqP{nJ>~lub)3V^;Wy2dQJs|Q|j{7wYs!PH9*I>4kiu&%JOF1zj0A%W;jtFw|&cyS1l@y+&$h7o1bIUBy z!#Xc@9vSsD47cdCbpkQ>qs9tufsg7L1ncYs*vu?aALj^#?TYxeMy|%v8J({254TVr zc5}~w!dD-W3nwoj5+KqGJDQBA-ei z?@X&>6aaU{=xRR*erj?PPErt9h{j4^yhwEhv#M09@=$h@~+&@k=Ggn^}wXqeM}>b+9I} zPePX4rHM=Cc*V)%*IughLTYlMWaW2x4{eh#E!C>t>dcLZ#TQ1Re~L5ndzf~DUPXiW zmFLb4e-se`(3%he0=>9h)9OS|!$fRg)#b<8hfxN}0WjPz@$-5UF_0eyqJ;Jz`^xRu z7k(m%`z>M#6#4X=QQ0c)%BriZ%nJ4nV5Y<@v`>OXM@eA^Sk*sppm`_l(mK(g9zX?M zrO>9@ca#X7z>3N>O^LsF-qV0x?QKuSI2HStLt_b5FIeZo?w!G!XLWK)qchdgI)&qu zcv}$MhZPi{^ygj08#bNGxfnQs*ixf}N*cwsrQ1Eu{J`yCW}qqnDik+J14h__Q^ug% z>c{!gjO$?})7%Z!SI7(p2)d@z$9Q-R;5BCZ%6qUE_1Z!duFK9c}k-!0A zmsu;NTfJ(Y*@GXMfgBL3JLpI-4ARytyJnlNVIV|)(Ml^F0DCo7qpSHf9g;VnMIhH| z)$EA131lQ&IgKbM$DM&zp8C1gMW{OMl2$Otx))3$sBg5=v=9#V#fwe_dWh={LweeP z`q_rigzDHk{vES1^^2C%=nbrKsCOoi_XUupjk2|~!;8RhI8Y-p*O!w~LE-+ZIP!}A@Ms)y$mYQL!#L6hx z9ClY{SJPa>07FEo3=u7e^|`wNwP4PIg%RgC0De+KuR_aWtXyznp`5ysQHaeI*A27E z^)CRxmb)8~?(q^)F~J))S|?f^4l?JVz7pq>B0x~I+~`}mWYM6P3bIP#v%0UU53K}d z7B?CI42_uE_Z_p@^vnc)wnIH2n65AOSt618LZB!l8rZAvLW~+NDiD>yL23rFqHzZw zvo^~Y@BCH!W_(-IZGa#2cuwkn< z>g39Zk6NqCn^kFATu}@Z31q0L2h4_gMYeEgkSvrvb#!To5TMVOb2S|`0Kk|)$VLM5 zB;`Q}sS1s$p1x|0gsk-oB4my0t|)KOcgg+S)7Va3V!qO^tdL{KeF?DL3AMFhJ*$u;CUfP_5aDhr`eHKDjh!0rVASSu?9&Tm`#WMSJ)M9E+DF9fIgdvH?ng;e%%6)UkD`jo&j3`O$aaDV*OiwvRbkD~SPW z$XW{APIrM$U@VC0r?^;6hio2}d}BZ7KypiKA$tsX!NAG}7*jZ_s=}n8bn=F-KyE!C z2h!C&02#nao@QqBso5=WFq^EhYI$HPL)safolpdj?*_Z~9~6+9nJWV@831?hOku-| zZO}JKZsqA{^OT+sG9?3Te{d5=6f>z{JA8P5^p==32@p_*G%!^z#$TCWi}Q5G@6Ypm zjWcnFiYqhSkE}|%-FE>B=4V}%yX8V*K!g*<7^c-M%^9*y0GO+d ze2gbUgbUlK+MA+F&7K`DKUWLsB#`?lxa1jVxfXDicRH%#u)Pw!aw>w zg&UFF0kC}mC#ra`6xqQip|vrWs1d}NBm4SyX=8?{O$nk&Ks~k zVxY@v?)aE-n3CWGfa*NrCA*M1gYx!{w-o9dfx!oYc&B#YsQ~KCi{!j@`){#u;Thls z7jepN+L~Bz@a846U?XaD}rRf6C$Hh@0B}cbNn8`xuV-A3)T!-X@huAL>3T<+(A(99#W#> zJl!-piUr;v$T9W_0jd&2o_t4HM`aR+0BNnPh%8j&Jt%$BBMLa3R`Xy66QYR^i4k6B zUen#-^oUc!oi>DFw$6tQqeMam@&;C^b}p7xE@+S#92k{6a;ve9vD0p>yRaL!rbag( z-C%^i)aH+CE5XHWNqlrB6L43Xhi|e6$VGJ@UT#VMw?l$J-%@a4` z^_mNzqW>`eaH^dGu%jqD)Oa!l)ZtZla zLM!S0ko(u)K5q6@s=x9RM^(qy24Mp*GNMgqk!n{!LHe^PM-&#%vD;C1hQg|`mC8xL zM!*6H)wAkuDZ&ngkUSDIu(al3*^E)@p^0yf;V(48DIjmCc}Q}SS_hNL0x*S^QsL@h zXsqWEWu_K@WS&DIHFiY*DPX8Xlx4}m)qaopdifv3ta?=5%I8 z-alj?VNcI}2sd!6w<+L|gaFK??gRj2-nI)LmD0g9h(dnI6bf#%%o8?J3$EY2za=lw z%d3M-hV%&lEDop8 z+yI0;eBi0sjrtu-G_ILepy{d^hJy;wnaDeVau+y3RKxdA${&4-w7_*C5u9fRkH#@k zsCrIWn#kOevScA69hlrW@-cZb8VwX>W|q-CJuvs5%~&s4U}L8P5C}GeTMYz2^R-h7 z2W7p$(NhZs&7c%2qf@@+4%2Qw>L*e41aje9dKrLd&4TeRm$|ReI!I1@lL9BWGHlWO z;06iY);6fjk^p$3`gB-FKdaH0z?*;u;6*}`Qu)b97 z0q~(b{EbHWRQH+s1Gg-xCa|r|5mea*4c=4Bt5r91TG^&o*LDQWiHiXUGb(OFon&>g zDLm~ds6tWwNgWl%IR;TNceq`?QLa{2=%#{7Ct9kv2EZ8Pg@H!HX%fSe<0CM5BvXrl z3P#Kq)&-hP_mXS`0J2g^^?XLQ(Ar#HjUcLn&E*Vy5D=_p^CO}8s21=3{%#^m6pO=0 z9bP*a6EEvR%M8Hir@DTr@zim+)TQ7c9cKcZWJ{3fn%4dw1i`noF9}Y0! zyT+IhIO1jXBB;@zfC?p}!0k$rTs+9}KFd}9y_cv@KTr}wO{!`ovqMcgxU?Fwn^_ZF zO7mo)hBlD{h0Q@w$_dI5q@#obYt1FPeq<;kVeH+#S;VqIrSk}kr(}$$7n%F>g0e8r zZXxm%@z?^=X+5%M3uOj3a)Jm0liQGsP8CS3qP%ftq25ByTtE!Oh)JTu3)xf>pN{k# zK9WJqiG!EG08lX<#iXhh7Q~C6Qi#mHLehh_ z5F_jafg0UES{c!UAGJL(ORf#RX&#VBE@!D=@zE zsACua>k>mPPjziM{XW+`Z>RPJcG2E(!UchQZ$Go9s1|sAf1$wZ)h;e%X7_F^+`iWb3fK zHQ;WL;I@9h%4_mR-2#|=((WOtx z-1E3h6M3_9k(`u6{ik!qZwxsnRoZf=ICR{O6LU0dWm>hZ!;l^-i_4HLtZf|?q47p^ zw{;6it~qRWNd$8|vVw7U1POqj8+b}P{s|8b>@*FB=eY}~&7<8ILh`xoejZ`~z!q@b zRTYuMQ2!{0;i5tAxXdIaNjRu=!x(j2 ztD`3N;C*J#wND2?xFY`C;JQ0-D{@_r&;P>UrVj1rOc@iy5z~gGS!tt_>1v57Agk20 zB$~sDt*o3>Dx4rn!abp6PtKl^%}0jE(pIZr%qbn7)SV~+QLG_Aocc89>G*N zt;tCeD83?+vT_*A%&c9@l2Qon;_lAW5b?Y==MS8u{`8YS^Lm%IJKS27(iTa?K!MfC zmpO+zcXgqs3yFW`uFv1R^8sMIdVxAGI4H4yTE?vAoS_u;#ElSdv`U&0Gz0?qK_i2Y zzT%2DXTgz$(UC*03KH@%-hP-1>1+r|$nTzxsdDc~PN(RJpJntMQEZz_hx(`T5grdAK%WO%`0cwbm%1k38*}BD~8tqa5lmXx(Mr(?hNd%{s^k0G2 z8jDp4j*uHtgU#jCgLF|wR*D3U8=pR-vwwnHJ*6Y)+sgt|p3a@HmnW&!_uu;Hbn>flb>b-alGtWPMCbc5AC-DEchB0xotIlXAkW5`n72A))u{Re0b^tO1A8c*G+>v`46WX1y zy++U#ID%gRU+u$Q{7WZrl1ZKm)D%~9NQJAWn8`f5`hoo`BxYb>emn_&nd3cVlY9IY zMa0oR=sIE`fyQ|^FynpgQqQzthR#hOCXv)S2Zwy;<&9508$bJK@{ldwiJ-zZS2exh zkW|gu69A6@a1R^Tv|NRQXkx(8@*MznnPHN$6*89{RLvOU3Rwo)@XTq3cr*6I#s65*uTiMlP=P%YSPV$ z&AWhRt7Ufh?UEA>4zMlsV5tUXcjJNYB@mJo7cri!!dG8IGXTUuwk&$0P8wAB`4O)G zY`gIOxGkj(t(+$&jzcgFUdUR16SfwTtMCbAk~u`i-mDh^Q1^!r?*jmB`8h47DIB0;f{?)N z)G^a)H9Ai)sQhr3BI^hgJ@p!54lX}sVD1elUp9dN_>=4^z!*O*0CzkI0Kq-tiSHQh z=Rg(oL-)nU%Ov&F%RHuc`u(#TPCo$CFbg9mcd8+V-&abus`5XTGMtmc?zxz*ac(-Bq4g0?PZ`O&?Dx|E80Kft@Ijr{X(WXkB zQHm=^kFs|NIf^b=bxmh^PfUOy#9P?jc6=(>C~683CBYb%-44Ivr;y4G@Hh!@&O;X0 z>8xHffF!FY*=7pl3Fo5NcyL&?WCLKTExK=DiaM1z#X3CRdYGd>+hpS)GLpxFrGUGX zDjShU*&zoO6qA>vJK%Nd0_(S>FQdJLtf6cV2Fgc`w&gs5u-;6AInI-{;|>BSd;Rsc ztzckKLjVxYm(AmaE1;&4YKGha0Mj83iMA=)tdvZkEqO^jYbF>v!xoy2m|C3KXU*|e zc$Gfo1ulaj&eDfdcV)rCWQk{91_t5q;vJeuvlUip4cR?&z3>R?&+DZ!$~+vrAde)L z!>+=`0?Ft$iwr7#ZJkM8+18;@%>aZ5@~dFgS_OhX(Ha+~NcICRMspV1?E360PcaQX zm048urIv_TwSEi61b(iFVyjoAVqyf@U`5eG^O0^j(2C=&i8A2p2*p|-{;AS)%U~a| zv-{h7C(+e0q--QF@8|8hoC`^h+w>)vDFOgPA&AEmAngg!dwxo^T(N~-sC7sJ8Fm0= zpdsizEkjD^|1#KiZhP~xUh~d@p0*;F#T5gejp10WK`MaRwLztVB7D=NOh zBdrjS2p4?`arC^yoE&iH*23(F)1@FGy?~?y#bK9h(>#O&z|`SR-p^Ptx7m$0;LIrH zi1o&D#ZmJo&HpNuZJlo%J1onj%og7EZzg7EqvhO@82So`TapIDSuzMGWnq!$(r-)e zhK$RGngWiepHUG)9A!o3nvF?l(A#L4Yrr$p5=O>Ohg@&HpK;MxUGQS%Yize5nhy`Pc0 zY+W4wBkox2cCFK&<>C()-3haLvD z{ZXT%>2Y)xPU)VU+=VZDOk2k!?vClO6ZHMuc;wtF;C5BXI(hSt=ugp(mW=~tl|#Z4 z836M7Uqdj5u>f{Zud$2I;}X6(PO(PCCG0+Tb33)Pv)R;Hp9Xe1JZ*u~>Yi-D-D$90TOPTOnJp;69bKC}7LS*jsDV-|aC z5A((d=go)Mnzk{8bb-SMI_kp@i7L-rR2@C?)bCu}9e4C>o6kJh)EjTTx2J~}Kj3-# z^W*NE^Vlcv0uYqXt)4RQ;#YOlMfdD@p|ls-Q$m6;kd|SinIj4(2R7ygIwPmM2G2O# zcN(&(=*%{qXf$fIeS0gJ_ZeAtwajPt8r(-@UeK>KFbd9@CdX9bEehVT@?of-JItB zirn*EzN6&%F0l_Hk_rexD-}Mh-2?oI?u&2iMc#~S7OFRaL+&A=ox|bG1DAF*M=P{$ zvCkGTGG~XuF8QD5BcE;Xhui+eg-#bgxO>!`xT$8;OVp+)?AM%^IWK+a3&UfZQFrFd znVkRBId(B~%SEph8CI)Ei&&VrdN$6omI83a%wiSo=j4~X&GMxHw$SQigf$TO#-;V| zXG5toBPTa@4jr7y42*)&>Ic^9TMhTD7%47(^Xhk-!{yHcm%7ZlWNotcgtDbKlUE;+ zsHAs`&Y6Rc`;j&rIMQ(vF`>D3w@)Mo?GIb-GWoPZT8Advtzq%=ZP6NbIl7_IUB|Jf}*vyf8kj+6c^J=wX8Bz?^|6WI6|sPUK-DGJJCY9sp?k`#(O=9oqL8wZpMzS!5%U;#xv6RNjihJ*(+W}xhv@lC>MQ40fkyKSN-p^Aq3BIbTqKd`w zJwB}8@C_pvvCS=CR`VBogM7Bg@X!|m|8^F(NR=#06Zr{ZWY8+C9JsgwK~GlW);-RSE0? zP)>qC*&5pu-%d=yBi9paVJseJHjzq5KEcnN=2+_oo=Hri&YDaN zlvw~oipIIq;k!bpSZ(uOhcun%og&SVF+$KGL*tW=TwkE^MTKRE~`15NQFCR2SPAT5-1IZKt{M_-Lr4%4A z(OOmrRYk4mD;ErZ{hT2-U6M?gb^Os(z-DjWv zLD}sJrZ|&@>^2z%LSknm#%;O{`7g9m_e-FteqbG@PypMfaR+_Sk=iU8e931J0)I==v$KOpGQuR!paJt*x{)7M{|UizU!a)Ft zTh*^!dTQ`Vg)Ul|>h4ICOv#Irxd{QC@Kpy8#&q>rYCn=Sb3PyDlMpnV%Hyh#z2a?p zSTe7ixwZ}KUl8bhoagAxLBs!T`4Sb+b$_B?{XceYefclh7heyI;r{d_)4YvOYkzg1 z@YM%irVK*k>5XD(6sBPGR`>c?IA?HN7|$`hH6RR3x`@YukU)}+OzmRfR&_6b3q>wp z_$-5M=tJxfJYw|*VMOr;~9Uev9;LjJ9M*DUflffbxh(d7H2P~)GmYTRypHBx2n{d3RTTBp4=PTj7*@} ziWvU{0qeuuifhpoBAC-C$t0Y+JPX?2<02T4hWc6`ZRylO&urE?NAPSrI_C?Xg=S|F zS?oHw^DYU~;|C*e3g(!L&%D*dmc`$35MNo^MSTRY@j{Ds$3NRb;QAI?rc<*AQHuhj1vE&Y#v=XuqqCSd8f;U&Lo^|sKu+F`bJg@R(BMcRne+I<%{?!O2ka*bOb_DP74~L zV|3_rJf~TG{-1s&A{sQ7`BV|v{n;r+VbdAGqQ*b!Tt+O&E{n)Kyy_^Ek$JCt+z3e< zWTVmrA&bZE1bX;^7F{s9FUIxS$li%^qDFhgr^5f)B~weRQ};?d{la}(ob;9qjD_i8 z2;ayqFaj4+onci@=wR!r3Of%n;0`>Z5E%fUp@;WN_e{IT%y%nae&vlkr`< zh2?(!LF;Nl1R&GeETzyT7bSDO&l9CS>1Gx2DIZqu>D~_mrwM?}03e9p18n`{hKRPq zn^lxGN({r0Isn>&)W@GXiXRaCtF9h09NNbunq!D;6o6UusBNl!FiHZ|SB5~frKHA+ zJE1pyUs~qD*sTfBAC>^O=mA!Zx)+QB@H$%%ipDekdRrK3d$WWk^(@sm@9%W#p~2v^ zsmIAULQWWS2!CP#8UYj?@Kry)IMwt^|J5!J04$ryOm@-ESRmC=37aqUF#-x=`~=0J zl*(^e3K4DOxn>Yb9#VNs8j8FO=2suFH6`r!Zr}ewDX=3`pnlr)h@YS}!cJBjaAF-Y`f1Qw2;EoTIbAPF;mv*edJV$d*+~ed#RBj3>SI1V0mv;-*aRGhMj_CQ^!mQ5IsKxY^ilTna$zc9vHD zDSKB3?a0v1laL^W5M@zdSD-T-0yAZHy2XPtUV!V129PkAp@c7VLCnB)#`3VP@l zjZYj-eAaLY3~{L9&MvdZEY7I|?dIC~@k8$V$??*j&GV?9@&F|1j?KFa-}_uR>;`}( zKrE)vH7x4IqLnU(+_G3xaMVvV_vl4rE>)4ea36T!2s}q53d_2P9D&8iZd9?W)YwRvw29KZH`#a&0t&f z_2fr<{^jej#;lJcv-Y_}{ROy3RwX|+gIw9yIc`Y|Z#Pb?PAV_>43f(C_=ssWvFOfs zjILbz2hv?v;byU#ti4;p>jY$50j6X1$`-LELks})snMu>XC0(Ht_YpZrf!`0%2qNn zgMsQegz*rBOON8wcq^3!10ymEHzaQ3f?Nky@vtD#x=^^a?ntFtFwiYw!*1hn)Q#0| zjA8(rNrZml4`GKoU8TuS(W3kvPxGw^u|j7BgL@}vNBE6Znyf>unk~0E5R1Yj>>nAE z=<%+5x6|e>(e8Uv=eM}S)RKJ$hJIt|V)ZBc+F#?CLCEpELRp{}dIE=DM(kF^vj-P} zqxd~0k;6|)x|q3O;Zfb%glLrfYy&D?0M8ug=6&mrt7M$YN#LJ2{4cfdkl;=MqP0>m ze()EpxLBz;34p~rs=>5Mcbf*=K8uUQ;Ix}oCziMfa{S%_Uc`@f;Vxj1dzvrI0e zH~19(%=!>ddW+Pwo7|9}Vquz{taPd%O$N1Jx3` zm2BuPJy&)1U?(_#wZnxjn&d^m7OACMz|E^h!0TW2L0(l}(D^@ZpD@DaIISB;b|O*F zf=&~xob;*e{Nzp5>^a(OxNy%!a&FPNe&gh$FK{1&M9tQob5xbxL)7{$)mV}La28dW zH#2l*+gE@8%lN0Yc~PE7USl8DSnHa3o#Z(3*PN17o`v@43^#5gNI=i#qF~W zf9d#BzBVPi+IW)Q6%ss)z>fAJciE(PGH^ z+g76onL7Ju%+_P(TvUw8DOmXsImpuchx3YOe_ZqDtFk89^2dJ=xbWzXqen+QKdmp4hQt|=Bf>&p<#S?wO?JkadOMd{P%3J+IBSd zp1)SzrJii*DbMx<^dGC;=IM2Yc4`Y}mVTOh41VCF6<1BFe#JlU)mo}vX+py*K5+HB z-hYI-fcPgrfxnm&?jT<+&-1gvqo{FdlhctAF9J@J2u$w16qEeuXBtr?hDV#vBwb@g zZ>4Wc6up{>qP`=-CYw`zz}wbOEXelm^)gOT(3v$s#8E?GZ$$kU6IM5i2Js$iE-=^8 zNShNFcBpf3dRn$W0(|`zAZq#sBQ3UosZMN{3hS#<;Qik=#^STHTiznslp?x^O2J(#Nh=7JfK|D zMYN1M03^(MYV!2mjm*oyOMk8tHsZ~~sFiKfB}cb&03f&KV7LN8sr@Dk1y6Da+q~^c z58aK#ewiu<02_dJ01ys3iF^Z3D`naclmaHAR(n+0gW)`NlXl?HPN2uMzO&Yn8zbU5 za~;&2oqG8Q=YG?SgW%+E9XNFzOoXE)dLx<2m3Rzy*an`VwwLJJ67*uJbw+cTGlH?y zP7Ag=?JP&=dbSaxPZvpj!9C6$bbIKs3f)*=#A+k}m;uNEy~Z^x=LM?)0{9AmgJm-Z zlNq-8qKF=0M3Y+(bB{Rob;B5fG)MqWZWx`gzrk46YMHSR3zUwUH8pKE5m&DrT`=5k zMcsnSV$Mq_%4(Pv07xx{WMsCcTb;ZtUaQuK%M7`?pzXSoqSP6S*=rl7IbKZev2WFF z)4lS8Ee&rlp9Nx~Y@>ga0*?7L{zaxT4ov~V2pP{*&l_t0vLlUkOEtT09QR`fo=28J zQ6PH8<~2UXll8*+&2jVB0)VP4%6M~+axI0;8Y%~k)c!s%vcV|-*{3!T7xsnh9ah^`pgZ(!+6@yO#|8wN`<-!I)0eN)m&$Zm6s<54eqLs%T%O>O?B9QbrI5 z2ms^ArWZ8Y#JPsvF-CtQi#n=G5F=&INZpVy4qYc-H7kb1KP^X9S8ICS4^4MQPpKb* zd~{`0pbECaS|}@+=HB2u=`iXOjb#IY!C?$(=<>EU8=Rs1I~KM&jpX1iO&zSf_O~5t z#F}N6wC5Q5`OjXug#l&fGx|vS-iq}8vR^5_Tm9a}y01GDpZV80cz@^TC1jz?Y{#{bZfdQ8 zbP|hF_|+C)KKoeEgk87%@b)h89_)p_IK9uw(Tkv9=uxczi0Q&j){U!oIkssDSW4?p zK(1x*BWU|JZO60#>{^8YGJat)(MSvBO?&T>8Ah~sElgWym#A``FZsjeJj6$;e6wBv z;I?8^?*`!NYh2={T@hN94uS%}7)=$|( z0VLdF3XIkyRH}oJ%1I&v0&9#91<;3iLvOyB=Q%SHpPH4Jlkf#6_|{nN9ezjmn;H)Q z##rvF_XrN8K%w~B?09;b2O?8v-o;y@t({kr9uLl3Pu~a?yINtFEgh^ zVcHXms-VK?@b6Hq`qx#4+XS9RATly44z9fo*DY=3!I_7WF-Rt`LU^)!WUm}rtMwhh zO3@l&5A^z76!p~U3(`-q?m3a!L#jA3z2c#|+3IuZ6km-*m3s`CbLVs@vhmDI(pHqV z0yzEX!Jwu8I$KwrozaWRrB%;%vyG9_jW2V7Xu}uTEV$E{>Lc}T0iR}Bo19}p-#}LRMu2bxl9B(}28LmSa2*H+R^O)g(cZ0|*bc(ECt36E1$Nd2Zn@%zT(4w_-$P-f&R6 z)loaf56!GvX8JsKIUzBhxg99GOV{5dBrY;IW2Q&{6H*e72xXiwvC_ zHg&1BeItuSEoUzd-_bmw*uilUX>mRnQv8cw9f24tOp<*ZbxkJD*$wwIJl0dWT4)zLtfl4)hnnY9ZXbNkQr5`C;>L+ z2H^JyQ=W-qWPDI5CZ`4 z<~bJT#i|-oTX!axY!{{XzOF|U*PPMLsGOai7SX z7w&7Jx>-q#N@7WdyqUB2p04)vqO>X*oU-<$rJ*)~F(jjWu9>1s zo!T9aFla%P0wk*QSTOTXVncA|Tu=?oGbmc25b8v2tHzhCVPa^&xL=-i*^KIa1{%YH z@oi#cv?6fLIFuw5w*`WN-QLCnnft07@)c@FR@9yu^GFI0NXhP417R1`jqOowH?YB_ zFm8h;p5w<$*5NgZX~75OdS`l+>CmFu>`EoGuj%2rU#Im<#)(z8@;$7JJx)NF%$XnKP}9yi>1Izk1)X z*f$}JZRr!b?q#|uSj--lwMJjc+bwu}fj&575PqCD57g(N&dc-Ka0+NG%|5Nq=(_|Q zJ*}g*ftP?`i7u_;x;VLam^Ri{WR&GfsCI*mn#sRc2IVlcA931Zr8&ILSR{l}jb#rm z1@4H?<1H{nm^(y+aNQ7&@K0NyL~FAX!x>#hn%Sz88ycN+*@zz)n7uR@rzmrVD0z6t+g(T6K`i znMx@^OlFu&QA!4D)_5^$0H9+o#t$V|uIN6Gs9GyLH==FEXXu|pDO zWJeY2A)l%^Lw$wm$(ofEgaxQhpcN6IID{~1l69D^L%2p^w1Ov-_n2Pc(e;WU6Yqmn zzg;|3Ip>y)7_r%=zE+eH0P#i@l_MY=SQ<5j)G#=2rVO9Tjl38|L0TkqD#?bgOk9F3eX3!L2D}Ks6DOqolA5`H^zg;q8zfnldBE&g4dZ znuNT1BEWKh&1XY`qKOU>lgMD_l#8?K6E$DB-16Xb35n7QK37^x{K@1(c^Fr&Q|0CXv&5X zG|db8u>yNS34o`|Per11)1o@&t}Tp43SY>QRk23F(^D1FlzaJuOv_Z0Ib-DKIIZId z>6zQJ=+#FgMv@UPGX#dUrlyxUd$LuI*l>67A1pNaW)FwLRq|a{W%R>FxhJPa2~5=q zc!>}NB=sca}kRq0p3_2)Z!xYS^CM$^th1ioIp|d|YqQ)+6B;b~)yu*`6 z22XzW!8uj`XMck4SD{#S+WTLlUKP7=KosTh;jO%<6GxIeD1Gf(Ym#CFl!LC(m9d}+ zn{!>#Nm7zy!D`Ims-a*IsMkDQzQkjmGQgq|z(|#?<4S}py=5og2Utook!FB0c(&Ev zNxfp~veAQBj&rlh3@RYkW`f8bW88Ue*W>0xvWrFIb-oEgmn6$#QD90{K`Z7IBr1DP zd*4U@WS&}vAZ3`#62GReS> zl)BF^3fP9iil>+So`Fm<*d@x+z>8wkg3y7>O!@ zo6F~g)_=u`tQi%~iEf(W1wEEYsmoz>;bfN5*T_ZhxKlLNyATfe3*w_kJiGWL6aj>; z!5F0+AgKP9g)9jGE-W*QF|A^c#4dJWLx#|2d4gRx9Lz_OJiTTu7?YGo&}l-@sm}~J z^`!nZQ}W4^XdDT^iIk+e8jZT|oyF41vZ`|mbsGu185sI7U^ak#b)paMR$-@Rs_}@V zwk&o{AuCGnyQ%B}X@J3l=_GP|?UD>zZb=CntfY$^i9zE*kE&025F_q%OXG0T_9nu_ z{4@*&909D!OaPQWSW=N)@R*&zkc2`&Cg92m81N2(LQ$BvKCN*C011>L?ORg5ho_fF z8bJt+nx{L&@HAr7OgZ_Ip)KF#*%qBRQ%S-4&j(-UG;~iy6#zPb*6I6H zpJZl$?V3N_LHW#VhKZ!*0O(|@?`H`H5@Ks=jJjhMfbN_3*n}c>s5VMYgR(qxe1=C$ zftoKESO;@`+a;#zSu4Trujr^&E72Tb^m7_{#^y%6b)nN1;0CK6Y0GJqQzOfj>FFe+(1SC`0 z_Ac$iG#F=m@pqbPe5JbfkDg?n!EglfoyD9Vnle9_LaV?$4vrizdR;o_%x z4P}W}P6slpkTJTh1qR*Sz;O@JAQ}{ky+RHV?Aw_I z)aL+`425tF2-?BUO8tw@$*;z8_D43T&-G9kZE;c+al+(EC25v=R>--vnfo5fj~Mb| zYB6JXUwNvqJ#1hIme~g?gX(6bOw}D|Eeit8Bo?a1biYe? zf$+B0AlBwdnX1^TB6=Md+!}?H-W0lr>&Nb^6f_LNfTFY%th2JIPnaf{W9EW)&`tnR zr>xf5oX8mFvIN!L33#UAfvrbISu$W{W?$sR_I#`~)b7gP#a~>|>T-y6zP%R_=H7E2 zJ}9AEo7RzqA1mq^DGdsD_lP@DZH`FXUv-Ni$RbR@wRtk5V4hb=`HU)g z3V@sMd$MQs;No}X-{E(70z3jRe70ewOo2Q}Om8NO9yUli6IM zPiza^%xv|}*3tv2JG7isF7T-?E;rBX1g_l)27v9)Z*d^Tz^1lt%VNmD$|H>@gHotv_3@s>J{3C0#0TU9CDjVioHEBl zGTUYl=9f8?k(#X@_~6^UAKKVUGP^Yeo5^^}CLHW>bQgFl0cs@oY_eRU8p2GUFHG4e z1~8lo!e)&(-0*0E*O6ai=G9CE)e-<$)f5YwX6{=(*}OPp>>b}!ouYh-k5ou&OE-xT z3r(iXP;>zN6lV%x4>v4*YWk{0eRjr(7lAc(ZK6fl{adPKv;t77C6tt@ekE2wB*kE3 zcIF$Y`lxdKsn7Qz@PYvD!Be)zmKl(HKm=f5{c_neDo3@NbDg^U`b#ovAU5W|eG`4I z7pjtBIa?eC8rUGATlo*CvMw_y0*P&L}lWq^j5p<7vdr(kFfKrG#+$x=)ax|V1 zImV}ILX7ZmsEFqg^&K_B3t0KuA0zS!?z@uiv5PBJ%~Yi3v|jf`kA1^@=T4XUGgdf4 z^0oxP3*1Vw_o%yDUx3J@O-LP(T1mGL(A0fInIhtz3f_$E^NJP)SX4DX6xC3t(&ps2gD^rhxpnaYxe`#bMm0<{;U+45qoQcN z8L*(!Szr(OIm{Jc3;FDBgFK<`{IF(_t5rsr6;lb;E=}Qo!W`+ zZk{CBnlvT|5}|DJ4Tu1asZW}Q$b*?RDje8rRqPaK8PX*8enOhXDF#0f#7HhtrorGy(s2i(|YrDy!a z)ufMfV;ya*WN1oX)7a-xnGs%x0~w}hz&~*Ee7b=}v&#%YWt5R8CMiY%kQ8IZCebIa z&#rA*pIdntnAq*g3#^F@6z8qU!z!efIdxSJ>mO}S$k~%8^i`Q$9nu8kLI%q0aaMZd zMBJ2?W@!Gx67}_)cmf_XJjMfnKI4T+1|@@G9ZYLz?v^r>ZRQC&aBuz%I6`73F?h^; zWG!}1_wyNhwPSF)<7ky2Kn5uD4C(n$olwb)++*3Av%nivrsj_w&L4&Y1OadogQ^6O zO^Gp& zpVnb5qRz;5Sx6kX@P_gZggLH4x~&u01VC^A3i_jk51cSv87Tp*Lo^7K4Wt%d8>kNM zmSelMPDV@UOyhG=Nj3I2jAoUXYkt9iFrP{p7>LbxGSaCh5{J$~*d+@D=`{=F_6k%s zHD0Xq%LL5fYA2SuQAn*?>5CK##!Rfa8NdLlCQhiB7O?uZ6iDjx`D41tsWe)x5 z1^zm-QO5$!8T6@Ny3znpbpmYfrH_(o6}mwXkkfE6t-uO~v3RIQpZSUe8XTJtA~emx zXuO_StiWD2 zEK*jCMosf;q|H!YD;g#dl2KWsPx9OsaTyLEkSV}zO~nDjhy}|eT&aKs3l(HDV$N1H z143buN-+>dGInMzI}_U#jD~YgT7W&b+0GbaKw#H4ck)5ilXusdFals$V-BK_ELPp07cSD^9snc( zsJV(?(>6%r39gY1q*y$MF&Q@?>rx`&YA7Z;kQ46Q`qhF3euvBNXD&^VfMRR_z+oL) z1A#Dm3{R)@mnrucKu2(%8Fm1W80sQCbA%KvjRd)O&3u@R5#8s-1X!R`jueM}30eGx z>SDI`!0THgxo5z95nN62;W~(PN%f(bK_6XKC7azhkB1Q0mV!WqbWrC|J^&@)DsBw| z7!!&Z7@+1xLix0YCQ~b&L#roVNKx_Npq3noqH;@c zlsI)4UUz$I4lRw=7OoS3+v!ggp4>8l>&v1m2*g{y!ISXq=QWZCB?M%-WaGqoKMw({ zGj`yqGXeqkDdir-Ovilj#9bH@XEm0C{IFL7@DDx&iA||6TvhPmDFzFQcw)myVqF+G zBAk^G6)q;%z<>FgIHAa-R=Hr$UX9mHy z-CNkDtSVEckwN_}_o^Zq_2}4~yv4j1l*pYae1`cXPks}c2q(2k@l$Qz*)`lEj}+n} zi&!L)^(>XXi&EJSztFhaIZ0glujPSUx8<~6jV%`4x&yTeXW+t9hSxk2d&;|G4*rz- z!pX_ox_99SkgP~~&{r49(KZ5^TBI@7nMHu_@ag&_6<6sIU;PKHD%?{zmlR zyyMK%AK(JfRbEc$71~hsSE6`W``93A)5P^`I&uk4zG<)pq%l6#acKNFpKH2Kq8g=WcePK z>h1e_o+Q>l@H`8CR715l(6w1{AvF_(Knb-{19C)-EGum3eNH&Iw8_j5&d=oiJdq81 zry(40bG&&hg?Of3b&69QXrtS@(SXzgxA39A@ImCSKDvDo4)~SK4+MiFpf-|~m0seY zw0ey(##31H>u`OBFm;1!PH5tdTLMGJ!|WpyW*_R681-dm=q%W1KIiFzC>W79f)K&A z(2j1j5DMHf5gnX1@lxlCBv$BYY|;2y6KEJZOQk9Y;)h6JWTNQ=xiM{ors`2WYvhYU z#v}!R5153Q%b$HORcF#hy9S@@6ssw1<-`h{32t0d1!I!(&`qTjxbk(3!w#IssR#X; zq_`BIP$7y2VwFiY)XFHuVLC=5h}k9Tn;qlIui*i`hcN&kh?&;h*=E`&oof4vg5@&V zLkp<1X#$RqBR0?~#Gu@oON`Y$`qew}7Q~^#Zc@^YWLPu_q@_^Htiz2D(@g}^UX85w z9Kt=Ei1;_NcCKe&TBA+9V{b&a4{-w%VcP{J8@FSDp&_= zV?caj9$?vd73eBDZwZEM=B)NtNA(!klKaSNz4;J^&%r=$F|-`vU@gt$a5oc)u0jB- zLj_hxC-Twem%Cc0UhZ@|>)E#@8mkz0xvIOYt0+pKB;lCjxRiYsHcD+&j)h!}v!kqWST>pq-vCUgMe=;0o? zOHu4w<9z@x39Knb0n#X|2g?SdVBipOZlF~df~b=TiV|%Lo4iEI z`=J6r4!>fuWlj)tfy_?Y96AESIuRdjO6Mn?!l453`F68jRI-!#j zIe)?hC0RJGvyN&)9_DIe>7(-u2~^A-=G)V`<#X*8H-&gS_=%IPFn2`gLttzU#3lf1 z@=fK@ceq)e6DvkK-bNxElIp8X*$7tGEUzfy>?8cMm2Z~PH~?J$`ejaiG9)IbEF5EnE;rD8PwKBP9LM=n5k<| z!m5UXoVrN#>c;ru^b_uO;JhIZn1aLDJXkXMlbc_hdwf51mJCa%cKgk`2B|M;9{`?GOzCRp<-`Iz$2dth*(lV?_Xb zD|`q~d^STm(%@rs0N9z_=ql|HZV-k=^|X=B4yKSC(ZwPAhk2t7V(!HDBb#yG*caZR z!9)}ILptwc^E~FB(ft`Ua#Q*DjG2&ukf5WzGvSb6A#OUy^&~~hntWpowc^sJ`#rdS zYWV!*<)`2~+xw^I9isGZ>imXz_*i+P5%9d%^iPKtJ~YH;+=slGycc;88{lpcdj~T! zS%`ey{g?^ThpeW4PL2=_HEDR0D)&ghtWki98JW`gP{!w6mOchGXwFiOq9X9J_mjsHMT`R875^fkjwq4nfZ zHgUpdrbmbAJ@c-TkcBGlAsND}FAQB_FAV^qkS)gD^l6`3;Is@_V;|BJGEso+Opc&} z5;t~}`07DV3Y#WTfV4OnfZw;Vj%h3flNvlYh4QQQiSs7w0M> z#C*$VO*aAwx?ppO3D%N}gKYQG@>>JJ$-ClbM^Que_L98c$Tx+Z}#V6VGy&f;b`vEYw z#YI)P`5qr(ny2AM$rGJqJa1Pn9+I@RKKM(F#(LagS!25o`5T);Td_*w{TcEQUJnF1 zuQ94MODI{{bUR)=kPPP7r4{uJirS8vRGt+yCmf;<2A#PZtLCx@JE6Kce&nfeuN61x zXiMdIXfh-R5Iah;s-n4BJ4~uF_dPNk3g>$f!jQevNhsX|^BPO>fe@3THgHl*H6flt zAH@O?11pCu$Ra=svku7w7I#)9An%(G@%x?##DyCS37?yWhxgA+Le&zAfTHzAsA&bK zdSw$Y{HzK^&G%Rp{VZR!>vLNX0B^8~4H}YQfy5+fj%tK)m|cP|>Me#l3xXQG^TaxV z?fgbe*pqv?vlb*zt<9_KNM#U!dujEi>vm+i_(o^fL4Dmu9q+5(>(~80`<6N~ngFnY z%~dD5MWZ3))UoQo`-d0BXk~Etx>ZUueI~n}x;9!XAOWL57caUX6|ddAF+zkrUj#|k zEqW?XW;HV*ew-p11cso8Lm{Jw1#YtjbMj=kv*s0{G9Tb68F1`VF(<@3*k-!>X(L7i6w1?qI zsz(S<2lL3D7m^VGCQH^;yRdsGAE-mrwRFMQL9m9(BTtFIjWUY+5wi|DDuBa+}=J)n}Zcu@fcbmjnK8X8O&yuFkc_ITN$9oJYH<}5{296q09rt$zdVu{ zph;h`tos8136cN|wQ?(!@~iH7FN|GiFNQ~;^VO3^=b-1nL>|E%*D#N}0SmmI#O~)v z#^ll-l~z4ga5v{-IkK)QV6?OkXMp28`N?P8B$Dam%j|0ax04e9UxmI=qqS~$N-==D zJbl}H()~;k;sBnESVeKFk{!(0*j-o=LlW5_3D;U{fj3dn3pN6iHWE&uJ36Gs3&YTP z^Qt|rd@dZe+GU@j^?_3=W@1Bb#+}DyT@^)^)^yNO8=4Q>Fq&9wPfnaB&z=-F zG_7*1{=0O)w($-smR`Mrc50z92|4-`{>(Pw0nE*xupf`zuzeg6*i>(uM{8?=+q^Df zr$)Xe8F#URO-;fYm@v5r`CgtiEFUt^rWF@0a>p_dWp-G_G;iZNHaL_32ttfOMA&sC zt8Wvypg5;UlAU?Vop+w|d2q=)EgGdn0uX?| z!qBPn&hwi-zw@{`V_TioLl$?4E`EfDLz3+Pc_>1^87PAE(FtLnXE8B!_f-oX75rJ= zjCjhqjfbSdcz)90Ot+_1dlIIjwd;~&f{CIX`E=VvX92Gm5mha!0^LP@S}WcBdECgZ8r-BI>x&JBj6L*9BWiPa*a?q2jHY%@VTb0 zaiL#a`2KRRy%V^D;Zv6~hg)1faU+wl@7Uk7&7Xfc*UXl1k;N0`6#jiy?U_uUl<2Uh zImexB9$Kj470nXQ3AM|#z4Bc2Kj z^?DW*6)}(953kTMLO^LuC~a>hba@daOgVG|Qkeou5N(ziNW{1x{u0pLc9I(3_7o{m zeMth=qRc3o1eMJVM}tFH;}Uw)dRpr%r22?NA^6a#BGD<|RFO`!yDEAzBH@Edbps1v z!g1q=9<~O3;SGS(x%mg&Ye`%ZR3nmGhIXxcZelEkuhp-+kJIgRzk5~shUb4>>elZv zTYNlw-(yCPBYrJ;nIpY`8=R8{uJOA{+ePW-InSg|HPXaQFu^8%oU;aNFB@#VS}4!?;(K1AcllYq6_t@b*iCx?HKj1Q-FqV9u9ZKg9& zyDnYz;3JS9&8GRrqIjN5W4g=Cd<~w z92z@h3&E#IZWIwp@@xc50w^dT0}UR($MBS{&6gIHTp$(FKwV;!Q9I}fesj@0%y8Z4 z;mWp0XI?)9v{D0DZ;h4kJr%Vv5Bvmh0j7TIG?>|zsAfzOUT}wv#0$bO(++Viu>UI+ zl3XHgDL!IRbaS_v5-O?+$K7mY1`nzPPz+((Wxgfm-zlm6MN|97XUM*f>2|w^RRG8! zMoCZsV&M?{v|d7JDR377vr8@Qk-2 zI>h#c@q}z1@wv$CTrz68WAz93f$Q@RFro%WcP!Qop8Z;PlpyO&e&MhZReZF0*@B zEC#f9u=Xz|pDm=<(h{f3${Il}JaXMQrLXs1KWzK2UHbxC@d9|jAfwO;5(@U3suf28 zu|*ctp#oqXRT_W=1jQ;4F;^=ka6P%e0>|tmY=Qxlb*U zWKsKN6YU}xHUx|S-03k*)A}2u&@>O2wf!dDeCICOvcU>Na0h3|9n3Q?0RrJ+0C?Ii z+_3AMhO%EFvA}P>%dMXA_XK`-Nc00 zzi%Ak!t?LBN*NrM#A_C)R^|(Kl{OvJ@SpUuu&u8pnZaGWOaW5!huiJIL7wH}@iJ+yi6tCG33KvT@X$Y=^qJTYL=Sby~ zaW(-8TziB(LD{M|u6((`RJJ|a)8I@Aq(-UP;zfR*l=!S=eW^7q`j<~=C%(v1(->Ux z`5eiBJqVX8b1MK3i{p9QKf9F|ex`;!^$|ry72XPem;s%@)96(a^8fYP^c)AAUsFu3 z!QF9Fegz<&t@FO`_Fway_19Y0G=9gXrf~d$MNXV4wpLi!&Wf`V;G3`dCyb((cXIr+887`g-0=U^; zv1_7vWp9R8kcPXy17BjjMKo5#ns#Zc+EB3MaFsL8I%{w_6&1N=GZMltdmeAd`AN#^ zNgdmoGw^edkKnDoFMRxXiS~DUtmt^FLN9ODTm4dB*@~*7s;a%vYreC8TXa6YFL~3Y zd!GI-^!p7?jJ3xHeVMn>9rY6P4m1GXdw@tsWcbusPUfA$FaB3Mcg&meV`3}PIu(#+ zrODn>WmeyioqoS3QB`;;`wlDErD#33g)T**^RoMsNDqlJY3eg;3|1(YiZr^&9Al?T zhKZy1=^tpishR>t+X4tDPy!Qe?Nl3t{5^);U;KQxy2>iZUgQ2|qHGDAOIv@XM?WRvy$49_~!i6u_>$u{pFZ>;qoZ!R==q@0)DBImVk zWe!iccpSJ`{*p-R?eBEItyTTKA9HEjV=a!(x*$G;E3=V-9RXgn@lCYe(C6oI4v+kM zp5RVlzq*~pwSMHSJJloL@pl^9XGP|T{`@$9|8}997vAFOtUd43RQZ`u{Q|dc(d{}frU#$m z23r*84Svz*3x4>5d{9g6^6K8o7dgd0%^^Sfyf@!+E71{a{g<7Y&Hp^-{ydu{yr*A@ z-`UMwId^LGEUoJtwo_;1JbufErP@Rl;D1C7Hu~e8wK!|=kn0A1=Vb1K@ci|2E?C7h z&b^QM+ylT5;BR=s4wFE>d=ubLt1mv@Mi;JXF@GIj4iaj+IM$Y5%{0M>6?;CXL znJ*E~O$I^GF7;Vu$|7u+rdsZ~!_#;&V_(B6<&X$;L!UUs^%yFjb zR;vQg=U%=`k>#W4Br#F)ak()f%251D==$%g7cV$1W*Y;x+;yJ8r1dT z4Lpc${XvgIwG%6@{x#jFlc$BIPUX*%SK-!b`&#aOB@VuIDJZApJf?-H2t}sQ#Q#_Z zQOy=wtL=-I^M}RcQ*D;9^pgu+v)BBxi^VBXta(FWx=6ky{`SMn|KiJE1}-k@@_p9l z5l`WMnG2vO*BoJ;=GO$eqHch3QxX35o;XM7U)E6iVJ+1X>={*(U%Urm?xqaH33J)Z z4W%W1UUwvLwPCP#yI%8p$Qp6=GGsU~$Tj@BEl)pF(}8D{AHVhoIF{j!z*X+V6)X67 z!iWBZ-+O$v=|u&Y2_P#JYnvy-W`{*=>xO zw}^ZnYuEKTi#+3Jy=MQO{^7Y%YUyVRE}a*(Loy9K+2Z(kkntmMN7bTX>0(MQfw3Za z01&*Gei1gr;auSpmVx0%=-||3m&4I{*MM#``u3a=RZrFKiSUcD- z#63VMkXT*a74}s@+UaiQ6DPgaAp$8<-t3=dXsF3=gveiPNJStUQ~)2fqNu9Gbw;}L zfKl#bT~4*()13=*(V(B@`HfWxd*0mc*|m+^rj7fi!IrhR_o%0d?;AF-w3)37KBPxj z(X~;Y!{s3>XFBs7llQD$*|8et0KhA3E^*dord;cCwmJQXKFh~?Uj4!g-+GY6EVIpe zPhW82^p%mqbgN6Xl*=8u@q%0u%fNu@H1w#c>k@yVxVKv#mW+GZ;wojim|84Lz%o$& z#|!7E&vozF@l>2BF|= zH_0Gu%@?Rz_1h$OTS<5`TmHvYRYvP z3V=HYTv)pebxXpNeSH1>7B}OPS}D4}(%H~GT&$e6WLON*+YBru1(F48y#)Zh{k-Kb ze9FbcCH<|OXfR}Te23uaTLpl;@j+BjN*75y5r=rN92jOx=#d&sn$`z6BGJQ&wT2KL z#Bp}Dj7#fZ&3*|iFKZkcfVG)uO6J@8fv&S&nm7uB^)u!9o=R>^R%m$>(8+>)2uW~@ z!PvMikQSzoxYwcg4UE^3i}+|7#4h#Y%l4Xdv;AT+iK$yGL9lyp=oRz zYaT9J{Z1ltD4%o;0Np0zCmz++*g>VR)!IUy&|Izp2)UEeXb(m?VT_}$RZYanN4J_H zgt&WKm)QuH(Dqzhmp(7f|KPSSDLjQKfUvRmw@r`z>u?;JP_w>5xTd}>fq4QwYofIJ zv-O^Rfut?#xxiHnk+Y@0G5!XRf8_7(IA&-eCqSoVe37}A`L}09 zir>%LWzTPc4w8_s=K+p;xp;9lkT48+dU8Vc7*M%S9z=sM&UqYTL<)~wW^so=GRCKr z*IQ$;%j9N7+jO&bCQci4$Imx%NW)KizJ000p0-lb@3}tW+xDrIt?jj{AV%D5{N)0H zV)@=D@2#9W(%gaX2VS_GL+@taH!uI(_It49-5x>bqU?qEm&?q(rBW}M44GB;JjZOQ z`4VQUO~(uFGM82R%X|h5qi|YUck}7<^7|+>ZqWfwb!mv&YOr(S{MCrm=l$;);iS0b z)ShUR1Z-1!&GUsF_xaZ}@WLbnE`QVa*e8C<;H_Xf&l-_A9SSz@8Q;;0_e#btGjh9@ zMYo$7gHWx1wl0CqM>Xu)=ncI+>D30-Af`%>1kiYQoP!Z}IQPUCGk?7NBOe~!`FU3l-xwYZ*(dQ69le2~ zqx)pcw0dlPj7FEkPxtt%w!x}m*>@b$O5BMldTjI_VoVL-FB2!qhzo?`gPeqrn8*~c z>+=2Y@{fA{`=KYRdecXVNKrNSVLRcB5;Sn51e9pBq%%8Sk;m zv%R>ge33U8yYQp=H_N+c$35o@KGSn=^)&oFk$#A_7lKQ!X}$Q=;L-MK-{+`S?h*sV_*Kwo&}G46@<>&c-xil@aUV8hZZ*#VN;Fc&fO;I z@c91g6RWnbmi9c&u$&R|g5HhlfzwM>_h{&#^!}pPIQDVj*y^R#BcUoi`7WI#Bs}h{ zkbmcu9p}M3@;PoO>h&*Y1D*yFskby;|-! zs61csnj@)wdG)%JF12piXfrBjOf_@g%WWOyEB`x-Vy#$C;lQ7Xe15i``J%s+Egx=U z7tSC$<3_)UQ!n$XXARD53@wVyO!EiY1dUxx!vr=egq=^OOxS5u`1c8TnDk?Z-|75^ zL;B&xq00lo&{IGl06s9}GmD4?tdSI7%Cey2#x@tYXM-nd8R1!6|S+*YQ=I>Ct(1uVJZnB2?kSA z>%T#FOzdM1?T_QrPWF|$_9aBVFYU&^rGGzJDp6+F#1h|_{+W+E_RrRJ5ThGKoWeiD zpA4z_{HrcKAsu}Nm#(NqRkor?Oem9D5rP&d)>{_rH_+pu+?_GNID0Vq_&lHS0Z;x; zd00<|t&dztz_D!%0U%@;RHvzu0$Qd*#R#Xflt(YU+4u~4duK+?pnE*{ffk3y8MMNV zmmnJe6)kvLTK5cIy_-G62qp-pIYtZshTq(KTIxz&!FiZ&90(oT*0*j8zGyUf|ELq6 z5>gS?LN|-~qrZ9eK-DL;pYQ}w7ALsD*;Wl@>1Q=q;UZVh(mN#YEmJOuH9|7J+Pz-& zGLK8YwP6MTY|(AEl=Vsn_XqRZbzU+pm)Ze$Cz(B6TKOk%)Dqtfhec*w381?x(3M)Ncp=aR!(W8H~;Pbib!vm0@X?xA<;VQ*n6Vu-dy4~m*?@!cY`ii`3mwmqg=gMuQX%y7vPvinq~dtA|| zBYD2oo1B*7L@r#g5WpUCiLgby);^eg4DK*-snT@puz{s?n&|$uf3i;$#{N!Azy4zK zl|d*Bo9e{so6=BR=Pn(D@HvUqNZAN~3Eb7|8F9AAWVBr@i*+vS!}% zm(^)|&wW^4eT_n|n!liv1=*gH_v~8&d6S6&FmzoLDiChnvXg*c(UjdOObQ5spv6 z#`)V0LMml**?4$}CzxP<0G(Hyd=5%>Nv<5M<;+FHxiIDUy(c$()2sW#F{SNLZxSqQbrSTA6T`+Bgk!;0 zY}0aGx~>YeBVkG<-F|IPzI}uHM4dM91Qi_7qo;dMd?7}luu)2wzo=igBI+x*W3In# zr-o%RK5L)7a=A%*J;_SR>pm>9Bw_d3v^y>4&e`hSBlp<;#cos!;x&Mr`kDlChZ74# z#2hkJmCyj-_tYk4d?!$!VYI z$6FU2o~M4Y-fBJ5JM-Bl&A2Jh(R2BD<=nkb`MeMYL7ys_H_z+pIV^Upc)QeF+L{}i zbLBB=bbGdj)9WpW8<^}-DQZxNxhsMr7Is=MUR8EVReM@q>|ocU^V{b2p1xT?VqXev zPSZ9&2HR%ydXG4i&d*A155DiFJ-S)5Gi1Q=wzj0Br#CgDl%@p>dca(`T-#^R_Z7lP zmjrij^*T6zkYv)s=khW+;0nBE{JOGz(-g`E!-$V@Fa0km=*Y7d%kU=7&geRybx372 zBY!W-zcC>ST`a_q-RQM^=nsN)l(vR*&-89M`uZ(-aMFdV$GaH)a8|Q^s9G6K47Btu zb|OHSy1R!*+rn*DEfHa_GP3;=sOuZYntorWho>pbBb(bTClgj4oM>C0t!RVez8}^* zx{uo?aXK`;9%`!zbr)^>)P z1ZJvEV~ndXcJdYp?ds2~7bJ(Su?O%YFoU~`dyru>XC7=mig-pYF5VAMxW;uBIxR-$ zG*n0cIo@)P5b#X{C!G>F2|b+-F~4cYL|Cm- zcIG_cv~Z~gys5)W_liWm84L8bP4&jG2W^$tv+aa`;u75 zGKw{NZq+Tv7g+o}At|p7x#e4NsWUo@h@dyCgJr;a4|E8|DP@)Q07k$D&7*r9KDye` zGl3~ zpSbYnxP=Qc(7Ei%Ht&q|Y){X6*V51mIp_K4{O{t8c^=oToiAbNXj>4M_@x(Ib`Bxt zYDx|r6XiE9H?d*GFk-O9r_MV+d86lC8Etu^br&*);%tR~isbAcX+7zspYt<+=Cw1I zkLq)gMAa6-54RUyur?CNC!clg9g8ZPlfF*pdY7_oBTXSx71HD_V7qkQx(W%zxpxT%VpDwDRW-I5T+CELOId*f9Gd{boB&Fi_vt6qy zr6VN{whR;Jr(XS(5Cwdm`ilc7aHYDun%|@QjK1mw%8#{G1U~2rN}?JrDw|g}uOTF* zbbh$E@D3?DOaMw)An3CK$G95WnnGy>Phh5>x71oo>DcMzoD_2aCSgfy!Zs;1F&(C7 z7KXwRQnbxt}7cpj22! z2oh60FT{rni9NOlQ6702t*r=SR0hp?P+%1^d~h=FSp&VGpf+TdtFPy_wVIr^X7W_~b&igtq=EDJZ@Sc@XXnCXiBosnrxp?XfTS;>= zu^z@>wDt+kNU6BSB38>A9C)9Nfo3&mYEYGC$1N1ZqScuz;Ge0a7bWl_k8mr-R9mbh zl46%OZWb`xu+@9(9M|3ye@RBZ24r52x{@uoxNa5*w{<}`+pK-;+Iiev*r^4pw^7@> zgnadKi7iwmZtSsS6M%=mM!HPzj=gQ{>#cadcsoapNo{gXT+=)<-LHkPP4{H00dFaI zK5!?05P*MhkN8!Wiw#}9ZFqnM88;_%y1?y}6O{yS-*`C5r?&FFDFceDTXc{LBay_+X0)S0&aKh6*;3)= z0k)Z|WMHn%Xe&`py6-C9MGN-yt3K70Ym{jgxM_weh%3LXLp!qL)naE*hfPCKD^3&$ z?f5w79Bcw$I2ea;G6L$Ysv0o@oDhOIP~=P`!6;-fWEWS0agIe8=$krGJD7kRz(~Zl zcRZthlcPFIaQ4WWNzHWtg(k<-T83xht_cpuq7n`w=6UX>0ua(+OvIkoYExd~KTI@a ztIt6HaHDipP-fst>u8dNlyuJAiFKAcnTxdQO$~#mWB|$x7dEhRm9SW6+V}Y~s{N&w z(S~#v-<=@q?7w?hu=IB2!#0g7t|rIZ#J-6MQn`u^LXK+SfWx+(oapkzD!!QCP=kp&>W4~&(w!eEA%p34*~VZ`>y zp3bBBwdP#S`7%jDux@-qq{KjYhudM&#Ab58}R zcbY!mnsmr}P1|cDQ^#nXMh+=y)xAPrL=PSnXphB?mJl6;r>^6!&YWe-J%=A3iJ{Fg zhpY+XR;!7mQY10_18!*~j^}|G0gQk$7gf2FZd3C`EHFO2@Ieyt&#xJpp6*i3=Ze+D z!Lr;@^vHBEQ@DV^+D22bj^c+HJphdQ$0U%X)-4r1BZn2t)m17$D|L)+^Ns3qN>Po{ zuR<7PgVk5)@zLEh2rHESU_D|&5oXn$vXwN76Q0~nWahwx^BSf_@H}Xp-AZ4bN?3_d zx5w=ttCvg0lksVAll@ttaYW+mR~>rHFSh=+LNbrOBft+v)0V3pX-~lxew4txG27yH z=C_oaBEc`XHU<@0?vKiv4b`1L{xFWPf`T>0R)6+Ky>16!^9)MNkI@g~AWn{)`vwk+ zKD!L-g(N6jn_jxa?8&WgYQs;ru0aw*W~&%qDo}SA*Yoi%XIC}|(Si{h7sg1jG?gvl zOX1a|H?j$r}jB!TOhUky=mQXeltX}_OlJU$VDaw_;1HbZ9&7P67J;}wK z9ta(SRhm#?{rz~(Ju2+{XutVUkOzS)E?U)Po_W}VImB~$IlXILasiOj(pIcftFX91 za*^%dYy4K3eU|ri5(C3iGLzwEv^fHwrLAvNDbNe=3x{%x_aB!Db3k*L>H7o-UWJXsRCjF6-XYtr|3De+%arXFwn7jG466rpErI}~JA;w7T5i|9X8BmxfYM26eqjjhCrZwTK8f*^hIH5E8g+=bB7$ zi!1q02~Aj2Zw^$q>{}+G84UUlnRGJU7kC4AwQ7}FNa&8DpKu+mDp;g(%uAcV+}XH? zd1FVBRsx~lDOQ;3nya7ttgR>8q5A8+pd<8y-(=l#yY-CwS$IX+keTUM4LB>}d-Z9cje(9ARv~5cd&OfFLDpGYeQM}_2%0Er!(fA z+Xg)U3Q4svsU;SiGEY4xd8w#b3Oc&e9q7JgG})Y)b|KC?R{bHTjDB(2nexY(Ch{|< zd1`F6+i$*M`7LVe4OC$Q=d?#>=kA{wXC5Pd>QQ3k)u?&62i;T13$VQMzjpWGt_>Cs zhGVRM#Jo$p2q@z+hGMy%sE4}?RlozT#sh6%;pEY@0v^Fg>h|2z95QWnas)xxqpeDDMDDi;Ef{>``rbs0c1ecmY?n5J)4-HNQK3u2= zF#5+`2nS6V2%wZnN&+no3r&RivvnGdY0S68;Ct;jIlI8-4&DK9inVmxx9Kv*tfY8t z58=kGBo|_Qs4SIxOheA~a;RUw+LKSsQeR!Hq&L-Go*<|Os0MY(0H8D$aSt!xL*R;P zeDJ5-zX`lm3>bv;1N5GqDV3j4oy9a*G?}PlNfb1nyILJwq8WWeksCdX?&Ixa)r#Gg zmS9jK(LuEZ?)@fLAND=2$DfYG2bU(<;Nm6=XMQ=JV{Xaym2?wV4R&13GIKeO$C zIc^UkBQ6TljJv+>{%Ljk8T|b+FC%w0RGsTdKR#?~Lc3VJ3PMI=_;Bw>Y=w9mp|cjW zpimf;!L@K`d$m}H1e81c05GzDJF-vgiK6~~4_L%{#`vnKAvJa+f=(nEm!J3OMkfwD z0|2biHTIH7!Rh`Wu?R#57IDK%TeLbWshYsuDTmEA3@rnuffJs9Q#W<K^SDDgu~ZIb^OT0NukPugzKu8D7ZUhI{0$lYN3(2{>8c^xDC}-Hh_WRu;g0 zPx1=P^NjaKBs*AX*2js{bY~?syLL2abIQgS_LOTj z#K(y5Y~KCgL)4lyK}Cgib-H_O&8a9dps%Rj*plWa{2c;5tqSP)F;eXm>}- zOi0b1Bc--K`u*UR6u?!lU5)rYuT$34c2$j$6arfvf0DY#+BGhR6%zRW8`csiCdSFIk;SQWi5 zaIB=Zz8{aroEF73f}#^#F^ifq9KMi+ZMR%h2McnO5Ez`ibY>Fh(wa@ykI7b90wY1M zWTYt_g2AWf79u+qPNsmBGb*Lw#CS>uV3Tbyp>}?utr~l7zvtQDd$*NwSeM{xMKuL1 zU@8!#QjMo`UcJqj(g3Z)sLfOLTolw+E35@TL_n)E*Qu9R18`J=7$Wc~Lj?8PeFs^Y zS%Cw9RIJaZ4Da0OF@^)CGZX`Wd;tOkHR1xADje}skJNtkbg_#3dbLKmM#kjTBWC}E z)zSHa%1^@5oaTeur+KdS+VC9Jz4QsM%%)v$$_p!ax@`sbF5-uRjDyd;gizLyhfqJdm!4C1HnWWZ0J9*KU-I1sG83n#(G9#jF|s)VNT)OR2!3su--*Hf8&95C^+-$G8m>o(FzM0tu+d*IcBOGN$lR^sFs|%Gf6F zy~$I{h1EDEBF^3Npmp0kUv@LdFwTjvxRs0BgFLVL*h~ZC z76F+vZE&krv+gXvK%zwt8a4mGU4M(4SQ)AA#Fs9`5~ z_K~LHI3qsDDbsuCJgL6Ug7@HqiKqa?skL0~mKtoGK+_=Qm@CYPDae}n!HgTMJW)#2 zj$(AwK1LOzdsMb9R*H+JjIJgnwIZT3hq*d+!8NJJrj!&k#bTaw2W5f2h3l(?rYnex ziS3AMd7VPJKER1-gA8pOm}A0ah9bq}9HA2Fk2B-Hxxoa|U9$;5{3jne0V(Ct=yd1< z+oN_BQ(hgD{g7fl3K}Z&r;#elWRz^6>7yDB?M)W|UW*!=W5E&W>{=}3ocX~B(h}Ln zpBW~y5hpc6^`4{Dq*zX-Or0%t#E};KfFsJp@2ty<##^K2!FSXOji=(IZ(X>&I)AGgAZGDQpmhHy_{2T;_=1Au~{X$>o9HYuA0TUTFrLo4CR z9Qej1thi^QUo}YR=oeZ)dEhkRiV{lcNyk<#8a9YJ$z7N3i_WYn1R2Q8OPeG4l+85i z8f2vsG2Dj<2Jy%(00acZSAK3(W20*8qLx|xi~=7vr$X&cx@Kx zK1?C;$UKP&vq(ulI5_G`(_qShM7_j3Gx+brnt(Hf%}Hf#j{fDP*X4r3awjx6ercAt$|A9*CfQPmQhj( zUfZj1ljcYY#6u;R9#qX~(fk-^JgM-hmz`Z&qtQ}UqGo~C6k7Y|k$0xl@oFPFs75-- z0kB8fJBXYMiaks(MB)tw(T$i&DRN2;6k~=J1Eq1m{RmewLF^)q7Xh8^20qHO|9(SQ z;!5dxk|^O}x=W@+$|%H#+51{~kZZNQM81;5fl}Kwb$N_R-uy${M;krl>AfEU9O*vg zO99x^#qF{77r$z{GB`$5vSI-l+iXYNWF8t6*eelX?rJhQ50Lk63@br4%J<1wF zNQBD|BC0H9<;Xa#V;(nw^%nZKYJii4%9|x4%D+;D&Lq`IO#y?& z3fu*?h1u0?uCo=+d9d(nJddaXUF z5Yq;DeT!DMP3SONc%6h`5Ia%vv|V{h2vU37QYtEn`bZPnZ>&Z@q)RvfL6H#R8JOjp z^G}8P=6(ZW90r8y(*&hqqL~<{*~w`IkT-MEIuxP70yvL^3^X*k>d4Fa{J0UyMg{C0 zJ(rZK5=6qX(MeV+58Nr>xnMKrk` z?D_zol`gOvrqxv--)#9gEmO0b>%GkKnZb!&|heJ-Xb~;v0gg!4`#GM71uj7>A zQ>I)Jt`2+WDsVBMtEG&^J;N~Aj4LTGQEpw^gsAEa+rL;IOw;Y%=);WwW)f zT3oYmClDz*b$CfFZUcyz{%|nHf~b~-I&$)J09?Vv3Y0NUa!cX#?jZ@a!_rIPj-`xI zz`>a6qhRx4a*kENZ!cC3U)Y8X1h&B|8+dvh9g@LHF)5`LJSf* z%30(OB}}$hQ96aLLb!P{olo6Ocmq8igxs!a&yr{zyAF&86;$TU&<+W+(MX9nh0=3Lz22;)l&~! zk$S$@%^v2a-DF#E-vurJ#m2BC?4(WJAV0Zud%tQ6!XS5`w-g8|hjPA$x#EoOO(usN)1Y&Qrqdu9P`HIaV2qic zn>>)+4xOVj^QW>Jo{$Yshdja%7i1qO5EODTHFM48u6SI`5x(-4kPRwhp6ALyGUfX) ziGX~{AFDizlU(20iLCLpk~%C>PdjA*b5m zGfge?zdOzdT5?Z}WK_~lwJ#hf@tRQXTsLIu8~7&9Y(akSiAE_WB|;eLyklg{Qzh$= zAe(ge;8ts_RA;zafjI#Bx@M&tM#!emUglk16gbl8D}soLl&cW*k^+UQ~n_fkfTh zEmA@;c+CD}XE2v%ZwZ`Ga>BdINM{5V0Sg|O3Wwnp=SNMSEbeB18JL!V1-S-lnvEbS z>IicA^MkVp%5pu+hdkjP0hPYV|5UHB3sseHpi{A@ zuGKoHJ~pL@2c2EhogTnlIVMR{d)MkF6JSntPK0P-ORD{M4xO*19(B#%34E~CsuMM? z3XF^)i&@T2b-`0l z_idYFCcl*x?N7KOs7#7O)+`%#@KtKb*r(<0KK-|IikBF5k)LPOl(~sUb`W0m)3$US zxzAB6?zG1*t2@!uQC7am8$`b2Cy;l1X48FSiB#glR`kw1$gpvs2~rM6Fq{uO2+Y)( zZw!otM2w!^Z6Ftfq11-QAU}x<25LMsC*etPOdK)z>Ypo^(ZmgS0lcV(()A9U0x`uBz@RJ^4VY(UO>xHH67U=-Wm=_; zlFW6-DQ1t!BlqZE-AUT0lny%5J?H|1EWi{x^ zLJokBz_N)QWQs(UD$=C?h0G&tftUGN<>sTqc2SuOzr#qt^l$zoS7`dqlj<$csGcF6 zxeSAfv=D_{04EZP2@HT*QN&Z`f}kb$Vw^bF)diYulC@ry=@N85^dqH5{$0)he+2-c z(+75H!w$qGQz^eKpF9qLNo`}>_Jyt0EqqUHoxy^Q^dvA42(_{@239WTR)5}^A6Wv zB*i#+CzjbaI3UncEupe3Y~&&>v=qFxG8wcmnphD~TTTI&x*ArlpOCGTQ=kqZq{%>| z$rVu7++L25and#3LL^X(o>g^rQpRc07R6*lU135n8bd@+S!vn%NOW&^Ro$JO9l3Bk z>7la0nYZE}x0;SELh&aCRv+RfNb1$%wCh8+l9v^X3ZMY2I-weT2jEoTk-~hu2$TWY zs8b+-@ll8W506+7BO(S}4-su*85dkqAa2kNjB5zs*I1Cl6~gmv>Hv4y||&s(&q%} zy^xH<(vv};Osh$Ohi=#rYiCx%&*f~hN20aPBVN9E-i++yh)QJ7)sbf}CYUWNXbqX2 z4k-$Kk!Jgeg;7>mt^HIhyLh{=CYanF%b3fZfoxL*iOeBAY*T?`n%O%Fj~))01o~T`o(l+%gQYjak%u z*}^C$yYSeJn6aKT(&e&R#U=lSXR-rkO35pVJ2u9ex`y6c0u`e|c(O+GoX=4_Bs(!Z z*!UgId>co=`7_t7&+nCpo+EVSw%xFn#JHiD+L-Z#oD>wtS^5P6pzb!0H!pzovROnf zVrcoP_Ywxyh}d?a*@P)i{$UFxbZ^=c;3VV+aWeqK@?6_#*64mDs8U>ugy)%V#;uUG z3Pm$n1b{z7iZJiUEl@XJg1;rg2>>jZX-a(X@B+yixzgsTk}q(`$9*hIi41S!6Cb$V zHvmI%k;@d*M*t|h^^ZPJNa}NtPp}h2Vc)^Uy zW{(MnIKgfpyf%KNj22FaqqX;j{sSSjIyw*GM>*GKq8G30<~D#A67oqnb={u^l^DbB zXI37_8AowX-T)pZ+G8|p$E~w?m4ondaj9bU1pi9w%+!_|)gnm%UqGP0o$Xa=3-a9e zi|kHE=H|bQ5@wJ?=1Mk-mb?tA4)h(OWTp)zUPEanL~In03|z`WW^e9NIs4+;^f816 z_{QDv=%&FVrxj%3lv1nRr0b!ac`k~vN(cf{is!xqji@Q;u_2FMlfh9(dOKCpi*^wR z!sL_{W6Z>lQFOSe1$}X6HRk$qAA%ZEDJr1W4jI^B zGD>ElxS13p9bjJ0q_UkG}{yh0qyK1nGJYbvfZkRP`seK5k@cgl(OgD zxaMy1TXL=QL*yLS-aT;+_qJ4!s>2{9T(Tq9&SJ9Kc(#8_1Gc^V;jn|V;bdi>rj3E{G z-0mhXS%5Ty(HwwpP+8T<@t>`r!+-*8;qj52u$cSKad}CPtYU&_gS3w17P>In3dR+7 z^_;OX)nfAb*D>u!X~{uv_gPO*TvUu80^_x(ZJ;3)PaF7STprYnAyzvRnnIm1SqwtD zL0SN|`|eKkT3{`sV-Z`!3Z0M zj1&tCvi|!FuE579IL39Q38&%3VV1Hq;7hPe?whk}P z&3KHGx-)OPJ^(Nf(@kKUazj2?8-uzDf~FuAFnrTTns0~Q_Ls8t73T`glciLg4eflC z)XosKs)j?Qr>F|3LXnViQVAymBs@8vycSr2u<+n2C#aW9R%whINHIcygbv0JV$2q< z^+GZz2VhVixM(iJuyqyWvJ{jm0|9Dw$a!#GuBfTTsCd96@qRdB9+>k6oa9SjjBH2D zo2(EpuaWD^GEb;J2MisSSIQy+z>T(rp;c5%F#nb!3YBtbTVpzK_5XMBB@sb-FpHwJClNC&d)<;(P$C`i+hR&WqMC;2Fa9C zg%?=ovQ21u6FO*rie8yaiBUZoWrl$YJ(Pku2*9KdQ~_jx7j6&CEu$>6lTM-I78C`g z%Oe@UcV+kSasr;%1UXfnEM6cG<>-`^g(~D1DKWR$lHa?3uu;bD^`8ldfn2DO4k1Wj zOfgN@E5W-KttVjcamXV}oY@{GdBnUGeigu$b0p&l$ljx_fEn3^x+)E_cwxJ7gTL{K z3ZxP#o@AW)MpnLQsY%{k|#z?rRVwMPjf1>gk- zfc2Qcd4QJ@0-VH;!u;LQE?yQU`-jk}4UWS@=8mW@cBQx@ZX(hZ4zHl@L-tqrfJh`|n zT(QUizyYihm_^uvSCTd~>>S#(YWcdBJgfUb*FdryNNZyHIN}*?hab#L)eIFLklRkF z!5*Jmm34~ggN>Grr$E|pC;-V=mk>1Ux;;cH!GRET#@^J!(`*Y#G@l(c9aYv#+%!&J zZ*zwAd8=9%PsNx$!4&z8m|9sZ*qJ(GB$h19J*sL_TgdK{E_hMWt5#|$rFD`( z*#y=sG@I+eN{09j*$*o1KFT!UiMEJ+6V9|@@SZhXRnH2d(elO^f|TXxB9r^|)lK3= zRQo~>FDdy6zD5YiB9b&}tL(({i2y&t87RV|ZeSb2t~PY6-3tTEBcF-0Bq%2-l0atw z$p%cC`N*QVY+I|?xd*Q;MYo;D(># zQQ%f?1m72d8(F9-nrRBuuBVpNTv1WgTRgux)YcvVptvIJ=bbII*mVFE_jj3Ilp#IB z<8H?l?DbT`CH|_&j5X*I8jk=#ZZSz{yC(h=9?V=`dt&3m?Gi%|lV3>$U$E^*=VpjI z?fqHcj`=klVv#!qfbL-)6jNg=mq2(0PuftL0OdMWZFq(CL4Zz#xuaTr1gsC8sew9V zwrP>v7==nxymP%|0!8ca-1Fqq2ZsK|dSf$6p^=sKq$|1P8!bnP-WyZN~-njsd;uG+(6KlHvRy42|-cLykkTcvj!9ySL;)IerM0Td53kO-?5 z+j*?K2?3>pWKH(5qQEey2Nf}>zK7S#rZ~`%ZlPOaSN=JW*z`JU0^DPLG}=R$8RnyK z9A%X4hwd}QiX1V<8N#)c+^Zh~AvkasBN*+w(MJ1_3Rh9x5t^%;LSc1*4AM)%T;U=Y zLSq@-6_H$wIS>R0Z@>VqY*i7gvt2WatVEj7UG5fYuiXU%=`b%Y=ig&fv33NRyzevVqf7R!n#vjN z1NI}^AqZpHrsemx@A6Ri<+xoC+UF`4LZ|MNi?-qKn6QaVcbp@+`I~pyU^)Pppy)V4 z8ZvE4?s}m}p=Bm$W4eRN+pUsylXqiPAlD_vFr`2NjBOMlhA;&TR?2FuL8F6y+k36f zC+HR%vS{eSO_7r1&e^B9gcKE55yjJGszSMWg6SB8FfLqU)<{y^5z?c@H9R6WOCqx^ zBRy&dYzy#^tgKlv*3mL;t@fQ4FTKiYlmH<6I=k%PN9AD6^^%{@Ji3Rr!&M-_D`#JM z^pRZr&`0?uqt2u?Bf7EV#oiQZ5ZW{2T)WJ<8z2q7=eOfv9ynE8uZFchgom|vtBu^m zAory-@j&MAqcsb$7h}G}8m5tBFq%&7TqT9*m$;77NX}A5js*$5?O|a6kP^%WB7?w8F9EmU;f zvPwQl#~lE11UDdVzxkO@A;BFW;kKs3G;leDLIkid1F3*6O?fiZ_~6}R$Fgjt+CE$s z)zWiwS8?{p+2U}MDVEqhyeP{M>zQ6svcq{{US`TG2V;=YF)ABnt)>cFo0L@ z2t@(#myD>IwB8*{#cE4Xbt7;QLhx`8yLg^5e)A>X-uGqxAfnY%4S|Fk?N3zz5*L=r zjzsH;_>k6(1;8DW5r~L#7)ckb*>VQeXgQ=}X>ZOmrSQxOi0@E%cRQQfX09DUN>0qlL~KD{}yy5K!Go+dj3fcKL8*X;C-_ zRq(fgigUaH(y&K%)=Xzd>9rD`lT$mb3aGfb*JJIE8`g9O?AMkbBH=-(vQ;UWE5?lj z>1zs#D>9EvG0jsoD>41EnM04=6BJ?TDC)8#l9Lz8d^}LX(d7WLV6L+9bUr3iPDzOO zP+r(p_@$1}QG_b2N!@E(Z2RP@s=a`1_w&?*JYM2O2I>ogV(65t13^;;5b2E6Vo(|Wq!Z`qKgs@ryc>3+uZWY1iF(NB#*_v2@le$E{_Bzrn6vqV!<*?~!p zX;noyWl?kwLN$l(^@w+S9+_6P9|^2s`Eh-Psuil<>N;YZrn6!6fN*>YuSC=lO| zJ1W6v5B%^hyLx8VW07#EZG&WhvxTc7uSVy2HFXYp)^n7rTt-$LG@lHwWbg_H|3;uH zbY0J>OO#88<-N2se!hf8FQ95EUuNHEnERc5uQz|{WzrY^XCw7#%>gjIMp~J$zq~k( zCo6l}O_%e&cEWs1_RZ=aRxbS$NgyaIuHeaTq9Yqe_R?>YnsnDg8K^2ec?lDrmkO)+ zL3k??764$NyiS1aU*J_dx_B%F4HXXRT%gffhj=CKnp{J>EZ2{MsIxSOJIoK z9tqv#3kGfZa%p^V07+gTV9v?ClWK3tJragHeZCld(=HZ!w^F@KFRgCK&x*iYYbTm3 z{T$G$i(s*cRm!;C0N8RL_;nT!-HRzGYg={KNwasuqqu40~cDi3#5Gc+r_o zYXqOF=!Uo_#aP(m_C+#npY~~f|DF%o!odNs?GKN_AL(c8o%HIZhUM+Uc*Y%WHEU&#CJQH7Ujtb&=?)4Iis+RuL8IZo(iVEen|b+84~Ldp2JcBiv0{I+>{bKE9= z252%Q`!Oy3W_|3kX!shf+yL>;5oQ@(kvZZ%vEqAd#$yU&;*21hLl5f$#lc>^Z+rfB zZ`QWzb6Ca&0LeLkjTrHb{v7x7pmpx`kS{wAahde6p5GYPPlCv(QRtRNcPa)K(9*lu zGS{}E4Cm^f?~yD*v$RgkeQI;OQ-;-r`T~H9wS6&LvTo9a8E{Q@u6$nW9Gw1Io{5o+ zzAL}sm-mRxiUb2(#g%Qc&{0uit=Q`!vf{hl$~R1zH0)xT5g5(P>8%G7!)rAjKA_{q z`QqUwsFV#!{NgdzRDfO;eYJ@*blG*jeiX;L09F3^8+a z=m=#LCw}BVxPZOsVk{^{Lj}oEGI@y+TNjr{l8rpVDWPox7;{Ht@u{y8o0}c$og2TL zqRWro=@iQ-P@s|`3>HI)u9aUcID=3z3b1X_ZePyQ*}yy}k|LZY7`t4X#Mx;Sa2rUn zHX0SEHPLWO_DDe9RYzA!vjOTt%0&a0!X8~^X_})s?ww_sbYyW@FGOooY_VCzmYrW} zE^&zW44saoo-2dtnCYMeT!V}s4W~yIapMJTao3(DC>?7Zt5S#G>43DCrr; zkE3{oDZHakYH6{W1o94Ob_QqCjXP3ZjpzkuHSf$lYcc4wP2|o5Y+5y7xcK<$)WNpJ zWlLM-0-~%=AMo5Mg9vx8WBYosAm_Pww#i)9V0-d31q6yqQP~QT>A6r(8lrQ2qc~`S zqhLpOr(+$*q(!=yVkizN=Ng}RUQ>Cq6oz2ijsvN>up^$Jws+)Fe0(5xux0VG55=C0 zXZ*K84llOp$WsmqWnBA`)^cyDHFWom^RuXoF_IiUW2ntL$f0Fj)mhv#QropqO_~AFcDJIHp z<`}!pd9;zpbGdG+Udg`d+`PURE~tmkqGF^%J+aKDj-qFwyQ?Qv#B^erBi2n4KFZ)u zraj}36!2=??I5m+P3-~&S;^mla?^D)=J@fHjRtX)Rcp0-x;hN+NKRQadw*5K(A{0> z<=QzzP@;_EYekjnV2+k5Y!-}sf=pN}-V8IbzzU7(YZlg!4QW8&L+eaXt{ytf zAy7O?zDhH6-T(E}#AOw()(Uy??<_ek$la0Y7i&i~UbBt*qLEg{kb#C1#ALmFjdhgZ zUBIAP_$EnF{B1SVj%o#CcbRLz8r&d$?TMc2GtL@TzODLpcz3=iQuxs#=p0J;5ZOcz zEj8E8aJSjjK83Me^NR@&&cIaCmQbL)=86|L(4;qO-)=%f)J91VYwtCj{|?frgPii8vxNlc2JT+bir~ z$b95pUP7>cVC-O0sSATPQ*38tZ(uP60b$4mM^e5=Vi8=QU{=$s@0bh43(L+icVT^U zaGmrTl}<(;Nq*L;W0Zl3C_2OBJ6b%`@MFA*_kfiNjVT!K6i3 z^Rc-7=Opjh(6`DpPpU`y+e)gZQF z5KCiTrj&N`o&B=^a&Zk2+6{NNgrwA<wc)yr@Nm#6Q4Q$o1FDkaROnc3G+@*xixXymXf_W=8@<ocLZ+$gt)%QJIiO+!Y=gl2(9IXaIrR}2x?I`~5ftIt%ufLa&!1hcv2dJm zx|IWO3rP@whz0@7#_|QbLYrsP_K4y{p&RiYVG=b97fle<~c< z67lCb>659TRaIAr#Gxr6XOz!ciUaL=upId|F2FEGxEfY1r!0c2B!ss-W^jJV+K01T z8xR%ueN1@?_j~0pUN-yBUK#_5o$8u!lPz%6#;IZ0fMO(5w5R~)6)f)I(jRLnlp1U0 zNgFygI5)pHTY=98*~~B;Odz|zxmv@}9${+jJ{^g60of!Zg)-@E<0-pk6Ip3!wN`6TiL8V_$<{pU+U08_3W3U&`&>ve|KWnvI+F?is!Y)Kz?$dY?~h9T*)y#Kwh(qn}j ze*k{-!#^s1vM`XhRi0rOdyd#^^2%WuB($f(%cI5>IPSffHDn+KO+WUZY`Nq+JwWm1 z)CbOvb6UpPttR;9FXFL3000}p3u`t3P=YeUa<}mg14`dWMiSzuOn^|U+5R{}Z5xCa zUoW??$pXFZeC1xx87@>-&+lj5?50cOpzLFI2GF%6hPvD>*O1ji?U-(1vD)3^@@>&2 zF)ryY`q-R*d^)D{d_;R!y4HC8a-qrRgbB;x-2wpKG4TA0BX?EMj(sqB$KlDH2f7#Y zsYdW{HmgkU<9$$jwde;c9?n+nw`szZ@T5Gtu0ypL6NlbqjVA+m2LL(a*N&N3|I!1` zAm_Ya-}0CKyZLVs^kltm4(0>JjAd?;o=w zY-gHwc%RK@j(=MQmwa2t;WrC_klK-~vD!QA?rM$fAxfMsiaOsQY{l|u?e_M8c9};b zgrVMSy34Uq8^5u2+Kis|4z2p5%bHLj|}fbrEV0j<~(;JTXAn4>@pxO$AdQp;j{;%q} zU}-F(ahwuuLE2`?yDYOJ+7F9jMh45zYs3H9?3yt6R8}>0&?rKR#}RQCk1JPil^9JI zi8qFiv`nWq_NCnoayeoPtB{48R%W5HC zBknV@WhG2FNrt6%>?|u~YFxE35QNd%Ro)GvN*z9|ss|bp&0d=UCb6!jR06R2t=n}c zEvBlpI6k8bC;WZB>aW;TtI1+cuS61M4nzyM1$gH`OkJ2LO0(`n({0N{$scs&_+-W1 zZ0%s8D~H1HujK8CII>g0C2Uicy{k3Sk_ti+ZXhJ}NViFlTnE#{^%C1DO>!qY2m@3V zFk(uaaEFflDz4@QiS;6+nU^y+y6iC~wQV-jTN{;Wibxqo_m`PI;9coc`rz zS+s;#aLu-i##*Xn4Hyk8*2kvc9o*t=K2cqN`KFYDlbO%JUVF`JMtS{&-1sKC8vwB4 z{r6YplDm5|2BTtaTg&h|b>vi8G8REp!_dKcXUj7&$cloEneZth5D$BWFR;nK$5QS* z;YLI>j88576EK1CrhD1e>0A8V7qIV5{hzA*k!=^JKfZ9~WpV|1;r`vvE|a%Mbj8{R zlnl#&jV>b&ZDLF>wX(H8zX4_6Qn83h_nX4KWvpV~BJ-VpzVpw-V?})QPy1s|FdddM zMzW1`3yK8l>jnM(=E^iwWF+*k?&0))VWd#_m1hmp!?%A#`nd{HOTZkDbf z!Z;tMEE#{GY<>DXGy>50?#mI(?Dqc*ny?dEGZa}#!1amcQ)2*YUlaW@+T8U9< zwv?!JUx4rXL|7UZ3l}SUJ|kK$71k6m;#dQbIr$Y69@=x>d1s3%->z~lBg^+sPW{}} z*ro{$_qAEfQ1_kbgQH!;QtT=3vOM=mNv@EL?$#D;(*q2M5q)ePKi|V7#$l`;7wjzZc$+gWqXKj(p(|r_kwR&^lUPD zqq_E8FNsuMjeOR!c{WZy$H^`h`*m5i&J+{6Uc0H4wNU`4S{aM{%?8@>Z9;5qY8}N~ z$#IGDnk%d|{7k+SJ$lL6fG~FUo>SZNUvaY}`0qcp7rIVYzAQ_PkY_mjYDZ2~zf%vh zK95g`@3VNhWL&1aFgNv6U<=pg{p(K!pd+vD+x{^&S@q=-;YVfWH(lBp2GPvS5ZBi= z=?1l8N(Xn$Zl7h&u3GEro%sjIKq?RnfW$Ua5Q~6rcFtk5U+(WNXpDj?3ETgxI-4U&>c z24oE>hg~DJ5CflIPuRKJwy~}|OpcqYl&c7U5R^Jr0%BX=a^xC%+W69)S5(AMKnZaa znM`R^5sPdQ$z?8f`?W{hBY|gJc`MZDE-#ClcG-XPb!gKq=WpM;Zuu(J{T8#!7d*FZ%JS}G zw3mt{q9aaRYa0RYq~7*3epl^MB{4X5l){QG1;(P;hX<5~!L2oO=@o6~sGm5iSf%(Z z{T_Xl_KdP}^4a&h(|4Vz55K_Mxr4Dn9o}yA$EOhuF2};aPOsA? z1k{10f0*u{YK$2kB9J%$@T)%iXHpQWJ;%uhno4SJ*s6ER6#-6C_YRgjSKXI1BwB4N zmW(By?GGB3Iu{x)RuyHckn_5DpK0AxOtHY7Uo8$9umb@iM zqy34^>h?-S->{3Z-H3!@xC)R(gTfblmo3%S)5oj@_*}OGb zMv-M&kd1hg#hrGo=(;EI8{ML@s$5AAVx=myRWXWno1zLux>H3@B;vdC%*E}c{26QK zXc8_L3pXEf7ccU|9PKBj#i(oIfn7$O(%{XfOi@GjiMw05V(G7DxWZwbk%RmT9_lSt z`wU%T%GCW5-o7+am_B~U-GbHcm*Z0bVDod@ahR}0Gy}YP!5=jS;4wjP1s7lILkn;+BN$nc zDJSvR;aDzza-MYk9Il2WcSSmM1zBoz`4pnLu1h$I>^{g%2RXTu;X}zpq8RzY)(k=6 z0L&EWB9H}5nAnbYWm5l66j@O{GVd|MP!Ty`dLMO8;6C({9h*_TlFTo?wp%Mw%YLMf z&x4SXpvF4uD-_s}$MR@d8RA3l>73PDd0EM_?81RDsuFbTFx!gs8uv4i)W~JaV>0bj z)=h-!+V&8e(iU?tT|a%gV?XPaJsrOzyMo!>3#J~0v`k<8*HL;DASsu--cB-^+POOA z4Y$Sh7sNx%y*9v7Sh_IHQQH<<&24h4ddiS=DwOysNxYFPBC{4HJ z*6l};Q_XPPeWZaEvz*Q_3l4cZ6(psljkfV?ghD%s&{%53I>ZI<#riNXrt(dU=aQb=SU} z_|J9-62*Zys%2^(2`S08XVma*qFjy73hHy1TIzx`x7}1lWGfPLn`sa`{o*e9$klf@ z{1o$ISr+>tk|G<@wGD-~v6PU@TooEgZ&nI&QW-2u6o*LU+vaPVw*l%%)|f3)T)AgO5ZO7wF6Bmt}dZ_ z3BZ|Alt>HvX%o77o84Ej*kp5X`U)&TC{EU`PmEpX>(+m!S?~Ei*6uvB)FVTN59AvE z2-%`(?rO=%H^B@pN~Q`e0GFmjQw57+vx2c#ay}3Y^)>ZvzFO27=4dL7^1a?zDnyq- zc6!-!3EQ*M)~2=2_U=GISxwkt4mhRfZ+EPf$e9SEx-Y3K>2ilu^LYNd<7jX64LazM zmR2DFjLMxP8T~cB^S3z7R!e;kD=@tqm5hmqPKgd464!(_e)=_jL{|!oZoy@Qh)5jm zcFEFdhyK0Z_CEfSh`QYAL0~+QXs+=!U^Vr5XkWWKleOE-^5{JzhWO4Dzfr;xxc#Ob z8Kxj^+7u9V1G#>Yv&)bEQ!Q6kgq?Mdui55i&f9exc4y8IB|MbzNM?FeRlaBH_?h6q zw2yNB#dQ8*&xA}o(-NJQNxRh!ahxyM&UK3j@7+(-m*grj3sXQgx<8H4fBaw)ojOr;F=1IO&I9O~ecM{@iNgjjP4l zD8CZz9~WkIYh_tAms%CJT`We#&e8`d%1;_}Ot-@1EHuSfH5Z4aO9-sXol-lXSYzvP zVPX0mqqQyHE57%538Ys`a5+Lk4PfI(WHQmZL>M2L*d05t9;*nYBQvxv>Xr(#l*?cW z38PL{ghLBDQqBoe&yBMom3^&NJok-@-|QUmcs{b>t0ES9d@c3;YXM_P%zC5cf^r_$ z$4FxXkxF)dRmms?C%P`T*i$*?C8Q3MT~mRhKvJO%r;SfEpDPrLFPdN1CB~OgIzxk_ z$#0tGFM*z+U(N5{9&txy*cZ_JF43CowX610in0)GF2A8#VfP`wCxmCe=x(1p2qR^1 z(>Z0^^sIZ1Jbn$4#zwEHqI+1PE}^Mj-*+!$6_0Q*ITeDXIMYf(u$A^DayPBLlqE1h z)%tGPk`S{m*AH)X)4*lqnCTnUbku|#=)^0oO={q%*KwJGyHssc#)a3+9BOX0+*uH$ z7A5mbCsRS9P>Mu!eWiu$!~_8nMZ*ryzUP;>jhjCmk%O2Lk{DMrF(O1lTsd>oDb>&n zNIkW(h+u+31IAPpjY*h{ZNn2rL!gWbH8&mQl_inp6j2S1>QM;aFZ+(=ZOS_iBG}_W zu!2Ji^ByCxHlTN7l%Yln*E8a^duIeTRbEmnTdBjPWSAn%CT?R#xLvZ19oY@3MbTe*b4SDVQkXy4 z%r%aif5yhEOvbphL9;WRCuA#ixpFnuip|Z|aOeOuCE8TW;f4h>P8=MqC2p1eR(-pn#7ZZrI*1pXggV##^1Bup2Px%fR#%k? zNjSOA!o#&pbp))~XKe3!&MYvj+!Bt`QI-%NVP!YlCc~M*df=OxL;qZzQJ+)qEdR<9#fNgoh$(*Ygt>srH_jI^Y`;~nTPjsWp}3x2 z-j*8A_-Z|3{B(52l2c5#t`1c6EB%AEak~*P3WH@Wwa5Bh8ymG!P{{`%==2Ap%_`|G zHacdv&Fx@c(`pPsEQ{4lPWJW}!n2Eew&JizJ@->U^7U6m47TK)!ZH<+C4C(dn zGJBG6CxT*B6iiLVBB`{5R6h|7C$-v`M8kdpfquVi0zrNTnHVux=XDai$|d`)xeO zyu4cHP<^J@$=WYtuBoju z@NwXyi7I9%{p^ghGaUOHzq$4h##~XZgFjD~kF<;vuoUS_Glx4!&wX6?P8p#(wy&Nn zrI)DJ=vuflJt%^;gOotv7JO$;n#x7%p3lzJL)?4g_tHs>+i~rY>gzKtTnmBPtx?@M z%CI_g|NqQUqsP^{FXR-CU5X}Kt1J6eS#INXr|6z2NXp2AWz{Hl9Mm&<_t_$H_wF)S z-l5J?UDa1dNode53A&mW6A_C^H=55@ZOr#x$?FU1BIm+V8T3K#{#uG;T3b1-3ZypA zR#ny&?NVZdxxtYS*~(6y$K#oCKC)&Z`@ov-IT!n0XoO@3vdEJP_|?Yab6@Vk6w(sN z;GK*fE1uh(=W0c|@WwSmY314;O5Y2=Iq*W>N7Apcv6^;8>_NTsHeOzvGRmBW#u!+V zh7CRv*^zSQz**Wk97_zK4tL>h<1yHGzI!7>p9&PeC~G8W7QG*JDuscyUT5>+a}Xej znK7Jj8An)D+y|7!cg74Ar=uzn7Psu6#mN7RDdeFn9$uB6BshZp<@!hMrNc?5VsTD4*)l+pG2Qz*7 zj~+fyz?P=Xr-*IEe;;g-o=&&x?W0B|@EjTADJPetiEZb-OyMUIX|&l6HGY`AwHG~n z9lUltFJ_}q3hJ|}tHFwPcC5DMXUhX*o9HS&yf?gyAcwAL^sb<$UDXTeu z4!~`M%}RACS1dZ&2(^t^zb-!x>K*GE=M^293ImE(!4vkel{c{#Ti+NH+hgn=^k}7* zc3G)`!|Npo)my#J3!TZWYRl+La~;atip-((fvv1kLB>Gm^o(p8%eiy*L$2ml(s?${ z-Eyx8S4;;ZUE;LIMs1A$z4o_Pt>@qWG9>W65Vx|`>d4%QTN)EZnq+FXS5nSt-B;^8 zSzpGE1@BY)hai|T)m^S+T-z@R%v$YS39UXH3cx~^Uv7n$AF2Eqv!GR)> zN+yJ3K=O?NhHwKbecVM15mmtR877R9+IY{}eeuM&bh=bH{=#?toaHoNev<-`I44Ef zT?nct$%E(i_SCqFrv z6o>fH<$sNmLnuNopoYH_?V zlhytUlXOf*86<^^q*L=5-IqKGF}MXckgVml=ysWMACp=r3p*xjNCYLG=>ewHd37DA z;*c;IK&}vwPl&;M;t?Le7my=U=F+V|MR`{=J(Oq-4mx(Tg0D1J9a?x4C=i7_IvKue*^AEfG?J46F9NGi_ar;kq7OgG#rwmUiJRvQniF5!;X<1wFC zBw7++b?IT2*lZV1+oM1|6c^dksltqMZx(OUJ4<-PJAb*dE-bBMGzuY2BLM)x$b*uC zyM_(d>>#WWj17qG_qkJd(-(_xJe~b?nsdx>E0}Gx8;lLW9fnAU2Lfx%bOyc7pr#tP zw;gJBBW1JM@)To?GAL=)_GPqBb)hV#i){-s?lNG>$@LC$G3{u0WwYa`_Q!Y{SQqp0 z%$t~*J#Ay=3bY#!Z3=jEyg9n}{=qL6y41~;a;sy(Lf>HpZL05H;ndv+_a$nrRa5|l zAW_1`X%qk)VFBcsnmik^4(@oTNduGIR1aImlUjszD&mZ2TDASY!3!?eY09vuWDt@N zIRHuk=ty+xh=&HBT=kAji=xr|Dpk&(1_%L!wJ}^cK;$*++{NOtKsG%Jnh{i1)%jB9 zaIL0}G3@?B#mrXET=(_2w1nIpBo~t`BI_jl+T~~%+qh#dG_A3xII{)jG@?~S0(QMP z6{XZ*^C4DEfl#a0W!3Xt{PK~wCCT>T$PC%FD`5MSK!wqjsonj=_|Trv3C|DeUrf<( zY07TnC(ntrbinH6`l3e!oh)j$yDG(ur%3V52fxopqii!!NvRP~=ggDB(+LdgbdDL^ zUL=jJ2m8P5AYG1PO`zIhUXdux+vJQ`$6HrzPMs2O48}>ECSGOqY+d4d3xbE1n zd^YaG+wVU(jnkZO-oJI7n$q`?&fGQnq61o6dxPFs9NXAKAq=@IP+HQVqdv2bz#@Si zk1(!HjZe>_%ABmxo~&{Po&XHV8l@hSa@>^NE?ZV)-idcP%*q1++rTaJ%YLEuFUhQ9 zmiR+?;SJJGlc->9K3qplzo0PMwjgEXZ8PDxn}E@Do970XP9pLe)e%Na|vC#IW-fMJK*}7r}Jq0y>}A2{>qbxB(0- zPEF(b>aFSEK4em|dZlIyK~a_^8QhyeHHczdrac@%?p%!eNF_75GQ|cSlaFfhWFYvH zf8HG8>;X%L#L2)v2Mno~jJwRswh|hJmO^&s-^Q?vx)XEAvn4$30%DhDV`HCNBgv-&f%u%FllYKhn zuMhP3kbW>bn8Vg#Iu|`#``EnqYoXXZ%h_wkz0zmV+qNySO-QL~g#qTuwwc{R>KJ9L z&aLx#;p=1cqucaY;q#I05sEsmM}PnPrpvtEIbWsRcTioXINWi|6x#UT`}@bEddb4cC))4m?;5?5UFh+$(9duA z+Y8Qx)r=G%ZLULot!M8O`FiKrOJp%UJneY9H~skL@{9fTBklQ?S?V>-e%#_F>90%M zT=`yDmb&ue=dj1w{O60~+&u}Bb|SL(CYd8WU!c9vdyr+j8_8V7-p2Zm&kN7Z)MlKW z3k**k-p7@m4;imJeO@Bj)aD{Y4k)@10$q&)m1KS`L8ww?Z3khu)9+Y_CiDb$CxjJicG}Iz3L}y8T~Qqsx1pE!6xdeck@PkUdoEN007A z>0IE)oxQ6w(xBA(X?CYQjPnKAc@H|K&9zP=5Bc@1hv@hFyl>Bzy2IBy?>;h#6s6hA z+|jXqw?3ObJ|1&kf03Wxm{?@?+8I4kd8hBy?BW#BtU*1Zc9p6RveW$l4+t+Hpw4OM7Mu;Zd zPWa~yJzkBR2qS?Pr;f|HzTO+JixY8;U5Xh~$M^a=P+vB-1r5k}_jI6{yV=gIsXxy3 z=+{xHOE2>(`u(7+aBgG@q6aFWK;C*lzX-MO)?L*NUg@JM;6=*(2+Me5U#1rTPE-4b~m?SlQu19ZbJ&#`jvT z#q(t0q6p+hZ|8#A)<+c1h@n@|vuZup)YsMa_4e)><|ig?szxK3YTM4e$@}MK=WHYj zl6qP8xsrZArR_D5;V2%(r6R{3ZPRDWb*ehkx;($%YCOc(tlOt|@Dz2bQG+qQ8ok{j z&N<&1&6pndOYQP5>G@#X?`&GkXJ7D7qE#;iHDDk@STyCyjDO(%#vFbTNn%iBx{I>W54z z>x^WC?CLj;j40uiTcrVs2NXyF0G$vj3TY0p+X)D>ynM?O&XDr(%ExEQj7n#2q>{YC z{y@-~!w~L)l(a5tB`*NL6Eajr`CgyEXv%4u$)4oo!!P#Cf!}@I+pAJw|o#F||4?a}}583xaJTPwrU|nNC5UtNvy{(uaWT0YK%8ehv zAT!yFQA(Ie!|fT51RbKvp5%$NjDSmueGGiW6)2Rk3I$R?u=+68HSLv7Rg}R!tB_h! zZL7_o13Y^$!s`fpOVLTjv!U(wb#9HHQYZx3 z>d6{(*cmCQ6;A(rs#f6x189EP(AY_^qfMY}qH=gK&FyI^Ayp@-6~ZkLt;nUMHLS_;tX|9lnA&5_>&Yfh|43N=|g2xU&*dc5Jflbv95| z5*Z{=J_1w#AX&;+1$T_tpbZ8TvZ7NtJ{Fa#t5s4+k|ffs7N&bwAtH8>p#Yc!qm>j~ zEF809QgrrC3E36Q7&X;P;N_1Om=Fz0G9d)A6u)>5R{0jri#tsO-E-NIYV~bjANu^) zpMR!H9b?Ows`2vfyHw{oSgH6d=8jg~79EwdQwEo-I0|@GU0{Wxci=}j2P+?k1mWN6}BdJxL8aLHwt!m&w)25nHu^YTZ_jHX~Tiyl~CQ!H5~J>DTw zT;Vss6Ez~!Z7a!AxH`R4$ zSkTEBQDp(`kmKVC@$a%oPRlU=2+QdA)-n0XgjDP}iRk)-Q^Fhw2V>ydIh^RSfoX?0+bLPm4e0sy7)n!#U6Na^QXox*rz?=s?Obp=OVX_tFO$pIunzDC) z-0&xUumoR&Cd2J)Wkw+@FN?aVnw8@S5D@^lt5u65FF+6|OjXD>$N z@FXzUM{o-O*xdzgA-J6}CE|kxK1(vKDJ)TYfF2tX)y%r9-9_GqWZ0>WVQCW6q%zuP zw*IM_d&A@Swnz3OoS{qJ2ZE0xF_c>sV2|6F5ZN*5PoVmwjpxJNK( z)kxnT_s1tXujqdCw3yq1*=BjO9HXXKO;U%E$Md3RnwF&0lC^c=$vfYWWK{97-kwy> z_Vp5cP0zLYpM8QZ#_^PQ^o8uG(GSg=_TKTzJdfRIWxF3OIV^%OY>KR(qH_~mun)4r z+TQE&L~};<djMa5_*kLH-9@?f;PsjQze~xpseS?m83FE5CAA7#|7TCI^FU5wD8;K zPx$dsIWL}G&73iB^=~?FhAzkxj^posE}-Ao{ED#U-2$JRWJnW zP+I4*^KcT~qOXg258mrm7AI|ze)>~7G>_K3sAxF82kY}krI3cZ$qeZoQ|R?Ljh3fq zeQmrrrl>~MZv1ikoThlv=R3lMM|?id?c4mbJn_k5-m5h*kW>r#^*DZsQPe)rU5^#^ z(~%ZBZ$4u5%#y<6b(;Ty$Qq?gv$%E9)rKE;1VFqZ#1h1r@ z0MxQYp^OpUx%i~7qA3i`5MicukRrd7^R15i-tYFu`F?V@vzmU)@qRoLmGP=4xyzd9 z^ZujwGZoLcyZx)ITpYy$R;kg^@h_RZ>pbAQQ0W=}@Xzp6q}{nF_hLR6vnG}~g#_*< zkK1wHUgvrL_$5yI>%;QTH|9R@nC_GWuYZP&jy^fz+l#4UE_|=Pwre8DvS*&bn0Y8v zwJb&2F?#xYp6%^muSI-Vsyn@LIyfbcdE2gv zlpjr*5)_kZJo^Ohg?U)!maA7A9W%G)&ZogCxhS_!w;KZ3#;$wB`|;67UXC^|jFz1< zjx*AH+PB@22jdoQDM2N~#cG>Bf0Pk&7 zKiK0T8l3$2|Ly-_(yYZeRolnpzlV7}o{)Qd8`tXnz{`~_7yp>HlTYVTpK-Y?3$k>9 zFr96`UcZBzC|05>BUK#l-T3HP>1SG@@2jl`(7_y#&S>2qXK3myiBI*sL~rqFVpAAG zovSeo$Nl-$^S_-RMQ@jXIU~V!(~@^MqIsc;J_=O;3I>00Y4R}`1!MLM*tWUT+1Q=Fo$1QMR7P}e(uSDjK-SItHY^6DI~d2GdIXN55x|p7~AiICFG_D zQY*0=0IEUABb!Rh#fTBGaD(tBx>`cE;PO{rV-$1GSPzvp)m6qE`mHz8vIXc0e5 zw3-H?f-8xE z0P~oW2~Tjx-M*W>L==ypIH!! zJ>0lGKbDpN-~(g4@ML-ReD=IEvSlcvbl9fzBVf8v!M2o*>S`c&A5tfaa}J*fk4**x z1h*K}fU9-qAT_Jmkh1xFrsxI^Q0x1%CL~aLj^fZiB2rDNQE3WHbyusNY8E@XTg^O0 z&KMu62vT1H3b{@P;L_Bj;PWIBMgf#A|ALv%xMSF=6FpvDI463f0WA+Y}d}RETOOHE&lgWVR${oZ& zd78Cvfa;8X5_dE2@-%OaCc%W*CxAwxO53^{z_JV7An6wN5z_%63}VuN0`BEUXG5>H zEoc;DC{JHPUeqvng}(lQIozda-4cLoJWrDORJIu;V?$m^%rTw(02tXR41h7!2d2li zccCpANNxr53yx55ecHs)ktZ-Oz*DwNS3O#?MgZ5=t!!Ha_o^RgYd{ewn?L~E0mThM z7C!?(jInTt9QYEiF5F_DyWzl2;1Js$NVdi&#wfFl3pzZI?q*(7ID?S3+5rk;EOwHx6Hs*=c_>_cw<%_On&6wnGCDiPULaxm0@$>&(1r8 zp`LjuM10B&rPP{<_#oufB2w`W3cxl6q)o-CmNoj|=S;A-z_Q?-5^J4u79u8noH zsk%$&=^e5LZ3hIhsAQ6u-#ZiR2+~#mVU}SV$NV&`+{G+Ck68Ld*peRAqO zfGLOUhZk2MM2x3w#E4OSg=Ngbm2;%y`i$G3w+QwTZ3id-^Dx$!c!vSDCSVdUg#t_( zu%lL&V{y#93n$25V7rU$#GO0}xzUqv7=plSYC)JIvvmiK-f(8oC@=&kGvuD><`%Ca znFL~;t+qfq5NwWfr)HO`mH3cd!x2Wiw=4o^e_M{9RayFuuH3-C@Y2%{-XGXf48?D1byDf-^^c<2L1%GBMYC~>Ikun`t$y)@ygvNzI)2wTy=l0>a={&a+aw_ zYJ^&}r{yxqvC`Ldxz|FuXxhy_Ugvv!UU**qj;H?hjywymjf1+VdNqfg$-SQHzM}iR z=e|&fs8x23{gx{2o~?!tqydcjBdk3!qcxvq2{<|=MJ?&fSQnJ=t+C$Eh>ugz=j@9n+gT%Pv( znvpB^C2o3wbD!&aIsQAJlK0AM@N40{6ECiXsq1jv$Xm61d*x>kUg+)f_w@C9mS49H zw>oMu82w1~)!ui-{rSptGGCs#_IzLMsKxthi^uJldTD*U;^z-A7iCZ5XpA{mYd<6G zeXXZ@we|HFb7s-^d(`9Q2|o11uP+qe&}-bBPW1AYA5U>V?zTOaxu2H*63$VI=D_Z_ ziFGzVQNU~1nzW6#6>(n7T%YOl(Y+5GIdnhT+iTq0%Sql}pJw0VC+7Fsg(5weObKJ~ zTu`P!k%-|NHX3%qzx_O-$J77*u=w+f<-d*y=W!n&8-2W-ZKA7J(dmmBnY!-{? zh2`C!SRbGHb2>cVp8VHi$2*O#InK`{{PB8{dwpuh(+9p*ySnh?)|Pi!HRiSFXNYf$ zy?#u&DA)H^zQaK8Hxjw)C}y`i>}vaZM>FdCr^lO(+NFS%Q!yKWbQwH`GkIc+UI*u#={Vm;u(WAu9lThq9Q^@Ac3K)BDRRJ zgiA`rcSjfj3^W^68fH6)JzOVS<&E1+&W87P;9FiF1CTkuR=AwmVzt#8s8h9ygyK98 zvwF}8EC}F%B$5DDVS>lxX&I1s$>2V-^)4v_#}Ekcw)yJXC>Hs|_yST2D*0!U5ho-H8J!Rt z{8sEjq8jo9L0CpB>4y*qSp}$-E=EAc0#`2t1~Uawv(*E#r@9+CdfONg^NIMbN@Bj1n&D%l;>nHX$~@q?iOD(u*}^`?iNHvSb8EoT0bm3vylhy) zQhi{Ym{~DT{tIvcq4*vR#uETC0FWyN%n&_Od1laa^Qoj_pVU*}O1000kGY&O!x(K8 z8G=Yr;uir0;1H)0SO-3YL|1JKGf|J6`gku;FPWkd_s9Z>39ZU)$-H`xW9RxAZ3EZQRz{>II?tIwfI|7LK zXlQ8(h(GLL0(8GgGY0_0lJTq&-qzP8=%m~ErG?n!)@gglodTGHP@C;;E@$MZ`I4b< zH#-<}NNSl95IC$XJ2NR3Ojm(o^J^n`z}#7*r7vOas_7VvA##dqNG^SIYrs-Hc&c4x z%%y6KAG|0H@{~-rk2zqykI7~k&6xn)qbhAVY#|83K0x)83KgL52)~zHx_ZX?jO@VH zRJGwLqj-U=!XP6bH9)#dB15dpHM>8?JD1xPx4ypUXBoH1{Rq&Lp*e@9b z2KRtU)0O7#F(RUXry$5EYfl4^Owx01F3eUgS~iwN-IQI231!tB#(vV!7ZEarCRSxj z+5F>mm&*u+#-75A@s1A;=PhKPJh!Lf?3Jg0>LMftqSLfYLo-rd*e?Kp8SzC0#2in_ z{qySko^a(1OdgfdDPS;L3fv(XazJ9-e=bq5=T8ti05}zMt58%WSOhGaMHp35l-ap3 z#+n7i%L4(h*(J0|Uf9G@x=z#LbnMK^rJS+I(vR47io+xCjc7LwGBd1^~psq#gHS8TMpp z)d{jiLM}my(gbmVY1YDX4+RmQy%L#$lVZsTRV>M3Mm zoUf-OV4$w*ck~l6^XN%))C&Ec33c$lsF)xd1Xk$WvULaPAxj9#H&qr`k44(>qG+6z6)8n?df8bs0hGm9YZ>8z1^aBDeK6cvGaWE1bUEs`(hS$-^1O$>@y zGK~1Q^#Oj56Uh?TJH+*k?CvoHjUrDSrKwazc7hxL_@^x}xEJw4qc#cnG&48Dwy=e7 zx#zw|&d7Xl^11-z%L64?NRW-VQ)LK;;JDeD&|7Cv(6+W|fQt!??SnZOin5EC)C&p3 zA{!vz&whA%Zo?4QcJk6Gvx`&wp-0NeDS*`z-6qe3p08hyP z)H})6bqZuu1HT1~TQceK=2~Os6Jbtvm8A^yu0sjn_%p!<3%~t4bL8Ups&QJ0dS}UN zBsZJGlrX|r=Qyoa{uIG_+#uJ{wU{{$-OW0`mIi%$EV$; z4QvkEZaxOT?%|p*CKK=VOQz^YJjc~7YAdI8vjHlP;=1CIEqA?YlVh3ZPpth^(01xJH%4aT;ry~ty{d_2|pef)ND@R3l~%obzb zG97t*@S@^~%jEr`1vv%jQ0CX=SXZ9qzVx%G-qhh42h zRr{w>AZGM%r3Y2`h9F5htL>qPLmiBUJ=l%C7j8W~(Z_e@^}Ou&hacegpDK#Rxvcv; z%ilgQB;3{ zS{F&tFGg z({kyU#baYaYUZMQf~LDaL-p-a^u>dD*Z}$EKfQ-80fr)EIAKUu)W+&;Y-t^*UR(3( z)}xX!apiR!c#J;U7XU{16j^P~;=CVLOwIdtn`>He$F!RtakrBrwv#a5x7WMB{RGc)h7ow78%)-uVgj$K?tC z`HyJst$Jx0#m;@M^Y1JC=Z`$EVFxQQ;bV=uO$3ds&p+kT0nAUIk#QA?TV&+?S zI4_RpBR%r$cxOz9&ur@II(dG_%*`9xzx8+F?;LYBnvW}d|4u%SRDu$W^#eI>d(%q4 zrQ9#~wQ=f1Q->7Hpi37fs=?d2(4#C9x1n=Lh zu-A6qPoL^530)Cd9eQ2*9N!6_TbwNNtY<#Y+RLoP7&;3#P4AU4y^ZJO6MU^t_Yq@* z1ZpcSL`UfJXIC%%W+#1-E_jGO&)(PH zn4Bv}EADU7GwFK#cYVVAb;L}E{)|#Xu!MTlE9Vv0BysbOU|4hbXo^U|GR8<1pE0hp;nVbkvUT^x z`}N1qSDtE~^V-REaDERus<3Hl4YXfLDXEmGM4i}6b0}JjZ~y?%n@MKl7amdq@I{Um zpQW*VCpyXGax~B>^ntgT<^Ue$Fa@+~Vo*tP*NkZ^;FEP+ZZVlG@k`th1y&M(Nx`xKvYCXfs$0%t&&A#Rjsd5}(8= zDJ1}a`PH^}vm4zk<_2+qEoW|%aE{m$YhZ=4>Z(DYhk;}YMjCl*)GVgr3g&pC5ZoS~ zWq>NRvbI2qZEQS~pXoV`AixiAu(Uj@T(%sozU~q6OtaMyh2WTEJb})w0XRF_jD{d0 z7L_M3cG{As6|lr|c8^1c16%-rQvl{)Cy3e57B$3rfWTB(6bLXft`Z+4V_hC(3ChME zcrq(0niQOJI!rxoznKBJGwTE;aB;8wi?1dl$=WecR(XA)Dp$gR#yxXCOf1%n4@Yv+ z30Bv=Gg3cOYx2gGiaa)2yLlpdi!mMLgd za>B8o63KWh(_d;khetMi5j)5CKF1rPzvd_uP8b9mD3lNdfGgRW;dWWIN7^(~{j8 zIK4G(Veg$?oMvJ6HZ7U^Kk~qi4T>yMB!WkRXN~g<`(+Y<;~+uw8&AhB_cS<7&fIUB z`f(?#g0R~g0vq4TLE2BHkfg%cwPvMz4uVByR$)C>)`Bt@%T^-o@nKNO43))M+_b1- zajrKO)WKmN^}_3XOGL0APR01!G9F#s?HsH3w^u^@04#mV=hz@oPKo7Cno z*J5$zFwL0UUOVgwIgVnG*#JOl>8SIS3joi9i-(5FMpFkMvwxCySn@Rw*JgS~bhCR7K&`D~0Eo-guo#e%*!A!h*{w1T zT*q|1c71F*IRCi}*74QDG(*kJ8mqp}Cu~;=&yIn9iT!|T1aTyZ^m@GFC1Lsr?R(WF z^x?nyIop9)QDkL;As>MB#H8`oh>e@#N9EX528A%jNj{=Eh(L69VY-NQT|Y8q+MnE8 zeCXZR^uSvf3hz=;lsJMZ-bCtP8hp7bdg8g zh41S*p7&d?;cs=BW`+Mh;=f3j-3p5lYXa8JQ8ZDw(=zLBuKPZ|DpvQBbWWsI<>9w2 zQf2Mk!!{*Ozo`VaOTj)Xafdv!!OD)JA~+YvGn5-%_o89!B$7nTk-k2QneRONeXRNJ zdhy;0{%aHS>nqGTvb4z3_73MlyzH|)CO9Upol`qd0K{t&Xdo-ZDKQd|jLq_Xv3_yK zy>QH`bvsV{6yd-Mk+y0w%NZQ#iX>U+k6)4wagKXhnIpAl+dIkna2;i%1Z4`4jJlB) zYcSS$@p8?N_nI4N@(OyNyt3)>wLOjvV+ZdCZhxjNTOaEzrx7s zIniTIK0AdsOr?7GE%F^B#}N`!#CO*|A^uGB^-zm$&7Oz-S#ACCRP!>=`?uw{D1U5m?izmPUti+Ch}j*s=Bv&(G&$UzOHMSUh(pZl^wuN1={k zZB+HI-4{tHgPe$9o*m&b`Izbtn4V;5S#;QM+cw5HgYAB_SseGxD`oqN$&QCFPKZ*wG? z#crG2b6Jl_`{-v{y?vWHr}4T1x{Y4ex=H1=ij-wiDfs<}acG(xn$lX-W@aUA*DYpS z&&}fcyE^2dp0rbKY;%xQJ}ACzh3I=y-;P$_#jJV#68qRkkJNU%9-ce%Pc3-$QjdqZ zpZ}lsuS`?1)Ktatu?Y`~x?>(X%KCj2{r42TL1#@z)mX2v zJUIRpMxOQS-LZC#_Ws@R{n|9QCYk6xougtN0RE+WAUt=Htd|rIU(tsZE3$5MZz7|e zlJOqhbzOkFV)HHMZCbs(>R`l(F$XD*Fc;St+`gaN<$?L+j~6s-iDtZus?9!4cI)od zY|zAV#7Vv-ugNJTD8BR2_V(v%a-Z-nI)_D@tFATx)J_6!EX9xBxJ~Y#-yNY5xw0tV zuJC&6dRPnoBT4z{fpo>nb2qv-N{&Dl%#((czx%nx&+mWzp8n&%Nz*k~JHOlqa`DnX z7SvW za$8JtfB;xPqRAzG+02|9jFo3L^NRq0X+?ebvCz$y!9~zf0|rSuFupxuoDgmAf`D|S zVNd~8lVYXC@^{1_qz18+^_Dx8zd&S_E|$e9h|87@hHN_!chKjiZ1m62qG}^LRCgdN zDVZc??{(%1SyI6Sn>;*=3+R$`Gjl&nhtWCB!b>C~;_*P+Y`Fl1W{>bJTN&vtfBW2ZpJ- zM=}8TiU8U&-B;^YPb-G5CRUtcJo?qu76GS?Ms@N$-LQI(NsvLOP6S{E;QqWDE+&NO z7g`>P{XmOUo2a2WX6R8F3e)Q7-rsg{CZ}q75POHYnD>UQ(Hf%D4{@Fupa8fHyd=qz zzK>n{gw^Dd=*MUZ2rNdtwwO&o))ji#W^a}jYRCD~=Ky@Z^WsI!wj7W7R*JQX$+~fQid-G3#)ueOn_2C?9dW+Rj6rokMB5g3mOuc5WtzaeR89a;B#?pZ zGP~)bPitJIq~=ZmU|BnXSU4)vlFT>rvD57Ik}@&f<3`)2kJd%|(&MF~K-W+=vLdZI zdtvEf4a=aPps1>4i+d$?6=#tta;Z6xtvEXn-z||#v|(rQ0AcoPvhrtwLiYb!TGDUb}!Eu+P}s{%Tbm-^PLdfniVS33&r9rG?%2}Y>{@Tw1w=l@Cha_Lj+A= zHw$Q2Kl(i#m&iMw+mw-lQWX|lGB@Mg%rk&oi8O^In`j#;r`paogoxBd1JXZ=-`Hcq zv#`xC+%btW4$91E?AxGL6J-$^G-o2A`NNZaCa5K}4(r6>k(-U$&h_K^&bCU&i{!?X zu_)F}4$Kr~0r9gXR9~4E(xbq!y)|UY+&#CC>fZS( z$2>bGF@bGfEhm4ox|gAoem*vj0YI#mzi4djIw&yw{c22K;&PtntbMNZ66Nfv=N-Qf z8={}Iu9Wn`dEL9`5A!A3W(x;cMIfTH;AyVx+LQpsTw_Q9P%wwG1Ot$)=f+hUmcc${ z)T8^jago;x^ZT0tZ~%~Z=fcN^|Jm@Jl(yJ5>~I){h*N~UtK9UWbS-R8w-=*mMnNH3 zzS`7@Q$r0meFmfq&qY1f!awW}o6vXiJ0Ekg?q>&pA}4bJ*s)9-1Y0#{&wsD;@;15` zec}Z<@j_V6B#GCnTmbakv2Qu~S+F!#;wQBgq3VDq4}h$0%I_XF(~fyR#fi!_CGSFhMR@s@w4g3w5Bq3zaUoza>^^l$X0EB`& zci2p%XjT+2Y0uobcI@bZlh0ZYU~D{q$GGZ7q{KmG2=gpU$X=4Q)2zuW;c*2zm{6IJ z_+qCo`mwh?YTxarZt?SftoQD)+{?4c>hl-->~inqd*SBCjHDrgsXf~FNeC_d!^(3h zK>Io3&l-8H72c~DjRN1gw%oTlyDZ9qwk)Dn3au-UggtvzBciM%V;h=oHE-=pSY3r; zDbCkCDm}OMu4S9eYEph&?i5IwDBY%&v*c#cJx6t^OfOvBhUEnS@rm@nB=Ug+;B_8Lr^RX`a#Ok0CSUFr6D-|s!S3^FHWENfJPxg#q;-$)K zUM%E^j-Sa!l5mGenLv-X506vwkCpekxp8%oGb*)eT2=+v~?}+j)z&I#g|? zQ6$CtW1frAGoq_WKX-~hor>&LmTiE`;P==-yc^-zAhtSFy5U{qSu6Eh`k<^3I<3hMaBE+|;{AHeXiL))a z7+oDMr(IY%Tbxd3d%oYO6#{sH#|H+V42}r=#T07x`);@kzvmgGV~tzn^(2q;*|@cP zeW}K(l|W(krA<6p?Xnr|F^#KJzkIS-$&c;+I^ivkqwiM8PaF%T+*hS5W=7Ek@oaXR zUF~yxlZ5w)8#Z3zW`*^9dog`R&N6%FS=42h|Kc&sQgCXJ3w0i!aj2SkPMKP(>3JpE z47p!#qP{NLeden#(z7BlI%UacbLI=1jV>6CZ5!Xs#Z#+-zYpgu<$=}vXw$7p>)Q-R z;}GA_ocjBd1u-SsL|^|J!O`gX_Zj^D61}F0CXXcbPAp|*we5i=AE@=!ebAlPB(`O% zz@livp-EQ35Z+`206`hd!rgyg`yE9ugm=_YunlRWne8ht%&Q!;e``7aXwThIexTQ% zrr+1L*+-wv=1v@vVm5n}ht2AY(R}KY3=8jHYv=z$?*CVE|KfYo&**((%rR!LL>g_( z2?qql2a#DhK2tf~d7g)VI`#9LCG=(EIwp{fSu)Ocw*r#Ndplq*aL9?cHE#a%u4I~A zia0OLu2YRV-ClRz@mz0ey?g%ja+LRZjdgX@=Eku)ujbN;E_3E%&({|J*w!}Ul>70? zZ~bIP@2B|38`P$ZNz(Vk4tF;@ce~w})^*bnHT zyT*6s*O9Qbe0%wBLwUTZC({2PYv|tp6zuu``@#1=mgF2`&0V;8=q{yY~4!8bL0#qhvpI#Be%rOiglc!EIV{+yH(`w$RVCuHlY!z9QVOG zk@X_;Mr(bUHoAXCo1$hTU6o#mp-$3``K+U1ukEFhYno4O=do#b^tH*p(7t1WXUv)% z%;a{4FVB$MN9F0n=bn20y~EcJGVY&@i#)%I>5of1jLStcD&@_Ac=d9{{C||ux3$G; zmUBjTTV&m4oVc(0Ja}c3b3WE0{U`1GJf`=!JKtyin+&bix<$=46$M3x*YKQNIY}$M z$NcxB!4vEAOnM)l$G7x)MRRXHZey3!W5f$GmK!{7yo$D$FGlB2f?!Q7W2%72%Dp{) zc;c^lLcNLjxSiNun3ohiwaVk-nIeW2nt%$SDhG7#lR-SNrA4Dkpn*%Q1f?!%7ytnA zn6 z+T9ml%UXoRR1-qo2nR-5U6*p~5thF8lU=u1O-9O$Q!^9IAc`t|@asbJv)U)6U>4RT zSpq4|24S$ape(-^jI@&9w4R<2^JkqrWIQ+pDbz@^q8Lrmf5Zja-ncNkcZpTb)iBit z0A>ZCWYp6Z!;&kuqT0cM+bwZgFlViPTIiJOJM!*ms!jV-Oz1PP<{_io@w-|vJ-erf@ ziL)u1UPiT=V%#9o<2Wzl@#_81^*r>tQ3l|>&V}=p8PAS17?p>F6nh9j;ZbM9;^iGL z*EX?RXtjkCk98TAqSd+s-9vl0PZ*LqE3Ltb_)_RwRp4r0ijRoC)*+dEXKUUx^)zKx zbY^W(Ra60$GA68s|CRFU8^^ESDTl?151HCB*v)LAa{)nf+sJb={l|Bb6D%L_7iT4@ z)n+e8;gH5JCp@5m8M;bk5fLSX+~%w{nDNIeTQ*1%#6;iImYgZSXX^VoPO|Eq#j%z( z1li#A2rJ&>rHRiCj2JKgAw^IC1mzkrsykaxA$A%?vlGLP&5j-WgbQL;m`+G&FDK7p zZ0+`0eb@`*48}ZK?Pg2ZgI5SDi)%G0XR9L^*)8$;?=j-T2Q9|)Iu334qKltcrK}ha zQxG#g!}gi1tDjfw-I z1;v78-f5BvoOM5*K6VY;&D7m1v3uwu_H4_5V(6m)B+O3E*Z$$xRatv`Or*hug_Ol@ z@7j+xdV>u@U0v;=3S35DsdCfP`juO}DZTaBsVDDvi@ifB@#g6e;~KK-uWF=(+L$sm zDX2>8WaHRVALKX>p0RwKzE71rS)2T|KmGm9<`>lH%`*maW}3U#dBWu7%5%jdv&>x= zt9Jz=L2tUJv^1Yynq8m(@CTg&;+~HDsadO+THg&$sNeM3O%Bnswn}46O|yaV{bftc zCDc82NqLmyC`$ce_6$pGU3D4O_l_6FUL>Iuj_&IzMl!ojn-XW6CdQIw@jTN1V#>95 zf3{nBa0+}}Oey`$y?c+au_A-W)XolAYFyYw<2L8Zzi0S%msD=oy^VYHzguPa!tv9X zocYxw2ovrBB!o{>#v(gV7;Fv}wtiD^fXvJ8RYSA}Jp~ZaDXQtKXjex$MQ7 zzc+lHqqZ+?h)%HkSl!8AZBMkVzQ2K%$u8Yv#ZH@%(Pt$iC=-T+KD9fxk?fnNnj$<; zOK?3bfr$p7AK&00+B_CHZAdI|CZT6JEkhOy{kkqXaluOMu>(8tbl4SZasny6s=C%* zwYb*$*Rs9=sgRe>4sSWk3UF7sQnOK)Z>=jWYrMa%fB!!7O{Z<}Na0}(itp+Z ztfi0_S5|saJOanRrZH@FoOP0GmZai%{l*^iPevdy?>v9R>@t6E)!b_LUvo~la*tFI z0e@Xnm@>{3dW`$+q`l_~Wxg zqb)KzK4L}cZtp~oR7*KQeQ`OFJz}_!kQR{vH#jD&DuwxMW}|3L-IJI0Vg(u&>58XJ zIi;<33|%<&WnHvI71>y*St*Q)t(u7b>V-Zt?r;u!o{XS2nicsFm5Jt;QY1FUKK~VZ z&htbw%N@7vZt}hwy-X!5i};iA{8999L?GU*Mja17hg=ZmACoJ3w4cf_tCvWoIj zebu?D#FKrd#?Ln=pK1E`>UFosC2^Cq*XFt^YSh#2>(#8tZ00za7)|AC^!O-a$H54$@Kg#PzDFnY8&B z(ZbiNjoikBsI7|AEZOB@*`t3G);G-Jk<~ADo~(B#>7>^Ky6@cAMp#XI1hUeG<-$_Q zajW09#W2^gdtOYf*3YMB{eC>v*PBHpheiCX(&lc4E@XLD;#DN4;bmJfKjJkXt0@)MJF0vIRpOOfZY4H4vN^ZMom*p1+UwC0IQ~|b9;G?;J%Y1evRnf%m?2_U z`mVzj?fAEQi}S+5N>AIaFBA0r0>_5_#o7OTTAXsjbQo$MI?IL~_Zg!HFENMX=}e!! z(&PS4X}{mM`MkvC_$cR!j+`@kvW7MC9H)G+2p3qkS8H!e<-L0@kz~FfL2o;0mxCjj zb_1a}dYr%i5-aR+#`xug^J?R0{q_D-ecLAQj3jnO*Qrj$6opdtf-3Kvk*AM4=+kHPh<8PlsJKJ_D{w>ZkiG$-kZevC?X1l1Yam5+NME6uDx3oBpBwEXx@cE`= z#dXdz!ETagqt~ThKRD&(|@%_YIjC)KX~g56;%1^~zvwt!!=Gu%XR0 zgpU5Kw)xWZYs)`gK6);vxR2z#XLNjCPNn12G@*_sEfn^lh+oeU{Y9t#1@*RQ(9PGi z?>GiiSSdSpyIP++A!=%_Wxh+E+0HXY}H)-r?fMK}1X<+6kT8@mSQJ1Y=-#c-Zl>l(N zT#tYQSU^O<^_HG~XQkorK4lRs$4}nB{ujBrm=MUvRJRzyd%x0NruGtcp`lo(wqEY_{=UZr123*&rY4$eCu3pc!Ab@e=nFn*&Ek44w_S!+3wqY-jYr`D|+G!p(iv5i-RP)g9NLM3sNl5nmR@Y7aRyHRPj8_D(N|NZx@T*A(wt};J{3#F$e@) z#`vzxt9`dWmLo7`a6p&3c=(5XAG&v`lvSg=x^qx|hU|QoeM5SsK4?O#B+pih*>UEA&FWGTz0|ew{K~Eoq>)a0a(7JDgMeOWI`saxXfGfg@C7}#2g`)HMuU;Rbf9nG` zUe?ddDr_0wqMXy*C^Nu>J?&QA)h%#OW!6w_FU?L5d)B3w{$aw7Y|o_feB%waD#ltF z2=H{4`xMtbZJm;kIAXh0Q>5I{j6$c=1S8^SA!Y=|#MH{#33qLQd6vBNX(OxlZrNMz z#fh@e5IV(bC*^IN5R`J?i6@r6+bVTu#|3af1TI$pxPd0h>0mV(7frDXJYKS`3dr?d ziQPq_bQ@Iq&1M7$!O6OL$b(XsLs^!%V>yx{#G<*bu4qZ1Xl+89yKh}oHv*6D8RCMq z^bZ;3(CmHKy_Q7l3v6@Cf!*Y%-?CfZth2}Q&r^>t+pOK!!1gu7aO0iJdxs^;@?j0t zT}I9zrBn)>dcQ}&6Bv~1Rwue{aaO~aFS#}|n>m&<4AH1U?rLHH5R0G?^w=jL0U^8H zvcT1JhM%;Qx_Oi)D0W`kAJ87yX+51zm{H#GUrKe;HxL}tBSUA)wr(d2+>eJMy$E!k!HD1C@|)(wczyB#u8WS3OhF(MM_S{?{2l|4(bZrQiB1|PUL_e{-E*4sgTBQqqMNxa*Y9PE=2x7^XC6ih?8bR{AfA6}X=8#1<^ z%^YoM@fzICXDbB=g||P|0nJ2WHKog9A4n+t?e8-~qT_C71=rtW+VRLKx$mN+gquhMi5Mdh%o@Vu~7aumX z-u{$d&ulExpKq(hL_bzkGfwzc(+1ZKosZr1{c8{8Zu2fP~=KHTSmC=s8Yw6b|@+jit<>=~G zx6Reh*jB?)<8)}wZ9PW|k(D%hu1|D-w7Ql!U$oZ*F!vSQ=(gs==B0EYo4;R>qV8et zrQ@89uZgo9yV|!Bl>`pG$=0^Vu#L$q0d_jI8c3wKel}RFyt_YA760~YWlfpbbK1_C zwo{L(edTaqq>wi z-E5NsQtmVP=vCZ3JginyOXhED_wsJr@jf2@;_&l1Y&>W9*#pN&@VIzugK z#d1^(a~(XNymTgA72ktUn53_h!o(Jq{j9}SOUMgQ$19rdOGqtW%gQq6#L=!hX&vR` z#wC1*j(?yVb06@19gZ_G*IvZ?9xCU-luXZh?LkQJ$|l^@HC!c}fZJy|qXo}yLZ>Kw z?r?5PDq7S8tWYY~&1j@;JMy(%YqCA>bw)j!zS80KZf?FwI!{rvPkg?Aru)nEdpe=m z5HlB+y9;}XDih1Wq1}Ai9lKfNRIIXYay4Hcyt~}92|Nl{dz;$vAFJuz#MR>o=R0CJ z!6xBxPkBGh&&L}$T)xOLxo#RzS*JUBJjk=<;i0V;Z_g*$4A&GOuwZqh6uin%+U};< z%Yp7=C9)7}p28nxSgpA&+q0vXOV9J&XsKs=)zk4qOQtwBH+1^g+09A;o=WOosk@U& z*l(IrM?LEeAq(0Oj^Sy&9Ah83E^a{WSyp1oiKT7M6glM(n?xrua-@Z5J(a}Rt+3~e zb@e&0_Hy&Ax+D46GLCpTeLK~)A8VnAu&i^ixp$n!pG1=c7iS`xB-`9_d8yijDaEeI z^v`8kILr2|Cwre0izdXutVj%9jVP%J27a;Tbw5S6Fz);AoJYeGOlRA$I;$T+B((wZ z{*zm0S#Oq}Swi(Ens03BxvVQHEB;lDZ|8Z$X&=ys(h*a3cDwhsyuwwliO=@_#CBf> zJD~~w(J-Ur2&Ai=il<2hMQWsF=h%xCNj=rmnI_W)mMGbJninapMmpy6InT$p(Q`ju zA5P&a6USfMfL4B;tJk~RoA~+QVE`bRm(S#ig+XQ-b&KjT#-`VFI+Lakh9EAi z@q`TcoxvG4{f4siIgMpHbf{h0h?MV5w~`C~h5n?As6vGPL3jwI{Fa8=7*#NbTvRA? z8%J1@UV$exDg&xDNdrk*c{L6^B@=U!GaGpDbeg(ORnyjO2ASvB!~JdT*7H@KjSJs`rj($4(h_RrFgI0QCUc>htO&5Q}2#3SH(Z2IlHf53|Q=k2ZQn zkC?3O3ngpnUg8{oqI zn}~gwb(#WqOo{kWS_@x>HBr59Wh@)4<6&ZK#}sjB2y};rX~#_Zm~i)+XyX}w$PY%O zH3}uXb1dScYvi!#-jmgXKFps`AjDgP8q4!*4B?@qMlBE=#T=o-lu;uLcp%VhO~f3# zN@2NR3@BmUAiK%}O-3tYt;yJWKu9f{TT+A4gK8-#Kn>lpZ`|Ia^s1YpCD>7;D1ZV| zhHySs{#S3DJ@GueWHIG27)r_+cQQTMK#~-xpnZ>J-@fXoO%z8~J*3f=QD11EBFdtc zW`Coz3jmBH91)AhaOz>Z@4$=q^EaBLuH#ILt3Qq1au^E((_En{l8y>{thhR;0_x5| zO)P;uceb+>>~ouFS!-^ob-tnI>@xaRt7U7n91P}UY<}rbA$1ux!P7MgQ`6%9&;*VoIg4l>Iv++Q!L&vP%5F-+bbX9oR#(~eZR!dZfr zboKkwTG$Wx$;Xt+nyEjp_RSTgIyaXE%QMq{t=aB64BKahZ=Rt4U{hae%uuU}oiD8q zTf}FdN9@D080PF&{30eqPCuemZFaj{7ssH2`i2kc(nnXbc)>ls+DbZ3QD&EmOtq+h zKr-XnY9>@PQ^V_7yR4`4bTXj>Q15JYK9Lknx4_SdxR}Ic1SI&ZJV{aNY({L7!$_SIiBtHxYB38#N0Da@FOSpIDcKtzTtZ(BZ9K7oZe_E^Lf>u@728y4^3h_ z+8gYQ(vg%y9-*o*qFSEk_N$5I568;sT-$vfb4B<*P{%){9fH1@4>mf+kWNsKHz)63 zkxq!@A@TX}EVCZ};}$b_?Vcpcn@(q0#a5FVHr1F#W-UF~S4a0%dFy1>GGEO+^S$w` zZuRx3zEIVZfV!?}Y3Zw#*b7b1$7D2SV_q0CDOp*e@{YJc7~Rj! zvhc@uyazpJlaJ5%d}r(}g**CVK9M`V^DKC&w;$8=|0o>LRxFJi zq1?ye<}5ac?QXBcgT;gComiI-ztuxt&THX&nVQIM{oW})jx0HX9t;)Z!1FQk2(jqv zq0{s2GF#2&^KpNC`!OHS&w9}&&-ClWISxmdtCY9bBT;f=bYIlZFHx_kV$*pX5x?&8 zKq@gYj1z?FI56l*zE=@)%s#E~`9-2?ZoNizyH3AHPl6-B+H%XVM}w$dN7?8ev$Nt| z$NIP}@_;_l=C8y2ma#`CpY#6M^KvZnst_TbBy*m^|vD3Tz5WYOKW^4DwJ~Z@TAX2$M+>>9jRXE(ebnK zwaqtXB)@js6KxZdoP~2$_Pz3YLH9c~MSB>!>#w$Jh)s5q)oldL8KZChLM)F-Ur!x- zyustY@40{c`f=v|WFhr#)JLo8%A853cLfZv1|0B|CmgTbsHgf7?>4z1*e`O<&?~ zLucNP^|b0b&5BrU07zPhWIy=sZ|+x3SFo?Vn_6&s>j}h2HMRo9~}}&cyxT*vHp@bMGv3Y<*oiOy>4I z%4e!>PMy~8E54+^eT?RxGQQuc_ho6OS>tH$Gfp{sKhw*)LZbo0)WBoLOc9cGsIg2I zIeq*;pUv09r~8i|x&Qscl|E;s$5->ee>2zH=h*8^*Lb-wRhQFYD@FLr%L$^yfD}n@ zeuHUJGBWu}7>FRCLP&VQb_&J!a1MeZL*%*LDsY$u-xsHMg_#X~)pD8j^H+$v>Dj#L;c-q1| zj~9<*G1U1(+3q-?8P#A7yD@?c%1pCJO_Ewm2>?)C8WOfKe8)&OJj^!OqC|K$A-9{g zGUQ|(q5>U~El|kP7U)rj2FA?r2O|JN1ZJ-+&CcjcMqt&x+BAeR`!W{@l{o<@Y0hL> zEkNgJ01@azyM#pOrW!rAHlvDyBX~r048uSQ9ij1rTu~26jh2CF%7ZqO7~(Y6}Db6)mN_LSd6_t*oZIk))F26FpeX z1LbVD1sz@qU@*@}GO3FXV~z`&zmy~E`k6t#$Ine{l%F1fOgLm2k~>WAg+=4`sd38c zGr$2bwh87(9d=~GoFv_{$df;mooKB~pX(+9RpY}p`PvAqv-GGmjm=sC`U-K>uT6F z$~>qc6>jHMmDV=W)LbPM)KZY$VoXU3(SpRXN^uSwh$CJwa(!E5kfl-#8SQ|+Fm(1g z=7(PR0J%r3Vv8(-1GESepSaasHQ6tV%aSW0CDZn)YtqTaUR4)i;F^u!*tqF^D$5=I z()=QAJFYRz3J+Q}ztbvMBrgMfqX4)?1frlykSsU*yxK2L_|nBb+1?Sc?TkXxB9sx- zR%9x4JhEQKeHCs*}Oxb1;MEl(PLh z)1Z^D!72`as;oc04c(LJ1oH9vESyBRXac)%{^R z%g)G+bj`=xqPj#Gkf39M$O@AJ_E5An0wL`hQ#ou{3I>4}##Cz;i;A;C{n5afp(=j( zEuj^vJ-TYC?v(5aYuqbSwd}$ZS18VrhnW*Kq{@KbNQn0;m_ya-9BZ2G73cv^6acVw z-a=Ey_vf~Uz|O4X_GoLO!M zB+;eqe0~7{2`ta*bkh}?#l*N^xy6o*??&6^?AOnZ9l#NHq-NOXRI4Ss34^o)_mB>8 zl&1@8vRb|OR-X)1+JfpYuO>H40VIzOy+$BH7O~zd86v9A9MF9LRGLGvHKDlL21I51 zuxUCuD8+Is71>+@nc1=cPDDqnB7Xsj`P<7_C z${noJF=Q0@=a;^sXaao>U5h=;CwEVZH=v2L@wvid zUq{~-Jb^1W6Y-D9x#paM(UXRvv;+zYd@5Q?!BkXM+dF1v{b2#X5`&G>jCTxeDyzpP zB!>*u7e=ZI4z|Nc@8awrO%L~8$?FZ9!VTi&gwTe&8!G+K`zOaKb`NFpbzci#_p-X9 z{=A&zJe=Yl@4x2hBHnePhoe9CiAPVeJKb&WIF?7-8t>!PdyaqSdnM|soKwBTjFUv1 zMeak@Vk(oGVOl#odJ-KTZF-75o>kU~|MBbPUk{0QEf!)b%h(tY9HIbYV2xE$Vf-VV z#g}_EF6iRS!%8SkIlf~(LESDLnhI@uT$YCSR4*?wzg}VOdg&=DvcpE2iHnarHSfo{ zoS!mYcl-LWiiK0=$78vMKDc8aBlQ}g!m8GEgx_iTzUsD=Yb~!gO0|Y$E3h{VnX_sd zq%JA1_3W>=$9a2R^zm%}`Aw&fC$6XC|MzPrir&)-E4gZ;>!`c+bC{Rro^+}_-^a6a zaGwR{v*w$1j7Kkgyp&Hjck`}kbc((oN7?ck5xaZguPeT_t zN@M0BWp9EeFn}(Y!ciVacB16Mcw}jphO)P=_F4|;i-BdZoDNW$mC+zAbWb8IA1Gy> zu{^!x%kJ-Ebo)mZIDN3bmsadJi89x;P@kJh$l6p!p#pXZXo+z(N?JV_tv)sMj&Ci(QADYg6uD5%qxu>bIJ(BHgm)trx;c(?0 zx`hjp?r!(E1u(l10Y=#&cBDO*w~u(O?h~K974|mSLr6g5+{>niRW8M&xR zMx&Od3)eC-dPet(c493ayY}Gsqc<<7^6jIaSI5U~?zum8H~Bsz`tWDc6+?xXimHP# z2ibT*A2}mEe2(aYS!(yqZVssj$BCOZL;`ec^<3{i2 z(dYieMt?sYKW`^_(wa-#)Tu}`MK7L*xQW)PBh(R9p~zUD;=e!4Lp6T?Onf&fFYkD6 zrF`dghbs#ovqv;8*1jH`N>$+&*RWEGWIo_A*Sn~G=RL;+`aH-UPk(-Xe7o`E+yCT~ zT;n<0y`$i54jI_G%-zF2=XY>kpZ>M7T$Q91 z!KkNnZpP!LyuEJ87p9NsdZs%hCa5^exOx%W=CP(u-S6F4&G&as>guSrOQr{vF3oM+DYg;Fh+(qO67@}bf&8#^jBC?QG2gv{-A zY$0r^)zjAvN!4laInJ19pV!ZX`Rd!e9sstE@frO4Gm;iFW8uiV?Z8-JyYRy78*ztw zcIGrjuOK5}ij|%j-x5L~oos!V5{1AdDaNo>4ma4HRV~p<5iEkj%nB-1uoMXJgMcla zom^mdWMZ{$7*w?J3~~3sFtbB4-U$hcJurjiyR3a>wnB``Ah;Ucm7gQ28-N&isJ znV|d&H&J46(!=-%zQ7Ed+2ZiS!(EttX3)x1^29r2pwkLf8Dy^HCNT(oWR>Fxs!qfN zndb3=)iAXaVEnYcH9jZK;O(p^mL3J1?1lZ=fk@8*O@`4j2tyWcn=XMdo(nqVO6D-S zdjDzy=|dH8Jr*Qw>}9Z06sPk^12Ly=_Y>RS3GrP?5BqLFc~p*u%70Qv<4uZMh_h(gxLSg3HIaXPi`9SZLYxfacc4Us# zLraMfnI4?5Q2=!w#z6Uz+^}s0p_Nz}9B!0K0JGdLyIR$%iBYze7AUuXr5C3TmB5IX zkCBY$Yez7C>ExKqSIkA6P%;1@l-5+T8+N36<>J*#BNk&pN;dasNY|Mr3R1HfM@olp zu9#uwG**dKN#AXJ|G}BooH?0y$O~a8pIM~HFu@Ef)AH3Te^YQ`O*W#tt}XzoiEr~gRq%VMD$X1H z{QW8gC#LWDdB-Z4PbDC~rkDWK0ATqQ#al=GvJPoe0!kjpuzF%)MZRafIm8IgX={W+ zo-MOC)<>q?1VGKDW`gP#6PdAIYxOm@wA=jvIy+(O{j58n1iSHlSRcC=@%v+uYv-Fy ze>i+YOD!W)*B71yEYP8OB&$M&zzWt;qdST{zzw-vNOeG!RT{h%IC(~{sNC{?SKMDC z>7d(f$w5jX9QlNA)GTe}%7?nv$Q{ykEupmCm1(FkDSjnA%jX_5;7iPt{q;>kb&@fjLTd|P7#Q|%R^>UE4o?je9^#sB z8@`I)4*3uVI9Nx8@Rr5(-AxEOa{-(R-Rp z@jCJAvV-YPyROFERh0(ALC+K=;C@87)F68HOO{p-KPzp%{RJ6G$+?f3NY z7xwq(6TbcYr2pR^x;lItD9tcsQ@5_2;kV1Dj&VM7=2U*reW7zFjxp%h@hgqiT}t|3>)Xrk`M>=Qd3%}vaEcUKb>*ea|U@M5A3R9M)B54&$aZ|(?W0GAMcM}csA)w zymLqG``xp=-lo3ZC_9vLXMrbj@@7NIX>ihAl-BR#sd)U@^BVK>*NbXD{nvY)$49XZ z&w(CoaakT?ncFA1KB9fVTlL%WK0M3k7tj8$-!oFoTi3W|swn_Kh~v6~D!?+@`Cu|L z3l3G9%nCX(jAtZh$=u_c=tsZYlJk?{s+z~kJ|8{bkLq6V&#!{_p`K;A7;IO=y_vY83=wLbUE9%=v%ir(6yZ67sIli5C z?zrs1m4BB6Vi} z%=h*EqvikO_pHw`3zbKd&I)A>z{%CVs#t?w-SX$Zeb*l!m3c;<)VroS&W+yJr}_O` zr}+F5Jsx4i8Pz12GxF(pH9C|`}kVd&3rzLMeMP7 zA3yc?hsFQ>pUAiKsR|kVmf!i$zij^Yy*g?~(X3d>Hh21Z`ab^upLO{DP#_87WR9r< zgt~|wRs#Si9aTwIiWI64fi3fe%CBlijHy)IW~G;>Xe1JLe}B1DqSc}1R1*3ICS>9s zhy^%7hvZ@Yb#WjRL^$GEfprc_j^PoFmGHZD8Q(yiCrPpuizBAVPWkAig8W}<9z3Ns=)ZVh}ieMjbagE_KZr18$p8+Fk%F-6Cg^_cpYo`V4}+6qETF$ zbwu2Y7$mVmenKZ$A+I##C*>#c0gZ_m_lkY@_00kRk0A5dCFTUdk`_g_d_uUh`5PWh z2X4-aibjWlT0QW61%ogR1W{OpU&Sqwn0`1VOQarW*;!vQ^RwJjIjp(zOm`KxbYtw0 zf(%%H9&zRMg)8`MeZYT22P=R8sj5;mDfS>;*fS<>C?jQkw|09EmpvOf<` zdy!W*;Y1}yfvq9^_D5boAV>$Qs){7J!%Qymt9Cyo9Z>?DT2#(996!xo_F_Ij6Kc{tV94Kw3)CEzG2NGlybi%ZcyJRF7?& zKXaV@hYq)GHq~_aX|Jc~B1Ay~p$GsJ8JRc;ogW_saUgzsHPxT6_knxtlvl0OV0$Hq zd5koMLjWPHEFQD@Oo5tA00InQ?737`1OTUk=>S0(!C<9i){gveg8{tA?*m|p06YNv zs!w@euUG0VEQSoXxNxI4zWBtG*7xgnFmQe5UG5RqVhtzYlq0=u2~&Hq$_RkQlU3Mq zS3uTGct0ux(_3MS(|XgtKI-*23r!1+0{G4nul9zLa?8vtNi2PQ01sk}y~a!@%kZ=G zD?@9f(iTi^0dpyoFB>NS#0xj&f=vK1a4&cg>_r1&TSryVJiEeb7#Kr-O}=Cf00aOm zzk=|>lgc|#E+L<_RT#w!5Gg5O%$MQ)L~-)vO`%WejgMLeE8fNQbArGCs%&gq61giU zLvlA_a08ro+n-22U$K`?4eh!!mzxCWPyTL#GYt{BjVxXk)j@A7hYSpD<_4ZjI7H_K zsmQm3g;Ala)E3azxZ9RHXNN5pm*xvG264b7fs!Hi!L8D?rlHPM$QtEZXRGWmB*Xwx zf1UAu71m|G(LLPp>Vr`L@vW;(mUxUe9WLU8ODbE855qG)2abdNB7^-*4aj+dnq@ z@!6Ogs2ia(^_vHIM>4S2o?ejf-{Xo6d=KH7kY5aP_zQ3^CZ@HvJ*1@7)tpEf@oB#*3 z5K@S}$#u8Cy*$Ckua14aqKg`5c;>H%r~miQ&=+q)WYP6AF8uNBcmB`+;F~|zfBa_J zU+;Me_du9_+!lX+vB>p&ym-jpO_n!FsUP3kzu(~Jdv-tNVQtg~0r>!I#CKLh7V_x1 zu=_#zeow#OnR|FWhJ_fI<3jiA?Rh=^V4pwz*l#~S`s2kiw?>YV>adSb{`s!`e)+)! zt?JQ%%P#z7{`FS*{T@FrEH&s~*#7<^L$_mdU*PIx=;Q{FO|ntmY5be=I%sX3t#k@{ z;`mMlKF~=lt1pjeoy;+_cb#fFZ56U z?#|!Y&u;yC|GoX|4;|mTNg#(#Z|BE)|9Fh|U$nW8@8duJ6g^82$EejG`}g(dUnUzFVitc6zB=~LZ+{QhzmpvNRqu%vK}QmSW?4Y@uvm^p&$s;Rjrn!apO-J= z^z4!fhf6jKu1=Elk=_e^z9*mWNl(+mPw<#UT?gmgkH3#QXWBmevHtb5f2)@Z=^U90AjM%|OkqqAK6i5MM(3+1 zdi;96^QurYT{5yi$A|S+IeOybVF3xs$?3bGG_@F51;!F@c4^B z)BCNJ8#M+TI*v(lLw&Emv$wy&UvKsMjmF6oqnFS9asT-@C%kUv>*4$S{?PH)kJvu4 zvpMs3A!pbRH-7uo$2q^4+jr0^x9XJp_~gHTrhHHQ>jC8`@)?r)XzR!4kN5t3wDYy8 zSKhe~9Z>4?f12+P&-&NT_?H0`!zQ+m*N^r1`=h_VDBc94T-$Lx`S+L0{QIZs_u@J^ z4B3@5SPqDiECv7o0)!yIIs>(mEu<;sODj{s7(gOPHi0A=&;f7R=Mfqy~*Qxl_ex>HzSoUE&`1VG*IoqmZ*coDBS<(++^7s+7n%02%;H0HAx8 zZ`j%cWb^j?R`f{6E2t7*Bn3~Y6>=m{8vyPw0`k3&TXf#q1HE_U4vs!f0G>c+6j?w| zJ8w-1tBGh?!Nx3D#w1-7skS;Yh${F2c$iBJinc=~oiMZLTHWAi8*L495V?;8!0()R z&3p#Q08mxcUf^f(woRAWDO|61kocZh#3)e=0II=M0O0Pxm68O^xG#hUo10hCo8mDn zDZd)PEG9GA;mm@n^_2R)w^{=v^$5X%dvgFhC&_FBfP9lNS^xm%E>b8#Kz0!*f_ah3#+hK^YJES!&eV4X<_fE1-ZnMA zjk&YtsaFEwkwx`wMETS1*=%H?Y96wT?$G-&l|><* z)owVH2wcdo$&m&Q* zV=1a0Op9CTUgtjUOvD8n6k?r;Ori$0_UyK>@}@X^Xc4cmL5D?Hq_Pk)0p}1ssCHv_PqA>b+3h97b4g+PDnH|;2Nz4#XGuIVXo z7(Ou1wE>P|>B8}^kvRWU_zHG{G#tEv+~v0wrr znak_3QZ}l>Wi=aPJQ*2XEPtS>#4ZaX-{w6$$4bZ$G1NvcR(uvZLbh7UgxXAm5@OCKWB+O; zYMf0L<5V}-$9+Y#_umSU&{Ri1yGa+ zJxI){Llw(l4(Y1)b96{nw5F1WWj*5KqBmA~UKss8P`E`1^M*b;9iY?QcLg_yOH>^h|vKgwC2@FW<+<_g%^^j_1ThOIm=+iB3LH6^bnV z77sso^*$?rJ7l9Gepb4sq9T|$`5BOCtLh3`(lumHTW9AimIRU0j-S(m+nx<=lPOo& zel$J7=|#E8gA?V$y4rTPXf;IutNZTPO~F{o;s^j?JrKuko{`(!7ZV!LG2X$f^mG96 zp=alUCOzZ&Wo`=g;$|o+!X%yyc8qwFv*9C!r(_+eCIQk8a0927=A9eeOYOyO{a9MW z0qjf$0NL$*VqoP`Ym4H{Z0H#O=nIBtM9U`$7j-y~&9bz2-@#%$y(`BRyA)zAtCID5 z=h0G2!IQzd5(J;o)b;WrO2pOXV=gt{ODAT|d`eLS0K~i83dH^7|Mkb|Jn&sO!ez*= z07xj)d3=4B(W*QCaXXqPc8^Xymg&(^hrYH>^vu)!_1pU^?$y+`#;I!4E@$7Or)*8^ z5g!{XH_g2-Z|HcpA!Lctr)DXt)hU<6Uez7S;EdmoR0#GUgbsxQNh8sH(O&(%zWnci zqgRioBVzb8x&LARum5Jq)_CC-QP|60J?{_wpMPZ4?IfGIxh{C+hoM`hI`?XH?NWj%su|PBP01aCH<$ z<$)-;qmo3aVw*2(_4erG-sW_MNbF&*^ez%9%R@cX*4C-U+Hv#ZOL`veyIiZc8o+M< zn_0XqDk@5VV=yhPrk-@~R{bPPav&bFbsd`{4 zfd=f24Ee>g{MT*49T zwKIs%0@3|prO)5_KA%D_S#nyrooDMpmNI*>K9AN;0){4n)o*3!yv>BtLf zp&oKe7-`e1$=XBL~=s?WF(pN2J-> z+|_@~+aNrQNqgj2Hki?LSML6P|Mk1HwIwKSi|<53Q=UBF%?65LMCtG-b9jGrliPo5 z+-wkWy+lOzI6Y29d42$>9R?d=P~>QEYko#+Z{!}kU(`!!^XT2{RY-$#9QLKu5wIv< zy)dl1{iG+n_VF|wZ+_r?XWqx3SEcL;qnIa)!KTFXhy1_)2XvUjnT6d8Yp?XzZ#^6O zYEfCXuI5hj#ygH}yW|PVi-J$~pFjNsc&>l{ICj@?wXu1lk?Ddw>-YT!{P*wtB3t4v zcD!>!v%qPSZX37DVk{!BDQxHnbB5oe|E3#YB|0A?v=x=ck*p)V*XeUY01u9nn=%n4U1|dv*xx@7 z0P+Mze0e}LOsz1bhK96(7$bl>8Cf}x!~|87))UZLO|noWAds>0W~}u!0O+HwD|)v7 z*Joaz9Y4Such3s@RVA;HZ;OCa^QERLD@lI?<>QCnEk4OqEt2nK1yCdh!C`DJ>*7*Png1dOj?naXR2~A^ey=;bDq4 zVVI(r2GBW~MJL;v7!Yu}W0+cX=mLsH)ZX4%5jOFKvKlC7gYuKa0f6ZafDMl8i^Vr9 zgQb|RfKh_VwEOC>a?{&PPkLou7MBqVHro<_Z93D*N^A*w>i79=aje1%S>NN}1Gop5 zlV8Q$Y;)hQcl};42;c9mouZk@KC%b^?0cU){+NNtZ@*W;DrKNy%}kU8?UC<1;TtSx zD{a1_`JSMXRiVn#$KrkKW)UD8@OqyplMr{nqn+qWMxgsxu!57T+=EvKj zYM5uS=x+H|u44N!xDsdEor4Wm+Lq_ZFVdgOVpoy0ZM1h-`f;9ko5N%66r*cAcbhg79b!vCAkIoYM8fR{FEA~8iPH#@^tL`a0WZ{Gs*@?HA0T`@FjKQX|VZH`m zY5wn9c(m5)7Y4w;E^DrOGszgQ*;b2K@K#Ga{$_92rl>|%}`wfejljH&_>|WxKfd{FT zg|UO5>J|h}ezR?!0~dxp-T=gB02Bc40D$gyl`HnqmFlyG@k4~=t(TA;vbddxOXJe^ zsn0I`q`i~#Gq5buiFjLD&sUs%i@*py;H}6OcN8py`-KO;T7Y>hHP_yYvaV=x^7Bn ztDA=i0_QCsJDk0|z_Z~!Qu)*5R}X+jav?DS_=S6;`Yp${_d?*3*s5;7Eq08BQjlIE z{>@npi*EjtUH+I)gO>`61i%1*^3D-IQHviCpDS{&#cR`ZB>mYDuV<^j4k*8q7;bX- zq8elEJ;&~G{NQE5WtO(o;^ZI|ONc?hr2v?tyUaHktaTP}wXj)a( z9nOWXvq}jV!W8vw^@#=`-N?}txYu6lrS$579$Mi%36Fpr?gHi6z z3Or_W$=)bhXzsjij>h;@j4y{Y(p!voV$T8nR1w1bx$I5BM1@HArZRK zI?5_?IML)hYtf(`&H1gEOCXfJt|gJXvIoW{$gPlk4X?Ea9gqFH3Td9(GcT0}pUi&~Lst1}&( zIt{gRu-g{ei;(DY`t>CQS?zBxA z1PmI9^~}xzsUrm|R*u@xpeJNy`a+97R-{R50(Wk&cBHy;+>dV+S+zACs}{_{i_$sO z)Upnp(y|feD!@y`cV*MgH}iJz18Xj^YZq5{w%abnR!=Mg|6*fpCo>{esM{;WckWde z={#{U`dX&Tv?1gqpT+_=>O-v zmcc7Vb9OR3)Iu#`#m%EH)=v6AxsRMvz&C06FDhCupCX7zKvvL~RZSUHJ#G?H8P|%^Ua04Sx-6yRDeA^e zRN67IF|YO;rh<)lh;tqF(s81XRZcCQ_H-08wLz)e@=yfUUhGTAGx{2u`W@zvPuK_l zDVS5zPDitBMit@x)kt4wgw)7MstiLiaq6Rwj;5Zq4Ao|&L1D2Mr)}%OjDA+r5Q-Cs znnZP!#Wl(p4P^_D4-<{5W+DpzL~Sly5zKtP8f)qm=20Tc85e{06dUIO03ijH!V=xQ zskB8PmMiRRA~w5X(y8ljEiINrLh7ssL0Koz43`%8RTJJ}LHb zJ1xZ-Q=IPTkeuL|XE9^qyrp=aX>SbdJ;%!>PHO?U3PHMK@!CBMtS`{Nt|No6mY*|R z9uByLvosiDt=O?x{w(iy>Lw|Iz*JKD1w=P03i}BL`M%F_>Uq0QnDz^%&iY)RaZ{{y zQLJ@AV6!e^XXT+gb)Oj?wfJqGsqGq`2R9#tjAG593P6HB`5czOv&ZGjU|gd1-p5(CC9(#9JQ7J!{F(6WTsUv(p|bY9TnNiMyXDxi zEx@Rl;bs8SuW&Co0KCb^XWFBuW}XhwaB%*}Ri8scrvMONECq%sHUd;1fGsUHPerKO z4>xprEeV8((~bsB zu_aH*=8kUjeOz`AtCVqJ|HPJPda&;RV4Jhy@^~)Whuw4u4Ce9xHbBY0HjDwtud(9G zUj7qn>hUS@T;m#2CD?j%VCl1j_IuT?BB>xu^-oI!)?7A}@IIdq%J*AtZYopT{q_?X z_`q~~$Uf%0;e3^TH_0;S$|cdZGQWkH8+qNU~e?w1x|#p$jJ;*Kkpg$B~Tu^YD=6>A@qe-GeJxymi>ad39aO z7;VK^Cq`R!v|sxXwejKBZ=A@Q%joe6bG9`tQO}#uMR=k|U|W67?RU}#VXHLrk?S>Q zEgQ?LOd&9_&fBJ^#(_oj7{OiG8sWre<=g!Dj_(Iwf06@pB8;TkCR#1*g2mbf@t4+W ztfSnhwP{Ggxw6IUO`od_NOleOD1ppyx2YWiZPqJE_|$}#>sa@A4(2!ncE78B zTXV5+B9Q2(B-$2>HyJsEJb%g1?9;DUzP?%C%0;ATAZd!&6o%-e7H=ttp$%;&ZWU?Y zq9x0biR4jKfoLo+3D^e{BfMDM`vrFDoO%5;s3{dcx^=S%2p9F?AZxSz6FfhK`{3i2 zVN4taA;WnT4$@XvNXH6w|$*iH($1-pfCvugOQb9Jb^bondjQwC|M8O-ZR7U z`y91x)|k+dU*2m#vDuQ*$Bv70Xg_0)VK@^{IrLtx@`!~2f0zATU_HO}FP{Q^V|;hq zGv3>{Z#XEDd#Ugh%)@rwZoiykv93!@xW!HD+z)C$7xFJ&+Wbac-Q@OdUZIwMYtWaF zkC$U(Q;eT=Iaq8+ZN6elm>zL1VaLDGMOQT*E>}}~c1jpf1_nFR9r`^^UJ_-W_ZK;< zdfqdZ(u*Lq9EGu~O2++S=ldSt8{g(VzCTpeogWtd02bOcKe6o+4E3P2kX;rd0%e*;{Guj2FnPO%ByiJZxM4{s<9}o1tm#%`YeMtVYym3t3ti7av zNP*%?Ub?Pb@|38Vla#wKd9}Euk&tWg=x$#mpK7!|M0W-<$tYb zlYU5boX~!*qr3O*nJH;wdM>pu`g43-2z*Xk_RbZ5+%akmU&%gX39Vbo!cDHpNi_-0 z4c+QCtUp(<6xMK<6l4A#BcinxM}2g%3hjGJV{$lGa4jE(JizXFIfbTX4Vidg_aFRj zWB`oj#l)@1cP+xSC#-+hbfh4fF|@Aify6)JP>dqc5UgWKr?@EHIM z4ryKbC?fve#hd3fJc!EB;7Ue5o2F5sEyRLUrg>Fad0FEZ2d9s&dbStG zNcq3k{ieb|QA_9{`MuDk?96n4-D6Q!*aIYc!)MLxQ{6 zRn|TC{7EJwje|{LKmV+?tq^F;S`16^(zaFJHin<)oz|hzFve%4fC-1k*TGEXM}N)B zxgYe@%(eaJUkdD)%iKoVS?rzaCLuDal$Xc$sBaS(yE-%MqZ)Dx_brPrmT(=br)X0d ziOy;2NW0~gtX2$?jXLtaS6l$D_^Hbc#%?8Yb|5oA8ic(v+0;XmaVK)`#nCl#!w%Gl zGzRN3KKedgmGca%-<<&(X_X~RRYRCIyQ!+}8fgYb#S_~})(vMD+dYjuF{-E%7rozh zc&aV6T#0sCjG9p;?%lh4b@)vW+t6UFB2F!cqpdcKt0PRRQ%RBT`_owzn{+OJ4T?;O zdojm&Fvti!USKh3Pa9{asOUnNP|N2YZpBT;0MPx^fs8hQ24mNfIDHy|- zK2eN_GY@Mt;j5BVSV3j)*hZU2SsIdc%NUoKsfcbwbju+N%zoJgFiBd&Qj?BpIut0F z#$nY%(vP+zbFQY&w4=_LmPDE}yp0w(Ayjzw>-=ab53hKIqt#w(7IRLuT$78dJ1 zGbCI4YZeyjeIJQl=&A{ZsV*pl`q`+HgD^!g%&i&|xOjJ>Gu@**5pp~e=@Mf}6zh4w zy;#aMVuU@?u`B@!x4C^bNn_WI5ru95S$X`J+_E#4RX<)C^v@MZnm1>C*F)|d7KhYo zRQG^_z&HM{;Up^A;{FrLZkSw!9mqlM(z47-Wj^vl72M1nhvR5o+K#2q4e2X;cf?R0 zk!jx9rdh{S<+p(Nql!_gZf}$lr(v#xsXo0$6CvK!u9==rc~$+%aaRL9maO9G`-6h1$)LE&AD)qsK#tAVR<$JPjRTCTyqn=Y)srEl5XoTD6xN`3}3$ zBLXIs4$0)=54rzwcPC1x1|3KnkFrImFq1=fD(QtGzA0PnTpOy@yTpp|(;sr-`&XxS z(j_115JpNFf8S#yuU0EqQ61|YJ$u6{!(&=z5%znJZPL@C($6$a-tZQUH2{6i3o0Qf zdIG&&!mQ$ib+o|xzW=m#lB?SMz|Bz<61(qy2A|jB9*fgB{7WN87Z`7zHIqjVV=6^7!S(+689TSooOk?BWGcomNWiO)QA&z|y$K#gpeBHsXu` z+a1*;<>m|*OXvJD2cyx)W(+#d<;(90mG*Y=6rMx&CtI>f(3z>_Lvmh3a;}| zuS)r>hKa3l_VB&o?Bz=%=so#_mlRW-<{b zR)8f^$Zmbst!xhr+vl!H2n41UOGW_0XF09i6&Q$5jufnF_j3ivE70iaMaR{;OEo($ zJ~#rsc}^4Ae(QtuUT8JNq&RvQ*jqWr2vcq+!)5fwlH&RkE_-=@*&Mhm!9bUoP#!LO zYuxp({StkVN7vZbIBa&!_yG)CYaaJHC83n4S|xsF+n;e&MvwO2Dm)L5G#XsQP0!v9 zyej~WRm+2Lp;hV_mX@Nv$JK(-0-ytvYI9y9&Fn*~DE`px@crC9j~z{tcbC|jpiOG1 zrd|)5zz^am9+FuOUnr#B$NRx=@=)(XthZbWmYt^hhKLHiCnlyqxs(lpe!oNRTYE4g zBEP!umvyy0UI~0D`RrbLR)Q4Pz1L5(I(`5t=1r1w>2WLaBQ|k4a7P15`@XqaH4szw zZC1MmMwN(JJXS_0{xm<~*x!Edxl1pchdUkf*>|$Eu0nUUtwgoVWCXp|FjsF~JHD+} zOUi`m)B~&3x6ZIzZ)$Fh$&cCQ|8NysXXp*eot}*NkW>PKO*we&D?i55-%{xhEYPR6 z-}jgq8ReE6Hzpx>iRJ2TKo(i4-Z2);&=aZ)9eIc3vpk0-1_Lu@v-%{|8Ml1nk&hj@ z@e=EI*eQyIWBZ!54Uke6bb_B7ZmNMEkya?R=2zxq1i%u8Ri~6UscSd*m-G;AiKd0z z_H$=%m6~0;zR;tGGO^eK)T3_Ys+Gsdv33be73hh8?dPcM>m6oOkVDPearF~2Yb>D7 zkXR8>fUIJrXN6f|px6!q?V5M~rWckDW#83VJtji{xh%0evozEmY`#44Lw3&CI3;vB zf!ak23oJ*203u3E9jGkDO>l{v;cWbv&W*58m8u89)o-7`DdA+64%_u@dnGF-Pv3ss z>q&&hxYX+f^$6V6v@|YYi_}Ztd9Zoz)Gl8ZQb017wk)+{cQR%fDmw>4E5%`5x`}+0 zy95rODbj4-zWg5EL?LNW8d9JIi~Hc-(Oe~=az~~btyRUg}ZgL7J2XPFNM0` zlov9I(506?(KHNLtwY>!uU(PJ?56SE-U(3PNGl%8Wv0D;2AR2IG}p3706Pll6Tr>f+|> z!)M0FhTbqzzFT^~RPfYdEf8>pgJkSj9kk?}l{s4(wLj9Y@hd5Bb9PF0Rx}y+6YQmH z4^P0G9;1{bp+xIfA=etm_(AwJmS=yKF;-}7Q*uNy&DN-kZG%Wx=CjbHyAn!M;f}{% z_t=rasM9}G^P)_85?aPPxwSTEM7v^Q0yktHD zvB&liow*#_v!hy1+j!A1;UeXt;Z1s@H*w6woEbtZqomo+hOWDu-FM|sP(S{tcGn#Z z1NC`qZ6K!+Gub9VCu>Dv=FoqC`q}!JXR8n0suM zf@%t6n-V6_nJXJlMKUXqCooTwurP0J%JC61tyqbwO^Ar%Ky2k`WcCWA{)gZ58!e}f zK%Jm;DL-l{b5xPu>daOOV0OGXOeRtNfuQIqa*hcukEdjf*3PG9p^{{?Qm|QFn6!CO5w?lKkf@o4 zJHyxk$PHvLt&|J?H6n?yp{w3PUtF7^QH-u6lq?e)D$SXFRf5fkFh-#&0OBni5nepZ zp0j7gF!Neb5UX^{ka)V2lIFpV6}FC}eC7^pL|t7tLthx^T(+qICGQ(hGA_#9C>lkv zH3Ng$nW&HosaMx6L(mW^&vtqCiLyv|9-_S3t9|_+Pup-6w6$&!d`$wXqtf-~P$jj6 zMj^hK!7n1MwVhQ)NMk;XWxG`zjVg4aM0CF-%hwO1l>y`fXZ+0m7>Rz}Co#8(NBO1B-qP_+%A?JP!-VC#hAjl;rW zFYD+G?K*81q?+3kfhPS80TDo>e77c`)1YJ_I$%h8FWGnq4L2U~{5 z)$I-*&@nrgvgZm!fe=iis#ri63T6O-d3KHq(WAxjsZlDav04!$1=jN{&fwGN38854 zPkxW(nFwoER8>A|Uef~Rc9iH2Y~*a8lS$f+f*uChHoTw5de|%frDCPCB+E(Va%RE` zBM&6auk;uyMD{}t%gNua@n*ZEc83u})YmN!F+Bb@<4<#|xihJytt5Bi7EX&Xg{BNu z1(VB0Pa6I(ts$C+0MbaLdVj@X8*Sw97>nr3B<_(arG`!=D{YpD@^HuSoIR+E|CK2* z;0-y;=~>R>*Bk%<2?z@@deG;EunWSBa*aG_4n{eGELpVUGgWd^I>INXi3l4`44Ot! zg(l(5-hPgmkXOgE#0PxSgk_@+)fw;St0$w5nT9j@M3Uk``m8jrY zwL&!tU{MUyX`}}cDBXFcQ(9#_sUy#|c2DbppOHmE4HPm!TC}__Az0Mveb}8QdgAgNvx!0v|8H_VuCv2sZl6{AWeql}Z$dvfZ>!Eu6e%&AkAb3S3ksyJUeQEei zzw#$Ne_kbi)=l;M5M;BndiMET4r(}t-d{>QSg_C(TiKJ-LW5Y2AP^@aQPVUvkq6i6 z6J5`beM#JD2p`45oA4<=OwNtXFW&5*EA1{*vVsBu;0AMu8e1C0R#NF=pW%vq8?_5d z(jLqM(0~b|E4B`SJ~~m>!J^n@6G)Kl$7@vO5_c1z3$|@!9y481pm1-w zP&JoRS3fKV^$QO^esD09Wmst}AyX2vbqP!AH( zxs%=dSoErJNNTVUc;&wVmCa+m)+o<<4@VFdKWI3^zs`^Y}0j+)CP1xXJ9M zxxy4hYmYo!ZzX`RsNTzU)(g0u2_>yB%*g-2E4R){Vx1qwR72v_}oE# z|Dn}mpELNP0xYDr{^Xc)aANoVd5UedsM0n2C-S-6LJVUV=H7aG#atrWN`&1oi`w1L4k`WlAv=+N$(I*D3|`te@L*7F%80hK7c zHshI>C3NZg%N#t5rg8Ufk=hN(Z=;w)xPgV;)fybF%p3q%-f$OiBLg9tQA!f^XOhOyx*z+i%pk^-!rQv5ey5^j)nF|<l7ykn{e93pZC`OeCRPQwcicCTC;&e$#Ny{b@< zN_-Q#Ojm^jnNMYDQW0iu(Uhd@tiW{K)SoLtwN(s+cOnJV%;V9x8QK$R@esadKB5|f1Cbjv?ku! z0qw~~iJhiMi#tqxeV4_iumP09F@Z4(;AiJxYn(RV;_1~nA!ujTK?vUiTmsT!gljT0 z&z@y~6GOobP6^u&i2?x<6qzDQCeM^X9p(8!LbW`E$QB5_@ka*zVz_li{HXFj*L0{YH3wEjJCSK&r`e;oZLRL3PteEx(*Y;Y)9z~=a#9C&l6}{XQWVy zMdkI74P#V`jAG1v)SWtae7|?6X||yW)||;e9OEe^sZxlhBdD}DR6FOsW%&cNqKG$< zZs9C05#BlAQSlW4>|K8-DR_k8T4ft|^$WZlHU*Cr`aFOPyOyxO+P$oqF%E8|0-&ld zfX_2E?!FLOH-xb79jjd`3F3hw0H%_IhKHutzB_auO7I#7F)?;>A&Ro{ zu`j%!Za(3z@WBO61fiPh!}fq(#*j!zE7nZxxJf5;rJw75BTd5_s1ay+OzwFs;IODT z-DH=sTULPGB?DQLom~SmE0__xR_D7y*e->P^2_+(Ff%UvG+k)%gg%}*8k=G6JhDxT zj=!{Sf21OW8l{e|ree;PUVA$4-=*F$ms?007C`MUKgoTJ#|Q~O$G_n9hhh(k#Z9ny}2DT4Ff;VSkv>>t%x>!in1nwk{K|=ij9YD zC``f-G|3YNW$h>u6&8l9=&}1ryLJ7;a(8Kk?Vw9=)A}Ij=37|jrwfH<=381H8mb9Q zaWbqq)!wtxYEsLbjFmG~6A@!UbGY8JVm%tg#IxB9jUZdyYI?EmK{?~$I($-;A}Fb* z%|VfO3$<+CN)!5lq1=E|mla~w;zRF}z#nD#WT5PnjJ!H!5k%2y3a-M0q8JTtt<^9` zQztRZXHEf6qj4R(YKf14GVEZD1Tp{>eu^@X3Z`o#O>s_*kpuN=~7;aadm6!S!wT&DlbiLD^0n z;^@$GyvSSo3_>$hsaCht$yR>^?WzoZIo92vsBZdlD;E0%$|&1C4+bXDb)80QY4+Hu zO?4E2nyen4k{x#A7ZZ}_OnuhqrEsIf%^%}xMHH~22tu)OD#3~p2LVY;M%B){@BblX z2agzLQm8@=Bypxr)yb%lvtO@Z3gTW;7g@B#kYGFl5lA^rj=N07hG$?OgfMYu%T23Y zaRbORgK*EuokEJB98@Kn(Or|A*?sHlqp(NcP_PKVfL4RFQWxa5HYfx=Tv=_e+|%tu zcJE>@XG3@@e+f@IR`i|Zw`O-(nF$sOsreIknS}N7n=GtmahT{$k+^x;m{WbbyadbmP z!xJ=tyd@=^WWUtAd3uCbH?O?7tY8oKIee{!t<^GsmLWMM6s{4_DWM5M*)tGOqAYsR zEEfIi%C%^{_kUOIE#o|E_Wso@SO`|$93x)Y>=L63La_VWdtl-9)B`rns=dPW{F6*w zvqRSgRH`;PfqB~JtgF#elYYr2qm77h$J&^j$J$N^bu#JXT@9;u3Z2+iXIn!y3JpEe zZLmF}+AXc8=$<^Ulkt67+g|4`eupl29m-Q%j|jWdLewoCVPOf&BMY-D$|_gNYXs&* zvg^o}jHWs;=B*b{9NXGf04j4R;?T%HT$cHbOY37@U`Va=}5)kLHd zl}J199L=73jHL{D!r{zNJhGv)yjrcSCI?XIbR%k7(T|XH%PzGN);xYdXipky zw6A#9*gD7t2jy>F=<=DXtJ%RF;-P6&C%-YyV(lBctA#QAa0Bz4b?h;bVB?${xL>z$ zV}9>;b4m|Gqx`ho)Z9`RV=PG3#K_pU>?xkf)(*-?U5T2B$la`D$xwEvFjUJse$#C# z&xJ5Bc}nGgf@~omQ6?P$Xr?nyy*Qgy^wsW!u{q^bQR`wedsF5J&S(*b;j}I&cuXhJ z8aMb{kO)}>g6X)gW?5DCfT;qmA{_*5Q+m@JH>H^Deu1s5l4zLdC5(}oSHTrEmdyTY zMCo*p&!vx2Hb^DgkqrZ(Yz)x0bMhS1dsYu9282i1O=GA^-Tv?|Wu=8S3eODhBv{NehKDkD$wqMKx^5FtC_Y)A zF)$^|)v=&8>Wtdxy_gFb-qXGs!DhbGvg9WWj5!!p2zq%kD6;FgvO?~2sY*HcB+6e8w`@^fxq=6G@ zWP8=x$$$O)?D34jaFIh__mOwJ)`u$5J}M!eeZUeCneVWMx5i|DK#LOmM_$ozu4@IY zb+Hmd3Lz_)4p7J$d8TR+glzkeQndlu(BQHBJuN$f%~G$D!B+e$3F;_vq$RS2J1$B$ zX!|aF!zP!y00e+y6btO_2XRNFMGIVokqP4M z1RDX_5t5FORg;v04wVG(fyJ498T9qvBB?`tq(Z{*iXSPHlc1h&z_ zyt!p_Az7U%h=q9s2QjFhrYUU!?weERx$4t5;tpAgJ>(b!_WPP|TR>{akFa?0m@f}L zOqeo3h0oDKQ@~1+2KlPXhqBh!)s=<_(6L3XEyWbv=g3gnWVQ6oA?#=Jw3Q zsh25Jv{B7i%me|nre0gG_wetF9WH$?cb6)GkPbo~!1J}~F^}VRL^9>0MZ7WV2o|Y? z5WtHHJ&@MPAc8KiCSNvL)k8= z;RIvzohFyZY7frWQsa}SZD3_ZzL)2CJF8y+!0+*@`FSo!F~|$M){zn|#T0j_bR6az z$A%VCQ-K!Mg$id$q3GI-4)VI7snDlM7Fdw~5I<7xNT zIj_V^W!rpm8_Rdzs6?&DD_RhW5QNexnJYoTArS={A(_aAB}?XojHKG(FkWj~#r*T4*9 zP#_dz4n&K=_c!wXuE+DQdc^yqD+RLooHt9)5wBi%i&=Igiq0^Dn`KrC5p zl>}>kW}>u}Ip2QJ4H>T*!rX1hF|bgXEx%KKKBulyt*fP(sG4oUf|tZ|O{H8ymq0#F zf9fD)ggeDe40&_C=|=2KSa|{9-2?d+FASdycOiQUCr&6cnXEG9(=r37&81-_L5HVU zu)j|FU2)cW()|crT1YI|Ou>K{h)8Q~7D|D;&;`H<5s?6Li-*s!Gw5e}tR&e;LcZ5> zce|}0x5aLfEHq>h!)5M>)pXQIj;cRPmMXX8RcRrsU@*;k^uF_>Ct%5m`IeL~8vuwG zlKP0>K-MXp)hUGrHBLm7Y}LJAqe2)=mNY$~Lv01#Y;Y`DklrZ?d1ER?b~QnO0svg$9s>wD*Izi` zT+uMR67b?-DYk@|%xr__2%zxC#Jp2kv-%fUXB` z)4<~zC%m11PDP#7?;=7uRpA<1lc3Gi735jT+2`z@m=S)9>Q;RAXfGh-r;h|aHS@X7aamHk$<22WOOfhKf zBl{+vb*S3xRI?IJDl!w99&G!*E+ZKuljZ^#zRZ>?*;^F!BAN;|LSuDvsjDG@C_b8r zM!9uUW|{UE%9;YeqwbK^BlklG=GSmlKAUu|1sF6T5ZHG-E(k+q7Z~|ZG z3_EPYtH~7`_OswYW8DJ`8Y{`7tEeGJKv9nnFibp@>P|r7j2}htS18X)haQ&{l3)!O z%Ke4`sLTE7-%fyFGi8wT&v-PO#o!%95O5oissd|(*R@|`>hzpYMNY}Y4-7IQ$>cV!T^9G5c2A~A_GW53-P#Ct}vqLKt@)E z!GL1`0GY)`6(h?oSrQNvc9^{RBL!53R;xI$JVujI#s}vNhT;2;5+J8Nmjq{aTJ7;$$G(_yu-1wirpRskcT`qkVBqsl@KU@e6p#tEPS5H2j`y!GMS zRKm6n`Ltai+(8~X^KMN#W^fNL0K^+Gc)BoeZmHWEy0_;q&;0RRb;XRuVYD?XvD}d} zR{`iQlrI|q&?(MVREzEKnBJCN5-1x0-oZQL4B$zah8l?=VOaGpxwXWcjjcIe{vQA^ zp}^n6vk_2N2~dwlaCVr`51-gHukXo0l=TGL0l)(35N_$0C$};1(aZx@=Z{{RqhTl*^K7Sa*m~NQ@ctZff@Hn9Kw)T5-@(u*O98wg= z8b$yR0&N)t8Ub#YL=$(Of5sSzfF6m3g_=)Hk^t&}J#EOgGs-Lu93WDobxhD3U5`j4 z5-(850WcYH2KW?@q{j9^`PulbAvY+`ab=iK(bCiAg*2Q zVCn%K06YK~$rO|$PgbEbs7%fQLg%SI1)v&*)w6Fs^xoEUGg(QRr1(8wR^Ddzy;{vn z4XD-!wuaP)D)^@@hf{9OiyeL$SzPyCjI2R;n`;U|DP%gdX)ZdIAs46X$LDI*fM#W{7d zfoJB<W232UI>IRpCkX;r_MEpj{>ulYlaYh1EBMa`90ieWm}$H$u$&E&?HVM zpBR<@@UrhtAKNuE{Yv>}qz$|4cINE;-TGFq59Y?rdu3InHjtjtKh{4JV!OPQI0=xn zrVhtZNH<>#`hC1_&0rQ00tF~~7qW~2G&niX4*4qNUf*@D+B#8vg6fr!c4-o94%~$% z2q1)D*q*g7b@&FkwO9RU6D*=%`9SnfD+jR3fWL-vc5*V31Fly02pI=)26Rd zr~n1oP8YFyQ^+RSWQ|#ppJ}JUEw)jBd1n3nYy+dwfJNT1rE%sF_KqEj1oD)Pmsh_QnUy||oVzxp1G6h0 zUK#QCKznWNi%U7o%xYyh_eSirShC`({fdFAqKa?@i;Ttzr#OS$E}NWM1f{i32C%fG z%G_rP3fJsBN1u!5)73F8yKoPOLdkXeTCl9JlaXxPA ziT9G06e#{!yyYB++1^3RUJo-Wi;JqHWbR}_CAR^q&;dxmTAS$sbp+ld|No%+8-oDI zD;s!v(fRO>AR|;W$mi?cS2BT~I$6h~1ps#A1dt8j8G^JJ>!p>^qyWTN2liM;0vqa_ zQ(97YxvVFe273m+V+VI^TU2$2ZMn$3aciKpG_zChFndzfDFn7#1w%apG|K zI2;trqGfgj9K^4J?0-40RufdX@>xc{Sv@~KcFc%Q2U+Vq?!Q+nO%On=}=4q8lfhX8K6y( zooI;C)7Pm#Cq@7WgG)eGx3_N&A`R}x;4DP=O~Hy}gqG=Yy05l$bwC&ng+}B!vYYv< z{(a?J7E6`_#RD+Hlm$i^63Afy0}cgYR(VvlW@jZZ0&9dAz&69l)rb4#tgfn5;Ta~# zO7Qi_l>#Jq0Q@~T1BID<4T|PmAml0{2c&PO8=ZGzI%H_&<&6_}I0EjVMH?YaEu}Pf z)X<{XTB)$fct4cEAUQ<<01#S4Rt|w@jdzwl>j7SXPhkYb^-xf$qDTV1Srdu}uoN{F0)PM^LKS`TkqSUUv4p#c53O-{dNjy8@Osx>`{&Jpb?Sz^8yKD2vN3T4NB|*( z^xa`QN11kwY5)idfYksdtvLxa3(H5kcDfLQ@vaD0ss!BlBY>-b#Dk$PZ~z8xZi11_UNK$BL^HDEwj0DzDJ{{C<~hlP~Lv_kkKQJX;HEAS+p>i8pOgP%r+3H7yv5dHVHjKpR$Vg z&w5IQ&QtBYZOiEWsB#&l;=|JWryRIF$605FdpqeBXSP};9UW21V9R3njzXG1jJrN38sW+MR*Cs?x-@fdD> z$&HTc31vXp0MZzdYXn;>0B{Cy^Tz=Nz!_(-_u9CzMQb#VZRD%>NXX9zz#6#%EliEO z!VM4j@W5}i%q;TxSNDEJH{j!YBp%L@49v&@a0tr=EAtUV3^5`pOZXkxUvhge?FFaKMJYGYftQ!y`0P-ID)kjy|Oz4VcTQB@h>a3%D zB69<70Bk{Sz*W;=E^q%u6PLHR5;1Obg@}ncbysVIY)=4e%PbUCLye4Mt$M81FAm69lIAt?^cH+pG})tSPs`c z<9uR~a$wA^T}fJs+Q!Hb!F5t|r?DvL}4 zphPihN(Q*MVaI*+8TV`Hs;#cE%2E01&3E7Vu)Q!Z9=8W}MIEjlMy2p;fCX@+hZ^Di z7YEuiJ}(Rt^-=(1p@xn=RFRVKqc>YoHf2o?{LnV!c}bbL>2&Q7i$mLyr{ni-lzSKe6f(> zimLGR*+o1I*V>|WC>n(&D+Y)}%Fn_Nc#BF~DA&aj*&YSi%-J|TSbD(RT@6hI!EXU{ zPzy>~>!@@RG0i@_S_X*(DWovn$p%DAjyC2m;Z8q9UMZCPRb; z?rFqok~YQN%V-{hwZ0D;r(du<3&#F`rjWZ)lA=>0etQXf*GX;ub#3dUS6*Vdpq{+X zMP#cc^BAynz#pmsv@vQI{szfYx_dKV&A(_ z@1W+(7Dh4cF~&Kka45u(aKyfO1a1IPFzGF}&kWiDl1!2=mRS$$7GHU*RV{@bDEh!X z8Ax=pfk0qHHv@~v?GEPbtDQ4!HtejGi!In0V+H`BFN>WSKV7;ku})b2G1eO97@I8? zrd*QZ{f-dm0S}%M1EAFmLz7Cxu5}qKgSK~_R8=(73Ai8GXWl26b%~$x;?epP zpWMb4Ml(sJ+1c)%l~Jt?@@~^Gvbk}_O)&ypP$iD~ zj74jf0Sw$~0co>fK*D5T45$PEXo-O)(tMKM`Q>1zaQ1!=Dh7ZM0APqjP0_t?&3ZWDL4bvne@-sTn+)nIhS#*G}5-0*;4O#(xRGifVi03c%L6>EfGo&LO-(f^v z9#p^`fZ=)BKWdAzG@L?wcAWx%4X47ydmY;UBNE(AVLoR5^7VhYQ$p{_g#u*1&cYP_ zGN7a9`kUS=MgFTEkiI?=0Jx0Gt_1e%4OY@pTDS!N_peIJYOud}h^Q4W7$MDelw|3y zvv;ORQW*~jgP6R>E>bY?)y=v>zo1zr?=cuEOJh5ygWF8x1!|QxxFnMrvC$p`-5w+W z^x#B7UR)C|PaJ>S>O27tT|ci0eLPF9z_i8t)fp)sj{>{^E)0)*^ZOI@SDUx_8sp6_ zO??QINIC51*zx|&OT$tk4FiCL;>w7ovWJfoim$qeJa5_L*^!eF#OXd8wvcZA1v?N4 z0Av{qedP!MJg)z|aUGGY`fMXcpa`tq;gDImW$1%RsQ_8PQUI_Ao{MI49xwo?!-ym{?6k$hI7#&n1dJ8PU0v2SE%4(Gt>~?J#0NyOo<3h$x zoGm$AAfNsz?^e6}mZsYkAuo8q|MUCy_PNw~NR{bL+yhVqKr&y^JaXRR)07P9n;kIE zTA5487^=mBLRibE6AY|lO&&1G^GIVW z_EEC9gpj`v=~yHTh0t!3p7x%|((T5NN9yutSK z{1ViVdY|NQp0Gq&FiI6$lI_p1(at25JvzVC_>dCh@UOVK3(nCtd*KV z1MtkTMNWXn04M@r2OwWQvNw9i+}c`ej9pvn4o;=Vp6{swDhi6mcZ?QSfe&A3xkhv# ze)I(Sf1LUAv)|La|J?o(fapV}01HX?DF86-q;&%U57?_w7812Qe5(k`seg5ai>-GR zqd2-KfG6lFgxK43xQ|SQtj<6^p3fhu`p%h|l#!>6BZx$PbRkXbGsnNq;5)m@0KR)F zfLJA(_;F=1ob_vbMF5ikRGqKiP1pG&M+7kCHAFXQO%=VcG?bgy3S>3;qLn_TN`6*c zEfV3@-qVls{r_pXx6HVE5+}6D?SPHAAt~*FWDF>&agpcVYaHfnh9AFMB<&vJKq(ji zh~>SzV99>D18*rY=8?RF+d7!dSWldz8yuFC0kR)qUSXWxqj$(X=0QhJN(`GxNbse* z9VP)lDJC%lAx6C2Q%tGx3n#FjEelmPf%Ccq!@hkCShXRvV(ul20Ky~Ac)+p!amL~` zEnH^!rA&iu+#xQn>+?<1>fe2E|1w$h%8LeGl68>C7xPR;UN>7p(`3NFi?o%SZoc<< zX1j0uBy$T>3h@qr&;dBL>XC8YW@t+-r&<7C)d=GslXj|ddE{IGcX1fT5R7Er69CL( ze8xo9FsQ|z;tH^iX$)qQkxyQ|8$HnszI{;%s!G@2gX=?96+SKd%BgkjP*j}DSDtrl zXtXLf!P}|4-I3v!5i4+x(eRg@C$!yxQ6my0m-hE$O)hA=FUulVknQ zGBZsS^Zr|OdfuB!R=gjVpXFiUAgpW|XL;PN9fM1Ov2WncTb z83HH!evQirl8`_)*d~Mn`D^dwvog&ZLa>MKsRLl$%gKMEud@O`=5UXbohy_V>c~s9 z7*s}aosU<}7d}<_Z?_o9A*mE9t*6nrDOR-iF5Qm4@huf}!=i|b%gv@RyqPV0PiuZf zAG+wQD?a0@^C$nixwmWYh4zYm9B86&2l$y_JXsBsl!so9GKXJM`kWU=Y8TyZ*Z36x z0ce5qVduhm!#?jZ&Rv>)>aH6bg(IgA@e{PCp4_9ZG+il_On%1cd7^dt+zxGt@I4}h zz-H~4_*tg~yVpM9rrK?m#kvul$No}KO9%iwHLL@Gs|MQUi?TPDw;zyR18Wwz01E(9 zK&-!SbpaU5+45Zq3KethfnIgbWn`GIK93S@*2CYZwmKWYPYnP?MZz0)y`cAu;UbK8 zfw*V-Mr2M$v1BC4pWx)v8ix5zmE@e_v7qg~MM(C}SCTMx*x;b(F|zrr$$7P({g@6| z`WanA6B=xyQa%=F1jZ`@cDar8lBMvP=Fq>KG^}=K=4EvNu0nDrt&5i>*S%8h!g{Ia zARr-}w=5M`sLy#xaZ+M#i3yPfrLs!$9JjyYl_K^$U9@+1{9<#DKBxDS4DNoZgVIAww3_txC2=;yVC+;= z807aoSq($1SuOd2K$w9P!Mg4{H;;oK`KTOT1~4fcQFby)k`NWbJ|fD-=ee3J zkPr+X8~tx4K25cxd=st(fZDKt)U<5!Eh)L|y9}&rOCm`U+7rQZl;!W(6yEi7=L(tv z09f^ve$#ulgWF_rGJrEOx)Vtu@#3!tNP)cFFdAT~7#TUJ;%BHylH4Ux3YPB<0Hgwd z2?O^kC%}O;yEi|&Oez?}0w4eYBe?ejMv7dWGtQC`V)o9VqM~)n7b%Uz8QYX!V#^&9 z$j5;Rrzo%P83mwP0>F-gZ`2Itf>^0-gWEg#1KB|^(1(*6yx<9>*PnQq=kY}`75aeDjsiAbuaVTO1ioeFT0ff>mV%c7 z1wb4Wcti{Elq8W{^sZ>{y=LDm9b7_U+@PS@^R)X0Up2KD0=mU$;MEglFAFqu**_fs z_^OA_m;pchZxoB)^OtLn@&rLew_`7B+Q%AwB1nN}>a-G=3VN4|Q47|GLY-x0H$(HG z+PR>GSjh-Q-6Ife2o8h1-CrSAyn1#R0ESkosPcN*b+>#mjWi<1?kt3tkRk+oK z5r`W3QxGGFbO!_R^-h7ABfFNEDmD10#KR(<*H3C*=l}^?1&?S}jo$GEmcbelqXHJe zJ<5~@#btzU%;j(jY5;txaOx_JMvvJutgeX`kIzUZs_+;8Rk|$CS^_cNk5jrI051Sg zT%TbIz5(6EO-@G7V`4TnK;43^5Ib#ZsJ;KDLV$Mx0Fkm??QK30KJ#Vt_aw_Z@{(E% zJgU{f0EQ&g*WIe-Ij|pE&oe4-{Ug1an)j^%Ab+es-!5VxOp6ZyxC#Jy`pxD{LxZ`g zw^;VJDVKw(?d~nQI!0z^2473lh)Aw;r+_RzD;I3_){zB{Ty~}a0Q?{_M>Tqb=H)_`ac9nPVufuB;KbhEIpS3$T%x|vBFkcB zmD4nC+cjG>T@;C3!@$_DbKarq?7j;i4(+@cA8T~7D1b9Q~hbGZJtQN?Yo z;bxn?&(hE?9B%pIme?KVEHeJv{R)aoE5drB)#%>%*AcFB7w3njp}fcbrY_F0Q(v0s zhWBc!&A`TGwvvpLXlg5Lxw)no+_eX08D}{*xyq2`V)kY4+7y@fCth^?O3@3$l25+u zdfM|^+3jU&sVWLcP@v1yy}$AK0Oh zpsj_yak@Ix*i>$~;G~;t2*fNxKJ?aA6~rla-O4Coks4H039JRRGBSPohKYAPgSO@P zGj}z=`m25q1M9x`hH5u;gX+~g70Ar1jTrhgB zQ5FQyWosdnLC`$s!!J1N`^R$w077BEK(ndFGg*3j31s+L`tAOcT0+B%zgD`XaJ(0M zpV{j%-maEkmf}yUUaJ4?Q?{Pwfvp%z>}FZZO5yR7zw1{!b=YS;xLy$~aNLy+KVYY* z$ONmKxQ)4Q&szmv;Km0|Zm0!QY_4`lpVo{=CnIG^iR=3JoF9{AG~C083B!&-`**&M zry_4@{QKUNja>yPQ1#lkOiR4K@OfBs;zQVGS9aCQHV9FLipfL7Iu;b}^}UtvyPWs~ z24)TM(?!E42>2wZRO+7J5)K;>?%Ccs@3)ChQa;z&y|dw7hYp+i)ym%TVj+6dU;2AI zdiFtqKJfyO%cmT~dgPM&roKyH4@r90XTc*rrP~!%b-j6Iq6I9EJg^{84-cm*(_M~S zXD9nL!PM>Rc;Ut{lR;kjpzN}ZCqHS})kA7_budu3C#D=agl79OK3-V7KKH(BHePF~ zS=lP-KT9>dt}(gwk63a!IR(#-aWPBs^2>cJsQV;fY`wBdrLg%YHJT%R0r#Kl0 zOY2%Zap@^VNe#6J)#nA`xDx<{_1u;BUgP@Kn5J^z+k2)K=R?nC@x09ABA1tziK19b zLY;6QdYVPSzVrJ&U9rO&96NvK zjGM-^-IqoC4zTFzZ~YQ2&K(!;51kwi#-MUtM^K@~S~$%G0F9~R1kv8rwE)KaR6LMciR0^|`B%sGdH(RkR1?f-=*Zb#B zYgGZlZ?=*G@Kk#Qz%^1Av4t!jA9M95l3Mr{*(R6P`@32wkBq{!{no5zq z*eSf8si#>>9)94g@jf$wpXCvdT8d{z0RVu3RN_GPPJoGtu{1<66WckS!= ziRTkU5!DmJQV>K8aEw|A1BNM3kl8oB`BVKF(?+eS-_b>BJ0Eb7o3B?=)J~NSLaAy? zDU_LlE!BpUza?$`oIhG~)zjX#2OpHMx@$7 zN}k!S73VVm@B|qdxbK zmeb+sKn*jWF2hd%ZYR~pun;pO1O^_@eOSGL^^vj9qayCE9o8pb7uBRhir3o7cQY!a zwCp}gF<65=GgrtealLTHuVM)Swu#R<&FDJ1bj4>i@o<~MN~LfYWAca?+3H=k%ByWF zZr4rGR2Tqp&CltmF%vFfD)h0)+U?ix7n4;+?qglDb;z=Wo?t!2@+dXm0{|TWt})vY za8)+alLf*v4XnmzAK6e`lfYyUp3c-2dVo69)jo+&%m2PsX_($uSfizp+#tcBjR5`-T+Jlrvi7;YYHva9>eM`Tk<25jj2*eY z0p3r*f`!3^Qg=`(CkhPXyxgo}1(P74zOBP*KD9XZx@cw@GTV&5NK1}reA+JEnR21p z0D$)QKKLGem!I=-!Vndg@fNSUm(VBmt)Z_W^!@4s+}jCny~lH<(Qo*;*!9ck`wX!9 zy2s4=&|`*0?^rte#oD@tZnkG?7g#$!OOSRkv`p<5y82pAFT4@k+58AGeIUg$x?XQ^D1`np_=bXM|+Sp=jJh~GpQtp zRu&hI>dqQ;#QHUAI8fzzE60^tuBersn7b~t&Tt6#*0NGt&0jQxRQ{#;Y6!a-8$T>yvS5%dP-wK4jjK@Z_##UO z;}TeXDsV^PbN3Wzu>uf9#;@JOuKd!Q76x#=pJDiN^(@6PzCPyBtdumUoQ#pmHs$duy@)L~Jn_a2X@-PKKe^%?*?qJ=a>5+PIZ zk)G!pzt)DAicwe?yqvROsh%U&@G#41M%;8G%RHmAo3PEK9p3zamVf6l(MxM#DeijBEL+*m8|g)Cfpch zqri>rdJNYcEgQX|?GUG04ywj4)P~%$okmg#6jH35_1SkV7K||$fcn6dO|3GVxyuNo z$pA3OP&SSt^Tjt?PP8p!3&(~d#7tli1+ynOI`%`EWF!QnDm|n&vT7!*Oj5Z)2NlO$ z1t4etN8-qg(+yIjc7&i@1BGW$G^1p~j5=}uzwy*1;eepLiVzjP`yX3+pI^EK%$bT% zZSN8%a+1Bzn~fS%F)^jGW2N78{%ZQNp@D$hcX9wCB!N6206+js!L03lJHG&^2BXRz zR^S9=m>`u@<(S1oM%o+51f`Lg!)keYr>z=^>Cc}E!EQTUFlSw#f2v}Qtu`c1ct>t{ z)f@Q_(A&Bgw$+fCR0PVSpoBA0bSI@G2s{3q*#tBUGyatyaL9~`>&`T*O^O6E1y>DE z9f%kCHqtPms>&n7-3x9x>da^{5E~Use<%=Q!99( zy#uoc?ex61Nx1u#F1eBCCNC!GyRQ2IKqTqeT7hzNxIyh8b zF8r4+IkO@d`P?|!Ud{~nLLvrEw?)p(otr{MxX+n#^5rx_6=YBSfN;?@G?6X3-oEOd zDRrW(QnOEY1_MbU&pgp*Fc*v$2|%fi;*BOEYa}N#2@?e`IqyjCw1Q5ZUY1me9?XS~ z%241XvpkSoeVrk;PNY=2US$NzE}t6YiI`blbkFL30RRyGQ1{wtQbbnM1})7X*V53i z7Gq#SQ*^>`oBzwDI8!{CwX_%j(3m3#RmIZLjm6{pf230-+V+IMxmxw}{c5M>7y|)P z36Rs&rKBY5ibuWAyR;bH;A8+6+~AX?o2^CA{S0Ih8s!U{)L8Sf{Vvr}c&b_-`E zP7PDE9lM9AZs*vsBaM4ddeFUQ^N!~ouMsKtQ*cfEga1#~xLo|0XKvdw@1*C%Gq)A2 z_LIZ9Y7Y&`-Z)B|8`z0iKxY3;KQMX{zEV}#7Oj;Xi;o27*v|BQ^m3!sfQ2?CP$ zl+3v~9#!O;T4%HJHFb2n`h8Q#bK!w^mpi#_G+r_O8Ll1HM@*+eIEpGHtj@|bX)qx^w00Z4DG_{O?k-Uesi5 z8NBo0ba9X?QfyC<$KxlAebZ)>=jL>~BUcp$=M7*70FEGJK^(UD0&DZq4-FE+0JxKF z0#h5wEsPPHC<L$m%c#1k=4o^R{PWYo@->>VFbm-lkanD;mekEL zg)y}@=h;a{M}g9hnXiMhE5!K{ybomq%E!?2em13g8{+OfjdPSpuuhozQG0V#x0N7scareS>%eU5tW{L9~vB+u9FMnnfp|Hca^Mw zb=@89eRAi(@hy}kltqnYGlFv9PAm@EJwtXQ_WaD(*IOe1g!y98k2a(=cX^$ITV=htzI*cRE;9yta}u@Z%FS}52wPVdnTIUU_K09kP6xKzk>}t< z3Au#v1x+#AylC`bdiTQ|HL1L`)-L$6cYLu`I%kPCL$Z3a35G)2F3G&Q<5m0}B%ZCSqd*f-d|{WN20(=N9d zP^N5tm=h9eNAZ$p>Q55O%wy!-H{P(5axq-}i&u}^ z)-}9S-qqOVPJa2qENP)MQU=D$M{C55f>1D$TgF_ik&v(Uu$`k?q02u%76uW~wXUE> z6-XV6KCOD)F@=GcRG3BJV_}^=aZ61Bt0)ql5$1M^rMbM_v{(o4Y}$6n!4DyOMV(H% zeA8RYTpE!eFZ_+Cc|A3369BkFF%yVazDEJCB z;Os~V0K9_0w18T5@%b)?F~R^<;lt}@bj`{rz#$X}LFJL*2{Y=-503!`FV-Lmt|AJ1 z!CLkbY|=DU97q%%!VRt6a)a18hE(CIT8cYq4P|<6cu}N6FsdThOBC`6JVy!P$?v_T zDDTRoyD|i`3VZEFi?d&w+RZMsTGD$O+AqJDHt6!?1{GZi+EQvp8%j z`zdR^9_z7sLe@0F=?8ZIVyg#9Bj5q2z19t>_!l^Y9Z1n+KZvY8a@3clMJ7e@y60Te<7B!Kdg z;lZAsk}VVBM+p$CzGXfy%Wk_IZ z#sH}p2BKfI=Bz(mxZ^0fnX#T0_0iX6WSUIA$Wj5id}No&4ZoCwo+M$`3-@4~ej+=V zUpOrU0Hiamkaj){rupwUAY-&&vAeTfwy%7x>Vs3r_z80)z#u4ueFh6c-!y`mxjMCc zW+)2`{4Bu+sDu6?Qi&V@c&^N05+KkN?9L`X*)>hM!6(mSH5)>;zrbAO2uEetTz5+k z8HyH+a>T|mr|igVg0r1P_1YA)xQ@!!#Kc>p8!zS*x_b|i6NKrI=fKxxpL^`p_;A;* zy9zTFN;Pqi?FA!GY-$4F0bn+UsM3<<7Bfh-#FQziS(v*YB7SOJ1*Mq-vM>_>n5^Vx zkN<*#BX|K1Grz}1RjL4PnQccpDUUj657UulIk-oTk7)99HL3ne1l1eup+4G{lZTmD zy5fBlO|8r%w-81;YW_d0>2*izTiP3(l>j1OEEu$vil>$O>;k~TS(T$2%K^wc0_9o) zEC5ZYwKF}42pj5T!~_vs;r!B{*=N;k2{YUbz?qe2X3wTd`odHngGV@ygSlO|T2V_P zI=~0yg+Ljr=-)Z;n+Sx^FDf3gVJK)FcB~sj*@wRfY#DQnr;T0K z(n>IyIeN|qV1QzrqK$F;DjczWwgPKUC^vw4%C>Ga_ufljjSfIk5H@MuL(ZwgB_JP! ztCb^IP%G-R8Iu{9 z(3+#vq`AI{3<5UM`Uf|*+dfjcTaE6KtwV`SS*6gWt7?mG^1U=9vpaU8RdM2jQj1aG z3O%Ir1&0IVeC4o^Rq{kN|)2tW%j`obB~(2$!mw1lis5f z8^t+PQ7uxWM6oWf-sD#Ht>b)-hqIA9*XbRC2iQ|CUYtP00NkULR8^HkEa8aVvdDpg zDB23J}_K$fx?A25A1~!=Y6$9r&BSAPvkHM~n5fd!6t>-<1 znY=jxfX{oTt(JTT9cSS0dwu|(w9wu`GaH#nB5(4>W5F$7IqA6jpY{49{sI(<@0m;I;cR_6;(@Vumr(fQ* zBDb`Ky%f|FvI7tbbCt?-6|Xl>j1_;-)4PT3Vh;PXALW)oBeBjHZ%jK}R7qSc|0axs zuf>#jVK!Z@&!G@_<}e2qwt-mw;USO77_km}asSdi7zd>VRvx?STWo=t+tqv+t8OW5 zIkFlpk?mbTa~Q~NRwy`lID!jWzoBrbhHLKj^IbfrRb=FsmRsho*YwBx;VsYDT;tAZ zs_FAXLS=}sqlU~A)U87<6)M%KznA!#hz7J^QlvYq~5 zwJc0v#X{#iCP7wI5-U&+DsUHq1=$00(pcjI0G|A?i7S2FgS*5?R#1RFq_R#?TMO#j z9@_NTOhymjP&klmvii$FX2t@@e?OQd=3X9u(}-L}Ax3s!F;omHRZ43p>JV?Og{-AI zcm#sx5N4z!8`XA=SZF>PQma##$>+L-DKHQ*wOK7nM$S{0=g4&FIWZr<*5ud3p5Zxs zv$HZhBDVzL7GzZ5hI35ZB0yZmh{qMz#gFR)*2@tX`{vXcC@AN&oVo?Yf-xp30G-HB zP(#6p&O^lj@Svh2ZIPo>lC?X-f-zwaQ{o2&m--+TFfPV0LjY6}68igqKg2--z{arC z)iKJg696j74%ICew3B~x0RYX|SeOlfB<1|f{3iUW5lCC#)| z&bADcp4lChj3}0=BM=0Ap-Y00PzJT*WxB)*1L13UCFr|Y8RQnNz9@B%q>9f;eAoO5_!51nD2>?i)NV51###e+O6BR#5zhumt^n&$_ z;m8^cG-QG3Q5mY~0RU>qf>M`-JUt870GcZGOa%f}!lVb~#GkIxfo$Az=yC9wQxw!(PaQR(A$u;sH+$V6$6E0063^b zUJHOXwPiW1x-h92crZ#B7EIOKl>80({iX|3Oh2uQlHDZ;0R^I{w5Hl29W;TFo^pDy z7GbUexRQ`1fDwqFYHZiRj9}Egij9gZRPm!(N58Nk`KH&^u17aMqwAq%Wy1hgFK`pF zY9JMNuac!%5E{}AeATi77y!T!7?MBMFUu|y3IQWoB{jvV078}s|D2qSbNB*~x!c}3 zqW9bHnLo0CQT~v8u0BEv;YT=xQ6+?W?p2x{su3mGhQ~Kpjv1OO);y%XIvb!wTh)i9 zWysgXAQr7HgcKqRK1L3mff}w<+OlUzlKh%8onKTiCcNz?fd=H>_dc>-+Y;%Dyu3s? zx3Kqn_<`A3mWKyx&H<3WpkFEQ$#7TC=d(H1Y>be(%Bqu0Am8dwYC6&6Q4InLdYZA>$=zzrP#_I>B5?v{2^P71r-DYeO<>&kq%0% z8j|cYR^rWtF>c_HTyZ9~sS!s@;xQCfBfuW=cjc4W4ej=UV&_|6P1IPf6J?Qg6bup*kmnF|D6#5w#YCNC zQ)f+&QiYI-@2U6n5ye*;N1iY!3*c4%L0QkVwZv5KmV!i&!Vw$gCxL$&J{|xa&Lf`a zevpBh{pcEEnTWU@ZU?G%!a$X>2&O^OIT1BKuf75RiY1fPf=WI;#O6RA2|NH2An>(G z2(LGfr;zxA5ud6P)=ZVAM1|jsV#!o)gm_xLIV4PHYo5A1(-Xp>^MjlN_HRZwbG$Q8 zNJsb@nSr?xf#1Hpd0YROBL}^mVD%f~EIX#F^=yIf?IWDbDa6)H&fhkEdoi&ZydxYV zTML=sNHz)eUZO+&S=p!^M-2$6FqA>Kl)RXt?&#dUa9}KF%og2h zaB%Pis}VE`6?bcB@;v1w)P-F$`aHA|SrJ5v1l6L%TC=)v@PeT<7`mbhR^uK0*tX{n zGw|gvzx^{X)+mdz_R=0Aaa&?6i&Rn81TO@iA(4MQlO>iZQNzwl!FJ#P?5o&-{NB1w z$W9D)iq@6{9klMT%{}j!+~e4uL`Eb`9I7OUwbnUok=O(rg%jZ47MEJoPqG9I8c%q!}$Yg0j z0<%x7!{Gw#E+VDSh@I%0B+939SCYMvcEP=3cdn%-Keuye=8p%YfduA6%2$6phhG~k9xwCFL)`S|?2SIG4#;g?XiYbotm3Nqa+g%TL#Gy6^ z8t8E;Nqo}HC(Syc3UCN=HNZRz4xAJf`xGvMfYrG_thj*$L|~wQ=VDD^kryyJzz9IE zGlXRo4g4G_os?GJQuC+oJeaOZgkHzV_?4Sk;u6$g zJ$)MO07*ZQ5D`KL%t|dx4v2RVH-k{py?_7>lo)i(yk%(%n!||WXZjEf zNa#+D`N8~G2j_^c>1! zoj8lr1wkgKOIxEy-5@D?8!{rdiWvme#lc*i|G7=}|enaNr1sB-=1uEKI>SfxzrgRqBH7z48(g ziiEd3OoRG$;!BN~=Cn>KE!lw-i1&D=s_cg%6UpX5h3W zdZ7nFE0@PPu@BcrPUUVO0N~G`?91NzRb8{{elHhF;`boA89)jFe09}esziM|Nb_Pj zz!wAi@D+1?bl#lzquxc{DOha;2;?w_Ha4BO>)KzPZ|0tIS4pwBS`r=j(0{sVNzkd1 zP8tCY$*9lA^W1o^?nIqrc|qS%Yg_{SLw{#tfB_-{$R+B1lZdW#u6B@;zEZqmZkrGB zC5^!`Lit^Wt3yK(z#cjpURRU+x=;}QDCEQrXS;V?wPQL_6u1wtTz2^ehpcf)fpvqv zkpz_q$H;&T0_&*MbrSSD)H{Xgk-&(`eg@Vla7F+U4&sL{QyR~T8S+KU?;Qz;uJYo)%EJVo;_&a1jW#gb`4oSV;%4a@BY z_)JbCu_IBQ(8{z+6)ZR6y51CStIupi4$XS93NYV)_=DH~x&T4+cas!{z&C@Ml(ci> zi13yN0bJKYeQRf;{%X;jY7Nzgz#XYI@f75qW@^ssv1FtC{$Uf*kvJs1fK@=o%T$;C zF~%fzN#FJk%dgl3IGK!Z)FnZ!0dwI3K>vI<5TH)msl~oSWJYp9G{D)=BTWxq=)Mm1 z%HV%l@$ZD4TKeN9g1o6O0LhQou z(-5fhqC=PaMk{-Nb?v8LH%iHao04mKtXf{PA5gPj?~F_~L)rKo$-&7E$+{^hfw-Vn zRMJYNZ%XG~ba7fvr2%T*9M$f70Z;x1l76-$C+Hl#0H!+Z#y-i5`nLMEz}a`;Ubefs zT)!9tO<@Q)|Dj8U1M|IkbN2P_N70%C<#l^2*ZC?l2jF*_3;3NjMFMnEVjo~;nmqDi zpUq+Sj(At!yL$>v6fF!rAOktEL~;jmuhAZ2l@m#+-X0SEeW-?{)=V;Qz#5lY>A<@O zhV|pKoxA&0JTVp=Rhc*@h441s zif-0JA|u|@~gywG(luSqatlI?8jm|A`5C*M%FMhW?Zc(0f~Mm)9WNGO6` zb*_p{6_VZ2scc-}O-Pc1wdr2%OdnYtd}8hUaRe4v?i)zQd&)8tt4yy-!zmoi4Juk8 zodmgDJwwc9(X^x6_cQ|&ae_mVZJXKIa>yxi>zqfQxKb)!Ph7sx;A6Q6Cl%5oPP8w#vd^_<)wh8BoSajkix%!;D z?b13!!_qxtfhj_9NOU6Y^sA)lXW&yT7Y+cf40xYo8ooi4r~Hh6#=MSqIP>RkKWQux z1P!1p%AjRSw}7^tpvoGG%>lgXkg2o5*3mQles*5?kYG;kXvvCS%nI16JBTL$BWw;7 zbUN`4bMm9QQvuvlX{ZAUAN0smkLyWvIyCRn)KEr_C9m7ta?-I4l?PMSQ{)UF`8)+d zfpdrV9lbNp2+qJv0U5weT&e7o)SqemR-UvS-`6ETC@{p*3rz_Jp2Q{TFt5tO9p@c^AZ z9PWSSdmR>a96NRq4STSL?q-6)I+OC zUXFf0r`Er~$|v>bG*#YqRCW0KUc13f9FIdhV@)hbRElq|)4~;kO45qtgm1P67fo}> zi5>nGAV6;ZbPsQ?RT>*|_XMdmXfvkA<^;e3o)WqTo5c)BW0&mc2D}Tvhhm3LJ=i?= z4@W;z;^M1Y3uZvk%FDrSY@yBqlP>f*u_8H-9+$Em#|A-w$oTvmxovzG-z=wSHtZNx z2xXxLZTFd>3Sd_+%NnP$!Af_u8lWOz;o{oej%o)#ag=bk#kIIOhee|MI#jsgrq`C0 zk_B#HO`x4F`KD@EAus@W(YJwY(Ah*0zyj`}eUw&WjYB|hD7e(xIZ%+ZVQhz@=HSfK z`r<}+Xs`7yba8Dv*u;>j>Z)bF0qh+>L)F8{_k4z>!-E!miYIN5UK|Psdsn%Kf@18` zw4v40m(?L&5U3G=03GSp`pJhRT8EulmQFglYBxgUW*t?abI7$^>eP$hxwp2n=i*v% zXDBN|{&vAct%Lz8Y23Q*13jeEJXigKV2~^e4UkKA38(xPt>p@r^^i5ut+y zRXw#56c|Zn#+w-CkDC>&es80E)HaBQ@IgW|@?X8w*#=wB8Fh865kNd?8w&{!_^&xs z@N{H_r6fo(|+U5#O$(AAkZZQm81vcL-)SoMJEG~Wo=#va6)qH zJ!3PW$K+YN7b+^`1XA}KfuYYgLQV|#`R0@7e`s6a1fYM|SKgI3=Ytm?=mZ>s%HYIZ zmoSEEFWq584w5zT_EVx!&lvDw;V~9?%T@P7LZ{g7;ruP8}+T(HhtCF`T#n+aSQ(f5FkZah>1!b%Pnl?)Tx}NdbuI%)4Hk58Biq8 zA=>jWNeu&l5=U=E^NzQcRZv%rh(H03Bo;!1IM09S-SC@jeq+Zf!fWZZ8wjwr5zPTn zhjOjXNQDjGNpe^^G6%BoXs6b{6P*#&1nr&bQrRSwHOI|J-LF1PxX}U zP_zfuOvRgGa`kfL4jqH7^^>pTQDG|cA;8CD6*==dRvxeIJ&KZxTSR$kLNaU;SA$xIwzKrE&xE%+hd( zv*TZw|b(MS~+j@z#V<~or{6o?eI@TyvT&wTEU^-(4XRF&t1Bs zxhSz`vR5jBRx@?Tkk%V&{feByJ3QIW5ydGhxW~}`T=ksM^)B=H@Va{rZ>=Aav;D(5 z#y^{RsJ_X~5C)%mX01(3;5bsm_XYLXzPZVA7;==u> zf_^<&4TwTz#nK<(yq%HssBoYbNBe%jYdvJKje5+}V;4uyWFI)Zwsx`TiB~^wu=Ik( zg%WMR3?OzoyuJ3^=B%(2JQ0i%z(Q9LEKg&Va;B*~8fhAKnNthg8)Jy&9eEctlY}S_N_pfwkQ_X$?8679ac>)}IR=x>b;Pyz2ai_S$6K zV)Ley0s^=NFbF(7P?(RK{`UT^*Zx0lC#VHORse!Sci8On{4pOe_)PEq^hBmJa%v}z zs*($@dD0fp^5gt_cOLC_GTv`^XFP zKIK`e&whkCy#gVCz;MsD)z-oI5y4KdJ^Z|Dfm$h*&@1Bk<~3TLV!44x3?2fN_#sm%OTVuou4&-%ytb{EnBXy~Vbjn_oc>u@^Assc-fj*W<_E z>Y@EfV1T>;)Lh5sPjkm_^{KP-Bx(;8hx+8i&gfNuJ#1w-FyzHKk2wsl`=UNqT_Oq> z1P0KpANtsHjNUvv%;-_fFGAFa+(J;mof@J_n}!BwgZIC^^N5F+rk&Q((2W{mMf;vt z-x4bG9x~acbvwZ*pc67wE>RQlT6(-`9k z1F-I#o{c*eZ%~+Xpy!yGfh}Kc0aZIxpLF=lIm~ACVU9k865DIHf-PH5`ugjyrci|= z(k`@`AoXK7o_#F14_hyO%nO;L-J1|a@!ki;o2zJp4>B-&XmloZmO0f+U-Koe{etGi zwmYx2h52M7AU4M-Dvq3!*XO(sA7WJNF>~IhyQr0;YTHp1AApdhAFk>pcf7C2JdWt? z97??i?>FzF;z*m0>gQ^ikh$2|hg7ZGy`!3#V~1ktGY5Cw66ReDwx^@D zWwL=nYPhC|S7c>t=lyx~BUGtYDrs%61zcL>Or4|imf*SHRqL_td{T!b3FMp>u=IZ5 zoYe(0k0U&_|JJm*838*%Rl5ObAFkF94+@KQ&z=DGaW{aowC+E6q4NbF1rUK6z#3iu zz|ljA#|a*G&!5jkm`d7f!xUw*rMUkYeyXGEaZUXh<^XNb`1ywX`8N+V|HVU1wfxB+ z?fXyed+Z(!FfD-VI&VJZn^q%=M?F1Z!dVyr#La@}XdBPjPp?yTkz)I&D&Mgk@D1SI zne(HchemlWRBabjUrFsj(Fyx-riX3Sq|Y|YoK5-g_d;f7FB}1&;A)Ga^5vO%d$&Zb zm~QB;?z24yfW6mh%|xJI{u@-Gf=f?-pZBw+pS6WSArJs`4s@oYraDShBh3ha^}|nF z20K-}q@`_7!RIzhV7Y%~8 zEG|s4IfWN~iWbatMl`-O+S(L)fp2o`JNe7M-QoChYqt&qgV|N5C|VGe1I^}8b2w&; z*+`T4`r^Zdmnw4WrVQ}7ld}5 z!;WH3s{x+Td00blmfAg75Tb!mzh^5auYSc#?s$Wb2Y&W6+o03{Jzmg$ruo|t@u^1} zDZ=wn$H93ZQ|gDq)~4ZwKi`!10u->wLU1G!>=quHd1ELX!65)xK&QVhRnz)TDlIAR z(-8-%!g;9bFgglK%%RaWv9}pg`1+y*0)R7#9)?gx49puJHuTL-slYqN$Y?hNpqGOJ zfe9iZoCE8ltQu(?9~aO*Wa^~S{+)pKh3cQo!@h~mXcP_!3ZsJ6sa|y@=aBnZBM;HR zKR$2pp(HCOajdo}Yw>2tdwA|)tsQbi#5Je+rgUjur>ZdM*twbpcFyFM(vzxbxTp&D zy*W*>V0hJ>9ISYj%}p#yjWGkKO&&?$uFTZRbUbe=xRUusbOx6wJ#ctyMsK}CSOZMt zLCu#B!;5zxe2*~N$7J8AFKTPWq4rmPAAi{Q1djr*IRtF0rMmLqor@iV+nPj$o*B*w zmD|$=%}A;o0u|RNVdK;MGj4vtKA&ulx`KR6eytDpBmB^X&~nvF?PxxmZz5D3H76aC zcIlk+^DH0qr#j@tuNpkzorcx1;H&X7H-Gh7=bn0D^K_M7P{1c3@@D<}c<5?)>XW^@p8rSt z+01>P`LT0$tZolcdbQ1?TRD)Hqj!SZcAlIDw;+CU0E95heUWzRkE<8%#`h=f|bVX;D$%3=%aDdO9cU zP&_K^0XQ=h{mfg!M_#|-0%8>0a%;HjXS`_6g~b&-H79hU2Myjdyx+>DWn#bxN>6*W zq4d-jqo-|spy(}EmG8{FYZyb0VV7<4^Cp6i@!qOO3qA@CF?e?M;Pe8o{&cvwSO@8I|? z)yY52_x)I6`Kf|xSayPJRh>O(xlDB{hcnEajo#niu%%Rv3@?D$_-y%3J_QJHDj&7+ zgUS5W-r(nx`P=sSVdN`)7x4?4r?>S0_wo^xJy0F_;6K&nulX^Z+fXP1+!Y8+Ug#U1 zEBa#k{Kywk*0>{gU{oiNfLU92whV@YTgleJr+kC=D*i*3YWMG~j+|t40W3XxaUK}+ zaI93X`|K~=(F^p`DrHNL`f0WbF7vo>nF67zc?1+3ZoT*%!J939%I_e0g5rGwx716m z{{`#>7pe;SHGFH2H5%8=msqZy|NlA#R-+SHD=y7}a1Eq>0A-8iy3 zFE}L&y?_FjA7~iq$kpdR_1sfE`V`;yMXICw^9~QT`dDMk_qQDtMvF~OY~)T2Rc~bK z{zoHP58IF0NU&EV60KtvAw^ft+PeC3f*1at;BoFNFF!+amQ5Z4(a0@AmyS;D+d02H zwoqCw4#8nF-$V8FZ&VslUp!J9J}5J*>@Juab#9t@v){r;YveOuFV5^dqD)*Epx;T2 zA=kXtNB*JQ)B%!gjkId%T9Mc1;FfBy0){0THdLMk?w6KbV`+Q)7JcTP3qJ3w{FX0d z8iL`}Le=)3HZM@*na&$LpxAJgqeWHwRka@Q-uR87d7ke}hV}2T^@us6?j+Nag&F~t zE&LxoN_8pnXzo2;_|JEs0?hrJ%>5L9zRxg{d;^&K03J|1OmUg_9K7^?6s@6XerI#_ zevaF`l3McuXCa+#t4#8M{OVJkHxWKM{d+!FYZx`o%<(W4Oe+8L$A|tBQg8D8>;&KG zeXTIxs67eL_5KYR2>QXlqak&eAEcOW4$f9t0Y_fOsGv_tE02mkkLyr2<~1`gl< zwI0-5Og#pC-dVSP-LZ#4h=8{3!-I_O-}AJOOz-ajR7XR7nI-`M;{k**8=j8&p}d*f zEzT^8&Lx(akO?3Vv|^5HkACyNsvS%rNV-?N7F!hO35LTfU8Ze6VDc+(Zd&A(U+q#O z%?G{A7-H+_oL}s4dTeNGWLx-SM&Z>ze64F7S~47FZB`@;GtWAbMnDO@;g+gk zlXdO2@tLpH_~@ZO?*PN$#Cx8i-F>>R5`Kil|NjfU-W(Nw*I#wx78fJEZ$1SS_MFi) zfBp=AUi(*gk5d7kfc`)5`xw@F6ywa(ZjFgJfR>h;s@lu{VQ=-Y=9Zq2HwE<3&)?9G zlZp<|Y_xm0+LV|&qUY!Y=l#vT`kCLx*KXDe40{nUul8j>$!5_n=E6n;pyhh8pxrg= zZ&r8VSA(~DAD`k8$xOK-XGz>0P~IRC`dErYH z2C-sEcnDj}<59vJER96xc+d8$*vY$(W1i;IMsl0i+XH?#grgpYM$^N!)M zB3leQ0Ri<4S1rrNn02qVtlE0?O1Bysyzm`I1Vcqf%f|nMLoa!LGx)Fj(0}V6@6mOCUo8Wxn*s=Gq^~{%U{yg8UdiT}H=#xBfwOQt|;0;Fk_#9ip z$E@DbjHDm^A*k{_LR>%P8--iE+l%jw&FIWQYI{0x*dR9ZL{kRxJb5#Pfg{Ggb2=IO zM)s=yIEduI(#_4_(d*9xpYrHW_DUPfokOeFrY%@wl{?cp@H#s`JuGcE*wE{OOVwDT zS`|iBXZ6{p&N;RDdj=m4Ug)CYI`8XN$3HfFK77IJoDDvW?q4n6_lv+*t+P_YkKl=Q z>-2d65e;7UtTRJkY-R)`dm@Lc?gZ~mSap%b$VAH)FzRAxPNX6|lq$58^c|pF~ z3)D}jYQ1Nkbwf+9*BVz>(2tGmA+={C>rUR-?H=%`{8(x;<0j04VOCPn`6a7=XE~ntF6E4`T}*0 zSK7I1(DnD9IfwX%JQloxTgWVlwl23NJlzF54b|)KuXXld?Wo||N4GZkqop@%SvL5? zR(Zm!)}JeS>CfSvHa^JU>3`_o!+)rA|AEs0DhTh=+2aMVqUE83Px%I)tf~dzZZm^e zaFgu#yfJ+t*5=)*D5OF-)uH}|M9Vo3XRj)&yyAkN(?dMmERyId z7&EoSXsdzusW%w$wAmmU74FA~)4KLyrsb8TS3R=kkgCb+AAGe{^pa1tLlKGAPBkOI zHA{!n=4P{*>dSBz*b;p6>?2$2E&e1_P9q{we$jhcvbtlP zOAi3=fAV9&b;m$#s*q;Aq3SKblJ`Q73ftdDLxl|dl)sFqdCcH^g-82esy9rGIcc5B z)Jgx$BOfUESS{}XUbyu0#u6joSV9toFy|)sXVzcir%!IJ?yqyJ!eGa$dnahU!sr*a z;byA$)vzUUk6TpT{KZ>#F1Am^9BZu7!PnlZ_3a9( z<_v}owtn?ssh@wOHFD<2E!C}E^BG&_&UI4NEidq?pE*MN`K>LWA=q~r8ybj0WGXp% z*_OfPbd7#C70R4&!}9k$sx*a`dH$7GnMm&+I4zGHK1$}vcl&smkJGqOqL64AekI@O zSDM}P&M$0^d9m4a>($BG>wRjkn0m<*vnrApK7}aQV{egQF*BwSGi2 zy7(c_8=XB`THvhn&7}&0t6U?#wweNn1%;jTFwe^@d;Y2m725~5EgkJ7ap{>);@H-X z^ymL#i*rWbEj(6rs<_~gZ)EQM!Igj5M}a@}S@S%Exzz}|%$8uyV8bn*2(De|oZGzd z!_d{g{h|-%;g!$)t-OG$ST&DmwOPWUmZ&)`oZRUS$|P8XSDWR${1IZ;PO7aJ!Li)+ zowA~N z-dylMe5~U8dxKfkLq=ydTMagUGjwY6r>EXxMxI@t*&`q}$WCv#tULhy%$sjr_d=EO zVUG?^%7aVC2VHZ$A;H*UR;-T+wi#`;_z5o-eV#3zItM`Q&FgAfX((NGUKsN9|MX;;Fo-U~2t&XU>`$^YD0wEj^Jt>$fh3 zMIBp5r)&uUVX0ruYHF_-04p z$Wj@(PUG5*ech+jwDHo;OV7N+ulSeyN?(VVeKCGk^}aF-ulo1S;-YFpBs$nxY;H>b zo(-pPTJ&M~JfGoe%dT*l>U}@UNE!jBF75pk?{`D{Fh5tlWz#=*L&5uqbqa$?3=dp- z&7Jm{)S$C;{ke*>y|~78FH5BA-(U{?4D^!}?+wE`w>l3DfhTJHYsOvxqFV2IGU{iR zj;!8bhm32sG|TeLNP6~)Y9uMuXU?3hcx&;uu8ei5l&#Sy(<<@WB z&_n*ipY4?{Hk0RZzUOeaaKVZ80-os$L_HU7{kbk?c5W@*XnWdp?kRJB$St4FJ=pd% ze}`zt>LOD+CiaaamiHC{;KSv8^#p1s@LF4@jPRVQg2PiOU3PS)hhObk;0e_$Z3AZo zAI7(0c)&CO--CB%(2A+cQQO*rnFz3XL&%WIXNq*p2umPvHr^q80Zr}?v}~cy9{l6n zLW5V#7Y&21x%`&2xsfC%E%VGPz2r_JqCW3=ql>L>j&AtS=Yoc~s~j`1HT~#o)&&&8 z_Q6G}53HL}i*Kre>LEF@S@oRZwO@F2bdSt)|n*5Wz z$>8+wE*Rw;de!|0J*-soImh?E^!&W^aPvf4As_Oh`SC@g>d5$ugqxzJpXQY0gq%{X z(VW;A7!%uL#cO;t@!`zJNPOdSvHyDb%qyvlJ>tEpI}@@Si0%{RP$R*hZ(OoQ)uWrW zq`MD{QaHRgq;vmm&G4w8HN&MdiJ$rKcV1o4(0jjKEtuOFz51&{@^SJUQ^s4-D)z|T0s!uu z0s)r^sf@mRMc(T(@Bi#ZEslk%onhFrl%+R2DN>32dCxRIOZW8>$5wTG)KB?9ouLos zgLA7b=cnn+iLF-VY5S>Tt5|wY`2HUPhTnX$_fmBBM1!TzUmc5LQ+mkfx@Plh_blC} zn7duE=+!>ehdv9eyWru6eWuG63b|CCx!H$48-0=LErZK{n0dkVk2V6Kw~(wk=~fOM zjq1%m`G2%Qx@Gc)Zh`e08f&@?pm2oH~+xv#6;mt!ihEyYh8D=yj`l z^DY37P^i9;c@$W;4J=PyL{*I}p0xCoA+RMxon+}p-2#%AdAXZC7@U({^1Ybl_oyD- zs?wJ82JdU5ywYRAWnO)B;$wXAbnZUy1RgDuIZx(Xl{{hQ8Zptbe!UOts0{6ZJ>F=C&Y!el^ysWl8%|7kBG}w?w)Ab$s&3J$LMUyidO2E#nM00F z54snh{P6K*8Lf0@ATl^TxATbMG@+&CG)-$m;=ugD#~EJi1lPT|ddUm-cu^j0Ntb7b zJAW;L@MfDw&wof&DU;M*44HbZ@Bio@e)5Kv&?$gLUJ<|M7F65+?1u6?CbDAP`R{oB z(T0LU-;^4L#vtIf?t z)CETjA6)7=>msM5IjCwOM2dOg`Gdr@pSu(hBUH6PTb}!)j)5Bw;+cj*au0gF&sn-x zUX*&)OYQ&cf40^RA5Oz*i5Cp3US|E3mKFxrUbi8X*hrHe@yxd#b~AJ*;NSg0w(y*J zwDbaE`{;)d|BeiFp84vFY!>i+?pPHBO?ip^?x$FP`4P0e*;zfU*Q)-gXANGj>T#V5 zCK@!<<-O0cxsg0LZE3||5c7ovA@~q-Q&f{h-RK+rGaj7lTmQeZ3FZ|fh zFfd&GG*=6%s;;oXEApQ@2g0NE3a+s^nIP5jY5bjG(YB)(c)1;*5X2$&FA~V|o31UZ ztCIB`y+K;CfHMkIJEb!^a9#{=m5r)KACk}Me~0BQsQ6}Cf9J}oSK0|)*lB&7L%q}5 z&v_H~FnZ>W-`A1f=My}6gUHPD+xr-CI(k{uEM4kQ8fB1{maPujx?@ooNl$T|r7eY1 zRe7C<2)3!tA3eG_+O#AurzL;2xu^QHzqW1&UMd^*G?z{0HPwq+micCB^^CelfA3s(pHUtm?N1 z5tk&Jxz85}w}k5RwRVCLFho_J`Wmv8YPrnBi;G+QPJ6b1(An|St)_RcEL*qX*ppP! zldCf$jo;JRRk_uf@yM)szDZ{SGvpy~nr;ZI8<*~!)5tA{rLNU;^-L!^()@4l$#u#N z!tM+;*K`P5#*QoYx3R_BkpI1~q>1oNEj!~ESAY;WLevTO&eh%{h z53l_BE>u;yFf{m#SL{p=R`|4`K-^$$OKCh6Ik>COdD7DL%NjoWMLe&|WRjnA-{C1SLkzZ^ynHJ8e9`f5TzH`67pttf;Tw!xzA>{ zq(UftA03Yc_v(Dw*22U&PWMyPf3nwHzj2si!#Wfx4bv}nlj@eOqN986)|AmR3Yjyu zz6K-nGv5G?5&I5@cjKv4vLyRg%$jKpQ8d2)Bb1&uc%g%}H0+W595=Dy3L7@m9Xzzp z;n(YJX{f6B$glPM>z*h$cCWHOTym$*`Cvm{>r#d0@807@!wJ9}WSeI0BJ1ZCUcLTh zMaNVd%0fvRQ|d#vEoPY_%x`TMJnG;A^uX{^CZ{tDNJK}^to2&)%9Hb>bI-ZUV-^=t zL*QKExo`ap$IctC(jdc6Hy={9R#o8~>ZTS zD5krrde*Tra}3xyiXRc_h&uP!B3m^K8hQ@Sf3ahA?7<%>y8t!%WNV zpW;L#im@uA$Em*Lu*~&4FXh6zLKrs&TL zN|@>vuOP9RitJ@#;#7~;f6Op%5xL4sNtsM9+jms(c#$VFKeiZ6>Rn} zqV;g6vGeQ%JFm7-_P)x0r>U39i-5$~(H<9vN6&c0%nz7%XGYorK7>Qm)}xl#;b$Fu zPCKfKT{yy}-a%kpc=QiFrc)s}PAp+hlLAa-g5ghFJbeCZCpLVvfs2 z->t7Z0chdC84Xrr8Y56V^To8vvZLHz(Y92!A>UX4ZX7MDTaVr_9F`3gRfVKy&g?6v zdX${i(zJ8t^rQ9Y3l=*cq`LZ2gFpQj*|EA5`@g^gz^AGDzztQc*S^Biv(gJRtXoz+ z*%1!$)bYZi(75KgZ^cgV?31~-1^mD*=1uYfy~67~1e`Z`rS|}9kGR@@+WOUU+Q2XV zfBtUKr@mM1Zl6p!<2|&gaY*=}KFOP_5Z~<59dyg`k?W%RS2)`EqV|Tn=U=dyM<0eK z9$h$i{#<rB+>;)FK@RexDn560i1QrfwZoZ3(^F#B*+CW{2;dy_bWAmKw+AGJErPsj?%&Nz{-8B=s@8e^Rctd^FQ*?ZEr-ACF&)0JFOYUeI z2AAGHob1~%lC@bsTM4tS}y=n5-3bgWy%@zliKUd zeteu%rPN$!1thw?dmS?x42*Y#t#l+vYBBX%WuLaBntH5;3nvJqQ#OTE9nB|Te127Z z@Le|RH0Z%Qs>cd88|?(H7$#ggr}H3(VWY>KKhEF!8CvvC|EP zwWedk{KDW4zWPX`)zA7X@jbS4w$UfqeCIMh!K4FrPS6SGte^+6tI=f~Y_@Nqhk>RbJ?c1ZjLz6p?}YK?lW ze08-*=h-h?H>U##Xd^q}AGI`A+c(!|Lx3ZTW{n*gcUAk8`>=9j~8$??CylCyB%g#G? zdPCK`syx9h-AY<+yewpFFtRA5wDv_N>e1@b{qqj_7ygz%Gjg;?%b8z1^AkQiQ|tma zr!#-WnRc$WULL=?%&0(Dwrmr8+%1Faw;ucY-2+R*ST%E0H7c>pGum;ft<1L3nXa^B zW>wI%W|v$QzBzdF>hBqKUi0WGRqSr8f*RvrZ#H%L&l@p^QKUB2nQ~lW*dw13D9v zaR>?3H>R~{2TwH0>>T_vs~mO08S9o$KBJ)3$jH;E!S)wk>)%kAiSEa!`xt2&T$)@; zOmPHK?Pg@iol~lA0D?0BLM82aWY@D^o%nzMQOv{VKYi$GNY21Xk*(!k!Ux)%K(yO> zAZQ?{lbO@ISLOw*TySrNcuy?H*@$IWdBvL?w@Vd6Gl00lSvfgKOaIXqZ$)M*zwj=v zqAe{;dRtNT+vZ zNl~m%^Qxk{+uT&su&9owKc%Yb zN!OAU32@<;buhbB&GV~SD;o-f>9a(RC<~F;$n!kY4OqHt|Bv~=#mt|6WD$vWG#3}{ z#^%Az%;@^=>de6~s5<%WV%kCf#lzlA{+@7aiEcdBogu2eNf^t4M2ob;ID!ou$in zf~se}eCc4ppgXx&qEoA<1QJ+N?;8K)Rm^KD2!^Gyh5O<36hhU84HB0l1O?b*s}atFFJtfA@B+sxVfDW9@1%5`jiN)&!j75!rE)$N6Q+EwlXw0RGO zgZ@~dCp5c0W~f?|$vUQGZS3k6E^G<;se)iUS>^-t#$Q2w#rzq0J@a0o%>(So42C?I zkprHR*E4`Jd|vUz0f5rshG>q1!PYn|XS380lnOAz@KB}xWnS;5vKE-Nwqd(sbP%?9 z#eEwp*a8Nt8lo#NK+vi&;0-?CZ|vk}WqIopd8A=tz9-1}om+j>4zJn?MrJ<2=*$?g zIcyueUdJsuma~okJgU&m>6v*kdiuOR8nlrWW>+lVGHAKR_MOe5L+_c2$34}YaQTwk zAbN){UK^<*<^ew9toGjG9ye+cIiodfWRqUe5*laJ)9h}YZSO~s%9D~OP5(*{>nypc z&ympDc$6za0nK@o&=|!qXg2*7^6dX1<;{E=x z(WxB|4ftm8{XQK00N%yXuhMVfl&88y%leC_jwbLT3Q1^axc&Hqd8&>sc7n^^B!5A7 zOM(x*C0ww2+@L`G08e|9c|phY!bFsMJ^E|8bn0p99JY%>g1V=9EO^YGR~dU>`T6-D z&D}}(3kFBh#j02QY`eXt41{TGEa+?wrg~Dh21Y<7>6}~4TKcS2cSwzZnSSHe{|_d0 z4|L=SpDGXr>YrI!Hw*#M1L=tbE!A~ZBNKzkEhK+@ZY=L^a6TyKQWL;&zbQ}7+?qLg64Wg=V-_6moI5Kfa>I6 z(jjX|bS8ZhoHpQ^9jeEK%g7OAf)EJ9&T2mFjy~MtI_7YL!ahbM%~ss|A{sd&@wrRK zGjn^-6RMRLgAZF*E%Pkw6-^9Wah*%ns2;Qd=Cv^WMZyV9k*KgRr`H*I=O z(f*)`?j!sM9D-2X8+X;mn5mBZ(aj=*XE?;WkRf6~Vu$6=yfi%mb~J_Ln}kO%P<_Qy z8)BUotX|p8E{sl;YGu+FuDaA&;LL&7y2VI%RakRGBu^DhFOU~_JvNaHDl1Of0xsow z8iJ=Po79bzYG+{~WgUS(QnhAKnAd$Z6@I3@3ZGt}VW5FIVxE9B16MSC4i>GdDs5Ox z*DVxeidWX;IY{soTv;w7Rc^x^ozsqsS} zN=LwxdZXd3>$u;q6RQUEj6>-{Qt1toQG>p`6HTHISu1%5~+j=Y|*EqvhRTg|l*9}?|s69PXeuUn(%7Lxl zoEJtGPZaC~bOw8Aw-wqT_ZywrAJ6sA{d=k-A{$vDj8qo<;7LF1$BhL_#ygz)Ux65;!FFle|<+d z8HZ9L&M8V3(z?92(mNc_Dc7({r#Rv%JcohN#-%T4%~)|r{>5wl47}VYej$?+GsZI$j%n8o^{)YD;%B3l)d^FO!On2 zE&Z`WRD_cFNYb(s^cO^v8n%miEbxhCWnr*y_rNH1JucfucQENbgGq;^SD41E@mVre zDlm@*x00+>H_fAPD!Dcmk>2<4=RbR-M^`ZdUU0}N?=WoSKC}!ukU{#CTk=yh~M>TzN+gOgX*t4aIN`T0Kps#MKSuo&&4(=aJs}n~!DGNbD z`);e`d0u8l3`da=Vr%kj>}x|XVh`cUw+c0>?r$E(g#9MLccR9LVVk$JqF zkvUD>0cND=7;_?1@u2qcJvcXTs8s7GLEp9`ULg zW&$YU!OVF(0xr8t0%<6qoJW;65~HTgbz5$6^t`YIa0}6SQpG7Ikz}Byp(B`-5(Pg9 zER9&r{UU?zz$_ZATA3HD?CwY$Jv6gan|98Ogy+Ce^%kHV1of^*z=d6OmKAx#WS4Fa zR3KEbxndQabd=b^9m(C{p|C2rvvX0aaHYUNT=A1t5OX& zNpqP@Q>fZ#B@$0RLyvqBl-rD&$2`2h~`n%29nEPdu788 z9WP*_exyJ|wF(lb)OHt4UMzPvEiZx>!1rug5=4J~VOK&!Q7sJm0#;I3@+t72Zd|Y{=Oa zdB2W^?{kxpbeuPoQteSP0P6pl%O_vjDr8zoWyX~gKFFB*J7?9O$g^Xxx1=OZ)s0zKiettZ}ls+d712|MbGbY`tp zd$1;Gz8nFXa|d~?gWW!dcnRj219NbmaChe0R}>Zcc3HC)?M~U~7WG4gXTf=Y&& z{v zvfNDwA2%6`yw=#2-t}gk*M6ZzzUUkXeW-!R15gPyvjml(ZjBW))V7iXodX96+0MYP zW?1tI)h!KGr`oEof+$sJ#<}V2g6a4Px3eFB%1Og!T0eEgAn@q`FW9ThElwni1wE2A zGuKV-HLv9qd+4ovo~&)H^K$yFP(b?~Vs9gk6ZK(X)zth}<7mfT;1v4^Ai{wkKr4OY z5DZ2hPAFUJ1#3fJ*+rQHO{jPeGXR&YX}XaRCihO7K9zfnpEvEO>=b9CAb;6IWEaTE zWU4&jz8c#z;`i*gux{R3T@$n&3WS}q8Yl?Dm1Prv>YzW_(As}OVb1%`w#W@M?NaN3 z;?C*zclrmo5#FdbRTxN*&9OwEaue;|JqL_m6CAfE(9==o6|-2YA+Xy(h;(RG{#2N5 ztp{Ek7|1|#@1yV00vH*s4Z<0yqB;O{CW73M!TQlu^(iRrUj;^VP&#C$}iH| zKw5gk$Y7q^Npw1^!j#|RJnUu-E8}U6ZqOQ5M=0&Xa^EaVs@ChNH%JnV3W_V1X~sW< zW<*y`?F{U%D!Lzx7dJECrTJMwv?=dl><(DtPMI0MK+JBYOfSB`9|g5XNY>KQw|od;Y@rdR*v=9G>mheK2Hdv%G+1=7Tf_`06JGg z7O+*8Oxg708Hhlq`mOfbs^_9-u0#f|V~wvI5Qi$L^bI(K^*klT=MUcLvv$q6F!NtL zQ@eGzkKhrcY-q#S2!g8P_8C|Oi zM&#P&QnOp$45J-dsr1cJWwbr#aM%K>MhsrJ!-qJy-=A5+%EE`1(j%Q0dh$GH6?g}= zcQm0brq!pSv~3D?(yZ<<2viT?`8aVgjw!2aZ!Miijyq>VR8V(H(8^X(=RQO<0a!&F zn^xDbC+aSy3fcn**f$GsHjr3Oi|u%Ch;;PCF8FAG7l5;8s=6>zi24fe9koUS2i!Yh z|8<4&z{EkjGlN@tgZ8VebbIhBoGT7NOo;^UHx2wz=DX>=&SCz zD{zdLC~(q;B<0_pcd?f4DzCT?(Rq?m3RJdIytkl*!Uzx}Kq2=5d>Bl!9F;*Q zWF5c<19{;ayW8JU;dov0p*a=2C?p8LkiO#UtY}LN(7|s{1EWG-EN?zq-%qV)ZlC=7 zi4|&bG8s$lwY0~%cec%Y8toA@Jxa)OYXTLeeuuJQA8=p?-2gYw^LdYaj}typ6aT=d}!p1!M{B`2Ude7+5Xb8;T5mu*8#$|N%C zrvfUdsX}$5AVAcQZi2o{v=r0OnK`4S>K<(z=-52ro&$Ck1??S_WNh4IA(-sFQOYX| zvCCeVfdWq9CnAGH7*K3&?V$WK<$0Dzjk=_J?OAFBRCfqF2RuW%db4O$9=bCv+nVj^ zBm?Vg&g;)yxlpY!i%0~}Bg$N#u9{Oy9No7!~^Pa{);m*mfnH+h~ z^2t-{yrTM~P1oC?lgv~7RrrLaa6b5S-43Pg!jg%&916HoALQvhI&jZ+|02?d1x$)x zEiS5fEo&M0pq3I|hsGxIxI9I_q- z2ms${4Joa^eZRdE5DK7xhS~}06?+2a$%q__$B0`}x+OgOYl;dO*07@d6a zyH6H4FJ{OrfT{aA2K&wgafn#JZg=>p3+JodRJCTqMifDDW?Ip9YTMl>w}Z^fE3$33 zlBL(Fy8d(Y+!-LwJ*F>>PW5}$ZLM-)d`th2IHShz`8nz&ji1b%!6E7p-}nN5Pi^h{ zrxs{$y$?!=goja7nc@)Exa1oZPaHV!K(_8Y=k-Smr9O#6a;W+@3YX)ULOd&}DZUJ;^&~%^DogfzN@`CQo z;yVW@2*nF`cMYJlpFy$V-P>zhX8_9pX%((=Sl$kFn5&nIeAJ|f#*cG})-dQK(0a8d znb!99h0FA0vlpicYQK)O~a)~$op znvY7nm9_X6yTQFTwKZ%H13NBs)B@;NNL%BQ6>e~Yo8DydA)l)9rkQN0P)tz^l`1Oe z3j$Ik4B*DGVmD;IY;r^*ag=P5I>5dGXs_i^A&3BSBXdXRPi@0fpZ2<^B~P&rqhDO^ zS*i@cyjx=7$dpS2gNrGBkA32s_v|~+7hIu`*{YdJTN40ySJ2i@E#{qceS2;DEvrjA z8oZ0csTF6jsZB-O_ncE(%e>lJqIVL3D9GLv|2#m@&K^!tV7$|mr~}*=P{11irFoUa z-U#4ejkS(~Y`ApbsR}=5S=ymATn?4!Oz)sXAEJZUsIcecmq?dm?*vwX0thOgoeiRB zoW-?^4C9o=Qm*|VX~E85}r zaFqociR9R7?BY}8O)d3zp5-TFAx8lM{MemSMu1M8&ui+F?Fo^KWNgX>q!UP}vcN13 zuhnG>jW7|HWyNuBacfB;Y7c|}K2W132Wof=02GR=X9Jl4EJ!ma4u^3M93luZ1%`FK zQKJ3@0dASJM%!!KU9v0Mc|KsKs;Ibt(t2-z#`@Yc?d=CfFM8HYs;8D~(He!0wBVZ( zHfkiAv>R|=ie0^6ahli-=4tV%IRQI1pij}E=L`W&3-JEKD#4a`J#FE5Ke75lzhl0Wy)z&{LC~hJS_|v~)B>$qf8yd37qm=QX0z9GDB>aGhnD{K=~oGWfx%F!yNZ3= za}JFnp{}YDs0Kmc+I1nPM5gjh_PhRU^KhdROPZ38tP9jG_{#Rt_Eg>I9-KCg*WIZ~ zVl^eP{d?P|qU|F*9TXEuZKAcl7VyP!oif>>n@aR>f`B0I2}JiPj68`CR_Pfyt8D5>R~d5 z3dkgu{u>%b-*IMY0e5vLXm4$4`JCO8%Ct?dwe{f4(DD;(w^Pwx+djmzB~+$9>lIM0bNN=jWuv(I-;d?vg|erJ_^9vsE8@ zMDR)%uJCgJ-v|zUoNeF(>;yZ`6ebo|zs}|RpZas%{*dPKTz$JcwY+-rvlO&O1vi~X zJLZDL@p~(?dY&WBV&WVQ)Y4ApWD3bQ?YKrS&8(06FRA?RKUO}Ba0uVTF~xzjQ_BKw zxw+XwRTsht_#Jy5+FPsB6&;>%cYxYl1-{Z>MdIUdq9N0J5;Kzc)(WHGN`(>D7g6M z-*9AP=WKBR*0LK%O>McJ7DlW48R!Rg1A1s##3>OP9{j%=M$&7#po8lG6i}e!D2U~> zQ~P58y8-T$cy~U=nLVHP=!@lJp&6Jcwb0GMYt46HlL+9AfXP+u2lgms83lW>DNKDI zm*$RX(l*C?&wp?-JcM^ysvSNE z;C0&Sk_xLo{DFDudfBI%^~qo7NpCnZA25T+x57M#MRo0avaq&#`7l-0zW){{uNWEa zLM=1`0(hB;(B67)H!;f`4jCH&oC4GWAN{~};V0h`y0>$7T2Q4YOZE^i1cKaB^Oy{Vav8&VhUwBWSdGpa2*!k3c;H7~wKzaMa@cbBg zvE#wH_jITZJ%?VTW`*Jac6@f<}7khy)Hi)4W%2PCA5d07p1<`uymqAUN;?o@MH1*r{K! zo*R`@J_Dgf*t93@P}`cm)2#_88jrMo>>Cd=78>p|aG*+$n@YK_Vl%M}O;is%dCqIb zIu!ORKmT&|xsm;Nkt*>DUy;6Dewy3>gh+{Y+j3*n|-*z@+AGIh8A1ymsu) zex|^RTm*6oLNb5RLe-cDNv}%vO`>QqfDuk>@^)z{Zjk_hNnAj{clIWL-j@KyjH1aQ z>IIG-IItbKobEP%R?C=9eJzp&C=?vkGK+>u_4o;PZBw*WJ!s{?<@u{@U187$dY^mG zO07{1V*@~es}7CUjsO5(00)2xK02Rc7*$-H==2RpP6&hk1--AB?*JQss&=0;>m4~z z@lEiMobVo?^5tIPu=1TZZq^u7w$ijm1EaFxUWen8JpQRY&*Y-DccK>2_Q=9a3H8K} ziUfHhA!=Tr;yLWaoLXuifMw)_%_U;VufA3bE!81Kg(kVk6X0P zI}va@6u()pH2C}-z}@BJJyrP3=Q^umgzHq zgk!{^G-o#VN3Zr+aDFh6<6t~22KFrS`L~U>9*mx!&lXWLhx)PVil1;dkkXS}7z4*5 zLaBIDR;gNolyG$kGIGMYMFIoTpv#`ydj3Nf7k*TSFMwMDvA`^nS3M7GxTv~D!3b~x zcnR)()t`9;`~xp^ANRfuG0+l}xo=WE7(6#_%Q3)W;AIc5-Hd+2Pw{_zWHUw_m=>oG zaL3w6C%c*R%>CEyAc*#O&N=F0!07wF_{es;1r`al~dZq0h^-X){ z{+FsAaaEV7jGAb4y@4SQ+OJjPwJ>O!wM})lpk++;elG(49iUF*#hl2Gf6nM9eZNmo z6<Ν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 z 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�! zW&;#L7bKpkTr6$g*qxC%%;;NeSGt+QN5`{H9F)q0M5>Ie5wTMAKrqH2#M-AMdNBS- zIjag_j4=jCG)N>;W{Wi>ZmX%!91qpDc$Sr&P2B5-gLa>tr)zFRL68fX*mFSQxfq}$ zY96R*Fs_+<34K|07F{Lh)wYr5V(O>c0MVAF|>BBwE#JU+YSNK+Gwyi7w$*EZ~KzFJgq* z3T08uJmsxD@pRF+R^gGV_v2&@=>#U++19jJM5}rcEA};!QqQ0?IxR&$4yN~~x--IX zPW>&`r6$AL!FsVWK^X*l2orlYJz4(n*SbT4 zF*fEvs9r$gERI&4ZM=Bgq0G$j?BLqnr_dAbz#T=@y?Sw8h#3xP66#!3uyG7x>2 zA_96-`j5MO6oYBY!3d%UOS6mP+bY{I8sLP?HZvpBJLmlRv?D^ZTL@7TrZG|sK3ID$rbIqq);uzP+i}}Heo+MA zId~KMyp2A2QsB&JJ;HVbMLW5Ojv>XdT;IWBTOE~s^yM)ablQT-@pVy=zJa!sZct?+ zuRPHZCoB^oYO){M+yXvZcpvm26Sjd&Ylc>p^9fDH=FJP^7%RC76XOD;dY zc^sWPc*H9=OBJyq7Nh&l^6s6ld!U@B$j1jc0^!8Ujb72A#qLv2b)Yj7EG_??rXnp_ z=)(HZg%{+wrP2rAESD&R&sXVt0yP569o2Ltuz(siaMX;eoYQ|x#L8laUiN{=9K$fP z#hS6Xp~ zfd%B8nwps)^X4fUji%;ibOV*!PdHr^;)NGa7Y}{09V>VuZbu@=<%#H4@s>GWzXeZ2 zuc+9`z^p-+@Imo3gl&5u=S_pNm<@0aJ2fX{wlY;WW)~zv2YKZ(+(256I-6o5W>V z_P^BJlX$IjzH#37bIp6ERws8FqII|gR@||@c>?H4Yi))Y1hrn~qWqlIPxNM{A65Uw z7gAo}7k}3IE_+y`6undLP2V&^XQN7YCQCDfkHSZRVxamk;2IjLEM{?i`uH$l^`#G2}N zQT>6H3VNMRLeJ&2o&A5PDpd%(KPmmu|Cm2(z9%zWNq z-Gy`Z29cS2TJxDR51H9(O}iANo+@(`BCqSfJNDoRY|3dH@3gr$6Q2>Tp4_M#>4Jm^ ziQ#l#1){oq z!yw%%S8lL@vAge8=rmSstLGJfiso>Li7us=V8k6v5IV(=YDKx}aaT%Qttxz2DcKBM z`mXm7?`RR~8y~M~`*h#%zC2#RZ*=sXA$1v*VbSH?y5~Y6oXN6d3u|PnzeBciSQ?pG ztk!!lKU++@bm1C|@$3*6xgNQ`$>vSiz^{WTz_$fjH>{6uigG{?mWs;Durl9_3xN({S9M9MKR8}GUqXJ02)tgz zsIP?{EHseOj#x0l{q7mhIu5!4T|zT|I1@W7rFv{MP#tJd8gv{y(X24S1Ng5Z5vp%g z2n*erkE#FqI8z<*@xmw8e-u5Z=f~^sf*zn4s4gK!gT&9wLAR8irrk3KV{{2!zy-+l zd~_LFFGlG9xeDx^!VRTa%_FKOxt_uDqv%z*P*Xmsp8Y;*`ilbHE7ku}Brf0qG-z>L zMB@1fbVR9&`T7{AJ|F$^jn0ox4`wdfE6od+a3i|m=Mm|vf_ zdHnG{vELt`TK0B2w7sjpIG|D8pnOqt6NZ>nZ69D_n_oH-7gdMqE!EFQ=XCnRFTKc( zrw?0lqNaZfZ&I3^?-u5>Gl8e$5)zLNq6-Z=@8I&ldOnI4QNhe$m=cetf{VM|{Q7Bp zK21-2Bl_dLyi?>y)0$`yxL7lDgTzJE7jOaP0Ly5rT+4CXc>r4|5BBk5cVvP~j*ZJx z79$he$cpO6<9V6hWjxFVFZ4oZFP=941TF)afgL;rt;!(UNfp~F_e_+&KGyu}^EJOqtF~?qLnwfpC zc$^pTAWuFHtbnhOf_Q&|2R{iu@C8>N43F*^?4iq2+L#G0dkQB$%HF64YxY29lYN=( zyNRu;fiXJoLC;+Mlukz(P(;Mlog!tYI&tHNmruNhqIgQjoaPjFC`f;n zbnWfMp<8^;=j+41^>6r_lD|sliFgZFKk>$R!2M30zV_-=3phlQ3P@6+*3izxc}|9k z4A3R?3<9Y%=H8(`ETCuNz$^PMj}YX=DVr!Ob`>Hr5Oh*y&VfoVm0@GqJm~;yL_g~!u{kNa) z<*bjBF4_Bq_31MQ-9y}dxtwmf(-I3DU^kvpN1q!M1o}hht zj>Bx@V&Z5Z6J4hTqN9GjYLgHwPZIksOlxlB5)W*&qru%o+R^cW*~fuM?e)qT4I zqq?o<_w_%9jEmC zbiQ$_{X8eW5qCc1V>+FpjEYQ}>j;Ag{V6F#yV+ulP`lKZC*aVa2Vu?&?bhH1l!ge5 z@DjN`WqWy>WU_`eln0zbVvGYwS7bpLyCOq%e5h{z^P_l;nXMni*VT{CMRAAyA`@rP zVun=TsyeZV7SFGld#VoAEk=WgHH>Q>FxM7qH7C&}gz70?%*ALQ5HJFVjO;gjQ^H~~b=g@WspUVIJf6;!v^7VD> zUylvWO~r0&UjyNaUPIP22m})QacC}Uj$N9-m`G{gQ)Ql&S|mbs#|+K!VU&bG;#^I! zK){}vk8|oZ@^$9pp8DGRA1fVi(;&v7F}Ojli@VPDVT2HnvOZn#0)Os9Rb*QW`6 z+J_zMKYiL2o6&rx6+c;H+()RvSmsbhpMuO zvS&rzRrFRaE7U9I5C@~l2vw>2ozgdhEhX z#lY=FB9b6ZA-rJ`6$a<@-|i^|Q4G-FrH**u#UFL1$kVAlwLwvAVJ72=H@5D;wIWM% zziCnY8j2Uyiu5#=Y?@Yp!EGxMeZ7;)fHOGa zU?HZ1Mxm;X*`+w(1n%(P)md55Jv=gN&Xljl)~ADZrP#x}X_;3-9PEpZ6DCi2u8C!I zPg!J!_IcJB=ln_xqPOaqb+$=ftIK#|K`E3)Hb=SY(Gllc*2KBU=u9 z@F7iUngcneMdIdh864Oft&F28(udn2c>(M@pu4^czd%GMIYl4KkrKO?t5ih~#0+xi z#TznXX&Ig(xfl6;id3``xO70@#Myhy_5wZNxEA+5a#K__!2C%PNRfH?M?ecDG z?ecB)ZMDwhd)hoGV|$tttX=r)uh5%mj;kz9`GlPBnG``98f z_3u}mC=I%V!~$AuVhcmOMNJW4TvHl6w38XwJBo-F57bPtTGKzS>2GTifneH1%;7u& zjk%t!d6MHsjz8%a$S-hn>-_q3d$;e%d9*eCx7Dm+3&(5L=q}(k1kS5&Y7&7vaP^HZ zzVRvUxN(YNfT$VaN?~d}A5i^%u#Wv}B9T};Z@sN)YluPM(u8@Ow$`N&_zR5DZ|^nK zucKYCWIviYt*BnBX=}DHFxT?n&Wk3;bw}tKya_hua(=O0Y{P9jnRHHRmdJ za?7A%71NsG9jqf!WY9C{2n3?0zXZgy-y!`#4z)eSvL#Es9CRQ{lMoTprz6ol)U>Ma z!Fo;gMPA6XZ7Lpz2Z6_@8;KJk#N&Qs5{wkI`E?dH?8*obIy)=Xr|4gA5UhQfIlo1O zoLx03mNCCfP%)|qC47!he=-s>2}7gfPyih0x_ff(Nl*Q1(u_?(IUt0Z3NaklpQR+jBj0EKec1YR@u4) zU@O9I@}A+mKz2x9sIw!6v;X)HG0P5TGOG zXRDsMJ7VQJ%gQH~o{cEsP{y2Q0@aDP!nLb8ueJ~oqXSq#Y0xFCWe+@phcUn&$EGq- z^JY4v3)qOvz*(%J*TN#&npa}MT(@d&^c2kvtIygy>OK5yKG3lnC&gf9@J@WQl$slHbnrnl% zom12_xEW_TdotFd?qtmf0|d_36bnnjt#`Km7#C95WPJJWX-vnEevs?CRL}o zrnyEWx!;TJoN7+OZ-A{GD^ zroyW8slH@Nv83lReVA~VgNVfrQe=qwpff^X2~+e22sEmPSW~@oiqh2d zA4SigOGtE|+*Fzld3mz5yin61@ag074vHLXVi}1*i@^etXyBn|fy0gKjfYNj*;)#oEgR_dxd=cRA#_Ekv zkrYpvXJBIe=z-A0?8bmzY%PAg8<#$jW?n_|9wC2&*H=%1Ef{@-hJ_V_h6* z@=f2i9art!O?{gJ=&;_OI>isNecknKs>@59$+F|&OooHJ^#suzU4J&7bT}3t^Pu|D ze2x=M? zhdp>0yW5$UFD!XOl3~>RcIF*eTz#7h~j)JbcABq4)RS4GDB{O2wq1m7> zNd%_tBiRF*>r{6xkQib?YS1DPI6od{Utke|TQkc_ZST;eLp1^fs75tg#se2Hft;Vu zt&q9c6Dt|f^kt@O+V>1SU|$9)@H2l?LsUo9PQC)6yNe?@6BmbVSQ+G}t!C2y`VEwtURYhac546B7qV9l-*WL`yO)# z59OJjX^4~9TjVXmL9PjBxKqe$u#G(xJ{7!J>f6M7RoKk;mdefp1|5o+3EpY;!&_YN zz{*oFJr`2t)%T-`HeL@YOf4#eS7(s38U&-+V4!4hn2sjTAiI5&7b45shCRZ7d}z@p zrV+204ZORYPiO1EbT!?G(_Gz&+~|gQPKU07Iz!Zl03SeGKPdf*1nPiq5OTtWfl+nj z1<3N|M6Y0Z5-c@SdN7^IJp;DQo(OzVcJmu_+^Z%6iJuwt5N& zR9Elq?vzkmlxElieewiM(Bdq{H4mUGM$Y%m^g-b6ajwGa^+}9}Su+~0^U5}bgcVy`*u;hSask@H79X7>9o9o z-GlFp!FZU7Kq6J&g|=pd17hv*2=oLNa1R2VnLz|ZO&~Ee*SJIUpe9sjP1N+Sq7xvI zXU-fx>*j0Ep3Q9SYlE{jS@Q%e;%v?RHFscKGr$v6H|9F1=^tREcF?8RLvu>J7*w`5~jGAssC_I#QB64-2%l5qni4G>PJ@Q zme%tWT?2Y(g)X2@cPI>P2%+oUG|j)eTsj}r+fonEQ6Iq7nulv7 z(SAP1tM>UUA9~7!{;-FQun){10@K5-aGImsFK^>MN$=d?K6`>HD~roGCsUot!PylR z1=#xS#8Pq+M*;PBAIav<%Hje@qf@SOaee1oJ)al2CsaMD;niH9;!VW`dnK5Ra4aSG zt;bbK5+jmjV#^)y4WE#Xv4a!#HB~1PJKf407m;}X=n^h$S6#54SXNsa)q4&&hF4<~ zH<{}gV<3!wzb z{LEFW2WM0V67!crw@_WQjwpmuSs!3H>QKf;8O(QHShnW@YvS~JmBe{n@F&C>X?AL` zQsk^Cdy>+puffqh$i{q1d^q}s;Q)hdQ0erUM&vcU$cN~NDB-9qTc^<_I;T)%gs!-H zAIPwv1p^EN1)tuIz@RdA4|l-Auw{elJ{Wq+V_e2}}o0E^2RF$Ut6w?(ho*bB#5Awo=^{Mr7zPh2j zkz=%SqBG?iP0pKsgX3)~eTJ$urlxcm0p#d8nH5WVJHs_xhs}`ZF+$nF2ATs~TD(n- zLwlpa<%F)N2q9DLfw1)e8gv6|$PBbO7&0=<%tOkAgPx&3&2?y`OZGKmq(e9vF`6%E z^2EMtFBQR6rFqKf)8;(D7>ThRDRYR?ut`YOEhY#&ABiDEwA~xkff2edRBuGLs(7^K zW=!pKm}85aQ#+?8;`W+Yd1fcY?rvt2O-&+^SWrDimsB4z*Q_ZFx}qkqSTpySQ(%DT zi-=Lp5G|%y;bI{00HP*q(pqVT7-2;qqK^$P+U`4%`9`$5PCZW2; z12wr%i5C{Z@{Ng@+el@uSEcG5-p?Mu08taFQ}qZ3Fu`F=wOd^pw_9)1O}$m7=a_q- zMMO-q=5_v2Y_f3ku}cf$yfx<(E0?rhDX@URgP7v{oQeXcE3Ur(G;YK$?!W;#77-Ax z$m>|PWKxKl`p!+wI;P0X(j?X=RVONTl4CFQ!ejbdocrQIp7i6q-~*XlruL*ZZMDLlD!MB)wsYOKfc7o00?LAI*d81k zNd55whJF{y-;=PAvS7iBeQ{Qa2?=-Z&UBx}&h0%ZCBn&ARDlozNnFj~a4F?|V~2_^ z&fO`o{5oKRV$e6l1Uvf_IA3!cGI&zWQ&m41TX^+0qvL&8H!T^B> zDl)IcBKE7kt!ALQ7fHvu^Stm0jya|_u;z-kCMhV8hJBb#vA5COg*^rjjdT7VKF;~) zXO6pswq~=YNMM9FeC9NgGV!K3gr12GS;rBTg_s_mPh2X3N392w)0kI%DW-$cV9;(Z zUOsZ<-uQ^mG{Rf_g; zK!JV0sVLH`(voN2a6fd#J_4h?PUQrOhx>FxD@Y3Vas2dwa=<=E znSSMn6F1^saY)PL+>>3nZ#SaDd9iQz4&5*eP}hPvA*UpQK9T1+V!bq_a#t}`f*0t* zsOK!6Yjfk~oITvI*`ANHXX6rq#eDJnx?{THKHbxTk@xYGVQnFM;I$MlI#fdQ^dSn~ z`4GwJ%~$h{H>2gMqVaoBTq$yVU<=2cNO&ghn!0}tT|y^=ME2kX*3k7}71Px`lPC$p zQHO#o%>aRgXon{;!XeMFt~$sq18d`iyDHG!)!+;cd1<)X!zhYQhW?o+4^JfM22I%-~8QzmfroZ6Ze%@r1CD@Fsg ziNHFZj|Z1YtYK6$s9`)z)%QA%Ns+Hk3-|W!N2z89Ycs(?%p{Z-HCc1jC6!r|HAjoV zTCO(^_f65D3pMq_nh`oP#|v^ES(6y69uKM(FdN{okQgFsvLCVLT}JKI&z}tmJ7;APLpn+c?YNn&m1n54Jz9R$$CToMXqWBKJTJWOD*==WLpM?>;XE1QaVDQm(k!|k^Vb!6tRhHQ# z1W_%qb!*dm3aaUz{5`omo@)7>f67TgYembOe9qd=;JyfNsmzIpSc|runOQPfSa#>F zNZgj|dCoB|sk{j-F4TnT(Zz|OiI*a#6caUzH50r#bA1_s9(12z+2hfon85*b=BR#= z>eqOcy(s(23Dq-+ny6?!*$44zotEwu5*KR%EnceJBYWnd_^{(*u=`io^#qsbW>AbW z^8uWUvIa0Mz~oRv{zP{o$Rn*&Cqa9y0ENI_fxzX2|0>R-`zCj=X=W9p7`c$_p?@(G);WyHt+bu@>=8spH&};>Xe^QJ=6&}yO2@L$yrZ6 zPAFfj#I+ys;u5_aNV6uPtSfQ?{rtsT+E*%(M3e~ zU>?S&+zG}$5alm?HW1NbPJ3vY&Xiy!uW)t$)5tBeeBKF7np4&nFXh)+qQH?rG2(ClJj z9mN7YzzaHqQA~nMnU&P4A}W z84)A3r*IPnC_Q*4$~mh0#;Uu72QeF9e`$uYL{ z*$Zr->laR=`=X||s_EX;e0bHx9wf5ng$Ue-1Lz)V_AHdAd_I%wuri-zwTP9P{>~n( z$$YSCc^4wyF=k$E|9J;*Rm@!0>gHVb!~((_F`t&On4bTRn2E-{Q{I|69-8a6vw!)m zv8TUW^;wM2eSt-sz#58IlsVnZ>EhzW^TnvRI^FB&T-e1rdK=@R(I8>~K^HQ|Fgrrz zc-TFmK{1gm(rH~dSmsE(u0ddoExd0;j_tX_p3|FLdeh#j6pz_B_1S&aiaY9Grn=lw z`C<1Cyu_P%i92hyZ~%!d99O+iQ>?tuLtc1sCb-DRFdp;ZlGy+ka2$Dn1{V-=y;L;^ zYC0Ko3ls+|j3Ua6iE_e?r_FKZu%4;|M=w+@J$_3}Bd&9B+vJEwby?^y8>TfcQwZgh zW@4K}Oz92qXdgN`x)&7tK@UvzKM0Ql#YI6I^7vs&0uXoe#U}6(Tm%ZyOdi~FcyDWV zXZa2Cb-i-AFQN+(5%xe2yhD!`&QMAz>t4Ethox6*HciQyvyp9dh1p$vLst6)IMfhx zG+bD1S_!YqFS< zAkgM*8P*gBBw7Rlsk*^1hf*5!b%>_sFcKRG@`UOPleU=Q8A~i;s5%iC)+Et4_e53@ zPFptDrlx*iz-oE(!abw6nGSY2R=(*O_O>WQXC?Ij${G}iQ`4*{ai=h5+LCE*M0}$e zKzrAm4k3^@i>&$GWUemS@a!}mAf@ZGJmiPR8m>d2Bf`i~(=Z-lQbOcY@kpkGC1#?l zZ(I(yn~kvNfbOYobFoV;ZuCZkKlC3_L`)2U;JN;n^Ua*NTzv1GX5(xun&^a39Y+v<@zE5sst!2KPAAru1BPag`z+RZ)q0Ge)W>u@0Ond+3BxCp#F&8A80pnFHN*qn!r z#|x(0H&(l&<%kHS1=Y!b5!eh3YX`*lfDf|nG&kWoL+1%9otD;WUtAG@K}2$*l&A8F zX)Z*!4Z{Vmhqu);slV;P`fD66qpbsf%FvM3 zJ%bLRjTq@tF4XPT45a>^L5FH`A@dQWO=UvJX@??AVRBM$22>}@%CvJY9)-vjKR!6QgqhZS>OKvNTV zyz1!CXt<_&Np*`NsJZc48vRev-)Xr0iE-m@Ar_GcB;Fc3=s17Elf}dQsqTw~4{+^) z9za&?$eQ}Z;X-hBpH5>1Pr(bZq53QWvxVxcNmpcIh*W(JuO8;}9lLa~du5KzExU6$ zi;#H%i5K-*d94NXTHn)Nrx%??B6rUqC9*8M?98!CPI|GPDrsonhe&h)J-`r8!&A{S z=n%#noE0~A@)SM)s26pLrEcU#*C4TgMUD;Wm}7$%pv5y) zpLOZBdDC|O1$Vt*S7V{(?a*Rxr%HO!B{)#ipQ;aFQq!x@4G=>AMGQ0Zu@4AyZB(x# z?PT937HU?J2%N?p$B%EHcKXH}aR-LZCIn8oB3rvcA!N-JdAyim;**aC?8=l&9EWAg z_Bpz+cAjmw?>a~2mXT+d)cP()Nprbf14(cNw5j$m)BFw>J6nKN0l;8GR<{z1^+r-g z-IP+67w-;-`I+JJ!3*zI3cvznKK~sFS^Jf5SlwLh3ZDqR4lXQ+>{x0_tU9zmo2VG$ z5>ZuK24iXGAR^4EcVc#d;;?|O!DC04LgF@aO{9Iz@qQwHT=5iAHvnH{Mrsh#k&^TiWQ)EpbQ5s{WuhJY^9ltf+w)28r3UPgi z^H_rxGoFaU`{Wa0zYjLCWLh>A+QkA^YZnWzujyOxO)h21h`iI&mh(oZvm`fR|Dcb0_owB` z!@WEN2jI_WaF3_*0s^Cfa~;o#G!vC`&dm1dsXb=3lWNw{CDnt}0S5v(K~4ce04)rB zUb=nwru#d*Nb)%C$?mlL)T>sB3MMC9NMKa@mdD8QN*{T#qcxN%t;9C~wUyM#O(Qv- z%TG%NgOwFtCz{wV(2riCdBvQ(fbKv!q5}Ran_A=>ub8x`e^DY$eJdb9 zx?TzN0HqS82$U1T`pR3K>h0h_%@&54sb+|bQHR#H26Lz%8yI6~u9@jt4D6`Sn!te= z=}&wncmoFwkrbkHg%h|IUBZjqA<%{LbYH5SB5J0PXQBtr_$Y`gWC4jp*3@@zYI-AN z&D`6}Z1JEgdJjBsR{xtRgmS{J%TFA9;=wW>4qyudlm>ys+b`agsRwu6wPD=1i*?;V zQ*#(o{6<{F#KJz^j=&3X5wE}wiUEe$^X3YPnnYq13pLjxQH(MLE-w%{pIu?Q5H}oL za$U^=jECM8Yq+-JuD9&F{(D-a=3j{cN)HJa9y0R+ zT0~9H)XWAInY{|n#%$||Ld33v9~ptf3W}4W=XB9oUUC}uqd4e676bI25Pi!POP$2* z>5-$w=+FCM%HJQ)+%1F+2OX(d*{6o%oeR5Oy-c$7I%i|zVS6)irmJ0A+P3c}BR{=k zAKk1#8>g>^&2t`_rv>4H1iJ|%+SPGB5HXk07WI}$pNV_HpR_($;kC#R>x$H8JZo7m zeCB5(;M@aA=-k*1)16gru9`ot-aWDbjCK*po6xoH3<=||CMHcxrm9*lRc%M?(>kVT z@B*}ZS9>1fCdV&zM@TfPXDi%R)Ap%e!921iv95O7MlpjSIx`)bU|WOIU}&x*9H=?E z5`(#|Vgm~`W#?d-vaS@nsX7p<`(EG$-eUEXvq!JJ=ILm=8QzgXL~IQfpcH>=a*YBs zGkc;T5tMOl@hQ9|LFYvxk(do^x}#XNnP*Hk5N&pY7F|NAh=dr&!-LQT63U02ZnXog z(V*_N&9$Vb*u?Awx+kJLg?3OHi8F{8jC(L#TRV02=`wL;PxY!ZD;;>sfR6EVEdXC#x=L%ROs`K zDm`PG7yZYBwDtfB@?ukzF#_nXZ8O2a$Nd=LCwKbQcS>KAXLNiu%-8tI%e${Uu&;#V zgl~WYh*&I&ssNjqe|YS&SGY?ve|_0w+OEt*?dILC$@xq!PKsBDzU58e@U&fNJ2dSG zHuWE#u1}XyW+7DdXPhaCke03;SZk*0QA+4j6*dZhmsrsqdu;K--}RW5{;*6&4HejNLana_|{%j6WgX3O#{Q&Ec~dH}9M| zc~?iMd?rdz8d;NAN9w`F@#L(1pJEkLT!qU5B%Y521QO$#F}gITRczoaMu-}ueLT2a z=2z+2(KG0f>e38TnDcrznVDqwMbaAHK3!Jhb-k?rtOPYHFe;Ys#sEH#Utq zE_a_^#~85L-tFama?(c&&wyT#FrXBy6T~hshw&=eG6G|MOuxFOsbQVj;mRUIK^W6S zUgvh?XzECH32}X;xBhb8s>_xuVkT>g3Cf*;(l{4NFxx3{#^+b|Xgm-TyNXaU;(#bKlY=|eEP@e zU!VK_dhLAt(O#=RX6}cDKv_+B7(=A$MJdaKXfZOD1F0OTpPh-VAbOcI3gBG(M)xW?lt*xO? zpm@L(7tM8CnoPAHXlpHIPMfk=;gNA>U*L74ec&Cq_2`xDm9L!{#7Yra8>jmXN>AoP z;fZ@m5!|>CZS<5@DcZqkh*1Y3au+F6o@f@^x6S`X`UVg-w%jvZSh{_q!G$WwREP4= zbagh^e401>L;3V~H*edWZ3H4Suf_vhJKfhyCvev?FvP=}63sVHKFB=GDXIO6Z{NGB zw=XX`d;9hb)qCk=xQ}fjJBANQ02GX9I1OtQSQ7fmZ3G=GA$RE%GkxdOp{bMu4vFsx zn&waKJ%9o`HrV032n@PUQ9(d;=rmv+_hRqpwky4d#o=b7d|EpnkG%8A>^e{C51zJI(gQRHAnn7L61r7F#{Z|WYLwr9tZ{k2bez`immId!>I50pN6 zx}H`5m$bhDxK(xTuJod=Sa`?R@b$UPuX}&spG1BEAU=fZQiR;EI?!N0o@ysIck=P?X}&%Wt-aAd^?mjq9WhzI zwS->I7`g*o_Jr;tGf&3WfTt)PX5g;r@4_#9G~01((qJ8tV*?D(GdMLHy!Psu?{R*8 z-a4JsH`&K0)4vMAT4ugcuI3K*07mEmqUHhIU84xt!ASK`^%`2$fi1`N1}0K}W{U<6 zc=)vlk7-$cyT8Im+po`k>s`Mo_s9E86e0@h^eGb(k(mdg9c|$QUZKiPE6s?49R5&#%wz)b-!k zi}%(a-S=VcBd)CJ5;iHfwB5k@^W(vOG$;h#48?`&huf9;Ptj}6*T-Gm`%TRGB<8O- z$(nj;H7htKQOYaYIdcizj3+mL9HNYyikOLJ*C_N3urLLi0nIE+Qrf&D0- zRFCmglp8RhFx?`iC$XuzOem*5^N)4@Z=bslkA-jK!~4vS`|oMa4k)0>YZ(?6`qHf*8~oZS z*|M~T?N2+($Gu->CR@Xp5(o@|>1wS@Wz6NW!|&h3AwNezVAX&CyM-*@M$@E32zA8a zT*2NknA-`$jO+YW1F^0gEr(yX63+oXRvnYk&PH~{1$4mCOG9U^jj4(VxAbdpiNCy@ z9ff_pt){=h0%pk-Ia6T=fpbA$n@#qWrsj$dOoKDZN-jJikg8iOMC|GF`R>=Ad7k+B zR^Pz>RkX^S(7!%)Ky}|9gXahj%tVbv_xAduOd;~DLgbFK=$e{YvNGGU_HeI1Z_>{; zGrs3d%sfJ3BV>RzfDgc^ro5=>jj$iZ8@a=Io6bCF+46BT=Gvv2j);-c;H2uy9fV!=Syix9~f>9*d`%Zlq;K#iTwgABx?uLvq45VmAzKKvnv3BHq_0vKr_-qjOvD z5;5Y&z!5@rtv9EjPhqiROQSbn& zL#oh`syD8`^0vKI#8W$0?KvAC^as>)3bD8u()`Nh<}scx(0tA0mruI?_;~L$M|g#l z(s(^P@043=WvwQ`-7xd`u)ItLEshh^)zGJVe$d0+(mjljvkV{O4opHTo4l zif{1!RpiI|)4GEm&9*X>st^mhkD~rzRK8bqGD9`l!es z!AG~x!OwTTzApVAML+04=J>A6)kO?&0Eq@C(FMF&%??(ucU6-$fi<+MhbB^*dr{yt z&SPP`UYNn>d-Y9$fBd)N8~Z*^miahX25!F%qmm$p=h5jP@FCxl@I2EY7VzSrGf6v946&4oGP*nvEhp$CT=)$3jd?<#~NpR#>@ zRku*KK3~zt*Ln1I`>c+56!w9h8o^vZgrPS#gj4 zwcFnDck~bU`QQ55-(R!+ar4H~vi_yM{=_`)%N|J8dk^;gDzlwuIVPL5} z_9&OF6c|m8r)k!Vpg}iu2V*)^A6UqN!Yf7-m<+3(>X~j7RgyYFxbFdMfZH~9cGM-kQ;+(rBSz2~6CRP2#2^%^iZ!)JA zfvj1_%iXDQ>{8bBsAdO=4Ww`%)-pY~%$Va#HOp5>VtvYCfu`aRrbx6g+U#!JG~>Ld z#e0HJ;!ajspEh$Es-89O;`#%7JKZT#4y3tO8a_R_4Di^K=f+Hp=wJ8{~PK z>>OwUZnT;Ox{mdl@f+Z0^~B?MDo^On)XXs-2}mTa#}pTlHT{9p zZdCLL-G?p14{?m_Rk^-$ysAN2-*`-$$Q!oJmBVE&T`J z`)F?mKwgz;z2WU?9qM=FJ5uTI^Nq@L5O#EU z*O^9G5pUd^n#q5@09(&FviXhac`x@@AsoA$iibh(w0Gc$9#}8Up40NY74u8It2y1F zatNx1<|p$i$99;Dgr@6Tf%-u44bUNsF*F+9+EX9n{p;hNU%C96H0zu!#0PPrra$|} zgYlr|Bs!2Pj0ORp8TLkKW%eDYNjwrUdTYENjE5=b)Sp;qCu3zcbLHiGE_?Oazo*0} zkw1Pj?JzTwQoS6{(4X0bv~a&W9JuWjkEy(N@jHHYXW)MQiL;sd&(!34M|@21(HST9 zB*tTUFdmjr+^pu#CLTdz9f?GP!!?N=2V^qyKbGsUF#UAJMzZuXvx)USY5neYfR!eK6jLoKuqDtMApP zv3F`Fr`R~;K&Fgvpk_<;MI>HQ(=+H0R%?2uL%NhTO+{!hTfnpnJCInw^(a>P{I_%b zPOoJu!t^nz*}-h;wvTS{p5YU_Gq-(D@fp~1C*v_j3MT2TIazBAJjh?V~FFbKXhEb za^15ZTKxdM#m8tq2K9;EkGdR=4#>36&G+IX4*yPD?p~SGDyEpPxpd}Z$k%(ySGn^h z-G2S>9{cyBb5U`zLC)#YWFIazxshREW1(gPr)mzPXKFTT4%RHF?6rzKWni+6%^G65 zXYfIbocDayseUhA(lwZ1rdySNH}@{C+bx8&tL&+ns$RuL zx9~9s?+ISsn|e(s?sVRnRSRp|6_r`Dil_G=H8nY>O+kdq4KwaRu5`h48q26EPGg&`&FZVxo=0g$EO=%yTN>6Ux@j2g&`GQRrMo*p(=yAK}Xay z&W76+l!@vJ%QL$98lVC3MFtP}A`o-NRCQo=QzZX0zn08dQ^RJSx&$7GL8U9VNG(&V zBCgES;2!6fI-i3F_hs2dE>0Z3lLaQ>Sm;)5*yl9YPJmO6N$Yvy#;UA&g9(Axh2+Ty zT(FIaotn~A46|>D#7R7D1<|EqvDQQ;Qgwq^c-u0+K9R%6JoUUnd~RCbkoz$k&4?=N zSyLJ;;EW#Fz5b8(dEeRmc=O|(CHKr;^b)c1)N$_YF&L`$0$J$Y-;|h z3+8N-V>)0nKn7U5g!bpwjE7aB`mD@oB0s!L=)Pmw%)u3z(i&QfFndBE%(bZ~Bjt^4 zy*uQkR&S+9(G8+Q7YD(C4Mpqo%o|LEM#xr$tth`<( zL`00`5(J6-O-srvOWFipAZ|ixb9n~Nr%C7s4)+ClV4v!=$kn4Edvm&c3+vMdY~?H*)<=0u-NTX@t5cF+M@s&Y=n#8V>= zJLv;W*T?&_3p3HrEC$myrM<1re0`kx`sm?@cl~?6kB`Scnv0@*IQpg>Jo1J)pPBbu zoS(@0Gn@hGbl2U(M-mUwpX@Kt6?%t$R4W1TA??y~if>RFgR#Ho7a;$7kNq0=oKGzA z9q(KeC(dGoAr{bXM5zK>c%%>e5fP&y-VBFuMve#Asu?0FGrX3a6x zS+hFsQkYX|1{sN`ANl;*mK z?#=U8c2>OV^r$AWgLNFmftpFpd`(vMmqDk%6KmS-)5Yi$yXRw?Q>J?G`7qy@n_1De zu(a$1PE2a5mtJrEAcDnNW_3xgR8ZeV+$) z%wed2?qEzMKcc=gWkpp-90p)xi)U+BG8Tf-x*@=Q#8$f07tOnwNps2f7%z^sb)m1i z(B)UtwPmRG?G%&G5u0_d~>)%ZFK58mjtT>Pv_JhxD$cI7G`o#nqg*J6L(I; z_C$BlhY4<;MrN4Dh0Jdk)=*(>@GF zxU6$#w)5;%?sQ(v+}ZPokN!VjAAO!<-95!mAKzi-MVSxIFJwMu23zR7$@x5t&V~nj zi-lt5xXz)bm%OS9Xhhu+T^JyDUR8DfNv z>6yc4T9m?)awEDgV%9_ANDo#^PezBjiAZ!?=-k1Y@vvNEsq!J$p-c7{bOdGtJhV&m z$Vccxk)s5&IgaFqfH)WSbo=>vbhA>a9Bw+Sat0ybIYv+>;#RIQ2ibT37C%aKTt2uZ zS35yS;*I7H^-K?D2ytr{rXS_`nPtU==XDG5*nlWRbSSbknY~V!MhrS)vDXt*hxZ0= z?QOcWxhE>kp6a$4XRmprgz)M+yWxgLZW7xcA? z)(N5IF$`RGFuIt>6@y~u;I2ZvxOez$yH9u7-=b6qG_lp8IJ?j@Gf!_mJC*Hk;`1^8 zx$&~ao;%<4`*G@JS(+oGBXkHwA9Mjtk#H~;A9|bNL8jdxji%q;edWH}G%?iGNLFwzsAKf<}!@v2Y zUzBfNlX5&=N`YkeE5toKW3U9oUQ;(4aImL%bO}gjXX|c2)?ye>{M;80f#J zXjSxrY|u04J*h5=BL^qF{P9h_=kqYJcd%#XqmSP6;FGx1alDi6J5|fQc|3IWN$=$H z@6>c}j?A1s>36>F{U4ggh;9NM!rS8mAZngHeS&Vw<*WBR&wKbcH+AQ^?9MmsJ}$c- zouA60GtXOc4ax)pofL0!San$IiY{`=FcpdF`h2hi)Q?kt;DtzB#Cg1%!7#JUCSic? z3|bVz_dLT~Kk}#Yp8BsZaKCn=BYsuy#YgW>uXV#iiXMSiVrCu$ZmBx`iQivem;OWZ zx{L4T#bS4GVBsvh3MC+`F74?bJ(!(3{V}VLW^k+!zpHQZ#pQ20Ij1kmT_jH9TGd00 zFvJK0w5rQJ6rJLtsNV9%Lq)Jz(1O$c`gj=I6U9j}V|%9OV$T?JsWV}sb;+{ozKL?6 zd}Akj(4pOTpXUqy&5Qo>-JEY=;}d;2)iZl;GBeuE#o3YSB}{Pw9p(KN;=rDZ<~80x zsP6SahfwBJ?Y`;9H2CPBW~UzWG<)Zp_?yf7d4ic3AU>e!Nkmg*^x`S zguu&?cysI-;lY|^OO_Fqq-CYS5KmS8VKBn%cleb5KVOJ1-u%=47}dvQKJk;rMR^m& zfoPGAPmU7)){q6cVIuNy`LcmL_3ggqdDSKI}qDmxFudFKb; zDEWz|iKYy6?uPtMaA-5Ih+4o(_TlkE)aSlA&AA7I>MhQ&neKLCn>M-o(~a$oGpQRC z0E`XyoXe3k~&d!M#oYPAZI5(R&`fkbXr(nW8)s6 zH$gM;cOThh!0fE*NMsqrGF1Ae(%)9*gt47FRjp+~&wJFi;X5DOwU65>x4Q+pgklvc zI{|vdoC2HJKc^On@p%cQ!N8T4%~aNE&f!*zs+ftei6clV0*OR}1=);GOdM04=K4vA zy{C_5>Wz0l4|~2zrtG=0<~+|jw`{w(L6@+{-~l{#4+8t$w0GvISi>uE!$W6YgVNwl zUz2+I^|_hzzAq1Ye!Q2T9(#H>Q6U&8jR#b}Y@B%j<%S1uI=Q^0ct9fX5cXVPiu176 zMz^r@z^uUlTLwhe7#REDAroy?m)2BYGq`gFVx$Cv!@N@8Y1rv_SY`Xu)TnsF=X9$&W7 z*|KKtzR@7nH~n*p>0+$dd8pYr(&^KSx|F5CbAv8jIj=N4_Xjc+S<^FVzPOr-r&@Gb z&Yw5v!CkYS$13So4{Y9Y?E(3u=ZX$JC*E+nI&GUrdZrI;(|POa;_ZWn%%I z)36{jgZWu$dCZ+Dq%OE|;(EW6_w!wR)Wp}76Wo(e=5?j8HMnyhaO|b&-`Erl)^QZReVB;kGa1dKim4;WxfFy#l^|YRG&&S8h5B^t?5t5 ztT=?lK_|0*K#Ep|>dR(cTYc_Uot42Se)^>H5us<+aSFWvZB2^?r3x#H=s7r#E+ElU zs#mbnfsDW!I)nz7k1*ziyA|vC3%cvef5cp6%=I|Hr)desp_Q=F5DQ zhM53c7$6dr;0OyxwB9J0B#FlBRH+AaoLVFT58)UBIU2^=*s!nvjc`N7cxcYuIi;tZ zuaCRW$JqLmu79uj@%8CHo_s?aLW@8k(E|jxOptl>+<_E*`@Y~*&-1yPIB#bD`b3=n zLpL9Tp6Q4V4SEJ0Qr)GR5>OfpRIedwVmu7BYi_j1xPmYCGK!)&Jb-acqBp?H`sn2O ze17%kc+y|~lk3OV`|#P%cJ{z(?!01gHdx6y1&W30?n!mswI~d(tN7$)J3{@85 z_xTCt<6|F`Q?EVq`7FLp(CIPP$+rG&wcFi;qDNwGnPsI|9qT*@6UB!k-9Pw|Tt3ei z=KJ-YW@gP(KheZ{y&tzd{FY_}lFmkPgZoexNc6zt)HndsK3F*a{L8jq#=?|JI_?g& zc_&@pc?4JrXOdewviOK}2iO=?UJ2e5jp_d6%fRCJh#JWV%H6hehER7Sw5zW2{7FOR z2d2ftE&HJq*>dcMhDB~OZL~}Uwp=kfI}UGll07Qf^I(08{;sG?Rjn=%I^3bI@W&rf zh+bmXb*XyQz9x2%$eOGX)_Q;rA(kfF;er#(RsAuIXlphR2!y%L7!0rgDWB_-`txXN z4u4aE&y{Co&*I(P^X^BVxOlDNaMhjY8Vs?9N03M)PGrvvN2(vdGw1JodFqhY`szKm zKI*~s_jfLSy6>ZZ%uMMYIA3$^{CcWf*3LXJ#X4ppY+|bVEXD?Qg+NE(eUcLNhj5Tr zb_pF(m5I_o+#XXrzl_@M!->;HRZ!=Bt!2PX<1~9Xw(1pj14{hXX zsZwbkff*AS#|DBod7Cg;A!ZVTh$dqF;8b+UCbKy~p8N=VtNETuUD&_=A)8qWTjRk4 zgAUCa5i_mDL-VB>U|pNW(~4dxT@lm;LFK6EYGvS3N)838B{@HGqj^ASyxzKu%$|8$ zv?0$sh0{x`uZyN(;Ss=^BSb!{$jUNz5OhaZRp~$3=$w>HnK$&=f7}aPe1H0L+vak3 z&-FSlea}Wa?Ke089CVWtbal~|n92)a@#2apm##z8=E<|A8J_Grh%?zUhs&H8b%?R8 zLUcrD>SO+XeO~?gRAvwU{`X$^wag6O=9aZRElNNl@Q#h$5A5-IIn|UKmSpc??<$K| z84ukp$4!j^XQS$7EK6^Nj({*afJe}S@vsDVTFw0`_uiSE`lkNP7c8@Ps$<@R`WT8& z>|$1xG|WK(WZxJTtZC*n)<1KBnM{^dZVf_)fW+Rx$FcL#Ochg~)0=!#eLNVP zZtNh@nWrDIHGf~< z_?*vORPHHe-u=YK>U^R-nVrt{RpmhKYXozkLE-?mRIk+>EKiLcALIP`sPmsUE5u{( z$2Yk@E-%WS*Ba!^d?8RKux75B?ymO@34Eof1E8*;_K z!#QO<>!VU%ko>DuomA2Def`Am6gjy!$F7b*2}txJtYHD`(5vFEyHWunLRnHjfh%O;&x-h528WL%)O^5FA6rF;iDuSmJh0_k8nbS53 z;`CKSgPUr4Ek(~Zg_zu-2YG0aPyXog>kIyUe9DUa_=f!OiS+a?4((*-HKAD5OlrFG z6hfJ^zU$zTno&)tj+&2Q>OKB@UetqLetgq1XG@RQu}Qj=5)BR^%yk_*IDqIKND~_t zj4;HcW(x;!5M_RRlPsc|IAK$n;my7NNCJjAccNJ%`h8-lP`((g%7${9;1Kj;M$E|Zm;e}vA!BVwa zXTZ@SghBXe6T33oL$|-G8iY)XedSHnV0Mic0;Am%lc!P>q`pM&Mc<1K$ltkOd}1)n z*FLB4p1Y-T_R0P*l`ksQe`}y|T*yW&S^?&8@H)FDtJO}Cb*j1$hC6iI71zrl7j}J` z#i-^e_Rr}Mrnn1H(<0C{gUCSO!8{?I@L@2*j{b8Nu!g`HG&P9@Jc2;Q>t(K2)w+&9~05Yk;fJ$}ATV&%CauuE`?DmJZ;f z5Qh;~v|6EmJeVQuF?rye4-f=(ex#H-BAx{#D;6>+-XRfB(V674KA9OI2|YyzdIlLX zBRbSGL{D`iwrvx$Ms#WGI;lTY zrDz49i8kL<6+ts@0#Ff$o*9dwSf(p0f3B`AS_!+ zcat^;daU-T?fCPDcju@VH@bMPd~)W?enijL)hOK0SDaqO{p(}W$P0Xv6Ta!%)d|dw zghcTk>~Hf0?RW-C(Zi4(%Lm~{}N4#inCh|CPU zpr$Jjc*!T7_ynSVZKu=C$LE5+e$iw4QM~BF5XOBNEM$(I%)UTk3uC+@dw~P77H!06 zh=yX&8T^RvyJn{IiR65;`QvbxdM4+uLGMn@Th^rNcg!;xD1^Btb`f~gTpy|FPXu0B zvEHFj-PZ%Oc*obCdM)!_=yUd=H`tr`-1g(^Ycl7}`Hb7WsAd&e(?3L->qO^Gx$)Y2 z9+O|6YtQ4o;1j)guXpxb#I&q-kmv~9g`-NCL08a6IbgvW9D)Flaq178M7O}@1_O+T zsfl(}_X4~WWsXd9?j5>SXH`snob#X0d8e0OAL#R-zCQOOuerrR-2?{M8zImjk=T*m zRajFU=K93yBZY+Y5Zr@fkZr^dg z6UaH$uW|o^(~3dOXRC6l8|f9f<5aoRnfd$=KGxLbQ!{t|l3(Xv^iKO%vlmG2t0_)6 zg9d&FxjUeO~4itrJDhCv0AC&(oQ+HG2bOP2_6Mtwqp%m<@IqV~8Cj z2IvrunrjabXfzI}j+#f%s-DexFNaU$^l|jL`njK%(buKwz7PApY-yiP)I7+tC2qoS z!jkB>z9Qy#;UrxB}eGc3XEav|~gC z6imodo5cE?4+1lbB{Z5$pxIE0=_^5tBQ<%~wj6SwN(m{}m)-8@G98KSf}IkODbZGe zAU|d(Raa%+vlI)|t57)0>$OFyvqy1@a*(XwLB7Z`L_kZ74vWhhk?nb*V?=41xMHSs zQm|Ds_XdeW<{C&em?iX$u%nowfaPiN*0FdA<)BsR`aNH!`r6nTY{Hf9jtJ4rkBo5t-?L z%6G-ggAOS@D8xAD-vlGv$?n!=^fo7F#aXvTX1-zWcqLN*rU8zWVz9EcyPmyH4`zeI z8q3L~6LClt2ymaM!Q{g&1W?WZvMJx^5yPnqf1(eiYH62q`2K0U_xK3xaUjD%I)C6Q~S)Q>m(~ z8HodK(ju%>y;hoX>m+y&Uu)B4p~nTJ>41;H-#5pv4GX!euiRY}Awn4`74crehwPzdnJ^ zftkbq>Z64{od?c4j#sih-_Ey*MB-M}m#?rj%xv~4WsdVb!lLdw|GBGlpO$BW71bY7 zbzcceMioU7mjFUQfi^P(ZDzuz+<}4W!5XDuI6{}QG{eZAS-m{K{r0tYp)=K+c{ek^ z>zVma@8M^)u(t@74OPDx)=}nQgxLV8KP}YskI*6Gjq;+iKg#*nd!+e?%KP|cT$rVk zyO3y*s?%KC%<%&?iA0yMH7v~VYNv}vxZN5`gCP=$f$9MQiN|jfyk&7iLNR)GdA?Bp z@R6EpzScdx`{>?daTAUqv84J@)qRNufucYoltDzF_W;9}bn@ey5On;w#UL~LdWGuj zBO0y9CL_lNc=Jo7i$+K+ATU&&XmK9K2ZXTZVfCl5gI4w17os>cZ(8nrV@_Y>)Qk`B zsj)d23`9*<>}%9iPV{ddgG-dc?rt}~{(QZi%gp8X@r~~3i0(zHY}>-En5tf@=|Rl` z_5?66h6aOgNI*1Hb;CBT*X#8{A}^BM(7Ca#kCI4ArbYm4a?S<#+~1ESoR9NU3fBvZ ztb%G1DW{aQGCPC3lk50ABIlvu8@c21JOTnC)sgo1o-mI0ZG4t{?aF|TB|BM(Gtj^H zfPt~ekz!Gaz=}el6hfD*B6Z3wcOiCNcSEDh=}e);+s!F(8v@V801H?{X;cr*ecKuq z&{ohjSU}I9LmrnQYz^g8O+2JH8QIq^m52B4$0xe;YbZOP0DP|JIf*F(Pr|U~rK%r5 zAZkV!U?#!9vCe~MeiG_qsqzyDdKd3T>@6VJu?3j}ak|`UjC%LZDb7GGsS1 z-h4mn8`%+f7{k%9;+ZAbfkH^KG!7tfyZZV0qCn56Ud2H5VBQ>yfn8p+&%GV`?Jqpi z$#e@lj!M^{OLlD9v4YX!lS*|ebLZwfQyOysJ|0eao$=<;bBkSQ28fs*Tt8Eqa~qi*am#uSqJ)jNKA7`1bAH@)GD6CGE1vX@ z8wSP|Ab=4*R9`RKxx93(>4AN-&|2@(I#g-Pe5{BwE2U?EAmLCs;l`eE`^DBoY*bvF zRG1~BR8sO#rAb5n6hpYO5x>LPC|CkB1vqx&gioqi*~PhiN2 zeZXCBzCPbA=9`y|bP{oSE9D;01pyI@Y7Q(ctSu-+G4*-%pN}QKKF4o%&L?)K@UeX6 zvR|2bRpcxjB6FowiL*6n*Bm3du;!`m#{OWx{t(Ap3i;;kX?hWp@(BYB5Qv&UUt1G3 zgW}yK~7ozKNY_w>!C*}s@^jQt+nK%#IRr|4kXXT6MSKO$W1EWDi=6HyMID<{q5mj3lpi8RbHg7U^-R6d##dNVT^KoUf@&0!?)3JmU<+6>!tLT>M9VZv67i z`a3DNwAO0INUXUcM;O)|Kx!|(#>~lH&L@2MI0iEh-_*l<6>A^(phBQDSj9{ZVxMw6 zG{OL53=l}1bM^L(PHWL6jLdb&?N1@@#|Q(wYWbj8Dz{vb?MBTo(l2>gY4P(a?)p*bC3rvOBzo}Wwd_meyxkfA)tENTK_!k-9B#ojf`Jh6t zHl>nVwq1@qz;)&vh?+N4{U`$WA`uwXG)#IYeCNFuovWYs=P@d#PSfJTw!1s4B}+FM5Bs`Qvmd2F_eIU4 z2y}^VG2eZl(;wfsAKueMep11AbaL@6GfPu9z$WGqx~nCV&cLnML7AF%DY^wWK8Sgo zK8Bt#+}X^Xl^t3fKpx17qhVzSjnKxZLkl%~BP1Ry&4Ihi6PlXho+Ap;cHZNSiq*j* zy0l;HuPNqBnK)RgF1*8IM4Y_-T^YDW+QF5b%!;sLfVix<@~ORjidGKynl#K`WD&I$ zSOZ*_W~OVmPA5+EqKM#jI#a4I1EEy06@7aQUX3nvi-FEOGeHdY7N+q5rm()=Q>Bqz zveFGYVt&1Z4)maB@~tx0<-D%Q7!60_x(+=jrtyZ0hfJ-a4>+OEH+5!CopYMi)9Ktq zsm1hw3TOtEK5HCWITA((BDZj$>c%2aeY4XN#p$)+h){Knw^#^0#grKb!1KxHncmK} zk87^&Y5G$)*$D1wzUcGvVs~{+19i}g*a== z08d+&eS30pA+rbCRPH%`@IAe!-1(%d?tNTr-|?}7SO4})@z_?G1EawLwy=wVs7PFP za-Xq@T?jg&q69sI4(SatkQ{GVK6u=uoWL4(YYKtDZcUFcK=)0S=9}E}o?mptH@hE$ z=b{88&Y(e5MARi-^Q8K-n9~@&n{VtdKDtFY=aYav&ZO-r)tz^+*jKxaHC&hD^&8Oi zbs%DEm=e#d`PtUA!4?J>qx*mz%&HGxfK8N%n)=B_#h??tNe_Dc@$tTR&ppM~CtlrC z+%vn;Iql#u&Hblu>|~zecBfVMikki$4-?us6{48EsYo)VfV3q!(7Kma+`C1ga!R7m8UA|$jUgF6NyF)NUB>Isp%<<3W6UH0aa$a#(a z=+5)VhtudDYB~m`L4zTR0}>a}1FWG%R{0bsf7NgN?|gKl=98>Cch>gwDTMxRAJvZm z)#EuG$dm}xfvoA@a(~4LFWI)7OC}d_HTP2lMG>y@C<341Gl@q#!plmqa|(~0^H4GM zp6SDVBK>+^Hy_cDEez+htvV411WxN;wME`f^YQ-lG50KgBIZrq=!(zGVYHzKgOMTj zJUDi7a_NI8R%r2dSj91%#65kp!E6<2c`25b2O&(w9O?rj3l->B1j?ys5C zdvVG}nPYbj9}cNH=9IQE(I0HTIhQaA2YtAmkE!x2EX3~2(+^j(n=h*{JG#R9dr)J* zfahS~q*4%+s_Z#boZ5<|B2C{uFt6B<0USK6g&zislh2+n78qb8 z2|>lT)dto2^ z*q)Of36Cswr%Ok!sQwM~OwG${?nIaH*Z_e$(KQ%igkepG&|<~5w6r`6H4Qcp=ozmQ z_nHn}P9f#HULuZN5(tc{N;AlgIQw2sor#Y=wN@0n1WHid>e5=@V$B*B5R-C%$#x)- z%qMR;TkM@bKFLNF;`Lu^aYuJB%&hC5jj)b39_pSfbr$vn2y~{#n~R5;+>2Y$8$1cK zqzC&KHJ4`$TyE;3s^=NBEASf`w6V2^9@t|b@Bm7K9^JoNyts*#-I`E{PxZp5`q}Hv zXp|zlG<`7=z4_AYmZ}F`aqqpF_eDJu9U6Ur(xlk{PaU_>B{PA*+8v!#+R^{nT7&*XY`6T?wNhuSx5D`K!G@*MN<4KV41GVyXIJuhLn zeBE=JJAgwJ>l@9$G@^-omCDi-4T?-x6voTn%JMtCuYnuMxG-JU9Os>kplHrBGYyqNLO?u3VN00(P|9E|2th!-H(eX9pv z@5P^ZqVrCtKTdS>Jir*&sD3@QvDKk*%_Df9LCr}-%?#jl^GW$ps_sM=%9FXDty;qJ zwHV^f*0UGEY4jjs^g!nLftvodCU5|O21k)NT)yBintj4k_7-cWhc|qZr^^S=eMIlg zje7_0#M9V*KksDwj3Uq_GpLOLmLahgZ3V z(%4sL)yO3=jfXHAw9yxu)uXsLr?oKyh&EQoU5XZa06jCO56~Cq&vq`Z`!x4>)|EM~ z*fo}RYFexzRFBXhr5TPNyBd79@1^Hce6cd+h(g%)Tm;sT$T_9)um`GJr0OJ^qPp>P zFLH+l2hh$O?%vFHqCc5X6vrTt=o!b|hrKslx^gB;+@IrT7x~&eV}C}j;uzMjRI^;O zuuuJo0~p|Q`h*(WdACdDMls0DzH4d{fwQ9yMbC7ojkU~N!;TZBQQN4VB5*4n>_g9Z zQ^!xa0uyIdcL{qEg?JLLK^=PYPwLL#^2SqV6ZZ91OO|nRA8ebbJdD|e{^MSXZg6-~ z&Y52DK{0vV%clsB%LQ|7nhZc`07KbHT3*1r=I^W_m@^F*EQq==@lkEJjaa6=)C&d1 zX*k1>b<=${h&7Pxj1-%B5R>la+f_M*9tD`{k+j&R`tkR5*nYR63=^^lNysP0^p&C< z``tfl^Ize}*_BZ}cC8Ngdp+uPgxe2 zB}{Pn3v?GqT)t5Gyw4C1n$KbaTf@}9g+kQ4DFWqI%|^}f@^C7WW91tR_df7u7@+%v zDL#C@g<{cz?QYQ`RrXGQc|L>A6;?1ir)B{o%m#ZG@L^o5x;StO*$Za#y!OD1K#QKi z{WY@_x}Y*&a@OSw9y^5&VXFFljSzTq^b9(pgwhP5i5NAwr25H}iSy%O-iued%N8yp zY~cayx#?6-zwWI~p3$4a8d^T8K9B4&!8qxS@@zJFV0`{SC-YE4wCC3{v(4{8rsNr$ zQL2Q`!o=CQvlDbCios6GvdUX!(hvt{aA$ByM1~whj#z`DMl>Th-^z8N2hBo*V<>V` z6jK-Vzxpqa3GU1+%_E}++It@vcZplc(qxzRm=>4Ju9PRUBMfqw&zuV5hhyfUlZbd} zho*7S)FG?`B8frY^bzZf$%*Bsswx~a8bRj1Hj)kJJJ1ebjUQ=XcdjWyK!1aKXGSqKWQJp>b*=jS#UFr*%h{JE5r8%H7?#cBj?&Kwb z*#!<`&ml9{GF`${^*YP1zx)KiHhTyx!v9(?SS%R2+g4ZVq7?0Q|xx(}YBm%<_r zVG(aM-;4)X!kz##BlJw)ah+D?%gTv8Ir;34IAC^aqH|LSVYgX831|ko6k9cFY>;;7 z{evS)xGLZTz;&v-Bju@th*L4Uz$17eR?*wR7z=&Y%wAv-7iC7pM7Zc4)pwfA-Z{*2 zTl0*nW!n?oCrmHW16)F21&KnqB=RHo;Jxm_YY^_l4R}!XRr+&0z*%e!?@6}33_a7K z#rQBLwoUW~c=7G+>GDM}!!ta^uIfhb^pc!32CBgefrK0n52EzoPTW8tijnF= zn6Ao~nd=T-l*Yr%oVf>w&|r$*_ko_l2hr-Ei5?~OHagT3syi$6Ky}}{V2Tq6%v9c3 z@qq3D>zJKUU7pY_&{-hKF0qsm5gsM8G{I;}SY=k-5quIgXJOI4SRniH1Xw#`U&iw}V<3~;V$A7?33 ziymQAvx8GY{X$LcrDIq_msEEG)n$&i(69?Vs1i7g%L#WO5qJa>)!Rs1q7#jA5qF{6 z!Uj5`CahJI218u0y6e=GP?HF>nc2s9n3y#PyfX%4!}ACPw(!U5I1_C1V8515?am%4j&q6pjgLRcGoL!KLDW*;Ak7z_o3M#$AeQF;E&F*ixCp zycVfdsxVkF@3qKastfzuW4aw(LRGxZH(Kd~H9_TW{qqu%XlUr7Zqr95G6BR<_6_bT zXq*q>OuXu?uenImIjo51by_79O>|T>q!7qaY?9)f8im(7Ujrzhs8bPc`zRgWM<=^D zXXjGi7*Dgl{zyz$7LW+Y%%>w$yeu}Sk?a+j6`v9=&tTTkpZS8Cg{B#IC?WzGEVxA8 zM2|*;zDsuWpTG#Oz!}^n$-Fc**S>Fq5AH5+S%{7g3{bp!+1@$0V?}1x z6jfWHA|wH{gp%hlyeC6zh!!pO1b7JZ&7n*L5{J;p@vv{=(ha8_yM!H_G=b;62%&m| z=WX}Q0w&v?k!ugY4!RWvSjQ0?mx`6t5qJboLznPN$0m-|%n%xQxx{vHg_Y=#j)3JQ zPsEKyM$vfS#v;0Ol^ai&fWTqOr^FL6L;CNzGi$~}srF?UpxjgQvmO!z57;o*0|>N8 zd;la8fy4$*s!o|FH13>OvTXbDNn~c!yvT9ILj^5PAh@%*!7I$Q#e&y~8$Zn56i>jr z0=%mFJ9mE6`7EervoP^MF!{(iurxkvHzQjihNLYNRhLqN=Uj>K`50)jMTRZM=;e}- z?X%bsk_FVwe!zzkK zO`2<>t=VHRj}{FQiS?R9iyP<=w3sEY6W5VATXP zKzP!gXwv{abKu(M5tenI;=Jv39--#XwXn?+e;KYdxwg?(7LAbQh~u zcj-N^OB@Igo{4B8I~ywVel&w&76dC-Pf@GX=AgEd?dj}vfx+9yT3*ZZq=n)oS+C~; zrvZCDkdC7Jd?5EaFjg-do_bV=3d+GpX<&9o08r&AA(<_9u+dJ0P)ur{Q8%t|4(x#I^~g!j)rrOP_5sPw1GUQAS1P z9Cl2W`}z|*co_yLCxk{3Sb$Wyj#bqkxu$#*iy>9!oK7T?bVYVS{~ZcaJILI9oTRxX z){)r37*jliP~9atDo?g$T*woBnVCpr%{?`<2MkpA3Os7AiL9v)wUK@6)0($8nM40X zbt3UXPWLrP6r!e7Gke^R^Eli`Syc@T3zn#lD!+QCtapaW;j*{uh+w?t?AIQ6fGj8j zItUa5Do*6jAGT2-_}*FBM-j71QZH~Gc6+aT`vOM-I82o7hshF0j<+0B2B92_M8m0o z$PF}RonpxPM#Cfyr(kdSW=MaTW8>4$=sSc%2-S(eSaBoK;IQgO^~M#lHOx6=O(KQd zUdMyh=2X9iE+Mg0a~fCU{yB{>##3<~XKVVWHDRvj(A_}dHav`uGl#Zf4NQAi#Ol?M&rVl+Z8tR#5W2Mav z>svdUxnrFx;aLvqIepWWxOFi?w~81ZX$GtT^8z5P`bBXGYfvLzm0T|6yyJ)~m#q#l zp1!nQ6mE-d5v9TyA)LpPVi1&|3tRcf0~kdN;z?Z+ih&|fJ`=&6%003=FctjBwl?d z7E0cx0n~?%bK!B|DLPcQ0j)1|Y**KLqHPM* zeH&Dte$bJwkS^7{V7eJ+VkLS;b%(Hk#Qqfb&ZlUf>u5xzP^#>i!-+8t$jq9%5V`QS zT|hoUE0{*~Aah}a?o&(y0wdguYv|4tqYK?C=bz8u#sefm3+YlG`jT&kSGdq54AHIpVmYg>h-}%;^f- z>52}V!VXe(BKv9+7to7P&Z!BRZCllYIn54Kk1^P%t%_3U863^^oQW3J)0|?TZbnmc z7O6T>7PtX{DO!Z=QWzPIPVEGe2*jMCX6`qjMIuyhVOY~@)i)y7bH}NgV=jrwMbnzO zubJy?fvLyg2aNhWTsOUL8`6a!<7d9LbvDVf&s$!3i_hlpFq+={PRTf@MT!nYNsS`g z&^B|64jD#I--PMa>xu#sLm}n5QS}R-6P|Ji+metl(DY0+|4F*twWRdUv**8`9+SpA z8l9x7o$=RN*A0~_i^EV8QxPFaQdmQ;=^!UMi#qGtd$=?aeQkU0+`4GzHpSGU=+a_E z;!MpusqV}So9r2kRX-Dnvo%?>jn??lAm*zm;6%n%? z$ob}tYdRGQiWtEfMydl-o7S+uW&vw8`w^HqFi6z{Y^t6~U;(2+8w&`unb~Wd$)16Q zni0B$HJRgxXxaxd5ZFTZon9vMO1vckS(;%sHQ7Ggp{sEQFSlrZb8yGICya5v=J6GS zcmrWzON+Y}PG%rIFlr;#h7{sGf&*`pYu(mPN0iWmS)yk=DzoKOiwYp(j(~LE^yC*+ zQ2`@nQ1gX!iR+ZT!!Co&09!$%zJ)_FTf7Y%=)vGE4t1in+0iJXLlGmwy=otsHIK-i z$(aqs!}$4%gZ_ABbN%j0Ok45|$MgBnvo<##7V^NL8955yUs?2k$coAoXwVNZe*FFp zIqx)eYgS;T%wdh)vnw~i`ZR~*107Y6z@EqoQLAu7^Zd{~0Q)XVTWBKAx~4wgq+MF) z!i_3}xuLGpY%X8&S6hoUfk6IIaVDl1lBS$S{Ah07!BTJT8v`Bi+5&6svnPY zcoYxg9*oWPjbFTz&q5;C)3Yuf^r(qhNA+t8cNC%-eBds<0iK3N|1dLqW|+8;1PP_7 z86u^!fT2;BaGPxt>=~E{x8BQ5`GuE9WZ+L`7>0$7>oS zwp)|XS@>{|TzepJm)b&bg5AJ*1ZD%IkQHrvr8TFqA1}va2)VkUzs8C-O8@y`X7`Qit1?T|rJ6+q0_SpvBoL~5o#{aC$cIoq zsXn1N$awl-gkejo`e6)krRp7=!T^b7)#tE-0rulT`=44YOq@l7Kq8QMK3;6%1QxN5 z4YWI%Q+!%3I*UcsQzX=2=4ho8?&jeQ1@U^np7Q5oZyopvRdx6#t!sXQ!04T{ebp_A z;+&E_xUlY;Ddp?uj_~43Iz`7;qCT{Ep?AKZ;_`IXH+*Vt_!rbNLqoIUY8d7>UU;8(EIi z%$>B)XAy3+@U)K5{}4(*VzuT4X^i8EK!Z@-HF#=GZ%g%p>NNziW{%qvhvUWGye8L8 z`_5)#+@Xjwea+a(ng;D11>OG|3PTLh;Azs=%=JzNEgIEP6Jd^vipr@oS10U8ivh00;`*Zf zLMA!vnLOE~4XkL1=+KiW#E#PB`SUYD?iHEil*=ORt*{}JEoKf-ubOt8HAhf%25^rn z6Yio1QvYKEyfre%IrC((ef~(qAcBzx@Fa9eX^`23%v^WRv4QPOO|4)6`IXXCJr0gq*j znk5f6m=kgld;H2-XZ+b@vyhmY>v))A^gwK3FdpXC(CD4BXBkw`oW6&kJp4nPFcMMt6qE+292t4~@MdvW{a5UE!YYy*ZzOJ|QB9Evqjd5;t z8;`gifnh~vrtuK>NFgj>RMX$f2a;W3nC4nOVZ&=LbY=`4uBg6*aLfg)>tB{jJNY7v z=hWYt>k0yIS<_&wzf9=6273TmlNIR^1d0HQnCjom0lI`hXg2hBXk-zGr9=x6srF&i z19<^(s5SLkQUFW`x`Bf=_b=O?EZumz$?>qUU=!1t{)L)rY8t!%mujZwdU&$!fI+0{ zL?IA#M5%BVM-dns2rTG9^GjC@^bhetu!Dx^8x2d)A8PN(^(l5$cZBL2F)GCf2a3*R zi-r8LGQbQ_R#vO_Qs+s5(?f@EF26 zE?=N49#|MmYaSkECK88{NKDsH?TECGtG&*2C)q&Or2Yc|BP7mY*<3e}IEusoXKRik zaTZx|{q=qQ>zJzU>+gHKOFje|)#qR>_4WU3u!_X2@Ho7?>`+_KhA0)ssgaTE;0Gc! z!17xy`7OiNDuvou=m=aMs4fHo z2TG8MF&@Yq@2*=hr^JEiL6G^j5h2zB9#MTMa}1ZSkciCju!fO>YWlBs;Evu50*MAQ z57-k~iQYmoLBnv;+x7kCT%)zsrch1a?O2btv^D7|<=Sqc1 zIFyYE07-IRvYArgj9@{q@m8yyl*;E+tl~nSw7BQ+sl<`7RNFJSUVnICYY%N5kU8#9 zJKaq4D-QIa^kiBmUoxMWP1$+X^?ioM9-JKj=c#kKUeC@?G$;-CV&j611cRIs4}$)b z8_A47pj0W4Z`UQUHHi3S;b{k&!@kFgIHrZkQM(1WkP;{OqK=r_BNnh~FZH9oL#&}b z51=)bQ+Yw*0{A2w0>H%(yx`p_)(wMwy%uu5DNWar7VuPKi39qR*cvQglDVEcy4BvP zc`J+PIhh)*nN}w=NLVx1E73+6Vc5u&c1~pmW)~RX^I6Hz?elk1sS zR~c73kf9L@Y)HF!+6grUMteC@5oIqf4PA>H^ zMIhO3^Pcrb?Q3gacaS(+lSmZ7jh&(}1DsZUxTdERLYafIh5K-$>XX>Nr~_l{>7Z=r z4?~O$bYJW?W)m*hHpj@CArwde9jeyk5s&~B@B+XGV7I22!07nWa?cDiVMFyb$i?;P zpk|{cF~)K3blj!R2!W(GIM`hrT&CRvEoKgAuw>cnz_OVK)f3!|4vojUgr0HsEDX`& zsOk*aXEe;Z5sqh`$fday0#mjpuvtXi;wd-0M(2Uct1{?8UY^SNmBT_0YA&Kfyy|6& z!f98@n#4R_hFOE&exR+%T+KziAvS8ZYqBO+b7vK&RS$7pK|*b(gIBHR{A$hRl%>(X zgRE(=u0L`gSWRS2U}9V3B=5u{xPTp$2P8I@XlmwBcF;+1dZFfK?BG6(an#wPof&5> zEh}amw{+h=ZMc);mwYw|OjJML)O|IxZ;rY1Q&7E&yrO^&kNa_ONsk{lHW_*J7v&Q! zDBG89Q5}#6GxZk7`w1Be%tW45pgL+T8*0P$4ucI41<&hpIT;TsWD&|*M>yUJSKdgH zx&KN(Ay7#%9O{+SkA#zSpGen|% z!>cxM01b8#CH9|o^xwO@MnBhb_O}j z7)3BJM)u{<^wU|=+a!%w?5u2$scV{$ZqK@LP5frYvb zAcr6MP?w0Zo+{tVl-g$e~msAfiLYFYbYn+g1 zvm2z^+j2d_R2mx8PzafaOJkoGMqLVXs7@r#qOogaSI22HQV;qjeTP*ilI=OTq_=Qf zx2nN%crYy!h?@RpE`>-0Mm0kOoW8N3(jbto$iyOEi34~D5u0%!;y%NU_Vaa zY+nOS#X?O68Z}){KOjIF76J%xu;$an1j9_NHJeD>jh^XJc0>s^ffdyq!X?LWNqwRR zW*5q*VjWbP#;*qPvT}YgP%+egK$?;Hw$JdN8#L;toqNdZjSXCJaa~%zH9Rk}E8r6O4 zdk0LhiW6MwBv5uZHm=!0VvH`~obEs@FGHB?OkCb6^#qEFlhY%i4drGAjO^n`ZTL2RP z;A4mJ9}Cdz3eW3GEcdCOn4rl?)_PHN?&sQVTj7m8T^{T|yU>SaZFwORy(LvPgNk4> z*_qB&sl9`>mjISkiO>sq--YLtSMOAHl2tQ}qu5pvIQ_EA&i7`{JMXeU-NUZc3xhs7 zRjQt{G}&G3K%AP&=EO2xVCj_VVqrc^ui zGBf*P)S=$YG6R+-msrH?2rW7{s-K_ZVISR7ri=DadB`Lc6LxJWr*!Y&@wT-XVSt62 z`qV$kVqoG<>@joVPRDbiSVW8tAQ9-DRu-f0BGy!oG2_Dvom9?o!$B6ZRGA2L?!j}= z+Ye$iJdhqCgb})gN3&;)(FNSwhZeg?^4aJqoVk4=XNz`fe;z1}aVqX$&jt49n$&?P zrf@lpJG9kZ-PffyL-{as0ljE5pWjn2w^rtSj(2+gP9~Qcbb#$Q+n$&qOCk@8u1SdN z$cw0?*FnZjP1kuffRn@AEj(OKS$5E@lRZxsIn804QXvq+Wl)T!0W-gviR4LP80-&nI3WK9M8M1pywd>zzdR>Cu(tC80y58BEtbI8&>hlj;N30=Wbm0;u}vR+Llv2+RR+7I4-M?^fkqmKm(H7iNIL{<8~b zN2&)xo0)|E({{}y4#w^)FuyWCYl=B0SQ3~BPh_> zQxhhFV&(zWkM>2x1@r*DiCw#eu&Y7VB$o9ri<&@hz>@N5C&j7wzN2T*A&kvFFj%t8 z(lW*vjEDLsEbk4>9&F<*o~wF*s36hpL3zb;i)$Ts*#uJcTOv?)ayB~iq_Q}()5~;6 z?aWP)^VyTwuIW_RBd}~2P3J;wv8q`@;!(RzmN^H_-at3t`TAezQG~gkMxq$0o}dRf zfsjpN6%S&H6E%Adc{mr#Dt9_lI`16m9!hnnxAj2w%y4adAWv*{D9CY<51p2<>j{OJ zOaC$wV_ODmpN8HaG?!09DSmtJwp2 zQ?7Vp2%(oXBhcu%5R{T|H2o(STb28Jp*J=6>>E~R#tkSLS0|b!cSo0ZvvEh}M-+Nt zaeRbUb_vpa8emIVl#lG-Rk&594!=t2P%{#u;)qp5DSO#va2ap`Tws?@VXkdUFx{y+ zVInM9Mz_M$zJ|G`>b}-RGb<7r1RAxeG&gif|8(s(m4U!2rVxX*zO#yhfr~!H_1sBW zh+@L-?#QkN1B@_GeSS`f1&oFwgb@ZcSyA1N2IKPx)jyD_eJG9UuF!dL;|E>7*lgN$ zK1+`V13aX94G&0(^UUEo8PE~f!X7FivahFbEvxWR@Y0>kB2X00m=3mj(RyjNRNtxt z73CBjvGw$OFOCKg%7+KAc=+Kn&+mDP2d&A)-bz}>1c_qm?&4&GO>34jnP%BH-n+a9 zuxcLpmFEFUS;6j{%~^eOu6c1Y-%!}BY* zAegjps+|@i2c1y}A5ymygWTDJs?w!c35>c@%*lh8Vdbw^fJg%U(Iooa03Cxd?#CDha1tRUaz1m`pzC0udN?N` zqb7}U04Os!^oW%XHCLkuP!7(63&my4c~_d+*4FfA7$pMN>9pKJMg0JYpdyhfAAK-R znGI5&#R!1`#xH;Q@`B060@g4dWOM1p}JwVhnH8KAdv3lC} z=}T81yX=I+cyvzd-rhxa8-;MGCTmi4${ddms&Cz?IB2ysBXkIxs*hoeKwu3c+=CTt zU=w>6NQgzTnCBj^d3r~8Pc2HsIaLuDgYcq@I?b^M$5RP<4 zyHAkb=}0-p5#FGrQq2bT^)?E@EME=w9xQwxc1wf9M#2?*WQnivWiN!#93aoui@hNv zVxqv<{g`*-xSj?P>Tut6%iX0LoE)(BsgXEgVf=AYh3D|xd!{W2oRk{B=PHyMiQ!wF znGWN)Q@&bSX&92w87H>faXVSk|6tZ6LUmxgPjl~U(V}~!JGgl3%Zr;s%UD2z^{MDf zLrcr7^WfeC&LfdXtRjULdvnT%QgvPomJ8uY>$yWV#m4prImoV_qxyjAz-UfGB#vK5 zBcZ=ENVRt!=fd*^0vBp-OPNTF&HcCq7j=ZN=Be|2fyJ8h7#Uc@{t^~4Rd1TcVRRB0 zs$Rna7Ra-BjTXwxN(8Kgu$j74BSwZsgAZ|$Gd(kY>Gd+=l-{8fIFnt-*_lD{;5u(w z?kRS3$Y#wvrg$3C*33sM19oHGX(`|XC~6guw_pWM5BFg2gk3S}!XV2k$MeP#vqmVU z3=>|_i4N_JLg)<8C81|LSe`B)J$fNF<5eQtNHXx@M-d&OG(8xOhO%e!03OZ*nfLu! zos!cyTw>0OdrqyKh@l*iqzMy=b3B14? z`7m3TB)zD~dgx+&+$_?~Ko-b(7~YT|q9}p`wUPpZzy=0$V&=}Hn?W9jSE>%A&}5Ds z$ULcfPoihmOLZ`Ah?q6&)1IUH0y56Up4G*|qkJ$ab53MBJL-@-42;nQw77PVnb@hB zEzDPK$?e;DPfC zBMj!WjWE~qHI7@deEiNUroa1yX$MFo5<_H7f8vAevZ|aP6^-gZ%&9?Oh&RI_oK@YR zg=j}Z)em3|4>R(-0YP>Rx0`;zF)kDTsHVRp6j8Th^)*JNd5gjQ*OfwVfCf?Xa?A$0!Vx-V!yS&)^bCgBKwtr* zgG9~9Mdv-_yy`BYMbrd3q`JjO^``2;1{&2(g#IOkI6^s5dRniHjFExTIDk^22WE3T zq2^dk&!9sXV}MTu-G@TlSkAezpsT&OQxVbZu5e^a^&{v3rZs_39jc>BB9X{RE?J(4 zI#=Y$(I93{IElZWUE?DPF>ZE^^Ohs!d##j^+)nzDM!OjL5xAms>5gE zi|zwYO}Hm0Uwk@#_&`rpuz}t*s=)rR?agxY{+cBTYbv6*98Gy(h_|T;;CZu$o_StH|5=<9Rgp1xQw|_;7H6@A9jsv7Ara`@$xW-YR*2DHjGj5LFut5{79ZB;;v?t?^ZH2W}3r3T4sm? zESW?N%QAkTq7Z@h1NP}lJXQ>*k*d@DN@;NYPyZp#JCtw2?r3Fn!Z(ZRB8jG%O*y&{ zy@xJfTuqW>_c~B82iRBJ?W0mjD?nnbBC=z+*0!?I-^Qp*fd*}}&}5cIhZdSa7)ci2)uZSZceGn&YSOXGINZuuZL@Tpn3y|8}V>oX2m18b`Wt_mW4&t`+MfV z{w^TV)a?6RHQg(P_%Q6c23a$}E*`+6cxYp`$ZJ(^+1FhS8vU!XqQ5jafb(;@3r|81 z@B$?6M~75rUv3RXxO=>skOJdE?vtk}Mi|VgG^&Rf;Xut@aW0+~(XGy+#aWDzhd<2T zL0|#r(ROLA;v9DDYa);}f#>c{+`q(!!3c@roJxakQD#aSy{+n0oi%T*`UpD4Tn`}8 zphbfN=-kvi;+UB?jyj7}-Pe1AM6ptRLG^ac^*Cy-&&2?TV=*$G#Ts5-^RVh+O>3^} zb9!*yiK*&!EY~d71omeRx-T#rphMomEfm81E&8AT{Hhi8*LVY5x~+w6v~A)exdD!J z-kdiB>OxWU9AXT_b00SMaJqt=5=c;6RaHbZl>vaR)Q{yr-x+!vyYoHl#JZC8lTsVqdZynAr(%E8Xl>seavENXgyy*JUW?4X#zU_8ve5e{3nWZ8HSk$vmA zbBg7QCT_MM7RJN#Le{*Ch(l&8~e<9Eza~*dnqOVomgIq{B^XYi);1Gw-VuS<4h>P8szK3pmXwM;H0QWj z$vk$^X`xH^o!h_hP!lC=WP_72n4Y{P1qWxYWS+;9h%s3{oM{eqS0)#WLB!Nk@7)vi zJlB6tvjt@$KT9&m#Bdbx0OYj?{1?-fFn#W_Sj%jb^`zGt!+y~m(_>TgEHO0grtNP3 zwx0*BCVz2@gv|Lutd}Ms&aA}s=2x!6V7jtbEC?dv`OH?@6~0H0+%!FslkrvDJ>V?p zVH&X!5CS3b&F+k64zoRqmFh%ka61B>#!5`jVqiQp8UzHgCWMDy5LwP?jSj>I znJs#IY66M2CJ{J*z)NukT~eL6)-bm)#&xRu5?PvIp2r%RJ_BP6Yg|Q|-PBDK4w|p) z?$IH1h{jSqU67`cfZ|K2DW9g>A&WzAQ2vAJ?h{h95Xkb5gVCIb^TTEi^$8K91BjZi zK{iMGLiGs02u!%xpl4Kf2!U>eHH-}n(bV*3&7+!!W>0H9r4V$0WlP98_4mxFA~^HR z8yDsMqYNylPINA6ijDd4tvyJudKq4YM28UeH4#}B`Wub@K;kSmu!*x6;cUe@4aP_$ z0s(`F#G-7jzn9m)VRg2(cW~=JDz=QTg#i}yr@%usy+zFs4`Zl$g2zrov9%{(pXTEF z4ddxsha(3Kc+OcP{Ug<bmusL^60|tm9QU``7Djb;ZxD z?Ibo@b}vg61BP@8H_Q=ZK_Pe*V4yVl7EWh1jH$rF=j-4-q~H;Qlob9O5)HQb1*g{n$UAV7&>dxfJsD>Tnes~WBo)vg!dur6oA zPKys1(=+D$@PDj*(dkFaAmXAncEyI6JvBBifQ+(az}N4rIH#$xhJ`43Qy)+p(+CK( zh?-M#3Tz`WQN5O#$@X$Ym~(4USewInEZWyVs2CTrvaN$L-T z$SKyW>F?5DP;uZb-sL?xhd)`*&7bX)bXtZsy&l3`8#F3M14PXOs{5j*2MD3BsVNFY z;3}uh7LScw)1bj4Xoxj@xMTFp_(=~zY0#m*@pSN+%~mhZp3-^oL+wn>=>UqEBRL+l zTW{5^j-b!>NLe(3bdq=~V?n7@RLQO!pR;%PX<+E^$)oEj=Tm=U-sxV>*nr*cuci?X zVc8%a?ozu|oUG`q^1^!OAD%zoGa2Kp*H-I=aIa$Yrk84FO&%CLGK%N{hOSLF5j1u8 zXwYPXRMw$=W<#Yh#$k_X6HRJ)Yx3oledvqKoDr%AD={dIl^CECnD40>Ml65nxSZv% z;ICEb=4g<~>F#V~5gRd2Knn0uH$O0a7$f$wZgXGkp%=e5BIoP=rz; zjn_9iLX?2F8C(-L=oM#5p$jr%)P2$m%v3oW(hQaT=+thwYsRuB`sq))qq-4PyKCiKIF^Su3WBII$y!daSE4RyrJD$ z^)VF%d}2|@$u70SnifMmi~~X7d`*8KFskVf#o&1B&aI)jmIjF()dM5_t?ERJ5r&`j z;oVN~(ck0S(dkDMdPX@A812&m)%%k%Zmk*Pc+Kbx@ha6FGS|ez zHN^qlVkh%qpQ7i9ivGYF&SQ!-bO{e)2Q3B&yrH=+2ch~M@-~-k?S72&RjQvr&+K-@ z7$u-INMWQy6^k`pLSlpgMm43-`1IRP@jb3?{UqL3H}%?mUgc^bGZ5G#f zNo+sc)ovZijaP5V4a2X^xS68414u*mZo_RPQGytvpcKq7UmJ{ZQKy4(2EIQG*}zqt1)QomhVh)bgf;AT z=lR@cJ~!13Ki6;6#ry0Zo%c~wY&f{fuC7p>s`mt`4HPpt5F-PW2Hh8yz1$w7OA(RS zpX+^=-)LF)$%Ed~$brnB8LED0M++mN#ac&nXwX-xpZDi!;yn!Zh;QcAH|5aF54BxD zGp7w`7J-K`s9CG&pH&5n4Hy?xQzpCxO4239rNP7IIDk(Dvz;z&#k*eW2G&vR z>C16xZYn)5j&$kRRdebAZYjix@m1_bzojOJ-b!B)ZGa#3;z05XX#&5sNjS_ASLux` zn9c#3-4dQwirvLHb@HJe%s&_FY+cNGE9_1pVsC-{5rc=@E-mi);f9Fi^$S@nW=B19 zSn^oqhK}jZ~mx-O%0wXK+GU(z#=Jv7;z2;>i}dcZmNfAXUpavtTL zF;qx-!l7Iex`2)NPk;a!I@}E?N**%2K_wB&>Tut1`37SYdsGi$)FmMxcPp|qWv7!V z#9-XeG1}~z!`u=v>XLS{ZW@t?Q1LpCb=7BH?^#JagIV67%p?=Q_znrqhd zCwdSmLYu;#0Zw8IAI@?0&wMviAJ=~UqT6qV_$J)u9n?;>L5D5A}TH7sBY zL)B^Ud7Q7$&G-0Z8{d%AWBc)vjW%jV7?|q_11!|M84@E5F~YFTjGC9$96=&7GZ6?p zP!l!LMRR~RY8`IgSYzw_!Q=Jg5oovMri@)&i>us<6^+vYeCSNqMYoC&r@Ds=7b-45 z;1mL%BIVZSt-n5wse39sKwc-})HA zj|2OR%4*o%97C@-QM6@0ChW$z*X747_4KfXVp22xEBB}rEXEqED&Y=oNaYuA%z+3njN1q2D?>@CR_1}G8r>{q`S9EiZ92A~y zL-lG+{Vc_3uz+{Q0PE-#ID#J3wCMCXQ$lI_+M3&s6^CP;H;Ms=3~s<+E)nQV;iQ50 zXH);T{50mb*3Xpc!b%qk(Rp<&iVeo-z8I(ej=1GS3B@9NP_~>abp$S1$hn2dNtGq5 z5Ond{jRi?M`3&qRmDN{CXiY?Ox=l{+tn(38KJoS{>ZmCe^!@u>OZ z!#MqNoD*E?XCW!3EfF9KD1q5v0Kv!b1_cnbjLF0CG}UKo#AqL=(>FxVxwEN)Ah`qQ@d~ZF?BxoQ+uYm{kr9`_m8h%f0T4U zV>frn*qoN8W`Hpg$?hXH3rOSPHF!3~qrc}z|aC(}L$vL>#&I`=UirZu$B9X#=a)>^g6A#K#F zq~c4^*q{ppq5i~Zkn-une6S)*g8_DM3W5LTWvzGlsOQ&b^Nlt?wepaKsM?Q5@Bl;# zjBEO*h&lC7h3@Fa(`%u6T$8TIF4Y9G<{f+LPw@Ge=Ue&Kk6wQ9b^iUMxF5@M+XOnW zPpR^ShmKuc9CncC0ZN17R8>qBsW0rmc(?f~J2Szz<{Rzf6Tb6S#YI&Y=G6ZJg?K@G z@Q59(>|~COjpj7M0VLX*5nhc&t^P5>6+G#?Jb1_1!RKtgKJNLyUDnwu?tJWn;%e{w zXw10>k*?867&xPNUp4)kuE;{{^4QhP!{==EiTtX!`e=gBSLd53elN#64U4;t{~2 z>1DS&qXVO}^+UkHKFh(`Uw-r{D;SDqV$s>Ca+cs(8;&j;`LVXKI{XGG$BW_4GaoQCfJ5r;9YOdsOn%>F3>1lb>bjN#B=*i!4+sVymx^>as^k3ax ze$1;v+;wiTJ%K2L1o^~<=&qrkD6EHRUo!Tu9gHP<@ z8+>)7`_APp9<;1K@KI`dH%OEU4GMwMbSdKhf;H@-3z?;9Fu;P*V9apORbQ4x79XB) z>(UVxBG@$^D4Xn%`s3F9X{U~zLmV{dBRR&gpJoWq_k z95g6RsWS4Bp1JV^I;NMFeRXD8t~*|20COR<%8IBNKMGN z1<{n9A63ByE=@L5Z+QN4*3Ml{-1~sXH@}xyKfDbRYE6AB;Lpg^ln6YVZ7S*qngw)Q z;Njk5IJmgNUpBnn<$$xu+o0o&hZ#7Jj<9Qwv1^Z0f;`(a<1QiDg`g0vEklfknLQ}Y zfh1_eZI{h_o?4#^&u(X?*D8BHiTms0xgR%-*N>Qbv>AYTf=i|TnM*Eu0kFHa^I?_3LXjf&iKWb(NCI&hW7BIqr@4AFzdKc&dx&?Ode(?fqVkR1|=Vcez!1J*-Ylh#|$DBS&_tk5v z&u@Qyd_CWUi@o`9?F>Z^av}GC>Pt1n4iY8Rygm{$H>z*LDsDj_5lGeD8~fTB*jH~( zLq54P4`c5C%2)n8v4!Jomx!Ip{e@Q%$yvb+)%0Nw_%mJ9(@O7DwH-r~C}xZn&|v1E z`UC<`bg;w*B$*QDS zA%bwv`V>9qNxjo->X|cBA9w!qx!7NiN$uwHkM6O1x;=RdW{T`ZJ_yiA~c zQeC%<(EnhvY!_oZc1Gp#QrJbaT`Fv0Xd)~vKUlSlB{$NY^Wi_Uk1P0G&y+iF@%o+n z>l2@k9$d}jm^-URAJ}jK7&$;t3JL-YCmYBzfq;v@;+qx{^@~@po?bnDr;AlY1(OOu zW}?5`nT+ejGx>nIUk0>Ir}SLxBWdl8I#rmh4DS@<*tawNN7nBYz2Jz8ido zP6GKVr4PP9KX`*K57l9P(g?=a5d)pakPE~_sBkHQ2;T)Er>_y^qaun&eN?~^Xlq19 ztoCW)6a)!+8pEarb%HUer8rkkx)@FZrcn)yV)^cJ;??G!EZ=8hHn3n>^?fxrqQQMw zK%!-`AM5C(kgmu@1d7A9IX0Lj1R4ag4~Zd~Zs#@4$0a_NJa_b_2EF`vuXn!T^vTUf zuklW0&V#$Ew{?yF0gQ+0`{sUD^qk%m8WBmJMMM!O3f$qUV;4;> zaoh+E&f3x?1X`5BuB}4s%2e6CTGt64LPCf{^s#(Sf7}{}(quX8$_ib01K(8kswxT^ zrW|4edT`PUgsm9F77T68JdFpQh0jW-rAt|wU9;6=gGYKM4?oR%>hJVy-p~@Ue6E+d zxry*LU1~=`p2~SEVcHQD2hu8IoW|*SClY!@Byb^;sBx(Kz?jJOQi&7IpCPkt5sQH3 zZPpt3cmb35Ik?CC-a^Kc3$f%mdtiD^EGKB4%xgX5d~E~ASao*_`VWtEv(sROap&-ub|aE7$iF4`(5v;~JSw;V1~Lftf?i+;=HN zg9QmQNB6yPOh_$AF9}JX)@Le ztYL^=#-^jV9f8>jJ6J%PYs5+%Q)SpO{#^@U+K0i|*eV*9c znu$K=sV~UPH}v9@nIALx=s}1zV+`iB?`s%iv!+W(oS)O&A3`E(ZoHVy3q$#QQvbLvG&d#mq(Xp>SaEz~Hd~0%uiEg>|Vk7-DTaoI~Ou&fsaP&(`b> zYR=a509n(bR0ofEC|~l?OntuRU+*F1ZH{!r@Aey>Q{In4lweG8>Osv(bL}2ZpVl*l zC^B(f^TLbU_O*P2F^bimozHLZu>@r*JD+-YzEIIO=;o8n$3wFRtRk`2rHIVb4X~#| z7v?lWnAAi~eIQk5ra7)kc-b+s2N9X;xjtP|Y&5;absx=qeSYWHM?KFImwh&$*u`gX zZ`rv22ZG3Z?>&eiE(=Z-3+YNnk(sLvqGs;T=Y>7zvc%WV`COWh{XMTe^`!03)o(sG zTVMZtd{*6yn*LU+)mpT)JUdVwHCOD8(imeM!zwSY(wkb=zZ5E$mT`)uV^ybb`lzSA zz=!v+&o8St)7#Uzk8gH9zJ5R4&{N$Uc8dWH;2JP`0IpFAdYVswQpIRfCV;CcKYcL^ zn1{yc4%g43(&PhKA69pu`-Le^wZsIgTOqeAi<5GCC~~$N)`9Dm!I!Ic)T|M;h5P2U2RcqC<>#GuNM%e1M9c$|0}GnaOEoa)Hl6ep!{mjN z!JtE3asnZz00O|}E!>h>nn#eTLw{>zIC`L_=TThnCoiMNuJ*P* zxAXCN8x{ATe7#qd58t59C)FQ?c;RlhQ`1(p4=Jj()Hw*%GeyMWA(R0Ya2o6yJB-}pP{X;yf=1Ew^6EVOTLyT&=510++)Z$)b)xoFSCV10>$q66KJIC zbbvdzVDkC~G=p2Uow1pwMZ#Y=qk8kMx_}sKUPg{?fr%VlAzvJT@ z{P%oP{iC?(TWGst@KkIdYRXEQ3ImJ~gVAtQ)87s7BwUFNL`@(NHMgQPHC@8Xapd5~ zFkhd)etj=K*j`8X;+OLA-|5^bH%>5RX{qMXIWcjHx^Xm(>^Y!ofB=a#dQZ)4UogWP%GD}mQFca)ke_PYmOc7W_Aan%R zsVo7jsrm^JWXiHyX1+{)4F8_bfBu(G>)^e6#nEqcetc8!T=weTvhis?MnPWI$_D$f zXJ8_2yH)>c9>W4ANJPypg&4h-(}Qo=!@G?>PMFEBS#$S$?0o+7^^Hn=;`dk4!&*&$ zqp_~(RV@oMpQRbS`QRv#Sv76f<-Q=^S3=w0&Ip820N6A>RLNN5{E*&$sa# z|6ja#yf@gjV&97g#I0o^2w0bfSL1+JSB^_{hdO^lT(s*B*PZj<4B5Hpb7kEe*vWbj z>sl1-u|=9xD(-(h@@c;7ce*fi{2ls^K*4lPW~c7Y$p>Ris2^!?1tlzdg|e~{Nlc1% zf^#R0%79Cj`}X!>B@D;gQu2hZ&h|%7=y+1gT#{sN!E{^4wkzTwg`khDXmJ98P6j(% z?9#;P>ExI`mUW+yNLTb>bStE}w%Eb|E%FMv>_zTfJWy=Chx_`t;G-E7sUoL)=bIIM z!|zA4Tbh|WH9a$wiBO$2+coEF+M3%k1-b(aM;(fXkTnac6FpF$6*now?#CT`Y(<%` zEbhFI)5kOO$=yfOTy|q5jJGE{V+_!XY67WxPlT?(=s;#-jBbF#VbB-o86D~ymxN43 za20xhd6$yZAS)sk5US@KHAHc2STe9plJu?zrD$TAAt!&`3 zJBUWUePqu><`5ZVsa9gTJ{2=gO=)Hyv_hC@MPMDKn5cF-;#OXO3utJJ_ETbW;Mxa9 zZR`Pb7VDa$)~7c+t`OH>f3o0x5UKWZ9jwR=e?Je?*xcAoBw;o#*pG+HxH-}zhxfR2 z(@JYpwKD0$xw?%)Ky|p=s&h?nfg=M_NDN3l=K+Q{K%fhmU23sV(;uEQu9NSxzJ0IQ6=Z)UuXwWm|oloT98|577{$_VjQ{M?(iiaI{F9z5f zb&Kg$Q_L2sTh)OP+L}<^1DuJKc-y!T3pp_`&~t1^BpOR+J{OC}EPD5KW=8znKc3%@ zPsWci0)a$>12wY&8vB}Ps$TCyo;OjupGNw1 z@r{T5YDCX*zG}J)#Rm?kETn5iZ+)kp%bkk3kLEPM9zf5~P3VY^Z+?6O?#IVH_{Vo< zW@jGL_=N6!BY&rN(KpC(hXPk(xn?G^WMClh0NN5Vqb6`r^&+msa?N?HW4R_UuIVoo z3elVTe9eD8w)=Xs1A8vsdwzU_eZ04R6z^ExW)a=Rq^b+(K}}l(S9OXLtL%yJfPL+B z@Blhr%!->v?_r*gYxGfNKJe^RAwKsL-;l)1i^Iz+RvPxm`v3ka`h%!xG+M1i?V{SKd7ay;P6VD| z5lfbFcrL|!eSW_ATnuK!o4)vyYaKiS3bBJOy8@kie^%OV^#gxGD1 zRVLE{N~7I6LSTj!!_-uu4bT`WJDnD z^fi5c!ww^E0IvbiG{RyA(XIMYbqKAsivD6obyuh?g3FEDFBWvH`v)u=JMI($x7D;Y z_jpuVGF2VhTrhK}s2?NH;ylJR16-oq81y_dgU?6eW1AWk7vF^FoAOSX!&|qSp1}|! z)kD>rSgwg256`3Ni_nzSG+>Ce4#@$=7~x46nrk9dcSh`ft|vZEjdGsX{RDcx39nu| z=d!0;aKOanw7j(RC|X?JSsVl}b;SL?(KVOk3ZzpY)5#JUcg5DpL}G~%U{d(QMaf6dSR{`mfO#qi@hd{YlcIyVm0oUeMQSh@RB zYhn$12pzL?DBln}XjGrW8V1J0E!E`#iB|tSdDxSs|EkWFmz$l^xlr9Z_$bBHdwqIv zrf1`u<;Op9@5NL1inkh^KZ_CWaM9EyOR7_KmoUE)({&^(Q`Iem2R{Ac)y1#Rf8+D^ z;d9nsohUx5Mw@w7{RD?m?5N(TNt6a>u_8JF1j1YcP0cl!)~q6H0txTV$UW@~jd%?4 zXx|ufC%VcdbvIUX8cGO?R`$6oB%C^L9XHjCR0mRZVx(bDj`y1LDSe*J$Nq10>6>=( zO+C%_M|dXUeqH^N zPw@WwM(3}xrz5&=mS+dcY@!DxM956pWMCD6q9`)sBKq)%%xveh=LYjA=de8fz@Nu& zKG&I?Nqn;Ae0gCtJ0$h@jOteP2nVo*p?yuPsa~e2vb@Y1cn;#S6K^k;5m)Qo!I3=kxMNL}*6 zS5qYlrB$p|6RC&~Cq)@S>R1&oa*p>+u8v>loPLLzvRIIdCCshkgw>syKe*{Ss~h_4 z`i$HSJpJ1Lbp!yC*{bcTM{qs}sJ{aG7(&vp3_N=>YImvw^}4%P)W(3uY^pR5qCR z94sm>R>BmAu(yM54%Vn3V{PvBMf)&(4mdI3|wVi5nQ#YUEFlMqCaw>2QjB- z9^oKI9zx){4lzQD=InwsoX1%#Ag-Er2~f30C+YO~?c;07ftVSPWDzC!(D-0OW{u1P zs*6KMh!TVkKMEmrsofv9mga%!JL2XuJ=3cm)6*B)XLV@2@rpc<*Ghe}9VCjJre{2Y zz5@&yQ<2(-$^%SdVrU%WVcBuF0+?ZyL)nxI>XQvVolGJ!a2}U0UKiPmTqwl0mtU^V zaC{{rryc^9twc?7Z{XmFH`L&cGFrn-2&@{V*_q=reVY4JwLNI#92l4JfE% z)~x6JS&T41i$Lg4Jy89Q!Yfe-{Z(XU#kE_XyZr0jsZYR$nRR9}lOA!|y50ag%G zo})UENYz=BSgo1PslP9H%)<}6)#&kp3tpJ}%6DqjH)Jra=1Nrsh*cUhf5rjeuq(P- zVW+0P5HvrM-H&1LxtRE5>6;e(I-l3nB+jBU7!NDn%r%x>W1+6L?~%;$(^MbEY=HYz zmj|4}**VC*ta(QiIUlx|uV3H0?|l5hCw6~z?nlw1R7J47&6r7fic>LN&z-YlLpY5W z-g)t=(?wNeUbu~g@i4d0Aw=*T)#aRq-r}wIe@yD<|H)*&kA;ty=SB|D0}N{>HAB@y zkIM!dHN%<-B81v$F?!AvPnf8VnM3c+H|fqd;eNcw;G5C&UM33B?7CvRV9{)aDOM3! z(?8ZFJXrI5Iz>46#O@1^4L)A+TJ)X#%-`{i8v-|B;FR7DQl>fYnCljX2oX$8YqF-* z=z(2r&0KTmRLy{Lr!&vzHTbA5KE9k!_&$D}IYXVqb!kUQN>ei;paft{MR=0KLR@<% z+uD~eYlU_jr;TlxkKZ@m%er|n?Y7lW6ed?63-R!Z3!_zM`8@6~7ukR;6ATm@sUYu_ zVN!iEPyk{VK_`v$u%h+^YO!jAUt}rZh+#s3{J5AoVKKn)L^*Pv?|1i5(oX0k@CRFE~QdDeVFdn+ix!6#hm`5TpL}FYsG}oSb3(J?~!z+}3 zy6nx~sCl4KZj@@fyHGw^UheBp&qf!#)6sTi6=#s>2(;)y37p44+|U8KB1WnQ(UMoe z_U%_4RRmTsuk(;+Tyk~}P0u_qr(TXi?9OYcFhLSj#ZLo#kqy~Oft0bixnRtntN zfmQB8<7P`W?KnBVRnzRu#K92`k!5W+%_Q*FB~%QzIPx4^nzpeLH$)G9ABD)hjxZDL zDfWwu>)r-;<>9>SqHkdF(a6J*vh)}T@($HqC&xV)!YOQGqMd)*MT#uQDnlp%s zw&EQ*(o=;XZBHyM`*4<<&hN*gvz^Xj<`2(&a@o__>WE2G%wUAi@tFQgx773iEqW0K z&e+5mJXq6I9SRP0?tCJ@kKUn#J*y6kyQH?oq~-x^;+C33i$&G*NGzZ<7-EEB%?6^T zTVQOiLqvD%)uZ;qCGOUW%bgdWs1HT|hNku`}#B9KTl3b7jpk4R*yf5OX()oOW2p0_^P zwv2bY-02=3+aKT9{%`CqFFk?WWw)jyYVL7D4=h1aGX8XPl9Sj0QBuMW; zG}PqvX_3pMMkTBmvt~MzO-M+*7z+`EX8{gGECmL!PB-ljrVoeNVyn)k;*xAZJXLP# z_!H*R1C_n1aoACF-L4s98!vXu!2OtLZM&!Dazf8wq2{bvW9X=;IX7YZ3R}Q}xpobX zdkfFcJ^9GqR3V(%^R(M};g)kY)bs$My1~ggosWoA9UWRL&3Al%420D9=WchTdXS(9(&!G^G^gP9k%G_p=&eKcJ7?a4I6%0@oID#JN57*-ZLog#o zU5ch60@)tn+Re6;Dhh9*2wc^;f16$WAC(K+Z&7d9M z;ormE@8tYdGBy=SSlD+=!;Fe3Ah)8}w~+zJXZl11=@XI1)a!4=#d^87PoId>9h}N} z2M#QZhiEDkf@fGk^vr=CK%%Rf@jA@p;7K)^nXtA87P5Qc1#vYVlgjzL21k%spNi1G z)uGUuRUaYe3qVtGK&WnNdd9A<$k%jU+`C%nI-QN4QUqR5bGFI}orB?=TAamsj4&JE zE}X!~FkuU`3&p_-Qgx%L;0P4rtZVnq6sHfw?1<*|I?xftJDcszoz$kH=eq6)f#Q{8 zu5qK^MNJ7<#I@*EG3e0Ku#U1(vw#shr<8ldta&Ra zAND4?5BcQGHf12Na5Q2Mtmn?z&PZZ*=UHnJJMN8V!n9=p;~XIAZVM zvS?xE@Z)-umt-RGDrC)xrK(h&9+#Wgsp-%8thm`+&(6LX4NAj37B(baaNFLh;~2m6 z_7hNuUHg94wFWp^a~6S(=vHMlRo&O$18$s6{3-rO*?IBIy-^t?5({Wd+_Rnfvs@4? zHRig`a?hYcxY@PCkqrlH>Ytzx*wqnOG}jV(fjMkk!<#Og<1LG!fwJ3C#+nw)gPWQr<3lq<;>EA+mLYV9GRj;WI zX#soQAh3+{-bH=qXcBHqKXI7Z%52Sbgd=5RK3~f2E_cG2Sc&uou4`U0=#t_=u?K7Dt@OW<&Kcv-VulIC}DQsIv6qB z$aZm)J973^2$d&@J<&=#eR1aMt58lLvh_jG1FLzH));-{gs{W)?E?gKNS~?N(W}1M zV6{)AjvOKV4wW4ddr*7Im>0XpPnK-|^lJPEiQEZ$rXFF9s;FkJ2ppxlrbpLgCIh(C z8v=+1lsOv!rEOkyn?oW!12 zw%wqdZ~=*{a1rFW8JSt`7y6nO zGJ8gKhsHzw2j$Mg>$%etOFS71H9gazHo7aUnd{atvqgD>z!9{F z>_JkR;hOp-EQ>h>QuVmzIJy-&j$LEd*eDkF$Jv8DKfL3?h=%REXID$7-_FD{5D3+u zJ{FNRof!;OkFZN2h7KxvR22h^1`&Ba#|Ka}T=ZFbic%qKT68Y@x-=LR6NY&jWd;Kz zx`1s2ihHn%&qNP|>OkkTniS%p3p;n($L=9BPfp`i56}0^>I0mH93W4dIwy-q5txQ;s$MI_O*zbv~6NrqxywtF~yTHRb5;lx#jI0a|~xyr~d6p z-jgDqk&ix?Avbj&CRNWj!9`;{L75}G$<7Ln)I0$@D1`pTI?5-uar-uk9FN~Q;yOoA z8oTP>=vZgUr+)|A$B1y-ZXm4#zoE0gTC`rWSxGhbC;!J6}vqN0XyE&XHxKd3k;afsvb~ z4ITVYUDZ~`noJ7}jC<25vAiVFGc_H;E?VrNM`q0|H4$OXi9@|8 z^{?R~Zq@29Q`tMb*tGL7=x}S-@hvk&k@Ge|(Pub&fu?FI!mV0?Vuf=xxjr_# z7-n7z*C&kB^M$+sd;@-B&?}x;GT-wR@_}5z5!pR{N1M9U$(h)+Br|cPjmDdawdR$x z(KB#pmy}V{3^;UvC~K&ewaJ_{s$sHKqzFnesC=3qvRU6i@hZg#|EL@o$coDxKKoJ( zjE6>pH7OB9ihO2F<7Ty^F6kN7Bh`h#0B>D0D=@-=FdE|g*~`r%?Y-yEeqhWNXRS+wxuvRXgo4)t~Q_aIQJ zZ4$#l#OR3>9h~FzQ%+xfd?7?JV_#P!`4Nvs@yJgj5(fOAL$EYsqVOi>dE+{3mxC2qH# zY6Hs^ybN|C`VwtTw_!wPy(Q=b^)CSzCV_5`im-dyHkmL|um?&P>TU3@ui z^TCk0ij|tcipOD@QwY1)O-&tXcBSj)a11wmU|v!)_b%mH4r?lp9K_X2R zh*5{;RvLJlf#AbF37rkBPa`(b+gYEKr;N`sX7;1z&ApKW6k_&(oKp|R2P$?~VhWu- z2xQgLZ7#XbaowrTC}J_!i^Bp2J(Gp#J!9tU3MW> zI<$yWs$2b;?=ZifiD4fb26qpm0$A8kN0#R^V`R(>$&&a_y1i^mvc1X8F zzovb{*?ro?7^(r2!6h6ACqqk5nDjlWTHh+7fY$p)i&P^rlXFeZAI79KI@IE^GxICV zAIi=>xU$S4L(ZB5TYG4K&kXaO@kmgYIGHJI>F*NW5%V~T(qI>d@dgMqY1|=1&s#?w!F6cH>z>#l#%OESGE<0WsXn@p86vh+cZqEAjuu6hX8ogNsm6sEoQ~pVJ$I70 z8w314u!17TTRLy9o4J#lC{{>UV_mpp@}l7j^O~s` zdRzu(o{+Ivj7AvLjB#bn`I>Rf&_tk^s%bE&F*Zy*GN%+4kO-VaU~3@A@zB0zO(5qK zHG#y5a-n}|5D_zkJ5UDPc)N?Yj|*yTBj@z#tNu_pbcF>b2>Ti+0u%+V#dS#4r!l}) zTsuZbpfKnXT9kmqOoTVYd6Wi2BswFREk@{)xn6~Bo^U&QhLW}^W?r(~{gV@%o}b3F z9d#)BdIpc+#5SmW*`BlIp-sc)9BPwkZvh0}R z+=sSiv2QbX>Z0a6wkKRf50ID*ux(#^28jb6x92W=o8 zLix^7U6%T>ZWba_M5-Bz1)>~`Y{x$&!Yq4x^Za1#+Ynj14JCz~363E&s#>wSPOI5* zbIs|~Zbwsd0AWMUDUeHqxi&RXBQsKUBKK+TTiDdUC=vVAKg7r|`}&Im0w)ld;?SI~ z*e0A>8xOTe^!1;_dHdR6jGWV~!7Gu-iq_fLCzWZgsj5CvDqM?>GalxaVQ$T-Lw)Z! z(6VY8=tjL`{7gE0HL2iWz!Qp9IfEIfLLLSan%x69odq3cCF52@e494?5l^DeX z@QtOLKJ5k=gblKNF)Oyqz_RU6k^W9MHrN}kbTWnlRmx`D#64r9dzyslSn>l2n&$Na z6@pkH4#^dPgVKtqDn*rIMZ(UmAmBoZ#A}ZjoS(m@XFf-$SvY(C-nLn2?h4WzIuzI# z53P-d*|&wxjwLMVZK&=WqwCaUj)yAK5A1EPKl?Tqpd%2N)Ko{n3gW!J>=|?kiHh7I zQ%96gdV0=U%!tL=H`Wuq;64N{6If7v79%`>+)1+m1~`D+r^EtEBj;J!URhp>k#Np2 z#e%nt19Jf5R^1JA{ho4 zn;`Md7--2X%>XMX0xaNK%!rz+Fve-F9-_sy7^6$7dj_i*pfucura$qZW)5jz+r`}M>))uk&yrX7sdOdoP^k64I^A+xX|GhB|%70|5WMj~UKZBM6R`$eb2weKe{r|ZU<)2mL~ zn6BLyHT@|qplfP|n5f*I)QoHDyCj>w>tl0jPJu)sY7Srr4KAu4;o6$}Rfp=ty6Rbj z4&f>+uBHv_G1$QQ^^M%dT14E8#FMdrHV@dsVAwRJ8AL49Bod`U;93l^HXi1J@$h_f zVFbfI5(4j1^TF|mD{?n;+$D5`>IN+$M&q-6qd}B_-W!hXJvb&1nd{|_OB3E3>Fhy+ z53j!vE}$h_Tn1=IgSM~d!8l8k&qiW)fpru&h6%+~5E&^3)Ae!oaynvR_nB|$nQkee zEP5~#tY-d)9x23ahh)A0Ti9F8kIhu=;$gXP=v#HZ&G5RH2M$NRj|fux{D=2H@Nhg3 z`?Onq<70yz2FMAKE~$$S>19(Aes-=+{|M0TK) z`4m*&iSt-%IMXwSd#c3(I-t6Hvzm4`ZQQAPhy#e4tzjl4EA!@aeto|4bihPvJ>Nag zhs5>W2T`mLSkRwwHpQD^9XDWa1jl%BzV2fmiUp#k#ZIQfeG$+k(q%9YaTV%vq)UPHnxVDFKQ}wTbVDxQCx}Zv4xoj zT$4M>HwZkMnSI+PwoN=AEe>Id9sTcQ8B^6^u6LSF_n|ap z>$7BMGwt+6w^)pm_Vt}`4GSqPztg-y&%;RKi2lA=RRA3tuVx@?5)BTh9Ar((ifmSM zp|wZMh!@M5oYe!XeQQm7Hi)}!ZKZ5#s-UmVSB9nMJQG!!KwU9crXn2e%!#;^DO4CF z8UW`0NLSUd){7+T$(%#gN}_;(D4mBCK4eeyEYDF(12^szk8`8Dq6GdqsY%1q03g8j zVXY>t*Voi7hEM3%uvE3YRCCil)yGP%PR+HcS-=Pb1YUu}0$MzR!qn8~oR-iHa5*6{ z#mZ^<5bnpGC#*Xqv0%+n1R4aIczDnytYwo*GfZggYvKi1!^lvRIes9-NOh*l#L=2Z za4iOCYg!a7<~Pwv-~du>2y@<{yeS5H9sPqb<4bQhKJ2LOgzCD`A8q1V3`Ya~r3VAX z<(;bS9xPW~kmJ4&KVZ5(UEhj`!8mUzgm?U~+pbfJSd7_X+OAxeO*{>IUepwe+3M)} ztb2~7JODle`Z`M6!9Xe={7p2&TRJY1nWzBpbR5Vl#;u)|8NJ4h~ ziS5dnIlasL>X=kqAkl;jL^flCu?LX!%!q7ldIU18VLS|-R!ln-HXW%c6&e%*U65%! zthm=gzW>3(LeEpvgviXighjl|kYQ%-)bs#D{cF+JA2_&^X$*x>CJdBskeD5)Zt&}z zKa?L;x( z!$|E|^)pQDxOA*%(4m?IEUc#;NC{oS`7F&)ZO34Yj^m0RVTc^Mf`=H*sXwLuh>=0f z0vZg>H4!!Rj1Hj;s%|Wz$@Yy3bNZb=Oe6aG`#v*_RkwHsTB$FvRnvXK4z@7FR?QHd z0#8(35bi+Mge!h)IAREaa7DK05=Iy!5qL#B(E2DCK`yRwHjEDaE7~`dyJcJfI2n?~IKU3{; zs_5UIs7!O+Myg({sSh-Wn*Qihoy4T37@@(gLO`=)Wd$ocSh1=^oIVXV%Ik( zUORdIR)j1&>JAkVFq#D=B19^u)?@5e`P9@?k0vn~TZS>Xd79Mc(?UdbBFxTC!_28c zL;xam2{tB&KQ69~t&995uDKJ7%&Z!m99-zr;Y~ZH!AbS+3D=l3b-383Vk2%jONF?? z`ezR4g1PRYecHkh_omD_)prj#g=Mr@RDCbTc)-3U+L{Iv)$f2nq9~rog6iA!hkFsD zLG%tdg=H*M3?i_Q#;?q*xEftTiw~x{jK(aqLqxximm$Kk7RDD)XTbcsmS7U5Xx{LnzHq zZs8975gk#b!59PM;lxFq)|A0`Fz!;UM9ya+${at)JyZ88ws`3S)0d7P9^cmOnE%ON z{~OVLgTxzb+}wj_-Fl@P_Lmh$#jUY%^U)@9Ccu@?I^Qm1y?N&Ybp~Y5M)ge*8*E^5 z0+)8AdisA9L~a$%060Rm6L zWt|=97LlHz6s}XeKo4;F4iXLGuW8&R%S$o2DA6-`lbsZsW`jM1EeusRHLZvB2UggA zXnE=Q118oz-38ejB@$1Yc~h(&GUri;I3HYx6?5HlViNufP9SRf+r@MqYokH*3_66! z(kM@tj=6|8!#a*&gaO7lP?Lzhputn|elR<#31m&rAVd&VYY&K;^9TeYGap~mrDZlT z&e9m;+A5xMJ3O(N>5@4HZa`o^W(yPx2+`M{H5brg8;L-JJMcslMNR*;h?@JauzWy7 zHfwvLnsN>rv>2m%Q}cY>iw>nH$U&c-_;MZ#;c9@s!gKIc;FBrNMD`JMQl7 zW$$$R&}VIJpVqK|Jy-6;#mUSIY~Y1>OJq&d1QKU)zHf=%j_L<8$A^(+^XLw#IyXG|RTgkvu2BXe`w z#>!4c>QCnpHHn!))!mD_1B)+uC$oDLV)p@Mj_YtlvwPh>wdlbo@3Q@j*Y<8D52mq& z)a9P!lT_7v#caQgna ztYh&CTfm+tEY4*+_Njhlrw3`yEfTjPuy=qhydkCtJbcCW66eRf1c|n0%jVXw zZS6PL24`a}0--vvhVd|)#0?S8c{bh+J!sgy6Gzkz+BmN^GoOSl zWNda4Q8PLH!Z+Gov?i7h>Fsq0j7N>L&$M-C%-*{niL44991*gJY1t|Ze$hSN$%q^UxYQ~Vc6Q1@ z3BC!me(S9_n#9bDiuvr0*3+s9Derra>^VB?oE-n zH8aasaaC-_qtUrja~-b1Orqwl%<&Lz%~@j)?Qcs}G0vWonK>SM7802TkTqL%LmB4! z*QAqKe`S|~LTFs)op3Yu?qGxis#64X0T1A|EDJfcavlSWYKApNgGdZe8oCEd$F*9i zJJ5Zy^L*$5-tdMKJApu#5O^462UD!qgw8?W!nP|gkO#I5alWq|=arudy%kCi2Dl$% z1jg8^sUMD1J_#F$nl#tGeT^8^96%z?bsfv9+Z-ocT{pRL8J+6G?2qhgF+#6Z)4zxl z6;Y9hIrTRPG-%B=YOY3lo!G=yhoWa5iNGN=2m}IwMB)GvEuMy0Q4~ip#dKSzC<2`e zZj9|0x!?Xd_1|vW?Y8&OO&+jk;JMDDG#J+Or|K?wW6Mi)D+C&}nHk8MMBqFIC{O6j z)O4sc!<_EZ+#g1HK;&YsqF7;l8d0@vVp}57y+Pm*wrl#kgv1B~tkskT2j!zao!FhpqrVW?Mek-#ual3M+%vhM) zr(QWzK7{ko)?ViY-L6kWury597mcDR=TlWAPHItp^z>wL%;(dDy6JPsv7Ft)#FYug zNG4*8rOC17u2{Rg9B?gFg4sJ>km|=fXH=c7*%zvIMo#KCY2r{*IFxO4=EcDIkcWuk zWtPA@by)8{EyCn8Uo5w=R&`QtP$XvFb9*sru$CLEp|ilGW?T1!z%x~MQDF6lm2xLgFmeRL|U4w@4xWQ4We8?0OVe5({-!N6j z8fFg&M9uqEJ@Z2DtYG##I(@L~*@fWlJXEURk1_`bv%89J5zx&k%`msHgrmajj_OeT z2Qb$}9ARyIAhUSbIkgxOch(IvAI4xj%nNMq+3*DKm^aPud8g(o>*E_>h57aAdiNqC zdO$4LHdUm=k>{Ak0OMRm=L$K$J}$(dlUj+(54)n_hxfL#L0*1?hvqXcA4rcxjGnD? z&;`r99zKS=P)q9Evmn57Gxr}eRo3KXLj8E$tw-AR;L#p>mrXdMT?#r-?oc@U$)& zJmvyTM9dBfLTFS9I6loNQ@Je&KqT8uCdTGho3W(#!o zpl2}jmp6I?iUSgxJE?z+E@f$kiTybqCK_b46?7org)kAeO>h{;%#L&+^Tm2k1eOsvF^MJ1wmF~&IEeoZmF&B0j|1rkq0-~w*Pcdh0^O^0N52@~Xc zDi+P>4qteNZ31luOaT+cGcb*6UpCQK{3Z;-gh zwgV;-C$XnErvC}I9JISw2uBWXt1RE6x>3D=DR=Ld6OP<|-Qj#x^~(`BW!czqcO$TX zbGFgg;0O}k3nW?$5jEWhWscN&P+W8_CPkzB&Z}odNBp`EuHMn>ln`4oGLi<7cil=` zD9l`O_fw7KwmPNn0jvAZ%3YU9p9+L1=EDyCOaQ=0#c17oVLe07sQtP@b)bF{5!DBe z@R;fIPACL0K8(5~60so0I*uQ&Kv~=zbCC#AnbuwL$QY&_=Xhssp&hP98uB7A7V@Im z2FaAc&Ji|KsczFq*IAC0xB(qO30=TZTw}*` z(P9Pjm^E`+#Sx4Q-4n5MGET*@nw}YEwvZ}18xBrJC&n8W@CZ6na(=Tf$c)@`(V++^ zm8M*TBIQFGj0X|6tj<3N-K)Md-x2Z5*pH16*XS1JVP(Dxd#HpQzyE>p{tIo3<+hG* z6v>MgGaOZ})D4Q-Y1ptm*Fg>}KhQUJ+78hyM;L>Rj+kaL(+p*0{%%NWA1R;RXaj&H z)5a&)Xp=RdticD7l&DK(nt?1JDtubzx@CTS=0fI4)lF%JW~RkJ%78VxfzuR0Mq9*%}`YakZlK%B%H zp1^V}(b>RV*<_nJ?h*na^f!1H9L8M;Bo5$(HM2oh9e~UXoXpJ9V2DNpbUl`oi@h^T z8r7E^!;5#iqdsH(J7^GSRG+N4+i`Pk*}*ohs%g+AgpwrgL1eBM3v=x|qPQS&qH*UZDZtwJzDb`_`U}B%o)*MpZ;4l_(l-a|!xhA5faqZC-fAtbh! zHRpCSvnJ649CcQj*skfHVyrrA!X+HDsyb7yu4ZZGt4`lErol^U9yJ?u3fs#bRDHyC zjGr_AcyHedCJWeNYBQ9NHf`fK&qES{Y)T^r22guVvRj?_5LuIsON5UClF58-z2^j8pB=omB$$ikd z)e9SL8xE%w8vV*Zli;}T4vHdd%x$@1X&0&bC^{(eZS=qID9ARi=fJfO~AD3c&35nj0_3;2(L1g62 z#UP^1CR@9nyIu5Xgm_Nqt!f&~(sX5IekC()kZr)ZKIiO@7`2*{OEFbR_}jU_4VBr%z=X zRB)WMO&q}$MWm*WR9wL-z%NuakO-WyKJMNz9zyER?1C*_iin~E&md*0Elr0a-WwU~ z5(*I!(1R4vQ>qJr(hM^@0yNYj4>Mj`zg#HPhpDM!Q zX6g_7IAx4R-s5*3Ne zb@hQzok--I(iOYtDonZRG}dFgXpB$azI~(9){%WG=Dhq)$#Ni6PgPG9(`T$;qOi>6q`j7R_KGoMp+ao}-%9j>DgvuaM?oHtuN zK<)~==BCaC4~H@}EXzFeBA!0zz1NbW&JP8IngnK}s;I9C7R4l~O(h|0As{FpJv6*M zA$A8=?8UG*boxw5!Lr#6kqh*LYNTReco9k{>drTC0c8l0*bsqRvZh{Y9- ze83O*0e44s?Tu=#LZHp*>Ujhf(aB&Yfl`!aXg{LqnFE+40=LyXRP&IX44lUU2xP>l zcgODT&D}&-bg47X?xy}*Vyi=?!992=j~<%c!AYd*sA&)wVmKPad0ZLOSgXm*F$|&& zcoDmMOy0770fFw6OlWJ$JEKAL%zqUS`1>>ZfTz`V*hbYQwN51R%v zQLmZ}GO#k3#*-en^-1%Guf6^_GHDuy^}v+}mUkaxWcQA|5I49L_;jnia{7ED_wS_l zLf=%Aku2gRZIu>qf1#D!Ev z?S9Ri_I27B99G@8h`<`2iVd`AYg#OtYhU+(c1~M(wQW>2(RQ2zc6Yf>GB^C*SZ z*pkGexprS*v8KhXs^0(&dMCUH<%HeqhK1M|cHhjYztu{MT668&!U0^U=@0Y(Q$)pd zHL9jjGp$+UpXxJtOPF z2mvk{g^W+v3dE|ajw}&Ty>OWbre-CzqRt6I+pj$9!hn>*^uGi;Sm#z#0&Wc@BK^qY z90ejUE-xylNCyex9B}ff?^OTtKw9s8_8Mc7i+4Qnj<+hOZan?r(H$Uc8MxA;k9n%P z6=ALiZJS#1>6&P4ljK}31tMbQrkZC=^cRPDY~llAx}KIxGfZe}x;Lu#4s84X>wPfu zRFilvj^h*_MPLhELSWX^B-T`S7udqErhkN6V{@=bA*R#mXq?ucm6;JMv4aJqSWKkq z6L=~1^;o9K&lSR?t_8StRD?}fU^j!VLXT^dK}z+=tv>-rrvB2n>Z4q zLCEpuV!OHF9qgS+B70_aF?-eg3e0B)W;>YDp;@82#l1V32j??eH0Ju@P~@EIq~g1| z79XHSvl9U)x?*5)LE@Ap;?dFwD%$-puEEU0@9jbZ!W; zSWS6DbXE~-3y@9jAv8#IX}`+Xc0LzsyDEydW5@C8WaN;G`7tg zkO(A^<{Fq8Si-U`j8!k-5hS|8TpJuh;+@eUr0PJ(sOw)t`A~CJ5UK-H1o<$As@sap zwag48*3EShi3WQPSg)DlI&*Ea87IPAH*gM9teb0#6%;vWPy{ud3W-jH0dB9kKhprA zBia%MgZ4NYJOhzgv4%Iq2G$VRbAwIXga?pl5ps2!xwEP|F^w`RXzjG86qQcKIyNX~ zJ~CENo^G$Y)0#aC_U|1Z`n zNR-|gKhF8IUQ@hXcPlZhF;0do0kE$6IS5)qyYn40_k?dD>A2sXnC{=d#(MCbh$xxJ zDE-V>{Aa~rM1*-4RJKxUvJ#0TzR*n{1z%%H4Si+t;TqYkV^oIR4j7l*A+La6&v z9UA`~$MrjY&m)7uHk$yF@QS1cc=culxw%k!48$FFgZJuUfP!6xzI=`00bj& zL-18-iZEs&s**unF%=1fu9$_1S_R?9_GV%vqZw{=VG0)#@HwfdUivAy@Ma>#T zBxtoh^|b=Ghy6Dg*Ar(_v8LG_9dTMp2B^#p;f$&Yh~=p!Z@D^PY3;pq6KJM=EEzOg zj9Fr-h_(da#wqvTQH;h6kLS zrgaP6PTRf`E9Ec(|Fw}J*0RI(l^-is9*46QAnbu2w}tZyS`VW5PeD6&*f=|g$$K@Y zd4uwfUMEjk9VLWkN}B;e*@Ra<`$1D3zF6HfHG6(t7;JHy@f=G)kAdnv8PZG6xE^#O0dt*jA0qwyH2ucA;bFOD$tn?d5w{jVS4 z&~vQxm_n663!5Bl1SaBHP;2Ob*oXVRZxM7{D6Ey0xe?dAy%VAtaT!?jd z_Wp?_=41h7&-MCioV4So1`*1iC?wpJ$G9v$=%x{6C0U*$4>t8=VoebBE*l|o=A?-0 z20>kK0-h{4691MCq7@u|F6}s5zkG=pm0(o8qZh=;T7d%LV+Jce_Pm0%cZ)5RTe8Aq z9DzG9@l;aNxG$TCV>d{#vGq6N4x>_|0+(OLc65zV@olh?5f+@LEky-rgiFMO$r`g! zS_fixbP9v4Qq$YZm7E47=GUjs`6HIU#0!D@WI}l>R6b~!7$6CyV=Lod7#+wgWO@mC z)3JSs?3@+wDyIAH&O^DwJAkCSzZ>_%3=7OdRrYrX*x@KD)Z7uEWpe<v&I@3WOs`iRN@1?Z3e3FG@*n; zug?)gh#Ull5X$%LX^r+8c|=G)g?`)HCjJ@}K4{n@0R`QdD(9<5?}uB~Z{ls03wSys zQ81O3&V;m@?CKPOG^|kh-`nCw`BD)e2ufxhHx%>*c+~fy)n~jH($p>#f~x64%a-0#D))xoeI|tVuoyYg*%%#4 z2ao-e@+ity_j8*~2mA<9SBS0SPYIk-vEz$?_VQp_D?XP_KCN6K6G8(i8^;(@k1ED2 zxM;TtJ9{N1F1TuB5PwviPUvReXNwcK%Q%^FPd|Mj8?wa4QLZVe43wdx8jtjw#6|`Q z^F3%$Nn1gOL=D~i{7$4*!6tL@aytdAp_W#fzLglo!Z!+jj~sJIVr?PVB-;c3;PyMUB7LkyCn;t`%}8Ac;QJ}_w$m5cK<(ANr=OKQaBJo^I{-ehLfjNk^j)fMWRA-+?;hVWM1 zb{#bKy3B^#685PE=Z4lS?J%L*9{F`YXrV09xGHC4eUpY<_|U}!cG4< zpHH+oKhNrx)2o^Pe7kCWxCrpDQ9_7_fR8!U{eb*pLFaOZ2&K(9+4O*~<7+AkRHBni zPOJj9TST}Z?Xq_dEz|#>bM8A zq{r272475w)m3xza^6MAw!F2S4$Vq*)T!?me?pRNtgBZHkd|~>_-egsKMRq#YlW*9 z_!+)$VN{ww(_~wWbbsTC7KDOr#K-YdUKP0QbD-{pY>ds{VF0(k!@I3SNBOV{vq2Zk zOw{Gu8#Gj_MLIId)5@G|ZB&7B;L%CQA5UVhn-Y`lJ5G;HqG2NJI`>(<)#~64xXH?e z_S3%Q1IUWPgCmBFE_G(q(QonSzrUK9h>c~H!c-eh3leW1=soe{``%dE?BxBm=&szT zYiKrsHA~NAZ3(+2HUY=G>f)V$g&kq{+vP*Pku)7#4T>%)U+{k#TbZjoD=4TQ2xr>6 z7^-rr;8_dmd>vK2W&)maspW$_0xl_ipxGDSJwj_IImeJc_CFKTrr68g{q>sho@?%x zX`n$xY8g(#|BC4V3;#~!TixZ+p>mt9cHM_vRc`?N$3m7RiiI_O!qt2EnVYS5hR5IGe1Bl<|p#AB^29ISqD zO;_?ABXmR&5(HWqr77Bc$j8$1RTGLSZO>_4;#0zc#S~O_uIeKbi$2z0>TI@iwKx3J z#?}^k)}fuXgSxKX`#yGki64(71W{D;A8?EEibG5j+Oqwd1_=5W@l$T(m>H&&mOh2+ zRaQiwbUBGQRh4>Lp`;HqAAj;MdBFEJ7$;o-|AX`V9Met0`Mhg*Yk!oh5_D_NAoUJa zRaxxa3Pv5qL~r>8$o%JXT5wz0zLT4?0ChfUdf zbR9V$Tm6?1yiMlNWFJ%79a)tuolrWbK<`}>6f+y(GKr`_4GkZIlhmHV;oH~*!wxnc z675$8hEw$#I+?SX#*s?BlKpS{I4mHn zkuBZBfRyoVmL_($iR~~P(#~HuWr05vikCxHg-QJ-8#eU>47&TYd#=Sru%8f{8OXBS zCT!*}6V&L~A(Y9z@+dyp$BKzlrIZ6o2dYYiCG$j>zvyH|D5gkblMy=5+A)e)dADXX z^Vu7G>{`4pynT%nCGxcny0S}@6S{#+4G3PXs1@MBfE`vTRjtF4uTrwaX~+|cC=ILWspNBV)HdPqOTwVKq!pE1@7S*_t80P z5uZZu*Ai(osL^VYaBYq-V&$25L|MJFIQCGsBn-x8w*W3|&tGda8`I{@2>5j_T0(n{ zy8hO(76?*2>Az37Ck0RSV z*7FVebCc1j(aKS{g-L{ENfGavY2MGzUgydxRA$A{Oh%Kq-<4^iocdCrM%b!^O~obm zw?}d(q3ml~Lg4x56Ofnmvtc=BT7q8?q?53-)^%*s4nDEDE!!YqeT3A)MSEN4&ApJsOdRE@2k71-WpV ze*UHzTz<5t=B~Lg)vo%}CA{zaO~!jUc9BFDoUAkYeK<*cZb;1hjh38=|Cvewy*Mn< zGrjrsCIDV6>@n(R&c1mHkyyE(F60`0GR!jxP0N{kwwqYi^Sj@RF^k9x;g-u=#ofHC zkK}s(&eQ0I_l_>3-BqXE6%V;ahYRsz&J@k)Y-tsVH6KFM)Rz)l2jci*_S}?nsztLF z9dUv+$F`kS!DRWy2{O@1QYF3zWo-=2YCL4!D~%U~2=WI|$32S)$M6mdbnkR;ugN|q zzWS!%o_;D7Y@3Ks_p`aWuDfMn04GD&O+AYN3`Rm~K3u2Ok>oR-X|2Dp^Z+TZO4)Ol z^TZreG_UJLaj*1c?5}#!CO)HNWB>${MdayH1K^)MY)m`VuX6kDcCP?MA+R*Bwposg z87zha5!Wli>nQ6}@)Ct+i|xLLv|MgT|C9(%dI|9Ge2m5`h?c zTsbn!H~W?{AH-*#v+Xn>0~Sy1$>s)gK#Y((39F9$JYH`=cCL+W#_q5#PBob*ScKFp z^fC*qd+uXw+3P0)@jCfE=1JMcctI5CC6MOTy%um<+e!^b3Y0!bh{;Y>r=Hnp`KNZ% zD6MkXD~w*oXH|Z&Ead*Fi>bb=GD4!vGQb)Y%R-dVI*R8r_CXX*iSVL|F>JB3{v!>; zyYW-3-wM{6jO6OWb8=$5Z#Ic>JUPM{7gcTcI@ESJ#I&7T@!Wg2A>=bXhj6Ta|{6D znJPV6#o-eSBRIDi$KKhOsSMT_R?r>IKFDu;8_H=53UN)dUs0ulYUc+%ne( zT8v>1=h9u`gzf9bq^%lD!N&!{%v86$P0h;+lg`Pt+*>4L*uFu0vRZ+dk9|27vay%u z!3XgNJG&n@cNzhIx!=fLibvHf@m17=%72yA2&Sx6Rq1(#M?2_va+D8dGBfx4mbSXU zOfE4#(vonndU$_fUN0oCxV-*rW%aYF&gn~~A_Kchb;R5TG)`J-eQqy~-Kg?o>%!c> zbT>rE+ZIodz7=Yr)^-a01P+1b!Vi9-w`U8!85x;VzR+8PTx~F3+YUbo0n>w{m9e#z zXp6|=N^kg3V6(%N?;$ZK(`Eu4tX$^TJ-X!QfWluj^pYHegOH5_AC8(4>fmt()Dpk;R&{?^m!)EIwqFnmGuyf|`yjhSYN<52%_<;t+o zEYW9o&is+L)+EOt)x*B1Q}fwN=Iaw{p*<^C2-3nc^VwB%_ud+l@Dn$-HDgc9No?+3 z`a2QhM?Nz2UQ{M*OIi_ z)Zxm-3N%Mn=SCmK#@IZ%Vs+6?M9tAIyCs#(gk;!hSXKmY+sgF1#18%e&60I zsU5?(NgT27WpL@8pK$hNSYkot4gw??s%TL|&crIaax?_N zI929RQb!nPznS@)kbqk+&qo19uUBB7cgQEO(pO2_k^YT*b%kRyG6^W$(iIG7I|SkG zgI>sPT5`se$?GZ5I81opiagOhv z>ymCfpG%alOYm%!-0H)#3{*JE9*9KP4L7tKn!GI*plZU*ZSXOfV<>JjzXZ0)7j`?f z1wv!8DkCYexuF&{Phx_rMATn=HP-cGaPEy%G=~4znK*hV(s*{ao288IbA$4=Ey7ew z`UfPwr7v%Nzn8k>D3VX$M<&?MX&olZzQY1(zVabYgX85aFb6d=ONP+~HDkfoT{)Ky zmb*1`LYMN9B*CIW#yN%)a$r1Qw{!OSZz3T2eTY;9D}+Ww|5Exi7g#ZCfl!K+y{uq* zipgh4fg1PSVSkF-JT1%IoIiN|cJ|w_iR5}7T$QKj?pO#Q6)}-x7B6(X6c6{6uVLZz zZIg>Ry7+naUn?VJnndP*IiB6Mk*<;a`={HPi({&90ehrTjJ$r-C-ix?=w)~x|7ab3 zCsCMg-kq3X(;`!Fi#~7()f^#M;?beoB3zBof}-b1o{~wI8^*;W=~+HHpN=hA((<;4 z=@T1s$Cw`Rx}^E(@zR*ykidg{9?8^ zXF^#%5N5d)Zr(qA`%73|X1Ix{`^9s#h!0uPXz*q)reGBD(J>?=N!>) zLAc7kQmHU@D*rvb4|=NOLmBpw zzIVC&p48Mvk-i0jA+R|^(OhV22kV+kj8QXHj`3*)bD*@5LlAhi!A=zEDD_f}-rFtQ zuv!r(8@nI3PG(UpR_AY88j8a9K422tYi`ocLXPn!)Kqz@gsVkT9Vig(c?RBC6EXR) z5gGHVP8l+&SydlKva+s-BsAHpi#;aof3;G04CmbCrii@{^8i>b&-ln@aYMr@5i9aL zoL`rR1Q?0wU1;Ylip%&{sF!dn+&tJo1DXtV-LOOqR`^N4M4zL*b29kIXILVMDXP># z3>&PM0c%cU*-QURd0(g(TvNtJwii9USAn8v+d@2<;RH(Q+d3wAp!y_ak`|Z4|7yvx z!h4wR9i$POcyWv8UM}Li45&tyT}6lJ$-C%YYSNpDEXy=C1~WMd_blf->=Z<}Syt5A zSVuk}@yITj<&`Eres$q*9j*_#eXxOHL7O_^M+-IG;!MgZ>UNEQdj&&(*9~SjgBZ1x z|Eg6!72W?Vmk(f&^jK!n*R5!I?x^r}!H64{K*r2}mODmlfLW>7^oQ0ky>m-9||F3ZO zm~Husj{>Yv(M&)UJs=JvzBm)xb%iuc^28YWFV@Xft-szpkWnd?h!=hn4j)<{SSt&_ zCGf9I&Ux+u>}n_@vh=S=9CoUi>q;&~hEw@#sXlCL;6+qpEbJMXNC60a6Q3z`*3ob= zRC6I+*vGzwhQsJ*rMKJ0%Lb($M8BaU2!m+5~x3f2@}Ol4;%IrtC*$%W)Gs ze5wi37f);)%M8>J-NQi#0YcRnwB-Kz1>}dz+^&{wEx_kJ5*a5HN1gpRSd?_DR3e?5 zt$6Fg*z$HQ4jv73(MCP$E{SDBb*KXn2%O^>G<&2OevaUOk?*w-q9_=R5RO(E>k&|p z&5q!}!VA<1Tki7U_kV`6ECGGnI^tU5awS4|!xntp-hGD5b{2c!bu#Qk;e&Q$ioApo;7*oQ#CDYOgWhFw5Sr0|!zfRokc;XYIM zv&~+3yP8X9xbvqh{rtnAH?^JjG~Cj-IfNO}?~0!tTU1?gSN&34fvcLFT*W1zJyqf~ zuZn0$Orbb#1R{fmi0o6dzqOw;>=B_H3G90uW(~B_X4SB14n-Z4k%{sM&# zWDOlMO!QbZq*?+76kz5)_0_jY09ha%al<$W<~u5%TMplV#tX)mi32N`c=N-QE)?!FfemOsyKnsBPwQ6g=@2YLRqYI zm!5aibnL7PWOox0fI^i$8-cauJW~f=9tE(D zAb-Sc;W96T)rMAAP^dW#&wjkmNR_e_A(30|SpD_F!9xG6CFi?1hs4>%(L>3<^|y^l z{qTv;la3|@jXEL&18wK&9s=*0-xuMLlRJhmxtNlO-&LC2Gm-{zv%4>6`t#DS42O?Q zw>{c?>^}BZ*pB2dC14Dd2w!}g@Ry~}QDitDu*S_RTKxBiyYJ4!EZ~Fizl3}7L(X8o z%6OmoG8O46aaI+WV$l10qrE$Wp970n%K%)`WcTwuLo|Z{y?95+b>33Z(BuYx-OF>C zy1J@<4NEj`D*<&*ow{|mb&NifpQ$NcPR|UUX}P=0Z)XGX1-WGXPGRdsvSvD)L@Ym^ zmV%~uiMhJnukeC?`n}W4gWY^@hvzsIdhc!NJqCp;nu?Pv=Tzy)%-!9<3E^nkHPvQv z@&|s~!~KxoP^;VUN}!smC8PRmtOpu zt^}ulWWlfN`(_0TZG95{mag^T%!`H>T;wb7w)>_;=pd+Z6DW^CYyOPpjf)(^Prnq8 z@>rVI4pTwi5d0Y9kO~GCbcXk8cw}vPNU#jURJRt3#Qs(8qjZB&B1~b>!#z_> z8|IJOoIXa92gfKLfm+K29(|u>0E5cmr&HKe#wT0043mg`Mp)mq;0F5X7pgDgJfb;k zzF*-_=RR)77@PX#b?-mx7Y%PyX7VO+SN%7~i+4;-_GwTf123u@C86WF)aF8r6t(N& zb`K85Y*Er+ZJ-_SwwLxb%U97cBZ-sbZW@M_^HWWS)RL=xz*n|u)c0AWsBT4GSoQps zQ6*XtwGpaTMucMYbnp9FUs5*o&HMBL!yxCr- zhO=wjbn3j)ek8ZO$%=_9m~OM;wuFy5sMEK0*s;J7hvV$?IaL9dSL3#7l!KTOg6oH( z!9XnVpxZA|cwmL-R@+0f#fN@DUMk_Nl9a&LWW3y*WqT2jd^)}*kPwIXyXxkBS;jL* zw;`^VrxBkrnDuIu!S5Fr9*}A5`3~YJ^HbjC5spQ@)hm&;>M%nVcer6k5nw229|T3p z0LK!uSm3dW5(M1JN>GcBw6CaT7RzTAhGYY+_Pl8O3c})cHZl$3_GNR3PL=+O=ba;7 z)DO`?HA-|ssZzG4o$Vet4CyfVh7)9`CYz17%G-REUu1_Je_P$Yu!8N>;uNFw(h)O! zxzI=wFZJ@SU z&EE2!ak!{#34<=GGHU^*%(*GJs?#0Q_bq1{0KmRIn{1bJM+Fq*PX^00&{*0dKKa&x z3cGOFXkb)mSUCX1PC%;({EzymmKX`ANN7jm>nWxZ!*VLWpk+8W0gtV(NRrB9W!_g; zQkPB*Z$wO?0Y4RXaifJQ5H=VQ*GS;O>v7kG4BMHJbW6C`hM>xw8n?+^AZ`#AcUx6z z2ko=mjJ+IhY`#E1Ci!l#xa{Lt=vEVG!Wr0Mbr_JoQzApa3 zRwK^4pw33(<0*UiVddP8f?k_96@fX)XlP(a_r*cK=#3JAl2#~-#|mBII8SRlv*q_F z@S-%{?@`0?0tio2k2lv9rtK(B97n>JF%r=PBD#-EB91W~e1*Jmgg@`RaARX{JuXkk zpepZmvqm5Z*mQS~_x@-zm4+i&bWZEg(;o5IoGybU$6c(nMpU{(Jbull7&+sGb&+jf zDwAa4w7daJz3c5{nULPEV@@A&zr^pnn^g{?$)yuCS92mL$)QC)v63aHsY1D?L zMTb-65(oSn^lW|})H(ja`zzc}wYib;+H`2nm0+brSt$`{1Hn)I{ko&#h0oR|@4LDJ z*z;FBKtZ3{X(0{K2p#TD&@ZQ%m8ai;(~coWm}9X6d4=V8A|W4A{Rt%BSUj@Y=K}L zcuu0d1n}N^LdmJ@&wjHk8~LESPJwHOr_%^0b+@QC>~IctGA+_1d&E8I*R;446o(N`o@k~CER%2+c6!%DrQtgHdgA7L|e154Y59fcI7FA4s zbS0g;&~^6j*8g2ockB?cv@+vr=MG^iu}tLn&$np4BDv(}plGWjd!){q^Vny+(`rS< zbNqN#f)Py$3icIv>>Iz~U^AgGpFM1>!i&R4w0BH-_7u?Vlgv)2@)3uJbZVisGk|a=^9o$}%M&VU(tNd@VxWr!G%pi`YTql9t=MAu0YONH1NTe-f>W zewzCUE%|*W+_SxYPJA)1PtJGmTF7#*XY$17w#IwqXDmk)uYJq)rk41Xd?%~uRYgw- z3hJ)_1}ITMg4f_@__oUQW_nqT7vq2<184|Gt>SW%78Y(T{GcL+NsZs}2GGjt%IH6g zU28BlAK$0z|0{<0$o*;B=J_zTHq^iSQA`XTLbncIVyebjN|V^E>I6l7k8eSMtk_@91S-rx(9tZZ25{V!ErnM40nkNw|p{F(}BjP9?;Ao#(9N zPv2JzYW&At2{VCOV(QA8bciq$#F(m&BpHmyUq6DU z_$h#t0s8+vF%Y|D!UkVPUMty;NYOHO#QL6*1eZ>Fnc;t%*piXEbz$pF1)2ajJy{Y4 zTR71;2*i(K_P#{S2V8oON`#Z1Ms!DBzu79^9QQ_JfKuOKVMNdch4*1PFFV=!Q)NDI z@&Vm*JRK|{(5!L8DeB)UzmU^ubR-et0q5sO{E^=c$_aJ}#z&z7Nf(}(WoPaR43JpY zrOxw*2m5ZwD4@vjN@ z&lrt0*qn)-EHbXjNS6qW*18Ds)><30*_@Q@D&}*+0SOPEjrg`%pq_2&ex7+hkEupLl8?HuhX+aOzmj$o$P@D`kpJ zrO!=bE~R9C3OD7Ky$i{K?GijDTs>lOel95s1WiJr|KRY}&!7Rqse7VndKgW07B-&g zu@>hZ@i8O(dmU<9*w|Qu)ku-pFy@Du)rVBD`EZCl$>YAZiyf^eZ3~LJ)Pb6tWt<#P zyEEt7!mJkG2l*7ostKuNMd=OAgtwGsq709C;S((t@iobB6RZ;*8D})T5Yd0{b-Cpg zaBmwgDS&+y{jM@OUm)vuvMa{zV26#B8*=2}{=4XQImJKjtylt8CSxvn>LFKT+?Ta% z2q`G&?^{yZ8zb8iE88PO@FWgMjoh)KVZugrb%m^0?IT|`rjR&>MS`lKYOG){lQ4nw$@c4Ls<7;)Pz;^ z>x)nQ)Z??q?U>Dz{P&gINCEX%r{&WKdiPkHHOa3C<-y$?w=(6xsmF8lrzo*Q;5*RD zq01(pUpJyW8kIHl?r|4eoGg+J=(J82R8wYOG)ZavMp&b!X>v?L0;?-$H}^ih3AFkP zyLEouHv7AjZ{B-%nQv(ahD8=gp?XxqT8FjLCpxL`7EM=Xu#&&Ns*mkE;Q|&8bZn9E zKGU&+_`J0g`1SW=ygEhCJ`4#yMC=g&|IOsA20$uzQom%K(vacm2*$4U--@?5sBe0D zRAEx{q?tF7ilnu?ut8#<=mtADHA-A4^e`+3nrf>VBiAQGfPGt%|PdoIDq+qP?$=l+#qp_QQ$V|ZT zGNfJzs7}FYv@0&-YZ4v()&wFiY&$&a(1q6vc8RgxR-@MYUnypxPn2uqJMf%U3dd5j zFK%iR3e^Nb6?sQZWlH#j64#KR=fGiDGyu_DUYSMa{1QUVld7h>gIi*Ep9J8_&{(Mf~-6 zqBmhy$-`1%nTW9z}^p)9kCPOpZfb4tU(n;z8Q2^or`a zH8{0y>>_88<&IVG6q)}uqU=yZH8j%VDcT@QyPD8Y8uR3uCR_Qs=DUArM#8t#?DETa zkv)!P!PQ6L@wc$yKPdgG`~YizwD)!Y{-ptb6jj7qQUfIb(n2@R72;|VGUdu1$tCI~ zq2#U0W;>KEp83l|N{&%kzP-LT_;B*7`_XK1hDha2F2fsn9em`cSq(u>`1Ze--iIvG z%Kr+qNgizuR{Wwj$t2OU2XJK-Me&J9> z_lVjDX(=><swEw|8kZl+TNPD@s9DccjzGuKQl-uicFN<()} z2aO;7>1JIoW+QXrsP3rfsRxYGfOeFO|3gY{M^NTQ9J1CHn?tjqi2Wx8JIQi0S^K}l zE=kCR+;#tPpf+iAXQ=gV=O2k<^+;YxcW*2Qe_c*F$=&Lmcp2k4-{Ur`XWY2GsOjG( z?VNcg43Q`U0kadX{@Q&wT6oj#_c#6O{^PO2aK2#Od$G^L1$5pQoy7ZV$HKSxbH%Vz z&RttHZ)_}X8OK>#9aIJWU@Vm4k41jy!&nbu95WARhF6|F+Z^4aJA&7jL9v=o0Z1SxhFB1Ep|=V4g<>@r2Z#DvE$ zZgFzojH9srQor5(Tw%Xm8Nlyvo7kvUG>bBlF?g(aCB-qv)lSzvJ+WbFZLB2}bAW-;1x8Q6yc6yyTG!H~f# zO!=itR%dA|>a?!_O0oic`<_#p1$t_fhG|ty`%-Jt+A4`uX>7 z?`=fc%^2r|)4QbG@?l*yXJ1T8=HaKAz`yq?f0%k7PQP3cZ*Sz!+?D^?zAYUy4>S#& z7vI%%lP#efTavG#gT*Zk8w3VTp^x(Lh*qr0Tg{UDg3g&yQ0k6*q}nat8!d+p=otRQ zX*{Hw?9R6LU7GnR-iIlX^D%TpvKsYj@i)W)l-$S~7HkwH z8&%vLU3l&pCw$uH@NBj7-^WlKnysD4-q9U#g&(bx!9BZ@q1pu^!m;kFf>c8;a_zgG z>t?+kugV*5`2`1*ul`7FuhL;|fB(gX%F&U_^{k_15Dap$(wZCg|KR;9+lDx|^sOGPPjzZP@ zO8{+g1+Cmk01qG;9+NdI<;T7^6Dxa34xJL75{E@TBu5sOXRF%^n5SgdKZ-4N5{i(9 z)u$Xy_tyGDE#4*^Bd+JL;WM{>I_|PIvsjTlFGJ*4|$ZVu^tW%xbPNhM!bN%gas~!Hz7ajHv`BduzuZaLHdmAr%iRa^q zpQuZPdh9p?!E@hZAL}qYwH@c@Iq%+hj!Ym}AHDp#OgK!v9-RB;_$Xh&UY^BOeFEiW z(z9YTQm0|hX`<=qw)Dn!#@CF4j#(+UuCo|lOWCM&4*&Up^-=Qn?AyspV#lIewqzd8 zs^*E=$Mfil?i_)iY{VL&EXZz`T;~fB$AkhK2B5Esakxp*~oR2$uc(jh;7iEZsCqZRs99ck7XCUzaNZ0wYPIoCPN-NeZDp_HvEJ)1INXM|s{1Km}( zZg&c61Zh*4(gua9zxU_u?iv4~p@hN1oHq4w+)Sjo`Qyuvdw4_Ckf@bp)R-gp3^Hof>!w;+J=W`h5rJxo<$y0{K8@Z zoUJiUols!x;p^6)H=l7|0;lU&^6J+HZEr)cp1>33law^>k`mV_TRL>hyfkR%=)AaG zRXFK(Y7u>JL|2E1V(%WM9Bd8;&=jw!Tt@hCERooRl0n7kSp6~AR`^Se@c=`Rotey$AJ_Umzbf<5k`o1iFlb#pVb+TIZf zo=V5Xs!*Ri-O5JB>`ym$H9EiXEv~(g?u}P{_a3MyTfG}6Rp3gB zy`;q4AM3Ep4o&-%@AFtq_3|aPOBuwaQG>$F;#5d0g?z&Y(HCJjHg0MT5P9XU@Sx<65lcVXZ-; zXKS15?Tr+j8%sIhHKbwJZGGp9z!5~dl|XW|-}ikl#OE@ROz&MxFd8m*_qjMO9H%a9 zWA1jpk??_#T2tndL4;-DUTfD<%;U_JGhsQH5$SO+f=xLskS-r-@YP-}wzQUKJrP+* zS(2OEL*fbt?b9Hdm(yES3U&MPry|Fdym8Gr zisyR9yj{Y!qr!w2Ub8Cm=&1~B`@L0WUb=dFcAsGU+|!1qI0d0oE;b9<&Zv*(xmLD} zW9M^9nO*xhY@*qw1}An_iAhEMhUD0D>2?ON2EQKcZ1G6W_$c#r?t;Uj2J3aao8_85lPb-gR2OAcL0znXYTb3Ot8q-D)fu1c?d>i%iTPFXt zgIN#j^L^mtN`VgSOUjf>P{_29zwhzQaihMy-S|_SffQILHtwy}MPxyklln!zk>^*W zE6#sUT`$iaTjs;mmpb_YiYjxRk#bf2Q{p39Q`uC;)fKb{Bf=~FAP=p(aI_bj>N9n!2`5agr#b)@~r+h9E`_U+(`Vd z^u^!53DM!N0S+6ls*dvt&S=}(cquDt!zLx+`|Pmd!6GW|dH-Y%&PvC7MQ-19sw*m(LCgzNK88}i^akF4#Z#m@pUvrEbIzD6 z35ld8Lh7Oe)wWZ|!rF2~0ePtjK|uGB1FY|D9}Ww3okLQ&@b=J{E4_XqHx*cbPzROC zMrJczJ-47ZJxYPbRx?K}i{hhGaC%gaDvCWAE1ypNJO$d-!(N&SGrS4yHEi1T=aIRJ zPh;?uqTf9o2CLVfp7ZH^Ig92&m!jZYLPf#|M|J}*>tTqJzz6QFIR7fhi>f<|RyPJD zJYt|9v&ZI|+fb-Xs*s4FX6%cxL~ihKR9DJb#fdITUO%*eqfV%vks<)_B+vn{8@0s} z^rfA%3I`cclW_dky+miqQU1&%9CZ!yMLd9QYj8L1e*kwuh`#T0P~Q1#PTQ4vOlzWM zigmo@9B6S6QxpP2lz<-8tPNU$#5j9qxaSQTlxE|a=tLNzYoJ3ByQ&L;9#o8nYjhrp zhjQi`d&Py~FFL>I{yw@h@9XeheS8!8$EHp#lU0kBxh4J2uQhxw=r;NdU(D&`d4-b z=saEXepcED4D^pJU=719k%qb#L4(c|!x6(msGMH*o~IV89vIFp4DbjFG0uDeo+a|F zRR8og^O4>w@+8WQzLfjiW5@DhdB>&x1=4#TpfE#l0h~wvMPH97pcHMlCd+I?O?!|X zj0H6aP^IW$C|zw%L}8#J>O&Z$L1thEpGa@F<@e_S{G6rrS&d*Z;fznNe|;nGN91dm zjJy~F9`=aKGd*~qiK()}EV<67wSydI80eW`))~*TFzcw^!XU)tBki5} z;Gf5-|JZA$j_#>)cf9o8=8vzpzlxsc$<@T!zKjfP!LVrpcVUX5kq6LXA;eVmc#t`3 zhAIn5I?*)!vs{ymgUhU)9u=E%6X>Au+M-Ny~@>*2TXjla`NM4EGpW|A8@ znRcs)QHRDH{&+8ba^I2p7l|3Q_xGQk`t!WhksI z%X-F!!~>Y(Ik?4K8%1GJ^%xz}pQ&BtGs~xMOi1;s98iHc2*88 z;ssfnA#AB0IOQhCogg6*xJ%Bj;Fg;1!E7MWnL?M4C=F(-LMXRp4;QlOQqO#-+2Rd8 zsf%x%k4tY{8m`A8o_M2zI+<%{GB?f++^7*!xaGY!zWx`VkNJ8}YG%+CrTRTg%baiX zv)|~o`(qD1iUlmFzDxBnsS7pC1hx_A8k8q&t3FuMNvQ5Y&8h`&>j@j1HP_V?!m_kv zrzR0KK{3zw;$QO7`E~PR!`}YklYnoG=-dfPGbjx{I3Up-VU`ZO9Dl)YQjxbp<+v(qMqwuz;)y z1fmZYc8fcO@X)vUo_SWzZ2t5=*^6(e+5dX(Ko@-SGu9BRJhSns`7m>ZbSf$K?<@`* z$}5L0+9LN`$=Q(jpm_kMJq_po>mSMSl+yMLI? zk8f~JA?|!Ov58Jk&Dol>NEE4>PJ->hgk3~UV&;IuSVly|B3kqySM%wr2f3jm5D1iD zORrN?N&WjGvR%MqcO(`(XO7ZIM7hSyU z;F#AkSU~Qqk73zhyr+Z2!%n_n?<*nknZPLIh1(%|K(5Tc>J%)H8yKYc-G_IGz;p=Q z784jc&PJ;zMgpf=ecZ98Upb1Jlwyq{<-`vypX#m}@tkZ*UX>}PWk1IVAmgOGZ$%DE zw|MxtTTX4(8UCIteIxtVCw1pB=D_}lC65(m~ z=EpZGKYr7D)O&;XC4LM4!cQjW`sM@Nhyg|j6r!dJ7!BnlcTG$64(|aznyGi&`H#Ju z;Pt=pcRs0nd^W3cr*ENe+@bLRfykaY(3d!b9=Mz&7GTt+=-wdF8%4y~2w78_nxhDu zsEL}V!FtYjL`~qXQHSF3xD(}7xAl$AkI(zm)`xy?@4SzmPj=(8dY?IpcVgkX66Vz3 zJ!Es@@p-tn)5L*De3HK(U;qF9IR6)Ux53Z*qgs9NkGj9^`grf-weq8ru(#vQYi`CA zUBFIez5sy*jOKJwb<`9yUaqli3n%ev1Wwi@!s((=`)mZZGu19zvb@di?)xk6$2Yux zeSYWHhj^cf_xkk7<-CuJ_X_Wg?!BucE-1vr0bBNUHqZl&Tbxkjyx0Et2EG5$r6>JW zKI+tasDAx_)OY=OVb42d4kgU#AQFkdTFnKVMWcR0|4AuS4{^awW}X}qnHE$xNWCb} zps6`*QU77g7I-2K;6rlFKjiac?)&t9hM)RR`Qg`o(@h-eUA!$q^?6T`_YJy(!%okk z=h=L(_s7@o{coW3 zi*qmsCPH`jB zY@bG zd{UWn$U;|rg7@RHt@Wb6nqGc{=o!{;z|5VRg{q|~*3q4(rpQsu;JAaBV%9-m@62%; zEI`+EC}s-;HdbOW(W*>Xs975gVs8t9TaXo*EtCB0KB@co`dq9}E*&ZNJYO`oyyNwO z7FIX%wF=yX7Lm<(h!-MIERg66bZ20gDaS*jF6kMJRVTY)9 znx$piCYF{X0^Vjl&%E2hnS4xDnmlp+g@~6~F<-;F1`FJoIy7FHUsqE1MBwcipJ%=h z1mdrDOlRX|H_Qy$#KsB-4yC|NA`hw#2j2NJ`MI^PI)tshK?J7KoelSO*F_@%-bqA? zn(qOc4NMF0%3=(QmUJbX_NcWl%!8z;q}Zg$D)B+hC=#u8sxSc{Q&Pk}2XI#s8+Anv z{%OhSUMuoy!lK@N6ylZMdC<0mHgYkhLr14PYXqbphMF!VWREw7sgZtf~$&^@7ofu#RferW# zd_8lXS==c^M;wV#l)pLI)oX4R2`YwJ6t&%WSrZ$d?s$&&CQNeURc@542=7R zqhXqBUw!8IK-Bb1m%6a^FT_lMleQd)wHRQCtm(Z`efa``QBB!FC+JW_){I~%Z$`0z z&-T5{AHU0@Uz3-Vch+ab%=_`|LpMD0uKjcBf&LSDGEWer0Xk2gZTF2lwz^SFb^CR( z+mBMDw{=&|)9_Tx7LYr72CJ%vNF?3}VXg;E%zbRGS+mCJLp6tMGVNozu%xW^^!Oxu zzApK3)tSya-JWjM>Dk_Up}L6!(IAi&6Nl{`C@aN`o;dUPl>>^F>q_-DuixF%5H*Rm z=D6zRn&JVS0P9HX2~u_e8KM6G8Z5YIZ{Vz4wzP#Y0;S5*tS64tOohNA*3lu=shsg% z?|j{T^jiOr@}eW?-dyvFClo7m0S!vPtm$4%w`Ur=+d^2g;s>J0*|7UbHlF|ZJ*kDV zr<0FfPWh&@Pv#MiT(_%l5i>!}N-Rb*huLE1ZVWJ1ob;blU2fGBFB}ur^`FAiW=6Me z9VnsczR8;1nr;Gz5j8u=nnW?Nu%}<0)ZS{oBQ7+tt^WYFV6u$~g&`46(8d5dvN$d8_&Lgd$v_BFEM4iXE4M`tY86W(HqoUsejpQu(CQ$9Ks?VsnNM% zBXc!t`Wrm<0hcXQzXFLw)|97PWHa+HyYscaC`PjA>53N@B6{C>d{2}rk^5A;G@00D za^t~+S40o4KfBPWdJiHqEk6i5UunYQF8*A7_JN_}PvFj^5j1Wk73!+ovZ63X;o@9* zGyDG_c{*0{k)^XyArnhN0Lgsk%+D74FTg)86Ptn8f(FM=+^@2d zyWDei&W(bdbkqIQq(l;BVKvh%67k?r%f)d1Wo0hD?0iq)j$^wod@hOtGlvXVUcw?S zM%Q#`jN*V6vm=Cy-UW%7!7#IriDG2pFuE6*3AS1DqNTpua1l+kqXVjogX-CV>Sf%7 zH?rq_S>@Q0Zhtt9t$SqRVoht}q6x)lG$;@F>~RW@LK=5-@N$YlFo`=|bZ2qW>W*Yz zmm)d~v`Dl_H0n!p;P;cgC?6Uu#_U9n^>-gse-^=rH#mOk(d$;`dk?ofcWBflJRXVH z9%ZREZY^^TDh&oW;-Ilz^@Tu}&;@L%9;!|RWO~OulcgC%tQ;Zj7Bj^>j(3Xrm3Qih z$9{-sMlAHy9bG~PP(p@>I+;OiK&07IjP_i-o70=pGpbKxrjXt!o*PSN2G4kO$^)DwDxl)%dd=>VkQ)#@)!KW}GZNOWmjC zBiknDZhVcZx05G+H_vZYJCR+Nv}S0WiC(RLK1#h8iu6qN4S!nD9>!kl&SBnk&8u@#3`T=4M2rS!(VfXx z=kjKk79S#hs+cH^{>ur06iJSU7-29T=GGtrN|j@eWR44gAs$1+9%L8rnyc)Y;hOO< zv1J#9&|h|HUJoKhUFs{%FuRB7Ry(KcD5lnP{(>U-fh=PE2x-n48JW3;tjU`GhtV-; zGsg`&gz+O8`|$wUwYL2>_u%lx{#?&Tk%(N#EpvU7olJN>8ti?6MSKQm@z^=s7844w zFz&TJ>@)3uLfe+#b{|BoBTW;3{qR z4!6Pt0Ll&3yEPw5e@7HKC`1XzG+TS9uUvvl2K*6FQXSqs!1=(dpYJ0sggc*~%PA67 zDQbdiRKgZE^CmbiQ(Z?U>yf^1k#%#)>=A9Y+Lq(@un0x2$NDvnkg<^6P&MSocQo@X zu&ooZ<`~w*IFAI3C3OH1%2WC1v8KX}2;P^9HJ4)UXlcGvh4b)G6?s$X!#}S6?6*(ibZB=1{GI&)RpQVRr%x>qQw>r!v2~I zH7C$B7-9j3RKBcOX(Wn+>ZnQ8#c0%_=#01oJIKDV;Yj82HO|Gd8@l8Y(>D4dvj>T@ zs{8h}wI`Bg)7cx@>TAahOQr#aB2C73C*KFbl0&D0(O?_RP zsZ^;nWtF`s3!%^U>^_!Guat?U+rJmLL>o4rv58Iw>nRq4HDsjy5pg~jdN9Bkg|O>B zttWJ5wl8#_@}~LIH(H8f#);mY0W%qFZWJwRp1I?QWZHY697)78>15i1psEljHb~+O z#4{pd(4{@m_EVQ*(uJib-L!twjYoEc+bt?cX`tSN;SO(jBrO}jM&ROY!zGHZXbZ>p z$EviOGf+kIlG`L8Eve(;jkDW(0gnLBumtCWZ4J?0xa)xQF)R#jFvbk-J|A|_$EgTo zO$ml`o?*0YLm#DIkb%57MRc^S2aym*_fF3|vUeuS6Pa0>4rztSw>!PIPH89%5k5 zYZzf@G$gaZ8k#K4a8y$rg8|MXQbL=1C>!+EC!Sf8XpQu@52XF;X)#2Zn!m}OAByU< zZUP6eP&4iuj)vN_rFwvI%@F(Xj+n0Jd{1Bv*Edq_THB7!uWzKb8)Tq`IGJ|-JUNS0#%0wc{!gM}m_CO{|gFxcRCeB-0-s7l_nzI;TfIwoEEG7m6Qz0-y zK&Jjs9SDT#WEy>Km(Hi^Kp<2%s;*RhtNzFb5qK2hd}&&oM^cL=lU2?ZQ$xOlwNVOvq?8Py%C=}*;% zv5XuK^E}2V530x5!3y5)s@|td#mqq7a9Sr*tPq)Fm4or15adncVJQ&89T?V((WSl^ ztjW}W3W1w2MyPIU5{Z;%tDNu6%nqLUuAiw7Fj=@6iDh%0TYqU(XXXx?vIomZ`x=&( zw}ZfoG3{G7J&SY8`j=*dOo46H6V*`@HKRU5BMepd03EUG;EjdQlv9|QakvC-H_aV+ zFFp6t_kdf;6PWJ-d!3qtH9Kf1M5w$DAb|-m^OFEhB5?dU+Z48+UsOI1t7M#S1#GsV zQIwffdWrL1qcPWPx+Fd~#}?hf>4npSH9-QI_GTVPx9d?)t721+05nDc1PG*vz-}p; zBiW9g&fYy@aM8F^+q959Nk6QOr4o&ZR5VdTd22V0a-7FL)kjU>HtaFO%)kV##W}Q9 zT5RGNdS*Pd=c#7BroThz8nlQiq52hMAZzM#I2w#Ey6HF)e6SQ(Sz3JE3uA^Yda*6Xd;zn5OG(tkZO0aw`Iro zyf;{Warfly4fId-C-w$*4lS;1FoH#sd;kemR72Hf6cDCnc-g6{d$alBKHS!knFFUf zga1~p=P_(~ilX6aSHr*9#&8GTfB=2KQ?`w2kpj-%Z8QiR(K!MzV!@Lq?1t}WC)grC zw60~JT0=kxOk^5CeujYn$Xm_}ImQ33&bA;A0kn~l3E)s3QqK!%HoM2v%frQ&-MMH$ zdZu)A+nb6@1jpx8-aImE1|qJVrG*97d?ZKoKvyWYtms9oTuzuMje)t24aN);&f{!m zMnoh^m8n;}(f|_I4n$uQx)3?&njsQdGe4)s0f9B)@J>1z=cdmdU*qy%X<64n)}-2u zOrd{>5r#DlTD&VF=d&YJUpsWZZhY-P_o;+aJB?gd+k`fe>f4HY(V{rioUpHnF?O&b zR!c#tQWQdMVh3s66j^gv_2ou&-4l=;D|TGMB@1`~iU%yNryi&dr0Oxw>OZCF6QZUI zHT|i&Mbrcm%QdxwnE@`K7}(d;x&!x04K}fZRK2ZwfS+ia<#`{@o<5QRo z*vPb?dgcvU$FxO2QMlc5E@YT%B5)LmZOF_Pi6>x+Av!k*l$|>Z(xuWUR8 zR77qgGP9R(P={O|DGEeQAo`5lnUBw~?E(@lLUkf*?y;UbxX)o5v2@?To;h^65aUuM zc2u8mw+rYH#x+CLDK+Db9KYSz?2hAl1|7o9HI2h~_UQ$Taa?VR23I1mA+s;HD<+Ug zBoc{X#b^K{3~Mf+3zn8)CX!9^PEI754+K6mrkaB*`~G~4P#&thiTZ5lrYoz%s&JJQ zI}s_e$&B`MhInK%}8kAc2oOD4887nxpCz7_Z^d{3aQ$}UPEatYQ1l58`QEb)5t{vK;w;VaAjhaMa zio`H86N$!Q)0(EH!3KH;9a_kI+CCKvv^9a-kmfpN)tsVcAs&f0=h6g$Vc(n|LF&I` zG2VGFhC#G_TQvueXlg``pB9^g=$V{CNhq-zHesXA2eNdL8) zPOLxZQJZK7TTv!f*gaIgO8CGb=OXv!+DLK4HaY1bkDUhU$er1haox!1}i-_q9 z6auYhk8`~Ts(S`QI#f6m1)c^Vz{RTDiiUyHw#_tqO56IUrm#7fRG-(l`%cveU?-^F zN2du8HNXJ-a3z9R=^NU%ad>{{W7tz{P|ce@r@-KW*vCVpDKWNZ>O67^M{efM+xRv* z-GCHA0Dat!CgjC(9FNUef4f(od-T!G8@pr5WaP=Sd=QN$O9GF*F*I*nZN?ZgD%7tx|HoGS`Q?81_x@grZhMZqYjNRh=}5VyW+~l>z&A#OfKpQ ztRc`d=uqEyFg_5Y!6T{z!%j!+sLN20|R23WvZbKS8b5kg>q4b^8I#mSQ=u!W;YJc2-|ep=PV&Xh~SwR#3a z97SLOBh^EUFvLB`*y&c|z7C0|=AF?cBo>g^Z>|j%jD}g0*fP+cNaWl?l!VcN%)o89 z20LhQ0)fN=w$VgJqd#0bi0GT*Fa}sSyEWd)!;*@?8gB3eoz7Dz0%c&WSzCadQ=-8- zma&$ZiP9idC$c7S^+0~)CsZvM54(qoQ#;pUFdjPWfV8WBR5PfH;b`Q_ofN{prs{>7 zb-9yRuz|J3=+fP?eXxO3HG3CWLts$TKf;dE80I~O<~qXDYR)=}rRB3oT$oduYn!>g zh{KkJiT;!5%wT|<5m@Mp1CjQ1f-A95(c~dm&xS@%b-1FoBWjM;lz^d6J`U@ovcNVw z=ec28TiHfMV$bDdy3;T-`7T>*=Xf4$gF}|yU!T9TUA%lU4M3=mku#6=&xL*0kz+oNkr zV~$V61;&LG_*|Y~Vf&5I7Gx9*WUmT+`IFHGxr0|6n}K zXn8X{AhQr?<%u!!DQ>^|BaC~gwxH_mpgVvsh@fm^ zm<~dqL3}txI0bJ;oAnsj-5;dF?9@zJQM8@e1o;`(yny;ZbK;b{Qro7|l1E@ipGXz( z&4Gf^!W?A-KrST%@Lw$~L;0%@)JctW>{K&3Fu9GubaN~%O;4OK8Fy&hB~+lZ$o10P zK)eYWmmEXncz8D2Xgp&7co_OKv(0uiK;UW&#_Jp16H>1CR>2TGqf3um+o1>u?3blE zAUzX{>*+VrhXx@R*6~yhw>cQ^Us~1?2s9YaX+PSU{xzIMs4iMqTrXk%2R6*SH**Y+ zAP@tU)AjS~EgGy1vI*RZ7Pq0nStKS1gxc|e+&?~$4A#1YmzirzMPzA)5UQ_q{z^E2 z2?7tB>kx?`La1NEmDo`|91Wsx4PC-{JP)TZMr2+KL)B+hXU$n`WM*G6Ko|;h9pG96 zXK|nE8x?`Z9SX|KR`skwuI7%F#Yh}xdAl@|Atr%ynBBn;SwVwP9f%~GN6Z}Jwu&{3 z@CM`6EDTR55@<6M(p6Wb=-$_mh@{9xiJ*JXctg04a;|hw>bSXWEFT}=NFdfQl zvo+_v&6?qDNM)-Pvas_E)j20i;Wgx#ZXlE(K-}HKUsT1K8?P*pEw&Ihn=7&VB@%8ZlT4vNW#9 zMeIj|O;Hg@1bRk?%>5jmjI61Q!N{OXF|LUk?ONMngkeo0$LIC;JUFZuRgk?IC=c-sNKK{YQ zPoq6Af)E{&tdDaxIG`OYiix1Vvp-Qu7N|@1%GjW;F9=a;!kc94k~BUB)_ZE>pswRd z>(lk4SGLc7&4bgnhB<}=j|9y@241h*`X(;`@4<5zdX5mu*mDHX&=EqgTivWC+9FYO z6g>>5UZ8EwVBaYq%UD8Q1<=Y4L;@$L@}Bwu#yWQlCxgQxk^!R|ZD0zWJF{UJ@YSwW zU4>!Koyosyx(M?a3y>GDTIhM`m57SovZOy`WS|gsoz!V5HgY}@cVSIRl*Z8eKadM2 zac_(|w1CktZ4Jqq!-&PjTW>|koE?pa`Um6znSJf~d(UU4lVNl>+Ds4NR`r>eu!HW5 z=X<-QWj#lAA`$38MuzIdmg*taY8J81%G*W+24___=$RoWAtQ@HO^Y=ouE%9>@H7;o zn#Ut?0)f$x@A!}rI)ojp)bzJFpX1@nv4#^S8Zq6EM2p0MnnYj?n;h$s8!)b@KZOwn zgI0eaRG&ktj)*~NT+v~!>#oSa7+n%hVWFlB6qVNfw#;>alQLIL1%mC~A}ukojwwzc zYFgEGi&#skHq3cYWMcN|V?#tFDm7wlJ*O!U5HXvEXJ?`QVA=Wg+t<_G7zZ z;sjE4sJ<3^180qdEAjMgCYT}IyPi8&;=>48)Bkv+{zN*lT(LA4S}IQA)|w+VZQm8% zX66dkF|)8O^LCYofYXL!U`^Y|s(noA43X?a?a*y3uw-_pshYlIbUW3Z)fD+CUVECK z%$@OCKn+byma8)iVOFv>XvHP!vJuim5zciotd!I}Jo-q#0*pY>IDQAYEJf9v4B7# zkw|l#T)d?691_b|!w0;XWnSk?J$1R`s_v zjhMqC4x>@#931Z!!T@93F@AQ&sL01kN9?l4te4=HnrzovwOP}jqGA_v?AcW}6$jfl zj`g>r7pUGr4;~EEo^h z5J>ExiOo2PQ+k;^DRWJKIzJvth&9H;T!=Q_3|-37=s2p|3U+V`*BD#Rby?HQX)qiO z*RY`ak(xx*lnMhKG9F}JpQ(O~1If)b-30;-&YJ569zwCI+4sR($hD9NoLBu;h0w&V zPM;#j72O2{Zbc7pzNWu#KMrAR?69MT7-2{C5KY8rh^$#dVh4#P$HUR%?9@&~Cz#Wu z<^+aVGL2$^^GGxZcX$L%%?L7A7t`vr%86x5Cfgpwy1CXRvZjAz7*R9#C+L#yz(u9O z>gl35-L`8Bd4=6IjfyZbP~9yMcr|XrReh%?FMPYx-?f5X=(L+KRGlIha6QqNxNyf+ z9w;(=8mb2fEZI($WJRtghRB*1Ah14Rf#thQguC=SJ@ckV)^`PJCG*9N8+>iMD&^ zc82J}HVei@#Wf!69_Iz0)-VA;fSTIOK-9djPnu(}LseBpwo9=Sks@2U`wJmzNE|bN zMKiY{woL$%nxgXFgb3B&+=kaPZ%1tC^*49p=aHz2%SCbyfD)i}Mg>)i6N)$~TSi^2 zd~PEBRWXilg}}a2MBFJ(DJH1ag>Y&%wTcT}bz;i`Jo1qxrmpfjr>zNWRxDQBiVH4I z*mJlzx2#!FJ?5Txv?{SvbKYDN*GxB}Z~vUe7-D2Yb{_KiUd&BMb6sF5mP3m+^rFVn z%`89!W(ird5bbD)+^2cW8r+2zJ4slPNcEwq>0eYm7z~8U-5899YhBumc9ZoqZ_Zm7 zVpKCjXk%+ocPQue1X`IpCd)|~Ep%IDst{Sy9Z%`&??LO@u@KmgHHgumG+k=9_E6-t zy?Jz@B(mg1W z6M*-Cjx2307s>!~8gLUok?K!SgE#_fW;|KJ;@C=z$d&bUcKSxz+b09&p|k~%fex#z z+E&jAvkQEa6C%rjzG3=a**B0EaDJ1Lgu)EZ&WYfKbV^ME?ESR;+jdNDBQTfUvCPUF zS0s_PCzh7IeabCS5443~7seQ>?t#qlab_xffVl6@z!rw8>ty7X>IcxE#kDw46X;T` z#4VXkOKAoeV}J+~HCq@UkXXRT6?qDQTM=lY9laph(Se#ZBxX8Cw221S=Xf|lpqO#o zIVaQyTCCMHNZf_w;s?U!gvmwy$IUrnG_cQs^H}TixEx`KIJFZor}_phW`k4foggvB z0o>@cP?9ZV%@CV*Qe@r++XN=IJqw8^VOZ0@g#$H*@kpq=IN2B78}a5yB;j#7T~D!0 zMjMI11`-GGLUTQH)g6Vo$}!JJ*7S@Hja3i&7Vwa5R=6K)2>W`tYNx?j)ng2hEaeH6 zw_38{$+|T2V)>lirBZbhSjVF6ibT{TUWN^XFwzAx1C~uMOj{(Jo5o?x?udOT4yxBx zUlGf~k_$*2K;kf_$eI>0r{b#f&T=85R3~266YsQa>_%O%ZDG7J^^@okp$Rlp4}rag zjA*f2mlam)f^EO7XgeLMZ*PHf^KM8X_o;BuU;zmISLR0S;ZhA7 z21Es#tPMz-qpmtZ_+DTaJ-uj5zrig!?4(4ovP^xI#pP&iaHQ%z za3>`Oukqr|T05g2y6T6O{6=;2N>m^Swk?#f_{u%|qz@>fsX0y&5du-n&>_s+)D!~@ z@B}QPGeU#z6COpl02ii9oZ<9Db+JOAd!st;X2?Y5`gz=nK-UbD%)B*M^H%J6gJ)%~ z79(t7j1lheT%A|=ud4nGMD%rEsXlVwAQF2==~KHXZz_%c%Lg9F90$TgxTuW_Zp{aC zBf3RwUPolxAl#RJee1qgm4Qk0p)<3Co;kcHy6mC-Ks^{d zqA$}Lg3%+`Rb7b8u?|IaZ*Jb3x%o*uxxTDRYY;-qsO;dm*)!{90-2d`HZ%7e&~BOy zW=D}34(N~UL0&>kt#?+1sCp4zjZQ1)^8y!3;S$~8QV$-zSlqd#ZiKPwcR^%iZw7(D zd2HAvOOJpV#`o=feGZgn@aQQ?9L1)N>v0bb|?y=+12dY?cPyc43G%) z0B3W5cHiJpT(E5m2XG0C^iDn1ftA2CRhK!kr;^v3J;>~U>ISFK+ro@MqG&O{f(u9- z%AJ(CdQ1d7MqENCh{L((fq-Lumt6Krb-5?HFzV}4zC0TjJ&I7B25T?J3-NpeM(94E zSm8WocT``f>CA%x)-Xc1+Q~eEI}s`0(vrr+Hd>T7Xz`IT!V~cHWlM!vTGYRdtph#i z8MO@p_o&`QsnCUyzT5dSdlH_he_}{dii$DR?>(-7Bo4+#uJmQxt1gEs9vcSzM@Du2{BP zLFXML(VYkL=v=6r+9vdO7OH0s!ggN3ttb|%k05PVJdEe%YMw_qg_Zec{3wx2m{dI) z?P!R{oSMV4L3lI*=k@1!D3i$I!Q|qjxPTKTw#~K8CePy@oG|eyOqd|BtvV4XpD@+G zExnU^!zTeBriL@%6cAvbGj-fjA(nUVJl>Glt!QV0tZAG;CGbgQB!J=u@CxAB^+CDq zUr*YWy{{z+7kiD961DBH`sfdj5$CH5=CZj5Gx0U53EGYW$oC1i_Kcf8pPuI;q-UqL ze2hO;DW!WCLD8-2MGqtUEWVBlXPH}-!i1ra`htr)* zxOU~(cFDO{Wk=~8>sQ$`K9X4$Y8J)mIjq(s%Xg~InjuEm!Aabw`Y7(>_|2*(ssF~Z zs!62kO+1PSGhA%wTEj|d{pJ&-wT&Y%#fG_yqZzj`E9nU^n;SPAuajC*iqMQAou-WDr6my_KwNwO)x=4d7j z=#f<}N!dynNv5?1bS3hD3q5rK{+n&oFXW9LRWOfwcOO&Kw}pP$GnP+n7|e;l^daX15`b-QI=O8)6p@Dw z2ze10v`bHK)}Qv&#qQHW9EQM>G_{6zMDv_sk{_)59J(-v~3HCN6;d19_0;Ic2;(J z2CL}iV2lpIxNPN~3p=_6GTZjNTo@P`BKl&wzA%a_KTM`6x+Hs^4^W6*-NZq=hp~g1 zf$AQpUMo$Ti)gWp189&qiJs}unUHjzY8K>p0GV2xQeAGTZdCW86!W+lQ*)d~I~ugu zbAaaXY;expk6nT(){N{SL?aJt)Gt(AkwfgDXH*Ys>br!%e$_jf85p5Mlm_lc$KVC3 z6Nw>aUa>qt=N(mv1F15Rs$X2QZePcytef*rPVht&bjSV5CrnWswu?c!BDe2h`vL+f z*CA9#iiA+C(k07YmOH0n+V}PtVN-Q0L;vZbIK7J2>%`lHyD`S=BC)NyLC;hicgpg3 zZ-qtNSv5I{Q!Mwr0NtC_+*w89jOb8UYbLs z4E;;XlWo=8lci<*T6d4yZOi#i-l=cFT;I|lz^#@~=|qJnQkEP08Z~bM%mkSI_RF|f z@s<*<_Yxwh$H(XmU0C8eC4Qud%Odx@J(<-=&DizA=_ufu*tIl$4pCmpQu- z5wKFTWLeKBW*i@NDEbm1^p8-UAm!}9csRlkXCv$}s&js2Jykz8z*$|ow>7F5)SN`( zEdGR^spE*9(^Ku3hwGO(b8Y)1@m_Ug53Poku&@3?l1VajJ>XT{E4g(wxe!mdus z&dRP28Km+0-U54qjr5SH=&3V@vI7SC6M6FsdgeB}>)8zS0yD@kixiQlwWn;~zEfhE zsx&BMW-dDPHeL9zPTQUyKKfLPF7TApDJWqGZB_}`;y zeAr?10Aam4=H*ct>>Fl7)1bcb6WG}LJvouf45WQm4R|S3S15j1nU_yp+pp=~2-_Om(Ob7#n6^50X_JZ8c3s z_O(ddgBQ=Q9^14l5oocVFV4fqE=lR_n~&TUqp0dXYhNQHuS23EPy%9?LgaY(SqjhU z8)u%}->x~ku&{>L#ZG39x-@f${kf#rLJvxFSkqIy^#L}};9YAvfVR&IGtr>ISoIE0 z;Q^b@=$ZA)1GE?z=B>C=?x=khS~M77h*xw-nDcaXWoI*Yk}kDdNZh>9*eC`JxU};; z?qqiHIjVkFsl{av8_!QBwvh)bR>x&pe8uWDv>>&54!7j=t zbQ9W&ZT%?_suRWG5{Xh(Z8rxhW)F|7ERK7IJW$gy!45Xfbsf`tiovp_iS2!n6W;f6 zm8W(xyMPhi5NRh@`-))G>glV+aOW!1Vsyc!WA4KNoI#*Ctly+Gjw>S7Pel7TJ9&z` zkm$anI&l})Fszu^u#g*Q5LK0di>eRpWNu&p9TKg%2C^9&;H=a?#yeLGGo*VI56XY? zVu_g8E*8s6FsVBcB9U&g{@}Xov!3giBKN63`;d4iO!2mcbwdaAz%j4}Uc%|#6faLC znwotKwz=C^eW#svTIY@hLn}KU;ccbaE_>*B3pYZt^z_M%WvxI~WHyWHI9L8&Ka%e4 zQ!I{yaAj``bF(|j#oNLw7EynzXTSNncWI#VLPwmxUdTkCZPEz8N81*T#F*7Gx}h)Y zVSjvgzVkj8Z8}I?l*ScZNIa$J)a+o-)BK8Ly|3A)L?XOSTwP{dGf=&O24hUuPwm`{ zM-hEF9?JBzh}cw}JDD%S0OOix;}WvwgAXG5=8?F*CQ@bAJUq;Nf&L{^7iC-!nId8( zFs-?3n*K2VLqJ%sR0a84*2@r8y8>jXOGIw1@PUbe+m!9z@8Upl8@nwCoMU&Ou#R zA#x{g+q|uPMREqwhjmlyoeUk&Ki+6W`U1*4itqv_9o1Qt4*j2rUhM6Kphn0p7 zMJIEyW_+OOnJy76#OAa#7-m*P7gXN0Y2##!bO{3-2&3YJOC0MdbO6uBUAVb4sW(zo z?lSSB1GYMZ1+1wa&uK6ojG;v$P%0E+Jj}O?h!vdeK}Hw$yX(9--!s^OhJ0K} zdQ(_IYhMFRO=2Mr%+55#J4~8o;O>CPieIT4)PgmgpjzXr2P9dIH6c?{@bv`j80`9~RKR4C4 znlDdIsy*z^R%w1kP7nDXopqVF#ybp6~!knve{xsIFkU)cNx4%Lh-bJOIB`VnTvD$Y6Ls_lwW*4_{Y*KOe9sT<4nlGIqX z7o7<&z&z?+Ddjc?+RnMxSW~BS@6AlSlQ2@WgoyMNiPRsr)1|9tJHlIcR@hYCve;q` zEfNo_ZdE^Aa~yYa{2Zou2n|kP*^*-joJU|=bu6lknl=5Iog3VSz`}WEM+iJn^GrNE zpX;!end4A-7*njN&dh8PHODW|AY9Znjyt7)S$VUfa#8hVgQjN=oW~kMbp}~8>2u1m zsAzLAycJs*Vm}Tc(IPO+g{ChMGPP^%e$~&*QmxM>J|_bYX=zX!eQ?EAJ>8<9oHa61>vG?#1HzIA=2Jb68zZ~FnV_S@+fK2cRA~SX@p@l32Mc)rN3S`$IpE}|L;BB( zj5XseY@$q{X%?Di_PuftOE`+>_qBQL0c42cfY}qLqh{to|HRAy^OK7@7cQE3eg@W1 znl42&TFsmSGktIa?jL4mU#HIzrBMjw0sFBZUC7*@(jLMDiN_8^_CQ*}JW8byB07n| z%nz92L*g}{Ch#(go{x0p@|Did;T(2w4Hk`^#R`szycG|sPSw{ec4>1S=aG1lxd!&D zettx(E%czd5`kk#T#1`(x?#*F&MVFEd>6L5^gP7?$8`oci+9E=(R+j00Q<8v!;$Kj zBWhZt>P0+^b=-#zQR@(IRjV>zyZNCU#EkoZ883F&bt9(3}lWY|;w)SZ-?w#^Jlck%G2n4Rd6jQ7sWNO#i z!&t;c)qA3vpG{7%?d>8X(BOVVP1Hoq6!+r&z98F&F?(l;VEH^o7$R}OwltAAk8K3x zgBd2xb3K<;29|1;kyytRZN=i!G6HQ) zeX2g;o!-gvvhL}2_8u@64bNFLR4aRPuK}*3$a%*j3ITz|eR>nnwYW4U&!qGUb?y>Z zuGp6SldBj#yy;gR#CIp2_Acs82^h+Io0E85!AoUMoIDpY0J9>o9XprOe6 zgt}3FuU;D~SFRe;i{KrOXe{IhEoX=#q#Y=M)Ho@n#7>&5+qSOj&`%%~6|WsV1JoUe&1uZt%}Jo6^&IgdijDP&%a1^xH)RvbVNa2-}6H48R% zGcS#64{$g#cUCxz+2XdRzMsvA!EVniEOZDXoKN{tBG-?jn929E`K--SolF#0zlXrS zSxLoaM9OH=vgyFQjCNo4iM)M*ts%@`;9^E*67bEV%q^WCNntb_)^TV}Rb4vO?E5qKPw=|@4NEGhX zo?bIEoaTJ6ZB*wpj!m`Y8M|CNmWK>)up$f~129a^BTf>AnK5XGcF`w+Pu~u4Y24r3 znzVq79mfa;5q(Ye%mGqlv(Oi9m-LsWL*iaM@Bw>fBXM3t-vZ+YTKP8U680kp!=_aF zH!Wg6?v0UGZVeYs?o+X&5EWfO4@{JuV0?EX=;Y50}n`jckC9z zfBZPoxv@Fj#4QNijl(!+u7{A>#F$t_i#>;n6%%;CTR4crXmhZJ>{c9e zN#zzEK%@F0MBAnFSrgd8P<3F6P(4+hXf0L*(&PF(O0}f2n^>Q&Ppw-9tg((E$4g>3i zt~Tsc?9ix1ZVBomLgj=jar6qSUtVGf>zK~z#?#9>KRLZzw~8qe4Vs#3(IEsL$t=yG znyg7=4l~gr5Uz9{U0N&6(1;;I^%w*FPhX13#fttwnCr`z-Fcij^e37JQ@Tn0$(r-I z(DY68hi#Et7=%bPHNC2)!G^iE$k-Z;4YMJlrfAKVBHlWl_zZaOpb z1E%JhIDmY@(`5xYr$ityLr5G#4@5R-Y7&WXW@TP=V%=PKa25#z!?zt99!9{Yz?5{6 z(3amC!$WX>C$}f2C{=@73BYq#K1eyo54GrX+!M+TkIPH!#5~6O7D6a1UjlDlEn2;zm1o*j z;i!k-aM0W956==f=00{~98%z3Kp|-`n0>|RNjrWWTpb#_=i_f0q*Lg9hi(`h%`e`8 zYr+i|mLSCSQ!JVt-*9E?ayH(Osj2#qcC_m7tS2UTZ-yxW}^bo6Kbc+eZ2i)Hp_lCxq(0tQZYp)S=_Je9x26+gB|LKX(u&bg8r_kN;oUk-C@JELjoh*0pr87frB%N$ovf` zY0!2lR6l@M=H-Dlv#d%_ra(ZlH(|XrGZ%Qv^;fo6zOw9GDI?K;CE{b-yPMEpb}%01 z9v}iD$fjrD`nVxbh?ck>mq*X+QoIr=R5i0^xTZ9xYCfduQeoVohgvCbOg3=`4e_=lZ%trT3x#S&MvvRG%vvx1`8!*#AvX95$?eXIy*>|A|eu{LgKU+ zI)r762VFR@fIx%5g0s1>#O^ZVzCt*1DmOl8_XdIP3=ZHt#@yrVH5M?o?bUNSiWZ4i zpll#M5sB*PO+j7~qkbg=C>7aR)ZAr25Gz~+` zH8BU5jA@F@>?x^_VtsQ&yP|J2}wx-?99H6LBYpn ze=ENe`Ohx*Z~1cl$gD+F!Y>!amF7Gt*%#-;BD55RmmX~dGO7&OKAvRS_h+ge&-NV1 z>#4@pWyYjQTFOgYeh<0qe9kK}^}ML_>^03>>rXT%;?>R9XK4ml!t4&Zq`EYQd9>yp1hz30?E=>EWCXegJP#+Zg~ujT&%8jQ zx6fcnZ^x1&IEPLO*_SUrk;k6kg1H8^5!myzlNoIL$W!S&$_qi4SiT+)ojE+{Db-yueobCv3U_mF^#B4-0Zq3SBE|FR#he_88ne!`dw0O(o=ZCwZd^)pYepBw+*cWxG^gu91TXI=o<)IQAj*p9v0fp7SU9jb_%g+Fn{g1}did&*1@-N<_y zoIp(+mKo5L$V_O9pW-UHHnqk<~nsTp~Cee4mGgXR--hIxYlp~*uig&x0W zgt=znSaF0G9Y#Hd5ND9vDe`1OLcwwBp52eyWpf62&`(XC=y zPCR1wgC0?cQpHw>7DfhR48}u=9;nUnuya#$9}3Y#oIuZD0c$}!Ue85`6*)+34O9Of zKxZp++#&sA!|vhk!2)Jg0R(yifiB$m=U}mNId8$uLELpalh-Kn}%5tKn`ySQbHKe&t5PeTLrd13E zf}X)WNYxoJDo+TR<%gOc;JoU@Mb+gELjSgBphbfdNGz!i6bsc&L>$BOcndF7`IZP2 z0t1!X9hwk4h~?Rfnm4bx8G!};Jut565~R}1JYb4qga)Ddg8FStY^zS4!kun672EG* z+cVHuvTO;iyyMOT;*5etZI7FbdoC~wf1YuJ`J zKR%F;M_}j8GnwdbZ~|fC^;A#LVjF8XkI0355e}exg9Z~EW|<|Hd4fy;+Rxx4)K&qQ#H-{@A z+7`_r8yGsZ0=c_zK^^#!S-?w9$=Fj*KVs?!+D|6qZDiA-l8?vq3S?j z3td9s+M533C}!|Lk|+(j6zy7RFc=TBsX0613^vg-s&CElFtBELvZu%wcS!&8Wh3m3 z)_bNGsqMg(x5f>+Px?NE4z(dhxT6qa$ar!+*_Gkx<%mwKKv~1^YSv0AJ6SP;Pdof(v-DaWs@i*6a*u9}AF9Kee^EqE z)SLGi-l(hcVjze7gjZblvcIg^%`bo0Y`D!dA5^4<79cjD=ti3IFwH5UN|8LvMkxxejXDIwbdW=>}TX&Rx0qGxbfQFGIhJ(1Ivdow0FWJ#zl7U%&os!rqT znj!8%_MzQeEJjTbcwx=Os<=aSs$MYH5r$a9n(7qx7}Y~$&02RGh+`u6P`@lM;` zX?b?Ayo8Ap6aCwD6GY~E86a^Qq53eE(K9$#b$a1gQB2@)Oye**3pDuj(O?xDHK$k( zNTszsexxDcYTdN8tIfjaF+IDvLb8W|`BtI#|+FN$+~`uqs4EH8O~Z zppi8+Qm%1&%CL!`I)mESDTWGSR8kX)xd7>(Lt{=1Yr?|`+q60qY?ffb-SSMJ2=VxoV~K{12lsx#qm%?@S`co)k{Y9FXsoKydP>@j#X z63+}+R^CA%aR=^4;C$7kz+z2cl4%`JML2b>yER0USsImt@gOKYs`ol*AllIZWcJMP&2&iL znB{T;XBMBEyLbpQIWe8ip4Mj%30)%P&}h)E4cV~9yk~;>z^(R};A~{~&?cwa10%?C zQnCmChV$soqWwhhVjD0GFU^ z{tKqb&(Jz-<0dVsA)oWA;g7qW`iqZ8vo5^ArmQSBNAJN*`TdyGqXja zRE5xV;mta9U4y8J5ziKK)8YUlb4~O>W@OdEs7ukei$wQA^?fz>VgawLd6w#j9e?-@ zO)eH2rFn6Aic$9|HgH?YnHxMjyv-WARC6tkt6nqLL|e0ePV2Bl&%o?XRfklcUzLH` zE!BlE*4HACNL)f<4P(Td`k#aYSgd)x%Jz*Bp6o)+y8OzP0yfcD1sZWzIglT8&8)}z_#kg zvu#3Wre^O8$X<{|2luO9!7|3^5&}i0>Z+$)b^5AnU1j4`OxLmDZbK8-Bg{1sxDTc2 zkeIq67ttcz=KZT~(ID{7HG|MLbGpAKvN_B$mJl|uSz}y^(F<@jGGzA#t0-1AbG`dG zw%-LS*vZB0i?^W=n4(vx-lKji04wT8o`y1~#!QDXyU+u)SJ=*usU3!s2l}*o#B@LS z0ZxWdo1kZxEZ;g=m+mkONDyWN0ud>gebKWmV>lxgLA{kEQB{-?DV2027ml5Fb&x6t z1*L@nSM*R99J0hXGP&icTqY5CktI`0%L4?aHGvQkp}NIZ%>g7*RxH@onmC7zn)-99 zA9mS;nHNa(b}&SXMAu-52A30-FvSaE*{5LJpI3F?{pc91p{;TOr?6b}pq*?mGr*uG z5HkD1)38nN#0SA`NVF9J8EA11%UHk)&f~P|o^Mc+Y_J zT(u*APlB|()A1;D7$8tUA3|Y1AoLC5dwjFU2AzEeb_DnIkr%JtS_&5$n5QXpjOC6Q zBIUTELl1=vx^zAl-v6-CM5|j(oth2eR9uh1lMZCIvIz_`^CTM8Ynl1!*SwM=<8Ggr z5eqnp1{utH1`$oW*^N2^CG?eMn4vn7kQI@}U7Az(1rkloUG}x98JY~CXUxC2Ij|A0 zKqpwuo%6VU_;waBLWfj0cpA15bK0tzc~LV(qGvGdt6i%(yP|SDhb#^Bpe7KQVjY1% zVxeY?4yis_lT}VsaIz-1-5ot+qbQ!p$~GN?l4=s20|FPlka*eb>SCyTArco6G3roJ zRXouhxZghBJ-Cl&)rrzz zh^*<)sA_5wS@U8naxoD#iC)HyuDzNfxKaN*EpOA{f^AF`gPIG-TsMyquEI8+fmU_m zP}S)!At9y#X&V#$tC->tK8%U5w0r_hYz+=$r!O;)*7R><&Fgv;iI?LX8go4xYuR_8 z<~kfl>fg5Cq~Z{!2wZjT9eEy!rZo3Qd4s_7kw~wrSXesyx|Wxc5goyx+ zL5l#xYC=M+8!lTfiAk%*I%@?503ciieWlQ#l!qhSs3hVXMGSR)6dBJ#ml$hPYg40$ zsw8Z*C1jg#(sugNlYI@bfh+StZxD~h1PxAlnsD+YB+k~HtvFn+#;4%3u;g&fB3hZ(c+ff?bWC+1=0K`Wb6vv|aR@B}i7j+#aG>cM z408^FdukGE*it>j2xF{elMAB`MF#JPz)VhGj0S56Br%X@9tnDeWw8=7(Ryj}@ikqi zH*?VJ!jj1O{L9DM!pJbUu6;ovTI)3v3HlA4T4Bu8iQ|FWW}y-=Er}c?A*{G({)BOd zR^n}jrO4SpGa&7aB39O|ub`0X;yHoShQOXA#)5%L@P0v&*-bXYeG=7kjI zgMy%Kd3t^92|7DO{Co86_47WobqQWL6hTa@`okhNWBOtUc{Udoa%&t*x$&&TwHRZF zjEJ?;97xf6*S;JN&*yk}9vQK+g8|)Er%yI=Jj_IDMPzmgv7U%FOY@EyVdW`YJNpnrS1*SM$)60R(@gY6q0jZg&Y%?VuLEves4%#G^jV}RnIa(mg5 zaJTNwJ*+@4XtZb|Vhw>P=(=Gd5s0Q)7}?RE%S(x+#46Ix${`dv7#U{PRM!pbhUpum zxdswJUTSy~j!(4%KyduWVqCoQlbIC7K~YaGgKm46Z@5(50$}g{9$m3>(M?Td4~I=F zHPT%_@9${--j6K*j2r_c^@ao-0SG{n{G3LDFTghDb)rCnWF~fEC`+ZGRIva>ML8-U zB8n>;kTQUymTf!92x%NTO|9Y*7HY0W^aT;-I$L28&%mOaJa4&RkD(4ouZgBpNhW$jrm47gT3W{{qgiy?GXR)`!6b%}T8ICaX0#C!82;7dD0S=+T01u#TGRG>1 zBXp_eLEMC>No=7*D2?i2%9P{bi0fNR$+U2H^!w6VFj)!@E zJj_5?(cepS`q*7Pq7b_&Ta0u`MwVt2q)n~rF6GD&JwPC({?ZKB#$Bq}M7JlK^(i7^ zG(_fj4N8Ndxo$KY%{*4DcWFy&rD7*Ht@#k{)FG4x11w+-r|@JnXe%OM0k=9F8`!An zPa$2Q8R{2C29aa+!VR6+RQN5!!?a7GH^(B;#v&qT*AbMv4myMKp>pHKQ7*WdVHFqa@q&V?a)67=U7fG z-~vuz5sAQE*v6Xb(%>moMG@RzkkH~B9?hj>*(x@$nLD|OMXcjd)o*I2Jtsx(Rz@)6IP% zOTU#JyM0ArFf;(btk_M0W+Ap4L79w@qFx5fnaxiH79Pz2wQ9@Vx`ix;ldLr&rSEA^ zDMi3Uf%H&>s#YC9m|7NY&u~Lu%SzvLJ;b9C&r*FaHsAsc+M1EMX5Y@rYGPoYC)-+t z`_PK+Q)XbfW{RicY1^a|Ca%aS0x_o+4IZ-WE!ZyK!6L3g;`A|!jAPIJ=bXlTzWBl= zo`w6ckeM?F1Rhr1A&fCZ!qT!uOUsuq#T17zYcMd^4J6(LEjDnKxh|kZBwHAcRMsVy z@F*U}01Fslh!GwMF&d@}?p6KSBGR?raSX74PYHJo2=WEfi1!9^zHg7|8{U*BOoVW! zbRHuSdoYdXtv#Z4!L%jQe3-a`dnGCM3~L%WS)hryVed@b7uV|~3bCt+C!hxr9p^jl zJH9KQdEkw3jP2pln~6c!7cuHMZwo*GMRTw-WN`CS%xr)xOhuNqu} z1(V{aV$H_ z?veB59_gcKOQ1LgE_^XslnTTNvinaD=jhPJo$r)(>THtP3MX=u(zum`F5p>c0}l z#xH*L9x@RXnXU6~by0tV3#tQw&H!hzh2f|}aaQ$OGZQ#Br#(;Dkop7n%}qw#{@5Cf zhnb1Q2wlQ?)#nka(^_eU2n>WkSlNN4W!ol}Zt{4=z}?3KS7I5ddaVp-YDP83m*_+| zb&Q7Rix>^i=A!?VssngpMdzf*C`o@)6A0Cb4J1A_Y`9yO5O~-?|D;z}&yklb0py=ZV-O^e*8xd#TSTf7*HD4%R&vVHjiBb0(Dqrz}j+;|gi z3Z83wa-6%zOH6SXfke;LJO!HwG}tpxeRWmbPjrQ%u&8=FM1$D?n^?@v+(4+jyF)d0 zm|8bo?^Zj3#MHVO(mydfKxy`A?zvAB+#HMXT-(xd-5X?8_O+@P5Uwu8yQsbsgE3vQ zRAI7hVq5t}^-8FGqg|DY`*hZ-`mia@yJ&rooTm^qm6@iPfKMuy;DWj8rlGCde6w&2 zwR3DiRl%ki4N)n1I}c@JW4ViIEZQ9qLMBxiD26H{t{WaZz}L^(ZM>11YB{bo7nnH1 z(}9w<9~CS~!qIYQ#Z@vcIU$LW%p_qdaV1_j^W%6<-wH8BOhf-U1Qyv&Jc!u<=W5;@ zq4OZIgO!~Pn;4>N=JEvF=03@r)=kYda1mo~dmU>(hu&P5*ef=B+43q)b#%yQv2d6HH?lfhT@)U5Y5Bs4H zko+L;Zk|Tx(-e?TGILVh7d^9{MGi7#3MupDrxxR8%+7PfCsTBzgLVrs9?Dn?5zzxg zMP`nN`a3tV5`9^-FzQe);03xMBU9LA)2zV|qhZRL7NbE#BFA0I7CnX1pm*m@ZdmC> zoE~9_vzfVuhcTSfxs7w}+g;?s`rDzkQn8bp)}FAVds7UC2t-X{0oR-Bco2~_d#h>W zvye6YH|K_Q1?L!v#tWPs4FUoK1OkWg_={Cd#dxT8!J08PWcDqqTz)E+EicUsmYCYt zonTtCR?~e#a%0(X%x2!iAfiFyC>}u|Do)>6kn8U6OXL;OAn*ZCbJVsi)kD?WlYL3m z3z*jI`y;V6IO#86%s9?bwVA6^+=DHgs|myvvRJc*5gw^24)*l~8gx2td7)gIEO{Fc{rCwLMA73 z0nfDUT`UXSx^~|4kl4=5H7sCl!P;dDyaI1*N#xUqpY=8eb0_!QS-)pIobU_}c!zkK zft@k}JCT2n#!n8jr)OpQyy>xn4}`eXDxz9%O|ol+yV=QHH{mQAJb+@b@%-{>Pq4Jy zt)8-BaKoUWPg5p88!+PmXiV0@wqg6&DHq8JC%a^(8VWqioH_Tjj%j_uY5t#>czAS9 zjsTbpq-B+Sv*!b2B7OC3Gj3p4V7gH~1^Nie@kT~ldF^{gul!IXgg7{z^`jop=EM)QUy>EKvz+2+79Q-$Nf=Ow* zFJf8@(ByasqYg#8g#+o@Ax0<;nc3n55}#6Ej(g69Qk*E&{&CTxGBe+qiua?sJjsOn za9(v6&{LPD)=kP0tYPMGHhMjah1m5HbO1901m0#n=ieC{xP)Ul)_)Ili^aGzGy5(d z)QnXx)qEI?FsNC^1>A|mgAiBhEwF&1Pf_rkD0AF|0cIS8{><*p%3_?z9P1y-E$kh+ zWY1~TX`$<=p4~Cm0eUycc5{(!7xIKej)!>< zcG=$8JMjb)+a9f{Ph`ykW<|{;bKUeMf$e6(Hb%otwKF$paCzW96HCiY%>;q%nqq_z zW*#tAy^h%ciO6)P>IJxcTjylCsCGpW6nn0_@pLH=Y&UY;B}B!>_%DwKO%!Z9yD_h@W6 zu0PSs(ft*6U3pXKS)Uf-c(doJrnlobiW&DP4({~w40LX=ZGt%WVN7&pwkOBw^wDwb zYE=IQ9h06Q@x%xxv5BKdoUp9>Gz~L>JqH}z)?K~OAun_hizqL;ClcjMkwcEN|(d%GpuJ^SBk~oZIM6~*3uIGA=`%-oGjpft! zwk8-jjGa@9kvOV4Qf?#AXguP={;26cgcYY<<+MN`Bf5s;8j^L(2s};oS)s)}SjTdX zJtADdIef>_AuR2(sM9)9Ow?@k4Y?-uqQ194V4<~h51wuit?IyqY}Th-ET%4o>AK17 zgNVeM%s@isc=oWGJ1gicaP1(Xwcsr7we4A+WPr07?!jTarA!E%A6t0WPVEEQR^8rMCr!*y|d~^?!ImtWB@i!WSN_-gjBvu+4DZR=0Y<}!73^S$2IZ5Tisxd0w&v{an@E$3my_!2*L$8` zP84ES5AakpHIGQwpp(E+^o(H!UWm4}uAkEd1jeeb!hA;v zwI!&{Ojb4Hp~_^af8(M%k6+xmbQ{XUvA`NSgg^+9rUO|~xh@;kqZDnMs5RcY8cTQu~ho(oP2Q>{^X&vi2 zt?ycILg#Af#Eqvd@6+?<)W2MFz08O>1v@yaf2>PLGzi?h+-fup1j*dJY^0wW(PHoTAD+oEHXLKe;S49J6?#TPPBb+c?m}`t}=1a zRd{aA@l!Fio;#bE4G_6dnj!8%ix<_*jxMQeEuwWQd*E#?RRj*|FM3YjG+s~GsCfxm z$M1$=-Vx@!&T?AvWD{XmDeUS9v{-PJa9aN%)g`E2MOv5ZsaL6Nj(Nfp(!A5S22G=X zH!)5;O+hwH0HRdDx}oyULao0;SLLH)D9l-CC z-vetu>`{4f(P5K|Z?r28!lEH3KMDtGFw={5j|mBid&=Qp>MqqNidlL%YU|N5?cC6z zcHicnC@zY3^iTRib%e@9BP#ZNwIAAGxe+<5w( z^_Lw*%M8gTvtSwpfm@j&=taOa^)ox3y zGPpsngg(dgKnI?pFsHt){#tzm=DU-=i@B^WmxwCTl<4*EK~a>qs_6)n&@;n4pt|?4 z{om?P_sLD;yHW-cCvg)?@qsSH*@}@aK`PC#FTVx8SSgAVxrs%qxl_}-$>-yk zrS0wyiVwPfvVJ3laQ|+(sM(%V;)TdVVnZ=wZ?$vM2(xA&(k^Z(#g1`r=eTCKTkSSD z;{DbndN8MPO+0v$%oC&Is>c`_NsMs_i+K9@LF-P~_ncGzU8+yjuqzcp+%z_vY*&oT zHE%raDMHzUDNe}o0AaV$>saI^+(}%e2yj)^@`E15 zl1EJx0&n$3yq@aYofb%}B5DGOvEm2aDo@y{>Y2ATm<`es98=wW(^NQyG}owu?+(?C zfeADOh9;SLI1lNhd;o8xGS$bc8{S#BL%XCUOb|zuC+;Yw^EY6eL348xJ?;iyA-Saq4f5N%ww z0WZphyj6AL0@hLPY|cdSiZeZP_|uM2hhRZwqGzB(5iiS~44gp5Xdp6fMdPruj(RQ* zkQWf>8N)n@K&)99s5&{>cK(r#(nPliVr71kI`rt$RG0cvmN)J*TLpf281^-Y6V_pw2Z08G=R7pT8y zK;)#;+KZmF;QD8bFLZ> z?PR8XP1Q&AAF)t#c$XcU0o&J4j>=O~v7w7a?&KPR}XP1$1uow;F`ZK*B|M zf@Rf{`&Hg_g)~@2$m~{@#i^0%h!7B`juiPgc;AvaF4r_@=d@gN{=5sc1NXn`?hTYKo&e!jRXYxhW~Klo2ml?secEh!3IuY5uXO*(J-<_m}ob!DhffC4bH6QT$yL)E( zDLrE%IVTSXOH%}HBhMpn7HNpgHgkQ7K&T$oVQ8X3i|(LrJj{2&hE1tMYh$d*?Asb< zk~Wa47uKBbh*Ig9E?L$gr5SYzCE$EYb6&&kM{_f#{@LkWrf zn7zr>T(s)Zh>=0W!-LWcBFDo$kT1`B6^A^5tzoJkS~JFQ&B93Rzo};CDSJ;lrxstd z_8KkRvOd;35#Exfuf3a=&)!Ekg+?Gt7Xm%9R+7GUaPRW=WXXwq2L#qs2ih17+Q@4SGuvDk8)gRf=R%VR z9B)aip}_+(2f|Bkof+JAy_aP%z=G(~E*`-7n#aqsN-U!^IDo*Oho9@>;clXRzQmJI zoOB$e2Wwcs79WH`JL`Gzd~TxHGt9g`;?!B3jL~3R;O4^F|}IJU#udWM_A9JcvRz=T`JA%U1>w$M9m08 zEFuxsOg&JMlH1!g=h+ zYG38D3)VC6Xia_3U<<_oR$?0J+n#V;9`0M3Y-^E7i1}PReWRq}SvVmwQQmoYyGbAT z>{@2_iIsrcS97OhPzbw1<5R@bu;+lpMI^S7xTlR%J6PGtT*F9d3~^8E)FQU=@G$cY zrI3!8NEfyHC(e4Hm+5Y{?n=tnQQljPGoA?xvI5`UKp)bi%qPl?h=yHsDZm{*aPkb zcBxP7U`yM!wl3Zpdt1}Tc+zZZCLs^aB^e38K>5(XJHf!6fZklDY2q}ZZMsdjb`&L| zx)neU!?nxK>RML_LMiR7IGrBfF&p+bY^U>=Ty@$-qbZ7n0eRu%iR=4i#L$_`Dn#{f zl1uE$cUic4alh7$HXb~NRb<2mLiy2c6W2;;y7+Mi9~cw%pq$AIE7H1Qi_WD*`TIpu!;=?4&Z|7b=(yZYolR%zG5Oe zG~OJbm%x=fJger&y*C`{skWS_$SK|_dpaPoJ+Tzawl90ahU&iau9O}XBBIUPiUJMJ zBM?|an>}-&ammKH#r6~)#bBr+w;OwQX!Ug zNMH>;Xv3{FfwMS`P3&D@gf7)QPk-j@OwSyC_WSRUm=UTMq8$x!9xa}c*u1TMQAFGt zqsYh@XKCcHIIKT*;hy!qJ2;S;Peo$Qc$iyVifo;4GaE=OCpKbqu)qFIp2_a#~l%Sgk2>3Zff3+L*RPS%PUCFwy3xJ&ib&tf6QK zBs35}*|5BCSi2=Jj_>62qKZJ^XrKb~P~$sxrqc{go%aGh^rStSav20Za9V935BKFz ziVv0}()^`i2X2U`E^a!WnNYl1rhIZ@z7REm9^gUCnnz>h!eIQ!wL@f+#>3o?wQTY% z_G1%^*hZpMa%?@1Y>iz`WuM`>+x8Cd5i_z?y@4)N@JIyu{O-+Aba=zmH_CA$Q zxD{vZ`?gqk|7KD-)0xkB&JkFv39R7_u^bUuv!!~BnTxkBcHX7A)Vov6>7`H_l%1+V z96}GUcWQOEfHkMDI(-$VU8Vognn2)%>jldGUqf8jEkZvCu1E z5$%1CZ@1i|7$^hX3THWZ`J6J(9=ddka1M{w1OnxonjKrZFDzTA66lCh#dYmwhmLk; zjx#C5t`h9(j%tbnx`3Glo`;)i#*SmjO{)7wH9dpw0|M!1Q}H~DsehZ8(+nZey}@cH zh^Xs9#O!G6)xIE7`WUUf)BEX*Xjea^g5TZnupj`ocOFfp`! z7cd7N2QI)hj?-uKe+wTAKYUUF8w|GMj;l=4~V9H2+VeNPE{Pi7M`Gbc~1Q)D_)53xZFb2O!1^)HYa6X zuYbwaId27B2Nu^(?N$}yvZtJ#XC}IQo{#h&`=!6H`ym4+EC&;{rNLe39&Ae&q+DMV z`X9ncr>#0&k%$}|*m9gxi|u~woxvj!0&kc*`2c!=!*b^oY<0*277=Li$o|1~kIAps zQ19#MBkb{%cRKGZpIA=yw~C0G0miD2Vs@aqMc3f%kan_ER^kO|{N`9gWRvgTTwfk5 zb~c~&(4#RLL_{n^Mq@m@kSFr}IgyDjsJ^W)yR^2pHEv_g!u1gmHSWC0LQYORcwINA zJpF7VVr}n0w3hVmFU{_{{S25!8XI-hbvYf{O@uKY92g+k+E4Mt9h-`tfy%b#Nks1{ zmLoE^WPpy&ynwU%nhmZmFt+uG{08h{-|LEwb#6m9vBXsMfXUS16nPQFD{v~11R@>Y zFt}lmCV_DNfb=~D9qtymEqA40Hmu$=|IVz=`_K2di!Z>N+VNTa8HO+BZ7hi7#SSkI z16&BqOjX3B5bM1tA0D@pJ2P_uAJ&rD9qa4ek?KbfC=P6Uv@>((WKfz%dLT$+!%Vf; z;w+BhAvEY2++n<)^SLlT+bUCg^RGSg^__fQo*Cy++^R7^hcHH>d$686C}wZ~P0t)? z)-Wj^W@jFLt(i~hJ+|IgPLUryF|N2v$5DDHM5$D6e-OGe!?SUIkn?#B)`a~Lr;fqc za6^9z1i}@)Z!y_6z#7JQ7J7hSdFA~-&{H2(f4$p2zlBnC#B7uuc&(ASmSC<=(j|5M zFL3Nq7dnTFey+2fJzu@%;`;Kb`#XDE+Zdr6sqURrKag3PUeUKhi>;a=7O*!!gC{DA z(^sA5_9vdMcy3L9hfv;R9_j`N4?S!Dp`*=RXmM*c?>s=~PrhSU|4Q^exa^=v9Xa^3 zS^25XT=a4@Gl0&ZCh^XyZ$sMFe;y~Xs}Rk6x8=<~s{ZGf{#!b7p?QMI63KFJQ1e3E zheaI1eKo~F|Lj6y9X-GSBm%R6>LtrqF!#O>S91U@LUmu_#qT)t50~w{&*J9JFA7mC zPGmxh9$*nUm1;Wzx6P?|iU2Y}&AuZCi~03)`4>Iy=2DD@iPJS#oi;g&@~~WpWlOtD zH>o~{PE<3fNjxuQUkd#f(F0s)uQbJB>^S8mUTnJl{<6qX3~<~jHyL}m!-(9;CCf7J ze9hM1?_Do%b%i4nv%wr}kB-wR6oFNzov*2`x)3K0cJ7(!^X{YfCBDNSWe}ajp`(YU zIC<4+T%~>kD>cCjdk5Rgr=*>#@i>R-6Q!y;k{BkZfPsHh!=D3qBXHW#pIET5)HvLH z(A%zg+jr;JxB0Vrz0d4O+V>X&f2|LH1s(8-z%{m8)%H^p>pXyMZbKW{1k2?0hp)ek| zg*c<`%|euewKRgYOoefv1d3q;X+n}zEK=q?I3FH)aj7Rf;huZYva*3V6%~OY5-rP7 zlQpC;*Ue*9T|#0BI~ZdLQv@Cn5gDo~6MK&aYpeaj;_9`pnjQYJKd3k4^mw zW-q>e{p-El;S>T>9Icrp)o+0G22145xoJk<2GUh_TvZWh^iKo=+sIgp1-!miU=6p) z44jXMHM|^&*%2bnzNb8&zxmHIU%TfM>-qS4I`iCIZao?ykQf{0>(|_l7FS^r+epbp;qC^ua6oj8+97&xrfoFs=Hl!iBASTNfyj`Vdk%RbJ5Lr$Gr+=l zm`7D_TeI-CM5~EtM<-MsUt4+yJ=3A?lVS^n$Q;807O*znU2kHaiB3g;?_mXA)e|Ng z0U?>4L^+L|>_==eWg9nO9aC1$GAJMNruo)6ZrAaX#X#W2(wkJG$T2R=RzI zzOgwp9&396zfsM=OB99$#}Z(tC-iRn7M7hOC2 zwx6qKY5H{@H_tzsRGk?w&X+1Y5`RwjFva;iA_IHiY0o@HMEfQmCCh5wio=h27-lA3 z;YNqeKlrv7W2pK9*LEpiod+Vbjjh2+L1r!>iC3b*HMkzj2<*z-Q>-i&qI)0b|5m@F zJ@dS;JD=$N_=Ivk@d55aPvIf-5~@1~>)8Qx7OE48o+&#Y_MiPR&3t?RntR2^(|^2| z{OC|=x`f$-((EP~=vM4``Y`B0JL;J;xt?!}g;AFxGk0F!F4>f3<^f48AXSfRI)uZ| zsIt5-d4hp`jf!Gs<;+LE^P}(A7pVWb?w9@vi{I}jD?Z8q7HaCBhWAC*lx9wpZ|v^! z(ZfIEWBQ(VTRiQ*{z?2kZYc&ey-rQ1fyCQCCptl32kDAT1RB+45GwDiNhG>Au^EY- zCLWq9i-ZOXW5Wig-B{3*kez&dWKNvvY;0~WA7r$C?w_;46vgdyGq z=W%)D^zxErjr9ynv5s7>YLQ56ti-hMFn0efpZ|Z)WmBK}Cw}Lf^`}qL`A1E=bm1f5 zCWPuo%bnY&2TqGwv3t6rtr!hCs8oyZspn%>AKUzTcdg5FzJcPC>L2$HOK^p5C?`xk zLH*?c1~p}YVg_S8xYJZbM7P+%79PPw7t}Y=o=UtzMB{)kv0(udPeYq2rFh4WVe5bX z8uR>}KEdD<5bq`Dpd)*pu%mz5(8PwTJkeEhAMSL|_VU5*(+B=A|CW#Ko{yu?Ytl#g zdin8Q`XLelr>_!DOY{o+y1^4t=8n?Hs`6AGbZ#m(RF|Eq6L%DXR9#WSC~e>Z{MBgP z12mJSIfK(SK9$QqcAm{t^iRZ^`XV0M!9La`2eg0vb}j%<D}>`DbGgir((3R3>Lt8EUeZa!04$PTd4fUv#-}&H&SU_AHIhXg4a-Xz z1O|rAH%l|C=VtD0^?ZhvF05faz3$MVDy;`Jg40B?R2WY89P6s<*L-6RO{34%Nj7i86Cl#S2TZ zMBq_#eKHel=VUz_OCGgksz3E6kg8AQ*h@UYo{8-3Q=~qIosWHNBFdk;&5$xJ@H-5Gqh?Tto zIx8ds=dqyrU5W6#9^4tD!C7o)rifS**=ElSSrZYFRk|&7G8AIQ*?Iif@bR<3jL6gj zBK42ecSxH(PnYyeH)p*x*&VHq*VinYxv)H$gG;D2_3BQQP!5Qy9XUZJO%T3B&olk| z8MY!lxqR~Tr?X2;f@$gGm(cCY3E@%mQwJF9&<`{X?3;4GW$yf9aevWR`%}aooa&E< z>2u$74j>I^5OnWOpN6;v|8u(1<(jT{TG=Gv7e8ZUFyH#)XSrXqty;>X2jAp#{nf|Q z|IxX>I;k!lT=wjM!-X)w-l-Tw^q^(8Ne@DEJ`TBhKKks?I z-uLTwb4q&e^obUq`02ffZvT3A_o=56vpMKMUkN#W`y8*{fI=YfpxwxL^hF=dJRftO zKf$k{b+Fq%K37}cko&mCvvP2_(_Xzh?4l zKI65-|K}6#`6TYI*SqY_?H_nt-pSpXi}>&e3lf1DK=)P8be!H+r(Yj^zCQMu_Y}Mb z(VHpy_2MEwK9TU!Uv!S0UclcmA2* ztc$2opWyxNdcd4Ll#`U9zG21QMY-?CZo_dw>p6h~3ZZ3(|SdgYP#sKEaDmARnJt z^{F%+b7)W0gVL;*J?@bj#lXb22`28ew4B=nPV6y{|CB!3`So#hel@qgV;6d-UVeO@ zH~zU6dvDZFq_iy)x^IvO>}SvFLEAb3)~hVqEre#*r5-FaEs8x=rehb&r8dl^3_cL__=>V^a-9m(Wv{*2b%w|22VPS z_RQhoujFyhM+GlnVt5jGkYS@M-rwGSb$d?DA#Yt+=tA56B+!8)h3P@sX&birb~o;F zI)3RPlR@xxM<#SV!q0@+cCk}=o4&P9eq`EHDT#G#Ea9=fh^R`%7-8Am3(g@@D3iVlsJEoee7I6K+|9SVUqG zS<@o%FouY_tlIaN_X18KYr?*EpO!=adIgEV8oFkfUiV< zp;h`T-a(5f1f${Ud>CEA6Kakj?Q5b` zeR=3iM+oQfpz4KqBp@a|BkWi&A!4ud%zUltbNT)2?PW(q39oy3e|*E=c`yAD&s6kO zTvpl1SJw10*u;YBBEXHR*UUAMN@Iu--r7{)vSJ!>D`rPnzzBi;=mA21bRkCUhaBrr zMC=zC%|g>!GahEv?W!z9N0fGbC{c>YCf&n64Ifp1A@{JZ98gCb5^)y|fQz)hs zr($qSJwBjlbP9+>K=ccMxHg&~ZWb`r|6=MHzMAwK!*;4=J~QW!#%hr~o+yGX7`iW% zeWC*$^)A5610;c-eE@QltTaJcwKW;Cw9u7yN$;s9RYY`!Gjpa_4|V_Yd0mJ82)un~ z^z?UrOwMJC$Mo!e2$ZI8Hb{ZTTy&;l&}Pr{E>@yLQ`QHY^D}|W_3?ClPmzHxVLuMm z6f-qL7@1?M_0UH7=K1-6271Q$%CRfmiUIaS2oyr5cE;Gdae3$Sl7D^9{Of(s4nCuv z^M2Y+KVIv_H>&^mq;qC}b;HwCkNSq0pIOdlU=2OM(qwk(%;$Ldr;l;!c#7()kR@HMf6YVQFNRE>ue#lwF7~ymyM#3^EMbRs zIx>YJ5{Xbf##`au=_8K~K4<&u{kl$vO7ps}-M_w(_u~`4)0QgBi@dVtJi1U(od^_H z4_!|0dFtcNzh>r{S-f?*=eq9UQty6zGxFCruKy^-F4A~-;Z#ifdNX(#9#%cTSam|? zY_Nh6hG?u>wXZD#YmDKMa3O2zhxWM;WsV=|n%(YvmEzs@>vNW0#hqXL$Mep2Dry2D z1P0h&a{|Hcd)oSZG9@L}sWyj2B^z7cH6VB3jj*1!VT7y7PQo`SrQ(fASXHR(`9y7w^sahF*NQ zqGt_D<>L6A1a9|~(>I>J@%E=6YTj(RyS@9KJYT?keJ_gn>I`1J`FeW}v(^9d8`i%H zA64BK*g-La0|<<8yr#Yf2-QOqJF1_5tn(mD)aUkG0wWCf>0HfhfNsYTP0_E<&(-I4 zG5ZfEN|l#A4GZx;^5YluN%mv5xGb7A>#_?th10ki1-TKYZ|p5pkKg)ZYJI-8-tByS z%A0TX^Bqi9KGWI7(%b%i<{+V!*#lQ(ci}dHM1xkRbtL*SdjN}AN7Ov((aE|M+c<~L zo`ZHbkLV_flk}b>eDETnlZNil~phNFT0vzUprR|xI8-SYts{l=_9r>>^H-hjbdhX=+(L%;= zv}LZCv40MlL!=vq>D!@f7&J=$N`$te9Us^TxWp1BQGC3>= z%}EL*>!iF_Z>&FO>dz6o$(;RW?%egslD>?EUx#o}8ZfoIc_E@lAt#2OFN+3%YlNb9g#BWIRmOchoE(+)*Za7kPJa zwTSIynx&;lvAS5b2NqSn6p11SBOFI_IK5QmOM3<#!lvp#Al`@zv!*M)$>Q@dzdqWj z|JCIx@|ich;*+@_-@yL$>?R-FiJCyvj4)LFX1&haeEw!Wx_%W?&p-2#3Xw&BeEj#v zH!d-IKcaXz=2*NqFUU-LFKFRw|Yly#UOY69J=CQ+;q`_$I-0A&ZWW=3>nYSg@hG^z3lzl$qZwZx2rGSaK86 zTxWdj9qhiwJfH92V_v;RpR#r5VV$18@F&^xb-E}U!8Y6Dw2j~+lAaUU)oa6vaH%ST zs%k{A`|N(^2gq(uNjEn6HE_bibJ@qCK1@d`8jRoP6Rrp<|QhN0VKvXiL%17rAaI==bi)3yV6e0 z8dCMy@i1o&eZ~Cx0_I;IgDN(PJ+rO5zS%jSkom-%n=g;LPisvGi8R-V6WN+0`B}!HF8IDF~ z#AwikW}#`uFo;m&ZElT+x+%Yl`wDV@Uab@L492eIjR*-uTAc|X2{ZtKrp<)+o{Tw2 zU(ZW~`HPL(H!6Ws*^(2!5t8^=lM}fxKnIY2k%yXR4{uO_JOCPiKBoXx9fx|lD5Qp# zNF*dlK-wj>rrv2~1zhSeuk1Vz)8~)sbzCvSGZ%CI=6~7Gq7<9EeAk+-4F56jee#dJv>HT;FG*RzM-P%ku_OSnqiJtv+sb)7e1qtGc(#_ z9x3|k^EqpG3D_3P(@w-n;BPoG%M5AmBV_U6ZFJ!dzKYKApAr?Y)U;Pw^^`^4VB zBg;#Zo6`s$AN0 znw>i7!I^gszxMt3gufp@{NGC<_KGg->7?ZcD|`Rvi9qcj!knAUWheEZ#Ap4V8t=g#LGK6Y^#?GYhCy)D6cH(Zj`C_G`~LIYLD}YuRebIL=)YL<3C%pMuw`h zX3KG>EPGVtQcP5yuv>`Bi?}W{OzE^vB5;?vMoo+BFhI}A%obTQ7-qud^HAn=4+rV) zX%@VzpZ>w#)G?m=p47(*AH&t&*2gP8nf@{Ckj{hKD%SJK2$TU<5eOu54zpB|NQ}`X z)w?1C4|aoyL}xI}Y|&G=cF?XAIW^rEJDFGF@&&eVAUlxPVgRL~OArxiXH@|Ng($@v zJhN15o|$E0YtRKkf2dCMAR@dGvpLiA-OQ^}Y0}l}MdbZV%?Q!ndR6-XOalB<5omlm z%27Q7?-lT>DqhChBb@^Y@G6R*P}K|bS1xldRf`B6+LRs^ky&yRFHjxdTb9X^#3i75 zz+I^So@_xt6R;boHNdGrH8jrLM!jK`XMU7x{P|vF#<>tHMNTf6-8#s-3Z;PAU~^}- zD!1sF(0KuSBShx<7@aG02_2z&_Has+FsBwWOQS;(xAx3|=A;+8CjKOCIa+ga4SS0Y zEjsM*_<-t9U-lxIIa#u(r`jsXf$ zbPyqDmcmG~rb&dvACgL^LIzw!klyLS+n9Uw(Uj)!V{P@|;l z3Mvo!4=Oj%A(sz?>bA*>#2FL~ z@k{$y)i3=UmA_{D$5w|T1LqM4Yz;HZC+uLGrDS&TjlUlsr+VrqnfL?_zk%+H>x&JA z&{58Kq^7M2WKAL?q6g->pgP@b)?9P#+3Rb@=n^iVQT@86P9}s6Bm&REHl{eyhv(vQ z@v`6EN3VXvKexS|Z}ji{uM6RhGRK{cLurP2-l(W%D9cPwgxfuewg;JAapS>q>hk;X z4WB$xLIBGJ~|i6KUY8MuI^FXGe&Ivt!*h-Q!Qetpa{KhyUFulMoZkI$l~#t%57 z2Uy46pr%y>)^QeVWGQAYKC18ee9f=RTAx_-3H<%|6P5p>5W8OL)*NHN(rl2bIv{!m z4MKIR`czDv?aS2GTtXsh&euF-ay+fMO?3zE;-C6(EE$FgLXVq^aq&Z{2;}L0=PXG?`5wO^hxxhQ7eaZkCL&E7YK>_ArG3 zgqfYfVRATJ4s}RsSOpM@MCEHf?1-p%t}j9EJ{Nqj08Ss1Z0_Rul&!oq-~7RR6*?_z zwN-^r3{^LxETUH^idY+G9M?f~3v->;L`{E#20K_$+acq+ole0y>|{iPN3iFhdWr1~ z$2A%$^#{f^1FYc*yOTn6HcpiJnjX=Z6*?_@3xSvN7mIJ+;vC87=xM*8dW`m4k0nd;hH(dUJpv)8k9Mm#O3?rA_o;ciqvFyPdtB1?}UUNus2c`0yCg~ zznP$B6TJZYQ5xK%`uxb?ED~K1Q?<)j5tH&%Q{N(M8sv$CM;1F(bi|%J@y+fZ-;3u= zJNIKI=OdMnS~N&3;Ce$l<~Xsf$ayb!zOMHpqI=P+ii!1(V7CP8`V$Sp>-dSv1&omP z{jes-!;H1C&*$+}JRJk{TFZqvK00vEJN_RYt3IXPotX>IAMAJ01U?de4ZPZ551^NVSra7P|Vn#4CV5k2ere@HdQuQz+(fn zhFY!unF>2dG}dKI*G)qp_9gP8USiCu+Ib~H!YBi>@WRBxn{ANkB~kT{FPl{Kk4 zaTiNxXVt&p>u^7I3n=eLN9?_`?BHIH&Ycoc^<{@HbgP|nxG7Zby{Soa4f0&YPMT9U z!W5}`!4-J{;nC#{K%Jt8Cm=P|}Gb2p{eFs~}3)8D@N zYsYYTC7g~Z2+>zS3RnoFpwSyKjkRh|I!N*0L!Ld!Hh`9U6z$cH4}2y(j!9TB+Z3CO zafQ$-Ax&ktbS7i_<#*ysN#Q1dJnD28-R=~{J9}tUVFm6L;2XfqDN9LTirh!tuM5#} z-s79h-R+*I2ZyJJ&Xl5;z~;{8Y_QoOB70^>?QB(=)c*lh_j2$sx-W!9bZ2ThgmKMT zvU7t~Z!Xr>#?X04^PA*nRP$z5^Nbun8;L!y;M0|#5~Y|Cxtl#R%)Aw6v4%Yn0;j89 zxaZC4?AE6{bCE?VF3%Z1JMWHX?yk%R8BZ12$*67-M#IrCv+s_pir}g}LERmtC`|cE znN!iW%O14k7!o@xJK5JE`?^!pQ-yHELAxax=n^(-W}s$_m(F*D&lc~$>?om_U&{N@ zK7PJ8Yr5TL7?PM2f`bXHeeecer5N57yPabS%7q9y%<*Zp*D9zAaSi=}Yq|o23aGsgL zc*_SF%pUk~gR^4d;2BS>2-R5=kCV3M!uHHU@5yq-tq9d^O%E_Vypug+NS=)bQIj}{ z%bsfb%Z@T<5(iJX@R}E+;aV=vB(AjVN|xX5eiDf;=@eQzi&*m-HytYOEPLP0WvxuIFuec&C`c083Y?JYi&}vR2Xma&$(Hd7h92bSqq_ z+CHZGY)x@M7b;S9A(U#DR~>2GGq~d|TJxJd<8i&lOwdzr_(68x_J-_Rc1v|sny08%4Ov)e%QTE|$2Z}y8j|HQ9R#3v6mMrTT z$DP6kUdp8JMoib~8)E|}@%A+rE9a7C{5V7fZRlLis{QFt(0%{Svu6Af~G8hwEQ zA|hbemn@)-81;1trK*`pl&0Gm&rlaWY!pJz$O8-G1Ly(Ks&35mapt9qUFxRZpk4m~ zz1{4fXmnDZ?;a{tMDnJ9P9QiQrxgdar^a$rRrdjkxMa#s4gh0caQT6K9T)RBCMO^F zIB4w-Cf>!GY>!Kbv^o^BS>)aaj%w=jP19~bOYg#UzwSu z=}?z~XakEG+3tb04BR@u-i(vAnz1ZRj#slm;IcR9nK+`DdTNog@YyZCbTG`!yU=0* z1FWK(Q+4_1Q;zPSLmg4V!stLDvKQqu+qYTonf1jTE9+{vFhqw&!{}24SDjw1LrOBO z90_Y?0y8%kt2R^RxMqwYCN1pqJM}I?0fd$z}ERTo3qVX?4MKOX*hwzr>qd( z(RMQIQYTt%g%Fk_iDJg_)9aIxIy2#PpV6R=3*Jz%c!yi#u~+Ly@p$^ddAEPB%+FARb**~xPViA zJDJf}2sYX6tnPkEQ}oQX@}YZsaOl}H!a?Vd*w}~V&Q#~Ht@3?$XdLY)IYUeW5PV9NAw?DTBgO4B{;1%E^J4KPAw0*C*2o_xPp+! zI?lzS&z@5^XYZSKwI5FVi{%8%cQ2DYCzGd`d-OnlurP-C8dWF8JpZMSpE}jAP}mjL z{VH@uA@VaKg22=wTQ>ZmQ!S4~sGD8}!@<$6c4L2chcI0bQd1V$APXLbsJlQ zF*+No)775o()82c`}FwN%hwF<-19Ks`Htvx3Q{h#It2aFnv6^dq_IZ593#qei1*+X zkqi+10{E=JFnz-hQ6?4a{EfoZj&2|Ffup$r5a81!nRdrWYhWK7kqcar!-(+_XNn|z zQ%K2D@d&;>1e01=~MlRfi1)q%u|>}!WS*(P1;nc&&6GIRRbp3Q7^TFOK*MTgLR zQhgIjg9jqx5Xt~OGaRSNUH9ufY0M5L-cIdi?hWt(u!Vc@!pzkt$65?9lcTbm^O!fe z^G;BvYCaTN)sdk$7ZFw{0E4Sd>PBtxuc)9ARIZ?BV zK=)L$U2_5_j2uUUJ5}c#wl$VEK5VjwBppm_Cy$_armXz04UX6N$E-kSz5nms6Tl8m}MdA)U(pn(I^ zO1Cx8Z#(!%sIg&xIb>8cg|+owaFeZ>1Og|jEH<(08}9)_<;KIq1^+C3<4+C$d%@6d zr+emz`=5Q*2M+JP&+mBPwocTV?lZ##qU(f0G$C%MOzS?8q}ao>JNN$pZJ zATX`dZl3df&PpfwfoPJ0G5{eetVHVyGno>Q2j*g=Nb z#ZG2M#H{I(cnD>V+k~a%V(>yPC!9r~Q(ztspl8hWg%K<4$eIO8bFJzQ89NZ8K^rkD zCNNz$?%s4CrUF|SV2lA4M#D8VW1IO=5D}vR&We;FQ9g{x7{u((U_4mR=zkcx)Na9v z(hSDVTr-|k1>85CiC)>se1=6sk-4}Z>0~H@h`1xt6h>sy=BddWIaldxWo{TNM3OUs zzB0L-;Zk|kG|arAa-cIjnX)44sTpmCVx7|h{Ya)~dBt`Kb6+`Wtv7%Us*?6kM>eh~ zrmGwfKxKZ`ugLMI4sxW(X_>P=&MuXP%if@!>NtDcX>kEy7&WzOJgiW#ZDA(~j*qAn+{fIgdgh&;#+x z7|J0Dfy1TYr0Nld zn5aI4M1$EtMtYr?=9)GA3m!31y?|R0NVHmO7WaoUmlyMSL#$!VX#2u4=hDu3jPVGf zCUKiJ^#?G$J=8aD)PEB1iigp8b>?u-+>0^?iAa?V4)3Ji0OwUNUivzRzW&!m}$@-$gm-Zt?f)#Xi%m6$@{FmCd4EGhP2fMS7}20k1D*=M9^ zU<2ndV7vQ5^@l;jGv=i;I--OTI)sRT?d2tN3}nqje=$RxOW46V9CHa1pUFBs!^tP8 zdXeh0N1b)l*`wwjbFvS;VxKNiKYzSpp5_{&b{Az%^X%bzu9uWyu1z*;%x#ObD0-Cs z@htQ}95bxs=Z1oN5(SU?Nak?pYO~Yf=$D134_m)njxp(Ux3O@>ys9j)sHm%QxCeqI zPGcmnSLXH2oDVG(^S5uE3#NNUz;kmx1mpnAqn$IARdGe9FXM{Db#{sjtQF}KSLhpJ z!(3D9e;P8xHMkaC!d0hZX9X|iVqo#{9JZ)_YwY16J`EG%Me*RLMbEIScDrW(ocfn6 zyAv-&Sn-k3;KAwkqbtWJwlTtSBrclBnm~&YUXJ~U5KV{+7$_5`51}+QEt2h=gx;X$ zL33RgS!*#vHJj-4WM)}SBZ`!%bxiax>pzbc*J6k*Jc2EBsb9$@loB~T(9BHKs?3eaWqTx$zDYrv;`@-k zT&9nKNf2uLNLy2@QPMus+0VV{WBlsb6RWFz#h?R7py_&)uE=U`F$)0{ zKq5+fLk@p}V)cP><{&wV>8bY6^|5(nC-eSi0-M-bi4HyK%;7PVDq^sO@=hi~jt?|> zc45IjW~#m1uyz)2hC?x(%AGuGu8FbgLp7N>gb}*bm!Z5ti))ZLR#RV^VUuLr1Z&y& zfXAO18#=99pM)V=Bo>g^LaTahP7A6JVT#PmZh#iHx)h68UD=6&CVB=#tl=(U6N?z5 zd%|i>?yTtTbf}Fcl?J*b#GDeFHNCBx?mGz8iE>A2))PlmKWPx{UBk1Zvo$jV%pNlH zPHbUU^;x8_C#org{S`gHSxm5vt$muBh&)j&F4SDHM^%q;c?O$EyfYp^qCp^W2E{vw zY1p@{Tdr8@TfM?kTCZs_M%KK6B`k~dY|&<)Jm3T*ff0J7I&1b;K7eIUV6>g&76j+W>$(Ox6rJ~ zt#i#`3ylz>pbpP7x2ypWe3W45rQ$^_e$d?X!SVV6!G2~h39&_>()w+nSH$96G{54l z=h&f%fuXbNed-*N7VSO^wHA-16o_Qu-R>rXEaYZ&YDaauPockE2@DXJhTC5|;4PlP z3pp)eDzfI0Ruf2ReR15Sozg=hYZ8f=Q>ea=CD^cI4QEk4P462GELld22Wyrsso$}$ zfy{7gv@6?Koqr1r7VscaWwAJW;oLN9Hfq*Tnn4?ZHFOpB7#!cpj5rtNR&(e~qVo=> zxF1)mK99sB*u~IX-^3!TN1N@M2!s6y+`6{Em5uMXF8Oty=JjJd6Sa#BZ~&<~(K8Qt zxNi$9=Ccr38+9lWcS)tuC5boMj6uXJS3cFqAfg9YLoS@W_5t)(t5dyB&Rgi1!S)_{ zU}muP6i%MTEFg}nEV}R$zbK+Sx?G5lE zL^8$@&?O`iVkNSsXF8P8*WxiSr`V^SvShk`cWDZN z0ZSV-ZA}Ld7~v7Ds6LN-aR8w@F^`_XM&GG!5c{@XH|M;*Q}wAFp##?#A|EZ00*CsuZl2sjnf!`MKF z@L|vc1QH8<(GIUhi}N^u9h^XuJu@7so|pLuTEuAB*L^DI$+Rw&1;U&s+gMh-nzzz- zv1X&@T+yN%Fb%9=yXH!B-KdG2TkJ!JkaK!t!&!|v<4FwI-daIkv1 zG#$c81kPat%~=-Em}qU=^Mpm!fkt(M^_nTxkyu1%T(3GT**Mi%L`ICDJjJQ#+d(nF zaU@0D>7w>9ljG?=--Q<0^~ zyapRM#ZHT!!6o4Uif?d%EE0muib01W-Utt6FUS_7VWvFWKpUgM*%%F=OZb80yzBGu zHF>x+`9O{{WJXQk0UilluYYB}Bd~=57O;jjbZ(R&aB=IEk+wXLJu^H{-j(Cws6!Di zIwRpRhu(+cu--FIIq_gI!&6@CfR03hqK8uaB!}XuiVhMTi&C8pkw`-wV{{57QSGtN z`2{KsHS{2WA_PE4ihUNPIv4pji`oyVvZ|N**7{Bj(#iB0dKf}4kN_&B)g^J^nrWd1 z^8%>E2wmuz%rlTZ$TjjXmlJd{KD_P;Z<3j3aS+E)+(D>5pQRb5>a7kDxK+qi`3`9D zHmf=RF!sE_(M)$DA+u-Jgf~=u3=z^_|`-L)zR9^qR;K8Z`{^7?YPn2d59@Cn%Qb2@SK{Czy{8l2+R7{Q7ljb z0*OPa8=S=efs?Tojq37%J8=NrgQex|EDr8O;IrJx3~VAW#o@l%9dsL*{e+Id%&(NN z1Gl0@;AZT|yc)#}mT|421JVl=LaB5_2|YmIK$b>_%yIs->gOZ+YIAnR<%_=lz$xq? za2SbsRyS};bzlRDAR|;{MRj6;RJ{SdLSRHd3ADY$sNfL1efRS2_GABM;p{@M(>ooy z{NQdHU04XBFF(`w3OCv};9xr>+GC~5>SfSiIb$=h!VN1o{-M5(IxandYAc#8XoMRT zqyTi3VY+TMUnpc^LGQVxP8iFX8v3RB;piqn56Z@--l1)DqIK%#7bf%pxoEb>-Pv)J zz&vQv9VU0}oj0M1qpUGj0ru?ijdg`jkvQpTXf!yhdS~Uf*pEaaR~4B~^?(kIU8O&9 z6oD}kdyL~wSrg`(suL#>HT}JTiT=%sx%Oo|s)>j|afmpzqq=Y30}o*p*Wk?b>TYM? z>Z?wp5I(HSPEz&y^eiX(dVnz3rs9!+p33n$bb4?e-Bg~*F=pNeQU~myAYA>zoDWVz zHxgE)XrD9~V-OMD8$@P416?|wO2dIb(;SEo9ijg+z-6Ox&Sy@$r%MKMOxFzUW1vA( zaVGD_0D(2tBNPvjJ1h9e56@79HO7XcVP;Aq;=VI7aOO>x@lMM;C8p2>bPD230U}d- z2D2$q`s0DEDtj;MlCGV!xXM-Z<>t?jPAcrpsXdYPO-^jA7dZkTfC7jHwH0A48Vq_S z8EOJL6Rj)7dqeTQ0n!Yjl1oJ*j0b-L2x!)W^XsKabg!&i;0TOy4FU_}VFu>SHET|i zAtW-ynjl`@Yx1YO9S?746Tk?7 zVRgE&fnG;-Zjd#1k$0MN$^!_Da6QUHO_7>Y;IQha2M^&Ea~&dTHjp(7y0E`X2t0(N zst0{@PORf>X@=@Y7~-IwagAlOGni*-1C8n}T#22UHaj#T*&)zoli>vthiejnn4Vvs zdYu}W*6jPD>W6Uvi!~AF*N^I%4jo3A>jV$(WN{cu4aWPlVL`JIr_?4675RF~ji)D0 z-|w`i4ce7;h{Y?XxUQxY2-T^&ueZP$1JzNJm;u!TY?097#W;qT1?Y%KETeHM~KE#?WO`fgZ zNL^Q>(%RL-szp2vuQY0rcEssMMOfQs_Z$adUlR=i*$XnWW(SjPoocs3 zMRA&^uw6AV*UJEV4z@ATX<;6P09!$%zNiVb*l(`uNY$abMXNr=sK`gRb@JemzDRVR zEMGzUv8eix{x0bm)#nY(9E5WfQ7o=~bsk>EKy{)AC=GNdvq9-u&-oP;JqTQ%<~Q;B zOUoi&6x}yy@x(VjRLrb!)c_r{BA${>uC@1HJwlhXUWTX1Y!Sj*X$)1ScOJ?_&)~Ih zhMD_Au&7scY3hN@(sZb1i~+_dI~CLQUP5)EMIuo?M2@=z2kzP$TC*@R2q}b&h&#{7 zRh)hb;wcWh!^{Zp8?tHX$$Fz4ge%KJZ*{sH%EBPF`hEpHKGd~Z2#kp`nX0OQiik7| z*_3a*I)Dw#1_dU>DJlaYF702P3$>TQipt*3>&Pl;(rzuXA0Q~GRR}d4hRvZK;sEU3yzG3s|Q7b#e)wO49 z&Z5C1GRJspPdt6q$~0ug8UhhbAkjNu8%AATx>3I-Y`job)G#_O*PPZpWvQ zOZj-!ojur({a8P>6EMbbpC;12r^=_?jxNPYO#7B(pfgo-i|U}58BVwviKnAOC=CXx z7tyM|7iaK5&gFu+rlsXOO`K5u!kYdar0ONh*j8NO6lG4afpu(T>K~$KFvJu$D(DV) zu;x+KiyDg-a|=VXTj@Z>@{)CPEDEfe(fDrd~!ZpUqL zvyvghL!tx9-*;K*7bsqn;BqrmYc$(0C+-;Qclx#E8*ez`U?%m~u%pq6-g4rb)CmJ< zsf@vcoMKWkoaD}CS*Uep3%D>huXML@nF&3K9L0Ug-$y*(^8inMkPnBHxhyqzeiXpQ z-i?KsV~)}3^F~+DCiYvhp$4E*w0f_cX0)xq{B3L8yM|K!j_HMA^a^ zOVbGbabJ6~dB(=X=`zY>G}#=}v~5Q(ih zy$VA{mlMvaZqR!(7-wMC3^UfW@{xAbrS^P?h$dq6{4)gB+(?<|WUhWhLGQFTg&awt zr_7n~O%75($LVrtsdQFv(Qy+J5Ir=_3h*%cFsZo%lWM_JULHNzY=Gt$oDT%1Abbo0 zn5fH-6eDuX$n{XY^ezLXVPXtiq1UDArD_)1?G4OKeJ4;2gsR%;+G)+N zmnLC)u3eza>9q<`HTNL~2Ii%lTSTbokg@(abEs!#qL+3l?!rkFedbgDo>O1uYO#Y* zotdRMgvHgBoeuRGoNw=1h_#9yRM^SPIVFZQiO1_!#9}moJnZtFT%E?sG}aI}rTSsR zZ175*;;JkL7fgF*m@N{SxubGCyzC7YkvLQ{z%ftQ={t`>O^5J?xswp;b9GuHsuJ0! zx-Sr}$nJ%Um}n7rZm8^Q5$FLz^>ZE9Ah9Kz4}dX_nrp9vPNHU5llr5gK5+txM53>) zIe$B}fNE>GMP8eCV?5hy|bwlML!%ajHkLLkxB z^w$M85s~WOWKL6TXV1LkP9)xLHAT%7>owKOUWN`)h|a2^2WV6$4&V+1w%o6O2d7wW zYgQZ)A`T$zYjV1-zwDscv%G|fw&oZThq2>MZ-8!vZM^+WM9odMMJ%b$RI!dJq9!r8 zLgv6R&FfDqz61EehrG%&ZM*&Uib9|VM5sP_{?_24t!rcoDTfKkXYB2PR0Y2+t9 zt8<_AVH&i0PPntTwRh^+Ol$Xa_u<2SO8-3~&=F|xNXKLML?JZSAuKBf)||)en?Ah8 z8*G%2c_Jd#qI+2HEyl+)HA+$Tu+72UWv*o63CtewfAL19cFhcCogVbe19%w{c}(SR z@E!uiLG=lw+B|#Wxy#(j(uLzJtgBo!*Vv}1n7Fehur?lM&S~~eVYra4>rL$1?Fn2! zOU5=SAJlt;>;*Y9LW_*(8Ypk}M;^-AAnzRQ&51R17pfCm=u$4E7byWNGy8A=PJ9PjY>4a1PxSWagWw%yPes*B3<=Vr^>(_hM~4%q={EnLe0e zCI@Yd22a4op{MnrH&WdqkSU`%+obCEkKy^X(ZwuJSw7jj@F_L4xHHfWrd^S5`n){i z>8Mp1dQDD`|4K}&kXF_CYK8+=ghYf(y{@We1$hfU@>l9@H7&+fQ^>czt#o`@-9wj>t`2!UhvM^Mj{M9+=#K3z&x^u_g)5 z;Xt4?ol)n3;*)@zQQKh)^XrTo?LxGJab^a}oXpj+G!!ko#(p4hul`mx3r*r(FvOj% z6?n{^VUvLt@5bOIs<*3BZFmCNTMVtW(I9a09oF8z7o4<(VP?hCkvSd&QuP=E7!Pxz zdbInyc61+g34lM zcE$&Cetg`^b}}P#^(sV+27$AqE=6DB{b_H5Z6vlZgwa50FiSYEc0`wmW+Ah!xlfDx zj4;5=h3Y$T6Q0nyQF&GN%y5KpmS#A@acB;2oX2528Hvvcay*rl%nzg&> z5XLo^op8*g2xdo~a^w4P(Yrvd%47PUFq_ECKz9afxRB*j2A=#V>rBSSNu02+TPRPN z>zx(Oqx&XzvM*Jiz{Gk!9akwHa^|4A7@)xg+a|VMsJU1%(cj?hU{$VTCcp$O?#2QA z6JguT6q4)84NF+Eq54ItFX3p-IV@K#oyL85zXuNr6L&2a0=wLK981d`XPGhH2|a;V zEi>kwc9GboQ^?fVm3Eav^;C5^$F8*7JXq$ig##F&+yGkv2;fqS(nEQx^3&$r!9j|i zUiH|i8Tt>cy>w5`2bga<<~1LR1bMb?+p~xsw715HoYE9b5-nfX| zX0C^k_%PPIf9#-Js9v$-NrOjYDGwVDCn7DI^O$jQ*x@XC#%zF2AAjrdFdJ-O#atUz zhieuPIE+qERy?~La2HFH<21<{&ebfU7^rHs+s*QlR`r^(S(;OuZQj^DZ0}?tc5k1@ zI#R@oFdoLEFND>V9q0i<*K}xvSDakgk(teb7%iZ!3DrF_WFa1j?=X^`&Io}gU}`m+ zRM}>iBo@#jkVqm_Zw)gS(dt(EHa2gIj))Q#7BE7GjEAZE^)bL{h#2(_xtcpE>!N0D zp~+j@{q3w7HhETc)2_v%xg@OVU%}o_E3{prq{)HYV}|ZaVm**F;`F1+4)USnMorz0 zun-!Nb`wXr&LkQsjI=}J)`rtn8@X-Ru`Mu0G!5?2Y`BjEp|l|!L+dmXAOOOId-%{D z6dd-*cAY8EpaGVwzOPIbfatdXG+s;q2+*_4dIm&$!^%A8Pc}_Nj%DUNI--Qt@eQjy z9xd+02nW!FXxGjs+=W$~Mq-!|eG9lAGcRhQFCtnrXf5IaAw~ykZe4I7Pc{Ngj)#3) z7{miHw?trJFw%Wdvs`26n#Du8lM5J`>js3KT%E4&WLz&JcVuSG1|k-7&6=}l5Ll?% zKC`{&;rPk8;HdNpJ9!@rA{rrLYp|v|RA){9THk;HwlJs}GaL;#`_4n>Yx)BR5V&hj zuRw8lA%T-AA3>WEUgHV3Wggx@gA?Z3GsBd*b1D!u4Hl%Wn%d*DgVPnaKYqI^R0r%DbV;!%LbdN;hyemD+((=0?nuT1bnKkIpjdz-=4n!_`eoN3@eU=o( zBF^G!L`>HgVTr_Xgniw@7+0p9{i>&{-C}36=C+#h$xiNf(Ua!qGCM%v!DTEhJ6Cn= zq6yAb)bFGWGzc`<#sb=jCCj#5p|b(rrRD;%=CC;~FPZCx1vg2gizc{9X~wLZ>$1w_ z7pmMo;hl2oij126*5;9JVoT)~QuRjz4^v+d8)6e1S{8Tg6|Y_y95mM?1KH+DA3$N! zN5s!ai_gSb`|4e0=LqA<6d$WjL0`C64-|Xo@GW@IC&S=5LucbjL;#~C;O}^Z=?({J3=CB z+O;;e1|g*W*%pr4H1nNUid%(ZYL*zI3H?oZQix;mCe5x7xm0d%BUVrrY3(NSeK>wb zDxRS?3_GW=0{5WaL38Sz*zgYB>^ODx2{t|L>Ao=mQh!74s89JO%dEi^)GeVHms-OK zd4VOTBhdk~JNu=+f{D{iX0^t(2XL=|rnnZ4v19KZ=&^I#ZKA{s}I|%$hlAX-FsJf}?Z(7Zvot2%&!qd7UyQDNSqozOF6~#j9 zUOZ#6Z9_5R)m81Si+fIc4tF(2ny}{HozyoR4Wegsh-f2g&LMH@oT5+aADC;G(wfS% z0y(FNZE1NaYjT+n(uWnK*kgt;8VD>Q?YK{MX)vt0cbGYIaLyvOk*cE^4-X)4p~}`0 z_p_Y#Wxwi&Fpt1_JXCWp7L13BXz?U;2`{cXHajrq(zpVP0gfSReHaAj#i*2Op z29HOgoWdq%o+_SfqI$cgeuA6las_sTT@=D)Pgu63zXbF|&AwkYa{D{=z@k=*O}Er6 zRW0}Rw@WlwHdg^}2i^f}fDIJXh91yPr!ifLI|9+D&$B9Y_*r0^MNWHEQNukjaS)b6 z|589&OTowycDM}1u7F6SfKegDiV7Pdp?)Sn%VQw&FM zh>hIb*pI{%AvPmJ&*+da7^yvvL}}2TiiDex<6#bQa_fNuotB*>vLm8|lWNz-!`#9U zojyn;wuC1vwwuz<-Vu6$1&r{@Fd8gmW_v!?a1f8p7>pkb(S%SxU`syla_R`jHs2!N z)J>(#D>=-9KcP3JSx~!5B-0Ag87fMU(WWyB$F@BKdl)-Er=)b zd530cx^gz79gLf7Gv_}o?8(VP>%G z7+pexFxS%54AAyPG%cE%2AvrrL)|BB)%J5YnIXIos}O5l+K-6Q;4I!B8ezNUJhG-g zgmokWEiz<-)?6Pz$6y_0fDwkc76UvRr9mMuK-Mg%4xGof>Zl4hU}A_g*GbI*WX%>1 zC=Tn(=m8F)XYc@GPKiS`i57ueohBp}aWigXk~N9fM~f2()q$JwA}-#p7&wkYSj<%o z63tbfxQeOj?o;mMVN5+P$GFy6r(zmobVy}fgPX91z$DYzYt9jHbV>h` zWvsg*XM>tXWa3J!p)@rEEMdbH`3x-L4d&D`fx}nWIcv_>OcACP>mHY5;~uy|m#Zop zXPRbqq4EGmH7np9Y-f&R#hep?Y@5c;bf`^D4rVvP_QkL$qAQe@f|kqFXr&9&!(=om z5vefA(kKogc*#NtIoFRn_7uIYO-y!+W%McSnkXc8q{{F1C%1D)_J7^k#`uGHvpKyy z*~>!)=NsomCyryRvx-YZQJhl|eJ$~ii_f@PN6GR1IltPMeRwfGZ8US*7TH7_p*s5H zMwqu`qD5n_+p3Ejb6wC%jX)p~c%|ws9LFg<87Ebz4TGUkUwO)0e^!RZzHZkf-k)s~ zw0IG+W{g*kGdqp#V#;i%5Hxm8aL&8xF7$^(GeO&f#q-RL&_Zl=DDZCH({9hn(Db0D?*<2)8d9g3bgkk@vIcF#!npf}Sq zeVKa>9pa%gX;zGQpk3S3s^qs|=^*~`fM}G~Chvo$o>sj?I*TDGD*=NG5B0f!1tGJBLc{`#~b{VD99t*sja*5Xu`DWpr<%I~o~|FvR}W!kR4| z!g!e3)Qk-?^|un|GZXe0#>Z6`GlQz58TuDgXU$Q>M!X?A+N4V{ea<|JdsH9A=FZ8S z8AMie2KQuHC0Zom1@9wTiqNLq$Xv|@L^k?+Ms2WcRrUUefc?!vBL~BKRQCmvtP8v@7O{=o z8*HjhOtETJMMNCN6j>Z(Zkw#v?5Mu4<_&7z1?7`tlZ$Tm=1kxk)eBge#>!&{cuq|^ zWdqGN=UJL!9f7RrKaQuPLkK(pi5;B76le3nV9pz+|&i(HXM<)N9N z=AoU8Q2lb%cVmp_A#3JwkL`*FRo{ftVCG5nbbTYQ+^0YY{WDNgDi?JRIGj69&1sBv zWKBAJ`}7KNkwgexuvz9510<7?Y6Dk+#~YF|VS;i49KrbgIy z+3mWIe2$5WLLW9R$Xu*6SQZE=e!rnRSOXBa)s?^s+ja4bh%-00!Ltm-$ zS;*b#VYRQY-^^^KT7B`^d0JJLC4rk<^r91YrV}jGtKnjnovIVF6=rt^@krl;xs#FM95!&b<5*h0 z8)LLcDe<}}7UmjgP-G@|>SWMM=(OC0^SBFLgT-qW*Anl5#9C%1zEvr&ArfLVTtFae z`WNs)v4hU2CUIM?9%@RXvP)=iEyhR$8nhT;sQP?q4m|Qq?5xBqdk#jJp_={{oj!R+ z?uj(8mU->VrPy3tJ=QbBHMJ-Eq!bZrYmvx^(E(e-dt3|#22J1m`h{TSOzMc-CElh> zYs;|U4fHVUIn2qqrxnMenVZHlU=0rW9_He%k{Y1B3h+7W(*xq(@`Akb9`?5K_V%oI zS3xN48&lW>eugd^O$Gu$fqtL^6HLf^Sh{Z-r8v@OIWH|j;d>Nr=mNm>6w~`FpY=>n;FR< zI&@$aotv818ezkxAR08Yg9mrglI5!HYnHD$n;vfkkvn;|4-FEneNB|cT!%G@Va*6b zWKGs2mMvkD@Va8lEXwV`NXlfp} zhtQx^-QW=fjv~33^OGczw&1`cDb%i4^!N3zp;3L_71{Jfm(FiuV@`oZr0OXSBPO0JlZ{Yo!B$jsOj$u!1yVa2$)_-m+;+YtNHy8}9b|!7>_j37c5NuEwfcO4B9vs}kj#nq#VO#!dq8K1+=KRD{D2>9i3x~0QM{xb>^bL3Lz6>5f zq&$nxjnIP#Cvkns?h~fCh_#wV^$MaUpncZnv1E*a>IF22n*Iit6Ix90{^Iecdix6o zhw=@u$Dm6!QFB9SUOL}i>w$amK=#am@=b1}h=pSG&cjh%htP`Pd>f;I{@sX`=w`a4 z^N!_qc5%448NS)!id1v|z{Q?9ZuG%#=r~z2wR^7=z0V-#kjYtNMGmWs5MQwZhgic0 z4pVg5n|9DWoXuAqO|RI|HuMd5f5DW51V{tZmH^nu=^sA8w6c8;pcCjd1TFxL4g?wB z2o5<{K$;|{*Li^|MZ=zh)vC<<$3XR!)0rp=fy8Hb#!JtTdnhxiY(x+^wTGUXUUoL#f9Fd783nb{&SHq1~x#Aui~ z#-L^g#mt~etk^NvLCpp-Hm8s~lqw?v&#!qFGDKu!jN_TP?hS0zbY_;9I)|apMj&@G zUxY3p^oOi@eXQdxkqD%@_GQfwiKZryHG7{_PjC+3X7mPlVa=y~AV$MJ@<~HEsp)U9 zog}j6T+On_^*dq#CtQ(q|#$!GZ#UK&b zUvmEGIQF#Y}thpC3kZqz=O%tGH#7a~kYS@3PLPP@W z(Ft8%x@50zn6tih*x-!MJHqZ(wbGt=oFEs z@Es`xrX0~Q<{)t@PHp6leV=fg?FsvB+Y{k5j;LNliw<9O?h*H50ik+z zPq4C+7~&)rq8+Wl=3)e92T1XF2<*AJlR-`Y6R?BM2&KV8cvi{?x`eDbk3?xOM2k?J zNUUY<4SMrn<^50y96;8zsy}f19DB^bcz_--WA;2qdD}xf&p*4ML4z?~5E19IjYP5= zE78f6l~?)z+!tp)weet~FH5x&%tSr2uA39bxP+X}__T()LUcD5tZ=UCs^f~&+Kp5b z0a;cy_vJ~LO=7G$yK^uLq;MnYq@J4vO%rPW-fWy;_M5=DPv{o9mTZ7GMoAQ-NoILOB zXb_Qz%<&NKA48dtTIbPbj?HN{!1jm%%9|w7*3_TJNgT41nZ)We8|>7qz|KZ)$7l$} zA=jn3?v2czME9`Mtv0ZN1K7e4BLh(rm?CTPagqpg&6@u6RZD6g^JLk(F}SDZ`J+LX z)^JuZ8eceUt~)rPs;PPMgceVl(}8_zaU%jPHqg##9f|pxL}H4lS;w@dG}x$GI68Z{ zBy8xJ4n>?*JvJzx`sUu(VzSM(#i^L_3M|^!#25#J4Xo7c#|jo}f)@tXaGxa`mJ|yl za%oxXNrp%y5>s4z<5Nz*uF2_{1@6HnPS!NoM43UC5ZI43B$L?+J17l?HKV>|bL%ZVcKHj#)s`gUN8|F?%O~gtZ#STu~sQ>iN-TIF=Y;PUs zvOC*kMfC(NW(TVC5{t-aPr+JEi&NNd$x-3FLKr$|zc*SwY*|xfx2bxk<%-*DZr^sh z1@E-nGd6Ir%!!&)=HA$C?Bj@l2{7dbHZ?(Yw-CDrcXuPE9qQ{r%<23`3m*dJ8!B~iSiIcZQ?|@ z?QK6GY(DOod5?~c%)f`G#Ca5V-sB}8;YJGKlITY0rH*xG^nh~CbJ=YQK{s)Ppwrs6 zD;!ibYA)7vjpLH-3zsi4TRamTLJw*#s_xz(mC8tubOAG~Obwo}Q*{q|H@L}?&cKq_ zI3OdQYnvNb+H=rpIdP_VXJc<=*KH_7&54R7oj~$URM2b^nmSrwEHxg z9du3+_h3(_5E`}1NSvJ=5s;`s|q-(w;MV@zn0VR*}^05j7Ex|d4dzK|8uLP8(*>yB)sZ zg}&Ci1Fv4#$tfA@`!D9peHaeVlz^*k4mFq}>)vAmuSfSITQ}znCo$oGV%$Ij5}ivz zGX?A$XYXj^$au<0;X0ASO?=a>TGy?Ta!(E=`u(Z0;sL?2nW>935f_%c&@))}0 z2^Lam;FV~x=Rsz~G-gK;gYo!Uos9)#7O!Ro3*}Yri9BIY?z#Wv&)<4}?~qTJwvm~u z#X{#`TjrW_u@sYSFT~4sGA|oNJ30{E)u{VwECXc@5*M+y&@_RbLD|BY%yHMz-#FQa z-UFs621vA6!=1yb7a~!Nbo!XN$up}T3eVhY9=qD=KIj&X1{YO#Z;;sNBf2dlZc+Up zrnu9@l`MzW9yq&j_FYt8G(l(JC3ba0+@`o=X}N^$iCb%m2gF7*JIZ1en>d~?Bx(W& z(Iu8ku|2`kj@-6Zn(~zDx7p9qo*cH{%(fRsM1%e4duPXW2bRnPEL|R*w!ENvG|YtV z0l{{jm^fi#hzXvFGpv+3woPo?Hc`yrX4M;ZJ?7-d!N)x9k|;N@fW|~wSr)28^}8T( zlj^hB!ksEdd)_#%HrLR*0<6-XL5cVc?`sk8fSE(N3 zvNy1k8A!BPL}2aM6O?b5EsBXEWp~99ohzh9vrU5s-+)Ejhrr{};2vBSpj4U7=X4!K z1J~ac+0^X$!V4XB(VoA-)p&+N=y}F7tw=ZO2#sfLQv%XNeKF`Wk=tBb98}H*=6otV zs(Sau-aIZ*3LM65w#f(ePtojNvNt+?Ysvt0IxcD%SvtjayuK*w_W12w4 zZgx_|Rda2wAML=PW1_1TY-SnUu9raCzXuo_(FcRDPt+K+Uk~UNn$l_tl4K^j18R7J zeBSZ(fobC%8;(4ZjV5s}-m1Z{`!jvy8SlQ?Pj1KVnH$hlCz_)l!F@x&>S3aIXCFj} z?L&uJvA0zCARJ9jPkH^rVsHNTT_zT63J9fh4|pUCSms>zO8tv&-?oUU>Wx-^s62Ae zz8|-g%ZO+_P7|xrBSL>ll`D4o`Zv*9bl$V{M@09<@_?2$g!Kn!1Ig|tZb6`!*`DZ< zB^x#UJ%a@s&M5+x_d#dSG(&e!1a{2zEV>4P5js?wvX!^Ia8-ko=#FY;D`^oY5S*A- zy?~QwYl<7RIDkN-KUW*o>GEK8iel6kF=}htE}3H>`%)wVff0siB1W(SF<2WSg%2Au zeL9I}HzGzJ>085_t>%1YX?n#C!%n|)CLc=A`WryfTUH#`)d!+RKg zFgbr{U<#KgM6+8Qcum&tHC$pC`8f#6J)L9)J{M8shD1m@+%=GYUoUg%9y2Hv%%dy`4T%3YZf!bgP>80cvqI)V z_9ar~AcLO40o4-(USzIaKqi4hSj7oCeY%u``2ohlY+zs0<9bnb_kbWmX!pR`{hKw_ zVZ%X36jNmdFLF-S^d}eg4s4DwDQ~bcr(MrsAx*w)V9}2XG!oP*!-q7+{j?%a(ZJHUX(r7jO?2?CW9ds2-q0s@Ke% z3Q=rqRouCY-U&D2cI?#Dhq(qq2-Qg`>~m0mktsKo`h)VZ^VoHTt}VPbc(^}Co_v+s z=fR;2SE4pskPvYQaBX9ZY+y}eUVnbG*Gq^>mIHQEeNHz#8&IM;lPfRI0PQ;ErkmSB z!OcT-q$snlXWQVXe4RHubjCYxnVXyQs5mDUm3G{cwl&v1vtsvcwzPB_ofj_O1rmzJ@udq85zGPd;(F+!Kn=AJ|Dx#?XLeH_CzI9u~H zVZZ8-4%H-jfQ6bvm|_8~>a?1DQL&nrD7=fo7NuN;IKp=j+i*kgt=iox!M7sN`;E{;6(9#c>1(nmejX?0fC z^RARHM{%IB?}M5tmB8sJWSpR~K&g<5lj5*OjU38X(G*aw5UID#r%wjlE5S$sBnC)4)j?Gj+B)Cbh&SCLBN{5C9*vf=b*eil!MOMh@aFglqA5WXc|3i~&CAPG&~L+ZzvIEeaYBwj!=7QjQcp zvezdIp%~48-{8p1gESi~=4PuuGZ3m*b|MyD(2DFqMk+mTVz(kN#cJB=j%v;zjg7mc zGHdFeJEs9c^^rHS`=CF(|Wv|E+6UAYh$(^=YGUshf4$iASP*eY4)q2ip z6{SI9X`kk}6n$KrD3u~5?dxqdduRHDz!cZ%FGR%&`bn)=T?hihd(~G)*z~V!ZPeY55iw<~U#c4bfZpqo4^40i= z!z{N*bPsx9-R!_J9%Q+EYRnG$cFc7XJ5^3CS1k36>a0oIwv?xgnmBmKrDL5RPODvz z6)!}KEgh3V?Xq#K28~_Y!h%WW(&dX z+*)B}APH0LhRf~~G7ltUE*D&`gaM$nRwp{QyA5Drn7Xq&zjDV7MR(G%-$tIhF0Y?Q z$tK)qr4WZ~eUP8r(oOSM-2J@eD5=#FOi~eUNe^vz3Jvb8iBeU(PCOOU!(JyYsvcvA z9V_ZLa7yLngAK%~n5u4`ZTs~O(?Cpibp+cbOz6V4%E_Eo5Gt2@hdK2xv~8&EdsN`U zc3-LvYz-Gnv3Y(*^i+#ZfUG%rYOw={>rxKTA%wXGrZ|K#8YEWb&H~o3YEfWI^=weH zHl|Bxkx0?zmIDnErNIDW3^QfT*%%G_-X%;Q$jCyR>_J-F8usaYY#nlGekUJI$Bnl&%@;>3gNsUSJMm}))R?j|LJ|PLQw&TgNRFM zX+97_bld0Y(7@cQRXEu((xiMGxZ7H)bZF6pU$kj33y@@L$)IBliPKtQBSOCjyufq@ zgZ|~g0cu_Wk}4A`MpMnOoctWT)~R_jUeJ`D)#RHsLB@ZN4)$aw4XYeN6Vah9z5S4} z=Y7TB`j{tl0$1eX`PJNrm54MNK<+Vvg*&bdg?P#v8JGE3ZAV>-jCQo=AvdxItGPol z4 zgw9ppf(@m?uqKK9aTfw-vBS&nHrK4#K-5{rlH8}TP2RIUt!Zz$#SPrJcYx3z6=AN8eeJtoTe?vp zwkZvcqSc@4Po|kYA#n9`7NaB3*8^-IYOcf%8f@VK)eAU)F?LmV2@Oivr~X8$UVZ|* z9*4W!tQXdtCB62Ty+b<60|~+C7HYKu9Vt-AP@;1rqmsM7l_eZpW z5}HaZ8LG&n=0vBadv$C;t{QM+_L%G$cRc1|(4iz(@pRRRLwy#teUmcB&kcdhT+Ny$ z*E6tqROK@Dg6hQM(O@kz``>Mab$ zvy?Bi>S(OQ)8l;m&bU3?&|Z5ex;f)vHcz_ufxeS{!Juaz(GjI8VX)pyXaf7O8yykt zwX>r$zl(d;&OI%z?4~*?Q%}Y00WYS^iA<2ood$gFR90GCI_1UeR-ln+Qct?<RHY(@kQJaxxgCaGfhoGB?;P3w>iScpV~(mCV<@eA zPB?&hz~H*hC=h1Fq>3;VBgh4L36~0L( z4h+|fkLES`tY@vnO}0J$!OIs-YqH&$d3I?Yxn^-s5xF{Dy;Y>~@QpfCz34f&yzJTC zHxJ)}jCSSe%|eq}=W!A}r6qIxKzqIeiKux~)w4Up%odqdZK}NP34FRCx-(`wMnqd~-}z;cU)HQuo1dCSGX&_s7MK9KqR z@nxs(Ar~68YY1G4wPtjnZw)K#tf=m$uwIknVTO@GT!`|?whP%C>|91j*dsp7scz7g zDhm;Z^!ETmyd04ya?QlemKhIo3th_63@?L-d^}EJ2N!IUGSNF>#hwSBu0>buo}Agi z!FXCxb@DNLdPhvr1vDt1EDMwE&Z6dpb0XZDnd4#RHqJ+zd9316)N~IXEh}l~@!6d^ z_q0#rC7q2H58%Z})q$Jv4n6Zo^L!)%foJAw240H5t&pqPs6G^nF%w|s2D6L0Yi6R} z*6cjvLUiZ(G!IU;6M;pn;RF)5;Z{7oQ@Fj8DSgcj<{!xQCoW(E`wwkoWab)1!xT7; zP&@yQ&wg}ian>2wEqY*tr(%jbF~NzN*&75_u!B>Gq_?9uIj3CM6QNh3MIvnr6X&pl z&WmTic@JhMnrNSzJI-V803E_60+%mpj`n4)FCuZ+jW#V;1d|p$zzIy)em&LQhc}xY zmFE5Esg>7Ly#z@I>}#2$I?T08=qRM>w69Y%XwlTX)!r@fn0FRlUd-tWlmjFtRlY*t zDqtYZe7t`RZnf|M=8fa>$eGbf69@#_)Fwm0uqJyGoK08hiQ47LO2JJjsEyXOJ6u&m z&7s_!C5F88x?YjZqb3EE1;w#xbr;0heS%acYP-wb>3zw^>Pl(z!fd4U~M&UKrX zx`;^HX}#ZA>K8iFXPTO4egsBY$PIF?^)u;*#k^U;03KIZC^$oV9CmI|@t z(TSzpw)}Y85)%X-LgJhkE~{-Z!CBmaF&28zY@EXfG7*-R&#FF;G1f3U^`85DbcgpM zKG{abp}vLo2R07O9?-4ubQnbZ_OQ33y1`kk{=SEBFZ4{>FxLi6%}MOXMpd3gV_ySV zvxX6j+bs;=Fk*VmPG&A#Z-80)^i2;fuAV6b8L`!&P`w-UfYJ=&p+$#!3H7B~naPP+ zb9nZ2=*&s^)alVzyzf|yb8%aApU``gXNIppuEuwO*qcmTTYCB$o&zUA9dmoG|AAI8 z^zaOJb;rUz8+DSlMtxg;K7eS4e(=s_Pbcd4XmcLjrbPv&)hTRZvU&+aZVUG50VV>a zfD06V*SbDcgnFP7@Lpw{3?e;cVUKn^47!5NsIXkX;#RuR;*DTJ?d^A(vg-`PINr|gU@v>u?Io@k9 z8`PY9HC-xA=0g=b34t)zvFa`$Q|{0+Lo|3=O;CCwb?Sx-)y& z6ZK~Lh8Q7LC(*Y8J5uc~N>ejTnTAHn%G?_?zx`<^wfG)W|Ju*?lRlL>51s5Aqe1sj z(@qfQo}4+>C1h!a8JQ0@*uaC9rIcxoXHXoZ&J*4l9l|CSarPZQhTx-(K8eGhwo?_N z7vV5^U>_&j%N0v8rxsg=*2Y5(A~RJVdy|@6&z(~{lvCGzG^5|#CkdZ~=xjva8lG2k z5~olu5YdhfAXJYKF=pU-OcLOQ8> z0UI@IIE(0um_|*1i#vnlMEOSb>?a2mCkM-oXD<_U4p05_bZPgaGat*$x8oCgC~^u> zaVh(d*qKw$pa(dK^Vnk$xDPL>nftq7j2)c9`@w+SUcNrYsgLQ-H~TO<)w}cjGxw>U zAkft8%udwp7z~<2hs$c%i{?9>(@+MtLq@bdmF%?yWkpI$9nybs_hZi2=Qnk_ zckzw+oo{wyZxOd)&G2mElzqL%T-Wq(RrDv$_GM^l5-r-A{_9aZAmmPWq`GHnx}>_U zMf7cr+ZgFko6X71m7REa*yLD$&v@si^mLt$5VnR&NVNE{L{l0%Wb6Tjh&@o#c{6^0 zhwm8dIdliJ&TG8s!Fb4hr3$*yW)}tz;r{mVN$$G;IT-b+9Bc8bO|dxFiy+29pvr%9`6 zQ8B`PqP${9WY#1ej~3gbf&Q^!l5$XWUFYOTSM2)O`h1-8^_d;|hF*MP_p#LZ zsq?4azj?lWYFKEFRciKpwQeM3BqnHMZSFHhtJw&TJc2y%Uj!#kOWbH_PM(F2Ed z4%;bJ7XcQT++thtC)>*pSYDbn$M05<>Qa4-!ROlZ$#&lJ=;N=xsm?=bu3f;QR%p!} zwksyCz%>gpFCf>`vErdZbE#^1JTzkWvHkj7r#@fb*Yc5Xz{My2`^TOOwdb&bL?Drf zno=o*mus}Snms^Iq5B4j4ovskulj|nauLsS8W&9pVR!xDFYODkU!Bx%AyZ7>eG1pulM`$iTlxQElqYaIf=WLmZfbMFuQ~2ZM)lXle$2n3r_WU7q)xmIH`KE zX5F$daTpsYeRcbF=X;*{g3Q;4n5{mZ{`iFYkH=oL&f)SE!oKduc^uw}FqiEfEb;!( zA;hF&J6VP!7~`eI)b7X8`ux*l=IM35zCEAN@2{%I@dG%&+u(@V0S0(0)i>guuw2t6 zO!27dYZ1KPk9oen(E0j}6nDPC_v3y4M($I)ghaVj)e!J7P^=m@GueFYdGf%4!)JO% zY3{d=5#h4?{hG@N02D#%zTcy?Zy6Y()>6$tdcXlkc&C!5S+m-H^bYO7l9~_<027DF z=Hu%6umAN}QPp~qkLE!c-Uv|)FSUh8xt=;#bS`41I%Lq=WBX| z7viYuHEKSapXm zt{K!sA(#mUo7X)y5U!s_97xdv6gk=Jlcjo&UQ~*RkfCo2cLY6y!^%WHGhWr9H3Y^P zw{>Zny_4v|1Fcj}9k@0RpzkGc1UVEMNlDTgriPh5GWg~hlCca+cv%YvROeLRh5%vT zvnkdNebn$=MPBqtPC#I^V*pSyB6(@6yg7TgJBDU2IcUj*C9Bzo0Jt2`izUnykgU_b z=mkdPGz?aIGr;qyI2+PwUUiI5`xlz3$2c6*L1*gYnEJfu>$chwyZA)=@rurzy*ZsetmZ~0RxRodRF^F`Fka1Wf?;3O+=VOg zXhb9enNn>bC`Wr+pZ3Sv=kq>ao%wqDo{RT5Xy>0F@Bqp;*g;^Jss0eAm`ArjVgZ*| zsyE`k$jb*y;+V=F)I5L5#6`;&;zh;a^VnaX`}rznI*HHw{Q5@SdA~b#$s}twRA(Qu zrbYH`!?F{Tl+lCuF!(U*sb|n3y!GAf@BH(<)l2oJimQ*w^G&#qhc@~W2Y6wyy*3`^ zgl#5EUC2zx6FU-#b<8_$+rB0zuC%Or$y?YqyR$^%&-Kqaaf{m4!2Db3L>7kvoIIa4KgN4v>-jnfYXP(c`Jiqzh?d03A zv|P+Ez)ef+;1L88M{y%MnZfB--FTW?cKJXMo72^)Sb;L&4khWo9Suew^VG+=dd&U0 zJnFUHbFlf@=6cz4^sN3#4`vqx5<_H~wJZN1QOj8J3UmpFYj)giV9Ac^l~Uz< zo+?x4^LzP&`3LO1h`kBB8r9ceiUrjtab>sKiL5znSy(bqyG>#T?pE9xAb7vCQ_uO> zQ(u7A`+j_}`o`bKH}=1ObuOw-JWhHB3;GYa38ldTx`fk34~1aaZdDI3#wwC!Xy{cx zjoE$P_slz=@A>+MFmW2%}Wk7 z4qjY-5H~<^@P;qzA(rz@#4QyEh1x>QCXDGg z-2i7@?WpQUBD$tS_%yOK3u`)qr9k3+qemDGdyp+&sCss!IuPgxCFINj+c6sSl?R-& z&N9zHTEdN|cdE8W!_n}~KK49+_&t6dDaCjE6VAE+{uh4w&&LXuF;*PLJ2-`M4-(xs zQ@G8es<#oD*?q!;%MYd#Y+)M{G&q3H)s@jRFq>od^e6U*&hNbTX^-c#=!kE4|M-ON z40}=YCeUI5PeW@P6Zg5t+hflS4nYY!8S=!|w%MHyVb1}9ix?T^Yd+*`kZ=)^nJ-88 zCOmXZjtA)7U=x=uhMB|BATlBv6k_L4zMsL$b-Am*Y08|;Hs4oHw{@L>42%rP9%O{f zATsnHkohFT%vRH8W|1=*j;_ZR9=nm@A*ph$ZF^G}vlsQudNco~ne*%LRQ)01a-u%) zD2i9-MSVa-4}3{Yfrr-L>1p%BUR-tfHx078zHK@8`lVgk(c06Lums{<6o=$`PPZ%1 zskpl4tnf|yjl8EJD?L(M8*5me6#vu-v{TFMpw$B*5s}UpTPrh9(=oF}H)q??%tEY3 z@@SJapljSO=EbJGz}e`TmY3&#e&%65^OyHpd3SF8Zu$>9O!`#9hXrLXv$%fWn0q3(c!-);W;U%1CiyIUtVj71-bV-cch4b$P zzCd$c`Uktve50IQx;Hy`_aeSZ2iJJX%#16(dXQ94nG#xjE*U<0YTA+}AV z3(IjL^)F%ejz#jp49o1KbGUMuwS4r!d>K2~J3yDnrF3F(D(>^?9{fae?kwh4e5j9e z>*J}uSv?)65U(|-o0w^t80gwo_^8i|P%h|H!mM(&)5#);m-dhYZoX7nG2MWk(nw&oVJnfdf# z7KcYoBbc-qH!Z2|ijRKk3z+}R_|=fSVm zHde5)ITN%cypYA`=Xk&qc3zImEJrmHy9yt}u3sOAU!VVceTZUodCu&`59fV6U6%71 zT9P|?;=KMP%S&!t*|rSXYL--Y_E>VkHgQhhGG+&Om&~%bZG-Lzk09k(ZI=)e?EcCB z+?Rd7p8t9?FTNo?f1u(;r>9III0oqn_T1q0(fNb}xP;C^c`D5h_eMqVvO=)khluXs z)be0#-<(h4&OI+HRoTbeF#~WX z13V;m-UW9?J|WZd-vxmNiMw?Uxi@g>*nP@}ILqYMq|>_b$8+Op$8tOz;ke^oZb!LM z^@JXDJDrX9koiK79=d#LCLiVf_=eo`30}N*f9%FmP&`ceEPN2J z?{hqMxLnW$6QTQLN`8hlw;)(5b0#PUCeL(YCuK1x)yFaT0>Z%^Kig06G`sl7oWhQS zM-*aLvB!9QYH8OS9g!NL`YQtjyqO1q7f_u5P*8k05A)!)SB(^`*ibyMqNCoxM*xD0 z@9D!Adg?NzXP*5H=#OvX?49mac2z0t`lqU%nV7={13r~M0!H`T1{j#!sEjV)ZMgV+ zdx8J`;}vtNMXlbkqshsOyb6M6SjJkGl?c!bQ^vpO?{@CI-C(cvwt4~GGkP@4dum|@ z5Y4xvJ5PjjNhyrH9@d;bn|8Ht7i@^g{cC&DT>dAX5hbb@wO#)Ok1S!Ved0N08WI(V zrGzE$7kE?r6`GuTmyGDMK@A>DD~7@lY(rtx7Xoz(X*Nb`NFdy_wp~ zOehm$>z&NtnLUrHqt|vRdLT4?t!VH_#OQL8gj@@A5-ak;H?zf+ z9ovTMvKw{?B-tB2G-?6DaQe7TQS6?ctCWYgXLT-;kE&REW;B$HNLI!&TqbjONr;lsV* zKTqChqSKGtK7x4s`)V#l)+V#UtuY!X%`7!%kpiiIYbe8-voaGc8tl(|Ha4wkaqTd( z!8$YtJpFjuIki5WV$EonYw^DBe5|9-^PIcOR+*1~(8o*vsbW4#rPKN-g-9d)(Is8j zLove4!$$VNYVMpzn`xZZPVKDaIXn6nR3Gh2>sKYB9U1o2V_F}}KYU#IRnFJ>-b8ul zx+}%cTA>TG=il=pODY zX85GUH#q0x_O&O!dj0C{^Z6Wnqc6T0bN0Nr%p7bSGBCL~EeFgFCXMVsR0PIIlm=6* zBZwTn`cAbiM#EGa#nk6)>ht+;W?H4{<@Cfi^v);uPP490n8Jxs_rs#@eGs6op55|700n3pT+cJ%YQ!qeiixZw6fFljr{#% zb}ItPDoGs1BAS{OBZ$TGs|eWyicy{bime3fWuf@UYc|lZZlgU5ZDh9iw(}I-5P6a0uwZ? zk0oD!_;Tm@Iv4--Pq6@=uC9_d~CtzYhzDlZ}9z|?H}LJ z!#Aty<;SVgm)la76{ZLTtm`Do9NqWquFLf&x8``*q8n>!mtTHdWzpLGFumZ^(Rb`k zeQf{q`8Nl5b$on76Q5*$y!;dcoH97&$SEu4OM_rzb*YO3Pm!(;LrJuqWWT`(`l^H_js7F2vp z91hp{-CF)|zm*H%LU#coqcQdXM4RUP1`^EMNYhlUH4B7lheB7qYR^sE zveMTzZ${_{rK;IW7@pn z4)jkJRHa2MxqN|h9QlmaX8ihC@}K|xTaAXj`}hX-;}f{^MBP3Y=WxX~I8;*}5IBKZ z5)np1NVFK5NW6axXP}K+qh~Is%L6EI#UmMy_-fSYl$V$G#6?Ms9;Z4Y9T+*_QKSsK;TXjfp( zc$k@a9*xjMbX#Yt{IY&oH`t8qsj-2U4lKZUc!02Wh0GkR=i*_D&lnH$WSrmMBC(qx zvuD=3ImQmi$eF?2n_XIb=k(b_Y=Jz|EkaDRPTE>_Y6MnnQxf+1p4vdEic2XT=lAA5V$j} ztwq~+Q1vaUUyQ^tj8zXYQhm7U9Y2qxi7DLmQC z!b0~zC>GH^o>My!eew8;$^|SSu~5@iwC;%r)!UIVbAmC7d~^n7=i`{K&wu~b>oa5G zcCaG!Zw;e`XZ3|{)mvbQZoyHRtJ&LJMWsjQZfSi&MsK+otBwwom~^F)Is%UF^K zY{t|{Y+;B|hoar88R7!YO%H!6AAA1wd7qh?db6JM*?c4K;}f1g?(E!f7R3NV^lor3 zW(^)tokdjy%Ha0XUWM(N%bu3g!sNN`k(sL7%+-(bY5em){~wC}8t;u}?&BN$JD=bk z8(klzDOJWabOBGo0sA-_;2})$!$Vnc>?)UD%$i$;`!K-EFC7y}V2X1%Sf%?;FSu>} z(T{!f`KdnhLB8%cxcG$oqjP`kohp?soU(&cs(0}GREP^Ao@LL#3H=kdAhqh(sw~}D zRot_jw?tl+ua7lfAJ@i7slbT2Nbx>EJG!9$tzFV?@Q%n=yjRSnaB$qg9z zG~g;hdjTZ@#Q_iUGk@ccW9JK;=S6p&?;XDWcfQ%Dz4_xpPjz0|-KcrAW=jJ6>}LYZvz(v1{kL4Qb~E3ZnXIf+MrQW9eTP}Dl{ z*TQHS&!RjCV+UMc<8s8a(~zKAu)0y`6e?S`Ul`exQzbUbuoalFMhwnXV{~EYw!V&u zZs$4go9GLqxjqSrK#RmofUQB7qCw=f!>++$^a8vHZC^w*h?>L;5NOcI`6V_IM{}OTTKLJ2T0uI+7~RUexgq#@qPb%{CnQ_M{3GDKfm{NAA9;o_W>ikT6G#~ zJWVmOubEC=pX<4Ua}zFNibOh@m!@s>wGgAhy+~Y?c@noFvU%EFnIcAOA|i3^ppA@p zvkzGFdj6Z)X3rc5BL^}UTI6^?vDKloAv1`YJ;pFwi}G0-L|7OdQ2jRRQv>5@joqq2 zX@;XA#Z;FbZU@-V;q?SgPKn4nasEk9={}#}O#r2v!1UFDu|2RNOUCvzCB{@F58W_q zXln#c;L}-q(>xy6d?2W%w!Wgjvao}V7!#PP$L7bbyoY7J@;B_1O%XcAQY|Z>I&yFW z2a3Vg@a%Y)8MYjV+-r6};H`HXujhAdB?jX(KR)dRx)xoNzZlw*&w1Kr^T(U^FRnjE zzmG^x`>*-J_ca4qwN@K6?n7oW9!lJIX12&MFnfy8poJu~Mur)x7jS)aZ=$tjfHren zp3tCW90p!rtABPNGQ=L}^t{H^$Miq&dC9qB@EP?kz5%~_?fXdmrK*UW71_L?XYeM% zOb{zNgtdrhGA|Eit5}S48xp#NHC)-ZBkvn>J|ZsnT-JFv^YsPG*Jb~r^ptn@-uXu4 z52h_%P&$H$j{d^|orU!%^jY6NHp#KHqag9co;|ob~5uY zE~tJoTC@oJ+KvXXBzI~wu{P>EfKtTFXx6WfZN5HVeLDS$V(Rm~^={_*r1IlMmb@iK zXz?txHI4d3oBC5=Ff!~5yzaE!8KS`%7jJtH`T9L~QnRC5%AAkq_wmE;-C2BB!KBU1 zVt}Tme;H@jEZoJmy#dd?X4dGR4J;VhF~$KDH_@&n9#P#I4b--HJfewGm8p+o>OWuX z6s;rOi?2)nc(3=dMB*5_fEGtlR_GX<#`@_Sbp!XC$slWFZzhk&Ai6hJ6OJNtHIIB$ z^L!!qt258c#GA}sd_zy4uz!>n2Vd2t%+(Dfx+B$THCJ$~H1@H@BJHMjF{~jy;+UBS z?5)neu7wqcv2n-e?CSF~A0O_HQuO-A*ZGI{k&oHn=FFW_=P<1~g|+ce ze@Zu?HE~&msr5Wv^UgKLJ5N>j?T&BRzjx-N%74Dl^Xo&b6!)<=@$p=IBJ<<2J0}M< z8#Pnw(QdvvR|YFW7};0jDQK8&HhdZ|^JcH7llfdueSubGo>@=FIsUck$9umYd&J)R z>b&aQmvW+}{wlBn@{N8~W#ZXc6cBIS`Lk$Q$zy{IlVsKe5rCq43<5*?^nv!6B74kG z%alS=f$2rDY>XjBoy;yW&C#NN!es2*3I#*qAcZioW+9ras_uvEfvT}^=gLW)r-f7n z3?oD*N$f0Ej4BpEuoktt$J$30LflqHd(o?6e0hJo+dlI)YGyl*=s$?S^@G@Y1f4!H zjix5>CJ4;#3^QMVnS<(WL^ipG^SDdK3Kmpft9tf8@z67t%EcH%T#qgxQJRXgW-4hL ziJN*;pY!?u`~2O%%BiMvKmLH9;C&RL`$n1bMs~Z2L%Gv;7NPnm_KeVuIutMK1`&zu zi#YZ4VW!H|_8>FJzSn-jqY)#+%*f1Z=MQ^Dmlh**pUREyeH5*|i%%dwJ{S4=xTZS& zPoDXBeSG}>$7k~z4`?%U34v)@oh{A4VNK0RG|-+uYJDS5VC%zh4(m0IFx3cLzcsLy z2dt zB$F)7P-b>kJ?IsQ`Q8hyL@s2e1rcFnn7Ka^_T1#`Xknx{h#U{s7@XT^4(~XpnR$v) zcXhaDUeY4b(po!ze&%r3r~RH1AJ_Nse(xwQzL76J;nUiT=xZyw#r%GpMCS$%5dj&{@3_~@5i1y(GjuRxpFTS za4)XJt{oXvX|b*tMBAMHV$i;$V`Iv(Z)+xjo$iJV{& zkJcQx$*;NFn%(N$kN5Bomknm0 zifa9IQvgF;k1KO0Pnc`qX}Ovqcg|Zi#YNSxiw!&Sh@zv93C3EnAt zR?3_rgI^H@P|fdPsUA~R=hkXS$zGut;3r-$ecP#XNu?%pVm%|+aW2@-cAP#n0Z)7kyl2A|*gxGYnu&*B^S z&L>3kZz_9mG|V-zK*-F-8M6h##F5C^>Nc!bWOk|M!AaGVVRq_skzb#m`Pac-&Mn`N zetd#-j|)Y$Pk1@6s6FZs3Lh90KR5K@i!f;(WwO?RbX@ zARr2mu56fGc%y zQ5;xUy&;eURY-7YIn3cy8)%5tyEt_tkY~^(m5v)sY7QGf5Y||Yv{f};3oUpw}B7z zDZl&q*B7o|dj|PG{)GCY6h&j#8`(8m?8puvFhbx;)j3OBcFwM-4~s_+WYtO64qn&U zzR>{`2i$4PP&!{4Lo4%AtgI+=x=-CtF}kz+#mAIi|NGrv`q#&KZ2$T!%2$v%-oZ?T zbp{~>uEh#wgFfqvIX%C9lOqP$6Q|Q zu$2vgc|G+zI-Kvxsm_jG8^CFk817sfi6mqR(G6!%<~DAh@dE9eR%1lcMowW9*UDe@ z?6Wrd;GR0AB-*VGjR(#yoSjwUT)#XjK--y#*_^|(i5_58hV-naG+N&2SJF6Q+_qn@cEsk13%jz1{6#AX-j&Zp9#OOeRZbZO9`_S$i~_0UFp z{-hVWUY2HnrJc+ck$K=1<~g?*ecOo8Gmkml)q|Ni|Co<+etb9g9=;x}-|?-(zJnFh z^==NN&4*zrMh!%T`A|o)@3co!Qgb ztux)CIqWPF4W5QXk_&FO;q2M_Y7XORBHw6vTPO}o-*?=M250e#>2!ZzF+zjDVT5p9 zAv$9B6Lvn{)90tpM|yA3Cv)0!dgW!*p}|1qvhzK2pajuIVpgcW4v7Wp5(_v`a}pzT zXgt(CAmi*Ok@MR3rZ~LgWDgFf%Y(M!gp{%(GxKmw{UQ>X5s7PY zawUY(U_7|i(R@Vz0!An%FvWu|ni*W4`kdd_=U2_VAMdN@v+Y5wP%O4-a5JvY9o@k` zMNC&0<>u}LnPGN*0Rz&y3cj|pyyqk^uYkY!t3h~qri6bVqC)lpq^R$y0HESv- z?XpOmu_X1tzBg#GUu#q|L}DWK&xjYyd|#j1$K6?c?bg@*&im?Los-I9q`G5J(AD?r z@4F52r{naE+ivV;(BhRSpO)WPbb|1Tw9`ksCxF?}YtHjUOua^@`36@1y~p@bUW^N0 z2fISK$4Ti>(lZ!ZTQldxY%!-P7mJlklMR;~(|=rl+qU|*(ALy<-zal*X5O|#dpaM> z;0ri^_2zkO{`k7wulIRT!q&Yu$W7R{;+fP`2im!k53FhNLo%iLVs6JIQMmMr_u;)QaiEzc5*&0|i7$}cw9%mOX`q=V(L1yCe zi?8kJz2}d~?&oONHit+r3@+@N$)3Z#Y($6KXo zb%C}i$$*F#05Uhu$Y!?lzL~C79CSn>cBcr;7@2*ma%V+#;t;0jL4>(|I1Gfds$<3D zuzMh)=E-QWhOC%a)LKTO)l=`b^)W0ynd-f6>~%WONp)`QqBmzHOtD|}qPaF^$qQW` zSjD4#(KUnduxb*+(b13%2O1nMs?!!cq7lx_SYxMA3&`&2O^Lh*(x z59H|w=`cI8J1PwW^ae9G#jAJg`Kb4NGSz#{Iq2GKWC-FF)v^8jUzV&>6L?DX}x_^6{# zv~&IDEraeucVaNRz|t~~6R}p&RW(t=q867O?sU<_@#iCP0FkM|;YIKL;_KeO-ZOpD z#e0J{ow>6?lIu7e6M&BA5+@^Ylka)ml4`%zvU+kj` zKI!UxT)akqT+G)f!SMP(Za~M|?#KU*5sBfY?s6eMrQ8br|)f>IX zsgIgIvHWi;;JM*$BuM7624cH$fu9 zK%uj=GGzYN6;+Thn}B-z|9Sg* zNbFc(iwJ;fN8ps6TwU!LvxB|SV^XY|bJTPpBLhccWfKxRDpyvKX*6V#H8TU0W)J}l zR#f*)&9G*G6BGI1GKm%=3=tK9W&Kwoa?j!9P3LAmt?yYBhnba^zmUafS9Z|Wv}kGu z9csd%+*whZ#%kB6Ih6L8A)^CWTv`?pA=*fT5R036X1!;kSgc%(n8uS{knNvv|6mVo zp+n;X*&zC2YY?tia0pY@r@d+;j~6qf6O%-usfbKul~(m8_J_)s;b^SH z`SHMbfQU$hSQ8PqaUNtzj(ivg5Th=| z!v_{h^T?x{15B`MX+H$PrIe75KY z26xX310sziQ}WO>Mpaa`W2~=x$G)rfHK%etGYw~K>%LfUk2Sq=VUTI;3LDGO)1%*T zKGPIEO^!r8)4&Fn3{4E;$?2ntMTtb-8fRHJc~>#>0;TDY;^vNsm3wER?Vc&bnLKpE zy&o`C+)QfOh)h*DBu|m!tDTL)&&Q+*O}~;|BLk~mHIs~!5{EJaV*i^TI)mbYE*N2G zG+4l`IcpAV8D_|Zz^9*g^~@`U2XbvZMC+6dOb_q$4%=(d-m7vMUJ#;lwen%gd|ZCh zaZWV5m(l(AcWL*a`ovjm;F{@1ER5DdE_849r**h_apT-nbzlcl7NaC^=keky4|l}u z;=m)*v!f2V*;%xhAh3Xj1EGIeeF?}EX$6MJX$Z%+GGEyA6|WG=$xR%e4W6-~zh`i`%yDoBh1ezVGELLX zxa-_woemWnXP$fICH*Z<)m(*3c*hs_c2pkeo7lO3T#8_~q>+96a4MIox?-mD3FYIi zJ;DPH>hz!oNY#^V+6f(jZeXjTzl4Uj@E``FAgY^(slV?@fV*j~2$%p*Rxa)qjY3?C zV?A|4*^l<})}CmifL;AlyhL?nj|pJFz#2$+xG8r9)6>(dr!|Fm3HOj6~ck!~T>Fn@#MwQiQ;Y_M8#b8b>dS|{W7fJ7(!?j zhnKWyYf}F?%P5Uu9<3RAAuihU21jXjZCfi+4t^B7PTAEU&|6s2-&r^TlXi(7upE}e z^0pVC?d&1sY@jwX^RWX2-UWLONU;e`L~sBiaGTH?85s@(?UP#vaUNkov4I(A^6cIX z?i}L$B{sNoIOxKi(3>ewcQ&fagF6j8 zFZWJCmttjWz{_!`>asPh>N%>QfnM6FYbzS$x{cceGVrR2_ z*y)ZC$y(DaWD2!@kMCS?)$VG`oE;r|H6}0esk=1={8p=?Bi93H4k9^E{gr7E1atT_ z+;2xq9<~K0KQpSYr5lE|f$E3q+PA;m-d8rGG2+URflL0@3y*#E=_8+yygreOp2#P} zE!+dAADoP?)Hjtj=r0_2hwh+lWy-fa&Bo!q(VKQ1+=d316*@F6Y_){dqk?C8>Xv)~ zh^|oqdir{%4yh{QDS&r77%(Z#!0h1L(2QTe57G(Ss3B{G$$9&UplsO(^i$dHQ zl%kE%E$9JST*PNR3kpg6b( zmY&>teDLI-8_ukoK40}?=DBQ;pF#L^Kcl$7^YGdO^Z-%wpWI1_?qHbNp!>$^HH$c) zb0ao)7A{XAv2cuDfeD6Ws2*X63pl|fkOC1I55SH7hEQ9k`R7m57BFfGciJ!Knw2)8BA`VQ>By1BMfx_RX9ha^ z+E`9h`TB!+`d9fvhA9O85CB(g5L|Uu-^llyzNp_ohK7E2_YP2GVyAaxg8~{<6{>Zj zYLp1egSjR)PwA+sfDx7j?3VDtQN*;gxn71q0Nm!7;+x(=nCh2eN?&a4hvvk9mnWyT z>wrA$7#w-uidA%iKv8s@`-x|=juL7Dfm9uciuxtXHI+Y@a($ln-maoMDTtFaMy5Y2CcxSwc>Scr!Xr)!vxubGn)S+lqH(n>6MW*IX zoX6e+0<)vo8mwhzmtcuR!yK*&Q&#gN-WCxT?qn^XXK>t|cy-Rs^wEpnHh4T9sVP-d zH3($NM2ko{BT@vKVl@+8cJhjE!^+-KTzC`t?Dcomg-F?aB)7FI_-qk1O@`}r$X(aY zuM`_&J@bNS*F;2|!c>QP?~IA3uDDA1 zL__(by6L_tjHU!(eybqIGd?`i5*tkur`U%OOSKV-n*2j#Fgs{s?R*-~Ol=28_g1rq z&lXX0&D|exCh$7zy7#I|bX4ahfVH|tDSAr0$D#Dpu*k}ovl-^eCvmCm(&o-)?qnf) z=0L{QxZOW^i35=$rIT5z?7YAZHnD+~iXG?raCr+;bR2X6%S+pnxbJ-Q4!M|W0}rbn4P{?h zompLl7ny8NwrOy7#cES?7&~atqW212nuggqHFtdmd2)oA7nmXu$eO3E=FTSGmeRlm zHqkg_^`*~0dN2&&>@@@qAdoeIoI~fJufDv~`q8B2NRW7PNZLT+VGf&xmWzo30Q!S$1>XO7soZDd&y#fnsO$6Tj(j^xhGc&?4 z<&(^(Lwh^(U4a!82W+Apvu3U{H+Sm4rxbDN*vhd>p|&ZFHX^dkt%_oT)1|`AHIJ(9 zp4L@n%5^O0?*bDd*Yi5nHXKiZZz@Xm-oR^&8t>(=ajjohy~n;^?3@RdW;0I zA=oheA+TbWZZMFvt-FG+vZDU+Ph?tq62NL$4X}pxizesH`K{1N-;!eSpcdyWkGb7@ z1Trd*Tbvva8Mf6PY6bt1cIbw-RB!$Aaf(*R1R(O`lQVFP#A(?;_vwY1t) z89~mDpOt|bDuJB>Ff_IgUQn!5RVCjM=Uf?5%R+3meWLrs6jPK{&D2~MRrmEzDwfrs z>f1^EAyaJ#g#JKq0a9AGYgz~bGY9?4h6tp}iQ4V}LmWk50bQd*`gI4?l3(X?At;vZyqX!4#UF8QR#? z97Q4Yhv*x3$mKMR&3mt%U+JzkotZ82Om;S+TSOA?XZ?u|DV3uuF?cqfYHZ|6PsX(j zo7ftRAJK(OJs;ib9G~gH@@=gj+Zb-jGbXx6w}p8D1g5V(@X6~ZeUp256kUBC+Zx-3 zgXNQJ{;_9lK=iz)d-vJk=aGl_sWVJq8YVNIec0DIgoiGy?dvY9yK18}x_?FCgCY`i z1lwy)l398>tCf(B7eaL+g-Gj)gFT>mLB0UcbiD$J4(%N9jYFM9?laN<;(L0Gf!T$ykvGumyC_|3_4UA z!#xi-xj2}(bXABx!mTKuc2fTx3L!OmuuFQq-6;Ys5{Y%(gUmOco|}J{_y7);If<-U z%tJdFD-xrcx$np90hiHW#yPcY>GX>%d(4x$_Pt12h>;;uAyRE(1y@z1eP6;N+e>W6 zs7vj++{v8Npk};Qnql8`Gv^<|RI!+vs9Xs`^&(EGPRv}XF6N*IxX|Y7!W8Q@Euto- zWwDtE@j&8bSj3auBlnDU_CGM)j2B>}c2beWsHVRzsR$$j-Of1Atl*^TNlpEEtl}Xg z7VYD<{><@k;*w*8>bfg-CKv`~P|(#=H`==xWwcLj?MEvl8mx^OqE#Hc%rP?)NCPi0 z&IcCn_3c#o1ejf5FlJb@X|8)ZpCZY@-d4@?bVrQ42g;nRU>Ca<5x9sJ$CKBssw@u` z=Oh-_bEju&HhLa1MA0f$#lfEAwA+wNRgc!xU%(ADtB9Zr7Oku9Qca>XeXZXD_*_$S zcK~D2s++2+Z5ZbI+~6ua3>#X0cc7rkaVyz`b}Cv|Qgcx`ymWd?u#F2A4?;AA`_1_3 z2Tfyg-^JfgsmNANA5@(w=4thyU*TKpb|cwYHqKfmsM6(JlHq3A@6su0Yo0oF4b*kTH$ETu=2k zRg5aKYH4konS@=9T_52H19neUu!b>asmcX37-9`!t_Nb&p`O73Y#`8fscLN;QP-kD zB4tH=-BBcQ01Yl-r(!K4vou{|$z;2tG-#xu%tN`8n+UZBGM_Ze3~Zr8E(vcw-bI&s zW<86X5l3B-r9p@KRPEx>E4vgOQG#}a_M_5K847v}otR4Nk&z7c3 zSC93KnxRpL^p|Gf`o+yIO|QxE^{4fqO_|w?R`x~_D-V|DO^4Z(YW$;LiNP2*c(I6? zL%hZS2T16``8KMomRAJ%E}}D@?ZDoR{=N5+G4Tz+@V1UsIdKwA0RaYBp&edu^jvKL zaygd|zJ1^n65im#G?OunSLvA=szHNPw16W8~!%QB@k7U-kzDw^rwhnCRP-%u*@5gAE876LCY|p*< zFmn%Jw{J#l`fN5bVOw<~k{6a|vR8H>1*)BXho;sHsH6xU!Ms#VdZ>`OT5}~@qZRXPAHneE)BdO`l zL5s|0XTP~N$T=b5>}U|Mh!!&sn6`OM&of@!ych2W4PN7bb@HY;4fp9BHjwBUvDqPv zFjRdM-I8uSimu!?DaTB^v$e2doDvq5! zTbhyn;=rY2iUB%e(51oqFJV4cSI>y5V%0ZBj9IJM$Ak9qNUP03XYlH#S+96hBalcu zUv>ACob6M6YMIbZ0$1ivKC|W)ylyN;^EMU2jT$VfelCW{ng_Bu_dre4XJ1D(2h4TD z#hTi?YdBW`Zq=-Yj|NV+;hSUDmcBH$pxi7 z(qQ(vWu0&bS3}nJ$uhH|ekOFO9EK3fT|yX(TCGGPz(r2u@DqMQWfa3b8KxbJ=%AtZ zqB$`Yn2VAuLqto|!oJ}S)jOTmp{{OVC3ud`h7eYq!VWgEfr!yyjF;E!F*Sh(fkcb* z2-Sx$#ms|add5AvgutFbK6u}4w{>R5AI*uoxap4a4~7s^G*vC2kZ zy1JRLhRE@7gqatXMGl5AwuA939mK%Y`5X_$xt$InFcTr36VpPN>kvf?w~d)`g20vU zmi8Rp*TY)0o3k_49`g`72M_C#wR^*EmS+7~JvfxFmtzA2B6Iw(?3oS?#PG8nA6{I~ zQa#!&VsMT5{GN}yPDaK9n}fy3!##6m(*+%B8Z(1IMD&F)>QX4D4tzOL)3#@?=JBY` zKHvEFP`sz>brf~5?T&%@cG;~bkrQ;&$MNUq=FrD(o-)vAywg?8p-e*u2KN`I%HC8O9Xh+^!23O8Gca>U_1G{|q*cIL z#Se@SX@w-Kfo!I%XJLOorN9f&1<1@bneR3bDaY%bh`|D6X6V8AvO`*bc;|2q5a-ha znd2_yLcXzOv3cX+S6|SqPq`C=wa6v(b{ya7&dJgYq0>Sqfeq0%2#hemLQ9LVBN;@? zt+tDQSVWg{b}_g#xp?d>)*_;3RF88ZLw{-XFP`Tt_K$}dSVSOJV)_VLG&NJ)i7lSK z;h;_JW|^b~5mW4kh|$YqB{o)Kns~k^!~@nJfi;{(i`($ZV>DPoqMfk5yrh1L$o1?} zX>@3j^#_pHk9FKs(|-uJ)nr{hcp;XzJ&Xeg)x`}0iA0M;B9J&!PThFlD^;%zWFR3A zTf`!a&L<=;xO8lGq<`RUSnZh%GSD622{@Jn&LjFRlDyD*?f@=9(Y~BQhidk_WJfW$ zPq#(iHg?hC9F{T2@o>+J9hJ|(B2GNH&r+C}`c!nTu!;S+7a@02f5*6ACIsFECsmKo z7~BAfE~ySNhx#oHafwS*H-LbG0Ml{;CqMwJhN|_^x(dvJa?hL+L$q3DPE7z;8!qy1 znvvB$C$;l3=k7Pw7OLY_1+hhLWkcqQsx1@_Uu4f1|Lkt(9zkd%Da^1Dbm44q7jD)3 za(?A?Sf0O5p`J30NMO~ZS~nnak;vYaLlL5dWm5UdJQR5{t0f1EdnY4pnP{REw11?r zhe8?MBOK=^T^>YhL8*{#(VsYqL=&?VBScMyP#RbCmG<>4(pkLF7z30~N#;wU6pmJ8 zuam|&f_2q_sG3}f*#KQYq8nfpQBxg*z+$ducU6-Zqd}LjgtTl8rD1R-#57tAYWhd$ z5{d^L#ixzL+C7I~exEa^%{j4}b~bg39hHO81K1OIl0j(%C2_%^3YIX(OVuJ7xt#=~r)U5oYul6DRZGa=EYi~)

tP?-$nRF@{FSpXSprbZT=S}6b*+^I{*(hM`4_fQ78lN~|ai_s7zG(FROif(3Q zCl8O`KOTt~4KuqGaXxQb>8_r8VCL}PpyTYMX-FuI4%xua#8u;ACVC2QjZP2FVF7Q8 z77bpZ`pK$Ovb1cfvr$%R7e<2)%nl}wpF8H*iz8wIT|#0V=g|>Lr8IUuSmtn!olQ4* z7(EAFK&$%k#f-{z!-F9r(4d4|%~&<<>(833N!90YgF?71XDH8_=z;2W)rmmjERG_u ziEd#hMi?Sg&qi1=*DVZ@H7zpJc#zT8GZ^Awr<0U^$2W?SaNZ}lY(LUWl>QE!`)m#n`UUMRCRuN`XHu3v>eP# z7TE@dLQzkbUih-2OR=!IV2&HD!22a^8nI;3Ed?$|B$Z*R|W zmsY3nAOgKX&7$he%pqP_GgiB_jBOX@)MBaT7_uUf5@Q^VQ_iL=h24r7k(q0F(6ZS; zF{4YWFH|k%w&j?RXt0VzBIl5$NnEp&x%Z~#x#$ws(BSb)Sbm;&L5E6X{4}h0f`}8? zLN1Xk&l1jK&jIg>=cC2r)2nBmSl+kXA?@S>GIY&@%QOzi5HNAk`F#1Qy;G_OqhZ8! zJr;1jX8t*=<8e(>^GxiJrHGpKR}bZ+7(Hg{v8xw9jn0G5G&7%MU^imrHWXq!)PtIn zF)|>a{jlSA{IFVE!?b0XZ!_~^CK0E0Ub=j5@=%)J)IBkd+&hYhAh#a5YhgT;);B>1 zKhKVw7#@^?J6~1Ukt^KTX>P13A^H&AFdS<4@XQzajdNEuJ+`WM4`oxm@alTL+-F7M z>YaA)IQ6bPe8>*PFLe$b*D74K9ti~YR5){$$lu7`JwdTAI@@HM?f%`nE-!k~ewGS> zMYNedph(Z-1(Ui#i3zv5q5zCv0O|V9-81u8*-g>odIra{IArUbjfx!ifC%glkp{z= zHyvs_nZwyLJ9`NCW_q*LTOy+nv1j5P7dsU4O^@_oJr~#0hruwpndLRx9vBZ(%>ae4 zuP0S+AaQNYS+fUA&U%hZZtJez<)PO@S{T6)Yc+`l97W(CY=mZ4r&Z?I$;M}UUAKrE z%r$HB)ue4b(41M3naIA?+)1H-#pAM63gH&~)oyw)_dHQla0oXc(FODXrBVnqdQh{0 zl=(bY&zOLxH=H`mZ@xO;{zd;8B34CB>iM{`;|h*ebYa~07tVH%)ifc?;% zor*Li5U8&78aPM~A%_uKc~(|0MARh~&QlX&*B#|W%0XRjJCN4>k<`5o$CWov9NpL%0ij=tqA|eu5Gep<)EyHAcds5W}bSp&7Y=BMd z*fJD~9Gt>Zyl8rBK6v652UYGwz%tTM*32H3Xz{AkmKP?(ohqM(z!)8x!+5xZ&GQji zb0@YiOGw;x7q4>KU5H5ixjxOr0VZzZFcK&6cqEDuW&r2#Do)RBj2#@6t7ow=>e3^R z4Yqlo17x%@LUD4ZL0mYh_GBi}4eUqOT>I>ZLe%spN~N+ivraI=WhV!EtIhJ1qtCAQ zaD4p+1EWENJllhJ%$?i}IiH!gB5-yzi1$CBX9(kACSffiGP(A3cN)*!{)goH_y%;r zn^+heND-sUiCh?UDXx9x{wLAxJKCn+CWqDh*K#5-m(e!#?**C@$9HPb$qmAuVZ6ti zoO0K_zH`@Yh18RoW&`l*T+O!h*zz{M$qDCeH2pq2d~x-(C4@^%W8(B-i4Wd2P0EwH>t#+d2XqNNn7CU_%hk%SW7TT>2UDjHck%!0cj0a-PteQsK#BGCL z_~KFl*^6cem#>OT*yF!M1zxfQ9KfX;!1j5WsY`pIvCe9xVa`K+tPwF2Q_D~pn5fTJY-rC zkCR{Lq!6yh_dU}(7I702hmib^Qr@(5T1A7VrvEUS92=th3V|bcRvh0^o!F1Frxs(qCK1S*12GzGWM*u{ z%IpY@Lw3!@^(NaZPM6dO8_&C2@8qnFng)j!H#QTAF*?GfqUerl z_C%C$DCWDJL#of>F374h*F>r=L=7%ZFPZFJ)tsz(SF|CTW(&=P?cdq%#w*2sDg=qJG+<+f`?)&yHP$Y!oEX?&yqE zs)q_|a$E!7Wb1w?2bi!MBugO5(4SPtY#5tFjap_E=YY#jKaWS<**b4PV|Kc?M25q?cQvy2sXm(DHAC1Sa+dW<*xv{lXw*mD!A6DJ}@L;VvcOmt_^ zq46-wH@GeHnqsB;g?PE@7N5pvt#Z%7-HxMZ9lu+5WywcTTMX0=6S5}lc0^N(Qh973 z1kT=l91{;>Ho!JYz|0K};psvb(7l1^7LkalJc0&o%QoIcuHF{hi3d==LEz~%WR8cK zE!I%Z+11-pyqGV=+CTgq_UETwsvL}mc|P_>ljGqL+=<7&iD?ugjEr4IP0H~Bfg~T+ zCH+~NVTw^P;TT=8<>iWjW2^VQJeq~KU63|nCVJ_+b1b?{gBN@J#|4+=dd|zwXH53& zojwiCi=MDkrq2JYQ*vRiX*z~|({1A`hhGbzV?c5u_Z~b&V63-Q82o#f=KslRZyEd1 zflfx|i_^2@`3mx6nD4!CPflk{k%T1 zhLorn(X2;ZGbyMw^|bo$19-VKaA`pCK+LXELaVw5nZ`Iy5-)mRIp>|-8WxAV7@6Ah zZTAUBZ;hGX*X#}sWaeEFkue&;6LvCPzN2#c}!)XXV86N8B3P8Cl(Yl9*?nM!WvdoMP^=wm*G%N{~_!kb;t-s4ie`q zV~J&21hx(|Ju~xQRid{*hwy}85iM@Tiy+4zW^}+7vpf0+Si%mDsf>JHuHI(T;%e@6 z3j}5ZbN#gC_y8_@6VufxT677C7Kxrgip+|Oc%k}Riq!Nvw`>j;#9s3`_n9Lg#e?~Dt$&(d-raoHhL|DBl$XEQ4< z;4u$)b5-wxLpY{7Twq%vIzo9WO@}P&w#0=J9$fE5YKnUhm;s!}DiV?G;Nf8pvK+5YNTwKE%paekFPk@3zcQbN;6W|gbz?$GOU=Jvd*Z>>e zsir|kpoC@@jsAceCigrEJj_>A5*tp~V0eu$e&QzAKhx7E`Iz^8WT2Ygpu4T{C~xP^ zJ8WVVv`A&#o{PB~OlIkfFL^rc9#3J*&9TQU7x!HKU0-q-%6dQNoU{CON%|}6N8;Y) zm+MGfX_T4+s*$KpRMWkmrB8$rrNpq9dGAPrlLJ3JduLa*z`44gNHAO&1%X4kiLE5- z62ozLOn=JU@dWdQXk1tGxXpVk#q#kxo!Ik~+<3ZOUh;HH@)DeO49T0nNlmLuYhy%H zv74)hrmLni(I(E|uZD=p_Og9V1QI%waUnPwG#jq7^F->dXsa-~`#2Kip|!!Z5SL;~!c-jdosK zXI?E&&10QY#lcKf-gCN>`B8lpdliH%m^SPRCVg$_* z56K!$S87P{E&&6jLF8ztP1OOJnK+jaGlx&((WU*75AL+u+%ldumj`$#Hm4tQWU!E_ z2N7|8d>|VvZsyM0+t;j_d*s`CUgn9o5V1e5HM9}toK4z6s%}&VS_GPQt$k8Ku0DXK zr0cGY2X`{%i9n)7A|Z{TOFeTS^-rw^TCEm|W}kLcM~J?_DfT=)YRMZ~HZ!oaJSYbf zV;HZMM(fF1TOCr}AaEEPsslkh%bX`FixJM(^v?v=aGSL~2kylP2W0k)>JDKH!-#Z6 zZ=yw)uv8Q7T+StyRgEy%8t$P*)ej(WTZX7ftW{(>@0Dt|a2$>5gw@=!5>s=kpQ4rH zTk)(+htQ}FWX%|n8_rhD8k{w*DFZo=CpHLNM5xY8{fS)^59m4DDsOY6@7Sf&MdL-- zErg1wIfrEr+Bx;82iQz?(Ur1r?`0ByuLrP=uUQ zB}H-5M_hT)GJaKl)%(I0V$?z)q<~VN_A9RdsVHOwB|=@*1hN~vEBAzO8t$3!l~QQY znd`imjsV#+VJ~uSiZh)kr^ss;+Hnf` zU|K@w0Xy6|R=t5!=34YARRx2OlA=q~L}{>Lp!*`{iy$#ZhiZ1vEwGBjBG%DcL_}bM zw51E3z~Pgb{{tr}-5z z`2dT*tn>eu5BgT;GjsfiR*Jq%?5wO#6Is)$jwB;SL)@3I&L)agJg0m`mn=Rn1S12z zo6QfgvN2n1-03y@h=|Mj+}Tqn(U$OwkHC3U=a?KMWM3XF=&1PSLL391Yx#k~k2KF~qH?wAzc!K`Gt+*2-3~CnU){KXl>klr^4k9jlie>3_V^OYGEYmZ`PiSfq zEgExe@J6mWeg9i{%AH8}Uw1t7gvok7xh7P<9u7@)sOXn{oK9?OP4xHW9FBBab_?NL zUCO>R*B9YBkH(;TD)Ql(NaNvzZ4#eE1S zH(S8XdQZ!=Okh>+G)T-0Fzn0BzMY!#W=>aZ@*tKWaR4Fp2co8JG7_nJQnh~5xJ%KO zYL}LUZN-i1n69quU^RC#urjCqlnKphnhmf}b3yfeNNh;`7jWRVqZL_7E1) zgPN=;O~nw`x!n|>EpErQW4eFv8Ff+xU0pP`Z*-%g=d|TmGAS150!|2|@(Bscv`nn0 z4Kxvvc$XaO5^ly07HT$B5BFtv_uzbKu4H$je_7y4Y#@=?Kq-*8E~^$oGzVf-D%^!B zdKH$@1zgDWTtu_3vfQar2#sBnP9leCGRk$v?7})$+pz;h4a1nMM{N?OLCS(`@nF8| z@9Xk`xpC%3B@$y46c`{e!!U;&Q6UahEW{4pv6jW{$3nn|BrtKMQA7&jvM( zxvoG&Kw!3rX(VE!DiKIDa@CI2o>AGML}~B>^*QcRL_qeDB1WHPUZ*3T{oNcLC?TC4 z4MG?lAa{^EE31L12_zCdW30beW%1x_+}EM^hgK_vjJ0@~+g@>NW^;$qW7Q3ETN}Ta z0tCxIQ$lJ}&541iQrUAU!}P#Yp3<@Rn8eh}_ng68qZb17_SI!0Yzs`glKTZ~LK6NI zz*-aaQrIaAU6BSFfKE)o-ocJjuN`1^2Qvhj<1S@sh8PWvhLmUp3?rEUr7pwAEP4%<(Xrd|P8XXcmrM^R)Kd;x?Ly*cxWSp`FY`A~D1WL;IT1 zrL|kvbLR~rMzcW-3~j_Yxl=LV021q}8`TZ2QGHvpap-IrxV=?*|DLCv+#VgzytAgk z8hQd}R@!(ooE2?NWuvKBN7RI8(h=s^u+VoiHZZW^6b|Sw`X~VlnHm}m3;Q(JJ9Ws- zeTtRN!yNL)BCu{*OuMg5cRlVvPnS(sSu+|bH|c}_oqtSF8CtZ}j8g?$@nFvbQF zCrp;^KE14e0b>k=LskyaBH5P03boy@zm`}=yP=JT){)pjXQyVZQO16zhG7;u9S)ru?Bw2Yd$r%%57u-FPkFE=TM)GLgEJY%~# zjN?WM3hk=;AVC3;0t5;o5JaO|PwZV5DaCFKB-dIPKbia0)^ZRPFCPn?3dr{kZ^2q~ z3W5>~XsU@DVZx@yVH7FSprN`)QZ^!a(avXdGVkUoH$qHXtydMI-G@bFO^|(A5z!~& zR9Nw0E)+AmFLs`hJC{162wh`{5vB+%;DEWNXnWvV{Zp)ES@ixHa}&7n1n@DRilt9dkOGgCys+IX07n>6ej zbtqtfoCDErb!ja#+sq7+ZDy8cnAsIss_a6nt(^>!^1ykNH(1$ea*x5lcsSC3z}8SM zv>F(z9$;*k=QWzK;hNAhU0Pd5R-8+U!@di0h zhQn$_YL8{SYmaUN>cAAxQO4?p;&yb6YL5vVs=#FKbZ~EbWv|v-1IMu#Xpk(iO*VpX zZ65{^k!X+rS^*~?YWh%Vgw3I|giarPQz@wK=oTAdWhbz8Aae~1ZHziJ9%kYPVoF4G z2IB)wo0%}ic^rDf#j|g4?Qm_38A5~Z8_X`SkePSkPMIy%A|eqrFT_cFNOTWDU`^x( zPGNa`Aot_tXwc4y947+35u(w)9o90_gk-zTOt^p#xX~OgHxL+(kOTrJT)?*Cpt>TP zahLRmXUKia3CYF}_%BSglqtZaMwkIa*>y`(q`@V=m#C;sGfu#^%~) zGp0)d$t4I=CoJKFCtOrH#Z+}$F_zfBnmc{Zzmwp;4XhxtG{eLN$Xsti99mwmrn*BA z(LSp=v~iwQcxN=G5z-noIW87C9>N-D`}z|xVFRgpgCI8&S<|05ibs$s6GFsj5V_Fg zVZ=1ToHsDGV+B*WlUSgefz7_$$q~jlfGrF##tX5GUeE1(+N!$=(;{j)qRkVzgehhgm(4t8A(;tA!-xY2$jr5xwkEKKK}{MT2)sU8bKS%yB6lkK zQ*GvIOUmYvRosSFF);ID{X}+0Xfww%gJDWMLv=BQS52ogLD7Sx5VsI8UB7Rhj0BtZeu zU^od8Clb}V0R{wgy$pmB(QuE?Dsb}N6>CjpHeLtr$sRS_p<#-&BUsI-j30)jRlDWP zgj?zfqGTPf39KcaTtn83^2xm((G#W$%bm`XU zy~(55w5I!;g$$(`^wkFvBHDYU^W$MIjEAFP%7={#u_vMIIIoQ!NIiqg2`jK-NB?-J z?~#YQ6c2kq4vf#LZqU@E)>_IC_E4+^hG`Y!)nE(G7c~DO$dhm6a)QP%)1(M#63WB& zY^2gTHFDb2W98Ca{k99p3m`DSSUF+fjvOGFZnOpHp5_>4nW7e$u#W(}m4UuNy9e5c zwfEm4#s~1ucqG#pgBk@QIm}l-0px&AToO9-sI?N+dvpD%A)mS*XES@IL;6F{FdPk= z=1yr*>s^pUn(MPZ#I3LRzMsw5uXC`CYw`2K0Z6V{Y&VxnGYnW5bx40-Ag~`N@L({t zjdK~8A_kW|J-x*_EaC)mPTdFWUW9@1vm&O>w|&RxcDSd!L5t_-cuj4l>7Ijg-N7Q; z=A0r|c5d6B5x1r4RnyF9S30X}4>ZZJXND;e*sAFt&kU9@@%)Li4_F~AZQQ4A0=y9aX(+&fI?@p3e2y)Ute4V*_JYQp$D zgzBu>P`yd^b^0K1q$sU0`J>Y7qoo(Gjn4rkia6z4; z?INIq&3x$X{^>5Cquc-@Y>*L=7-kK@C}1cs>T45A*)alC-dDyR@^!>B*Tf4{?|J6Q z!Y3AUIHiVwh+<8g!B#4j$}QJAvL@@+NulkFxR{*-G&U@mUD!5rz^l7Y&cQLKQ&M?eAjRdlchYdG&`8n0VED#S{Avp(if(!>K@b_#v_C`k>#W~z#Tbsq= z!N4gjsD7GNX-5xSd|^D{m}{`Jq9Ro0BM~DQv=5JSCwD%bXKm(ZkwGQ%c2lE8{KbEi!0P7$Tpcs`fCy5^6(Cx4Zue$Qz@(+g2sRm(R)pP=7{ zyOO-Xsn9ym-aeqpG;VNkDsRO;8I!>`>^#M^Jpw=}z8AQ4Z`fle^CP-)=EYr^vq6KI z0cJ?%g6h`6ipnSeG6N<-PJsli4k2N^ATnE(#-L|%$4SJ)9U4DSkqG-2ntXqUb0_0e zyg%D`uE(QGHF>>PO!v+VNACxT20KqU=6s*fyV>jpac^mc&f~1~&Z-AUd^(u2ok96z z*-3N`Dz|&4L(5%CBu*k-(R**OhKmSH*p3Oa15xo{A3JwrfTkIai0n&DY}<0&IRtJ+ z2#JM-%sxaS5UTI7?ZhONswMK4jGDbKSYDfWH4JbH8%R70=lvC|;Y~Pp3ClH)PV`Uq z4hDiQkj=sZ9&e7zmgcgEhwuQhZ>=FpY@&#>eeB+*vckLeF%` zQ7K|Go>cQDg523SIXYjO1Kc{v^@=B>tr_7ZNRNs+9Yv^41QLP$h#U`(BBNa?RuR$2 z(5|(Ou}4$~Rw|A$E^qv7*3$;w>WI#S>+E)4RP1Eb^sgZ>z-Ff?2bNI^j5&VeF+P=C zFEeWeU488}c_4cUr|js@j5s%CTUx^MQr=hup3b((u;Ls7Q*39BA3*tlr-ity=7ngn z_XaJp=4DYVFwqf9%Wk&pc{TM%OIWSwp9#=nWhYbZu0puR5uKJJ2kmweE~3p;KJBD) z=Gym?VLRL-CdYKijZMmg8}~dt`j`XT9yAqLvg}IBE?_lRo{MG|*5%Uc#W z7%Q&EZ<48hbGo`o?j#m6GjIS+w4<2^>H1rrMXcSrFdpVifHc>>@h~%D)S>Y(-P68! zaeX?|ipS23*Kdg@4pvGP5w>1={w_QTU4WH#Iy>r1gE0o!^$v61$eItV|AbVz*3lVWE9^7aSn?~H#%nowgp+}>9 zW6sT?qnZ;DDq{r4Sioo?&QG&BDf4{XH{08Q0^`V!PR0VGV+`>DXXA zOd?6OP0i319cYkP#p0Y6FzV3Y{N5X^Wggu#LS$>p_}amEnAg@McKYrd8w|R|4pR?c znFn+u7ArO@Mi`*&D+EF39xuGxHf2s?>UJBGiykO%KASf`aJ$pRXl%U{F^xcAp*lw#!x9$s;u{|zNDJLrX0?!?$lQ@d?X&7OMFxSMmCcC6EZ(>m^YF29OJDjAuBOE2h+|UqhjBqM7?^d<4Ba$et-xcd%Osk7#tS@H`xCDt3!eW_G~~eVgr~>A~#6w*KOP zKruiduwq~PriffO8#r}gZFyVo35nSe0#Cpc8))!6yb#+su+^csHP`b3I?gf+Og0di zikq5NHes%D$8PClnNzfKyXGGEcz?mUjplGSh)|mCiGd|H*+KUKq5DP>xoWz1FwBH- zLAEo4c9Lf^@N~>>4I*YvNR%U-A0No>Os~saI5@kf5mQTVicI%#GdRMH_`sCVmx#FsKFWz;t*yJc_JTn+zGUJI|OFuU=d|U_2_`D z17-&%vkO9IOnN7+NfrZhZP0lSrmH#LlcTzY%+)o=T=K#@ZD-CL5URILL}uQ1_i>F0 ztWMEj4R3(3?H(M)G6LO${)u9d1P^qS_efQ%oBJ3rBb=Hu|%-^Xw8X< z%J3%oXGbVTcv+4!P;Ph%9M`Qv{S;Fdl$CWX!P0bfHpopp%|+>j-oEDTkm$8A6QB_0 zx`QVmchZMZz2^y`Z^^PH)Ab~Br#qA5)hV-EGcU|_YOdQz%z7*t;M;&TbU|j{SaFap z>fGQWUZ^^e=%k9m6Yg`*o%2}PNr4{Vov?`~=Yy6l=~9+P_XPr*cylLQ5S!~d#rAZ$ zbFzskE+X++?qt3kn^?rN3qi6wGY_UHCy;nYw|i_+CO+KlE1%J6Pq?8Nt#meUu41DH zSK2vcC$q(ika+SEvxe=LsO}t)=+atg^cMo%1j-X8ct?y;=3oWIothUZ-m%!XP2z40 zjE65o;Q81C=!jC4aEHc`H^KqDu;#Ci7sg8DE`bKc!o*?hU}k|taZo))qBD<2yG z>Cw!)V7kO?#A(ZnvA3o2$b?(Nt8?>u2i2Q2#=(|)v~+5w{{D2ehM>@`;VQ(OkL<;TyD&8Y#u&$l`Ao;&$StN`Z% z_Gt5BVarA>%EFG26+7=f_Dng)9zRmjC;z6BNrW=d#Y8SO3^4GDVatKXY-ksq4OQx^ zLFRDf#qQts^5NaR@BYle+kx8~>qL76A^7MZ869LeWzE1GMD`qK7Vk`n@kNnT?I6yb zH1Zn`6Pvzk}14=X_0n)`aTw*l63engxt-FM1~DGq9;POeqRGu3~vSEDm$(kIWOfyd?To<*Moril&0Y*uVl3 zC$S$ws$I)PAq84&;kfERAgUhy)G#G%)3DSWu3Au?2rNqL=#a|$F2&S(P5&aM2>p|( z>82@CN~;oy#45(P26xVB6I0mCoe>V;Xw6wiot;=(CY+lIqBCVR)gDEvZn1&}p?E~W^aST0aQWdBGXj$k?W?r?Gc5D znz;u`aYX+cbyBzipAnviMEjPV=#{erCY>*QS_PFGXrTv(XM=P4cbvkbs!vQT?G!V% zUyU@^j0a)?Ez(?j24SviHB;5wsyl@7FeMr!&Z3hjTUjcF(Ci{{s3y^a*obZiV{{#C z6ocdT{dOc4YXXs$mvSfjE_+H2v3x@H86<_sBb`>Vt9p4!^)3x+P(ynGrmX<8-CeMV z)@;ueR1Fv|@NyW|pt03nZ~?C=lbuTKJ`#&TgWzvVyuCh|&BQEs7m&IKRS}MLK)PtSCV@ zTPM3k!+TETxnd1)`AMF-b9SgyI;&OdT$x+KZsC|IPT|QGJswZy$$i~JU7XV2BGJw% z=X1SB7=`x8!9Fe`&^=XI8xNzk=+nXuZ?%O-(0bf&Phx4=ql!ReZ|69tiiIVWb^UMT z2#)ylU9pXmORuuRcB4A6mYE)><5F}?1_n5X#lyKHBND?`4~;zCJ*ro*ibWBPi2Wh@ z?yNd`FM@4fl1JfR za4|WBu%S!ut7ycjc;lWCPf!J0NNL(pL|)96{!j&A@B&`w1cA9Cya zznmU^Bt}uu=#PqpwYCk|8`iF>_ow0+(yHni>QzfCJAz_V$LLa)X1MFaXN$GSg|)HD z4q*|8(dHvbj$eT(77my8?MN+ND+0TVPptb;_2uR zPGM(GD^;clE-WqUUn-weXU$wU&Eq^8Od=$*=1$}sf|v|AxB2gNw)=aUe zIu>*DQEcHv%|yB<-4uaLUCQZd;x;@~v*C&y8%qq(&gmX^8hC{HfcAu4v&ZmaGjuxIt;*eNJ( zEI;*T-02oX#X7lzQ~IBbM9*NTx!M#GWT zj=4Upy1_!t23Be|D+o*xxo#@%Y$mMFX^gI8)70CTBKGOw1Ch;5r(;`nAdnu{vsO;OoU``AlumU9Qld*c=R8L-{PIDUU zuM;aEn5NjEwtE6B1_~nr)u3N@uUz!5XAaMrlh+SQ(%sLDSdHu zq_=QG#ZI0;ao8udX|AFA0Pd-25HzPPIqpkCYpSEBzi$VJ5E}i@l6eR_SgAReI|2L0!vjYVHQiB&i0SHms@HKJ`T~oa zxwE3WLUn_z`4o{@J#ipkgmsUMU#xm6`u46J27@G{lsaTcRtn)_l+|IW(lbXRppxTt(my*Q@{QuVYZBQj3yw0-^aoNjAw zRauCS@~kKAa?mYUbDP9%H4^|X0B67%aN6n$psCy-w)3!O;2Bp?2N*C-!@6+v?3_s8 znSCOC{2hN&_kavOGnYt}>sTWQtC) z)c&ySW?iLdxdh9Fu#|_-S<&%?{Ug%8Eizsj)8F%`+NSOC$5u6qn)mFo49F%?RdEQp z#+p7UCwiKUw_2w+GWtU3KDg8KT{;FEIEM`sGlTBa)Ozk*uX+(Ja-YIjb>^C}{w~>d zeol$fFoJWKVjGDoRWH|^MzscqiA7eC!a5@VZlV4dNgE~ z=7EUOAwphs(6+ zu9V&YB!e5U3~$K9CBqvMajM!kT(oT%y%1g>FqKWYG&!9P?;w$$+Jl>FlS2xYkN{5o zT#3$(uqV7OpV~7?#4r;c#u$mnP|aaPBg%=+(28iiHC>7RM5jZV4AnRFoiacOiSEhW znVI89aMEbFhOrKL+92X#+$$yC0g2hsT8xHGv(Q*}xEpkzwhS{T@!^!NC+{w6` zrKQqO@!gk$L#prCH6u zhU$k@ryVQk8FUGU3^1Py7*$kvN1ouQiy||-H;9`47B6&BMzM;>)m+2|5*sy3ma*+D zuB_R>g4s@onusZ^<18M)0!BDw@qCM{nPcYqTh`RSHr>~m86SGe>7v@xan-BJ93)<} z#Nvquci@!jP`!au*g@6|MVmEqFOBMznpa^JCvgs0vtX`?m*GE&V~9CqzG2NVyxRhG zg}_nFoUobmCju>Q$4hXZ>J}nmG0(4OO@9w?7Ei0m{`D7(4_mf`TM)QN{V`zb)k=UH z)S!muL?GvMMSERw!>fP~#0SEy>3f_oD)?qMpg;$Z?~(dN7o`;TJ~Z+_(x)tZ=sQ1Q z$M&hkR3^rDVn!T6wqMq6bk)vw%aZ~4sbo6iJ-+#aCstpvLi2S4oP+>_iE!}vw($)P zn*l4vPquC%s-U*{vPGYYnGhhv6#bX>Ps!9X`GoNlCbsqWXq4;R_~?n6bu_N%E^+Qi zmPY^J;6Tq{Jg2!Q&f;1OakSm$IwJ2jS+@QX|KI( z#Q_vuzJIBNEMZY}$>y1{+CX50L1_j;_NI<5o*d{*W>XDHYXWGkM;iospt}1)C-e4e z(iR@c)W0UJj|cezysOmz1S}#l4=hCN56c>NMy8xS#P;X~NR&5H|F(&6H-m^4M^(pQ zG*mwtw)Xk3${3?TAjd`w#^E{o7qN*0`cLb1_Q_6WF~9`R#b8c{RF8&j2JXepxCsNC zLSk&t1P*JQRUFozrFx)eh9lgCb9i#iVI&ee7~^_89;eXM^apMhUVyVTFF$4H6!sjd z+_dcqyaqe&)FFrT3_65EHM?_KRlV3p-W68*Mk)ixC+3>Do(5B0!b`AXt~*xL_YBfJ zay~Jf)5wng6aj5bsy^$ehf?Nh?wm#95Ec=*!D$<+kJg0#91J>iXnGhssyC1rV#B7m zf|{I(uv~K^+U-~ETpKr@E+V1Gso9A~ehX&U{zrwtwT zYrqYrz1ZoKZ6+fzWyFshP85+J{E*xvsm7BFUJ^6Bh` zaXUG4E9z?WbzvdM*zw)&$R$yPWhr9)tZdlRlt{a>hg4jm7X$3A#&Hj&jg9ANd%%M=RhJ%6Qi!3jhV~QHY zNcF&dmLn!I*E5Uy7Z|ALLJSRHA7T%VH zrUh^?FwObfHgXa<1vp@^Px2x_VEP0d-jEElLBmt>0u9WDnR9kCme_%gqGI1P?Gf~J z6J*%KWa^l`M`B_-oxtQ$mo&r_WDGh~n#`=L4@8F6q*K*8+#)6309Qe%z6Go3ts;#FZ9Kl1 zp-Xbfqha=t+j+KTK~&u1gfMX;MuP<$!W7qK&Zrip=(DE3G71?~guebM0%@+}pl?y@UiYj+A`C_Y z1j1bB5eS@8y@OK-b1e-H;OI)1^b8g-LU{@q_#idw4>HA_b6UiC7d5yCPr%|nEh4e1 zdR6X3I+_^b9w9LA^zsrC)^mrkm*TwYKwy8aR&)pp9+&sHQ!(-`gq6+;FGFGnsrrQ% zU3@3iEoK6Q>J{6|VPxov9FAs#m7VeOJ9(#NTZK^O^vtg70wdLl9jsutrs+ZEi*Q{{ zZ$2ChZ&fG8 zHCdB$+QD-hN4lL|yB$$;sAhl-9IQFw&f}+8e%|E^dT{wDckZm|p3s=YXCJ$t+)ym!zB{ z0TfMEs_Ka)EWW>9osZH`ZsW4-FDkS;G%NMRz3Z@g^JCz!d#)B8>>0hV>Y6!i;9Si{ z+!riWBwCEIh=hw?7*iYht>(vXhKDBm&c1)t_N_9=B#@M8tXh z;Vwkq+P$%ivo9no=Dy;ln(mWjJ=38(d$5!zcAAJ&y)ASpOJl>P29HFHt{?LUSZp_^ zRsjWqMmqBA*8s2J%8g2D^O#8klZC z2Kz*ZHxRvivuPH!h76Q*$z)8Y-O1c(4NA>VVG}@`2`IKwe4`;tI5vQHK)ej>2 zx`ajS$61`)aQBnUdC*32&uY&&qeB%9+M50~MN#o#u;&RInd?(*H=pHfjuCxYH%w z(|uQZK>rQb>3lkmK>5a^{#8upww^thiLhG}$4rWWcj|q*{YJ;ijor>pMO(2w$%y;v zmaw6+m^m;ZkaKD=#sGnPRnJ6NrP(}E@kTdbh3&Rx-*>Q5ljuw}jtt&t4yDbq-tJAH^#qHj8>*zP_pSIu!3j+pxvi%rdEfE(5gV%iA+ zxowZbg1|GGo?Z>BUuAm1B=maTxZG?kXT5F7ThHx7vzcKkmuoKxcJ*do^PxlK^go+1 zn{CXH5szY1X3ig8WMH+vBx3}mUL@Fp%3{=QtV}u3Ot8+y)r|3i_`04%JLwWSH>&sE)N}^OOx*+4v40yL)rIUq1|Gx|ffn0$ z&p+5=H0VA}d(}<~{V{$KN`pN&GF!Y}MD&sQq+#X@^{?jB4dO`{1T8LmLQK_$KN8O3 zcSC&oT+HTV)0#+vi2EY+cgfOnJbLHop5_S~8RFP#WMp&n10ZnGO+y%Au#g$p!UKJo zsWd}#A7Ky0XrSF=y3{kng|pAi`TVp{n(l?M^`a-cqEDHyKgYxKIUd3qLUpzp*mFR8 zs-4aZRByWwEKQ36&JPYW|L_x;cGArIAiF_q#>^?l`L+?U%u3shx=*}$(n?Vy#33g$ zNwoVYy%`-HhxjITM-!@m+eh3?tMBmiHfIVizuE^N?@rqP6tRX*il=+ z6J$G6EuK(Wg%9??tq;8)lwv3|duAweL1xAy2sG)eRsD{s-MR(^bd3%udb(XwjmxKwzT!8S&iX z2{ATX;cmUP~fhq3Uc$bTK;T$>>E*%?RoZML)b}n(uokc#%!6ik; zCGQ*4T+hXFg2*hDsmixRnkYLu7u&g9+_8;ZUJ{trbSsSPHYZ*pmk=!9hd{irYEfk0 zeMr??s)s0U5cu$+jFLg~#CIx!UZ&IFPW=<%f-ao0w2Z`Zjt>Ohg?nah@O+ss!!iQb zVu0R;>c=4~38v1Q$F@o^8$%tq528sh{WQ%P!?oI zRGm7){aZr^Pw)2qvzuEQ{ks<%^kB^kUJjf98z=$b6iDC_FfoAHkc{>`Oke}A2L$|j z8lvGVW|Vjpll$Rd)se<-Mbj|kx@jJ9-B2Ua(Q)cpkwQPdPvA`FL@sCTsX@>7vHGP! zz$;z~n3Ns!GbooD!*mcobqnv29e8PF2j4ATC|JAWBL?b@?+x#r*r^xl#`2#1y-(F| zXgBbwRiz*WLimebqzh-&Vck_n>QEg%H~ii3SsgJ-0}PS^u}V^fa5Rq1!E{`G16&(r zxS@LBl${@NF;Xl^!^#e#u1RV@Z#zr)feQN%Db=b}Sm2JFlD@bu;&=(YC{-VMxs+^t z_=75!EqO~ukyLv@1| z-O({t=X4gEXdu%%HgH1qXsF_->T{|)i{)H@JIqk`5Fzd35HeR25fN*B<6#ana~0Fo z-04!ZI)n(7N0Bj?1}$D;M}z10R+n(eG$Nb|t?Jg3Tiqwpbkp><&Ddxjl6JyeQ}xy? zRRx-g(lAV07}NwJVl*6eDQ=Yuvy06be6TZz^7`4S&I=p)rllyh&@&h(Yni!#5js>; znl43ivgX|4m5ZGL)@mMh+JTHxP$U>$Ls5*;~W4MfPA?3|DThpQ$5A_Pn26%XeTss(Z ztB5r`3-{tgj)%qvu7#dKqQzlss7*HU`q>;RRxgW;>DhQ9uG~>Hiq5j*BTvz&o*hI4 zoWTkfDmV(6k#cnrHzE}{5;n1jlXzPMuI*4fLgo^RMTI5HoK)SnR&zjgAko&0hM9)4uBqu69nwF> z08w)iiA1PAktD|G5_uRK=ozH(lU!m^u3sgrd07ADWM7-i(rn-y0+0-t0a##8fs&{& zptG%WH}=9t{?DV^3wY0oYGY-8KZ1olS8)>Xf={+14u%d6k9fkQ56jO*hfu!JAF^gybs!N4b8Vg?isH1wJY{h8jh)fO+a*#X zV1otK*`zVL57#A3T2h2q0Kg`CufffCSv4d0gby0n)Ogn*L`Y5|^)Mw|~ zqZQYFiA`N`g4&xdJ{(A@rrE&600M-l7G(S?;CA44;P!_0Z=`k8?Doy^NV7|$ozw6t zyvnNt`LLkQRbAI?nG}Y(;;G#bZ@FV`K~Lkx`N^l>x|Q-ZAE{8E3@ZS{Xr{E~JsW1! zRl{P7A}K2oP@%X}0hvAh#wf*1f42O9MmxreDn-Is3!iL3xVD^)tr>TGjgh5cV}a^2 z*16fPZJP5%gt;!Wv?$^P8sxscIK5cPR})O?PIgU~_6H_7nF-rl$IY=t;vp>NYQ=`? z#PjWIgRF@xjbwRz+#F{qY(e0Zxpo#Z154dQ#Ik)I;i25IiF>uSa3Is5M-jKdVxAA_ zECeIGdY|sX7VI?H;^Ih$&N7K`=K~iYh1$joUS`M2YVKrX8o9bMLYFEc*N`~BklCni zvA;CK+#06-sOevbh$KdX$nC|4y3sQa^h|bXu#toHYj^I!2zw}u4%Ezj^gx^MjF}h6 zSd7aD2>lU_>XZ1e+f%G`pNbqZrNJ;WBciupiUNQpzfnI#%&5si8}gGCwd zLN!?rm=+4ygbAEZ^OecZn2L!%$`a?WdexG2Y8HS)l4%@}Qexq0p%_$+#z^e;il-e~ zL?KFJxL*V#YvW<|C0Zm7;4{U8VY-edgkJbG&{2MY4OdI$fo+vW}yj>WOg25GT+eYaa7pu7P*S)x2xU8|IGs zzB_QgJMQPyPN;6pHE`JhW^V2@^g_?aI}ctEO}tBR(Yxkq-iGdseO<>Cu_hXkrzdQq zD9|N@>On*h0TjQ|ojLp65;0`62C zY&z!CN8%#hdBUCUIrd5y^`e8jMHL+R@Nd0+;}gA;4U7%^W^SxFeV}53OqI(_$eIn+ zDHCcuTFg`|?O3r9=FlJ5J3!Qoa2Eob;VH?DcRsP8)2;ixsN%57m`l$XN*u)@oRxV9 zS#tr2VubV9s2TJPGe3Nh(!V>wVLXaigID89O!b#yHxa56AEh|(_FhpFxr~tG<2Bc! zLs+lLn%{?~xzlH7-pXvS;&tL`U$Wk}O1a0eOD+`~Rt6Q_R!3acs+i-4)lohG6H_UH zDGVe~DylEXruIXDN7&BEwq;8uYIk?ZzA3uUbLO(pDc_2)=M7NvE3#&6K=%kfdjUM; z8*uMFG`q_5y&w5mfEp7`U?PHnWb9RfNPUSaVl6=>sg4QPf*yHJ&)yiy&K~kyq!1Po^Nx7PJj#XT$vur8F;+;rD&D>i| z>}%Hy&*pi|9IDoDvu)(~9I~cGqgB76`sp}1r~Vx*U~N3K!?;UJ?5}B}jl={or)`-H z9v=}&%fn#=_x0t=aWAXAuYA|rwn(ua!a-@5O`J$(#R2>EBwu58p9qyjtXbk# zjnKc2={jet0s=kNfv}0!jD|8}YtT011KFju(!c@iG5WhC(V~2c#ke^)nok1@HJO=* z&|vfqYuam@YwyaQ872bPv;Aot%K7G@*xau=YMzHv=_v*3_qvJ1OUMKTf;x4vr=?h&lBq0&6yHdHLeK!_0_?YcwLJuE8U7YO$y~ zJ?81jm(O%)qA0dGga-TZ(?jIpo;g42P>`kR>%PFF%S+Psj$~kw`i2JC8KifYWqW_;5IhLA22z&_;}|#0J*z0-^ta%p4!huwaBP&B;aD ze0*LqXJZ)zXeBLyIj{mQdZDS%-Yi5oQ=cH+RkZ*ad)@ajJ;Q?1BtHC zwrgfOIszqNrzVjVy=Y$)GX|DyVsppJj+LFhb6CVP&@&h#@ern1Ee?uc-qmzy`^M52 z5~Z;tYkH=Jk)i5Ega`;cj6h%u3$DoMC=z`wPGE%I34yH85n*2+@Iq_4s~6U-Rpo`6 zZ6u~x$4tyt+l4L+;Zdb3M^_j4qjZk~itlqUzO7pQ?u&rZ>~Piuw-#R)E=w z?+y7)(^bDRjZAl%VB4N2?BE1OIEb@YiD_h6>|pi=59LnwMll*-un3E^YDX%I6Hb}yP3TgVW_U7l zHRbBmMGeNs^%nz%qb{j#&z+B#$(?)ghDeD)w0*IrG#HF$DI?_t1bQ=Q(1)hQLL$uZM%bun=M=U*9(O7Z zdN*#;ArXVou#@pR9)-xPT& z0uG7h1kPg(rP1n;PIOxBBF^J5HgF|wwOfe&_D}i}CzhAoX4?yq=h-yfoT`2*ma%|T z{VXJk6&_y{<;GjgyZ!1SWojEeuw;68qiK_2O(GELqrFY_5S+6J!Z!7fG|ct_@BzT8)vEvl$%9hP0aNT2VrrM& zqJg!rs!K_6!-3JsB~4(>)*?+@tSZLXVIqe)iZRE**#RNCvM2>)eZj_q^Q3AB%1D%# zb1;Du>M$E9i3ku{huwv!z;$uiUG^6h;XVx$S_2IXF|IKKE|h#`Q(#{8_|Y`77I034 zg+CtejP3J;?WyfK)Mriqh6SlQaTFKHE$lh1=T6ED1a?%fp+k6r+L*?n+|j>@*@dBz zp&>@ts9C@WgLLCdPHUQ)L?W?(^_u=i5w>(+?8pW&r&TOq6;G2E;t~BP`!F-8Y0Y(G zPW^X9j2f%1&(&OXQHz|oZ%>}0w(m~WiKt0jv$(Mm5i3Wf{!o1_Zgl!7r;sQOvL@{NP~&BJ zGGdfcs}-sAWg?2>dzf2furN<-~}s;N|a#)cJ*4J6K@ zalk}6VDdb7J_UE^4?G(yCnFc^Yp12Z5E5r`4m+xMkTT&VDo-yXkgmwUHWE>jxCWgO z4xGND6l+eSDD(iWMTZIdoXDE=xEx^c;fj8i`>Z%-#ZELb zvnFfiehPubTzB4;mYurs!ZuUu37OONDeH?uW@fk|?^JnAPEI&>$)FGwyW^VXs|{wm z_Zrly*{oVLFE6>#Y0KSr=2UxKsZ>iK)C}p6vcRgfJaSb??#=pK;bQI-m(PNVKg^^K zlM5`98U)l-!|J6l46aAf03?Yjfe^97!^slJ1%7tLRL6+`FrkG%7t@OJ(Hww+jqJYH zLm9r;+?mvpAl1w{U3do$G|i=B47fCxZ4=w3HFqM>%%O3!1Vqjl~xUfU=yyw;oF~V6SvZniF*~|b-7G(%?3QVzz z#355_vf>prch$tGsyL}Whbi6`A`To95Q`{Aiox-msQhpPb02nZkTun5h|zF#;5^P| zGp6b`M9p9{lvl{ws7vjZq1T=y{ z8}$bwy32}+y6=(xi14bBX#RsQjgK0Mf(pg?~3GKAf&X$4pfy`5?he(ErA&M3@ zdgibcV1MJS(@Q!nBK1DVu-b-U2C@vv`um}PQ{{J zzw0lb`LJO|=fKVAF3=p<>e5bTo~vm>`&n+-gyf>yzWEzZ-yT@1+J3a=#hBt^O&+=} zB37c!b|3D?X*b>u;fl_sWy6Zp>G2 zFnhoWY?xsx9Tp{yaF2-C)*xH;AvQwJ14?wv zAT60l+~xVYH;RFKWD>buGpV_=WP_1E@xvNtd6k3Pa0FVGS72pKn$d*KI zHHbYyi5-nG`v>_@a$WM^O*o9(a1CM_5i^+QddiFP!`lIjKv_>OldBGAav4Cd6|O3S%Ez5`na z#_O+i#>rTVaYdK3*un#`H7E^+keNM$@`Rgn$K5y(qYm{BIx_=tVmui{1m5i{bg4Ay z7IGbL*)(GVT$~aYpBXuorAl8)=hayu;02JXOsg&jZVb3Y@zr32?}_$_=E+-#^UxEC zKA|ypuh=WYl1gfM4r)0eWM*kL`jQg}qA$=>Siwg@B6Xl0p+!I@LJu%DG)dZ1k;MXM zD>Bb#<`Zg;MLQat%{Iem(6(!z@p|rjHamG@Yse$o3+M1Gtl?IJTwqacW;@z>$VP+K zouh%xiZbAi1Ctw<`$BaTGaSIwzHV&Vh?SV0S6vsdMA#|-Zw^O)4aklPmnvCrmIcO;hLr< zYZh=c)3Xb)&BLf+ z2k-7y)E?owIn)E8zVj+9%sAY?^a>0EMS1dE%vP!-lKo+3PT%uEOXA*VaYI>r3Hn(a z?1A%IMwy*EwiH5;`f=|w@4fflj~v;34{R8LOztx2Iu(#Zf5RW9XiO=dU%se}@$!rP z>E0<*F^YQVUXQ=i%~2K4*uY_CK9zpS7Yf0ORaIC&_we6&<>{}O|IMjQFPv~ExWH5P zRJZ+7(LASnV=PQ`;V_2@_%4hp6GQgHv$Xh@*Hryo%F{SkIk= z9-t6d!!FLDo9IRBc?VWhZ{Q(J5y(Rpt>#X7QPY`17cfC$TT5nMhs`{bop-Q-ZPk;S z9^7}n-5NIeJWd75D+GEIs%LHxGT%Nk2OVnT@*6yaVui$>Cv2cI#b6KmOwF}Tj=hug$VPR|T2A}ytFy;TT(Ds z`d1yX^(+nlWjugc$nF3<$TJqu7iw-tzkB8HsfxG420^=O|m+Tc&p6u zzz5b5B{1&opi2?w@dVYKRZaiGWe`!mnXXC}?~{4$@cfg$7nVG2y?e;l+vfeH_N?mH z8bpi+#9O5g96fXRO!xHIAmplCyvW1D&mt!{$MH?e8rufrh-6|tcTU;KgXZ(8DE445 z%(QdO^bO^qVud#3Z>Q$NV`=%cbH(C9q^0F;1SYwjb~1}W%Dn@Wrs5teu^8{>CRg+6 z2t;N+A$Qz|R&`=#!mdK>+AYOG-m|FnfiWAP+rR=Y>#-~>*?`PEk>lZcgnfMgfe8}U za|Z_KQbdd}Mj-J7Y@kf3E*jY6*g`QwphG6MO%w$J#VWHjgBMl>E}+fK6A0BO^=Hl= zB2Ha}Ck?x+oVf?9=w)=HBBI3L;^Y#r=7RpwOrP$mjt0$$}+3LbV>n-d~g{UVWk zYPpX*PRp6o5Wv~w+j|S%3}?H=Cq9_1H*Zlshgh-`-%fPtWN$0S{Xoxd?B)3JloDBT zMKAzJ6+`YH__O^v-ETL%yZ4!av`&mBD0ia-0H7QpV^Hi-GfbYR(D{F(KxbL zv&|&7xlnU{$&F6$d0I}K!v;3`YI}e~coZ@-RCffPi-TB1yIF!#VYOz8Rn=2iHC>g` zTo-UNc960naVAxsL)X+q&5PpU@!6Em*im^HrNOm0fV=c(zGx`JNQ2kM#hM4Ph~7!% z@^~l{hDMhYULS|Bh`X@o;G7LS3+ose2AnrOFfrGrZ!F^ct#QsVvxk%N93B-ijeAbY z)P>#74OXx}BFJVTQ{7}vAJ(RM6e7f0tc?~%1`C-Pu{9XuZPB8q^p96xFMCFZ(5CD_ zJlv&^lwyh(XK9AWt)bL|o*6#g{3hHI=RL{L%W*g?FBhX{PCKnKXI=h{Z6((DJ!wA? zM1(_}wid_%F2!++V8KDac|}2<4370oN+wUIM^v{VsRwu&91{x zifp&WEw+Yoe?@7AO{VLllbK37u&{7GBBX4LEixXUsX3JFtb}H~ns=+-L;AxSIspP% zlNb*&Z;O<%vOPDwwMOP(0UtObHigGDW{bOyu4QK(-09z9L}92Wt!t7Ug&8d z_D2LH5@Ka%!Cd>vXD|sg>$x*Kh|$14g?&BTXGeWz<`6xD z4k6678`Uf!=)RfV*=B&Tv9YmUgiVfRQFN|KarMO~NOO)hTXVe?#bG_gG~)RfX67oU zNF-jj!p{0SQ~RnjF$cB+FmQzqNOL@*5W5mRz}VAJ2*-=+(Q8|rMW@2FZ(W{LIbq#m zPS+uk5}9QnQHos%Bwk=?a>CAomQ}3jp9#p-oDGoJRy}i2%ote0Mg|tp1N1tMJ*Bwn z=A+Y(roE?^uea)aQHZAq^{IMkd9qDw%McNsur-g$Q`fa zqv|?6d=cOU4*~+*YWAW&fi<(<0}g=1Iu2qHGZ7YC(HBX5(9&LQLbm@Q^j>-<;kD<{ z`fB-vd)7pAw+%&*Sb0gk&{gADRTW@TK#4K$pHCYDCDc{I!h|yzlet<)vy@FxS?K93 zbc)1Pb9d^CNWH4;Y1|Q&JKN9CH^;0Jjb>yttX5qVMm3j6Dg}yQ*J2E|vaG97Q0Jh`x|1jM1T*F?NtR8Kc2?nE6c1uZX@4 zS7diWII|*Nw!T{NRtUCVi5_5o)oQVd(4>S_G#IO1$0FMsw#kY96vMMPiNu}}dWL(> z>w^Bi4xvldN^=0w-g6QXi9{SYdHrnbmPsMn-D0pid*^W2!83&O5$=hQS_d(}yEle< zVCw~GJRD(&m(S^Kbcvohe5Mf5jye=;qX%9fOEb)D84a<3z-~q6{f5>c#H{I3yS1eU zhoF-fW`?jo#Aw(wrDvVXqtYCn?}=EmUwAy4aPiJ!Yp^o!{@pRv?K)dNq3#)6);FxF zDj|rIF(P|a_pn;K#4&&&XwM@j@;>l>vHgBs{M5GDdp@d3En$&U-O`}}m+q4Gp?9B^ zyByivb?`{ois&1R9?{>rHA_=gZ_u1=#MWSJ5F$K>gf~Fq2}#JE_rIF+&q0xsY*h?3 zSViJ;sF?u_A|h6Hw72D<5YetJ7#kbh(4{<&dm}ttGnBbjngcm|Sm{!%$A!VC^R(OI z*08d7h3wy_lvP*8bY1S;TAC!fG@YFTr5WZ!s?*po#nm-WshD`%cx(_))f~P{^~=|D zhf^BW2heJ5?#M$ijq6oMX3pHK=FWYHIW4JP9&ey$)L)AhX$i~ExPbNC$!A22`Z|O$ zj;k(aFu>jc&SD}&&3KS`k8KA`TvYw~HP_e7oUjVZ1X6X;!8Sz^r*FLDJfh|#PK9ZM ztZ5O8xxP1uQvunJRWummC^AIRDiw;VfpilS zwgz2_#7APrf!wGXsBUXk5IBajco@UcAT~31AQ8CR(8w^KRuQ?2mGWU*Vn=2sL%bb& zfW*-`9kGpx{=-8bn7?&NS(x3o!Efx0~QYrWLPmy%S!nmH_?VpSJe$hsk2IExifC z+7r3-R$V$qoxEA~6A{Ro zo{<@<1F5>Nvem3kBhp+ugj3kT`H0BO@l1qXG3`>tIV{(ls_85WAvXq_*OgCl=NvjI zmD9i)9;(>MhX-xwL6)XG;5MuwaT`)~Zku!JZ_ujlk|$Wy$~o01S+|PlYuRO5&>7PJt6qtu5=&yY!HGZhW)NMIRI%S1yaauZe+CL$XzKXu6>roj@^ zkUXR9=}wNYK}VGE$OrAhE(_6)4Er)qX2vt8gSd6Pp1lO_inWN?8jJ^R`^M}fZbi@F zo@8?;n>Xx5na~j>sO-=}W*}9s)dboY4RR+%w72zb9oXM?=FvGAjJq$!?;kA=)HD(8 zTC;V)yp=HUp?8{VKiNY*rU@RU#|KR&ysIYsT2AdEWK}LwD3%jcXB@3jNddQ=UG|e7I%- zlci;8Y54%coFh){)C@<1Oo`OgoUIwx^l$V%k5ecXH9IH{oNke-XN~HOIJKTws98g< zr~U?!X^g}I5)=J#YNzzD2kh$|YiiE`vBE&Fs5yi&HuT?PV4(FXmlT6i^pxUs@e~rN z|5OJOBil}N4>3Kwz8HP|V>|ZSzkk2#z&Y$k7HCaLDrmA2-i64j3ryr)O7Sn zjEmI?Z&#ku_K6FxBNAB?bvtt2YSrox*qhlQ^;4{?K8zkbPDDhM_V4^Kq`A2_h2MC< zy?zb;@GK&MoTyAiuaap_3IrxqA}va9u(CZ{=`6@X{aEA)o+Y9ph(Os8Mv_cOYZIO} z2G&m!i%qJtY%J|b+GK5h(e$44GYt#C1NYhA8?D+I^}NN&TOvS9AbGJ{>}hu@8e98$ zcU2Px(KXRN_myj$(;t{t%`sF57PS@PR4fK}A;l?JL9tlRopj0$5`|FRB2g-0#=)!y z4`Cx#7FXwn9s3$s#CfbCx&sLXL-P>^JA)0Z+$3*bNe0vDKwWXRl9#wbB?FA`xg} zYtYy0$oWDbv1X*d?A-8BH(1Ykry(=tcsLqFbX#Vkhc1g&%pd5>h4FF7eEy?FKqtk) z_oF&92qOvdd-laQ^CTs$X@}D4gT{@>yyzLLF$d6uhW&#TqRvxktdn<`bEmtIt8r=K z60Bp5*0%;G19oRs0Xcpo+bzRP$Q%!^$9sUq>p#G|5xBNXYkQz)&>`%gFO_E41MIoM zPDU&~%;nTGtJzJcT^kSKHn}=QAkefAcc{%=h|Girk39U!^E30DoIRyM3df2(0rtL)2^H^(o=D=;azL7YO^JpvHt}JZ4;n6hJ-}YfKH#5*8(Is4`5NK{J zt}J6oIe}FquExZpvVDB?^#GxIS@r(UdI`(6?dyX$j}tf_5uJg@OWW3J_UCFY;tkKd zbny@Z`?0P1f^B=A^mc}AuI7Cd#o37HYw=1 zoU)Iq>@Dl6W={LkU{@h@MrhH=@m6U3NVE9UxI@YhW*%yyg8ew*2HmIgQ{k}wK$k2D z5l>R)ct=blq6c^wL(f{eN%aXNS>A|tgXjx%W-zE&vSHhX_E|7eeSfj)UcA+#olKTd zcXYZaI{BEraq+tID9td{htwafrf;=oO0%}Y7+uQJrAnZDOxl*<%ljBTM=5VK|J-kv?n@!oA-0i zVaxWfZ{#`b*sR!?)4ANqHIxQzO(JkN1tCBU0^Fd6>Ix9xRs!7MR$|Tym;>vWTF*eT zL+0W>3F@1Q*6aIrpd=VT1<2y@BQXrUxb%AuHP(;4!$)HlmvgY%rH~OkXMt@5lm)_u zvXWFMGxvzOeHDu)nmTdm1yZ~MTdh>**PrfO7qdL`%zolPb8{>z9$K$Nqw`qt@S=d* zFW;1l?z8Xm+ABwAm61)Al!g4H#m(p5pPAzv=5%wbL+31NYfe?%h|~MfpD~S_v2!Y> zA@w(r8;NYE2?AMyg&{y`Z{*GogPGTQzOX`$dhorPz(P+AMQ!Yp%m7EDKp0whfF8CjaYKif)0+R}nEX5NK<<2b{oyP%2^* zGl?!`529zzHsA4a7b3BMwHl)i`9I^?vNU~NLMtp_H#VnFjcF7PB9&&au+TF-k~!;H zzu}>KV^QHS)}tQe^U%oWKYy8B-Ike>>amH$n5uWQK^)>VFA%3C3`hVGq4sp#g5YHp z2_>N#OfdIzq@UB$YDCVdFsbI*`%S}BR_u4`XH+rgog-1G&s$(z% zodD0>oL=*8A`D_}bO1fTOEDXuBb1P1e9#?Mc2+j7$0I3cM4hcs-$QmX=M+J+klCcw zzJy2Kd2s!i-Ve`~cjn1-@@QtJh$P`80rM*vJ49ygJc7jS=*-})RWGStT$elOsTF5l z@q(V&6D^qQ3Uugv2Qpc}IXoYSFc|M-OOBC5#NzpgICU!mYgiDS;81fk?Q_O$F*`t{ z$MFny1<`(7%j@nl(HRiGT=mUqdVP&zs+47Hc-KTyxHvFc{tM z^i@H}-0rmS6z37Rfc4x_%&0yf^_{~yQuS1Im(b!(Q>5y3tZKwgFAjh4q>RaVd; zoWfCaZE6A!A!;lwV@XWc^)FglwmlJe|0qrhVQOUCNJ?!GR&<|?ia~e5B&X-s7ZEi( z*u(~Ukms~`C0;nERrEYuQ&tTI)(zETU=0LdcKSF_9~N^Ri`LJPjeS->6__Cwu3D>8 zy>v7$=N_6)b&d_l7G~aX@h3~V6V9|7HE2ZimXwr~*=DKg8oOz-1yM!)MwBSM5DIUM7pLuV1uAiBuF$&S_I#}dj2TPWnGqH^+mX>YjlF11Ka_7`~4-W5S-}je==iE*+kH;-TL5(ofFtZVht^35B6JN z_Y@YfErg7sr59<8BL@+BlfKELD3m(;^ZnYd_K2^J{yxq-&I4VnnQa2Bh!|;o zj`n2cZHCbi9mnXpXctOI^{xJQeaO8x-~pjOv4c?EC37tcJZD~;hzf={nya~pL_+fj znGU7Oiso%g)0^tjg@N@!UfUtpzHUqpH<6^uHB7MQAq)x;X=f#-`%xM^1+R-Sx`gM| zoC?!*-1?Aw!Clvm??s?{qm@`go4hqn;1Ie33t1e5S1fO%O_?Gfv4HP54tTp&8Tu26 z#95mXnJLiXK~0&{X*nV#Qc={@Z?nWRCWjGR0iS_=ouEaUYi1Ad41oqG@iJ3^rZj^? z(BLS})*N-#Y+xbpxXSiblr(jfaEAreXCc!g2#7t#3smQvRxvf#X~@IaRXt7>(Q-bs z-9l8|Qw;j?Mjobz5@+$t00Tj4O7erRCX{Bi0=8n{ig+Y{k*DvFvWg z=?<#qnApJyoX3)7J>z&qVqDY9NB2$PtG6{hva569*mbTe=eU5#Tu;kd6YKf(S6f=v zKSt5#h{mo?pCTusl{+habV=YG5<6%yLWi)BdZ6|}+gK)|B5Qh)>O$Z!dQj89h{Rp0 z7qNF>f^Ac>k7XwI@gZyW94uqW=Ddb8%ER`7n__8_ho=^!A}Vf0sJ^_~$@DlJttdJa zwApKQ)~b32Tmb}lN3~x>@MU-UR!;5 z|53rDo^T33g`N*^$JY7mb@WG$@XN}GS``>8p3X{g4sm7zm05$BXkKpQ_~@oW|+CFKeH?Fu>L^= zN+pf0=PkH)5YdIvATlCK)#yUTwTEYN7{4DQukPE)=ND5K3t`?fyH{6AuhH=~aT<;Q z3suR}WCE%n(xAtwuu2etw5p#t`LNtw9AN_YJ1p1-Q?L(1I)>V1h-zP%y?oJwSu>mg zCFIGqwoxAuuSs~r9Q^h^O@#C?_7E=bpp!u%3^V7HID@_|3>fx6^&#{OI@G5b!-ncH zhS_B4=~Ap%Ka+3UYSzxTO=%1w)igab)Soflh!vaDi1VsD27v?k;57}_r)|70x~aDf zgT?2rkI^L@vIrM*Fl-(kvWT1UR193SV4aP}E;6=R!{KSVIi^QXqCunoY^K%huuCtK<0wOEtDDCRbX}X!5FUx1Z&O&vDG)2~RQmw9En~2$|d1!hu+ep23Fd zzQDEU5(YJQE;?+V1yB%NfDbUBnb>VA+*1tHuerfGx3{OcABn6P=|8T22c^NVVuEEU zjg6P=^dMW+&7^7CW!p?D#@N6Ljv{d<0u$RBlZyTWHJz(6b7w(Up&025+~Yns>yO+q zmex(zyY!;&(~DScjS~?<2sZ6x?j*)BjdMuVD;Qyjk^ao4Z#8#LVaMHuqYg#P>A_{L zVY#@2M9-i@ID{S5S<@drjLLH=4`YhN+x9IT@wVO;%T~NVsd848W>COkg(#nj#bFCK z+lX`19$?jCMgJiz;^v*qnNiI(H9J_r1>g=~a;xDCShwl`0dCmYhYeHfsZW14=KgRV zu8W7%Q!G>;R*Oo*+(z2X4)qq7I*(&20izlR2q5;>ke7^x~B`b>h`QgB` z7U+}7XQCP*rH%`Bs%nTw7oI5%U3l#Y!WAl=<93>clG5e3Q7 z2nvjlZs`V`eO&{%K~i%(b}SzrP0Tz(>XR{5 z{*B--hikfx8O-3_J5vl5b&nf!+klSj!?+}4RQO>D`B5LV)&HRlU^^Vw#pHRMMgnR0 zplwk~6zDn;LB)Gd7a+@#G_WiNe=Xwp1B(HevRo24{QGN=BDNNC7a*KGWUxMY_G$9B znYSAr5?Og1LWUPn-3Nt8W=0Jzi?yMq|3?cZeD4b@9#xiSid2^(tegut`fHKnW$xZJ_HP=FjIx)BG)h(8#u`Gdlc=zG4*TRP3o`0R||~( z5ZL5YepKaf*<6Ykh#qAMUqRUGPnW@twMNi7oq_WHD&NCofajb@rskfL(w^`6W2EC6UT@~{rDWb4$f)DlFHB~>F20lUevSa+ zn^%+&0wN6=V^vtn3~Qlz6lSC){cbq8Da?hNvg8F{jj#Kk`-I65A<=NJJ{VO9I9XL) zc3gz<$57F5E>&HZ*Yeo#W?)x7{?bD0MA2*@UmIkKokk<{~Ly2d%AxB4_E~%4h3^Vs-@w_w4 z3(Mj$3}qfoedN$+BkGOQwQ35Nr+fDObM{3J!tM0aJ}l(h^V-()B!2zGHwVQ}4K{%b zgSFUNO5~?}$3Y(^tHDGyx@O}nLPJ%os_lUd4D13tW6=Q;LOp`+B9i8(Nvq`G0$Mza z0l8&_tyv;-D1n0WTI{&BvdV zq4#JH;S^bmac%fX)kcNYQBA%s&=1e&2`cKh|t>wiR7QRnlkEu%jR}u8b zJP)les77{9)y@a%3ROI_g+aEAG*)Om<4+cAlqJjOq;t?PWJUD=tu6Dr;u;>_Mz#E; zIsu~9tS_dsh*Yg5Dv`lP6`9sU%RJ7^y4b3`=8c}#Esr&4v5_jDHVPX!%RV#h&ogAK z7Bvw!P(N`5MV9r29(aC3n^imlK3)YNbT+g4Ri9ufhE)$KdscC@G4K?wKTXib*k@4h zpq2tY^!5<6xIBLDqJO@6c~HmHUatHg znfJ|&oyAsoyn%m9-76OBmQ2sH zROz;YuyJlz3Wt#=HOHcpWiN5-$GeTV2Ea>B&*{uWmB`HST45ZLWIOKqT9C=Pq|7hx zn!lr3V)U2395K9I|fk{xr{9Z_$JY)!N1^yMre;bgk5sQOF(m2#6EPc+LH%a?EUk7cv#qj& zpZ_iw)Lj?SUgE|p%@(em1c&qrcNrnm%OiSVY_=vhn##G&h)jrr(TCc)A7nrdM6mN_ zm(1}Ut`D;6TOC7h*@un|(Y{pN>)jD=+`}BW^!B^)w+bIRvm{r4XS(8~G0JkO#vYt7 zkrmUoPzgk1O*!(G3)S?MX&|uPWoRaASjhWt=5p@xK?<@COkLN0WpXfMmo-!f(AS%T zTnER$Kbbs2s``n|m__{;Ygah%Q(X;J%gEg0^fw`Pf4=-)6Rns9jKuN1s$^2P>QpvY z&seREeVP0DC7puBv1ad7>_DRe$%;n;?#z?Yt+sc6Wevn*xtbZOtVXGg7v8%E;3uHv zI?G>~-l%pzK`1AVn4t9O$vAgdF2jHjqt;7LC3h&W@F|XXPP8NlW2siL(0BJE4w$rL)?5>X16TQyE zp(Gvv&+R&t)+DKLM{EWfSIyy%fiO}~ZY_e#$hT|}d{;Dorp(?FYktN~aU1o8M6iY7 z?6Y3?{5As%$0nkNpnX-vwk`f4j38$3Qfj*CPR~%d_*F?<^~oD(dDWwO-c-ILo$T8= z%qIaUC+ZLNf=pm@Ff+EFGX%H$7#rg?2`1Aj24;(gE4x<$xT$T_Nn||fss4UdYtLI9 zepg{^B8=f?cXG{?S$}C(USfhQMl4O$qy*)gL^Ea2Mcq+Tx?+x|oRMO@>OU^h-qsY{ zRK68GH29S47A?!>RQ0XoYHH}}EVQER_Muo6m3xcWXhW4+c3>Lq*VRn1AG^2)J6&F0A13>ws&WL89Q z9cTX`_7;t83npO|52!|vG}Op1mnnP5EsjYxCn@E&-_PzdOPPu82nYo(?H$+qzS=uC zyngeRKSpxC#Wb42mYby~gr|pl6<94IAeQK#dqtG(43B6bm(Zhe6M6TRs$#qmghx@Yjau0JLqK zURW`SKY78gsJ_sMypGYv5&_p#$(@~k03Yb1N|9uyno7$J2Ju#i17?Q0M%z(5set8H z2;YWAxfAoi^x#Y_i4gm|%m-7aWI=#y9s{qVf=rM{jdH@}L5vsSL!^|V13XIzJYmL7 zM6D0psulG$aCxMVR!|E-*)=sq(4_Pr#k-QMik>6foNt@^UF>z>`b(;Mo(VFD>e`nK zjP0`a&jH(brw7{XIf2k73;?0$o5E|L)i{<`H)#XgdXz^<*neVd%^q+_vnkvMh22!X zsM*oGwmI^*-`|;`lS!pZ@LlT=16%5A83ez2@4nc(+UK+@kH4Z-%$+mJ#gp%K*vov| zrRee5n=wYewV25&V@MjAEd9WtVYg13^`?Qvr?OiU?dzzf!Q2JP3j2e#Am-z#tt?sh zQ)n)?lRz2KN`S_yHeE>``sdRRUu4gGY~`kG{8wj&l_MFMR62Hla#LoFJUEBeb&2=K zV*feqr7X=G(bZ-|@o@^N`sSOSWRL2MXBlS6pRj)`#fuS!>>`gB%0$gIQL>wgN3;vL zhT`T$b&)&GV@@eD$tkxtSSm1arMhj2X(E|K+*I)lRcM619v4@W?A3-v{{8h=;xT3= z7g&Nf2Vqu#V&GlN>VAFM4Y~tm6}NQeJGnXOLhP`_~*r-j!>gp2o7Vz zO&Xp!E*GPuz3lS49s_!&%NY7d%t%)*io!X|L#D`@&P*)~0j;b87-K#re=~&ohmncF6H0%3dwxgTS#=R()`JmvKCnht zH0jLNXi((Z`q50SBJ82S075)nJip=0!k<_@euYH7RH4?IRKHrZgZUOx^%Z2&GDujcZT%K+!V z!ZPeOo=Jv^8&NRtn3r!@!(iZGekF5*sYg6#{Hhl% z26zf?V*?|ex>pQ z`z6GoB0~AbXCiqC2oa|NC-r&R9g8!~jqB+cbsQ`&g3Xl5BHk5$0Hy-o;3XY;Ih`&x z_QgEZPfvmEfT@8K&^KmJ^nM_4Z}fPP_`G9JQam~5o+|rh^VmWrfh_%k3JB{}*BCs1 z{GO)|vKrq`PhSnIRmm$8-bEL!VRl|V&YdV55XD$Kr7P6P+9=yP57be0Vqy|9ciCW% zM@M5wQODV!yiNebMimLMoXeb~WfG|u{(7hrA&Y`4rqh*WnyBJ)4(V6V-#@Adnen=7 zXk$aW9G6wzmeKy?jMRH~b*4YdUo__O;S`CZFJ@gLht=F`#BJ(j$R#CbIpgz4AU%lLkN}9E7&ROHDiqS_K@~#t_{V9pzi~} zoZzDw(Q>2P%nj^uj}7^M(_7Sn_^VVBZ=&dhNQ7B-emL+CO=Af6juonUR~$hyLUjK{h!jo_ zbVMZpwHaoq6*2Lqh@|4$b?p{P32c_3@M}FX1N3XD>%&!!xGB<6rG{g+(>HYukzq#2 zE|yc1f_$(1HBNI2yNuyTNrtxaPQ>E+=gxn-_~d`ifJge&nm4nXR+a0b4B$nyO%*M- zA36Gf+=~3#OCzzx$c%h+HORD2Y-8@1?=3=|QKt7|>X!T5(ZoBfIx>Arl_6gISIZe; zrytzD{mG(NPrUHd4A`4S=aT{1oc9Llg7o{lgY1r9jHt|u-W4UA?ELpy9hr_N}Sa{>bvFeAh8QvieAH_`Js@o1#mD!r@0jxrW zf3Hs^bm4q*DufX0g%WzP7St<~;B-k-w8~OxnI<|R_Jk=-sV3cm_ZMaE90!ga=X`-_ zTS@Pa)XKU4` zNg>p{T;JG$xntoff`rj7;~#fOGv$K21>B7z4Idl>_;pEW$M6@sZ2Xecm!d|Mg3BWa zzs_vYL*u;Oe%J8M^IC2|8zfAvj!2Bjq+hw;kagND9nLS~h*S_ylV-}eS$hFov;nJ| zM`RnpW>v4>EB&~)HBaGs$L0#zvkv)Py>fokl7_zP>B)&d-yGl9DwXI09_HubZR3Ae zIR0D8?B3UVIx{F|fwuHJ@%l;Y?&9m{*=W7+4O$8F>5esDcu^Ql1?wsFi|>94YR^4A z(TrRbI~CX25AJORRa6pre>?1dAoANzAdH#Pkm#wtfVHkBL{pWe-#u3N{>L>&IAlbd zj(3x5MPsdEW`4wq56yU1rA)YEGA`3$9SE6u+1BI!k?;+ve`$cLt~xVsR!9wLa89cn zZ2`QmLRjrgZuPH$eu^nL#T(UcwSCo|!W2w;rF;3(%OQSYRV76o=TS9GiV^3w{gQ1+ zHyMK8@(}`$)jwN&@h*Lr5GyuM@la_zRg!{v{@B^_92W;mAt`M&Lv_`Ng&^!yLgwQ| zvbXTbn@U+37@O$zhr=0+a-_0HLUHBG@JScj8U4t=Z559|&8XkQySe=*Cvy#f?a`YP z^@j2nHVM*mUQWD2S`P+NSrE2D|bqCuA`-f2@*h@8&_Gt zfi8QI4(v5pqxwSW`?j9%r$0x5U+KIer?HzQ*z6^`A-Y3EnO0goWTSHd-C2+MI#-!g zKq|_r*!wBu2j{YRhUsh&f0$a0=-UQ*iV~%8wqdxhedK;3^6H^eN z#9NW1;lXSQUPUwv<6cMvfqp4*GCn=L{=kbgg->Pao)CPFQsh{z`b~dIOO{Nj5OGhd>CNIfSP?SOO$v9nj z8RZo(m_GN)_EUVdvkV~y8V=1dBVUX+OCZjUXUWB!&8~Sx1<1XD5Ul4km*muH`=?C4 z?fovTAITo7185<2?`bInA^Cj6?sf~WfMmggTV+k{GwZh3tc(AncdNU^`EVPQ>0UIK z_jdGCXZyqqKz)&%f#9W!8pZf3QFC6MSZn7-Nl_7@@gl35HSuK`c}O%1(75I}+j+e} zBW%&^JR_K5d^cDj-=8JeBJmj}Y18zz;Mieac6BUZK5B~i9biLLi5)1;{=#W0ztEzq zNhXm&QirUmsRqJCd8=z5aLs{CC176h++0M zL0>tQ$_UFFVjgb3ENxJtSx$<#Ij)o}>A~@( z_KckwCVj_@?s6jpW7vkiscz)rf(C#G4+foGTn+yht!KqKhdeE{_TQ(OTO|K)E%=*( z;7l#eQ)&4I8)_Mm%XuNSmCZTv*d$~u2-K%(SDH9~754e4NY6~9KI&WD^V<8`ytBKCw4QnlyzBs3gHPhSzV!-}aB^={PXrD+aT4$epuG+yt9 zOZa~hM8Bf}dja#887QyG10cBN`(PlM=&~1qgLjl!%&@-V40LzmjT1ScUKn25 zULfz=yusgDz^RZ(SuNEedf?HDDVYDa0qb{M2C`5KA1XIjhc6x2n_w0-O4TJ*7uf7H zkDt2q>yhGA$7g{;oGn_k(x#g8nPqkC>&LO?y>ecW(Gtm){QZ5UA?hI7!97=)o$y4QkJP~b}TKv8J|IVFLmfz2&NnA z#-=`9vAw%4YPm{#^fmz)=Dy)`7H|6O74f}2=zEEvh+0CokWws|YL-3~N2=Kf>7?;( z8M{S{RVt(FgK{YBlZ=b^1Vw`Uu9X}0?vpJjf$%LL&2YK%d?=<0&&pt5sfL@t31T{R z3m}NdPC=dExyGE6(44V|z&|_1b=l=2Hy_CjzG-be!SV`~D?U;Iv_q!Bt1E6vLL}o< zhnF@)g>BgZe5$Me{BsRpWDbqCwVQ)gqgQt@ou$%y4ta(qwV9{n?k(}k9$_`;g%`i- zSi@LvvT^8-n1I`DP<4xs$wHawj?*+N`NUFtRxM(=nYSedX5i77wiaK_;Z>Xf(eD%% zJ^nVN4VYUR2tmF%R%#JqKPDF)?O$EEsKact!4I>V1hTaenCnQFz|P2%nUQHn1ENmw zyKDTfpNhkV#JQHbI08ChPR{V3XygX+W|P7vl;hcEHkUz!s?y%=pv zX!L+~B->e$4QGHxFnhdP$>=neX?~9(i}8Y2DGvO09gCk}pfPBGquH|qgJ*|!i3~$+ zgQV>T!w5}~I3G>Z*W4!bj!Cz|xj=nm;tX6zp~a?&hf*k9$Sb7oC5CT)vpqW53h* ztwCpz?l<*)bo&MGv-jJNA47YB@eLW&_f>h#Ave*N(|(6-EH(o5mI>gY0~d+qp6jjY7#1!GhsY2bquuu)VBAX8}!p}Oz7 z`IgL;-}5ei6hk<@_9Ygiz-nwQYnM?aQ6oxq6S4h-uDS@H%~hhm8bYsjM)xzu8NSbP zQ#5@qJO>;_=r}hLX`e%AW?56qH|9OOMLJtd(0N6ZRiI(x#64|&CIILc^gf-HH?$R^ zlA?fz-y9$FbIufRT9DIJNl(o~JundDDL~LaQ)X9#A}2KSX(0XlU^Gj2Y1ce__FPoyye`NT%xbU%l@l z2{%S(o`sn3vt2gedPyPePHDyM53J^*A|8Br>&odb8N{q126vgLtGo7IHj6#(?7!v7 zmqSt(A=hq-&)PutLsZNQ5v3PtCxKW9#K{`wPvU;!l(4fx1GYY60@T)}%z!0vs+xy` zEBM7^f={;3m!hYghJtmIopf~~zG4H_KJv`F;VIr16$<#d>Mw3`~u&`<)SW@b+`QpHS9%c8D>1l8CwzKochF_FB7b$8wI3(EvX{NYeQKh=S zQ~k+!Lkhe@wmkM`2n}2sOS7#6%(rV7eo@%XJ?m2G^$0iVQi@ z?dok}27N}k7JHRKX$v+!P`8f@K`tPU?C>7UQ?4grr3JDN7Ku0@LpuFu4L zh`FaJN$A7ukBK%}((A*zm0vvDip5lU$Ll{dlI?^1=^nm$`!pBda+|_#;Ll-)uRP=j zVU^;he*S;BnVP{Ptx>bF<_L8OO z$_ut71?1k4n&i!_= zxF2a#1hlNQhu;1QpOGd0cVF(WmvCE*L-%|D#B=xs^0CmC`RNEnN7~8QMWd|fxT7#o z2xXVN>Eg7qd5K55QzY1}dxN{gXV1D?Y$XTiC4=<>s52IWe1SLPUIWOs#zCzNzx$Sd z5;BWd_hTqrzVBqmo}kmPRE+nDNf8ihY}1n0@AVS++WWYT<#lg(Ujc^*T2($4Vh^u2~DT#K*mapV(rzTr`d`j0+P?!tC@UPz66sV&Zd1*2q= z#RNS`aV~{Pv3Zn3Fj2nq24<^Ly>8-Nf1q{v_(V0?b~Q#_$+A+u!^Ollmp+*jx$vIw zV1=vty@`mcCANatxxVvgLUW=&hL^N=Cy`B4SB`E^gH?`U-TGO+6P4}0MXeEmLJ5dP zf|VDGi`WZU5vJs*AI$znWbLl#ZBc489-{BE=A;Ug;H4USoU=By2c^5zu`OOft0F{7 z)$5AE;>{B|zOKVlFU-^$4r~m(bxYqWb_k5`obaoSI}UpMb(XaFo1U*4sC&rLhd<24 zs!TR_GMiU(acXX*vB+)13~a&&!o9gX?+ty^Y&&9}TFl#)g4&2ko$=ko8QTMhw-UX7 z4eTZl10M3Pf+cH7Z#VLK@>!by^Kc|g`EBMe$U2e`_Mh8hkl+>ncI{**%a-%#6Db#s z0ukBT@Bjv{O5`UwgltWJNWL?EE8Jud4zwCK`*sgFd6s{Bu zB?L|zYKw(Kw4^ma!AKG=KRs<3rp&>7d_9j{ILc);GH17vh+mmA8S+Nvzf_Y0WKTj* z$Rr?5+Z(J^?h2-vW)?9xW63+!?vEjSC(mFEu*DE+?3o1lm6@B#vIT*-4dlMyk4$#M zg|(I>OIP47&YQz#H~(0kUA$raChk`?p%ixfx%MGz;f02Oi5SvfEx&)jAH;ZG3@IwD z&sB8(Pcn$#{K**jDv;`FWmsr>ak*1xV9DeH8z}~ZtLxHws?(x1ClAz|>vfZfo$|*g zv?@PNHtn|PUw!&CQo!4_GL|YHCfe<-0}oT7;>NjrSUQzzd|#^}?fGBPMn`mhBI%bu z4Uu-8_v<^<-fFkOq@=b%*^g>#gJwsDOEE-w&1X;azqcgw<%||GR`?4_k)zj7`@yzn zQdXu>v_qm<>%wIKaqdS)N8ph;!;qV zeDF!l+9_G}-Zq6ldBZSw5Kh6bF7ln$KnMTY(C(AJVX^m$jZAVo@*sf+5{A8$O@0Wi zGyiC@z+#Lf0xT6Xxns?fZQ=e>T6|uNS@BBTQJQeDTNSKK zfyK}k#m|UpB))jk@;t&#wYN&uSbhXb#*M)90>@12SsMT6@kutGB~91fEZ$2S>zVyB zN1SeUmR(@0l;pN_;DpeV6gnb)0cx6^(Wkb8$#ExD4SNYU$2$E5e7i41j-F+7xG1Z& z8MQ|YCQCS#f`)lrNP)Yb2s~B#S(HxByHY-HQnblSTneK+|=6G_Shwmh3*9#efAFLoYL1*D_ZW=elH{3GXU7g2&p zjMz?jTlcydAW|gUNJUs8D+zCZ{EH4DLxw=Eis%%59`5#pXah)@>J0NE$*O_{S8I-E zk&7u3mEqVlzcHd^1v^8xo9m|YORbHKRHN84Z zHfUKw;vMZ!v%uhrO(~}5T>#4M_6igxvOW94W_{};^g{qcYqE+q%c-&#TS`SwO_qk| zjb^&9+5D>JjM|}Ysd-N7{lM1w_n#ZY&`x!Xi_X7B@V2p|ZPBRXfac=kV3=BJCW&Si z^rNBg_qXm|zOgdWTN<&|P;AROQWt&EfhQr&w@)oL;Y^G;HX}NE*j;-7n|1u777nHK zPGxssm#0)rb&Eo9In!oi?b>SfJ#kAuM1pf>*Lcatb~aRH~W&7dvb2Rj&g}qK~AHncP(-bKrjN_D(_2O&x z|6GdKi>2!Eb1}uTMifa%JZxgk{V@5NT@0)yZ#;YzbOXM#d@A-mJQ#UCrP(-%R4PGy zAnn+{Y8=^%xKJt&0R1vz4=}kQD2>1j)#oy>aB+A~b`gY68ad6WE9qhu@Wim96*X#wm$sFQF*YQ9t^3&_>+@FV}2Em`j|s>ahw9XxYHV3ybZv*I)v9l9=FW zHLDRuIj&SP5TSmnX@pr-gOznVmcF;zp56ZCJWn=lb!MF{h@x7N=Cmg%-INNYQa-s< z3(&d;%-pxo4u#5ROtMPsEw5Q#1jS-xjK*MzU4}E-FrUNwBqUZgyoMZew5-+;N;9>u zhSd=y6?)W(m9B3S#XfjYfZ0@TtYws_@XKV$x#%5B#dxd-{`JBbgdLJp>zZoWTkNiQ z(|f+Cy;{U+<;?^mAcu?Wzp5-Gr`NiIMu3YZ2<-t32&^><6{-Bqw^-sz6f9Js~CUP8F*7+Pi6 zxf}^4)u5jW_{M>~n~9B9dWFA{a}1@uyyXi0>u@o3*QruFr>$@#T=W~vU6w$e()4TY z%U-a~w|~bF-zY*%0weAeUi#o={uoMPq9=&^2D7Vqzki(mg7w&A#Rd##p9V`lxb~o) z-YEN*X^EKj)XE$H$wFc47LOm^S~D0^&XVKJfgISYl8rs*Jr}9ots-@3*RetsDg5ih zd+O6VX*D8`Mkm#Bxqv4bU8z1)aD@!>!ts|NPKRzJ#0%a!T(ucP(@=2AX=4XWVlr@j zArtbxqbMPKN@2>x!$r0uN>-!>w@u-YgpJ**!|e|AR2)0*1lNvmL5g)kNZ$pGXHfv# zU6YC9P18aQ6l0H0>#oyH{uKLrzu<`n!=w4|n5!8#9pC4_ZAUiZ9)uA?_NWE_anrKI zBL_NRf`X>)25>|7%GRjX+oo$m+Mv}?9$)1>*NIWX!{vY9Z$b~?`?938D%7$H{HTTq z=_(A;c96YXlUwR$3SO2qQnUG$Q+pzkIg%Z|$>Cy_q&9%z;;RDA-o?QHU=B8t7(E@b zT>gf~ea^UZ)%ii@f&XahXu)&Y)3E5hsa^xvrBM!I`o-5~{BQ?P8#0af$Mp!4&vPtl*qx_3$BWrHnl>@$0MiDhq<%A;@?SSa0HMc%~eW$oGJ-Gj!4^>(qa z)D!7b3rdq00O`!t923WVCP6``nAnQ0v_;WCEm9nh-Z@XgQ5;I8NnxeB$67crAvTP} zO%=O}eyS+Xs&Q9TwCISLZ#Q%XWjAn=8YtMI@0At;8rd%F&C?Zs)x=k?;*=y=(Jw)n zM24sO9CI{UZ(9aH1zM|<$U|mA%vt+2Z1lhr@*7{P4kUJym%G#s9%dJI1_qYJT#6Z+(&`F} zuaIa}AROyzwTfAY)3iF(p6N}VNMB<7^St8}eMw$%{wnQBF(yM%fq=n*!Y$o` zqv0rvyl{Qq(GNnRY!BASR3y2T)hPj{Slt9P^Tkd2wg}`<#3YO7ZBu7I_qz-K+VMEz zb&d6dI2|Kp0uKBq=mBr}YictMQj&4%bzx2~>l)*>*=%Ub`4h!>77!2<>+^g!N8@34C0D-nE%+={xFdHl|)Do{Y+}NUe+} zy&a&A2^_*-n>pZ{cwwY=VZGG+2{fO@ipkf?C+TR>{$t@&z( zt?Nukqqjo60Cf+5yB*?iUG&jLob#of!l<7qhjiOk6sjAZlcHt~}=YmiplJO--{ z#EYJUv(+sXKg{t&tiPQclJCyLvE-`@?_;ZcI>8cU+4l_$oW%f-hn&lcnn>{p`7??P zc64UIEDx4nIzZx$xuPdAP1%SeVIHHlHho4<P zIjA_)_2--ht4hk1)kyD28vy2Iwu43EITQO6M5WYGJkPB z#K^_K#vTW!SZStc+$5Y7&p(@-2Aa;+=6i43Jpar04tz!ueim7O4@u zzLIlq2zyth+PJfSpdFlRClP$S`j&MSWffU-q#R3&fJ2xVZoy_?=KI8_o($K1A7~4%xs?ZoC&mtA_oe|o} zU~8^E!^j*Bp?+{>br#ffux{p|T{P#wZ3#45-T3*Weqvte;%Wi|E zs4w(8E!f;5kwc`(4A%sj6i=xTwAFreD~`z&3AX{q#u5^`l4=&yhx*<4s zXS14b#O$9G)W>`G%p$jw7@pcGsv*KhO_px|qTdBNC!T(nasPJe3h=R5v|%#8G{C?5ym>f$i`$pOI(l#%J)weCn^N( z;<~b!R zAIAhJ-F|Y86qW&Y77E+>5B-hRemmCPZ3fH}#3a3qR+oQiE56^Y zjr4-zuO$vtr>HsN3(CaBBfW%n=C1uwF^Uv1N-2QL&xB@(qDV31OHl$L2A|&NM%i?- zSCR8FB=$AOhQxvrRL4)EcGaazb?cmMI$&#WHm;xC)Pm@j0UguVusrlVl-u_!k1$pW zKvNhA3chlG&+@SKBu0BFge$$H2;cXk8Z_J>CL3HWFTy44g5uEJb`R(x{~pxQ_=*Uh z9BJQ|R_VGi8gszo@(%VJ4j*}{d5fw{PB~F+m~I*YQOE9|S31MHg;%H?d>KL`Zwi4r zs1z-wF_i$e%E-VIBNPlO@_PeM-n$g<3uIz37jwm%kupZjY&uxzX3dACw?omwGom*t z%J4q|v==|!s~$KL$kRk}=?`X)&Lr&xzs^re&gccBv&Mn$vT;w9B4hSwCl#?I8P}s{ zB7ZjxpWyJ!coVw@y}WU_5PUBBs3M&P`#@YBm#NCs>fvaBZi>)D|L!@UfUt#K8J)0R zf?ReMH>W}VT;ph3&(Iq~`587a&GHHF0`f|0)8gurPag_d4g72DE!d$Fb}6~8R>w?B z?d0NV$QlOc=tO_&zlXYQ5!ikeix*bf(<`P;cg z15sh6;5|EEElz}*aiOo@`#M%<5@D>_A;PDeV_x)@{h$=)x1pi#k@HTxe$DL@_fKQm z>NL?va%Y9u79o-#La%aC+_Oz<vNeXz8M=v&FfBY6h7?0j3E4!KqsZ5mdM@3_WBtn{pJ)#PR zPBSz_<$x=fGNQ{|$4dt-&Vt8!;9jg#r;UiKI}Ng_#E-JFFGuq=X?T;mW(!~J!uV*Z#gLr6MOqbf;eKHfM=G=yC%8>#r~ ztZGU^^Hq8xxyF=GWUHa>DN z##@u+s(-jbw;YI?|1YB~cIi&9Y)PE;@rqCR7FqvbS>6%Xfs zuPz$1HVS{ehXY9&@L64}TaX6AS-{5fRIrqIEi;jE#Y?> z4c6BKi|*^6u9LjCmKXb}u?w4$ngd75Iht`OVmo3?S-TXRho8C`&?S;J(H;CZ6~SmQ zv*mB|5Rxj_KER!O->HDj1io1a;ZVKd4I#HMBeT#k_@4rE?ybNC$4BIJz-8L_#NUT$*Qm=f2mG)p)QZt&4(_*`zdW& zc-BYns=!!Iz1TLZ_fbwj6hHj=GpIsLjb==0ITs8|2lfzY0m(M(soWt*sdm@f!%1EKbd&?C4L)q z?C*j7)~Rr6CiQ{re0eJ&n>#%ZNqF2v?1?i6Hl06xuIOBiuk&K1HH{#RUol z`0Pxjltz()rj#tarW$4=`@W#~*?TQ{bSXB=f;Rt1UHeuT1e$?tDA;YQ$9wKzGDhIs|MXRGEC=ZPp`3sEaH zwjUxE8k~sfL>W`BpaE9f!f`Mt#i2jdSlH`Fx9z}h6upMsvjKWRRc1{m1R=*Vb-H8` z(HXBPFD=N|Iq+6L9P^U%o9i!AW2tVs5K?VD)tg@<5%b)$`6Ah3=~vYFp|b9nTtdVGw0K~*dG`4d zWi7~<9EkMc!wHa;j-gGtR|P7@TZ!>VJSw_)#DrZDG>>9Z>zuq?+26yHxyFM8V% znB{xCPmJOyM>7NZAb*<_Ch;L}@%OT0g71#WKi0VgXWI~oQ*EVoX` z@T*ypy*%TlJ~2#92%*Hf1bVsKHNq-nH`qTISTYH*2b98u%j}hA^G-LQ9$DaN(&qSG z09BZvx3<@#a>pGcCC7na#XQbiwl7SLn+5SIv3!xz)r}cd`z|c7;bjbQ7<<4W{a>F13IigL6XE!`;qh zD{({qsXIB%1Z2MCg)`p`TjcAUK=TX7kP7%d;rP+(lXwB?;*j!%B0xO%^*N`z}xO_=I|!foJ6*Khw|;nP)mZ~VWtOd7d2X+?k~s=6mc zNkq@#_0tGJ**hN}-c-q*3uB4+Ekt(T1Xfommr#ROmR$4~?qt%ComHc>azBnlM;ZnD zr)AwG{8~|O?vEvO>I||mm~15?rOGkPrucCk;Q&=LLlKKg1S?fQfYe)GQ);|J>rGvp z_Dx~pt@+{}hMC&1XFJ@!VXADUw}PRiqpVBap@-M`xuJd37oA6gCWkVe<}c$+Th(P* z>D^Hm3K%2)DxprGAKRpf{PG>`bteqB*E6%dqsFo|JtH_10SNS_$Y2p``vvQ9G$L25 zPpkB^Xr_sdDh_WLqL8IR5B+}tM?tv0-DBGU6SgZRi3SZ)bt2Jd+-V}>zVU+ytYeBq z+V@7-#>6&qPGiTNvaI_icQSA`L}qlTE>!mp(tYSY?Z`l9N+E>CTdBUs`ZTazGf^FD zu02o_=nZflhswYl;||_m&L=Lukmvpr#x*O>%qh zpp%G5xjQo`JGtI1%&!-sG-rCSj;VJ%(h&~YRekxxG~%U$#h1ol8cKNUm*>L5=s;$) za$#ZArTF0qGE38O#)hL|lPAMyfZ=G60~ph{_NevoK-uWsG1pf0J=XK-48|CYhZz{5 zOV|T7@BhF(>mO*3>Avu2E@X@b_E6H`UXX}nTlL$SdqyHq3~EyK)^Sel zWX034UDLhs+AI6tWvaie=>aCNo;w>V7fLf8k3&f7refMS>{@5tIj0AZ$W-|xgqW@( zF~*MSVNDW&tjU_Olz4_EVcG1#U3YDp)MOST)rlPx2hVpwZ!u8YC5&-N^;Jw<W04m#QXJXH9>aYa(hAS@ZImVyfo4szM|Z*J0vr`@T!lcM#34 zeWb`u5s8yrNRlUc=OF|EU|4esvyxR&AAn$uv1&D5IvW$3hgwUPCW88=SB6xygmX%* z60eL{6k9Tp)VeLbl3b9yWu%ApQJE$uF$)`tqiEDOkAGf6lPdrq1VRiIMv**QbucoN zM1a1&VffUVOo=egC6xlU1Kfx8n)SKWPO*;0VN)EAX{72z2qBE{2pY6WRZ6K9ntLj; zZ-_TC*S;Zo#;*I^Y%vx_J4l?vVeFt=p+O)KhjWL!aoh>}J`wJ8G*er#mWa6}_8cOrw--e;INetgIiG?H#hmVwIqsk|L)O|o#>=bL zt_(TP6YeqB18C4@<_CyanThr((d78Rc|=8yJERqe%uM8lfU`A+v52!QY=gSj)&BEEw4xv@7$OrRl!2(;GGNmIjUAZyAeJKi8- zG(ed%E;|`IEl;cooW}!~J#9?a#xp_840`53Gf*1uj1J*>crLmx;?Y>JT@-BQh(wJ*c;$b1&1+3+SdaH?iY^K^iPDo28pOiM2*^QY+;Bs{g-ZBdHzkq z2?B{ghFC>|rlvlohhQ#@bw;CL~EP!@kvKO{;o{ zrqT56`%%qJ#Q-1NanBzyME3?+^H5D9YjU5`jtwjzv4upU!2txWF%_!Q%M}OJ&&L|h zV~Ph;s%$aI-Mip22aP+Q|*I3+9@bze!~&E;5~FWt}k~MZ*eI=t)c80z?jF@3?H#gfJCjt zCbrhB-&t+A*jSUPsW2N|^p8>RDj`C=bg6BSWV*=EA`wZ+T-Gqj_zrx`su@_KGA{sG znfjNOr8}P+BEqKL9*@Vi;-EUPg+&As zp*p4h!_gcNxe&xboZ87ut@;Ls`=Ht0+P6`~apzrBzQGP+t!>vzGt9t3O=X;KC+oR$ z3Ol$DA;&|E@Rq8#FhnuJ8scQ!yMQIk26!$8<6(-a{@amv4D%ynQ{`xgiG|o!J-+sG zYTsq^wunaC++w!VL_G5XPGET<^|v^`urQX*v)^#qr6@#ZX<(psp$CoHv0*kMAQ2EN zk#?-9z86z$!!WZYMh8T5vWbkXLCUAK*g}^gqLH#R2b?z^?#JcxVCED(^Mct?hZaMB z9v&Y<@zAAd^gU#^5FKZyXwCnAu%7eI;w}2Ni@dW!C=w_;((t1jy zr??+ul&8$H>a1`-tL|H|v+{wkg#&$q2uQRhm-5&}vxk~BjBpQ3Rc1}#M4!wf zRh5sJ7~9c*(lKum=i(-`2=%G|ACg$Z z0-lQLdhRgNe;f~@w^MT*r*QP5V=KpD;+$m*SVJHX*kf=Usk(2yCU7NokQgCSpsCoQ z#f#()B5}aP3pJ~1_XMhUYPQfyiKuyDjgYB2Fhn4b*i!v0te{vScpyM(vn#{I| znC^%YFTcLmt;VLL!khTNvO)DvLWC2$vkIc~;Hb6OlQGz!ZltzysN+ zzgR==Y$6LmV5z25QZLF6k#$+qJ=xY%UaZ)IU07Pi@fwyCNLW!rKn;_Crm1F2GY=^3 zMf3S%(WO>gVsIu?Y$dB!9HwDXmpW_A_)uqFd{c*`@*h=)h&tzDSDVPxy3{Qq$~&>v z5W22*G6uFUo;(M~v1&E?1)K#)dYtnT*hn*CFsS^iK`(Yu14M;$bgG84c6vAw9DzjZXTN;DN z*ENl&S(g@Vpl4L?;GCI2o_t0yaVJI?s-HM#S^p+Rqz>)ZV2oi+##(zJ*G&;9ChQt1 zJNen7ORnhBU;!;As_#TffkP+*DCv&EoKoHJ2xNr*3_;Imj zdtRb^!hCQgc)-aKYsEORM>AZJ9iwj8f2Do-K43)9Au)jf< z+?oWov0rN;BAUSgsnx%C3zz+HgF}122rKirq_^@4{h_}@b_>x(iRpUI!?E+^Vso;)R}Ix#oP${Z)e^GI$E% z76f_^H=f9gOdv4A0Npn=iI6e7gCP>qb&S!TrvrqV_D69)hARh&8dF{>#9TbIXtSik$u}pq@BdlP1~?NNinUPd#XNV z$CY>#iOrgjb}&*sB>VbXbf{(pfwtm>&LQN^o!CRT$9irY&YgwQ3{_4lwkOh+xJmUr z?leFkFhU?-o*K5>yN_d{f34;e9>&0U*dUQ=*HwNPtXZ;yM9*M|4J=t+sM}F}>T%M4 z4m${>>M+MU%R4oWRb8=tn>(3-P#suQ+o1>YRW+lF757Z7u0YSh2=g^B^J+5Jr#1B{ zJuWq&*nqr%ypbrm1*kj#V-y+#;L%{VDRxBF*w8tXB(9Q7xbcQd6Raeuh;+iCiR+jL zKKbDk0VW}IYC;yZ&e=E)vy6~!>nbDih-AOKriwoQ0B4~y*0kq*fJSp&Tu-dL>6uof zm(U98O9aY2_BGHY1V$Eh4<0o$$P4i`r|mK zdMdd2Djato#&`gUCCkF3qQ6Tr7py4_1_&fB39}2soYXuQ1LGl#FsXSi)^JJnO{)7^ zoTvzm>gc1OH?Dbn9?rn}Gx>NO3_4AQvWzTd7yEQWcYZ%u& zf@mYQ9%&*Y7rxC&P>6k-J>bDJo6jh=g3V4ah^1y3%a$xJ^~~NEvpWyetxF8HyC-Ak z(IK3~1lvf2)VHR(2Y7iMuFRc;ta!WR;tMNcYSl5G@Ip^TqOB}sI>m|_^RR&hfbrGw0yNjgfzc7|a`TP%r^LVkHlwm;%+{3mBDYUBhtDYU@i5Eg* zhylt|=C%pNK=s5GJyHFPn#WIhJlhRgChJwpfi;{%i0}Q6gz0KuVu(pidT`l^2NjEb zDqGERWA_Tn95mFHN}QVFF~{gCCILzvRKuEjs4rZa-QB3MS*)^Dku1z?C3aDgWoVLV zUR=~!3(U^PcZz~on_yC$I2OH3#Z)=iYlzT$Msu4}OYsR7 zKhm*(<1$c`11_j_GN-D<3=ei_wvo@ES;L!vrY4k$DC1m`yDDO4U?zGT^j}iHZkc6Q za2h&`1zwn(J$kNuin8ONsi{yoXF837Pk{``7xmFhF_Jp2gbIvdj$yQJ9DGsEmF4t5n{ zJ$E`&7_aC2B2HoxiJMeEa4Zkq&825z9&hfFG;tr+&?2vO;QY8lYdvW5JQU%t`lcPcYIA zik+2ZjL{*C2N4=tI#)q4a9m}Y<77k6%r0JzAx5f)OpYRCu477OdAgL)C6_F^bnLt* zd3C<&j(zTd>UY+m(tL0{@WQGFci}Gk+P99xSv)pCix(LW`!+0Kqhi5^z^3Y~Ih(0x zY|x>|zSyUyqO&q_rDK;imX?L3<=Fui@Cc@8R8QvAf2YtT1WsWG8|WF;XzKa#_7f0Hs!fXg=7clrjKj4YU`thq1%)nGeI6A0NhtHEFU`tuZQ9sbE}ORY_gu z-cVpCh0^H&QNSdmB#B*gh=|Q>mR8gxOLe^NJ&zA$eRFK(`)Pd7kD|e z?*{l0j05kVcWKrVECX63{5H+Tlpn@ygIQ$&X>f%8ft~-D`wq8}lMv|rx$Bp@DH(={ zrKP)_CMn06pUdTHYH~S8l#pWuMHk%dKCIVFFpq<{t%Q8OWr_tt>&dOj1}pCX&y4CPs9v_zCrr#ct-iN2*st&BhCLB_6E3VT zFEJYwGsm&yrXH*(EJt{F5b>buC(kMJ!JQR$VCDw7nmdVeEO$1x2`1fFSVL!(>-yi$ zu0q(=IPPx!ODGqP3SeP1NGappygI;1oQGLR&kj9_hiAcrzi zK0d7m>c;JCXFlusM?Z8Mgy{<*3COpr{XA~N&P#+x88jfm%~ zPRPue1J>})-s!X(pHhfDgJss)eLD;>!8z64Afg8|Ew`W$N`*l84N?}X6Ly;}G`sGR z>rl*T^zVKoB(~?UB(ZXg`*7JCOlut8=s|3&d>hsG;}RaP|Csb@jjKGEcFxTyu>;#A zF1sk_5cmz^5Z>A`85h<&iK=y&VuHZzAVOmHK(66Fgm)3xpGcqGkbsV*9-J3{5fQf;fepgK-a!q%Ysbd*e#QzpXFaZdtFm3nnV{&T)<(JIT#P( z&EBO{4~}~~mX2s--`m$@m5xw336y}?r)Wra)jo*8G1YfJmmQWmcaZq-HNA_Pflf=2 z{BTPrIdmmgUdR6hfzL7?fLR#_DL#ALW*%N=@^PH!GbQC>%6&UuD|%n2;5|e zi5wz1J~Sy$7jvl72h+8gA{ViWn=Ii*MNqR-(`-byirmSbsoAI*nB6%Jr<}NPWt%Ai zmr>JpO^5IRHdXh`2D1Ybhn;nE?l^^~cSyv;1}{hAJ`7O|95))?lTV9~s@vOAAGSZE zZT%I2`;HM@Qaf;;(o`&~PloO!Fqy+~#SF(iPIKeR>G{LAHZ4xLVB2K-sgDXQM%r7O>I?LX|B3exGFbbi6sDFeZWD2qeuy*VIHKfcSTA2;*SkL*s{!I35ghvoD8o&Y) zv&C}7(phX|+7@Co7;iu0OswpQHgD`bQL%;v%&xpx&)@+(jF|`3H#M}X12Xj2-Fb}7 zGlLg*?uF+r`IAaBm z?&hhtd$uQTAaO$V1^aq8rfioRCj=%iG@Yr=KZ$wyV5ycWmOEm3$q5rrK$Nf((S^l_ zvc_~S(buLHiJ1lOWZU)wH*z1H#wlb?)M#$b&k2i4C2C%Vkg>ddu*?}9Ip}z%!?>m9 zAOZ{M84Ml8((-*{I)o{r=H?x-jV%mn#@NAOY~W4|kUJcmQ-4s*bg3H=EOkM3;5Izd zF^}Zo(j2Y`^;fFCHQLbu+@q{=$6V(YSVXTt_Vo`XB*I)PGV>C4YWnZnX3XTO<8&*e zAvVlTP4sVf1fpgQ$$_y^4N|Q)nhbcl|!^EF+GpYs7XD8<2C1z#`-sqs_(?+oC;ATRcB2xz^FqJ zJs1xw`cpnwZlpP8rv8&5e#6TZcO6BV>oywnOih1>kY0XgxOjFUG@9I#q|J`rY_&~2mzz13= zTwuUCQ43g6%`{D&8e?0rs3Db1qBv=2PW}jK{F)FOA9HCKdhHNyAuE~296Xim$W`~lSN;G&ad*Q?T^aht$ zt_1I-a=GRbZm27(+<6dFwjXrU($YF_j!XJemM4>hl|?NQGY70^Zzk1l*L-Tz*oe&R z9ctAEBYsNYhkv;Q~tvvUk z8}~ynz#>L!pv382|SGABDoE14>IcdOLdX013mNNBQfewbYW|J$uSWx z8gy?kTb#)pIB@MC<#uV(aop3lPRcVY!BGDJ7Ybpw2X<{2qHU%JIbvOZXG(cWA$w30 zNY#nN0eleE3*~S(uv4&kFo{udYbIF^IpRefYi*wU$1fGn*g>$!c zA(45uIXS1CQ>sqfgkfLW$L*R)bgP)I=T2j;$@ZhgjQ-D3cJMcl+HlYx6dO3Qk zrYmZ;SzbAAG83sjh5In`0*Q^9+*w(bJH}FdqFAA4u#Fc4~&m z7*!-$ z)D)wd-{9k{=z~&mq!=7wmEAXeQ_W7N<4uoXjCU$uRTPK14}$mO3cXk{se236M-0aB zmU826L%`Uv*q^O4ht(9<*sYi1e=(c(!Z8d0BmfIL-&e1PY6wZVK9VGRih0ZH7CaS9{j^J_ zq~wWVnG(!3&2>F@%mz3`6PB24yHu`RGRKMj)s2(6i5(;&n_gAdUDRxxifQC}#y&OW zlcvSc#8GD}61IlfcRf~!lTN0J4VBBB#?w^}UXF7}1eWV$_VqWB(bwRF>c0L)g?XfT znah?kvCZ~Ge_NAtvt*g2x-0g4JUqxroO1fc(`pA7hD(syu1xX3`!`sy=JBe#gv1yb z5(1H#-v2-R{KCn19pGHry7n+kuSyshX%_}j)+aa+!Rk_o*64TY1g}#VrRL@sM zc~ZGtT-DvkDo&~{gzGHW^^vP|Z;)1}EfVdC)ZY;`ohy`p#1_(A58x=WMyNc)QmOVv z1X6V(u%$W?h?@G|0jJPe)%3pryDsS&B(e+UnCJnT9ReZKoUfhJ5QngXA+qlZ?~^;3 zh&kP~T`@_d>UHT;b{aQU%)O~e1T5Rfx5le58`RWavv@Sfye7_0`!>)6yvP;3P*Z=@ z6}h51Q-?zJa5Tu1h*6iaG;``1bVzm7^cSgR8jip5>xj&V*@fySASDw5Cp@@piCiXf zT%IgdNbI1PnbX{ds#E5wv{O?*#=5lcXEWU+rMV`eX4a{>uV!_ho`@mdsAe9|A&0B< z41;{JBQM+4%Z!o8msia3G`5*s0sDT079+zB^+hStbw;R0DfXaQV!>DBX?i|)sG$tc zV6y=HnUC2xaetPPG)$z`Y~9%1Dre3a<`?M{P<75xB~DVo#EMvB(^?YZ&~=C5T3A## zHAbtEOLVCVb-cD&+T5oUb@!zBbnF4$(^-c4dveZ!{Giq2=J+(wvBSb0T!LmJJ&c(> za0|j_8!4~S$$n_Tz@~($8gMI)IeG3FbhG9vy;j~lOO6puEK2m3m4%^}Ab=Jr2Nk#1 z^{;lKZsFoFay-mX{i2Db#V0@B>vbPg=7bAsuihVUsKcHdB`2-IMy@UlqYw4HTG9@DEc}EQNt`n?#HR03t$l1|pmMR?HvH=tC;a zaLvuq;pTO*bBfYaQ|!SQZ-UtXvBKhN?yO*Eg}p0`hMCca3kb{%Fvej_@%E};jzFRd z2-TfA+2k5he@3WXM&{BQ5*Jhlh6prhR3`$5`=(eTN#%%51QMZoShJvrolq_%SpTHP9NW2JVYqo}&7i#(wq3j$>sX@$XUG>JCLiWr8p|(MqYoHW0 z2Qb1S5>ZnKBzCci21j6*#F0+NTi^(c5vpHUby2z1Xf?&g%jT3AmZyqg-H}HB?g%X! zM~YTDP?EUvnaxb(c;Cea9Y7Mp7_o8ec3K@v1M7u?)v7udMq=a4Y}7{F2pvx%T6NV( zMVgiKG0pv4lTr;+u#!q5&S)hKMIDFZI@o*zEGi@+jl#@YThSx1PTr@kIVG#2fSZ%8 ztrvF$ZN43fh!>s-L?GFp=G0L%XJ6If^M?%7U;x8$ojtBNT&Cs-3dwyU#9pP!e#Ztr zL=WT7a&`6@Vl!UUr)}|gMpcVw2`&ITDz|T+Q?AahWD*@()7LY&KpfV{dpLpa35W1p z%m!$pUFqvzJZGa@)$})5#9`Hku!yWVfj~+vnm!~JvBG@HB$4V9frgl%MWeb^4A7%A z95rJc!cnv;a~mVbq%J`sm1c;+wH#l-i8j_? z4Vg)(kePk7Zf!@ibdPn#N_E|KA?U$Ele0H?S9DiNAhi`mOZ5>Xj=3aV(p#YIYnzjo z(;9mRrWNlGiFfw2-A%i%cmWc1Y~N@QS&-dadJj?|fQqI4<>fM^&3f&i$?I4gl9NNhYWZ)v1DQg0W$uivp?^F!XGc}1x z&6?_-swjkFl(JQy9oRybFxc*!e-Hx2p{56_4_L~Rk_FzOm%=4{ev#MNE1u>8{X)i3DzviclEWJSQjp?SUXA_%>bYcEVfr;FrG;K`llaDulXENDjGTWm9xG$ z@6_f$|0d>~vQf2-?xv;ypc8OU6uV?4nW|1%)f`&5@e*MgeGTs8wq}VJ;ZdyORhN$G zO<@H)D>3bR(6*RvcLv?3nhOXV#uQILi(7CT+R3(O;j*V~l}FWQoWmXHP-$|dxU(F^ zV9%4~?TIUG2ysDWX9is&9>fM7#VVH39p#BvuRUR>yh-e!RejFX5!LTl(|-p5SDnzeZG(VJZ;R>cVC@r0V* z4%W}~pfoduxo%--%^Hd;tm88=*D=bD>L+?62cs_KT`6M1$(mNX35n8R=EX)KGIlw^ zs6!|(RPWL(cUpG4?*oCgzAi;YBrSRn+7DvI8FU10-YFrA0Ya?IVW$ zT?R<3PO+IgE7)04*$q~6=f0Y5g+;vXJ8?BP-iLzNelrAazL6E2zz*69G6bwt?5y0T z5WDTcBYIGgOSjZKzGk`RDQFXF{N?IA_6mqIVG;VafSKSTt*l0_`Wz5%UG-Fe*$*!_?kO0oYUiLo{ueb zpTs^)*EbRZr?6pLdc0Dxt#hCwwksyFLz!JNM^!DF6kj;TJ2^SBZ_6>DqfU0D%*xs!o4oJIFR^@qX8z*5bznk%t`27wkg zqYwz(f-RI&s&A_)1{mShHATvz)CG$*4=Oiy?RMT-e*AXDq$y4$*07=a6qaE;OiLBZ zk4K^-%yf<|YPB`LnIoDW>{<>ingP2tg{Zmgj_uKmFxCGs_8d?`O`sGt{qtBv>{DVF zffmm}xr4-#>JNn;p!>eiq9dw~y{OYVQixrRwKX0>gEN@y+b%7JN*JHVTWs{eWf$3` zPFbe;Stx%!4pSQDi9Y(CFy}J5l#zn){ zwa_C;W-qX)RaC9B#4`Y5Otl8A|LoVsQCLJICN^oMnk5n%SznQ|khfWR-zVH_TC)?f zLq2gu+F@>>yj7E{X<$A>4)oQS!{_%itC3KAvLWsV*q0-~$dKh2v#G zCB}$v=skzaHs*m}-0u(EPc3k!RJBdlsI9Vq0207*AWM^TAQgL(Bt8%h#SQUHmCJ20 z<9HA5;v_y0_D1gX>K~VjU2~D3a}!5%wePhCSj_FF?zTdZXzfak$F2~nufel94W9v0 z^?JoE@n*2gI^Mved34*+C6_NI+(c7V3^1ibw`0WdQ`o^wb%gG~O)p!!Em!;E2wBrJ z(V>9E9X02Uu*L3SoY8~zrVz*7%`Qta9t~G`AZ(l9W_&6|p6)^a>6%5zbNOgTTnLtS zZ;CEm_<)mbvjI*arlCa-tYOcggtt`vR4h`6Vb=^Iu~wR)(E)~?XmF~{jb0~XGzf&g z@o){HzZKTJ$u3jtxoD=7i}(OYSSAscJba)_BL@~v>cQD;(8_G@SoX1ijkn9ynM$+2sD4T;A$A7Bu6-G{&}RZDjq zJW`0gqupH}20cLbMZ_9f)tPNH-9yBJ>a#N8tfL<&@nO0rrx&+rnWSy^*p@hn=oai` zib9ZKw+Aq%$E)76@lG_9CYD*GQ*`K0x}x-KtQMLO8-jlZ0*k zlWZ7r@Gh^t5PA8)6oKBL>6<=h0a+9HEL3MrHq3MIb!%?I7z3e^r8mS!0YWb0!Hqa=M|IxE0dx}=S)nM3 zeia8+5XY)^(V!zx0vusXr%#t~5}(0@^}Zv2Rrj&$g*DI5TtkDz`&eOwVKE>E(|E8D z6}xILVTwDED4$f{r1GAQgFs>pZO!Zei3e+zcPY)%Q{2B?vGjp7c6}gbO~qMF#jb4@ z@OahR2$^cLQTd2}l>02$#VY=)9C45y;IL<~yAPA65VH%mF-g1{QG+IH0tZlvU1p18 zn)#~E8yLeeHn}J9ZNMAV%mz)>MT{{ka0BkE(u3D4gawVy=CK2nM^ulimJU=cFJm1& zkfr*Iq7a|lRE`;z6cfZ`V)H!shhE}SAMaD`Qqiecp5YY$q5!%>9sKu&^jcc{guB=tgti*ES%0@!0K!}_sZ;}PfUJ??pef1a`X z(Pt>`PndyYPQNP73O2#&W11mqfWz|-x^>(;B@xn1GlL9==TrHBj4n-|DU3N7yZQ@} zV!F-|&9axVteit>m|WUr*Fjxcre|o5ciyR39+w*gX3h8=qi=UkH zy`h)0vb)>pULj#Sa>k&T!;LIiZWyEcgxP@m?l{dNmp&zo(Q_K6%BoZ{=QrU9fkbl2 z2XQc7Z#CZ%fv(fA$iXGNl~UxR*XZ9pjzDh;Tf@xGMa_L8(!@HZ_%IhDy0pCH;Nn`h z3OtHy(IMQ0t~fH0mUcTcIm|6~*LPXW^`4p86C)i$d0`htt2g?t-CgyPCAxr_3%fXI z&z^;z8IFcMaQhLG#}^|sc$pn3PkgX@wxVz5PH7BBx}?Rjm*r`h?}*v&L-jManX=Ro zC7j9iqc`^s9~f9VX{smtv!4 z_9Sq)1_UC0StTQmOT$g4(gEIW(LX)LT0PFd%&RP6%iIN8$S*q9as)u#1#{T{L}}rFkIJHHBcFgR>(fyX`?T7Q0jmw3svup&0Bovq7`##mf$^ z)48%s&}eo&Y1mVx=$SI7j}A;?Y1y)EoU(K3Q%0b(2d8#2i&yADX%1vpm>lU0b}yM7 zEbqF~?xZ6SCFFSK1zw-+LM&J8uIyI5Ud@9DBmx~#^JW-gkHBnzbxd&yCEy}@fE1Cq z%|YG!Kyr*rdW(xXhjo+P=ND5X#hvcO5t4)5)w)a(Z-ybtjY80+(qyULQRSpdOKfoW zi%;xi-y2mGhf*}0;k}7#Vid`TFZTpdk(wUFaZUT7 zXqn7*)E*--^G>6GSM~0}W&KM>kmyVyXdv=T@vtZ1l2W-SYc`4%J-~Gr8FBnmle&Q2 zo7lt|+eVIi$IJ{~Qi%82;JrH>Jb`Y&?$Sa1N17va2kf3Ji^Dk+;Kt==>IimUPj!@# zWd+5S>bpDdgJgI2AjwNEGz1qPb)8q)ZDtRh22(Ds;4D5ZEMNvyKTuWXbVf&*E!cIC zoX`7R+|^8WH5a*oOP}3@mgVPcS4_s}5|*)!3pJ^_a~~LC?@mKUlu&v~bpyJ9f3U_| zIpU=l;4^9H5Z(-dT;IvQXEG=az5QtHPD8JOA7rWO&5w{A9AXQ3gy7(IvWUa>^-N7ipl5h- zlu&i&a#83n{tBI$zh4*f)6SiIXg099vCh%^2v=?USLFNXT%8+4HT0Yjzbp+d-r{qL zSFyqCJ(VMVAOS@j7ywj7gK#inqBOJp{9Wu$a zYt?SU+|}G-W}br#IMPk1T>Aas5jigZeP9ePWWY9zhU4tgq+HR~wQL$A123PWu5xZ-c8D!6hJTU2qm#}4c)8kPBP8sWv@%)~Ym_k>ScjOG&+Gf|X ze6V|ASo9g}YK}Dou2Z2SN>Emrvq7(8LPm53afHNEi^Fg%dvM}93ef|Em|nS)`Roas z+_Yw-%6NP)lP@)sIk>J^>}0kmpI*W^J$bWcHgRd9_fPpbKKL13T#Vq-b?8JK zE2b{$6c^lBi00YjoJSTx)h=EGM4X!q^6+A$*-nnTFIFv;8^y#rW0qzj9A>%22$93S zCrngs7lR{=*}d!)TJD@b&7LT|`2OPuE!tIVG#t*2EGuN+5rTt#kBmZp$cvW;ToNX; zPEB_TYj`Up9$J>>*I(`kfoC4me=v4Q(S08qsv9iy;fRBuNpi4dcZzj1?DF^{9|g&! z9_T)q+FqXGRaRfM=jsv-7vCHY&1YV~;Zz!$*SASDp zGz>7iNbB=fI;j_u)>i`!T{rg3^+2rf7u1w2cPZ|F8L_s9=gQmsP@&k61O1mDPShz;D=L!m^-NuyH~#DGreB3`-F}_&*027Ue)*EYr1z-m+wJ`a21BQ zb9vV)x4)#*;8k4g?Q@#9#~Y&rc6+93Nl|eQ<;D@pirs^l2{NDGOE~DV9G|iVfzN3| zu>Cfw=dq5BWrC%rU8)+_=$t4GPSEr++2&heis^D=?+v$i0WCfwbZL3XGjSA8&D=@E z>D^8=TTt{gM-J}3*d>eQ1i@SOK=nts@tHv(mUj;xk+{U}u|~x@&R=o~djI)QeH{Yb zzf#@n`Ju9jQlST2Dspfu%VjF2)-ge_Tov+C)$9mjDny^&H=#p)kMZPdsGs-u=N;}H z?=iioEHZk=xc(Gk71gdGp6X54cY-|q4DawxIHlv1MpMgyvx?44Gm@oA6qoG(F(7-1ZN7W`E?3hz(+m z9rqs|&)G3gq45Ue^A1UIO=TBMf=2r(AR2)Yd&PtEChJ+6QuW}#_;oj4ccZuXEDrR{ z`QdodJ0WAUL*tx{4)+X&QoA>2Ry27zpeYBGf}%%pN9E><{@={yDV&2chilNy!CC!j z0fDUPf`}V%2!U5|uq?1QLT^xrTjC%(DRc{pQzH^)rf|WMa$~#d4)lN`XQgKLuuI}0 zyvk~JR~zGAbdKGb1Dcvpf>J3w3<^=KdM)fnS5)b}`5>H?y*an6)2lFZqq;MLJyBWZ z_`|6_XSw1m5*zb}$DI|Or&d+7tbeK7+NB%l7P@;_x(!jZ<`ec7n75+Hxo-fwV|)O4 z)2o-OioZb@(6GD5u-m0OIJI-Q>HH2Bt!HO(kO4{~k-g~G-P=h+%p5jkmn;aK?9#k>&qL;|bjBK-wQ@dl!JL?%J4@Wp0(}T~bddb6=ZZti1q5E{S2o?u{HOHjm z%BhPwh0eiCn)w{}00)YJ>Rr-mUYD^C!H>F?%Asp@Du#tuNCv)+e7PW&_oULf{d+?_CFBv0)ys zTjm_}j$%6NH2Nn8Ozru>^7e;C$e5tT^C7b|MLsYPmlhm9cvW*rcZKOeN1$8Gua9$= z#~*1p!V0_lF~36K0VZ&W<<3gw!I$GK+H!&^yNB^GJ~&pmv2T-OfiB^*W4exp$!w>n z8okyr$GD`}gAQGCu(yQ)_FOdFg_+SUvNQ(WR~J+-V>9R1A70|w7-N9#QjF*OI(@K; zV$NxvMdwXVbs$cChR8y&vpz0WZ-nz)Dta!3MLZLM?_Vst)3TypxP;HPp$qIP232?A z5zHiz=m>`O-Pu0@ygaOUzWArNQ9OT)&X<$E2bW@u#P#suCwp(#Y_4__XyK+N&85D!9F7*|j zbBob;>%AYf_^9b~_!Zpx=`XHkY0l*8!wGy8=DPk8X93G`^hVHwp(k-)Ez}_&9=Ler z^Yx>P=-M#7fYcBx1_0D=+m5K=L)ApFRGSd0F;1MQa}FRjt|Oa^jNSgj_n zF|V<5#?1UndSmGujT>+DCp#WA88qj=uHy0gE!_`|hMxl;THC1XO4eH``{+q&c!O zUm6a6T9`SQY%i;dBE>(PVopckE-v+;=Kb%|t?X>PGIQJ|ILJ{7v5v<8us~102Dobt z9a@Zgms!Ww5yt#x4lOZOntZK|i#(g9hj%NQuCqrC=?BskX9%9mcP@&xDEH*oY^Lu`UX<23N*;5E!Gr)gsKJ!qXIq|{p&@Os#CifQe zhw^P-PD^iVlX$jp*~2aC+3cL!k>`Bo4wi}DD0kMc#S*5`rMM5l>a5*I2$1I@Q#kd;>!HNnctV0s9m{H5fnL1#qzD&?8l=x zgzl+4WFBVs;VQ?q;^9W87nLK4jCQM3yYxEJ-UH(1*PkseTVPBx-w^B`giyJ7 zsteIuxnwae=_w@2IatK(i-y+*6pQzL!^#X~K4B4w@&Ricn;oDB>l;n^bcDOGj7=;Z zA=!Puc0JW+UpO-fbO0;psSdO^{CP1&EIqn(H>aOfGy8yEgxLYkm1e#aiL*CsMwcdb zSB~(rc_aO0K6(#Fh|E&;%&vo>%pVkjz#6)yLv|mJO}qd-!}d+f6;J2^0t!JF*zJMJ zT~!?8Boa?Wr-w+SLhP2W{G(jfI_6G}+x+QXQW|zIZ{a+SG(3VqFDJ9COrLq#=@L)k zqGh^Nntbqj%tjcXOUUQvJPz(6aPNoWA%26RjTP)PEUpi7wsVZ5T zEW5z&Gk5i0dcCTHmv5+k*JG@xzAU1d6)GnOYx?KWOYIVLUL2Xwo?0wMZ?>yh=h!={ zp1;6hbOHni4{W`13)|ThcRzGD2hS`uuD84VSaHjGX*z_5@mvntu9#>lb{|@%OITd* zL1~iRE?E&ctn%PJr7BJKeSn(T6V@mbtE#&vT#uf)hBu(o@J>uw?(P?+$U?Bl?rXFV zn7M-;nwyW%19lHC(}m2kxZ$EX4!Cr;s@cQAiZZ7+C}wCW?&FIqamhKE)<{~AaAg^lOHL%FAwhDYZWNL^1X51tFn-XF z0GD|$j&Ba zc+*XtlYcC4J!JmPgTHwY^L;r}cFvKp9(x1RfQ?s{lq|AU(kk5SD(aYOgvvWJ{ccta%i&eu(=`D|8Z z=7-rL7TU<&&Ph*UKZmA_7S&9D8-p9 zi)Mc5wf}H=FaP@C@L+c4vz{G1(ulb5Oe9B+e!8VeIZJQ)%4fFGx5k}=WlMW+R^F*= z9=nRo$Rg)OF>#{w=+I^-Sf4(yGGA`!f5MyX>MsOKJTTci^W-wsi!w6vX_?t}1Baja z`Ukcih?S{}*>&h8a!=%}=FsiwzK?DYT=~pb_BtK0V_d@9Z|vmwU9pZm5k3txd8T;izO&~r6Ky_b_0)IM z<3r4h+GZx;(&yAECX<;#Z#26)@su||l+S+gY_LAPM8ic`q|=H#koRWK9OwwsbD!R0 zL%s&$wXa^|zSb9G&y$_gy_{Q0SiiPQivfqH(V5xqEe>bfY?M!To*5j*ZdRmY9nr?x z{Avj=p2nR|n$Pu*f+phBb$LgM=fo2`Pejh2Six;9_j-y&yLLXC+;dfSM(>uM^guHs zzN>GL)^!3Gy*Oj~CcDK{4r#7^q!33~G4H}h*vKm}6Fk@am06nI!&t=9j1GI%;Pc$fNzB`S}<|);=>wg7{58Y5s)JzZ3g@e(do;gB?#+kj7JC|pR z!E2e>Gs`9PuRJmyymrv8;K*Y{4oAAk#~?l})Aq_~cOIr6F_jF~(zK{)titYZOt18l22n2)vtxVB-QgJ&~yo!x7rOVfvH#$3AP<+LcK z*5|EkEF6&Kt9<59|F!NX3yJPZF>qD)>GAPvxeW0U^B4zb9*{V8%X$x56o(^pi}^SF zZCw7yZiv|`GD>8LcsGk;h69-|9zbc%eCPtT0)>ybc>~_?yT&^#2AE zfsX=*uRYL|JNi2>X8v$={X@5z8KoNMkV2G_uephLv&zRju=@{3T(#Lfb>RqG?5<}I zcFxI;I(8znZ5|nP34<%`O?;Y1Ms0^syuzR~88^%p(a8Dr5BB1tPkqP$U9^0tFGu(f`hcYW9Q_%Od2&;Fp#J#;s^1-ol0+ss@pgplj=ydQ0T zy5nqA&JecP&29aYlQWKMy?5%F?!&_fj-30Dzm|8~Md#ns_TakLcv^JxZP_+Y-8eU< zL*s#P8$Ja@W=~`x2+ZyvG4oJ9WG`C5-a)yca8TS?!L{r@>!!o=Ek1(k$Fz27aa46F zZpl2r!P%gg;sGcIob5rJZuaKH8$O#$dk&D9Z(o=2uC%ZK!u^yKT{$m$DvwIIFrVw=|D>Mz zG5$1XN|dL`E{AEJjF}44i!7o{shuCE!+WD^V!EC<(%aL1q^;dU^W&G9dO^PQ^&U1K z`}0$aDPgnfg4}621^;W>`g}jmlQHte4>&Vs_0)!&0#vhkoN-`f!#y9q7VJL~ zxA~lvN+qs*t{*tQ8vH_WyPLyew8#-2LEeD4F2-+jLl|r4q7tjCj8~o=&ugTq3ulB` z{}tEAEcIe<@q_qh4ZlELyDhJYTl^fg&srgk711O~s!5i)mTe`jL4;WKb7!9yp~XII z{x;{&pD#yTn@N$L$klt|X6TuUxBNITzg+lK#0cyAzR`j_&d-y4F5=uy$PjZ?wQXNN z)?7l|CT$B@ly!d}W6tE9p%2G@IICZq{oq0R+`r{EZESt`Qx6TCp8Q3o$05RXk<*Jx zR>mvpPX%67r$Jxc{i|6HK4`IOrw8MKtv2?z=X8VCU~}fM=gtvUVzK*TF*XN%*CJ}( zZS~%QZ$jPZeR;hz)6%j+tQlNrsxEa?2Z_e<^Ekxr?BYZZb`HzQunYD>5_-Do%CbwsV&+Ok5c+ z>C8M@szZ6hYICBP=nXOt<@Jv}^g5RZCmXpwzjE7nuqS789OXQ_1cg|NX^d&QFx|Xg zk(0BYzrWNJPd(3PvvAhVhk5iw51Iugk=9KgQ*}MjSZ5y~T|42AR$JPSMKCSF^>L&Ba{rriv7u$f~z$GV=WSJ$G_X!s~WnLA$tZ#jDz- z?nRMvE^f>AV8;w(TZ)}r?`@6q5hMbe%j}I-;?AOH&*}X?^_#Hn{|VNQ-rc2fPxP$r zpi6l#moD#_-0oyPzqk6fJij#gZ0oo0UgBw7d>9=v?1&p7vUG@bewpKejT< zho1F3;bn{6Dsthb%S9nb*^4&M^s1hb^Eo?nq6Zl)xl#YYis9hItsjauvs7;qGlvd! z4=Y_L_8dXR`59O!)uD9V-~y~fbb60iwf1}cEUK5SC#<>VHQ4u(@wQG0tEj2-LN5g>M;Ai63@9j4=M;=wZ zg!4gf3R`&Wlgi}-SYf$+Ran6pT#sInIe!g4aD@J+<4T&Mry16h*+2CL*-h48# z@AF(X`8?d6{B8VHT=ZJ23o{SX_fUQO;nj~9M||{XnH}K*0!LD=VG*Z{PS~>oQl*&83;o&1JmceOmt);Joc~g$2He^3gXO`@APK zC%X?}CPIrI;0=#4<_WvFJV4n~CeSlYsb&YeReMj5{W0>MhZ#SQXumht=dZo)Tns34 z-u=cm-W~bP7+!m~R()g3Pxz7Gs@RGyVUyj+%(cbCpR9Jh*0dH~h=p9p1++JJLe5I% zJ@2(XHc1bxpm&(ip=+jl81HR5@JW}!*JNy*E6seC5AF1uQG36nxbmaNM*oPL-yv`N zfS(-R{#sz?k0Uhx<=>rad5xiNw$1Lwn_b$~k+>Y=pJeQQ$TtJMU(~qYYhstL8`k(} zOSyx{y)oZ?DZiW8Hd7J;dv3=4cb0d zw7;9!@V<(-K+kZb*OULTPaq!fP5k!C$BOB?ZFYn1oAX^U8>48)K56v4Crt4Jz3RXF zS{Qq6^nTQwP#~BHE10>#dTx|-_+P63V6mg}(uLwd2FE@!N8p_b!3!unWh&(vbneuA zBuo)V^qkDx8{qIVUEtvRcEq(^#QQ@3Cnu9X8rM1-l5^bnIbym#pU+IWLlN}UGV3_9 z%tNp0K=*0JgXG8uY&gTgw>VhglS9`m#$N-~cb7Ev+}I~~?JiU=GmrO&<#M9p_6H^e zPMSDD=c!aGmvfsHcBjuDl=*OIkLE{nw9NcoU8k2nzOH0?hkF*>h#&je3@|lnL^BVOn#K)ip6l=sB*}h z)~~tfXYmA^rzD32Y;PypQ={eR<%Pn`iWy+k@9#@DQL^jd`-abTQ~dTm9*%<4MryHM z2hYX#AD*p0HZzW9c$E0CDu5){#n(*C=b;}BNBwXZ^Zn$7k5B!Ph#O{onyf^n^~Ifc zFiSLru=y9`$;^wrH*w+7PRqBrrIS3?J23{uiNiU8s0lId!wj1I!Wf>z1+zJLA|rkQ ze7+ZugAT;eJ&`@}E5K#ex(aY@(V%B3^>r;>oz?(Fnskp@EJbwrJX1q zJr{ceT!|7;vY~(-Ar^EXFtOS z7WdGe&bVvfe&pG+*UlE#yg|>r;F?Ef8-M2qI@+?QRyrJf?O~wT#0Pukhgj=&W}*l7 z?=jsRr*>YW3PtpvoW>p9Mp-KF?)eDdE$Jz5Iy$p`8ir-(b+nFqEsExmKRSf7AForu`~x>|0nU@tEXLmeHTi|^~tHl z*Nm;*w%Eo>_d^-6!_uBabZBLfr7|bh=KXJqI&`@=@R;8>%2bkvKk{Qiq=bNWCD%FZ5NL+j_ClBHSgP2I55SM*Wcb$Xw;y+ecU z)1Je*nIvXnvB1qf`T7{H@jf`$%rP>Xr}I#rxPFM&bl>?6&NB9(_@96dcJ9Se(beQak9y|Ykh6zX zAEo!h&Bcdi@FDk_xAO+D2ik}C{Gt$_;$`Al5208TBW32mRcYfQ=eg82OzFIOskGCr z#52$X?44O=oz6vZXC}Dp&S&^mokZC+d^G>-b60_WuQLn3<@frZw|lva%+5U0><#wR z+H0fyZo;*%b>H(kw&+I_H~p-d0+d&_deByE0sXM>c|6J>1XG?U# zCWReZvecSI-D^C*FYvs5e9iy=|E&04|BwGI^&bAef8Q$bu20^6tarQ4lwvQ`KFU?4 zip{_?in&UG8$E7c+wYMx{Z7&C#yUZeWsXAd(3$VbYyR?SfxGSNWq+ULKbimeyJdOw zpWh3ay-{z`q4)_Ew*5!NMLzZOFPp#eG4NP?f0^CfVWlIDANBwDe?PCl|7r{WompsY z??>+WIrQHD4{x=-b@|skFY1k@$NX21{SRiBhIjM-^Ya3C`sDe0`QKjeYohtCJqPpv zx6HKun|pJQzWe|G|8ZP_4%KD;f2S2V4c+@GU;dBd3!LGb`#$Esx5E4QKQMcNyM6L~ zw%U;@Ln3^rdU7B6!f5k;y#Rag_kF*{2~PKcuNn_byy6FbqHja}PCu<`zAnC-q@C>5w)ci9yt%7ORTkb%awzHqrDJT>MMshmTFS7eVC3$O(jRG0OAb*5qq$cwh!8acWB zod0qkiT%)T{4wUEh$x&mr10SxF@dR~U#t>wNP3+IlbA!%;~y@2)_ebORggM&Ss-$hR&8|==>5#W2Pz=vpFjfi*#C#;98EnZ6SEq4q^``>vkH|He;#nhwSQrPSIJ7Mtq9Ut}`%^bS4(sm<< zWX=x`UmoloUH{kq?CyGm$y2fT)c3z9`d?jkdWTzYJ%8(EqPUB_N3pg->F)K{pvWP(tSQ zho0Rt<(*5r7E0u0(%gyluQenRrRs>yBC-_)qNhEV)zQDc#m({JI~2iGhoW0`O>u*= z!sXwrmyp+=dBvFz8W9WlK$fPDB^;U#R_0eCK14h{E_;}Xo;1Gf)t!UL#mj2BJNv7^ z2d>c9{xbh-A9Fkwqxa_F>_Ya;iJS63X}a{VN8Zih)>CEBgE;kO=Vy+>EVIC~9)}cDtYj++7*A7d_Ym12+BAT-3sadtK(hDw6tY)^E<3RzGo{J3d&b>V}A zX7*ytmYxEm|J@s2<7wQb$gP>x=4`b2+&x9k1beEt`c$zNqd{qUPUe|I3q8*x&0c5{ zW31nBS@HC8&&J;B>{bqoL-DG6wGuBF_eQtOE)a)%=1k|EoX>-C-OAooA$U^GKN#o% zdV}81;rYz*gXJlkcZaraDfME`AZ9W7eQI}a%&`t(Jd^V&ukC-sduO7DIvY>A`wa~y zed7a7zOO@bvVrZ6P{Q4-xjVbU^|%?c1$wGI-)?rI_QLuR_EXH4i@Y{5*(>&5yzR-y zw&wRH`EJIR%i6lv(#)mL7MwrN~Faljd{%9>u_gzy7!GeU+Z>M>Mpv zwe}uE`E#ugf0F$k{qE~BA7j|*cXAY$i^quf!GUj_ZTCrY@HIp6wUINW^6t*oUrY8( zmx5h)dNm$94?1E=xhQi^Gf(Hp@~!syMf)e^&+XqNOnMF9DhEGntg+ndpa(&N(%?CT z;1Leqw#~!1Eaz|uJ!sLns_BRl4vah0*E4w_v3F3@O(1b(JvCzY>QmjGjwtVlexL;=f8yxwSe7&x&Z-;_A6pclc^~uRqi5@D zvfK?>KH2W{`EZwxnVE=)8?ec4ZAJ7AqfDd)IqxwVA?^Xo!3_^a6P)K(6n!+cqd+fL%0EZJD6wb{$3&z2a8cnZ_Ci$)+dwe{es9b zGjX1;KlXhMY5IVY-yqxW&Ie01I}@AJ0hW$bEhA$kI_6F`@Y&(D6BOc2aTzJBR#@Tl zpa1UuT(j^EpTCcNop|}jecwgD0DAHJ${d6nxNgrtV^?FggEKTOSAQ{XM${)%Lg-6@aG69_guZrVhA1?sYZcfgFTIpy(4yEWksU(u7OxYGmAr>em;);`Z0@~Nwgx# zoCBg-Am)#~;zy^CeFr#zoJ|xFwt}xsLLxK<03hdJq%lC*`SLS3 ziEN;Ef(M=Rc98zSaw}f@s-6#Z|382-ZXC!;d30J$7Z=hhXxJDLr3GZ2x(|`R@bDJDGWM);!XKJ%>EJ)2(*$ zoQ=%Dg97m)Pv1k+_360_YjM7PT`cbsSUEadoheNoF4e|qm1jzk@PvqIq~5^HMVFp5 zeiHcs*Vpql@BZl%oBjSZ``6Xp!&3R47M+>sn!TA>+VkS*Z0E&=u-nXxHhQQ0CO><> zyz$|W<;UXhBj^FvS?CP$`?<}Z%FR{uQ*QpJUkBg8A@sgD5M>~Q-6@y_3Y#qpAmDzHzMbf-Pb@vJ@=;Q-i(Z>F5&VLN>&BUu;-seuA zuh=^C@Z^s81TpZ1#xkGJ<34*kC!connQLaEL+^9(uHNCPQ-?1*lyJs1f}7-1H?pVJ zJvP$;hp*k(+&DZ4^i*f6OC1RGpq#_ga(y+gY`X~$+#35!qeBnPXU-P$nPWVkUFbR( zXXZ;(9^6@Cf6&=uJZP;fKJf5U5%xqjr-v8gIW2C(&4u7-u9xa4ZbpMeUGkBYCZ8=X zy$K@6+2Rr5@~L9L8p=bNLzkckRF=lP9^gT#3)%KmZ>qOSxHOYf2<~0m-)*gRW^UV@ zPsNMJ+{umg>EWaK*w!Q0cBunsiVYcD*L%QG+>AgsvCXY41-cQ1=Ui^ApWnFo_3Rbz z{K#$(KD(YO^UN=-+htDz=ca83z7=qAu`}xA^ah+Wy%cBi&YI5Rm?_S}-=j6uAK z!SuB%Q=ublIy2K6Ok*X)6TIttt(u(A&ERhR1+tjNdxTv!DRVZ9ic>qMcK+8r@7aPSy;)FrZTz{9D6E<<#!0yxDZ4xui2OF27G&*$j zlP=x^M3>z4*x;is=GU`)Ggyoss9m4UWFqnWT}p$QI|wdy2V6HqZv#`V>wZ$bf;G&Z zU_47{cCnf_u+%e0SZDV|NF>@H&})mk-rb=P`ga4}irx2(d1O=7|AzBD$TehU2F_wu zpk?=yYt4q*W17Od3tsU))m`ml21mG!-ShZVa82A0mlrrY;SC)3SfP4vPL9{_#z8x$ z;>aG$%VzQ4EO#yyf{A;#RVL2#?QRIWjU#lN$F?4;St7j4V~{fv?F#p)%r@vPqaWBNLrCZ`XUZF!M_TUXUMtX0+Zi(zZ;{~5o zw2BhS94-U2e$ScL4<8ZNLFARz(4rD2iIJpr zku#hpat#G73x-1BhsJ~DFU~`4bv3j#G#X+eWB@*^KL?Ve za^`_zok47>5t87n#+f3AMXS4*Su9!F7!(h$aVV>4494j(qh+L?Q;H+ZdK|Q?KRqzc zysR?6a$_FK>-R>lIN8f7_i&iqH`~>JDX^a-8+JXWuv>_yRK#_~K53t$Zpt$GmnZwOTBRism^_=gS!)J25dw9W4ky>76-3&ah z2O^$2jp&du=gfCROuG*&>()OLtf70tHAibp6`d^3FJ8fS!3| z)^un*Tw9P5oh#vR#!TYkXY{~0!=sxQS_9s1ZZi{MPpdhzx{&j$Jypzb8KIl#z`4bW zJdt}2dJB7gDCRuW!rJ_suAh0uh2`#t$1Hm0k;rCYQmXQ5HfZb?qMSJL;3Q^GgTrSU zlI_8KX5TxKUBLeNL!WWn`s6D=Tx`B7P)sbEtu}ga^U>EDaz`UzG$t@E)Hdvdgk88oXVb+2tAlznO~PNxci#dR=*Sfi(5nU)LRCEU0Kl_c7NpI zoXzCn7dI_tI-RM-xDxF$O&*%>I$P1++U}2gn~*tQytzKt^9;xCECRbTgX{Rp$2O2XZEXj%V~`OL$3?fiIb@LJXDuTNLr*rJtK~Eq9ap>I&|%x&TP;bbSbvP zrNNQuA(^GhOWext>;TV3ZzSBia!6O}-@u=!trlmMFNIVZ|-RzciQwq@{FjL`KSUAEa zm-Zeo!16&_Jh|Zo92}eTd~VDfV0}LC+tuHAhW>*yFsll9>TG5qE=#QAKD-mwupBYy z8GM^@7|*V1#`Eh5iwD=IJg`~r;1zC^2y`bfM0t;OQ_MKnH0{zw({6EqgR=q7pUur8 z9|NS^bHG?$Ghc3mP27NXW!y>qX0U<#%Q-C4X>Ci3=srbk4($g&b;{)x#drrfprU1G@8PUUx66aRG@85i?s)@1OSD&R0>e3HOndv zrGPqM+epw6Jm59l7RE8xu>+vYoY!;W2=d10DSWkS%U;h3IFZT8(vn&}Kl+~4-~%Fs zKVt?^4_$lyREl22`nXi(_q?ckn185=^7L*lQbeYURmH>W!LG`c=#ZIUJ##E$FwXf` zJo5UpKlJjW%+Y_aMKFOqgl+=G6{dZIDmibqVLo%+g~%LtN$M(F*6|vPVsS2xo{9^X z-I)!nzq5hac|MKVLyjNLE_6f*^SOEEnlrPV(r5x*DrR=1nd*6sG#o`FW@#&jJrf%w0O8@GBVq7Ol{)2NrxQD zm>CosA9CC?FEH>+O3sRd%ga0!i)BYHt~WUw6e(_{%*j|8V{%<@P?`+Po)~D-U zGV0{43>L$|_E@e@b*X1=W;ReWhC=WdgFH?T5ICHrDOHzdcMhL<==HCBUdQS5be~3? zIP>3(aQ^K1g@xBr-XX)_)41iZMR8CXKB>tATXA6P0i`KKdC?OahxP^>?0Jfb7_H&M zUZe-(1Nkr>@bLUoGc@D*7yr_8m}C6aKa}ehcXf($m>*|ZO$))0NuUSoN1NWO^<1Pw zUFdAwH|Uv}7Z#ne6)Ej*(_jsz=b}BRzs#8yf-AM2ZLq$mLwct3K;|%?v_v=JVlj1* zDN6%%2^~=`D1oJCN$aN8rJUdFskho5_Gub6oGU#aHW`*iahP#*Af`Bc{av|;D<74u zl?z?ktx5!jM@V+pvBmCl9*sy@-1(4AIA`Mt=N~+q&!z}|Bio!Qjl6`*U~T^cpLLfu zV^N0=&R&&Q8$CEY-!omOxB39h{A@7|#Y5(B1aFmh-HYzbi{x799QqEM+Ac+wrc3O; zY0hV?jHB3i#!Rqzd4wng!R`viN|Ud~0!}t8vU|favxei{L&MGN?(qwOJtHKPb1Ejs zU!3DE(Y)(#X2eixe=}%%og3$xndO&x>ZqW;#$KjTCYaWuzMwr z;!0DIYuUZ%&>>Uw27Q^s2}1Q{fXiFkQ)R`ZMGp`-gOV`7j6gSo;>8heW_RzP6U8-W ztT>*T&@++xqeE@T+RW6;&9%^ z!7f#8Kdidkf^(54YSx#C=5Tg4`p(S;20as3%K6f~X>=(DIFB|DQZWXd4ZYd#O*)t2h&UNGL0USYUoAtqb6S2~v3pm+k zM!ag}>^uxq4RJCX*Dmq(@DgEuCcw_Q*4iBpKf^Q1LZhhX=--Vfz5c;YTgjB z88CBW1+iG{c>@Qw4)n}}7hautjSktf^O>;1ZVK{D(OOWQrI?3<*R2$b!MEAA`wAgj zvP-4Oyz9X|QFg?k*Uao5%4WCsW{O?g#m34TM+qP9#p*7!@-mlnBT+zJrf;@MP-$_Y;`7r$ID2w zBF(2*ad#nB=g()`QxEOxL86m`?5i%sp&Pjw(_Pl5n*;B+1KN{4=w95?edog9`k0w{ zdg;j&hi|+2p0Z=QK6Pm3!+Ikijh}lsdnP)h-4bP@>-0=>ATjHCW^^dAuPPM=55i&PKT~d!Spn zPE23XrNtGyJb;eCbiFCfE(R1cMb0*l0igur3@$Y|ldJc12~R>XT2@&;p+%NCG|0|V z+HuN`B->u)4@G9t^Co1XH}f{F#KpD9Hh3{i+d;Xpn%SarmAz^{V=ML!T5Uri z)XuN-kbHGa^dGzn53szau}o5&Oh|S=<*L)m822?CMfVRqCo}N=N|D3T3`W-l!OHTR z3+e10C|kwGRvcimAJ^!||P z$TY*P&u&-FY|dYEcjoHhl`3U|D>LsN%hZJ)V! zW^uDaJ%gDSNAw?jG7{Yc)^j#^@f%-az{Q@zezs>57^5@?=b{&7DO{q>?5#SmtG^KW z41$ApubB;mY>@Cy`j?GX0=O7=Yuzhz#Tzvm0)iq?9H7Yv z0QlQcuoJ){6f}z>3&a4-BOBU)NKoabvT|hs9KzxE;2sh^Y@Nu#2#USi2ZqTGk-K*d z^reKxMwku@@5{r+gT*LXy{XuWGu9tgIp~Y@V0kJ@INpNk}d(3oG-K|3%S5aB+5l#B<6ECEdaDbGAc9y6lhy2dDTna-leM z#7iiFx9qk~WDkNeXZE6^OFa`A32%o1Iva2)bOvv}kda08;ByJ`L(L>!Lel9|>~MN# zLWeF<8jcMxJ~uzkI2VcCrKvTiI*ZFUnn;;Cf0}SeC%U-xnUEZu$0nVd&#tB?@K%xc zFBLQTpE5Jg5#w{rKew!Q@&eA;-Q7G=2<00jdS6)4PS{2d@F9=rKiKUJF9nzZLFReg7SIP%eC^+whJHZ*a|Noy>>g#v4!L z!)=sRQOr!R`*^$oAL^}CKBX@(^FCDngKc-Q!1NWcS zf8!nZAAc5i@L`T0hv(w{JMM_W;C^%o3u^BWy~Q@?Rrl=;P{N10@xkZf4wV0(c0z~H zGY#vw(N+4}`3F6ERojC*z4AG;4rYQv=-(ZjX2fLX&@eRDawBAlXBMxJ=2+$oRqv|) zaNG0*lga(}bI1L<58OYJZ~mc9-~Gzx-~${#?zvpN4V&!72jORS|NXrWJ`}I~P&c~v zl7u_m;SLd8Hqv{E`A9vt>+|j6h1|8y!j^mU01v&#t=mFjeNAY4@g*$M+ z{yX$vypub)Q6VU+sm`nJ6B5g~A5U>w|Bb3|gyV|AaomZwx?kl0^LUHf^*`l)+<~Xy zG~N$`(xf@Q3GT=JHKSz)IGB6@ybS`gckovCTNZ=?^k)6x9ID? zAII_BXQ*tecCWsZH{hKb`+S^a`I!h5tA;VVmv9s#B;EwC!rlSyK(T1(Rp_K}4Nmu= zXkZ09=2&FT2OYxA=6XBs$K9$Ys_(#2yjb<8Xgq*&&p367i#-p{VKz`bQ5_hdG{wXH z?!f)HA9p-MX1qT2du zx`-&Rpd0`QSxXuk01yBKe#H~cjUd2iO`#P41<+i+T_mV-n@b@XSzy4Vn*(?9d%EDd zfFtZ2FolVz$sGWD0(SuB0qqH{dhz0$j7zvYas$+Hnciiv(+dqZ-k3W|(VIQx$ zvoKy6DW3D$;IdZE-yemj&^sZ}1N(j_$LZc&tFjoO>3ai}ce}&=ciiu-ZqeWU4SXu@ zUn&|1%uJOjZ;%w?)lFa9gS!4b5eH}B*d-=mc9hvPi926>6~}c26S!{M-EbTWh;k2I zihQFpS2=z+$9ax7@SM?Sw9^@_PuH)yv3r`Zqf;rwc7^MZ+^+T%g8U$gz>QAp?jg~G z`%07Z529GS1$R)0;^D??UF}-iP3Re}R@*ccyVt!%#WQp+T+BNaH@D;V=X5DPqcTVT z!M8#W+?nMCnl#4?h?4K5DCGU#p!hpg z^geMVleXq85=F-y?nfs-CJZPCIY2t>-x#5gl>T`^VFb(V=7y!xu+ z5V4B4#sjLixvo3ny5}Qg(etu0hs5jvfyitL?ZxqNT4#~rD)^Lfq#?13hz{M|n?x{D$bMCkwokZbOeD=4YM_eir6LK!) zpy>$ntlUw0y6@o)@SK`b)SNh2@f3G*T=ng5T?Tk-CvJc12bMb~23vT^(Gn7l;VQfd z?%@7nb%en4K(L#to6n>u zVE5{(tKoK@0x!b2%F7$F56Nze#PVtVH@?Lk+>e(dNw;%5r@w1h!Tf2aTsq#+19rRf z#J~ccR|taLXL^-YysDhgcN`LdMAY=45S*rWA0GsPVm`(sN`>c8CZZwP^%iQYip8D! zpVxJeVd4oD%d-NBWz}z?L%a9$jK@6mrI>9Y@TygYct%5)`0U?mx1w1+LZSzEQ$$!H zlKGnMZ|S9CX!SeJL+`*9^sJ?)}>;TW9Oq3g{cd>%`n$8OZdOI~M zp|USz-EQA1iq$^#3e~Syh^k$*$YRgH*s+6Ug`&WVYi@jtif5SPis1M`B#t03K@af0 zYfhy5?@%3c`B1s6f9ajH4G#7exF2_@eqDSBTvEM^Ffj9q`Aq~V!!1IRg?Un<*o-1v zc@{R-3g|chu-Pm$8ngn>xByrN{Gg!TKhP@bx@65(1ktLo){M%NmxHhn)i`jJRcJye z`Z6B*Fa&5jlqbR$ej-_W#I{BQKq&l5&aJS+ftE_bS_gnL08q!|zT2@xWg4`6NxX?2 z0M`#-d*`ByV($#>A#f;g;Jk$hpn$vIDl)os;lX@#GiDctHKPNFRGRK-HSaGH6e7_j z3=s0Vw}0`KF&IzF4s7KxL-j;;V)bh7FE=WV9~AQbH}D*cn5ZpQt1?t)q$8yuIoPe( z4xPcIJS^#7{t%)gNa;2Pj&&|9*2^et>d|rLCG_)#Q*n;Mz|A zC`19vmh5Kfku5%rg9HMJoR^1GPglJ`H}Mfl(+gJEy-xMoMW$sn$m@{d(nR$U%n-^Q zu3JPNp$8(~6k}Y4Lnv}8ceBS#(m+%H^57Hr)i$Nhsb^{~a+}DH5-wzVS zXt`pk?^WoC?TX29rO|&vkZTLiyn5O#f+KH^*$N+ISAQXn7LNYU-oc6^cNh7Po2J(l z4@h?3u}b&i2rob{5AMfXsl2w6(}R?e@;Ng>khWtKiQ}28i6clnbAn#N#jaBbrt9O~ z!DlZMGw)G((J}7lk{fvr-rzLd1uiUAEXOw4hb_FMp$9F`QyoKk2Axr{u!0YgRdXy` zNX$eBD~^=nIAbolv*L4%NyWwaJ1dk*RhJ<791%E%M4&@Vq7a+|0Zvy?ZqSR+)_nLXR;yT9} zv)$G>URCx%;1;z9-{3j=XZIt$h+Wl9d?3c?zEOR&YPT~ecl2HAI+)^fM4D^&ovP)% zgJLCcusj{qe?(K^h|2e~TRiCBP6RqR2zGOqZh?zfMCTpsjf8{Duc(~2I@J}PBfue; z!7!ciP7(l~x#`KeCjfdeK~o~ZmuUyS#M2JLyq*(eSd{t_oQm_28avR*vOyN2s8w}N zvZDD4(kGft+72 zgd_U4u!pdvM{o89?b>;55AN!zi(GDoIaa&pgcY>7;ULAv5w5A|L=NS=W|!Xu-lZVA zgh#XL=Pmk#MPy$fQFbQtE{Udl zF@Go{^Z7GD<~liF^kM046dO2U*=4^6cjE$9A{99u+MJ%`;I08;>%V#^^6q5s6M7&# zR@6K;gO_6aYVJp1PfmQ`?$g{hIT5|ZgY#)=`OtD9oN>@gH15*hz0t{_+&~Y|J*loM zrYw1tB{RWk&ctS<>MW|$_O6)Z61SCAdbnzS5s5R{Tg0pSN&^F}sg?QD=5rH=*K;0b zQ|Kk|oSOcgVerzLBN(IijyuexC`5TbY+JOXRGZJ;oT4{{9^hn6q+G=mk$R$=*jOKT zh~4g0&5ID(G~F3&amkI`T(c*Gy)&3zM^`}H5O0Dh2QOdYwJNTC)zO@RhJ&-K?o=20 z3h@{?(ziEw#_ke{kAeXXs$6c18HPv%K4@QZJ7%u>%(d@ncQenD$rJ5q;3@4|to38}S@;@=*w84dql8i_HPd9BLAY2hb(#9jGpPkX(F=V~n_z6M6}J7_8w%H3Q5L zJ_rt>*id}|iB;9F+GdO6ufW~tTg3z)1w~+=-=b>1r|1BBV6IcV!AIdaZvZz|oGv$1*Bvir zRPHWwj^oAOphI{zUYfQ&I_Q~T=>}Y*`UW%z?5b=Y-&E|*j&K&80z25_1Iasm_EpOl z?Q5@v+xV~@ffoA_NX$f5y$e?G{l$PXXYZil3X;^WU7E?k zI`+H=XKDhkTXpB`;OXrOZY)~6^eT=tsxKVjFrWSVQGEi>MfUj04vy`oDPj)ng?;zG$8zVKTTUwEuKkTb;dL-@YQR{(&VRZGF5 z<@c`wFwQGH*hUCZDq$AZLIr}rX=zdbzzLQ2u*acg9f%*IegUDT?RC#1n|AqV94!rs z--Ar4zRneouWQIN@?O;KkQTBlwh=;e6aWGcSO~!dv8LRZ)ZG5T(70$aJN_pPO(S{> zI(Y2hTtS3GyoN8t{jN-KB1XF_2d<8`?i^)30=^D`^MF7|)SuG`&{wPseN`cyKD9MV zy_=ULBNrf_PuzbLJ4CNH-^7_Kw!C5xwj;w^c7mbMi&N_x!9O(sSS;@=@mg@g#OSSy zbuDc`fOfANIAMbG4o@5fXsQ}2(qzPVL!isCBiaaTgODPII|Mkz8W`am8`rW-4BumP z1fXqz<|qK5B3CuuGvSMlMy$^j01tU0;lK$eA4o>Y2&^U01Rw*1_P+IBOaKP}Eb33e zIzq^V9rhe}&n9s&kX*I$iZQYtj`IklQ1rb&^nIVb#Ax{YK%a{5v+qma0O%{29gq>z z%gsOJtSYN>X4dX8N#;JkHkA4O_m1f0XfC&8LwZo{ItY3Dkde^|MH_o&)BOOzI~@E7 zF@9%o140`eHy3Mx!3e$Fw!UwHl%2Q75lR5SY9PQ3(58Lz?w=#hUkjq{Oh_~uDv0Q4 zGWoA)v794M6l^latGq|E5s2Znel&nn7LMF5~ABDR)T z-pGh5g^P)dJOpmEv|?*>S&Xfy!80fYc}4gkCZ91NdA0s<5W5CQ-Y zO3e5-4jSpaUVfrahfxNRCXbinWALn;c%AP%B;NMr2{iuvN88)IQT^)e4u;&vD*^zJ zFv|T3X9xgL77T?zoM5=?_&=cl5JF-57*yy4;7tKQ0NIxFegM`!2E_V;b3lL* zNN@p!TgWLuLPWwNPIZ1mFmcAm7#@H?na1eZMEuyu#tcW)1pv(V^VRsHD=VNxl3`r+>nRmbH9 zXS^qY2mqmG{|;CH`jkMBgt*Dw@7zxB5oIgSytn_huj()e%9xq|jb07_1VBO9bq)X# zWcc;#zW?G0=%>|l!dUCh+2&LNRAKw!;O#*pN%+Md8(J0&U*FrxvZIC&0(^WO2B5N=GrLRXlKb2RS2{YT5z~^!Z|0L zM`G8+j|wk{Zv!uiNQX@zrzDrhMJ~LnO|nGNN~P^Rt$i*n+~Z#XxuHz+kl)A&;NsIb zp8$!wxNwo1Kd?sef>$Q3OEepK8E-*VRRIgIK(u!kX+l6KR_jn}Sh{&jB+k_&-e^ag z9=Wf+!WDo4fP(-;018it^#}i*a2GfL5E=k)%gLzLQ9)*k!DM<9N~1RhL%W>Tp|aWy zs)qPha?)s9DLXwcPXH%e5D1CU?q@vb)FU2WyHgjVq$+%c>XpSgXN?H&`jt(~%`tdv z+KcZG0EAD}Idbt`-mK|R-J#Bf*`;_d%>F)N7l8cj=QZrAQp{N zEO9~$RG(QdAS4>h<&7r)3;`hs|LCVmrI7#z+aQd(b10Z_%s3;$-a##`p6?bD*=FFj zN4Odlo>{s2&bWm6H?S|4+Q#=?Q>7@XWSLK2OAqtutLe>HR5$9SV zh+Y9XJs^Yt04b10B$0i`g&1>}1_5zsu4-AU?MX5IH}!D@hLAB5vsl>Pu9JgLKX?li zCoo);X8-r%SN#fe<3dat+urxn>#O4GwNZr%rLM!4toP-svSTyD!F0y-Zt+={6-Nqq z(*Xi)q0U2Jfy}PJ;Rx8P{?`OFh9ILY1qif>%1J1J4_XrdV1R%pAzT_0H#x--HH$9I z8_%JauOwpR@wqSH`gmcG_rF%q-hsA(Hu#nF4M8hT3>RE+u8i{Y&YXY5_xmruwD5(^ z9HunVhp%_vJU(z8w!XEb*><}&q$OOZef-;2XG<9Y7yKY&%30nk6 zC`u@@6H!Y&2N9@eCLm90a-$pSu+wRtnO@zI~)iBK{cX6S(F$>kwZ)>!BCJG$I_c?Bt#cT1%Rk(_ehp#Ezlj4 ztuNK<76b$aF@hhfN6Y2~VlDtigF1_Ks2~=p0fFg^IYI>gHg*6YKiFC@Vkrp%ykt_; zoLJiwa0CenVsah+x(3LnAR)O!1>LpagcBf~3?rrux40pk2nm6hA7SdPT%`c?;Lv7)Ex1|H#$;OEyy>g%i(s))O%_l{JF zkv{lcTw+JU+Yx56D4U790Pr)Y!p^OQWFNY`5JO=AFIHA!P#Q&E#8!t2-DQsa-c%O6 zC8#9vc#$6*a4Jh5k9r&stzI|nkRLECG4H&GYfSqyJ__-)0wrplsYI~rK7(zO1m^M$ z!a&&7P>6;6rbBnI4<`i~OU8a(i~-l--ft2Js-H%559YGC=9gw4)%uop6%M-^`d~gQ zX9B^n4H2n~G5dt@)WyIQ)egW;c9I^)C6ql!f6274ZZD|Nq1x?v4gdfd<&ArYIQ7Ao zkKT2{86gBAMi4@ARM;elNCN0xW@$Mj#7{KFC=_gBWB{s^bn1aTg#0Vf3C1X%fw2oA zWR&F3^c2#W4A`N8cvJ*IS=H1K!_1QSnvYxESl;jwi|2UbLn46G011l(-6@12NmOjc zGZKgp04N9vz=#8&0Qwap00SV;&SUMjbL+b#fdo=8zQhbizoeTO3XjbD0!R{s0e}K! zd6hfkRkKP$+bwhrHPt7%R6qqFD}e2*RpJFq00ZPW;zrPi?g|~h?tYacGe?R+eFX4P z0}uThY534{-;>{X3Rs9>$3~B1`dauwP*of_R4JS<#XQ!KFa}wOg1R+9h3(T+?6`ly z_y5bsi=s85IDn(rB&i|6R4V;;<0$PGkvfoj!9ul}E@F&Y1A?Ns53t&07i0)mLIe<1 z!Nj_5BptWws7yug0^K#C-72rX5-JAhX(^wWzH*ga2?WV`6 z4?fm82LO1OsO!RR7pz;3S64;>Mh<%0YmKfs;gz84P+IUpMoVEV>rK|)HCOD~tmJF+ zDgZzrKn#p&A&A8Z2u%p|Hugha{-U+~iW4~}jB8f4V^5BwSYsuGfb0G1NQo{)m}raC(MU6L{naBYT7-+Okm@B7Rl@5&%G{5SV8ZXDuiy3@(h}cy>m6ttXcL1k9n~CT2eLfD zEy4*909&^P)b~|-$68Q|Xcmim$PmgcfVoA9X+LzKSb6;oTo*zJdTZPOA{?kv3J534 z(ZaTnhoWIF1O*}p2oA`xh2sPW6aW#yDo4svFUCkyL8Au{l{H^$AycHv?WNwBfGg{; z0=>s0bM-rpCT+;0loP;8u&rZKO9yKdtS~1Ezu(`0u&zV*Ge08wo>PKmTn|l*cBJEiC>}XXSaf@7z6Xegm&d-|qI~qM=ci5eBy9jIq!1x-Sn0FEW`9 z30eR^G)hSV6~vyP(NdyD7VZAeN6RI~WTS=`1Fg4o?A3Fy~bPXntl#%w02zeeKVQcFiP!|J@jQ zE�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 literal 0 HcmV?d00001 diff --git a/frontend/src/assets/nam/design/bodies/amp-head-body-wide.webp b/frontend/src/assets/nam/design/bodies/amp-head-body-wide.webp new file mode 100644 index 0000000000000000000000000000000000000000..e356e10983b7b3cff9e2810a9c8e33ee604db728 GIT binary patch literal 133312 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

UHvQrUiL-PQfhkkr`~to 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

R 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 SR_4T|8(y=200qz^NB{uPEzB1H literal 0 HcmV?d00001 diff --git a/frontend/src/assets/nam/design/bodies/amp-head-body.webp b/frontend/src/assets/nam/design/bodies/amp-head-body.webp new file mode 100644 index 0000000000000000000000000000000000000000..11ca81fbd5b671ff585831f3aa65c278487768eb GIT binary patch literal 198330 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
oD@9ro@k?ioNizzE{uul1-a!wS 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

v}yeS61B+Y-y?ZQR3@F8_@&q8+^t%v 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

x=O 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

yz$@DeG0w>G$40UdS1U60?jd=uR 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%0D7uR zf7t>VI{`g&PGo*sZ|cNgB(o4%0Avv%Y_Z(fp3;x!lmV6}zDz~IfxC6Q6QNjfIZ%W| zMNAqJfEC0@s{$8f!GdHNBamtLN|i@}I1elfP%Axi$e>^Z5s>wOUo8X}OAounqodJ7 zeGdoj{e%5_iVrY>C5<8=qud!p$3nxU*S!74B^zoG-tZP64V-|PyzQ|!4VZHIP56EC zrdpN9DZp;oieL*s0ggGe*o$j!xbBcq)k^RM|CDoq?5tOpNbDi29I?@#pXraUk7pPt zBr{-o_G`|Nu(uMUY!6Ee2t2Td^&Zyj0bQ~*AS|-*9J#g8k=1f=HRSkNf3Sb4m+mwn zzjuXmHtNkbEl5UPKcEWBx7Emq}X}hG!?U>|@eODuc6BzCV z2tF}v-6v=fhz8Rvy4Xec2Ix}`APed$CqC;TC<-H(WmF;=L5wZ1d#{(4%6iY8~#r{U(Uj>5T6N!jspg`k5{{ z#bVXUkX(p>Tp}!3zyu)f*5(SCw80wm@cA#-#uyFq#1{G)Wa#Gt5ugCE1z4ycFX%hi z_c@$85O@j#kHvZc(@f7xlc-4FAe`f0fYkwnaxv^Kd5EDHBhB

LzegBh;l%+=Hh} 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

V} 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

`@Pp2HZC_v*^`ZAj{|WaA|$*^Mqs8JfdyC- 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

;hhh;_Kaax8;z{&G@{gl+iWbc!KjG* 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%0Aui7a${G}wGWh;_?4M~Y07h1AYwx7)D8#^Qdj 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

w{@IHzJhZZjj~{Hb?!NF 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 G%V88t(mC1y literal 0 HcmV?d00001 diff --git a/frontend/src/assets/nam/design/bodies/cabinet-body.webp b/frontend/src/assets/nam/design/bodies/cabinet-body.webp new file mode 100644 index 0000000000000000000000000000000000000000..05c6e034d1274d5228775980e94ae3d340c56b4c GIT binary patch literal 389480 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�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

n`Z_S;)=Ig$Sj^$rjAx_+XW+5?!s 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
  • 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%0D+_xX0<@3=@FBM8GeTkqpSFt72 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�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


    ey$fap9YB|PUz>Xf#UN(_reQ=-O?ugX z$uOF<868l0#!wV{VBIl8dwrMA#^R^;RWI z%n0f0fM)IvY|thl`6&?1!gKz8j0@hceWtmRc3h4>Z6)y?v6U-v76sn64X$qjY;32h|4% z7;i7-bfOi2Zc^IK#}pN+^&mwe6TC(HXg*cHmT4%=j8MLAm$?4F>vUKphZ~OGziMyebmwg)Kn==*1U)S5cx2F$9%miMc0wP{9k1CYfYZn8}8vd1M93^ z#GIJPkIT!AEvu)f>ir1JYceYw6<7^U<3S1Vj2lq!BX*g~P1%nCawT1*$9yVSzXyB= zP4K&st~`|b85R^^W19XdxS-+rBlKLDwgHcKn%bJX?Jf!s7bu;v&=2i{pX%2pFOVLDUaSw%;=`@*peCTJ)Ly@PT1yJL9IT}(h zTlf@Q9qWo0Wf2X6?8%+=Y7nTQI;(N3Y3>XlYu)Nl_1*>e_+n}lIQb7k+>tObPfK@k zqLV+05uuHD%-fyJ$AAi|i%H=5fhK0x$_~)kdSwP8ZRqE|1mA+X9vWATlx=1Ro8K)P z5eiLv=lk*UsM(!&qXDCew`Q@iv%K`_+=H6&|I^Q(iaFBd>LGCA`UpsaK)0ANa=|-z zMdOUfyv_7So*Pd870+>U`45YyUv3#%6jAU9Z!~^-)bm$J3iJXEH1nX?3~3_z)qO?& z#<#CzEO4FflZ2eqaV6QluZauCbyKU)jH$}G^M=Uw6^0e($Dch8MQgKAs;9vU1p+40 zGGPR|MN<@?Ksx=NfTsUl-XqiFxJYpIMr5ByQ6}R4i%fGPj}^BCy39f`Zo|Wj8=VT4 z5oi6Rixl~)cq9wd$eI+!w|>#qOz|6P88Ihuz%BMUM%|W;U4Ok{UEP7tNV&{JDz2&4 zXu&`s>n8{^ZaWL&^I}|{D9GgKw>nlIR(L$JrxAXtaf(PKoD_+q7ffmY)~5rhq$}Wg z*R5R-53*)?GWbo0=urWBldpkS)l3P%~b0bYBsvC} z=uG`(jr<*G1clajHo?b4AwU?Awnl(aTru_a-I`%umTG6Fi=aU%Gofx2HBj5`30&jun)PW zp!6iQV}TgZU{*_tKbjU`zyY8*ZO_%wAQO!o@8&}q2$8D_Q8B@G<9(OMg=y2}HDB2y zs2d3ZLyP0(t|8J8;5l557L>hX?!-ECZc>y5Y8D3aCGX02Y z?gnQ`m3r->Mf<}aoF_NrAy-rU#09yWQ3-F8X~ovYHerNl8qEptDzc5(5MJC44q#uP zp<*p*&V0f*Vt!lETK*0Uz$`V<-!q9skgG}pHXP;?|JFzYdGAmVZ*swos`9+U&T#6| z2)ak`@&S*}f6;LD@?sy_(SVNK~pOI{S)Jm*A LpcY?Z!BPMK>Xb9( literal 0 HcmV?d00001 diff --git a/frontend/src/assets/nam/design/bodies/graphic-eq-body-v3.webp b/frontend/src/assets/nam/design/bodies/graphic-eq-body-v3.webp new file mode 100644 index 0000000000000000000000000000000000000000..dd92ce02775e080b19b9e2428c3c3e3d96da2f73 GIT binary patch literal 38030 zcmce-1CS>{)F;@sZQHhO+qVAQ)6=$X+s3qQ+qT`)p7!+NI$0|6i^T-kg%MR)NfoMAYg0>hfRsV zoUO#K@Ba6lnQW3bLEtv|3|UkGZ0v+@a6yPKD>Q%Rh6Fkmpj;|=QgVDw8-ii`O|H8y z+tW(f9^`^Pd)yLy{0IKRQevT;Mx?ZxbYqN$uq!BUKgJh6p>N3g7#+?b`A;jhn-*Y+ zSH>ohi9ZJNSbewAoeYJa077M78~aT%>4lb8!Y@0^7@HFezx9>g)@?}O#h_s&nNK38 zb6{(uU|(XcClfU$Jx-kAa_hF6D-@w2FgYNClkXHmXH*M|lOZIFlkklHc4$vsF|qPa z$+=ik^Y-@Ex%ycO81ossS23v@U=OP4+tY|PZyW9}*Ev_B&YWEjjB60cA17yTQP-$t zbHY(h3AQ&npqJXPv6Ug9|HT3E&VS0|BXKj&DcqlGWcuJeGU`zJ5Y6I=WRS@aJfRY}oYyn9@ zVj_di->$WiRS`<`-?oP$VnERh4h}CDfsz(#LQkMmwg*>92}V+iC(8#L!sUQaBNY+R z2qp?f64J%ghP>7oOC(G2hiQXat4UlIsn?el6G1}41V&MVst^MUZ2K!Qry&IrvF0G< zgbbD#Oed@t475Rm)KLE}UJ(Kl3u{OuQAWwK&nJ2t<1*1qk_* zh#JKnOhm|$OeRqc$Ua7hCM6_17|4W%n53Mf(zZfvOe6pZWaA*!Ox%ea*he_g|3XH? zQCesz1qlRd=s0vjrxPX7zYxig5nNec?N|aS7>Gu?&w)tDKff&%X&xTk1Y<)98W^28 z00|i#N*W4Slan01OHZ1dQ%%*9oF?E#1F9HBd9(Q_v`5?XIL#{~?JD3(;DUUjeFe5V z9d@gJ-+P7`F}~E0dBtqlnd8>kwc+W)`_xKPe*i)O0-i6K*^YwOp znNd~e$wzQH?#eItZI$|xCpgRFlKa@`!tN?~c@fpvRU3u$_jOY|A!1!B zj3%cP=a8DSzFkZg;Ns3b+x52_Y_278-E7_ExJ}>~qz_+xC;92?Cs%h*PcE(F>p#L5 zl0SmIxtMhy|6aLNho4?wpN>HD0x11hW*4h8Q!5G?TTTIWB&XvKZ(VQWw5uK)itQdd zifD(f?2}uw$t&8>1KN+L4;2t^iAQvm1eWu&mmc~cYU)=r!?L%Ov$iG9xi81iKKz2X z*Or^Jl#G0{_a1ix6T?wSC-$?$*Hvvtqj(;N@1S?G4tcwAV0Aq>RVq%+akuXo zYxah-zAasUeHB$6Pr*}$92PMJhxky2jWEwsr?sn2B(sT%Nz#NW&7X>oO)1$Nvl<^0 zHQ^eViO{o-Z+r7x^%bi=-VP5ewr72RKM)&!W#oN8=l%<^+nou&oiiBZ&&7X#g&T92 zf;Zg9KPBIRahQbgI0g3D+}qf+7?ua#N=9EN@XoRWh_%@r z!vpJeoo+dcVmL&_uR4ng?HKlF*;VspaDApY z!ItXN!(c%#$};)-==e47h=CxkogqezeAY=ktcR&1dO#mC_db{4aNXLAFvIz#&8(Nj zM)*`=8xQfGDee(P<04$m)55LiPpXR~0LzthP%sn#Ii_<+nV*()PLLd78y(dNW zVC<0X>hQU|rocyX;`)0H)~G1<^lOe&8XpdR%YOLjX62uhspx?PLkpqOpsC+2=R7Az zgO+N0i6{eG`N0#mV>;WK)xvMRf9O}{Wa?8f4{ckG5j)XD+=I)GI`UIz2L#+{jo<1t z=1W#5>zf{ic*}F6E(a=%du3;#2?H$Ge-s4BSa3XI?K+y0ME}h9pS+H_y~&M$>b%yE z?Qq(e=(o)GWv>sTXPHEqI84(zdMN`?0c1{=&;M>^>CR4u+b1sLLbE=izfNW%F`l~2 z_iOWB8sIT=n-AN0+mMofnLd&7ZP3+7*UGbMI;(?=`+TQ;KaSpZp=Z_j%rCdzC)i3y zX1WN!cy?ND*Pw488D3=8mKM!YT}bfv>UQ-Mg#ukclNf70fW~Odi)5lGouG zUc=WpKpGg=TG_%0d@H_u_pk;v(KRf>E8C;PbkfuLE*S4tm<-(GJ7n;LEeL3y_B@jS zlGM&MzXf;lTM%<|JuS)XBMy6vX{c_vACL&o#TBj(H1T=isczE%25ss0AM0PJKJz7=H7xuqn z>58%iqK7pCs;(WrO@J5oarDGIx(Y6wMt+N?k(>F>=~LtAowPm+ ziE--#Dr;a?^Bz^GP-N`#E#PCDoW4jJJaaZ#^9MMeWL{bwGz9*>y3g-BdzOK+cSE0* zi;>5c_T1VRlMo1=J;W;?(A#@Ko838`v8Q8%8I$d&KZv5s`!3!nbM-L>RRAP1#Cv#) zCRTkQYlffN{$76T2*7r13C`lHDIF^&$6Y$3yiz?Fzxn;oX<`;_YYvi2%SaS+t3Gya z1mN^@vp4z4`KIGEm_OMbtRp{T#%ATbAES_}v~U!x7l@m=7s}07PmH>;2FV%CEI&iu zBxQBjMPW$>9mCH37b!s@4He+3&LB-??My++Dy}ewt-eE6Ji$v|5A19dWQu|#mk>l( zAYx^TyTwHJvU_IRku5vs%AKUNbgU3p{)fHUGz)4T6zM~Zu#>Qn$0E{V) zV8d8YJ<%>Jm8QttRA88_q<)nB`qbuKNYi>Jj^yObk5Gyj1`EZ%ld%H3uFVGWd%-)8*CM67Td8>;6;wkSq8RpCwk7qyrPwLv$c6`p66~mSbff0+I8`T{M=1 z4}sI0(BYppB<_c6Q@|~r1C?_B$(X- z0~AkB1bY;lpF{wF2FXwadFYO*0)JGz1E?wU7G zPS|q({>IKWQzPY0nvXc-N}HbrWJ{l~av>-h!zmfsBv+$0jX%?eaTA2uYh#Pe=TUUNAx z#vNsDh|daaIB~~6Y>AV;T0SeYL?$WTbe`dj2z%WW9>!dA-E2v(GBMP9Ax+u7jd<@H2rCa!y5}Z|4z`f#Z(^wc)j9{ zkxSx6`h1iFw$24;M()sUG0lm>@T{XLbNJDcFd!)#!g$4R`UPquw<6xh?&?DY3Pv#B zwbEFE4tN}=TOGNU&=i{5X+SW#ENM6Wp3Mfo<^iZGw#w#Dfx+xcp6#p3m{%n00Ip~VuW=4mw z!;Lt9$92q$;@UWg=KZY?&4jXx4uDs9s)q>ghks!2>mS77cn0H`S?Yt(T|G30KNK@E zCEVI0*odcZ+IK%}MC3SnumUxV3B$Qx$Fs95`RGhom`s2W%9Raq8N(Y4XW>k1~){cw@hpBe- zW%#3IO)8D`pF=#)7Pda+bkX6Ve=kFUOF+4L!Iy@|LcjYSUs>w zUg%)19VAa%cnK2jB0gp<;=){9{%HUJZ2nO|Y`iO)rBr(uVA_A2D*9j(g1EJ)jaXJ% z;?ACwLJ}aKpn`Z1oyd$$9lM9u_fu`f*!Ze3tXc_b{zzeO&63AYtl?#A%oUfBLAr%;7(k;v=FNtD)rR{e0}=;K8=Q z@$xW$sPLF(+(Bfz03+VuzKSOYByOFtp1jJ!p>2waGd%+jLs6{_fSUM-;Xo!^wxX{5 zuR@GUrF2+OtqgS~z{g2cM#Xvc;K;6YI78Z+N@q){cqx<8Q)^WVr{X52uVR6*SVF8 zzf^wG+F~aHe9MN<@@dmkYHW%#Oxae38NqWg8+m*PjPUJ{q22SE*kw$&ZNb&LZwZ}0_DMC=;X2xUi&~3t+f$>OA^tbX|$YT^CNPW5> z<09nRS)q^;$Xr*_OswX zM;pu!31Ye96!0AIoFQe75}xhu)-}Pd)s-A z^?EPGZTT%8L2ohZl2DBLV{L|#`Nua-IMie-<4T`lw1Qz$FKH%?4xUiudB2pUyX+p& z%q2EXEbqkI2r7^RhXl9mGDxY@G}UmUmV_I*fue&D8?_SB_~XKSLUAic3-8Ka@WC#x z{63b02J4q4`uFoO02hglFYXjntK3$t2=6Xu{lgBtDIUl`)5IyFt}-qY-n6lO6VzxT z0@kkvUV@U}8B*K{F2YCyUjC?iA}v8nhf@Kk%ERIRY2yN`zK|nM+Y@{?@1t# zR$ZMo(5HRBn)P`(k)}{Z-CbYac?GmiR>()XG6d%MxTP5B$zCM@>Dr(wP)q&KX3Ir& z&j$PZGT)Pz{xo^p_-P#BV<+apNx4iS&t>tCULEBTAMN%w)>*Td^s>iDPd?05aUw`< z3(6ctcsg2=>H5W1Y?V{!67hR7?yXko?tEjqckaoe1{3+S9|1YS!TIe`fHsGhv%mI5 zx-yd`>mWy-BZgrj`vZ#Lz|;5abGfzvB6mwj6Z%-BU?N?x|1E_rh(`dY^CUmg2hjRn zjom#dco#aczn{Udu6A3vW6COk^C;(EAf0!W9m*JmVPc3!24~oZbPA zeL{g*quk>M=n*-SL{17|bxRsM(iLHW%TcVPP8A*CnrT&&{yDN&uB1K^9re;Nnl|r5 zMUZ0&p-%af6y(1q1C%~=uvY51B$GeWiS&;rviy)}Yv9XEG9`U9C63Y&1r#0bSJaLa z5S%jV1{=0lJJmaB0<60JVb;9A)b-iJ`fjPSo|X-qkBeh&6fEd1jdxKBG>UXj&wr3H85ytCPKnoaL8Qv-$S z8t4+-%^vd zO7igXJ2H;VwVm-CfqdVSH1YOH*Zc@GM7*RTF5fC(ec!qLFG95qLfbnJ+v%NxNpt81 z=UBD3o)I*C%C|MIAJQ`BP_Zl~QQQm*neH0%zVJDGFN5MTqAt^QHaE0hk8MAxdyb=C zOb*(Dja%RVqr|wVxmRfCW?{f5Bm7CD9B}$zwO?5rbJYT;_SzkwEv_fB%&9%j(;crf z2yc$P4Ip+LJuIq@x~8T^Pl8vsQLHXmzxAdqo}le)Cn=dycj~koE%a9SKgRvF>n_vH zTJ*w^_Y`|Ct$6L7X&W0|Kqsfz1O;QYcotf756*hwjo_(yRDYeCJR&f?XQVyrdu8Gd z+VO7IS63f8Yz;>4eoXIrllrfyWLqX~O#K}SuJW~-MfLu8Ewv-hvX?JOM%f$r_8#B; zo>=`YXJyfLDEDM<5uY6q*SPpwuxa!+Z>A~tX_ssA7C-l2gxM!cNzV;Z``O@iqL`fV z`|PNahW&7_8>g1*f%6^9MU3PZBi*@opA|&H^Dx9-Exf;IsH!=qcI)*W=bXQJUKI#i zwy!Wwbb&WXP7pmGUwEe&I&;6y_}j{kX2?3}_vxCa5Z0^VK#>&P)|PEwdN)fyIV}b& zmq*uMxmLZf>I^+To)#CQSXo&Y5AQxk4(qTiyDmFw8#3&n^E{_0oH#D$TI5x|9qRBk zZrgNa>8=Mh)Tf!I7_R)59b9w+^buPppUZZAheytb(_LDpJEF@r+}I^7S#kD~tYq2Y zr0fi6&9R(Av$KA;d_G>A)HFx2mui{HQFCW4+mVcB9BcvU4&;=i6<{}rGL)D#X3JvB zaM;P-ZMYrYx&M*1OYne(%$D|H?d$8KCvSnE&&oRFnnAk?HO3Inu#;8GpLg=j&`>TAJ?<((OtasF?U=l`#-=ZHUe9MOe45YXRK&>UbI zC#Yah0Uxdmxmvm^WFMdt$RX#JUOz_2FVpw$Z3n-9GI`%`jt73<9mtJWowE$Pw}pV`g#ZuxA<_wKRcD2%HG;s>A6*XJhZ_te(x=VRLp*R`co%luha zUe6c`#rk3x3X`p&pCu%FU2kJh=IZWx|FrGx)!s?-%d?Y<&igwTca6_yHr`6l*9^k{ zQjo6b|B3YfjoF4olo{mN=W5D=W?SR-1(X@X#?E8Yu4ejrK>BK!&B~xlF?n{crQ5`) zhmEe$A#)wVa!u%|lq|RJ%xy~S{ZdQ+h^Ya7l`i~De5&(j&MqzfaT&GXcyy?;=6T{n zjDry3vhp`$md>vk&=12>*%|hBAVGD>j~;vLMJ~iU-wZ~sl_Q`}b;A4C<}$fG!QnTv zu0!2;Am*{4kz%tL@V&d$W=dgSrR!Vv8oy+pUL?@}dQXN(hg(vIq7^KrE<#yiH8 zaIQhRlH#Br`O&s1I^x)*!fwwAvL17W$y|v$Rf<6K53gB?x>vK}Md zCE0jCM)12UevCArhotvzKDh_1?v3 z?z%Jo^!K+b9^n9sN_4APdr-Y}Z`#+~9RH^eSxG2M?C>454cEkrbW^wmTvg+i7h$C+ zgeDDMZ5}8CpQKtMl}1iNQwa`uYpW^`M&;6@Irx*laa>MKw`sRiPV_68_c(mJTT~%4 zrL%`3!4TaZCl)JgHrTNT2LC;4&louuA-SsJMz*qRIoV`Xp|0)6;-}9F1|``Dj6Z7j zcgMtmOUZv|Z%XLksk7yPAMKYA_*?zmcuUMiF3;OCFPYf7pG$1n#5;@Iw?#O!a_nFO z$g68VPL4_l zvZ%^6Soe_f1YL*U2=)w2-^0P{6HrmC{i5SM!nbmfH#qtb0~4;&Y{c5~%# z#G<7*%n&&@q`a!O_7@D;LicsBni!0AKsu zpC^y3!qPYFs@69{kJo6Vfb3Iy&z|r z=rHf!5oAyk{-BOD5E34>#89#P*^{wt6wmY;SWEVdL&yI$rWyEWv-OdBToHz~20QSH zPCI6zbIBLH1oCFT(z$;m@zwQ&n|F)LPe$UlKf677T=Z@;4ShIM(i{|Wbn}k+#2SyQ zrPM`SyA!t6Z~RZ~N+6Pwxd~p|a%X&pq{<`Ve2a)30%hiBDWj2Kvxr>DCy3+iO1SkMBcj!G~?!MZsz3rU$kMN#lId;Fp)bhY>6f!(JBF6>~kNx#IlFhu)^6T|5 zi;<-$kB!jEZ?SElgu=VoLVMFR5!nt>S(&8}tOV_VxcU|HW~U7TKe+8rWZiJVq&*b* zS?R9Ca474g7tey7zM)_9@L7^joYh?NkrP%WQU~KC!|1Y&B6OK&f6M);(@2PDUl`P^ zNI9DTUk=8XQb4di7?RJ?iD-En3@bkKpe*Z#K7Wylf6P#_mH)~M@{pz z5z~J>n=xBF3+vMQE22qkk%D|h=CiljEM@-awvHklx5@qv-ga>vg11(vgZwLBn~TW5 zQoNWfEGl8O{w!hhuUBA|ZIIz7ckJ=aw<} znMM>9|9$8$W{sgbGt}>pSofXW(@7v_Wi!8&JF3boe}A*rG6d;wo5kFIF&2qsYZPrO zw*S48bwNYLw#@QZh(Npg~Kl?7!^uJ zeO(%yWK9#o%V}`2xwmn+9x_S)wiELF7p;HNmCP;$ykU68FkmAnHNOvbTzOO5uF8n` z%`q$Qm~`)xv?v?7_)b$I8>WO)9ILv;7RK__LyDAFo@#{XwkAFsOwV5Y9WX;4lZyWZ zl&dZ?-Am6pUdEi-)(5k^ckz)eaMl5RM$Lh*`-LtgUEALKtp!Lq+%iY*)WS|c=7+o9 zblTi+vAzK!s4{>ibZGu`I)-R{{4!{%3~>?bYpN5F;ooUr!2H5fuU|Zi>Mzg~z18Z5 z(gcB07|+;?>e{-HHG>mJ-_ONQTlj9qNaGg~M}=qPM>3v;;v-NFjB&h8BYLi9DD;q) zGlSn`rG@35zqwM_az)PG^;2a8&+DgQ|1;RO1#}+u!WPR#JtMeZPL(6?omOsniYX~o zHO0Z3kUh=fH86LmMFh3PCr0q^?B@NY%?W|xyruCG={8r-cKB-d79-_8kV0EdwntD< zpgFs;N<}V6HC}J9Q%5VO42^YxC4IspTr_?mgNnS1DLB~~jPy(1#}nrKg?SYyTo#MX zMW%9HpgC4$-`}&gLDed0)RpB?27d1PqeHaxi(M0*|6GK)stlCT`SsP}|)?vuaU##3p$~CsE=oRPi&H_2V+K06Ly0urE@n>Tp=`{O`R+y zgiOUW+X43~>ZyPQQXck-B96q%kZnwol_I>4w`jvt&^j4My#tT-ymisUWT=Qs$vArL zthDsqe?#Ag)C=MK8026)qmh2>(SE?8J!OfM}tIXc_?i7v_14{=Ml9)$| z@uG(#wIZrKXdtN>7JyZmTP)9>S!gga;fV1YQM#DKXtl7hj)4^opdwt~c(r4o*d2hA zz@?T)aFR~a%Wh{*>n%4ru)!_5PjJg|6SNtFtnpzTL5Eg1i9VaPaEZj93LO=Mj=w=_ z#O^E2Al;na39Jkf^Ci9Fu+FPLM}DO`pEb>~a?ABcge$#c!ZAt_^KY>5>SgvTsff2y3YDAIjQ+_>u$+|K33byJ$Gz}P+YRZpf*O*)8-Y|M3@jU_rY4nF^@6M~|B z2f!MhXc!ID4XnWqrnNVw3bxrq!HhJNv3#UWS5W@o~ z0%i4j)t(*D%Xm>ci5+)U33N$rhK|C&;yrEG5%9)^C0h$+SJUZaqCVK&+47SxnU#kH z*vUAtZL!nMMq`|XX2mCIRl=>fnX)?6N%f%6$O7)cGWDt&no?{adF&BfX$w)8ay zs%W>R`xuDgmB5HE??x%oAN54N8`8uH!CQ^^TJX>;~xFn#sNk9+O~qOng1*vypFe7y9dJvab5wkK#FGy zdqQ-`xe6>oBWxzP4_dl=*#?zFQcB2#$%E_3y5zZ!F5WEbh-c~uR6fk!i88J=CEYZo zC(3+H7;WI38ibxlL@YaBeW8Wv%Y}P&aavW*|7#TlkMK z+PGuu&8K|rSTg|4jIf4eup7-5lR-Gq|3o7Z0)sx-iqDNl2S$+)*{Ia%o+A2#^kX|gCvUjw?0VsXLEz&(E=x`KkHH707gzXsVnfrog)Q751 z^AThdw>gOSlm zW+@p+xDzoEF31H z>JIZv*YlstAr2(B({3l75AH}Y=NB56LtVqvCYtkk1AoL%U7=nxWujMvtSO-dV?!{r z&`K{1Tj7sSj0)lr;r*LS+}7n+E>YP7?NqzOQt9Hnp%tI^XIQccaYm%f z&*yBEfoUusZJTF)qm~85oktEWJd2h`4F;VO`{o_^UPL-#`0P{GZ9rtNp%(JL4TAV^ zN;SQ%iYBe+kDv9mif<=Ndm+NV!Oe@b`(NjFTgReft&T6>0f|@nK*LxIhbuT;o?Pf| zcXVW;N-TCz*7|bCax*(?Xbv1JF!rSKz}7fbum!p!vbb)D6umbIB=}VUt#)g&KIr!F$iQ) z`-!?#aLr&oZn*Zks*Mz8j2BMH&cy$7-Q|_;=RL=P`Zz%vMOI_PG^6BWu8Hhs86$!i z`o}SP$;Ac=Yj?6mDle|5cIYJQPsPbAy_63^OWIhU)l%hb8~gFx|1633B5}c{CVQXJ zE?#w&@iopHkyyhEH_48EFLj9Sw=vdqAccd-@E|FoWxlD2Ezd^4AeTd|pJQ<)fMahsy$W=HmzhVL}uD?)dDOF7&35-hkqKWSD zu+-qfcUm18WKR^I%p3iLb!xeO@4;bXb&_IOrR4dZf~912iTvGEovUbb2U=Mmjwl_{ zi(yQq5%cNejkX+^1`hV9)!Tg-Feoq?bq3gnC!kuf;MbdtfatCluMZi2lZ zzai?|DwDe;U~?_{$6Gd`i>|R5kEOaKx1J!i$ zMk0l7dVnWnBYe=Cciw9GE#=u7mub3H(;}X4s2v4`XxO?=VIA37L7a)^h*sn7R)al4 zPZeyFi4>7Q1R3qh6h8l~GzV;oRLW%McA6n3nx4r~j<;)mFBQI)i)W7X2P_k)p_*zJ zYZv{N^T~vYZS5zDZ&-6eWrO0_`3w^fTLrD)sUyB8x;Dd?%at z7yhTTA)(DV{}I&h10O4BfS&`9IW*~l+23l!9}ivuayih#t>ms?TnKQ{XL z2L3T0nW|$>iYzU+At4+We1|9yj~?=UGiTj{CR)`;cEGN$V&NM zP%;=cUuRh;VA%>%j&tuI0L#S6>tJzKZUw0da*VbID5v zZz6ub$Bu&wNhGSNkLj~QNNi6$n!FL7MoY~xm%(era!O`o%wLAlw^mult0An8X>7!b4!5TsAkd!7?vJdj zT``Q9k%bPQuYn?+G>=OGu-95V9galMkC!s^SP3jtj%L& zOpH_ID#J5?IZ`pikr#1NZ!%_S7E1*%t36Saq|RSIX~dUfNhtYGK^8UcS$|~pt^~!h zZ6=esEa~*AqJIQjS6q==5VoZuw5IX4o?ctbpW9{k`OEy7-oxg{8gG0QdI@J$Nz>>gi`^jl zF!Ax}B>AVr?y9d3JDXQ-i-AadhRq;pZ>8_D`tcnKbEGFxU%L&&vbaK)!A4keq&H)v z+M$o1i|EBtoKclPC*Gs2DOgt$`Alm!6vapy)wsLa}wgl5CjzpW8>W23s!_ zL@ZHt!f+OMu0iKRALM}w<00ft&4d@NB)G3!ZxYm>-Yu~sww`7H%O7Pb5{Jlk4H})9 z>j@kJPyU|pcCPg@PmdnhJeZ$0R+$laL?yf8m!;3h|8Q9X%psG0*X;9Jt7@hV^6!H7 zjlo|t3S1^L9Z102o_PHv{|PHb=~zg2USp!HF_Wbf>r-_x%|v$o3-0+}j1M;3;)VSu zH2Tp@3h_TcNqPEfe7)V0f<~FnTnCxIHhB z1g@K#`vo*uwZR!H%i-pCCJ@lq7m(<&kTW(%(?NDz)}J6<4%LK*-%Pd^6V3t-Bk*?X z3X;=n{WV$CW3Qc9?2YE!gq)@jEp}z3Cs#%*)5%BP+tE1d4garHdye)17H%Z2l#M9d zp2jF>wMPoY&nA+LawH-tTM0@bI+ zp;#o-t9^n5q2!V^nr{`LP#nvG^EV2r#xAd(zOScl9> zmgqv$Qjy($Rt8+8wooPaiV}Vw)LuasCH;=XP6fE%{~%* z(Tet8Dm&6-nJgi#u>*4?roU>+Ly0x|p91#%rXBwX3(Xh25l`|@dk|)0=&zi$!I(#7 z6IU|ijAkTgGS;Fz_UKCaD#^rH5>s*l(N)=FiWKqS0n`+CB=Z2<+Hv)*V)i^&tMN;> z6~yE*j+J_)Ky>knya_U-exaI0kB~aDh5H$tV=o1Qh$SMl90E!GHrc}zJvbL83b_95fE$M7>Jzrp;xKm3E!Y_c;{Ya^DYN` zv^vHoiC`|XLbB+L=?<9F`wzjaF*IQgXt$nK8XtMj;sdKcdnp9VBJ^9*A7CW#kH6`4 z8`~o!kcUI+2JgCKjzW>{>@Oz0th(mr)pgad=^~MRV=4xF$}R7A&4SV}fNOVLQ}J}a z{8$!yva$l8lg&piEcEhoA1L`PL(S}f=jaS}#SokA@q>NLOO~wc$h8)^L*kwyD$!`E zuu$s`RT#5xnNuLRjt}D7XY}v+j?FR7yYyTpIOa%Cx>&yJHY-5&OC49GxkWZ>v|X@} zKlWGdJVbpGL`l&xG{%NCH*RcW|E}!&JH}pnQO1WI4>+w~(7hEcom*GrxL_^pZUDzE#4Nu%l&fdBsMCba{n+w5WG z+73>E-25TyX9LCb$o^{QwDHhj<8S0Ln|kaAO)Cl6;j$Tv1EwP#1i@Oiw#;|y!(U{3 zy2wtJH7diJ!MppfQ0QC+V;ZlL>HOP&%e9;?Ntz27*%q$c3{nc~B;0??CZZi1*ka9o zI8l6~iY`eGND%)^A{zgvt1*>Ot0Gy#L4JvVD8qhv)sc!pUZ0Gzn~<&wug9ie@f>Cx z`0Tq4r5{lDMJc)c2H!}UoT>lU;Hq#F+0zISlVWluPGGL8H|?MaV#gj@0RYBNnb&)O ztj>Q&PE`BL?$+Wf^bC`Kq6;PNEM;NPi9L1_P~?r&Gu_Dv{bbr-LV; z1;J~9*NL1!~{M6r!EuIS(%iufs^)|sI`rSx_ zi8*SfzUiCf!L>Y|CsvAPcJx|>Ph2fNg#yP~a>_Snc6tF9De3L3#9Z$4M@r|sj(h#L z3}~PRy7k?Id;7{RQn;@{>Xs%=E61GVmk>zyaOaw|0^uF+Y?bYiSB=x2Xii<|p;_-g z>F}!i0bOWo3q?*mypxzic##ENg&^2+nVMz%n{CaMu-xux%(ugKkVB$L`Y~B7i!}mg zfa%GGn9*5b+Ea&p*nON#X`S-a`)s5#Woa-ic+-5%+ngVD9^Sxg%NkGGDnq|oA0!u> z=i^lHCoAwmK)VRa5#u}LAd^ErS&n^I1VmF`n23eD$To+*)pcqk4Z=iq7ezFa35}qy zyx5_W5=^`lAIgDC$ziZ>AY>r2`UTF1nKFBKEqsytB~Id}p`FXzzRZ+ypVuC2@}k+a zKA)AO(EkQ8K+eC~07Hhl6#?3y-A0p-xaAYwroInU3KGazHCRB^5PE@t>j{H!{f%-B z`f$l)6>FlUq~QH}lDpj)0 zTuV9}U-DDufh9bRRJl13^)#5bm_5W3*3>K(vc&}Jqb>|@>r3z&xF!uYFDwT8Ijfdv zC@X!d{CH&cdZk9psi#;<1!%L{wc+&@<%_gfschEp>aQbgKC;eofdAh>&XF&H9anV> zn_1Hp7uC4{3Ny!7yCD`t$TjB494>`KSN7*8W-B(TX!R=j8ys|^%ICJ_!rD$EMn zSzZ}47-S%eeqG%y4x{V|Fa5DKV}!IPU?VI!O(oK;J^?Er8>r|NwX95I$>92ktg_6K zx=0T#VlUeXV3HMKW8!;Hl%hZZ97m~Kx?-#p*H)w-=Y}}>qOck z(7TW{|09i0+{B*Hb)~l6*b+1JJ2A@IsIg7e6%e|cZ4aRBQ|9Pnj(iAo&Kp2{IAj#N z?=9Ap4zZW=2~4+Q=rl%KeqU!c?AEoPf>*NOoG60ejW`|?&NIed1{sL!E%?mx7}(4; z5(Q<0%ANf#$~R-Q_%v;IH%~tLH7cjD0!+ZZmL~0p=SW9~?rRc8U;c#7fDE8xSRAyd z3hesa72q=4yV~E{d3UdXQuH{bvGlg-PM@I9fms4tNmrT+3@SWJv5m(Ta3CO29V~Dq zpl?Z|n3^KFZCXBXl*j%TbrqBfwm$ea`L!XA$eTuOau zEvmO3pj|a*5`u5P&b$irW&7zHFwCtI7z4VCi__}?2cqyMdI;VA5wC@6id@W8UHH>s z`5G_4#+=nUXnw1-gGVFKt9$(JX>&cxF|7NilEQlJ;P7Ozwf{ppt57b20m4A#Ak$i1E zs}x*Ym-q(%I-H@mZxQ&~(YXp@BYXpXjBQ!)mX6Q%G#IXyv^p6Yc}x*Ao$c={N?<-~ zlK$=348r_?xS-Sy65rBaVLGxd#j78Mp)@gK>E}5m$xe^v)XPu6S2-#(L-Lu|i?XtQ zk2HW1W5<=c<{#RC+!?LB5u@s!#Gs)(nVb$sd{(+hk<;z@-<8jopH<7Sa% z-O3$)v>7pC-^lMfNi1zqNg#|qV&rj$uNW}q6Ad{ln~zgS{1jK1^5yYiBEF|s+8mhm z^k4%Fx^V7uZgS{||FAWqTS?@BslBpvuxI_m9w0&nigC}|Y;4GZiYFuxeBwcni0S45 zBmgHwlBp3wl<&fKAP}-YZMA6niy`wI&Y&GE7ID3M^W3*&iyuF zTo^N~i<0RPiY78Z`TRXMeh>Y+?zv@g7BFX(@b@65y)NBnVM+f+XFPHbhHHq?9BQF? z_?iHy6G|xjTq)AZ3_JON816FK-2xmFiqB(f=n#`+pat*4$l3tG9pBRDU_cw=(d+FF z6*?~>xA#O<%USs{HVfH4pvdD3J)mP(y-cD4h6+E?`1jodH%KYLHwEg=m^>QZw-w9b zEsQc>p0J8ZmW_SD78!`3vX69r#9A0~Nnleyf5p3|nACb-wmI(X+O z#`3TOlhu>2v8O+iRJX(RP=sYwr)1ly2Z29Han4e=d=oK=g0=ocvXzy+gwr7r!5B6qr$H@69Y>x)s z`hFdRS@Ld|k2)r}*0!MATclJZE2S{@S{(fb;oRk28o#C*2V+<%C~6|PFdf+#g&RjPD zk!_OWQlRJlrpDO&?RvJn>E7qol_jLrt{GsP4CqAoTLwNx7~lm1%^=DQtlfzvry{nZ z8or8riKQY8S11t%Y$LE8(`?I7rF*_fiqq!nD@#-{7$&+H+qSfTQ|n?@v}S4H8{?!U zV5exe-sqf!=-h;R%YG_~2@;v0Zy!JQJnndATLRTAGQG!tGY2Q#tFyQe7F$1Lt9`>> z8$g7gH+HDL5vjvh=(DK}ng;;Bo>oLQf>z+DiCj!N6yoS@dK~xB9|Lbthsv9ZW{VwZ z#aws01wIwh8?eizN`TOCv-`o~`jzrS zGo+c)8?f!0eb#$xJ4;90vvI`vMbd!Ljcgs+!rQL(o%CZKaSH);-*zGU_ z;abVqL1c4-lN|cW-mOy;vE#4MM6PuUUHWFLmF1ujHJI$GI2MYtTaal#YBTQX7-a$? zgTVQ__E5mTT9)AO(f2*H1}lzSczT$ONeF0bk$ndH;c+^(f> zA6?S!M=y3WD-uB71_9MHf~U2tJ5_3nmsRszLEclQ#?i_39W|IsxbSQQloJ*z%PdiL zKu|Wj1~z&a+))nj*??#mJ)$l{;_(_ZJAXTUWUt{d8cfP+#wAb2Nkzlz5bQqtz?(gE z7_I}G)p0O-b`+%fk{$j6m(9MxM@-p|A*(}0h-?^=i<&Xsepky98W zN2u?R0Rdzaebwzf(UObuev%Wp15-v6e*HeBC#4(fx2`W$_xLZWfN0eG zWWG{JtnX*pZG(jU+d0Qo{~|Ig%VIrGI<;pH9JXb%P5H`zt_?;x2usQ#*6{NOW*xVVzb&;?YmmwXluQr_9G9(0=% zj=75wcgN)mJXa#G@HFJQQ1l-X54K~YB;RBiDQW_okly^iWlx|s2ZsG(xFx!EdY;7T zepDN|f$2>cCZ<<7!{`9&0Yeow?_G zX#T))sx`}XpfNDCW(g%u)Mae6j3Lljy+E5^Y2bhg0c+mY-|lyI5f`86W5HdgD5g#K zkZ`zxnf(UAYsyhO^er6@TbQ2@A)ac`(?HbPD>c|OB0#+_%<#vbkpO*A>f6uTVehEE&SKq9g zQm{XQAzOnV26Kl7$v^1vE!*F-i+(Xj#?Ezr z8ZseG=}1>N`_%RLLWj|?^QNY;#I29~(<*qGLD}jofV#+Ihd`nLT^`XT{NXyw_ZnMx zSIKDF_^Q!V$=95kb?K*-#o|nk$8bleKnIrwg4eVDBM1hmq7*5RhRXk3`*=qhr zggaA|LTIOpJuf6l#ruqOh7Z;q3Ic*-q-^g<|I@ujJb54XMdV{|TkcrG3XrI54YIB^ za~IH~pb5N4s?6Gw&|MJZKnm%OjjWW;opYOQf+E6oRr$ypNfr@NGGd&&)bE)e0HBkW zU}!;B$@=E3HajEtnEGXe7^$UvWMLDM-W9wm(@skw$_h`scxJA85AV~MM~NpZ{CeYH z=$ApFr`|DJE#1CKEUCwNC)xwJ5Au~rw)TFw{HL{sOYSOA<5Bn^*-+G8?SS8i1}zcF z$7RVsF=7C5!OCs;;L?avF^ux!6onFDt!`Ho8N5=$5fe-~RJV?KR9il1zTg@!SjtGi zCCrO}oWpJCNF#&S3R?%hM5c$^)(^WCq7g1@_#bb?HfM1kmT>w9sB?2`_R_6|S(mDq9O9r-&`RvAEKI{}*y z5Y1DgCePOP6lT-onXs;o5De{TiozwXFGR2faOzEt%~IZ2+;9)PqtR;(ul!H>D~voM zsMo?Ijt$HE9nm;GiMc-YLGU?C0gLw#(BIrEm@ zwXW|Y0&Z(91Qrb{20IA(M3<^btdch54Z88XX((O!(@THAR=0i#m$Ft%ZYkG zlEL`5F!B&z$p&xr_Q%Gg|aXZLX>@>Bg z78h?S&E|Vbnuq&!owcm#Y!{5SpdeB1V;xeaXdjE%rI^*W?>g|m$Cm{BxrTk-`{mIc zT350GT%6NAJ>#jXeCWX@Q*O3c&x5NBrHc0CJJV$zn~ZZtW=^93452c}{a>td+6|Ln z`>7?W$I|?#&VczW#$g~2Zl>kwAxHn|WZd~}{mW;POqJClnlsS<-5z4K>lZ+EM6Nl& zVrLKh%w;M7faTv!eF`kAx(w%zSqdMMQLWsA`0|wZHqB{~R0{oDyWi6tyLFTQ);Awl ztz@XdrsZh*I<6Mp$oKn6s2PM?@%Yr`>&yTu9z-xCub@rAm#+UuynA5wRidE{(?+L! zcx=JfjVne_u>~ei`2V&6QIGgU)S+jFEg_=Y!<<}wTI!&=V6xFiK2t^#83^)fvb#>^ zWP?n6UWef^tP5!=(B`C0TT*iHNir(Bj6!K}4Sac4IAHn3B_bz~yb6Zf1Ij;k%Kkie zPXX1bS0d$rz+B_DyOVTjCligz!Bg5^a$#9|*F|-031L%+1*6A2nwsEU{`(R&l5f-U zRwL9!W?aMnlU|T&c`$IS)41mU7xh)WFhl?0%A#&*5!KW<%Rm|p8Eq3bdN$Z%ctBpY z-~b%urABrISa^$xk$t+0fAx7|slZym)Tq!QvGG=6DJqM^NMlsIVWYmk^rvNqu$R2N z;-1?*G&8H`l}GXOKgCeT>cz@r;?VxSEXO{<1D;n@#+W6v6Yu>cmYvZ>#`*1cdw!$* zuL4c|V)|Ts8#8;2LWNT>1to?f=vp>VqFhJ0;DSiwwfJF(hst3k6beXd;Q7}0PCi6p z)g6oANB1(-{0e|$&{;7K%EnFmJc<@nK4;vPqI=^SVJ*BDwqD{niN26EM2xr!CZ;cE zj1Oyt4kgr|wv%Y2f2G`|ZqhGjXE8yf0OQn0mdB$$=J({Uc{J@_*_lxATx~Brkg_Y~ zji#I_2XpMnuk|d^!70n_>)LpY)iNTG0q-uxqn7dw1X@BacxWWyahuf;}}_5(n2E@XHzg4@*5^`K|-F)Ab2M~Ly9oax z9DLN6ZPn%nDQcDM&!FjSmJaM`gTPLWg#S(!x&pwFEe9#=hL6HrRt%p8Oc>17XE(_n z1d{T$rp|6u0qp;^Z#LPhQUjM!pPB&!|J|822$d#1<2Hx$36pyl>}rSG=ml%!zz5+< zb1?acDV3~r9e)5S<6yWYCth* zMF~R|AM2`Xsz~se3Q#2o0?m@xT9FH{hM}iDH(Bn-(-Um%Vt%_WP#gop;%3+YjD*F> zEfaRkv939eCDb`(;VXfAmf2aOKi>GShwDrslf)#j>cvd7IOn}t*}k3}yTs{#P&*>K z)Q@sW=+8ET2 zUdP|ZP-LW5f|F{>KL!$rmxyS$eQ837h_S3gl@TOpl7j=IVE$Jq>R01NTE-aZ1i{$$ zn9tO{4G&HP!&#p$;KD~8lMueu?HuKJh0CBPV5P?|m)ab4f0<>%5}pYH0oze7fmht> zV`l|QqCj>7`tIkMR4Dgqo8T^UiJ#S|!Vi`#rWw+4-QJL-hp*7PFxf8*lC*`V!iXyz zEMxm|;vLaSX7(=suq5H3o^D+R@%q>0 zyjuTUX2lIf!ugEyalN0QUkzPFA0~UBPRrRyvX0Zyqo&MGI}D>3f#ERM`YhwX?T1JJ zbd&pH7E&p!%VW)(8z8?&lirxEK4A)p2s6B6!*6ao$}LG95ob*b`JkkqdO}rzG&^Tg z(B7&3U|ZJWv!&ezRxB2;vp~F2W|h~_j6-~7UaYaD*in@;ZrWK+NChM~?$#W!0JPiK;TN6-8+Ep-YD5 zO6JCZ*;0!_;;y{xjyO2$V=OvKyzD=S1?%Emk>5%JA0^y*H4Xtu+w>4n`og{y= zuZWYhCoh*{C}#n$F!VbjO-9{miqywp2i4c%BnZZIIW1KHGCN$~;$97Dc;%U{zWbke z+>zy+8nqVxw*A*&|K*2i0n13>Qs%_v11|NtXLQoG^7s+^14eZADC2Dw{rd+5N(0zm z%3sL=D=_@|&%M$XVrAjHqks?sc5XvNu2B~}%vj-XO#&BfPT(!uVI=3_UZ=*3|CaGY zE9BJJ&uvd1m>?OMtxz!9d3#wAv#c5{>$vTvQ^_egbB# zhmhfEKLOy{Fc&l+Q4_@^m{>e@Kq~Q<&d2h^J<^tz#+re0dn@4d%d*e*Ye|D;kuFdl z=AHswyfU*E3=noQ9B=>W_qTT{&tX7tt?sTvzGTE*u0^*V&DI{bwSSJZ>bk3>{tc>^gCn0kdS*U!aN;`H@Eub(8Okh?}a>`Su*oL*a zD#&+4;NhH81kwJpfql)iuxBAD^0ivZB0+85aPpU~f;>rPr~{#Q`!93&kma5s`xEfy zU%n3t1Beb+5j+wo9VRey*1A_cP6vbme@N6$glb4+$KE!P>0HPsn4m`dxM4b}rbO?%|=2g&vFV zWiW=LOnN)J%*D$0JR`bvMPSTYz%xd<0uO_T%-T4=n#!Rs|11Xl4Y@*8MMsHGTr%$4R zT0yv6Uw8H*%$^hl1R0!Pds-84a(9|4501uz<+Q@ks=~8^tERvxXLTMB)EYBp@=iH$ zD503A12CoOPyGMSmHlkk+528dcAGt9@jT<1tmjcZz&I;4kt&pdww}~6zR~6a1Tab% z;%}x`53pFzkZg6(S?Z{f?1({NH>Ot%0DmZ$sXYz3+1!G0L$S^t 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 aml6(*D%a{Ekh+mk&O67q1IPO*@_zwjP8Hz* literal 0 HcmV?d00001 diff --git a/frontend/src/assets/nam/design/bodies/graphic-eq-body-v6.webp b/frontend/src/assets/nam/design/bodies/graphic-eq-body-v6.webp new file mode 100644 index 0000000000000000000000000000000000000000..77ddb3bc4efb8e7220686dba5426e5aa209d6cfc GIT binary patch literal 94054 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 literal 0 HcmV?d00001 diff --git a/frontend/src/assets/nam/design/bodies/mic-panel-body.webp b/frontend/src/assets/nam/design/bodies/mic-panel-body.webp new file mode 100644 index 0000000000000000000000000000000000000000..322b0c7ebb291440a783ccf98dfd4deb19862c52 GIT binary patch literal 36338 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 z z7G|21F$v#Ks4|1=gE-9>;j+KbMl+)V!ETj~t??DG!m^cU9MC!H2h#=We$q?|Yg5{T zo34A~SlFPw$O(mIB?{9U27_-!2Haa++|+@}kJ(66<3@6|=BAO}NYa3w>8Gf-g?Cl* z&yj(%BF^Q=fdPj^LfA-oI7^51AmOf@jU1ibE*4HX*`YhVakrX{7zbpSEP%y9BT4dP zOT|hp8b;Bk=fJV%M5)u(y{Qzk`6$zGXNeE%)D(d_gOr5#%Rq#d)o*cr*`N@JnF`7) ztyFez=rlzojiBOH$2KxYx~@TcF-rD8yBd;J|6|t+bk_8^-Cg<(C*Ek46x3)F2)=Vb z*GXo$N*5C3VD{@3btjJs#DZBffSM5!>OD4W_jinuZSxfY2gPtQSL(4iHYqNv`0MEW zqRK`s*{nFh6~eK*x31(u*JX!@S{~|vcHA{c?D-Y+hYqA=+7-r8m|Fdbq|@WSER6^w zww%pnH5418OvMH*ZnJZNvvFZM;opr4R6@X<5}3_Ctjvs*pF?aC1@^ykQgPI z5&^DEn_mZ3=#E3)7fV(vx*KKY!Wix~HU+;N>@MtdDR(oC_NTu^E*~!T?>@c8e#?|69Ff>;WEb<3k23IXj%szDIJatrv+NW;Kc_ zCDg&7TEhA@NV98ORk(!;IeoMIDJt>cI<_;xt4Db#N7)JB;!V7R^4C>f+Bjfgu zKQj?A1~=R*5;H=&x_Pa3=9SphPp)Q4O z-3VGE_dM~+&0}nx2K$(U0KHt0-5z7TMmY4h+1BAk(f$=H_SVa^#odCmbnR}Wxzm>C z_|$q{1a3M{c&Q}@vfAvsoJTc^?Y>`3H-qw=YX?oQ9RNZ+R$do-?3xdZp)|U!At$U} zuD*jcY+31xTe3nQnjx@K-64GAm=z9WN;X<{rrNjs&G?rkamUFsd-w2W-!jb*+GM+5 z4+IFWGxMm}IE)RwAgGz~bPTOIpnW!_`aD&O|A_vbnaDSDNyVGeh3Vxn9IMapSrd~? zb|vOFZwm(gU>P@e-eM#>IC+;gEzw!83L{bt4N^YeO{|S*pe*lGTk=>c^INmDeOj_R z7$t^BcSIU2e{w*wuXOI$rD+%~BAq^mDXXtn+cH@XF>T*OFrB3Ew+p6KG#Oq~H3WLC zZ1KP#s)1mjKv_{XkvGppGMt7x%Wes^=PspD5S$(io`8aB#jy!ZBS^R2XL$iZ3fO~5 zlBUqp>10mdy>S9)@Q6lT;oHxm=8x!-k6TVSAYiDxIOWV2{|}g@`w)bRhS|7=Dwb$S z8d9=3O+jc@xEY9>l{G&LRdL{8F#2%WHH% z>6lDI|5VvT8wTdie4a2z0v-wW${nX&p`N2=fX`q*_S!xw1}jm1BvWkooMVYo|2!wD ztzyL>fgMp`6LF9ZN+a@U-dKt8^ujsXT}e(v@SjdN##*8xBw}pW-@9=4F<3aK z8xLM3_!T38mVN$zJe1N1lrIHS_ysRk`@U7vkKsB}@)Oh2TEF8ejXo>m$YgJuLq@;0 zrntO{hGL)vO@1Y)uKe&puiC;-*++&$ZcI(^t-|?u1CYtRTdLgNgk?e-VRXROVUlUQ z5+67fU5*%R?y*5$rWU(A2zOa#xJX9h7rX_Z<{7~G%_Mx;7`Z(wp**`T=oHC4qJqQ9 zQ5CCMQeL8;P-P%fu^N}aP!bnmh&9vHcn!+Vh+%CNDT)uxPWwma4b225k5p3WLiSn& ztnOEY2m#5$C2Pr44az0#a$MW0H}5p;9y!7|48xUn%ZAGiU1SXhc$r#h_uhOU;)K_3X(V399;hj9Q|`iKsW?))*^F{OIy71$3{ zg4yk2LPj*0?#j+ymer7RZHJ-b^mU33^|*>(Ik|S9OS0hHX+!DQ>8Yqq)^8#?Kq0h# z&-5k5!|z-vQxp}zZ&xs_|NX~g_`X@cFgYBWiEA<%)wyjKNjrC){S2UqFV~QOuR0!q z*lLelSTN{963M2ED#WJqY3WH_s}_cz@!f+4*ECv-!O781h39Kx)K3^m&9El^&`0j5 zJB!c{T0Y0Nc+hEv>cIMXq=o$Ugdz2D-E=R3*v-Z-gUz7n>5`k#E!?xYet;>uc5KE2 zC1$Je!rh~drWpZ?tmq+@)-RT6K&|1K4^cB~D6sH+sJM+`tmOpDVjYYA z4KHEmSkHdKVtG3TPHnHuJc1w=!{r)x^%>G3PgE^nj^#V4x&ipr;Lh4*=zC5})l@z1 zi-J*-R{506p>~7eij751gidYd+o)cLv5$=0W(RF&M3}vBd|a`y5R$3>L~1pg<`8Hb z!ZXK{GUUZ}b6#@R_9RHz!?|bda=3tW{-im>-8(ZHI?Bul+NP-G{B~h(@QHjy-l6;_ zZ~*!gYRmu0WPuu~nlthk&X##(jRVCamZIyY9DdBmD#3?di_lpoo)V9nS@9>XN7A>D zr03fP7ah0xtAm1krpu>&1_jG;ACzfUlj3e9_KGH}q24gu=@LP&O1L9-_j8XI8T zXEueXLeo=mK2PDByUf8^i3<=!g7H%u58=s-v_zlRJY2hg^(Zq`v7ZGW$(SdFANGL% zlcDMlr?NukUgbg0Z`ko#71-df<|%-I^yPZ&l!Qso9%XfE2G^B^vB8`hnzf)s~9CK->ko_7yvED2axPteN?y zefw9_kSX4C?_2SLv6s$W*u)iRdFcw-fu(m-m&CccmWY|{+^mm*L;~e-(sk{nSp;T9 z&uA5p2r1OT;yG>(n&!adDl?5LTgV#&Dyh#rZ{2XoVHgC5KXMkCqf%MS1W&o})+5Tp zC^pnNCn2>vo7TjWU@TzE>3;Fd{>jg=5c<`wKT}&qSRW(j0lFriT8FdWRftpt9yHeb zNuhIvj=foJVZ@BHhJ0c(Hc1)Ls7!Kg07T8O>GtwjV#4u+85imoH0_X7@!Frjxry!cf?;DJAckMf)~vJ<`ob+l2t%j=%LNl%HHb-f$%v^ zeAQZ${p+I8!qPU`1L7OW)s-eq3>jX{>4+(MLJ|kFgKWH)fmb&n5$Tu4JxHGKjVCn?irB?KV0}SqgaJ-M!FRz@kZ{kpXbo&*Q5;7J&2#|u z9+GB7VZ3zQRT6{sR`Blp&4N#&tJ@x(@8VOa0_>yZ~aYMdjBwGDrYMQ^2(YP|L1 z1P25+W(GMH*>{A&)DbQ&QC3#^;&GuU=7U}oke=LhJCJ8&!T>CeK4(k{4c8Pfif=1p z`Y|ZiZ3O*!#3wYR^Tb(=E611w*Km=A9_y_FJ%j|U&4LEBz#63Ys$ZG58mx_R+)e~~ zYCnGX)$Le3zk0;h=14xl55`lHl!SBgWT4^C6NdZC(-UyZRe|}(6!K(mW>~KG)icnv zP=K!Ys)DYz(N``HE@PwHmziad3OqwvYx6yGHaS!{e65ezB3_m?QpGjegnyRb(GAkx#K(gcOBkX%u4Aw&YBymeWSRyAx1S>>ukr%dF1 z*#Df_xo@H`mT+GYhaQwdnn%kD&Cq-2tHc4xj*T zCq+^_F~ng&!%ZJ8sbdygGicGZW?6%hG_b|;!#zDHwo>p{ z_@h%`w! zH2N0Dd9;!@_3p2yVQmsY+c8QxCbYOnH5&Y;MBqrG*D{btG=sx6m%x0V|Y< zgVRS&m$X=?HfolQNXR||PiW8?-ps~?*{hXh9x2^yx!?8Q+`Yt(+(W>xz=Ux0ILS7c z+Y28HEL32-?g6|aqj+jHe+8Ym8<1CB{;qbL-I{`i+8Dr~;gcJN{RhFmJ*L}JgnxVH z>R&C{kvhEjLafUe?t~oUVlx53(axyiDP}MGDoCil^HcEgFxZcvjh%!?u225Hzw$s3 zGly65Ar-@(p-1Y94etx(a>maqqqLOI<}!JKGCi6l@!l#r?Qn8|oU7kuL=6xPs&dB- zD&N_}0-|yDbmsI{c$xD17d`Y*&}yujs()KQ;w7hbCQqBS_2lL|I+1?60W>59hZeLdpKA zZG(cC9EgcnxOf!Wx2E@FXT^J*E4`>?@G1mRHQCmHGO#%x2__(+ilQ;;r;Ckf>-mP8 zX_!oDe>ap|%cGhO08B^W(!%(=$rpdN!gCS^@7O&wupu=EDn>3c$m5U*p;2fvOY}Q= zl??|$sU-_7{Zx>f>3SEhpL)!Wz}c@|#RGdn>XTNS8D&bu2HopUOwM$(S}AyRd5i8G zczyd`@aopAMeGjOU3u1krM*# z^g1H<#2EBx6uT+OHowf0;ZOK?4Vq?_+Ul1{W}bkVi?nM!ArekH>xRSYG|<% zwkxLB7nW-z>go2-F{se4!Z#_~m9eo#2_%Q{lEW&B79OS++{S21i3vG0*|cwWUWT0e zjeya)13th(G|HVF^8D@*nWrAyrfF^z*g$|$>Wh;ad_9%g6tIJvs$O5;<*K_Gok6ZX zpNMDJ?rlRDmv8+-+|ztc%A%Ua0gUp=AE86RFG0L@53u-lPb^e=giLDRWM&){!)iNa zDiiF-LvkW>!qbJyYAX9?Oz^9dlgkTn+KL!3RVJQZ0s&ra9K%~<(F*>Oz%Ja?B;gw0@v9t2TN0fRTp;qgkMWa znBQ(7u_FZvsTTvjNCyEH#!(2!K?8Tfhc{Np&2p?!MCNDNQ#?1Q*3CRH@Y&z(Z2^I7 znUZ(1T&gy0*H+8whe=iPNPa~Q{lQ-6b?lF-x7KLhKbb)O=1X&uN^@_LmSFy=ZHCUd zZi!tqv-zot8J4WO&?52Eud!xHnt3s#XdVKR!E+$@b;ZNOh8ko&_%~S&=FE0>z6|BU z)Jpr^fvJAX>v}!D4RgC)3%>(%Qyu35n4nOfB+37*oU~8B1jb{}{y*W?XnSh0)hu}vGkp&M}5l3xaF+6Soz zd{*J=ft592%~j<4mZO>R;~2@4s9=j)Lwm^H{P5?AwSLvCKqau<;16VEG*}rhrS+7i zq3Sw{3@H63j?#>eq#BNH(tt9B1S)7ht^#QQmp=L4+*X-cw9@aKNFMIZf@UKpgvv@1 zS<(#=yT(PIb!rZr3pzzP$E75trf9vV05A?1BYr*&S8W7RJOMZ~psUB6lb!w4;(pOS z+NmTz@pl8l|D&aeTB(!p3g^8VzR3K`9<_HHEuh8mESppXPv=OPMr!oENBs2#6!bgeo!*)hCHb{$MfoOWsfdwvG!Hro1X){} z?9qXT%W!80$yEgmk(R@ts|Z`PGWu$~2gp*d$7mZRs+uaJP<-XLj_w8embdl!q@xwR*tHXh0bo@@AadWM2CeVUs0a8djSqRp)HnC7YSV+)=-i z8pH=8wEA#dOjjB?W_Vf@H56b={>j&oy2=H6WZmMb!**j`rpdd}@;6WE4@vqFq1mFi zu>5?7x?-?Q-KwuXXq%EZ3EG@7KEZ|g1!YVh-1+)ur14BOupSvOe=%i)W;JW=0a${ z*4ge&b(d{JD#9lXi@~KCp)vrYN98MCtWbU}+4w>s0n`IUGyDsREi3w9Sq3tE<8JD8Y~9yjMj!CJX%R69-2H!Gyhgs}Kt zMCnKW3#UnSf>1zohh32VM(X*B zd8@@FL_Qz6!`pR)(gw8Q6x35T66HltCO>tNhQZ`t; zvG$ja+LsY=xser^gs&^Fqc#rrmX?yfC#Ge!WU1+3W&m!G5lsQo%wRn7twwxfj=)3y ztyTICk9Wl@)GKK4xJP(k09KJ9kX$_RPim5!DW-G%?mNw6{TCHFRs%eL2L6CbRYI@Krx|0$eAE1+uxAWIPbnKcvlZ{h{M%Ey*TY}mF7uud8&Ko@EidtG?nW17PMoto#8-$mH;hrW{t*U z*GzI-!ar89_m4r&=X+cj&t5XyD>WV}EYq*24-ieHxd78~4~_H@93Kw~lAc+H^b5*I z6p++SY$@#zv&yHS@D`8I&VT68;U=}**pgxxdr6{)&c~h+&TwQ1KM0yyNZ8Qr@~;7T zOx=vG{*`majPe4IC|Mj%69%G9W|@Qd-54|9(2$h~=-l@%GwP7+9k?+-u?}b;bvGH2 zI5H0}itX$M3y5Y*+b+bY&CE~EMO8WUMBO(kr=Uq7STs|12Po<6%6%bkJ| z>dFFP#Ppnx`WRVwe0}u|`epQ14m;Iexw^r-FYk|l#$9e^;3s*l$bI*2a$ELf5@N)w zKyeuKB`XQE2z;qnC|wt~8``q|4MC$=RiLugmH1zKnSv{vBC0^{2ce4$#xo&0R5ty( z^;kSJ=;oe;QQ6T_(7;l`kV6Yk-#%~uUvIbj;}JBVVRkahUMeD?1?*ld!wq)+73Tp(pHT(hq!5mtt&I9I(BGpeYf|K=AGzAb?$dS zNDj-CFyHL}YaD6sIC>tW(DPM{)b}GS}rP++i z@7<)DTss$2!Oaf}6kC!|$;OINWr`r@*z{gU#PQDii*HT|hs#4N>M9=6-^96sAvP%f z*UXGrEolktJ?Kj={~h4ISnDVwPYuHu*s5SX>hug6^TH-cKY%6#Oh6*4y;{{@T>z+m z6cj15G&(_l>CsFsB!UqENZk~Xpy)xJ=O@q+VbzL|0bf#)?rGFapnD42xpOtRF1>KC z0_&4oHN*m%@r%zrt84l)<-`s6QyzR}_~$1|3GYyVDZQd(M*bVc7KkPl+8)SVam z!K^*ISABuW76h8*6k(Z$+B-Ux-p0)~g>k2oFE#AW{$}yET!XKOd9DL5Lh5jqzO@qt zZacMUfHzP&joYv2cu6q*wHo0o&@Ci4Q6w#+aUqHWIIiLE5{#DZj7}A+Ofv84STU|b=QlJ<&z@Ata)L! z)Af>VUgdT=D(LfjJLp}iu*c7n$Alili=l)Xi9;EI1c%cj&JlcBR&*r?6ud8LTABk= z=0GL9k>+JvK9oJdqH!j4!cBB&8F_~xV8Rsoo>3@)JzW~E82zolOQ{Od*Rsf^ zO78bW7K0MvfufA>rs4(v9T6Asx>IMmrcF-6@QC{SV&H_niCvp7T5R zH=-DSTEe~>7gu2E1fGr1Bp>}s%eiNX3n{z4kS+|acg5wU*on4cO9IEW{TJRSwpteTi zlgR+Q&v}l?9c0gK2Ix3pYElVvo6qeHb74%n`vJ_FF_qOOZ)c^3oXcEF$S;fp;7wB> zw&?UPL-JRSfMF`JjVF!>`C3gl+wOl1cbCkIiy9gcnD)?g_s{_?9^lm zk(~P*vcFELr8SBm9A}hn^-T93+dr5bjOnN-#K%k(utx!rT#*i9iI$G-1|R|6k;8be zR!K8{)?)bRLfGjtN>g3S+Tk2aAm%*26sG~lr5~s=_o3CUUqy>UB zoW`K#&w<-H6uO1m?)sl9i${q1)_>HYnQ$e^x_qWvl1JH+e@%p`1 zGc>D8P&(&stuS*g>ZvmSNb-X@LeHz;Miv7)M8a}HWiF^9hBcRjr5IO4wh&_%P`&5J zBz#V>OUlso-Lqg9?7LrSdXV>$EUtUF?90+TBId`^>kDfo8w;-}&h12PZ0%fRTU~@< zn2Rk0T~($}&)vq&jES6^D4#LC-12k4DOj;Uj&nZt!cJM`g#Kd`Ow$bv`uL|PO^%B< zgP@gvMY>bA<$&YcV%;B=(Q6jtY}g-Z^-KJfj8!EU5Jz6MPMYZmB&piN)1khLDvgIk$dfA~K3Y>c=&j<@MCyU4QX#&&R*=embx~sjHN-11`_UG{i z6Zc>&6_sf4TZiu|uxHr=4@u9K#pxHMn*3(rcZ}7R*d!)9>1QDv*5T(Ab%yFJJPiqf zl2R^&4Mc%{8Vd04jzKOPi@v?SMtC-)-c`6a6V6r*-rcFB`nCx9B^b=ryx;N{zglxD zIo=#-P}KQ25*iLLOlSXnwk3X@|1rmT3Jcvc*q#53mZXY5=|^scQhKAjZcCPYSv-w) zpedrlyp+67^PLijPLFAM;eqc$XC8nzA6}n@_E8CJy@G@@IG)*=CS=(ZSuuE+c^zRU z#_~DA@9CvojA(xtu8buq`BBWYY1mymXK;RKe@Ndf>z-^`QOACM0M?nbp`K+Lb%+!9 z%`zHY*2fLqJ^u8XnSJ2+rQztaqryNp=hlBt3#F&r?Q6Q-*!i;hlZ=Sn(bRXV-F#8d zP4WL+2#JCgw+Wc?89t+n%)LcB^^oc_RsZh${y%NRDs3e2n?UD zESX;1?@`5XV{}$iUc9{3JLvdBiSU~Xo zRN^_A$oYg<+~-xlMG^k zYykYb@MBDrncj<3#KoU|cG=Po_E)j`>48SlAly9dhgZRqFnY%RUtMGmmkdug!bygc zysS<%3#ns&0EAv`Rg!2{VpK1*+sU%=361YX{7pFUMA3IrE#6sewpHY=d0x`raIZJ{ zoa9K`>y+0iH$Mc%O4lKm-($AL<5L>Af+f&s(EU$0Q56M;_1yAbuwja4k zgye5r_V|WD@_3*zpk8uy;nU?>Qg-L2KB3;jZTf9=O}<&I*HHFhL(ETK#@t}c3+9BL zLk6&5bp6G#NZ7B*0diTx%ef>Yc=IhEQmQl`CEDO#OQ|^7eWov0P_&WVS>4P>`jvj* z)qxV?*pLe*pln8?(*P~d)gGbkF+SO&4i+qkDDyx#yF{dvGftvE%f5w zJMmE3Z?ZR7stYQ}PA*bP;H^u@rulXWT6yx7qyQ z!}y_{{+j_})@y&Rno8X&NuvneBjyI3x;Lk_DaCRJWgdYy<|K%aKJTcA3{3RxoKoJw zYJKyD_GK&aB!~S6qTKDk_3g{||G2t!A2mBTlIe=OZ)T?&I=0#X2O=h$7Soc0Rk;O4 zIOy^iE>4q&4|f(gGfrsO(6&Y%(8r+#FOdb=q%Yt#@RuwHNZai{DTUFUeV<*$yL%S3 z*R43xuu~kcXHO}gj+4Wf8!L-y3Af~)k*C9IL@p=)&ur1x?XT3IBBEUv6+&CWvP%?9 zARW`tY>9Fw-|ex2KO#HL7i?_NsimFfG4tO*wzcXTtKBQ*WF}vjOD(xth(=`xC$^o# z`gkSXX4&%J`|V)W{TY;&+u&jAs7u(LX$Enx_Sru7S;RE3zahUWs={2|><0UT4i&Kqsibz*8IT5fvYINN4q$BFFGQKd7^qqMh(QpBH-(dIA zk6Z0>{sxXOdd{Gs3x5x~B^`A#ku8-OGnhq3WJKTZQtB?{+)}{!?B}J|x9@^c+{t_w zzEa~sQHj?zGHJ- zdzpUSrz5NMqMLhJPnTL7Gb@wdoN2iS(WEEgufj~qw5R=yUt9{-8L0CU1+WTyO8_8az?$3YR6WwN zV}sR|7S8xxbZ;_T%dc7qH)?ES<;Y{OpbmSoqWvwoQr4#vp=q z*y^0dktsx(jbuYTvikRv=eGBz9Sze4v-;g$H;AKzrnbG9lBX3;5lF2Oj3y!n7lQjw z3|JgPkOJQPtfn+Se&UfQ12vZ0yrlsW*Eo<^Tjl5fPaE-nbAVx~euUl%(eF+d3BZX@ sO@zUUq~$%dM2tW}X+ZY_%_kFBNRT6;$>K2TZVGkQSh~ML+xNHif7cO<{Qv*} literal 0 HcmV?d00001 diff --git a/frontend/src/assets/nam/design/bodies/stompbox-body-blue-wide.webp b/frontend/src/assets/nam/design/bodies/stompbox-body-blue-wide.webp new file mode 100644 index 0000000000000000000000000000000000000000..cdcda9022ef654462b6e206b97e55ef334ed1f6a GIT binary patch literal 430572 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 z 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 z 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

    ?cR2 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 ={Dj1L{j7_W;&(ia~b^M7Cs6i4j# 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%0A1H*`Zd@{FZUf@E*B2#>={phAHr=q>V?-JBsXdP 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 z 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

    %b?@h^iL=nyx9co_qYJG$*;&>t9O1M^W&E>{b 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≀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 literal 0 HcmV?d00001 diff --git a/frontend/src/assets/nam/design/bodies/stompbox-body-dark-wide.webp b/frontend/src/assets/nam/design/bodies/stompbox-body-dark-wide.webp new file mode 100644 index 0000000000000000000000000000000000000000..573778b3ab4becac9a84d63ff17d5c70b1ac2dd4 GIT binary patch literal 121448 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%0D6DXXd{lK1%`i;OfD{R#F*FeUGnt*=_v3PEaP1H5 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 V0TRjK00Af<000`?0B_0ipa59ig;M|k literal 0 HcmV?d00001 diff --git a/frontend/src/assets/nam/design/bodies/stompbox-body-dark.webp b/frontend/src/assets/nam/design/bodies/stompbox-body-dark.webp new file mode 100644 index 0000000000000000000000000000000000000000..c2701d1a888e3af1fb503faf9f1e36d64a70bc58 GIT binary patch literal 91496 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

  • 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

    M%X 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≪*xZmZ|m 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

    + ) : pluginKind === "nam" ? ( + { void handleParamChange(param, value); }} + onFlushPendingParamWrites={() => paramWriter.flush()} + onRefreshRack={() => loadSchema(false)} /> - )} - - {loading ? ( -
    Loading
    ) : !schema || schema.parameters.length === 0 ? (
    No editable parameters
    ) : ( -
    - {primaryParams.length > 0 && ( -
    - {primaryParams.map((param) => ( - { - void handleParamChange(nextParam, value); - }} - /> - ))} -
    + <> + {schema.parameters.length > 0 && ( + { + void handleParamChange(param, value); + }} + /> )} - {groupedParams.map(([group, params]) => ( -
    -
    - - {groupLabel(group)} -
    -
    - {params.map((param) => ( +
    + {primaryParams.length > 0 && ( +
    + {primaryParams.map((param) => ( { void handleParamChange(nextParam, value); }} /> ))}
    -
    - ))} -
    + )} + {groupedParams.map(([group, params]) => ( +
    +
    + + {groupLabel(group)} +
    +
    + {params.map((param) => ( + { + void handleParamChange(nextParam, value); + }} + /> + ))} +
    +
    + ))} +
    + )} ); diff --git a/frontend/src/components/ChannelStrip.tsx b/frontend/src/components/ChannelStrip.tsx index 5eccc6e..d59a8b0 100644 --- a/frontend/src/components/ChannelStrip.tsx +++ b/frontend/src/components/ChannelStrip.tsx @@ -1,8 +1,9 @@ -import React, { useState, useCallback, useMemo } from "react"; +import React, { useState, useCallback, useEffect, useMemo, useRef } from "react"; import classNames from "classnames"; import { ChevronDown, Power } from "lucide-react"; import { PeakMeter } from "./PeakMeter"; import { MasterPeakMeterCluster } from "./MasterPeakMeterCluster"; +import { resolveTrackMeterPresentation } from "../utils/trackMeterPresentation"; import { useDAWStore, Track, @@ -15,6 +16,11 @@ import { Button, Slider } from "./ui"; import { useContextMenu, MenuItem } from "./ContextMenu"; import { automationToBackend } from "../store/automationParams"; import { nativeBridge } from "../services/NativeBridge"; +import { registerScopedActionExecutor } from "../store/actionRegistry"; +import { + getParameterWheelValue, + resolveProfiledParameterWheel, +} from "../utils/parameterWheel"; import { CHANNEL_STRIP_DB_LABEL_FONT_CLASS, CHANNEL_STRIP_DB_LABEL_WIDTH_CLASS, @@ -60,8 +66,15 @@ export const ChannelStrip = React.memo(function ChannelStrip({ // This component re-renders at 10Hz for metering; keeping it isolated from // the tracks array means Timeline/App never see those re-renders. const meterLevel = useDAWStore((s) => s.meterLevels[track.id] ?? 0); + const midiInputLevel = useDAWStore((s) => s.midiInputLevels[track.id] ?? 0); const clipping = useDAWStore((s) => s.clippingStates[track.id] ?? false); const autoValues = useDAWStore((s) => s.automatedParamValues[track.id]); + const meterPresentation = resolveTrackMeterPresentation( + meterLevel, + midiInputLevel, + track.armed, + track.type, + ); const { toggleTrackMute, @@ -75,10 +88,15 @@ export const ChannelStrip = React.memo(function ChannelStrip({ setMasterPan, beginTrackVolumeEdit, commitTrackVolumeEdit, + beginTrackVolumeBatchEdit, + adjustTrackVolumeBatch, + commitTrackVolumeBatchEdit, beginTrackPanEdit, commitTrackPanEdit, - beginAutomationParamTouch, - endAutomationParamTouch, + beginMasterVolumeEdit, + commitMasterVolumeEdit, + beginMasterPanEdit, + commitMasterPanEdit, selectedTrackIds, trackGroups, addTrackGroup, @@ -111,10 +129,15 @@ export const ChannelStrip = React.memo(function ChannelStrip({ setMasterPan: s.setMasterPan, beginTrackVolumeEdit: s.beginTrackVolumeEdit, commitTrackVolumeEdit: s.commitTrackVolumeEdit, + beginTrackVolumeBatchEdit: s.beginTrackVolumeBatchEdit, + adjustTrackVolumeBatch: s.adjustTrackVolumeBatch, + commitTrackVolumeBatchEdit: s.commitTrackVolumeBatchEdit, beginTrackPanEdit: s.beginTrackPanEdit, commitTrackPanEdit: s.commitTrackPanEdit, - beginAutomationParamTouch: s.beginAutomationParamTouch, - endAutomationParamTouch: s.endAutomationParamTouch, + beginMasterVolumeEdit: s.beginMasterVolumeEdit, + commitMasterVolumeEdit: s.commitMasterVolumeEdit, + beginMasterPanEdit: s.beginMasterPanEdit, + commitMasterPanEdit: s.commitMasterPanEdit, selectedTrackIds: s.selectedTrackIds, trackGroups: s.trackGroups, addTrackGroup: s.addTrackGroup, @@ -146,6 +169,25 @@ export const ChannelStrip = React.memo(function ChannelStrip({ }, [track.id]); const [showFXChain, setShowFXChain] = useState(false); + useEffect(() => { + if (!isMaster && !isSelected) return undefined; + return registerScopedActionExecutor( + { kind: "mixer" }, + (actionId) => { + if (isMaster && actionId === "mixer.openMasterFxChain") { + setShowFXChain(true); + return "handled"; + } + if (!isMaster && actionId === "track.openSelectedFxChain") { + if (useDAWStore.getState().selectedTrackId !== track.id) return "claimed_noop"; + setShowFXChain(true); + return "handled"; + } + return "unmatched"; + }, + isMaster ? ["mixer.openMasterFxChain"] : ["track.openSelectedFxChain"], + ); + }, [isMaster, isSelected, track.id]); const hasBypassableFx = track.inputFxCount + track.trackFxCount > 0; const hasFx = hasBypassableFx || Boolean(track.instrumentPlugin) || (track.type === "instrument" && !track.instrumentPlugin); @@ -301,42 +343,98 @@ export const ChannelStrip = React.memo(function ChannelStrip({ } }; - // Undo/redo: capture starting value on pointer down, commit on pointer up - const handleVolumePointerDown = useCallback(() => { + const beginVolumeEdit = useCallback(() => { if (isMaster) { - beginAutomationParamTouch("master", "volume"); - const endTouchOnUp = () => { - document.removeEventListener("pointerup", endTouchOnUp); - endAutomationParamTouch("master", "volume"); - }; - document.addEventListener("pointerup", endTouchOnUp); + beginMasterVolumeEdit(); return; } beginTrackVolumeEdit(track.id); - const commitOnUp = () => { - document.removeEventListener("pointerup", commitOnUp); - commitTrackVolumeEdit(track.id); - }; - document.addEventListener("pointerup", commitOnUp); - }, [isMaster, track.id, beginTrackVolumeEdit, commitTrackVolumeEdit, beginAutomationParamTouch, endAutomationParamTouch]); - - const handlePanPointerDown = useCallback(() => { + }, [beginMasterVolumeEdit, beginTrackVolumeEdit, isMaster, track.id]); + + const commitVolumeEdit = useCallback(() => { if (isMaster) { - beginAutomationParamTouch("master", "pan"); - const endTouchOnUp = () => { - document.removeEventListener("pointerup", endTouchOnUp); - endAutomationParamTouch("master", "pan"); - }; - document.addEventListener("pointerup", endTouchOnUp); + commitMasterVolumeEdit(); + return; + } + commitTrackVolumeEdit(track.id); + }, [commitMasterVolumeEdit, commitTrackVolumeEdit, isMaster, track.id]); + + const beginPanEdit = useCallback(() => { + if (isMaster) { + beginMasterPanEdit(); return; } beginTrackPanEdit(track.id); - const commitOnUp = () => { - document.removeEventListener("pointerup", commitOnUp); - commitTrackPanEdit(track.id); - }; - document.addEventListener("pointerup", commitOnUp); - }, [isMaster, track.id, beginTrackPanEdit, commitTrackPanEdit, beginAutomationParamTouch, endAutomationParamTouch]); + }, [beginMasterPanEdit, beginTrackPanEdit, isMaster, track.id]); + + const commitPanEdit = useCallback(() => { + if (isMaster) { + commitMasterPanEdit(); + return; + } + commitTrackPanEdit(track.id); + }, [commitMasterPanEdit, commitTrackPanEdit, isMaster, track.id]); + + const groupedVolumeWheelTimerRef = useRef(null); + const groupedVolumeWheelModeRef = useRef<"all" | "selected" | null>(null); + const commitGroupedVolumeWheel = useCallback(() => { + if (groupedVolumeWheelTimerRef.current !== null) { + window.clearTimeout(groupedVolumeWheelTimerRef.current); + groupedVolumeWheelTimerRef.current = null; + } + if (groupedVolumeWheelModeRef.current === null) return; + groupedVolumeWheelModeRef.current = null; + commitTrackVolumeBatchEdit(); + }, [commitTrackVolumeBatchEdit]); + + useEffect(() => () => commitGroupedVolumeWheel(), [commitGroupedVolumeWheel]); + + const handleGroupedVolumeWheel = useCallback((event: React.WheelEvent) => { + if (isMaster) return; + const gesture = resolveProfiledParameterWheel(event.nativeEvent, "console_fader"); + const mode = gesture.ruleId === "cakewalk-sonar.console-all-faders" + ? "all" + : gesture.ruleId === "cakewalk-sonar.console-selected-faders" + ? "selected" + : null; + if (!mode) return; + + if (gesture.preventDefault) event.preventDefault(); + if (gesture.stopPropagation) event.stopPropagation(); + + if (groupedVolumeWheelModeRef.current !== null && groupedVolumeWheelModeRef.current !== mode) { + commitGroupedVolumeWheel(); + } + if (groupedVolumeWheelModeRef.current === null) { + const state = useDAWStore.getState(); + const targetIds = mode === "all" + ? state.tracks.map((candidate) => candidate.id) + : state.selectedTrackIds; + if (!beginTrackVolumeBatchEdit(targetIds)) return; + groupedVolumeWheelModeRef.current = mode; + } + + // Cakewalk's grouped rules intentionally remain `suppress` in the generic + // Slider resolver. Convert only their signed wheel amount here, so the + // hovered Slider cannot also apply a second, single-fader adjustment. + const deltaDB = getParameterWheelValue( + { ...gesture, operation: "adjust" }, + { min: -60, max: 12, value: 0, step: 0.1 }, + ); + adjustTrackVolumeBatch(deltaDB); + if (groupedVolumeWheelTimerRef.current !== null) { + window.clearTimeout(groupedVolumeWheelTimerRef.current); + } + groupedVolumeWheelTimerRef.current = window.setTimeout( + commitGroupedVolumeWheel, + 180, + ); + }, [ + adjustTrackVolumeBatch, + beginTrackVolumeBatchEdit, + commitGroupedVolumeWheel, + isMaster, + ]); const formatVolume = (db: number) => { if (db <= -60) return "-∞"; @@ -634,10 +732,7 @@ export const ChannelStrip = React.memo(function ChannelStrip({
    {/* Pan Section */} -
    +
    {/* Vertical Fader */} -
    +
    { if (!isOpen || !trackId || trackId === prevTrackIdRef.current) return; prevTrackIdRef.current = trackId; + let cancelled = false; (async () => { - const bands: EQBandState[] = []; - for (let i = 0; i < 6; i++) { + const parameterReads = Array.from({ length: EQ_BANDS.length * 4 }, (_, index) => + nativeBridge.getChannelStripEQParam(trackId, index), + ); + const [enabledState, phaseState, dcState, parameterValues] = await Promise.all([ + nativeBridge.getChannelStripEQEnabled(trackId), + nativeBridge.getTrackPhaseInvert(trackId), + nativeBridge.getTrackDCOffset(trackId), + Promise.all(parameterReads), + ]); + if (cancelled) return; + setEqEnabled(enabledState); + setPhaseInverted(phaseState); + setDcOffsetEnabled(dcState); + const bands = EQ_BANDS.map((definition, i): EQBandState => { const base = i * 4; - const freq = await nativeBridge.getChannelStripEQParam(trackId, base); - const gain = await nativeBridge.getChannelStripEQParam(trackId, base + 1); - const q = await nativeBridge.getChannelStripEQParam(trackId, base + 2); - const enabled = await nativeBridge.getChannelStripEQParam(trackId, base + 3); - bands.push({ - freq: freq > 0 ? freq : EQ_BANDS[i].defaultFreq, + const freq = parameterValues[base]; + const gain = parameterValues[base + 1]; + const q = parameterValues[base + 2]; + const enabled = parameterValues[base + 3]; + return { + freq: freq > 0 ? freq : definition.defaultFreq, gain, - q: q > 0 ? q : EQ_BANDS[i].defaultQ, + q: q > 0 ? q : definition.defaultQ, enabled: enabled > 0.5, - }); - } + }; + }); setEqBands(bands); })(); + + return () => { + cancelled = true; + }; }, [isOpen, trackId]); // Reset state when modal closes @@ -129,8 +146,11 @@ export function ChannelStripEQModal({ isOpen, onClose }: ChannelStripEQModalProp ); const handlePhaseInvert = useCallback(() => { - setPhaseInverted((p) => !p); - }, []); + if (!trackId) return; + const next = !phaseInverted; + setPhaseInverted(next); + nativeBridge.setTrackPhaseInvert(trackId, next); + }, [phaseInverted, trackId]); const handleDcOffsetToggle = useCallback(() => { if (!trackId) return; @@ -235,14 +255,13 @@ export function ChannelStripEQModal({ isOpen, onClose }: ChannelStripEQModalProp Freq {formatHz(band.freq)} Hz
    - { - const hz = linToLogFreq(Number(e.target.value), def.freqRange[0], def.freqRange[1]); + onValueChange={(value) => { + const hz = linToLogFreq(value, def.freqRange[0], def.freqRange[1]); handleEqBandParam(i, 0, hz); }} className="w-full h-1.5 accent-daw-accent cursor-pointer" @@ -261,13 +280,12 @@ export function ChannelStripEQModal({ isOpen, onClose }: ChannelStripEQModalProp {band.gain >= 0 ? "+" : ""}{band.gain.toFixed(1)} dB
    - handleEqBandParam(i, 1, Number(e.target.value))} + onValueChange={(value) => handleEqBandParam(i, 1, value)} className="w-full h-1.5 accent-daw-accent cursor-pointer" />
    @@ -280,13 +298,12 @@ export function ChannelStripEQModal({ isOpen, onClose }: ChannelStripEQModalProp Q {band.q.toFixed(2)}
    - handleEqBandParam(i, 2, Number(e.target.value))} + onValueChange={(value) => handleEqBandParam(i, 2, value)} className="w-full h-1.5 accent-daw-accent cursor-pointer" />
    diff --git a/frontend/src/components/ClipPropertiesPanel.tsx b/frontend/src/components/ClipPropertiesPanel.tsx index b518f9d..729ae5a 100644 --- a/frontend/src/components/ClipPropertiesPanel.tsx +++ b/frontend/src/components/ClipPropertiesPanel.tsx @@ -1,4 +1,5 @@ import { X, Lock, Unlock } from "lucide-react"; +import { useCallback, useEffect, useRef, useState } from "react"; import { useDAWStore } from "../store/useDAWStore"; import { useShallow } from "zustand/shallow"; import { Button, Input, Slider } from "./ui"; @@ -9,19 +10,96 @@ function formatTime(seconds: number): string { return `${m}:${s.padStart(6, "0")}`; } +interface ClipNameFieldProps { + clipId: string; + value: string; +} + +function ClipNameField({ clipId, value }: ClipNameFieldProps) { + const { setClipName } = useDAWStore(useShallow((state) => ({ + setClipName: state.setClipName, + }))); + const [draft, setDraft] = useState(value); + const draftRef = useRef(draft); + const valueRef = useRef(value); + const editingRef = useRef(false); + valueRef.current = value; + + useEffect(() => { + if (editingRef.current) return; + draftRef.current = value; + setDraft(value); + }, [value]); + useEffect(() => () => { + if (!editingRef.current) return; + editingRef.current = false; + const nextName = draftRef.current; + if (nextName !== valueRef.current) { + useDAWStore.getState().setClipName(clipId, nextName); + } + }, [clipId]); + + const beginEdit = useCallback(() => { + editingRef.current = true; + }, []); + const commitEdit = useCallback(() => { + if (!editingRef.current) return; + editingRef.current = false; + const nextName = draftRef.current; + if (nextName !== valueRef.current) setClipName(clipId, nextName); + }, [clipId, setClipName]); + const cancelEdit = useCallback(() => { + if (!editingRef.current) return; + editingRef.current = false; + draftRef.current = valueRef.current; + setDraft(valueRef.current); + }, []); + + return ( + { + draftRef.current = event.target.value; + setDraft(event.target.value); + }} + onBlur={commitEdit} + onKeyDown={(event) => { + if (event.key === "Enter") { + event.preventDefault(); + commitEdit(); + event.currentTarget.blur(); + } else if (event.key === "Escape") { + event.preventDefault(); + cancelEdit(); + event.currentTarget.blur(); + } + }} + className="mt-0.5" + aria-label="Clip name" + /> + ); +} + /** * ClipPropertiesPanel - Shows and edits properties of the selected clip * Opens with F2 or from View menu */ export function ClipPropertiesPanel() { const { - selectedClipId, tracks, setClipVolume, setClipFades, + selectedClipId, tracks, + beginClipVolumeEdit, setClipVolume, commitClipVolumeEdit, + beginClipFadeEdit, previewClipFades, commitClipFadeEdit, toggleClipMute, toggleClipLock, toggleClipProperties, } = useDAWStore(useShallow((s) => ({ selectedClipId: s.selectedClipId, tracks: s.tracks, + beginClipVolumeEdit: s.beginClipVolumeEdit, setClipVolume: s.setClipVolume, - setClipFades: s.setClipFades, + commitClipVolumeEdit: s.commitClipVolumeEdit, + beginClipFadeEdit: s.beginClipFadeEdit, + previewClipFades: s.previewClipFades, + commitClipFadeEdit: s.commitClipFadeEdit, toggleClipMute: s.toggleClipMute, toggleClipLock: s.toggleClipLock, toggleClipProperties: s.toggleClipProperties, @@ -39,6 +117,39 @@ export function ClipPropertiesPanel() { } } + const clipId = clip?.id; + const getLatestClip = useCallback(() => { + if (!clipId) return undefined; + return useDAWStore.getState().tracks + .flatMap((track) => track.clips) + .find((candidate) => candidate.id === clipId); + }, [clipId]); + const beginVolumeEdit = useCallback(() => { + if (clipId) beginClipVolumeEdit(clipId); + }, [beginClipVolumeEdit, clipId]); + const changeVolume = useCallback((volumeDB: number) => { + if (clipId) setClipVolume(clipId, volumeDB); + }, [clipId, setClipVolume]); + const commitVolumeEdit = useCallback(() => { + if (clipId) commitClipVolumeEdit(clipId); + }, [clipId, commitClipVolumeEdit]); + const beginFadeEdit = useCallback(() => { + if (clipId) beginClipFadeEdit(clipId); + }, [beginClipFadeEdit, clipId]); + const changeFadeIn = useCallback((fadeIn: number) => { + if (!clipId) return; + const latestClip = getLatestClip(); + if (latestClip) previewClipFades(clipId, fadeIn, latestClip.fadeOut); + }, [clipId, getLatestClip, previewClipFades]); + const changeFadeOut = useCallback((fadeOut: number) => { + if (!clipId) return; + const latestClip = getLatestClip(); + if (latestClip) previewClipFades(clipId, latestClip.fadeIn, fadeOut); + }, [clipId, getLatestClip, previewClipFades]); + const commitFadeEdit = useCallback(() => { + if (clipId) commitClipFadeEdit(clipId); + }, [clipId, commitClipFadeEdit]); + return (
    {/* Header */} @@ -60,22 +171,7 @@ export function ClipPropertiesPanel() { {/* Name */}
    - { - const newName = e.target.value; - useDAWStore.setState((s) => ({ - tracks: s.tracks.map((t) => ({ - ...t, - clips: t.clips.map((c) => - c.id === clip!.id ? { ...c, name: newName } : c, - ), - })), - isModified: true, - })); - }} - className="mt-0.5" - /> +
    {/* File Path */} @@ -126,7 +222,10 @@ export function ClipPropertiesPanel() { max={12} step={0.1} value={clip.volumeDB} - onChange={(v) => setClipVolume(clip!.id, v)} + defaultValue={0} + onBeginEdit={beginVolumeEdit} + onChange={changeVolume} + onCommitEdit={commitVolumeEdit} className="mt-1" />
    @@ -142,7 +241,10 @@ export function ClipPropertiesPanel() { max={Math.min(clip.duration / 2, 5)} step={0.001} value={clip.fadeIn} - onChange={(v) => setClipFades(clip!.id, v, clip!.fadeOut)} + defaultValue={0} + onBeginEdit={beginFadeEdit} + onChange={changeFadeIn} + onCommitEdit={commitFadeEdit} className="mt-1" />
    @@ -155,7 +257,10 @@ export function ClipPropertiesPanel() { max={Math.min(clip.duration / 2, 5)} step={0.001} value={clip.fadeOut} - onChange={(v) => setClipFades(clip!.id, clip!.fadeIn, v)} + defaultValue={0} + onBeginEdit={beginFadeEdit} + onChange={changeFadeOut} + onCommitEdit={commitFadeEdit} className="mt-1" />
    diff --git a/frontend/src/components/ColorPicker.tsx b/frontend/src/components/ColorPicker.tsx index 9b1447f..d9d0e2f 100644 --- a/frontend/src/components/ColorPicker.tsx +++ b/frontend/src/components/ColorPicker.tsx @@ -2,6 +2,8 @@ import { useEffect, useRef, useState } from "react"; import { useDAWStore } from "../store/useDAWStore"; import { useShallow } from "zustand/shallow"; import { Button } from "./ui"; +import { useTransientOverlayShortcutScope } from "../utils/modalShortcutScope"; +import { activateShortcutContext } from "../utils/shortcutContext"; interface ColorPickerProps { currentColor: string; @@ -42,6 +44,7 @@ export function ColorPicker({ recentColors: s.recentColors, addRecentColor: s.addRecentColor, }))); + useTransientOverlayShortcutScope(true, onClose); const handleColorSelect = (color: string) => { addRecentColor(color); @@ -85,18 +88,6 @@ export function ColorPicker({ }; }, [onClose]); - // Close on Escape key - useEffect(() => { - const handleKeyDown = (e: KeyboardEvent) => { - if (e.key === "Escape") { - onClose(); - } - }; - - document.addEventListener("keydown", handleKeyDown); - return () => document.removeEventListener("keydown", handleKeyDown); - }, [onClose]); - const style: React.CSSProperties = position ? { position: "fixed", top: position.top, left: position.left, zIndex: 9999 } : { position: "absolute", left: 4, top: 0, zIndex: 50 }; @@ -107,6 +98,8 @@ export function ColorPicker({ className="bg-neutral-800 border border-neutral-600 rounded-lg shadow-xl p-2" style={style} onClick={(e) => e.stopPropagation()} + onPointerDownCapture={() => activateShortcutContext({ kind: "modal" })} + onFocusCapture={() => activateShortcutContext({ kind: "modal" })} >
    Track Color
    diff --git a/frontend/src/components/CommandPalette.tsx b/frontend/src/components/CommandPalette.tsx index 9e7d0ac..7a4631f 100644 --- a/frontend/src/components/CommandPalette.tsx +++ b/frontend/src/components/CommandPalette.tsx @@ -1,9 +1,18 @@ import { useState, useEffect, useRef, useMemo } from "react"; import { createPortal } from "react-dom"; -import { getRegisteredActions, ActionDef } from "../store/actionRegistry"; +import { + getDisplayEffectiveShortcut, + getRegisteredActions, + ActionDef, +} from "../store/actionRegistry"; import { useDAWStore } from "../store/useDAWStore"; import { useShallow } from "zustand/react/shallow"; import { guardModalContextMenu } from "../utils/modalEventGuards"; +import { + routeModalShortcutEvent, + useModalShortcutScope, +} from "../utils/modalShortcutScope"; +import { activateShortcutContext } from "../utils/shortcutContext"; interface CommandPaletteProps { isOpen: boolean; @@ -17,10 +26,18 @@ export function CommandPalette({ isOpen, onClose }: CommandPaletteProps) { const listRef = useRef(null); const actions = useMemo(() => getRegisteredActions(), []); - const { recentActionIds } = useDAWStore(useShallow((state) => ({ + const { + recentActionIds, + keyboardShortcutProfileId, + customShortcuts, + } = useDAWStore(useShallow((state) => ({ recentActionIds: state.recentActions, + keyboardShortcutProfileId: state.keyboardShortcutProfileId, + customShortcuts: state.customShortcuts, }))); + useModalShortcutScope(isOpen, onClose); + const filtered = useMemo(() => { if (!query.trim()) { // Show recent actions first, then all actions @@ -38,9 +55,9 @@ export function CommandPalette({ isOpen, onClose }: CommandPaletteProps) { (a) => a.name.toLowerCase().includes(lower) || a.category.toLowerCase().includes(lower) || - a.shortcut?.toLowerCase().includes(lower) + getDisplayEffectiveShortcut(a.id)?.toLowerCase().includes(lower) ); - }, [query, actions, recentActionIds]); + }, [query, actions, recentActionIds, keyboardShortcutProfileId, customShortcuts]); // Reset selection when filter changes useEffect(() => { @@ -75,6 +92,12 @@ export function CommandPalette({ isOpen, onClose }: CommandPaletteProps) { }; const handleKeyDown = (e: React.KeyboardEvent) => { + const modalRoute = routeModalShortcutEvent(e.nativeEvent); + if (modalRoute.result !== "unmatched" || modalRoute.suppressedHeadlessEscape) { + if (modalRoute.result !== "unmatched") e.preventDefault(); + e.stopPropagation(); + return; + } if (e.key === "ArrowDown") { e.preventDefault(); setSelectedIndex((prev) => Math.min(prev + 1, filtered.length - 1)); @@ -84,9 +107,6 @@ export function CommandPalette({ isOpen, onClose }: CommandPaletteProps) { } else if (e.key === "Enter" && filtered[selectedIndex]) { e.preventDefault(); executeAction(filtered[selectedIndex]); - } else if (e.key === "Escape") { - e.preventDefault(); - onClose(); } }; @@ -113,6 +133,8 @@ export function CommandPalette({ isOpen, onClose }: CommandPaletteProps) { data-modal-root="true" onClick={onClose} onContextMenu={guardModalContextMenu} + onPointerDownCapture={() => activateShortcutContext({ kind: "modal" })} + onFocusCapture={() => activateShortcutContext({ kind: "modal" })} > {/* Backdrop */}
    @@ -151,6 +173,7 @@ export function CommandPalette({ isOpen, onClose }: CommandPaletteProps) { {categoryActions.map((action) => { const thisIndex = flatIndex++; const isSelected = thisIndex === selectedIndex; + const effectiveShortcut = getDisplayEffectiveShortcut(action.id); return (
    setSelectedIndex(thisIndex)} > {action.name} - {action.shortcut && ( + {effectiveShortcut && ( - {action.shortcut} + {effectiveShortcut} )}
    @@ -189,7 +212,9 @@ export function CommandPalette({ isOpen, onClose }: CommandPaletteProps) { Enter execute - Esc close + + {getDisplayEffectiveShortcut("modal.close") || "Unassigned"} + close
    diff --git a/frontend/src/components/ContextMenu.tsx b/frontend/src/components/ContextMenu.tsx index a99ca62..694157e 100644 --- a/frontend/src/components/ContextMenu.tsx +++ b/frontend/src/components/ContextMenu.tsx @@ -2,6 +2,8 @@ import React, { useEffect, useRef, useState } from "react"; import { createPortal } from "react-dom"; import { ChevronRight } from "lucide-react"; import { guardModalContextMenu, shouldSuppressWorkspaceContextMenu } from "../utils/modalEventGuards"; +import { useTransientOverlayShortcutScope } from "../utils/modalShortcutScope"; +import { activateShortcutContext } from "../utils/shortcutContext"; export interface MenuItem { label: string; @@ -26,6 +28,7 @@ export function ContextMenu({ x, y, items, onClose }: ContextMenuProps) { const submenuCloseTimerRef = useRef | null>(null); const [submenuOpen, setSubmenuOpen] = useState(null); const [adjustedPos, setAdjustedPos] = useState({ x, y }); + useTransientOverlayShortcutScope(true, onClose); const clearSubmenuCloseTimer = () => { if (submenuCloseTimerRef.current) { @@ -71,17 +74,9 @@ export function ContextMenu({ x, y, items, onClose }: ContextMenuProps) { } }; - const handleEscape = (e: KeyboardEvent) => { - if (e.key === "Escape") { - onClose(); - } - }; - document.addEventListener("mousedown", handleClickOutside); - document.addEventListener("keydown", handleEscape); return () => { document.removeEventListener("mousedown", handleClickOutside); - document.removeEventListener("keydown", handleEscape); }; }, [onClose]); @@ -104,6 +99,8 @@ export function ContextMenu({ x, y, items, onClose }: ContextMenuProps) { top: adjustedPos.y, }} onContextMenu={guardModalContextMenu} + onPointerDownCapture={() => activateShortcutContext({ kind: "modal" })} + onFocusCapture={() => activateShortcutContext({ kind: "modal" })} > {items.map((item, index) => { if (item.divider) { @@ -156,7 +153,7 @@ export function ContextMenu({ x, y, items, onClose }: ContextMenuProps) {
    { @@ -167,13 +164,21 @@ export function ContextMenu({ x, y, items, onClose }: ContextMenuProps) { } }} > - {subItem.swatchColor && ( - +
    + {subItem.icon && {subItem.icon}} + {subItem.swatchColor && ( + + )} + {subItem.label} +
    + {subItem.shortcut && ( + + {subItem.shortcut} + )} - {subItem.label}
    ))}
    diff --git a/frontend/src/components/CorrectPitchModal.tsx b/frontend/src/components/CorrectPitchModal.tsx index c1da976..35db35a 100644 --- a/frontend/src/components/CorrectPitchModal.tsx +++ b/frontend/src/components/CorrectPitchModal.tsx @@ -2,6 +2,7 @@ import { useState } from "react"; import { useShallow } from "zustand/shallow"; import { usePitchEditorStore } from "../store/pitchEditorStore"; import { guardModalContextMenu } from "../utils/modalEventGuards"; +import { ProfiledRangeInput } from "./ui"; const NOTE_NAMES = ["C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"]; @@ -45,10 +46,9 @@ export function CorrectPitchModal() { {pitchCenter}%
    - setPitchCenter(Number(e.target.value))} + onValueChange={setPitchCenter} className="w-full h-1 bg-neutral-700 rounded-full appearance-none cursor-pointer accent-daw-accent" />
    @@ -63,10 +63,9 @@ export function CorrectPitchModal() { {pitchDrift}%
    - setPitchDrift(Number(e.target.value))} + onValueChange={setPitchDrift} className="w-full h-1 bg-neutral-700 rounded-full appearance-none cursor-pointer accent-daw-accent" />
    diff --git a/frontend/src/components/CustomKeyboardProfileManager.tsx b/frontend/src/components/CustomKeyboardProfileManager.tsx new file mode 100644 index 0000000..87ab562 --- /dev/null +++ b/frontend/src/components/CustomKeyboardProfileManager.tsx @@ -0,0 +1,191 @@ +import { useEffect, useId, useMemo, useState } from "react"; +import { useShallow } from "zustand/shallow"; +import { getRegisteredActions } from "../store/actionRegistry"; +import { useDAWStore } from "../store/useDAWStore"; +import { MAX_CUSTOM_KEYBOARD_PROFILES } from "../utils/customShortcutProfiles"; +import { Button, Input } from "./ui"; + +export function CustomKeyboardProfileManager() { + const fileInputId = useId(); + const [profileName, setProfileName] = useState(""); + const [status, setStatus] = useState(""); + const { + customKeyboardProfiles, + activeCustomKeyboardProfileId, + createCustomKeyboardProfile, + duplicateKeyboardProfile, + renameCustomKeyboardProfile, + deleteCustomKeyboardProfile, + exportActiveCustomKeyboardProfile, + importCustomKeyboardProfile, + } = useDAWStore(useShallow((state) => ({ + customKeyboardProfiles: state.customKeyboardProfiles, + activeCustomKeyboardProfileId: state.activeCustomKeyboardProfileId, + createCustomKeyboardProfile: state.createCustomKeyboardProfile, + duplicateKeyboardProfile: state.duplicateKeyboardProfile, + renameCustomKeyboardProfile: state.renameCustomKeyboardProfile, + deleteCustomKeyboardProfile: state.deleteCustomKeyboardProfile, + exportActiveCustomKeyboardProfile: state.exportActiveCustomKeyboardProfile, + importCustomKeyboardProfile: state.importCustomKeyboardProfile, + }))); + const activeProfile = customKeyboardProfiles.find( + (profile) => profile.id === activeCustomKeyboardProfileId, + ); + const profileCapacityReached = customKeyboardProfiles.length >= MAX_CUSTOM_KEYBOARD_PROFILES; + const knownActionIds = useMemo( + () => getRegisteredActions().map((action) => action.id), + [], + ); + + useEffect(() => { + setProfileName(activeProfile?.name ?? ""); + }, [activeProfile?.id, activeProfile?.name]); + + const createProfile = () => { + const name = profileName.trim() || "Custom Shortcuts"; + const id = createCustomKeyboardProfile(name); + const savedName = id + ? useDAWStore.getState().customKeyboardProfiles.find((profile) => profile.id === id)?.name + : null; + setStatus(id + ? `Created ${savedName ?? name}.` + : `The profile could not be created. Check the ${MAX_CUSTOM_KEYBOARD_PROFILES}-profile limit and local storage.`); + }; + + const duplicateProfile = () => { + const requestedName = profileName.trim() || undefined; + const id = duplicateKeyboardProfile(requestedName); + const savedName = id + ? useDAWStore.getState().customKeyboardProfiles.find((profile) => profile.id === id)?.name + : null; + setStatus(id + ? `Created and selected ${savedName ?? "a profile copy"}.` + : `The profile copy could not be created. Check the ${MAX_CUSTOM_KEYBOARD_PROFILES}-profile limit and local storage.`); + }; + + const renameProfile = () => { + if (!activeProfile || !profileName.trim()) return; + if (renameCustomKeyboardProfile(activeProfile.id, profileName)) { + setStatus("Profile renamed."); + } else { + setStatus("The profile could not be renamed or saved."); + } + }; + + const deleteProfile = () => { + if (!activeProfile) return; + if (!window.confirm(`Delete the custom profile “${activeProfile.name}”?`)) return; + if (deleteCustomKeyboardProfile(activeProfile.id)) { + setStatus("Custom profile deleted. Its built-in base profile is now active."); + } else { + setStatus("The profile could not be deleted or saved."); + } + }; + + const exportProfile = () => { + if (!activeProfile) return; + const serialized = exportActiveCustomKeyboardProfile(); + if (!serialized) return; + const blob = new Blob([serialized], { type: "application/json" }); + const url = URL.createObjectURL(blob); + const anchor = document.createElement("a"); + anchor.href = url; + anchor.download = `${activeProfile.name.replace(/[^A-Za-z0-9_-]+/g, "-") || "openstudio-shortcuts"}.json`; + document.body.appendChild(anchor); + anchor.click(); + anchor.remove(); + URL.revokeObjectURL(url); + setStatus("Profile exported."); + }; + + const importProfile = async (file: File | undefined) => { + if (!file) return; + if (file.size > 1_000_000) { + setStatus("The selected profile is larger than 1 MB."); + return; + } + try { + const serialized = await file.text(); + const result = importCustomKeyboardProfile(serialized, knownActionIds); + setStatus(result.success + ? `Imported and selected ${result.profile.name}.` + : result.error); + } catch { + setStatus("OpenStudio could not read the selected profile file."); + } + }; + + return ( +
    +
    +
    +

    + Custom keyboard profiles +

    +

    + Named profiles keep multiple bindings and separate macOS, Windows, Linux, and fallback overrides. +

    +
    +
    + setProfileName(event.target.value)} + placeholder={activeProfile ? activeProfile.name : "Profile name"} + aria-label="Profile name" + maxLength={64} + size="sm" + fullWidth + className="min-w-0 flex-1" + /> +
    + + + + + + +
    +
    +

    + {status} +

    +
    +
    + ); +} diff --git a/frontend/src/components/EnvelopeManagerModal.tsx b/frontend/src/components/EnvelopeManagerModal.tsx index 82f39e4..e2bbe49 100644 --- a/frontend/src/components/EnvelopeManagerModal.tsx +++ b/frontend/src/components/EnvelopeManagerModal.tsx @@ -2,16 +2,16 @@ import { useState, useEffect, useMemo } from "react"; import { useShallow } from "zustand/shallow"; import { ChevronDown, ChevronRight, Search } from "lucide-react"; import { useDAWStore, type AutomationWriteBehavior } from "../store/useDAWStore"; -import { nativeBridge } from "../services/NativeBridge"; +import { nativeBridge, type PluginParameterInfo } from "../services/NativeBridge"; import { Modal } from "./ui"; -import { getTrackAutomationParams, getMasterAutomationParams, pluginAutomationParamId } from "../store/automationParams"; +import { builtInAutomationParamId, getTrackAutomationParams, getMasterAutomationParams, pluginAutomationParamId } from "../store/automationParams"; +import { + activateShortcutContext, + getActiveShortcutContext, + registerShortcutSurface, +} from "../utils/shortcutContext"; -interface PluginParam { - index: number; - name: string; - value: number; - text: string; -} +type PluginParam = PluginParameterInfo; interface FXSlotInfo { index: number; @@ -97,6 +97,18 @@ export function EnvelopeManagerModal() { const [pluginParams, setPluginParams] = useState>(new Map()); const [loading, setLoading] = useState(false); + useEffect(() => { + if (!showEnvelopeManager) return; + const fallback = getActiveShortcutContext(); + const unregister = registerShortcutSurface( + { kind: "automation" }, + () => "unmatched", + fallback, + ); + activateShortcutContext({ kind: "automation" }); + return unregister; + }, [showEnvelopeManager]); + // Fetch FX chain + plugin params on open useEffect(() => { if (!showEnvelopeManager || !envelopeManagerTrackId) return; @@ -183,7 +195,9 @@ export function EnvelopeManagerModal() { const fxCategory = fx.isInputFX ? `Input FX: ${fx.name}` : `FX: ${fx.name}`; for (const param of params) { - const paramId = pluginAutomationParamId(fx.isInputFX, fx.index, param.index); + const paramId = param.builtIn && param.paramId + ? builtInAutomationParamId(fx.isInputFX, fx.index, param.paramId) + : pluginAutomationParamId(fx.isInputFX, fx.index, param.index); const lane = automationLanes.find((l) => l.param === paramId); rows.push({ paramId, @@ -225,12 +239,27 @@ export function EnvelopeManagerModal() { // Handlers — dispatch to master or track actions const trackId = envelopeManagerTrackId!; + const selectLane = (laneId: string | null) => { + if (!laneId) return; + activateShortcutContext({ kind: "automation" }); + const state = useDAWStore.getState(); + if (isMaster) state.setSelectedAutomationLane({ kind: "master", laneId }); + else state.setSelectedAutomationLane({ kind: "track", trackId, laneId }); + }; + const ensureLane = (row: EnvelopeRow): string | null => { - if (row.laneId) return row.laneId; + if (row.laneId) { + selectLane(row.laneId); + return row.laneId; + } + let laneId: string | null; if (isMaster) { - return addMasterAutomationLane(row.paramId); + laneId = addMasterAutomationLane(row.paramId); + } else { + laneId = addAutomationLane(trackId, row.paramId, row.label); } - return addAutomationLane(trackId, row.paramId, row.label); + selectLane(laneId); + return laneId; }; const handleToggleVisible = (row: EnvelopeRow) => { @@ -283,6 +312,13 @@ export function EnvelopeManagerModal() { return ( +
    activateShortcutContext({ kind: "automation" })} + onContextMenuCapture={() => activateShortcutContext({ kind: "automation" })} + onFocusCapture={() => activateShortcutContext({ kind: "automation" })} + > {/* Top controls */}
    @@ -354,6 +390,9 @@ export function EnvelopeManagerModal() {
    selectLane(row.laneId)} + onFocus={() => selectLane(row.laneId)} > {row.label} @@ -416,6 +455,7 @@ export function EnvelopeManagerModal() {
    )}
    +
    ); } diff --git a/frontend/src/components/EssentialControlsCard.tsx b/frontend/src/components/EssentialControlsCard.tsx index 293b96c..1815b2a 100644 --- a/frontend/src/components/EssentialControlsCard.tsx +++ b/frontend/src/components/EssentialControlsCard.tsx @@ -1,8 +1,12 @@ import { useMemo, useState } from "react"; import { useShallow } from "zustand/shallow"; import { BookOpen, HelpCircle, MousePointer2, X } from "lucide-react"; -import { getEffectiveActionShortcut } from "../store/actionRegistry"; import { useDAWStore } from "../store/useDAWStore"; +import { + getEffectiveShortcutLabel, + getTimelineWheelHelp, +} from "../utils/inputProfileHelp"; +import { getShortcutPlatform } from "../utils/platform"; import { Button } from "./ui"; const LS_KEY = "openstudio_essentialControlsDismissed"; @@ -11,44 +15,42 @@ export function EssentialControlsCard() { const { showContextualHelp, showGettingStarted, + inputProfileOnboardingSeen, toggleContextualHelp, toggleGettingStarted, + customShortcuts, + keyboardShortcutProfileId, + mouseBehaviorProfileId, } = useDAWStore( useShallow((state) => ({ showContextualHelp: state.showContextualHelp, showGettingStarted: state.showGettingStarted, + inputProfileOnboardingSeen: state.inputProfileOnboardingSeen, toggleContextualHelp: state.toggleContextualHelp, toggleGettingStarted: state.toggleGettingStarted, + customShortcuts: state.customShortcuts, + keyboardShortcutProfileId: state.keyboardShortcutProfileId, + mouseBehaviorProfileId: state.mouseBehaviorProfileId, })), ); - const customShortcuts = useDAWStore((state) => state.customShortcuts); const [dismissed, setDismissed] = useState( () => localStorage.getItem(LS_KEY) === "true", ); - const helpShortcut = useMemo( - () => getEffectiveActionShortcut("help.contextualHelp") ?? "F1", - [customShortcuts], - ); - const playShortcut = useMemo( - () => getEffectiveActionShortcut("transport.play") ?? "Space", - [customShortcuts], - ); - const recordShortcut = useMemo( - () => getEffectiveActionShortcut("transport.record") ?? "Ctrl+R", - [customShortcuts], - ); - const addTrackShortcut = useMemo( - () => getEffectiveActionShortcut("insert.audioTrack") ?? "Ctrl+T", - [customShortcuts], - ); - const mixerShortcut = useMemo( - () => getEffectiveActionShortcut("view.toggleMixer") ?? "Ctrl+M", - [customShortcuts], + const shortcuts = useMemo(() => ({ + help: getEffectiveShortcutLabel("help.contextualHelp", "F1"), + play: getEffectiveShortcutLabel("transport.play", "Space"), + record: getEffectiveShortcutLabel("transport.record", "Ctrl+R"), + addTrack: getEffectiveShortcutLabel("insert.audioTrack", "Ctrl+T"), + mixer: getEffectiveShortcutLabel("view.toggleMixer", "Ctrl+M"), + }), [customShortcuts, keyboardShortcutProfileId]); + const wheelHelp = useMemo( + () => getTimelineWheelHelp(mouseBehaviorProfileId, getShortcutPlatform(), 4), + [mouseBehaviorProfileId], ); - if (dismissed || showContextualHelp || showGettingStarted) { + if (!inputProfileOnboardingSeen || dismissed || showContextualHelp || showGettingStarted) { return null; } @@ -58,13 +60,16 @@ export function EssentialControlsCard() { }; return ( -
    + ); } diff --git a/frontend/src/components/FXChainPanel.css b/frontend/src/components/FXChainPanel.css index 67f4ba4..9e908df 100644 --- a/frontend/src/components/FXChainPanel.css +++ b/frontend/src/components/FXChainPanel.css @@ -1,4 +1,4 @@ -.fx-chain-overlay { +.fx-chain-overlay { position: fixed; inset: 0; background: rgba(0, 0, 0, 0.8); @@ -227,6 +227,58 @@ border-radius: 0 0 6px 6px; } +.plugin-editor-window-app { + width: 100vw; + height: 100vh; + overflow: clip; + color: #f8fafc; + background: #050505; +} + +.plugin-editor-window-app .builtin-plugin-panel { + width: 100%; + height: 100%; + margin: 0; + border: 0; + border-radius: 0; + overflow: auto; + background: #050505; +} + +.plugin-editor-window-app .builtin-plugin-panel:not([data-kind="nam"]) { + padding: 14px; +} + +.plugin-editor-window-app .builtin-plugin-panel[data-kind="nam"] .builtin-panel-header { + position: sticky; + top: 0; + z-index: 20; +} + +.plugin-editor-window-app .nam-product { + min-height: calc(100vh - 45px); + padding: 16px; +} + +.plugin-editor-empty { + display: grid; + min-height: 100vh; + place-items: center; + padding: 32px; + color: #cbd5e1; + background: #050505; +} + +.plugin-editor-empty > div { + display: grid; + gap: 8px; + max-width: 460px; + padding: 20px; + border: 1px solid rgba(148, 163, 184, 0.28); + border-radius: 8px; + background: rgba(15, 23, 42, 0.72); +} + .builtin-panel-header { display: flex; align-items: center; @@ -251,11 +303,58 @@ } .builtin-panel-title span { - overflow: hidden; + overflow: clip; text-overflow: ellipsis; white-space: nowrap; } +.builtin-window-controls { + display: inline-grid; + grid-template-columns: repeat(3, 38px); + align-items: stretch; + justify-content: end; + align-self: stretch; + margin-block: -9px; + margin-right: -10px; +} + +.builtin-window-controls span, +.builtin-window-controls button { + min-width: 0; + height: 100%; + display: grid; + place-items: center; + border: 0; + color: rgba(226, 232, 240, 0.84); + background: transparent; +} + +.builtin-window-controls span::before { + content: ""; + display: block; +} + +.builtin-window-control-min::before { + width: 10px; + height: 1px; + background: currentColor; +} + +.builtin-window-control-max::before { + width: 10px; + height: 10px; + border: 1px solid currentColor; +} + +.builtin-window-controls button { + cursor: pointer; +} + +.builtin-window-controls button:hover { + color: #ffffff; + background: rgba(239, 68, 68, 0.84); +} + .builtin-visual { width: 100%; height: 126px; @@ -673,193 +772,4502 @@ font-variant-numeric: tabular-nums; } -@media (max-width: 900px) { - .fx-chain-panel-two-column { - width: 98%; - height: 92vh; - } +.builtin-plugin-panel[data-kind="nam"] { + padding: 0; + overflow: hidden; + border-color: #49412d; + background: #050505; +} - .fx-chain-two-column-content { - grid-template-columns: 1fr; - grid-template-rows: minmax(260px, 44vh) minmax(0, 1fr); - } +.plugin-editor-window-app .builtin-plugin-panel[data-kind="nam"] { + overflow-x: hidden; + overflow-y: auto; + overscroll-behavior: contain; +} - .fx-chain-loaded-column { - border-right: 0; - border-bottom: 1px solid #404040; - } +.builtin-plugin-panel[data-kind="nam"] .builtin-panel-header { + margin: 0; + min-height: 42px; + padding: 0 10px; + border-bottom: 1px solid rgba(255, 255, 255, 0.07); + background: + linear-gradient(180deg, rgba(255, 255, 255, 0.018), rgba(0, 0, 0, 0.08)), + #0c0d0f; +} - .builtin-param-grid, - .builtin-macro-strip { - grid-template-columns: repeat(auto-fit, minmax(136px, 1fr)); - } +.builtin-plugin-panel[data-kind="nam"] .builtin-panel-title { + gap: 8px; + color: #f8fafc; + font-size: 16px; + font-weight: 800; } -@media (max-width: 520px) { - .builtin-plugin-panel { - padding: 8px; - } +.builtin-plugin-panel[data-kind="nam"] .builtin-panel-title svg { + width: 21px; + height: 21px; + color: rgba(248, 250, 252, 0.9); + stroke-width: 1.6; +} - .builtin-visual { - height: 112px; - } +.nam-product { + position: relative; + display: grid; + gap: 10px; + padding: 10px; + color: #f1f5f9; + background: + linear-gradient(180deg, rgba(255, 255, 255, 0.025), rgba(0, 0, 0, 0.15)), + #090908; +} - .builtin-param-grid, - .builtin-macro-strip { - grid-template-columns: 1fr; - } +.nam-product button, +.nam-product select, +.nam-product input { + font: inherit; } -.builtin-empty { - padding: 16px 8px; - color: #737373; - font-size: 11px; - text-align: center; +.nam-product-topbar, +.nam-chain, +.nam-rig-stage, +.nam-rack-control-band, +.nam-browser-drawer { + border: 1px solid rgba(255, 255, 255, 0.09); + border-radius: 8px; + background: linear-gradient(180deg, rgba(34, 34, 32, 0.98), rgba(13, 13, 12, 0.98)); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.05); } -.fx-slot-name:hover { - color: #2563eb; +.nam-product-topbar { + display: grid; + grid-template-columns: minmax(190px, 1.25fr) minmax(180px, 1fr) auto minmax(92px, 0.5fr) minmax(92px, 0.5fr); + align-items: center; + gap: 10px; + padding: 10px; } -.fx-remove-btn { - width: 24px; - height: 24px; +.nam-brand-block, +.nam-browser-title, +.nam-rack-section-title, +.nam-auth-head, +.nam-toolbar, +.nam-stats, +.nam-view-actions, +.nam-detail-head { display: flex; align-items: center; - justify-content: center; - background: transparent; - border: 1px solid #404040; - border-radius: 4px; - color: #737373; - font-size: 18px; - cursor: pointer; - transition: all 0.2s; + gap: 8px; } -.fx-remove-btn:hover { - background: #dc2626; - border-color: #dc2626; - color: white; +.nam-brand-mark { + display: grid; + width: 38px; + height: 38px; + flex: 0 0 auto; + place-items: center; + border: 1px solid rgba(236, 196, 110, 0.38); + border-radius: 50%; + color: #f5c86a; + background: + radial-gradient(circle at 50% 45%, rgba(245, 200, 106, 0.24), rgba(10, 10, 10, 0.16) 54%), + #141414; } -/* Empty state */ -.fx-empty-state { - text-align: center; - padding: 60px 20px; - color: #737373; +.nam-brand-block strong, +.nam-browser-title strong, +.nam-rack-section-title span, +.nam-detail-head strong { + display: block; + color: #f8fafc; + font-size: 12px; + font-weight: 800; +} + +.nam-brand-block small, +.nam-browser-title small, +.nam-detail-head span, +.nam-result-copy small, +.nam-result-copy span, +.nam-auth-copy, +.nam-auth-library, +.nam-status, +.nam-rack-slots span { + color: rgba(226, 232, 240, 0.58); + font-size: 11px; } -.fx-empty-state p { - margin: 8px 0; +.nam-preset-select { + min-width: 0; + min-height: 36px; + display: grid; + grid-template-columns: auto minmax(0, 1fr); + align-items: center; + gap: 8px; + padding: 0 10px; + border: 1px solid rgba(236, 196, 110, 0.28); + border-radius: 7px; + background: rgba(255, 255, 255, 0.04); + color: #f5c86a; } -.fx-empty-state .hint { - font-size: 13px; - color: #525252; +.nam-preset-select select, +.nam-rack-control-select select, +.nam-filters select { + min-width: 0; + width: 100%; + height: 28px; + border: 1px solid rgba(255, 255, 255, 0.12); + border-radius: 6px; + background: #121212; + color: #f8fafc; + outline: none; } -/* Old single-column styles (kept for backward compatibility) */ -.fx-chain-panel { - background: #171717; - border: 1px solid #404040; - border-radius: 8px; - width: 90%; - max-width: 600px; - max-height: 80vh; - display: flex; - flex-direction: column; - box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5); +.nam-preset-dirty { + grid-column: 1 / -1; + width: fit-content; + padding: 1px 6px; + border: 1px solid rgba(245, 200, 106, 0.28); + border-radius: 999px; + color: #f5c86a; + background: rgba(245, 200, 106, 0.08); + font-size: 10px; + font-weight: 900; } -.fx-chain-content { - flex: 1; - overflow-y: auto; - padding: 16px; - background: #0a0a0a; +.nam-preset-manager { + position: absolute; + z-index: 12; + top: 76px; + left: clamp(14px, 24vw, 360px); + right: 14px; + max-width: 860px; + display: grid; + gap: 10px; + padding: 12px; + border: 1px solid rgba(245, 200, 106, 0.28); + border-radius: 8px; + background: + radial-gradient(circle at 14% 0%, rgba(245, 200, 106, 0.12), transparent 34%), + linear-gradient(180deg, rgba(28, 28, 25, 0.98), rgba(7, 7, 6, 0.98)); + box-shadow: + inset 0 1px 0 rgba(255, 255, 255, 0.055), + 0 28px 70px rgba(0, 0, 0, 0.5); } -.fx-slots { - display: flex; - flex-direction: column; - gap: 8px; +.nam-preset-manager-head { + display: grid; + grid-template-columns: minmax(0, 1fr) auto; + align-items: center; + gap: 10px; } -.fx-slot { - display: flex; - justify-content: space-between; - align-items: center; - padding: 12px; - background: #1a1a1a; - border: 1px solid #404040; - border-radius: 6px; - transition: all 0.2s; +.nam-preset-manager-head > div { + min-width: 0; + display: grid; + gap: 2px; } -.fx-slot:hover { - border-color: #2563eb; - background: #1f1f1f; +.nam-preset-manager-head span, +.nam-preset-column > span { + color: #8ef5c2; + font-size: 10px; + font-weight: 900; + text-transform: uppercase; } -.fx-info { - flex: 1; +.nam-preset-manager-head strong { + min-width: 0; + overflow: hidden; + color: #f8fafc; + font-size: 18px; + line-height: 1.12; + text-overflow: ellipsis; + white-space: nowrap; } -.fx-name { - font-weight: 600; - color: white; - margin-bottom: 4px; +.nam-preset-manager-head > button, +.nam-preset-save-row button, +.nam-preset-transfer-row button, +.nam-user-preset-row > button:last-child { + min-height: 30px; + border: 1px solid rgba(255, 255, 255, 0.1); + border-radius: 6px; + background: rgba(255, 255, 255, 0.045); + color: rgba(248, 250, 252, 0.78); + cursor: pointer; } -.fx-index { - font-size: 12px; - color: #737373; +.nam-preset-manager-head > button { + width: 30px; + height: 30px; + display: grid; + place-items: center; + font-size: 16px; } -.fx-controls { - display: flex; +.nam-preset-search, +.nam-preset-save-row, +.nam-preset-transfer-row { + display: grid; + align-items: center; gap: 8px; } -.fx-btn { - padding: 6px 14px; - border: none; - border-radius: 4px; - font-size: 13px; - font-weight: 600; - cursor: pointer; - transition: all 0.2s; +.nam-preset-search { + grid-template-columns: auto minmax(0, 1fr); + padding: 0 9px; + border: 1px solid rgba(255, 255, 255, 0.08); + border-radius: 8px; + color: rgba(226, 232, 240, 0.58); + background: rgba(0, 0, 0, 0.22); } -.edit-btn { - background: #2563eb; - color: white; +.nam-preset-filter-row { + display: flex; + align-items: center; + flex-wrap: wrap; + gap: 5px; } -.edit-btn:hover { - background: #1d4ed8; +.nam-preset-filter-row button { + display: inline-flex; + align-items: center; + gap: 5px; + min-height: 26px; + padding: 4px 8px; + border: 1px solid rgba(255, 255, 255, 0.09); + border-radius: 999px; + color: rgba(226, 232, 240, 0.7); + background: rgba(255, 255, 255, 0.035); + font-size: 10px; + font-weight: 850; + cursor: pointer; } -.bypass-btn { - background: #f59e0b; - color: white; +.nam-preset-filter-row button small { + min-width: 16px; + padding: 1px 5px; + border-radius: 999px; + color: rgba(7, 7, 6, 0.9); + background: rgba(142, 245, 194, 0.72); + font-size: 9px; + font-weight: 950; } -.bypass-btn:hover { - background: #d97706; +.nam-preset-filter-row button[data-active="true"] { + border-color: rgba(142, 245, 194, 0.36); + color: #8ef5c2; + background: rgba(69, 179, 107, 0.12); } -.remove-btn { - background: #dc2626; - color: white; +.nam-preset-save-row { + grid-template-columns: minmax(0, 1fr) auto; } -.remove-btn:hover { - background: #b91c1c; +.nam-preset-save-fields { + min-width: 0; + display: grid; + grid-template-columns: minmax(150px, 1.25fr) minmax(110px, 0.65fr) minmax(140px, 1fr) minmax(150px, 1fr); + gap: 7px; } -.close-btn-small { - background: #404040; - color: white; +.nam-preset-transfer-row { + grid-template-columns: repeat(2, minmax(0, max-content)); + justify-content: end; +} + +.nam-preset-search input, +.nam-preset-save-row input { + min-width: 0; + height: 34px; + border: 0; + background: transparent; + color: #f8fafc; + outline: none; +} + +.nam-preset-save-row input { + padding: 0 10px; + border: 1px solid rgba(255, 255, 255, 0.08); + border-radius: 8px; + background: rgba(0, 0, 0, 0.2); +} + +.nam-preset-save-row button { + display: inline-flex; + align-items: center; + justify-content: center; + gap: 6px; + padding: 0 11px; + border-color: rgba(142, 245, 194, 0.34); + background: + linear-gradient(180deg, rgba(69, 179, 107, 0.24), rgba(10, 14, 12, 0.92)), + #101211; + color: #d1fae5; + box-shadow: + inset 0 1px 0 rgba(255, 255, 255, 0.06), + 0 0 0 1px rgba(142, 245, 194, 0.08); + font-weight: 900; +} + +.nam-preset-save-row button:hover:not(:disabled) { + border-color: rgba(142, 245, 194, 0.52); + background: + linear-gradient(180deg, rgba(69, 179, 107, 0.34), rgba(10, 14, 12, 0.95)), + #101211; +} + +.nam-preset-transfer-row button { + display: inline-flex; + align-items: center; + justify-content: center; + gap: 6px; + min-height: 30px; + padding: 0 10px; + border-color: rgba(142, 245, 194, 0.18); + color: rgba(226, 232, 240, 0.76); + background: rgba(255, 255, 255, 0.035); + font-size: 11px; + font-weight: 850; +} + +.nam-preset-transfer-row button:hover:not(:disabled) { + border-color: rgba(142, 245, 194, 0.36); + color: #8ef5c2; + background: rgba(69, 179, 107, 0.1); +} + +.nam-preset-status { + margin: 0; + padding: 6px 8px; + border: 1px solid rgba(142, 245, 194, 0.16); + border-radius: 6px; + color: rgba(226, 232, 240, 0.76); + background: rgba(69, 179, 107, 0.07); + font-size: 11px; +} + +.nam-preset-manager-grid { + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); + gap: 10px; + min-height: 0; +} + +.nam-preset-column { + min-width: 0; + display: grid; + align-content: start; + gap: 7px; + padding: 9px; + border: 1px solid rgba(255, 255, 255, 0.075); + border-radius: 8px; + background: rgba(0, 0, 0, 0.18); +} + +.nam-preset-list { + display: grid; + gap: 6px; + max-height: min(310px, 42vh); + overflow: auto; +} + +.nam-preset-list > button, +.nam-user-preset-row > button:first-child { + min-width: 0; + display: grid; + gap: 3px; + padding: 9px; + border: 1px solid rgba(255, 255, 255, 0.09); + border-radius: 7px; + background: + linear-gradient(180deg, rgba(255, 255, 255, 0.045), rgba(255, 255, 255, 0.018)); + color: rgba(226, 232, 240, 0.78); + text-align: left; + cursor: pointer; +} + +.nam-preset-list > button[data-active="true"] { + border-color: rgba(245, 200, 106, 0.46); + background: + linear-gradient(90deg, rgba(245, 200, 106, 0.14), rgba(69, 179, 107, 0.07)), + rgba(255, 255, 255, 0.035); +} + +.nam-preset-list strong { + min-width: 0; + overflow: hidden; + color: #f8fafc; + font-size: 12px; + text-overflow: ellipsis; + white-space: nowrap; +} + +.nam-preset-list small, +.nam-preset-list em { + min-width: 0; + overflow: hidden; + color: rgba(226, 232, 240, 0.56); + font-size: 11px; + font-style: normal; + line-height: 1.28; + text-overflow: ellipsis; + white-space: nowrap; +} + +.nam-user-preset-row { + display: grid; + grid-template-columns: minmax(0, 1fr) repeat(8, 30px); + gap: 6px; +} + +.nam-user-preset-row > button:not(:first-child) { + display: grid; + width: 30px; + min-height: 30px; + place-items: center; +} + +.nam-user-preset-row[data-favorite="true"] > button:nth-child(2) { + border-color: rgba(245, 200, 106, 0.4); + color: #f5c86a; + background: rgba(245, 200, 106, 0.12); +} + +.nam-user-preset-row > button:first-child span { + min-width: 0; + display: flex; + flex-wrap: wrap; + gap: 4px; +} + +.nam-user-preset-row > button:first-child em { + max-width: 96px; + padding: 2px 6px; + border: 1px solid rgba(142, 245, 194, 0.14); + border-radius: 999px; + color: rgba(226, 232, 240, 0.74); + background: rgba(0, 0, 0, 0.2); + font-size: 10px; + font-style: normal; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.nam-top-actions { + display: flex; + align-items: center; + gap: 5px; +} + +.nam-top-actions button, +.nam-chain-module, +.nam-shelves button, +.nam-tabs button, +.nam-favorite { + border: 1px solid rgba(255, 255, 255, 0.1); + background: rgba(255, 255, 255, 0.045); + color: rgba(248, 250, 252, 0.72); + cursor: pointer; +} + +.nam-top-actions button { + width: 30px; + height: 30px; + display: grid; + place-items: center; + border-radius: 6px; + font-size: 11px; + font-weight: 800; +} + +.nam-top-actions button:disabled { + cursor: default; + opacity: 0.42; +} + +.nam-top-actions button:disabled svg { + color: rgba(226, 232, 240, 0.44); +} + +.nam-top-actions .nam-models-button { + width: auto; + min-width: 78px; + grid-auto-flow: column; + grid-auto-columns: max-content; + gap: 6px; + padding: 0 10px; + color: #8ef5c2; +} + +.nam-top-actions .nam-models-button:hover { + border-color: rgba(142, 245, 194, 0.42); + background: rgba(69, 179, 107, 0.12); +} + +.nam-top-actions button[data-active="true"] { + border-color: rgba(236, 196, 110, 0.52); + color: #f5c86a; + background: rgba(236, 196, 110, 0.13); +} + +.nam-top-actions button[data-dirty="true"] { + position: relative; + box-shadow: inset 0 -2px 0 rgba(245, 200, 106, 0.72); +} + +.nam-mini-meter { + min-width: 0; + display: grid; + gap: 5px; +} + +.nam-mini-meter span { + color: rgba(226, 232, 240, 0.62); + font-size: 10px; + font-weight: 800; + text-transform: uppercase; + letter-spacing: 0; +} + +.nam-mini-meter i { + position: relative; + height: 8px; + overflow: hidden; + border: 1px solid rgba(255, 255, 255, 0.11); + border-radius: 999px; + background: #060606; +} + +.nam-mini-meter i::after { + content: ""; + position: absolute; + inset: 0 auto 0 0; + width: var(--nam-meter-pct); + border-radius: inherit; + background: linear-gradient(90deg, #45b36b, #f5c86a 72%, #e45858); +} + +.nam-mini-meter i > b { + position: absolute; + top: -2px; + bottom: -2px; + left: clamp(0%, var(--nam-meter-peak-pct), 100%); + width: 2px; + border-radius: 999px; + background: rgba(248, 250, 252, 0.8); + transform: translateX(-1px); + box-shadow: 0 0 8px rgba(248, 250, 252, 0.34); +} + +.nam-mini-meter[data-silent="true"] i > b { + opacity: 0; +} + +.nam-mini-meter[data-clip="true"] i { + border-color: rgba(248, 113, 113, 0.74); + box-shadow: 0 0 0 1px rgba(248, 113, 113, 0.18); +} + +.nam-mini-meter[data-clip="true"] strong { + color: #fb7185; +} + +.nam-meter-trim { + min-width: 150px; + cursor: ns-resize; + user-select: none; +} + +.nam-meter-trim[data-enabled="false"] { + cursor: default; + opacity: 0.72; +} + +.nam-meter-trim:focus-visible { + outline: 2px solid rgba(142, 245, 194, 0.72); + outline-offset: 4px; +} + +.nam-meter-trim em { + width: fit-content; + min-width: 54px; + padding: 2px 7px; + border: 1px solid rgba(142, 245, 194, 0.16); + border-radius: 999px; + color: #d1fae5; + background: rgba(0, 0, 0, 0.38); + font-size: 10px; + font-style: normal; + font-weight: 850; +} + +.nam-meter-trim:hover i { + border-color: rgba(142, 245, 194, 0.38); +} + +.nam-chain { + display: grid; + grid-template-columns: minmax(118px, 0.8fr) minmax(0, 5fr); + gap: 8px; + align-items: stretch; + padding: 8px; +} + +.nam-chain-meta { + position: relative; + z-index: 1; + min-width: 0; + display: grid; + align-content: center; + gap: 4px; + padding: 8px; + border: 1px solid rgba(255, 255, 255, 0.075); + border-radius: 7px; + background: + linear-gradient(180deg, rgba(255, 255, 255, 0.045), rgba(0, 0, 0, 0.18)), + rgba(0, 0, 0, 0.18); +} + +.nam-chain-meta span { + color: #8ef5c2; + font-size: 10px; + font-weight: 900; + text-transform: uppercase; +} + +.nam-chain-meta strong { + color: rgba(226, 232, 240, 0.72); + font-size: 10px; + font-weight: 750; + line-height: 1.25; +} + +.nam-chain-meta button { + width: fit-content; + min-height: 24px; + display: inline-flex; + align-items: center; + gap: 5px; + padding: 0 7px; + border: 1px solid rgba(245, 200, 106, 0.16); + border-radius: 6px; + background: rgba(245, 200, 106, 0.06); + color: #f8fafc; + font-size: 10px; + font-weight: 850; +} + +.nam-chain-meta button:disabled { + opacity: 0.42; + cursor: not-allowed; +} + +.nam-chain-meta button[data-active="true"] { + border-color: rgba(142, 245, 194, 0.36); + background: rgba(69, 179, 107, 0.13); + color: #8ef5c2; +} + +.nam-chain-slots { + min-width: 0; + display: grid; + grid-template-columns: repeat(8, minmax(74px, 1fr)); + gap: 6px; +} + +.nam-chain-module { + position: relative; + min-width: 0; + min-height: 78px; + overflow: hidden; + border-radius: 7px; + cursor: pointer; +} + +.nam-chain-module[data-active="true"] { + border-color: rgba(69, 179, 107, 0.46); + background: rgba(69, 179, 107, 0.1); +} + +.nam-chain-module[data-selected="true"] { + border-color: rgba(255, 216, 122, 0.9); + background: + radial-gradient(circle at 20% 0%, rgba(245, 200, 106, 0.24), transparent 42%), + linear-gradient(180deg, rgba(54, 43, 22, 0.98), rgba(13, 12, 9, 0.98)); + box-shadow: + inset 0 0 0 2px rgba(255, 216, 122, 0.48), + inset 0 1px 0 rgba(255, 255, 255, 0.1), + 0 0 0 1px rgba(245, 200, 106, 0.34), + 0 0 30px rgba(245, 200, 106, 0.18); +} + +.nam-chain-module[data-selected="true"]::after { + content: "Selected"; + position: absolute; + right: 30px; + bottom: 7px; + z-index: 1; + color: #ffe3a1; + font-size: 8px; + font-weight: 950; + letter-spacing: 0; + text-transform: uppercase; + pointer-events: none; +} + +.nam-chain-module:focus-visible { + outline: 2px solid rgba(142, 245, 194, 0.7); + outline-offset: 2px; +} + +.nam-chain-module[data-favorite="true"] { + box-shadow: + inset 0 0 0 1px rgba(255, 213, 110, 0.12), + 0 0 0 1px rgba(255, 213, 110, 0.06); +} + +.nam-chain-module[data-planned="true"] { + border-style: dashed; + opacity: 0.74; +} + +.nam-chain-module[data-dragging="true"] { + opacity: 0.6; +} + +.nam-chain-module[data-drop-target="true"] { + outline: 1px dashed rgba(245, 200, 106, 0.5); + outline-offset: -3px; +} + +.nam-chain-module[data-drop-target="true"][data-drop-allowed="true"] { + background: rgba(245, 200, 106, 0.09); +} + +.nam-chain-module[data-drop-target="true"][data-drop-allowed="false"] { + outline-color: rgba(248, 113, 113, 0.42); +} + +.nam-chain-grip { + position: absolute; + top: 5px; + left: 5px; + z-index: 2; + display: grid; + width: 19px; + height: 23px; + place-items: center; + border: 1px solid rgba(255, 255, 255, 0.08); + border-radius: 5px; + color: rgba(226, 232, 240, 0.52); + background: rgba(0, 0, 0, 0.28); + cursor: grab; +} + +.nam-chain-grip:active { + cursor: grabbing; +} + +.nam-chain-module-main { + width: 100%; + min-height: 54px; + display: grid; + grid-template-columns: 28px minmax(0, 1fr); + align-items: center; + gap: 7px; + padding: 8px 32px 19px 25px; + border: 0; + border-radius: inherit; + background: transparent; + color: inherit; + text-align: left; +} + +.nam-chain-module-main:hover { + background: rgba(255, 255, 255, 0.035); +} + +.nam-chain-slot-actions { + position: absolute; + right: 5px; + bottom: 5px; + left: 5px; + z-index: 2; + display: flex; + justify-content: flex-end; + gap: 3px; + pointer-events: none; +} + +.nam-chain-slot-actions button { + width: 21px; + height: 19px; + display: grid; + place-items: center; + padding: 0; + border: 1px solid rgba(255, 255, 255, 0.085); + border-radius: 5px; + background: rgba(0, 0, 0, 0.38); + color: rgba(226, 232, 240, 0.64); + pointer-events: auto; +} + +.nam-chain-slot-actions button:hover:not(:disabled) { + border-color: rgba(245, 200, 106, 0.34); + color: #f5c86a; +} + +.nam-chain-slot-actions button:disabled { + opacity: 0.22; + cursor: not-allowed; +} + +.nam-chain-favorite { + position: absolute; + top: 31px; + right: 8px; + z-index: 2; + display: grid; + width: 16px; + height: 16px; + place-items: center; + border-radius: 50%; + color: #ffd56e; + background: rgba(0, 0, 0, 0.42); + pointer-events: none; +} + +.nam-chain-power { + position: absolute; + top: 5px; + right: 5px; + width: 23px; + height: 23px; + display: grid; + place-items: center; + padding: 0; + border: 1px solid rgba(255, 255, 255, 0.11); + border-radius: 50%; + background: rgba(0, 0, 0, 0.36); + color: rgba(226, 232, 240, 0.58); +} + +.nam-chain-power[data-active="true"] { + border-color: rgba(142, 245, 194, 0.44); + background: rgba(69, 179, 107, 0.18); + color: #8ef5c2; +} + +.nam-chain-power:hover:not(:disabled) { + border-color: rgba(245, 200, 106, 0.42); + color: #f5c86a; +} + +.nam-chain-power:disabled { + opacity: 0.38; + cursor: not-allowed; +} + +.nam-chain-icon { + display: grid; + width: 28px; + height: 28px; + place-items: center; + border-radius: 6px; + background: rgba(0, 0, 0, 0.34); +} + +.nam-chain-module strong, +.nam-result-copy strong, +.nam-rack-slots strong { + display: block; + min-width: 0; + overflow: hidden; + color: #f8fafc; + font-size: 12px; + font-weight: 800; + text-overflow: ellipsis; + white-space: nowrap; +} + +.nam-chain-module small { + display: block; + min-width: 0; + overflow: hidden; + color: rgba(226, 232, 240, 0.56); + font-size: 10px; + text-overflow: ellipsis; + white-space: nowrap; +} + +.nam-slot-browser { + display: grid; + grid-template-columns: minmax(120px, 0.92fr) minmax(0, 4fr); + gap: 10px; + max-height: 168px; + overflow: hidden; + padding: 10px; + border: 1px solid rgba(255, 255, 255, 0.09); + border-radius: 8px; + background: + radial-gradient(circle at 6% 0%, rgba(142, 245, 194, 0.08), transparent 32%), + linear-gradient(180deg, rgba(31, 31, 29, 0.98), rgba(9, 9, 8, 0.98)); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.045); +} + +.nam-slot-browser-tabs { + display: grid; + gap: 5px; + align-content: start; + overflow: auto; +} + +.nam-slot-browser-tabs button, +.nam-slot-browser-actions button { + min-height: 30px; + display: inline-flex; + align-items: center; + justify-content: center; + gap: 6px; + border: 1px solid rgba(255, 255, 255, 0.1); + border-radius: 7px; + color: rgba(226, 232, 240, 0.78); + background: rgba(255, 255, 255, 0.045); + font-size: 11px; + font-weight: 850; +} + +.nam-slot-browser-tabs button[data-active="true"], +.nam-slot-browser-actions button[data-active="true"] { + border-color: rgba(142, 245, 194, 0.42); + color: #8ef5c2; + background: rgba(69, 179, 107, 0.13); +} + +.nam-slot-browser-grid { + min-width: 0; + display: grid; + grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); + gap: 8px; + overflow: auto; +} + +.nam-slot-browser-card { + min-width: 0; + display: grid; + gap: 8px; + padding: 11px; + border: 1px solid rgba(255, 255, 255, 0.095); + border-radius: 8px; + background: + linear-gradient(135deg, rgba(245, 200, 106, 0.055), transparent 38%), + rgba(0, 0, 0, 0.22); +} + +.nam-slot-browser-card[data-active="true"] { + border-color: rgba(69, 179, 107, 0.34); + background: + linear-gradient(135deg, rgba(69, 179, 107, 0.12), transparent 42%), + rgba(0, 0, 0, 0.22); +} + +.nam-slot-browser-card[data-favorite="true"] { + border-color: rgba(255, 213, 110, 0.28); +} + +.nam-slot-browser-card-head { + display: grid; + grid-template-columns: 32px minmax(0, 1fr); + gap: 8px; + align-items: center; +} + +.nam-slot-browser-card-head strong { + overflow: hidden; + color: #f8fafc; + font-size: 13px; + line-height: 1.1; + text-overflow: ellipsis; + white-space: nowrap; +} + +.nam-slot-browser-card-head small, +.nam-slot-browser-copy { + overflow: hidden; + color: rgba(148, 163, 184, 0.8); + font-size: 11px; + text-overflow: ellipsis; + white-space: nowrap; +} + +.nam-slot-browser-card p, +.nam-slot-browser-status { + margin: 0; + color: rgba(203, 213, 225, 0.72); + font-size: 12px; + line-height: 1.36; +} + +.nam-slot-browser-actions { + display: flex; + flex-wrap: wrap; + gap: 6px; +} + +.nam-slot-browser-actions button { + min-height: 28px; + padding: 0 9px; +} + +.nam-slot-browser-actions button:hover { + border-color: rgba(245, 200, 106, 0.38); + color: #f8fafc; +} + +.nam-slot-browser-status { + grid-column: 2; + padding: 7px 9px; + border: 1px solid rgba(142, 245, 194, 0.18); + border-radius: 7px; + color: #8ef5c2; + background: rgba(69, 179, 107, 0.08); +} + +.nam-rack-error { + padding: 8px 10px; + border: 1px solid rgba(239, 68, 68, 0.35); + border-radius: 7px; + background: rgba(127, 29, 29, 0.32); + color: #fecaca; + font-size: 12px; +} + +.nam-rack-input-diagnostics { + display: grid; + grid-template-columns: minmax(180px, 0.72fr) minmax(260px, 1fr) auto auto; + align-items: center; + gap: 10px; + padding: 9px 10px; + border: 1px solid rgba(255, 255, 255, 0.09); + border-radius: 8px; + background: linear-gradient(180deg, rgba(20, 20, 18, 0.96), rgba(9, 9, 8, 0.96)); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04); +} + +.nam-rack-input-diagnostics[data-tone="success"] { + border-color: rgba(74, 222, 128, 0.24); + background: linear-gradient(180deg, rgba(20, 46, 32, 0.62), rgba(9, 13, 10, 0.96)); +} + +.nam-rack-input-diagnostics[data-tone="warning"] { + border-color: rgba(245, 200, 106, 0.34); + background: linear-gradient(180deg, rgba(68, 50, 18, 0.58), rgba(12, 10, 7, 0.96)); +} + +.nam-rack-input-diagnostics[data-tone="error"] { + border-color: rgba(239, 68, 68, 0.38); + background: linear-gradient(180deg, rgba(72, 18, 18, 0.52), rgba(12, 7, 7, 0.96)); +} + +.nam-rack-input-summary, +.nam-rack-input-copy { + min-width: 0; + display: grid; + gap: 2px; +} + +.nam-rack-input-summary span, +.nam-rack-input-copy span { + color: rgba(226, 232, 240, 0.58); + font-size: 10px; +} + +.nam-rack-input-summary strong { + overflow: hidden; + color: #f8fafc; + font-size: 12px; + font-weight: 850; + text-overflow: ellipsis; + white-space: nowrap; +} + +.nam-rack-input-summary small { + color: rgba(226, 232, 240, 0.68); + font-size: 11px; +} + +.nam-rack-input-actions { + display: flex; + flex-wrap: wrap; + gap: 6px; + justify-content: flex-end; +} + +.nam-rack-input-actions button { + min-height: 27px; + display: inline-flex; + align-items: center; + gap: 5px; + padding: 4px 8px; + border: 1px solid rgba(255, 255, 255, 0.11); + border-radius: 6px; + background: rgba(255, 255, 255, 0.055); + color: #f8fafc; + font-size: 11px; + font-weight: 800; +} + +.nam-rack-input-actions button:hover { + border-color: rgba(142, 245, 194, 0.28); + background: rgba(142, 245, 194, 0.1); +} + +.nam-rack-auth-pill { + justify-self: end; + padding: 4px 7px; + border: 1px solid rgba(255, 255, 255, 0.1); + border-radius: 999px; + color: rgba(226, 232, 240, 0.66); + font-size: 10px; + font-weight: 850; + white-space: nowrap; +} + +.nam-rack-auth-pill[data-ready="true"] { + border-color: rgba(74, 222, 128, 0.26); + color: #8ef5c2; + background: rgba(34, 197, 94, 0.1); +} + +.nam-focus-strip { + display: grid; + grid-template-columns: minmax(180px, 0.56fr) auto minmax(320px, 1.2fr); + gap: 10px; + align-items: center; + padding: 10px; + border: 1px solid rgba(245, 200, 106, 0.16); + border-radius: 8px; + background: + linear-gradient(90deg, rgba(245, 200, 106, 0.1), rgba(69, 179, 107, 0.05)), + rgba(0, 0, 0, 0.26); +} + +.nam-focus-copy { + min-width: 0; + display: grid; + gap: 2px; +} + +.nam-focus-copy span { + color: #8ef5c2; + font-size: 10px; + font-weight: 900; + letter-spacing: 0; + text-transform: uppercase; +} + +.nam-focus-copy strong { + min-width: 0; + overflow: hidden; + color: #f8fafc; + font-size: 13px; + text-overflow: ellipsis; + white-space: nowrap; +} + +.nam-focus-copy small { + color: rgba(226, 232, 240, 0.58); + font-size: 11px; +} + +.nam-focus-actions { + display: flex; + flex-wrap: wrap; + gap: 6px; +} + +.nam-focus-actions button { + min-height: 29px; + display: inline-flex; + align-items: center; + gap: 6px; + padding: 5px 8px; + border: 1px solid rgba(255, 255, 255, 0.1); + border-radius: 6px; + background: rgba(255, 255, 255, 0.055); + color: #f8fafc; + font-size: 11px; + font-weight: 850; +} + +.nam-focus-actions button:hover { + border-color: rgba(245, 200, 106, 0.35); + background: rgba(245, 200, 106, 0.08); +} + +.nam-focus-controls { + min-width: 0; + display: grid; + grid-template-columns: repeat(auto-fit, minmax(92px, 1fr)); + gap: 8px; +} + +.nam-rig-stage { + display: grid; + grid-template-columns: minmax(150px, 0.72fr) minmax(330px, 1.7fr) minmax(150px, 0.78fr); + gap: 10px; + padding: 10px; +} + +.nam-rack-controls { + display: grid; + gap: 8px; +} + +.nam-rack-control-band { + display: grid; + gap: 9px; + padding: 10px; +} + +.nam-rack-section-title { + color: rgba(226, 232, 240, 0.66); +} + +.nam-rack-control { + min-width: 0; +} + +.nam-rack-control-knob { + display: grid; + justify-items: center; + gap: 4px; + color: #f8fafc; + font-size: 11px; +} + +.nam-rack-control-knob input[type="range"] { + width: 100%; + height: 4px; + accent-color: #f5c86a; +} + +.nam-rack-knob-cap { + position: relative; + width: 48px; + height: 48px; + border: 1px solid rgba(255, 255, 255, 0.16); + border-radius: 50%; + background: + radial-gradient(circle at 50% 50%, #181818 0 46%, transparent 48%), + conic-gradient(#f5c86a var(--nam-knob-pct), #2c2c2c 0); + box-shadow: + inset 0 0 0 3px #080808, + 0 5px 12px rgba(0, 0, 0, 0.34); +} + +.nam-rack-control-knob[data-size="large"] .nam-rack-knob-cap { + width: 58px; + height: 58px; +} + +.nam-rack-knob-cap > span { + position: absolute; + inset: 7px; + border-radius: 50%; + transform: rotate(var(--nam-knob-rotation)); +} + +.nam-rack-knob-cap > span::before { + content: ""; + position: absolute; + top: 1px; + left: 50%; + width: 3px; + height: 11px; + border-radius: 999px; + background: #f8fafc; + transform: translateX(-50%); +} + +.nam-rack-knob-label, +.nam-rack-control strong { + max-width: 100%; + overflow: hidden; + color: rgba(248, 250, 252, 0.88); + text-align: center; + text-overflow: ellipsis; + white-space: nowrap; +} + +.nam-rack-control strong { + color: rgba(226, 232, 240, 0.58); + font-size: 10px; + font-weight: 700; + font-variant-numeric: tabular-nums; +} + +.nam-rack-control-select, +.nam-rack-control-switch { + display: grid; + gap: 6px; + color: rgba(248, 250, 252, 0.84); + font-size: 11px; +} + +.nam-rack-control-switch { + min-height: 64px; + place-items: center; + border: 1px solid rgba(255, 255, 255, 0.1); + border-radius: 7px; + background: rgba(255, 255, 255, 0.04); +} + +.nam-rack-control-switch[data-active="true"] { + border-color: rgba(69, 179, 107, 0.5); + color: #8ef5c2; +} + +.nam-browser-drawer { + display: grid; + gap: 10px; + padding: 10px; +} + +.nam-browser-title { + justify-content: space-between; +} + +.nam-explorer { + display: grid; + grid-template-columns: minmax(190px, 0.72fr) minmax(320px, 1.35fr) minmax(230px, 0.9fr); + gap: 10px; +} + +.nam-explorer-sidebar, +.nam-explorer-main, +.nam-detail { + min-width: 0; + border: 1px solid rgba(255, 255, 255, 0.08); + border-radius: 8px; + background: rgba(0, 0, 0, 0.22); +} + +.nam-explorer-sidebar, +.nam-explorer-main, +.nam-detail { + display: grid; + align-content: start; + gap: 10px; + padding: 10px; +} + +.nam-rack-slots { + display: grid; + grid-template-columns: 1fr; + gap: 6px; +} + +.nam-rack-slots > div { + min-width: 0; + padding: 8px; + border: 1px solid rgba(236, 196, 110, 0.18); + border-radius: 6px; + background: rgba(255, 255, 255, 0.04); +} + +.nam-shelves { + display: grid; + gap: 5px; +} + +.nam-shelves button { + min-height: 28px; + padding: 5px 8px; + border-radius: 6px; + font-size: 11px; + font-weight: 750; + text-align: left; +} + +.nam-shelves button:hover, +.nam-tabs button[data-active="true"], +.nam-favorite[data-active="true"] { + border-color: rgba(69, 179, 107, 0.44); + background: rgba(69, 179, 107, 0.12); + color: #8ef5c2; +} + +.nam-auth { + display: grid; + gap: 8px; + padding-top: 8px; + border-top: 1px solid rgba(255, 255, 255, 0.08); +} + +.nam-auth-head { + justify-content: space-between; +} + +.nam-auth-head > span, +.nam-auth-head > div { + display: flex; + align-items: center; + gap: 6px; + min-width: 0; +} + +.nam-auth-ready { + display: inline-flex; + align-items: center; + gap: 5px; + min-height: 26px; + padding: 4px 7px; + border: 1px solid rgba(142, 245, 194, 0.22); + border-radius: 999px; + color: #8ef5c2; + background: rgba(69, 179, 107, 0.1); + font-size: 11px; + font-weight: 850; +} + +.nam-auth-copy { + margin: 0; + line-height: 1.35; +} + +.nam-auth-library { + display: block; + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.nam-auth-advanced { + display: grid; + gap: 8px; + border: 1px solid rgba(255, 255, 255, 0.08); + border-radius: 6px; + padding: 7px; + background: rgba(0, 0, 0, 0.18); +} + +.nam-auth-advanced summary { + cursor: pointer; + color: rgba(248, 250, 252, 0.78); + font-size: 11px; + font-weight: 750; +} + +.nam-auth-advanced[open] summary { + margin-bottom: 7px; +} + +.nam-auth-grid { + display: grid; + grid-template-columns: 1fr; + gap: 6px; +} + +.nam-toolbar { + display: grid; + grid-template-columns: minmax(0, 1fr) auto; + justify-content: stretch; + align-items: flex-start; + min-width: 0; +} + +.nam-tabs { + display: flex; + flex: 1 1 auto; + flex-wrap: wrap; + gap: 4px; + min-width: 0; +} + +.nam-view-actions { + flex: 0 1 auto; + flex-wrap: wrap; + justify-content: flex-end; + min-width: 0; +} + +.nam-product .nam-save-tone-button { + border-color: rgba(142, 245, 194, 0.44); + background: + linear-gradient(180deg, rgba(69, 179, 107, 0.3), rgba(7, 10, 8, 0.96)), + #101211; + color: #d1fae5; + box-shadow: + inset 0 1px 0 rgba(255, 255, 255, 0.06), + 0 0 0 1px rgba(142, 245, 194, 0.1), + 0 10px 22px rgba(0, 0, 0, 0.22); + font-weight: 900; +} + +.nam-product .nam-save-tone-button:hover:not(:disabled) { + border-color: rgba(142, 245, 194, 0.62); + filter: brightness(1.04); + transform: translateY(-1px); +} + +.nam-product .nam-save-tone-button:disabled { + border-color: rgba(255, 255, 255, 0.09); + background: rgba(255, 255, 255, 0.07); + color: rgba(226, 232, 240, 0.48); + box-shadow: none; +} + +.nam-audition-strip { + display: grid; + grid-template-columns: minmax(0, 1fr) auto; + align-items: center; + gap: 10px; + padding: 10px 12px; + border: 1px solid rgba(245, 200, 106, 0.26); + border-radius: 8px; + background: + linear-gradient(90deg, rgba(245, 200, 106, 0.18), rgba(69, 179, 107, 0.08)), + linear-gradient(180deg, rgba(32, 31, 27, 0.98), rgba(9, 9, 8, 0.98)); + box-shadow: + inset 0 1px 0 rgba(255, 255, 255, 0.055), + 0 14px 28px rgba(0, 0, 0, 0.22); +} + +.nam-audition-strip[data-saved="true"] { + border-color: rgba(142, 245, 194, 0.3); + background: + linear-gradient(90deg, rgba(69, 179, 107, 0.16), rgba(245, 200, 106, 0.08)), + linear-gradient(180deg, rgba(24, 31, 26, 0.98), rgba(8, 10, 9, 0.98)); +} + +.nam-audition-strip > div:first-child { + min-width: 0; + display: grid; + gap: 2px; +} + +.nam-audition-strip span { + color: #8ef5c2; + font-size: 10px; + font-weight: 900; + text-transform: uppercase; +} + +.nam-audition-strip strong { + min-width: 0; + overflow: hidden; + color: #f8fafc; + font-size: 14px; + text-overflow: ellipsis; + white-space: nowrap; +} + +.nam-audition-strip small { + min-width: 0; + overflow: hidden; + color: rgba(226, 232, 240, 0.62); + font-size: 11px; + text-overflow: ellipsis; + white-space: nowrap; +} + +.nam-audition-strip > div:last-child { + display: flex; + align-items: center; + gap: 6px; +} + +.nam-tabs button, +.nam-favorite { + border-radius: 6px; +} + +.nam-tabs button { + min-height: 28px; + padding: 5px 8px; + font-size: 11px; + font-weight: 750; + white-space: nowrap; +} + +.nam-filters { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(126px, 1fr)); + gap: 6px; +} + +.nam-filters label { + min-width: 0; + display: flex; + align-items: center; + gap: 6px; + grid-column: span 2; +} + +.nam-filters label > span { + min-width: 0; +} + +.nam-search-row { + display: grid; + grid-template-columns: minmax(220px, 1fr) minmax(118px, auto) auto; + align-items: center; + gap: 8px; + min-width: 0; +} + +.nam-search-box { + min-width: 0; + display: grid; + grid-template-columns: auto minmax(0, 1fr); + align-items: center; + gap: 8px; + padding: 0 8px; + border: 1px solid rgba(255, 255, 255, 0.08); + border-radius: 8px; + background: rgba(0, 0, 0, 0.18); +} + +.nam-search-box input { + border: 0; + background: transparent; +} + +.nam-slot-select { + min-width: 118px; +} + +.nam-status { + padding: 7px 9px; + border: 1px solid rgba(245, 200, 106, 0.24); + border-radius: 6px; + background: rgba(245, 200, 106, 0.08); +} + +.nam-live-pager { + display: flex; + align-items: center; + justify-content: space-between; + gap: 8px; + padding: 6px 8px; + border: 1px solid rgba(69, 179, 107, 0.2); + border-radius: 6px; + background: rgba(69, 179, 107, 0.07); + color: rgba(226, 232, 240, 0.74); + font-size: 11px; +} + +.nam-live-pager > div { + display: flex; + gap: 4px; +} + +.nam-results { + display: grid; + max-height: 430px; + gap: 8px; + overflow: auto; +} + +.nam-results[data-view="cards"] { + grid-template-columns: repeat(auto-fit, minmax(184px, 1fr)); +} + +.nam-results[data-view="list"] { + grid-template-columns: 1fr; +} + +.nam-result-card { + position: relative; + min-width: 0; + display: grid; + gap: 8px; + padding: 8px; + border: 1px solid rgba(255, 255, 255, 0.08); + border-radius: 8px; + background: linear-gradient(180deg, rgba(255, 255, 255, 0.055), rgba(255, 255, 255, 0.02)); + cursor: pointer; +} + +.nam-result-select-target { + position: absolute; + inset: 0; + z-index: 8; + width: 100%; + height: 100%; + padding: 0; + border: 0; + border-radius: inherit; + background: transparent; + pointer-events: none; +} + +.nam-result-select-target:focus-visible { + outline: 2px solid rgba(245, 200, 106, 0.82); + outline-offset: -3px; +} + +.nam-result-card[data-selected="true"] { + border-color: rgba(245, 200, 106, 0.42); + box-shadow: inset 0 0 0 1px rgba(245, 200, 106, 0.12); +} + +.nam-result-card[data-update="true"] { + border-color: rgba(56, 189, 248, 0.28); + background: + linear-gradient(180deg, rgba(56, 189, 248, 0.07), rgba(255, 255, 255, 0.02)), + rgba(255, 255, 255, 0.02); +} + +.nam-result-card[data-view="list"] { + grid-template-columns: 76px minmax(0, 1fr) auto auto; + align-items: center; +} + +.nam-card-art { + min-height: 86px; + display: grid; + align-content: space-between; + padding: 9px; + border: 1px solid rgba(255, 255, 255, 0.08); + border-radius: 7px; + background: + linear-gradient(145deg, rgba(245, 200, 106, 0.16), rgba(70, 82, 92, 0.16)), + #111; +} + +.nam-card-art[data-arch="a2"] { + background: + linear-gradient(145deg, rgba(69, 179, 107, 0.18), rgba(245, 200, 106, 0.12)), + #111; +} + +.nam-card-art span { + width: fit-content; + padding: 2px 6px; + border-radius: 999px; + background: rgba(0, 0, 0, 0.38); + color: #8ef5c2; + font-size: 10px; + font-weight: 900; +} + +.nam-card-art strong { + color: #f8fafc; + font-size: 12px; +} + +.nam-result-copy { + min-width: 0; + display: grid; + gap: 3px; +} + +.nam-result-actions { + display: flex; + align-items: center; + justify-content: flex-end; + flex-wrap: wrap; + gap: 5px; +} + +.nam-favorite { + position: absolute; + top: 8px; + right: 8px; + width: 27px; + height: 27px; + display: grid; + place-items: center; + padding: 0; +} + +.nam-stats { + flex-wrap: wrap; + gap: 5px; +} + +.nam-stats span { + padding: 2px 6px; + border-radius: 999px; + background: rgba(255, 255, 255, 0.06); + color: rgba(226, 232, 240, 0.66); + font-size: 10px; +} + +.nam-detail { + position: sticky; + top: 0; +} + +.nam-detail-art { + min-height: 118px; + display: grid; + align-content: space-between; + padding: 12px; + border: 1px solid rgba(245, 200, 106, 0.24); + border-radius: 8px; + background: + linear-gradient(145deg, rgba(245, 200, 106, 0.18), rgba(69, 179, 107, 0.09)), + #111; +} + +.nam-detail-art span, +.nam-detail-art strong { + color: #f8fafc; + font-weight: 900; +} + +.nam-detail h4 { + margin: 0; + color: #f8fafc; + font-size: 15px; + line-height: 1.25; +} + +.nam-detail p { + margin: 0; + color: rgba(226, 232, 240, 0.66); + font-size: 12px; + line-height: 1.45; +} + +.nam-detail dl { + display: grid; + gap: 6px; + margin: 0; +} + +.nam-detail dl > div { + min-width: 0; + display: grid; + grid-template-columns: 78px minmax(0, 1fr); + gap: 8px; +} + +.nam-detail dt { + color: rgba(226, 232, 240, 0.52); + font-size: 11px; +} + +.nam-detail dd { + min-width: 0; + margin: 0; + overflow: hidden; + color: rgba(248, 250, 252, 0.88); + font-size: 11px; + text-overflow: ellipsis; + white-space: nowrap; +} + +.nam-detail dd a { + color: #8ef5c2; + text-decoration: none; +} + +.nam-detail dd a:hover { + text-decoration: underline; +} + +.nam-detail-actions { + display: flex; + flex-wrap: wrap; + gap: 6px; +} + +.nam-source-link { + display: inline-flex; + align-items: center; + gap: 6px; + color: #8ef5c2; + font-size: 12px; + text-decoration: none; +} + +.nam-empty { + padding: 14px; + border: 1px dashed rgba(255, 255, 255, 0.14); + border-radius: 7px; + color: rgba(255, 255, 255, 0.55); + font-size: 12px; + text-align: center; +} + +.nam-empty-state { + min-height: 250px; + grid-column: 1 / -1; + display: grid; + align-content: center; + justify-items: center; + gap: 9px; + padding: 26px; + border: 1px dashed rgba(236, 196, 110, 0.2); + border-radius: 8px; + background: + radial-gradient(circle at 50% 0%, rgba(245, 200, 106, 0.1), transparent 34%), + linear-gradient(180deg, rgba(30, 31, 29, 0.72), rgba(10, 10, 9, 0.9)); + color: rgba(226, 232, 240, 0.7); + text-align: center; +} + +.nam-empty-state > span { + display: grid; + width: 48px; + height: 48px; + place-items: center; + border: 1px solid rgba(245, 200, 106, 0.24); + border-radius: 50%; + color: #f5c86a; + background: rgba(0, 0, 0, 0.2); +} + +.nam-empty-state strong { + color: #f8fafc; + font-size: 15px; +} + +.nam-empty-state p { + max-width: 360px; + margin: 0; + font-size: 12px; + line-height: 1.45; +} + +.builtin-plugin-panel[data-kind="nam"] { + min-height: 0; + overflow: auto; +} + +.builtin-plugin-panel[data-kind="nam"] .builtin-panel-content { + min-height: 0; +} + +.nam-product { + min-height: 0; +} + +.nam-browser-drawer { + min-height: 0; + overflow: visible; +} + +.nam-explorer { + grid-template-columns: minmax(220px, 0.72fr) minmax(520px, 1.45fr) minmax(300px, 0.95fr); + gap: 12px; + min-height: 0; + padding: 2px; +} + +.nam-explorer-sidebar, +.nam-explorer-main, +.nam-detail { + border-color: rgba(236, 196, 110, 0.12); + background: + linear-gradient(180deg, rgba(30, 31, 29, 0.96), rgba(12, 13, 12, 0.98)), + #10100f; + box-shadow: + inset 0 1px 0 rgba(255, 255, 255, 0.045), + 0 16px 34px rgba(0, 0, 0, 0.24); +} + +.nam-explorer-main { + min-height: 0; +} + +.nam-rack-slots > div { + display: grid; + gap: 4px; + background: + linear-gradient(180deg, rgba(236, 196, 110, 0.08), rgba(255, 255, 255, 0.025)), + #141412; +} + +.nam-rack-slots span { + color: rgba(226, 232, 240, 0.56); + font-size: 10px; + font-weight: 800; + letter-spacing: 0; + text-transform: uppercase; +} + +.nam-rack-slots strong { + min-width: 0; + overflow: hidden; + color: #f8fafc; + font-size: 12px; + text-overflow: ellipsis; + white-space: nowrap; +} + +.nam-shelves button, +.nam-tabs button { + color: rgba(226, 232, 240, 0.72); + background: rgba(255, 255, 255, 0.035); +} + +.nam-shelves button:hover, +.nam-tabs button:hover, +.nam-tabs button[data-active="true"], +.nam-favorite[data-active="true"] { + border-color: rgba(142, 245, 194, 0.44); + background: rgba(69, 179, 107, 0.13); + color: #a7f3d0; +} + +.nam-toolbar { + gap: 10px; + padding-bottom: 2px; +} + +.nam-view-actions { + gap: 6px; +} + +.nam-view-actions > button, +.nam-detail-actions > button, +.nam-result-actions > button { + min-height: 30px; + white-space: nowrap; +} + +.nam-view-actions > button:first-child, +.nam-detail-actions > button:first-child { + box-shadow: 0 0 0 1px rgba(245, 200, 106, 0.2), 0 12px 22px rgba(0, 0, 0, 0.25); +} + +.nam-filters { + padding: 8px; + border: 1px solid rgba(255, 255, 255, 0.065); + border-radius: 8px; + background: rgba(0, 0, 0, 0.16); +} + +.nam-filters[data-open="false"] { + display: none; +} + +.nam-filters[data-open="true"] { + display: grid; +} + +.nam-library-summary { + min-width: 0; + display: grid; + grid-template-columns: minmax(0, 0.62fr) minmax(180px, 0.68fr) minmax(0, 1fr); + align-items: center; + gap: 10px; + padding: 8px 10px; + border: 1px solid rgba(236, 196, 110, 0.1); + border-radius: 8px; + background: + linear-gradient(90deg, rgba(245, 200, 106, 0.07), rgba(69, 179, 107, 0.045)), + rgba(0, 0, 0, 0.18); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.045); +} + +.nam-library-summary > div:first-child { + min-width: 0; + display: grid; + gap: 2px; +} + +.nam-library-summary strong { + color: #f8fafc; + font-size: 12px; + font-weight: 900; +} + +.nam-library-summary span { + min-width: 0; + overflow: hidden; + color: rgba(226, 232, 240, 0.62); + font-size: 10px; + text-overflow: ellipsis; + white-space: nowrap; +} + +.nam-catalog-health { + min-width: 0; + display: flex; + align-items: center; + justify-content: center; + flex-wrap: wrap; + gap: 5px; +} + +.nam-catalog-health span { + max-width: 150px; + padding: 3px 7px; + border: 1px solid rgba(142, 245, 194, 0.13); + border-radius: 999px; + color: rgba(226, 232, 240, 0.72); + background: rgba(0, 0, 0, 0.2); + font-size: 9px; + font-weight: 850; +} + +.nam-catalog-health[data-stale="true"] span { + border-color: rgba(245, 200, 106, 0.22); + color: #f5c86a; + background: rgba(245, 200, 106, 0.08); +} + +.nam-active-filters { + min-width: 0; + display: flex; + justify-content: flex-end; + flex-wrap: wrap; + gap: 5px; +} + +.nam-filter-chip { + max-width: 142px; + overflow: hidden; + padding: 4px 7px; + border: 1px solid rgba(142, 245, 194, 0.16); + border-radius: 999px; + color: rgba(226, 232, 240, 0.82); + background: + linear-gradient(180deg, rgba(69, 179, 107, 0.1), rgba(0, 0, 0, 0.16)), + rgba(0, 0, 0, 0.2); + font-size: 10px; + font-weight: 850; + text-overflow: ellipsis; + white-space: nowrap; +} + +.nam-filter-chip[data-muted="true"] { + border-color: rgba(255, 255, 255, 0.08); + color: rgba(226, 232, 240, 0.52); + background: rgba(255, 255, 255, 0.035); +} + +.nam-active-filters button { + min-height: 22px; + padding: 0 7px; + border: 1px solid rgba(245, 200, 106, 0.18); + border-radius: 999px; + color: #f5c86a; + background: rgba(245, 200, 106, 0.06); + font-size: 10px; + font-weight: 900; + cursor: pointer; +} + +.nam-search-row { + padding: 8px; + border: 1px solid rgba(255, 255, 255, 0.065); + border-radius: 8px; + background: + linear-gradient(180deg, rgba(255, 255, 255, 0.045), rgba(0, 0, 0, 0.14)), + #121211; +} + +.nam-search-box { + min-height: 34px; + color: rgba(226, 232, 240, 0.58); +} + +.nam-search-box:focus-within { + border-color: rgba(245, 200, 106, 0.36); + box-shadow: 0 0 0 1px rgba(245, 200, 106, 0.08); +} + +.nam-status { + border-color: rgba(142, 245, 194, 0.22); + background: rgba(69, 179, 107, 0.08); + color: rgba(226, 232, 240, 0.82); +} + +.nam-feedback { + min-width: 0; + display: grid; + grid-template-columns: auto minmax(0, 1fr) auto; + align-items: center; + gap: 10px; + padding: 10px 11px; + border: 1px solid rgba(148, 163, 184, 0.18); + border-radius: 8px; + color: rgba(226, 232, 240, 0.86); + background: + radial-gradient(circle at 2% 18%, rgba(245, 200, 106, 0.09), transparent 30%), + linear-gradient(180deg, rgba(255, 255, 255, 0.045), rgba(0, 0, 0, 0.12)), + rgba(15, 23, 42, 0.34); + font-size: 11px; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04); +} + +.nam-feedback[data-tone="success"] { + border-color: rgba(142, 245, 194, 0.26); + background: + linear-gradient(180deg, rgba(69, 179, 107, 0.12), rgba(0, 0, 0, 0.12)), + rgba(5, 46, 22, 0.22); +} + +.nam-feedback[data-tone="warning"] { + border-color: rgba(245, 200, 106, 0.3); + background: + linear-gradient(180deg, rgba(245, 200, 106, 0.12), rgba(0, 0, 0, 0.12)), + rgba(69, 51, 13, 0.22); +} + +.nam-feedback[data-tone="error"] { + border-color: rgba(248, 113, 113, 0.34); + background: + linear-gradient(180deg, rgba(239, 68, 68, 0.12), rgba(0, 0, 0, 0.14)), + rgba(69, 10, 10, 0.24); +} + +.nam-feedback[data-tone="busy"] { + border-color: rgba(96, 165, 250, 0.28); + background: + linear-gradient(180deg, rgba(59, 130, 246, 0.12), rgba(0, 0, 0, 0.12)), + rgba(30, 41, 59, 0.24); +} + +.nam-feedback[data-tone="busy"] .nam-feedback-icon { + animation: nam-spin 900ms linear infinite; +} + +.nam-feedback-icon { + display: grid; + width: 26px; + height: 26px; + place-items: center; + border: 1px solid rgba(245, 200, 106, 0.18); + border-radius: 999px; + color: #f5c86a; + background: rgba(0, 0, 0, 0.22); +} + +.nam-feedback-copy { + min-width: 0; + display: grid; + gap: 2px; + overflow: hidden; +} + +.nam-feedback-copy strong, +.nam-feedback-copy small { + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.nam-feedback-copy strong { + color: #f8fafc; + font-size: 12px; + font-weight: 900; +} + +.nam-feedback-copy small { + color: rgba(226, 232, 240, 0.64); + font-size: 11px; +} + +.nam-feedback > button { + min-height: 29px; + white-space: nowrap; +} + +@keyframes nam-spin { + to { + transform: rotate(360deg); + } +} + +.nam-results { + max-height: min(58vh, 620px); + padding-right: 2px; +} + +.nam-results[data-view="cards"] { + grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); +} + +.nam-result-card { + overflow: hidden; + gap: 9px; + padding: 9px; + border-color: rgba(255, 255, 255, 0.075); + background: + linear-gradient(180deg, rgba(37, 38, 35, 0.96), rgba(18, 18, 17, 0.98)), + #151515; + transition: border-color 120ms ease, box-shadow 120ms ease, transform 120ms ease; +} + +.nam-result-card:hover { + transform: translateY(-1px); + border-color: rgba(236, 196, 110, 0.28); + box-shadow: 0 18px 34px rgba(0, 0, 0, 0.22); +} + +.nam-result-card:focus-visible, +.nam-shelves button:focus-visible, +.nam-tabs button:focus-visible, +.nam-view-tabs button:focus-visible, +.nam-chain-module-main:focus-visible, +.nam-chain-power:focus-visible, +.nam-chain-slot-actions button:focus-visible, +.nam-chain-grip:focus-visible { + outline: 2px solid rgba(245, 200, 106, 0.72); + outline-offset: 2px; +} + +.nam-result-card[data-selected="true"], +.nam-result-card[data-audition="true"] { + border-color: rgba(245, 200, 106, 0.68); + box-shadow: + inset 0 0 0 1px rgba(245, 200, 106, 0.18), + 0 0 0 1px rgba(245, 200, 106, 0.08), + 0 18px 36px rgba(0, 0, 0, 0.28); +} + +.nam-result-card[data-audition="true"]::before { + content: "Auditioning"; + position: absolute; + z-index: 2; + top: 9px; + left: 9px; + padding: 3px 7px; + border: 1px solid rgba(245, 200, 106, 0.3); + border-radius: 999px; + color: #fde68a; + background: rgba(0, 0, 0, 0.64); + font-size: 10px; + font-weight: 900; +} + +.nam-result-card[data-view="list"] { + grid-template-columns: 112px auto minmax(0, 1fr) auto auto; +} + +.nam-result-skeleton { + pointer-events: none; +} + +.nam-result-skeleton:hover { + transform: none; + box-shadow: none; +} + +.nam-result-skeleton .nam-card-art, +.nam-result-skeleton .nam-result-copy strong, +.nam-result-skeleton .nam-result-copy span, +.nam-result-skeleton .nam-result-copy small, +.nam-result-skeleton .nam-stats span, +.nam-result-skeleton .nam-result-actions i { + display: block; + min-height: 12px; + overflow: hidden; + border: 0; + border-radius: 999px; + background: + linear-gradient(90deg, rgba(255, 255, 255, 0.05), rgba(245, 200, 106, 0.12), rgba(255, 255, 255, 0.05)), + rgba(255, 255, 255, 0.04); + background-size: 220% 100%; + color: transparent; + animation: nam-skeleton 1400ms ease-in-out infinite; +} + +.nam-result-skeleton .nam-card-art { + min-height: 132px; + border-radius: 8px; +} + +.nam-result-skeleton .nam-card-art::before, +.nam-result-skeleton .nam-card-art::after { + display: none; +} + +.nam-result-skeleton .nam-result-copy strong { + width: 76%; +} + +.nam-result-skeleton .nam-result-copy span { + width: 62%; +} + +.nam-result-skeleton .nam-result-copy small { + width: 44%; +} + +.nam-result-skeleton .nam-stats span { + width: 54px; +} + +.nam-result-skeleton .nam-result-actions i { + width: 86px; + min-height: 30px; + border-radius: 6px; +} + +.nam-detail-skeleton { + display: grid; + gap: 10px; +} + +.nam-detail-skeleton div, +.nam-detail-skeleton strong, +.nam-detail-skeleton p, +.nam-detail-skeleton li { + display: block; + overflow: hidden; + border-radius: 999px; + background: + linear-gradient(90deg, rgba(255, 255, 255, 0.05), rgba(245, 200, 106, 0.12), rgba(255, 255, 255, 0.05)), + rgba(255, 255, 255, 0.04); + background-size: 220% 100%; + color: transparent; + animation: nam-skeleton 1400ms ease-in-out infinite; +} + +.nam-detail-skeleton div { + min-height: 174px; + border-radius: 8px; +} + +.nam-detail-skeleton strong { + width: 80%; + min-height: 20px; +} + +.nam-detail-skeleton p { + width: 100%; + min-height: 12px; + margin: 0; +} + +.nam-detail-skeleton p:nth-of-type(2) { + width: 68%; +} + +.nam-detail-skeleton ul { + display: grid; + gap: 8px; + margin: 0; + padding: 0; + list-style: none; +} + +.nam-detail-skeleton li { + min-height: 12px; +} + +@keyframes nam-skeleton { + 0% { + background-position: 120% 0; + } + + 100% { + background-position: -120% 0; + } +} + +.nam-card-art { + position: relative; + min-height: 132px; + aspect-ratio: 16 / 10; + align-content: end; + gap: 6px; + padding: 10px; + overflow: hidden; + background: + radial-gradient(circle at 72% 22%, rgba(245, 200, 106, 0.2), transparent 34%), + linear-gradient(145deg, rgba(245, 200, 106, 0.16), rgba(70, 82, 92, 0.18)), + #111; + background-position: center; + background-repeat: no-repeat; + background-size: cover; + box-shadow: inset 0 -52px 46px rgba(0, 0, 0, 0.55); +} + +.nam-card-art::before, +.nam-detail-art::before { + content: ""; + position: absolute; + inset: 18px 18px 38px; + border: 1px solid rgba(236, 196, 110, 0.2); + border-radius: 8px; + background: + linear-gradient(90deg, rgba(236, 196, 110, 0.2) 0 8%, transparent 8% 14%, rgba(236, 196, 110, 0.2) 14% 22%, transparent 22% 100%), + linear-gradient(180deg, rgba(255, 255, 255, 0.08), rgba(0, 0, 0, 0.2)), + #24221d; + box-shadow: + inset 0 0 0 1px rgba(255, 255, 255, 0.04), + 0 18px 34px rgba(0, 0, 0, 0.28); +} + +.nam-card-art::after, +.nam-detail-art::after { + content: ""; + position: absolute; + right: 28px; + bottom: 50px; + width: 82px; + height: 16px; + border-radius: 999px; + background: + radial-gradient(circle at 12px 8px, #f6d47e 0 3px, transparent 4px), + radial-gradient(circle at 32px 8px, #f6d47e 0 3px, transparent 4px), + radial-gradient(circle at 52px 8px, #f6d47e 0 3px, transparent 4px), + radial-gradient(circle at 72px 8px, #f6d47e 0 3px, transparent 4px), + rgba(0, 0, 0, 0.42); + box-shadow: 0 0 18px rgba(245, 200, 106, 0.12); +} + +.nam-result-card[data-has-art="true"] .nam-card-art, +.nam-detail-art[data-has-art="true"] { + background-color: #101010; + background-position: center; + background-repeat: no-repeat; + background-size: cover; +} + +.nam-result-card[data-has-art="true"] .nam-card-art::before, +.nam-result-card[data-has-art="true"] .nam-card-art::after, +.nam-detail-art[data-has-art="true"]::before, +.nam-detail-art[data-has-art="true"]::after { + display: none; +} + +.nam-result-card[data-view="list"] .nam-card-art { + min-height: 76px; + aspect-ratio: 4 / 3; +} + +.nam-card-art span, +.nam-detail-art span, +.nam-card-art > svg, +.nam-detail-art > svg { + position: relative; + z-index: 1; +} + +.nam-card-art span, +.nam-detail-art span { + border: 1px solid rgba(142, 245, 194, 0.22); +} + +.nam-card-art strong { + position: relative; + z-index: 1; + width: fit-content; + padding: 3px 7px; + border-radius: 999px; + background: rgba(0, 0, 0, 0.52); + font-size: 11px; +} + +.nam-card-audition-puck { + position: relative; + z-index: 1; + display: inline-flex; + width: fit-content; + max-width: 100%; + align-items: center; + gap: 6px; + padding: 5px 8px; + border: 1px solid rgba(245, 200, 106, 0.2); + border-radius: 999px; + color: rgba(248, 250, 252, 0.84); + background: + linear-gradient(180deg, rgba(255, 255, 255, 0.065), rgba(0, 0, 0, 0.18)), + rgba(0, 0, 0, 0.3); + font-size: 11px; + font-style: normal; + font-weight: 850; + white-space: nowrap; +} + +.nam-result-card:hover .nam-card-audition-puck { + border-color: rgba(245, 200, 106, 0.42); + color: #f5c86a; +} + +.nam-result-card[data-audition="true"] .nam-card-audition-puck { + border-color: rgba(142, 245, 194, 0.36); + color: #8ef5c2; + background: + linear-gradient(180deg, rgba(69, 179, 107, 0.18), rgba(0, 0, 0, 0.22)), + rgba(0, 0, 0, 0.36); +} + +.nam-result-card[data-busy="true"] .nam-card-audition-puck svg { + animation: nam-spin 900ms linear infinite; +} + +.nam-result-copy strong { + display: -webkit-box; + overflow: hidden; + color: #f8fafc; + font-size: 13px; + line-height: 1.25; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} + +.nam-result-copy span, +.nam-result-copy small { + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.nam-creator-line { + display: flex; + align-items: center; + gap: 6px; +} + +.nam-creator-line img { + width: 18px; + height: 18px; + flex: 0 0 auto; + border: 1px solid rgba(255, 255, 255, 0.14); + border-radius: 50%; + object-fit: cover; +} + +.nam-stats { + align-items: center; + justify-content: flex-start; +} + +.nam-stats span { + border: 1px solid rgba(255, 255, 255, 0.06); + background: rgba(0, 0, 0, 0.22); +} + +.nam-favorite { + z-index: 3; + background: rgba(0, 0, 0, 0.42); + backdrop-filter: blur(8px); +} + +.nam-detail { + max-height: min(72vh, 760px); + overflow: auto; +} + +.nam-detail-art { + position: relative; + min-height: 174px; + align-content: end; + gap: 8px; + overflow: hidden; + background-position: center; + background-repeat: no-repeat; + background-size: cover; + box-shadow: inset 0 -72px 58px rgba(0, 0, 0, 0.58); +} + +.nam-detail-art strong { + position: relative; + z-index: 1; + width: fit-content; + padding: 4px 8px; + border-radius: 999px; + background: rgba(0, 0, 0, 0.54); + font-size: 13px; +} + +.nam-detail h4 { + font-size: 18px; +} + +.nam-detail-actions { + padding-top: 2px; +} + +.plugin-editor-window-app .builtin-plugin-panel[data-kind="nam"] { + height: 100%; + overflow: hidden; +} + +.plugin-editor-window-app .builtin-plugin-panel[data-kind="nam"] .builtin-panel-header { + position: relative; + z-index: 10; +} + +.plugin-editor-window-app .nam-product { + height: calc(100vh - 42px); + min-height: 0; + overflow: hidden; +} + +.builtin-plugin-panel[data-kind="nam"] { + min-height: 0; + overflow: hidden; +} + +.nam-product { + grid-template-rows: auto auto minmax(0, 1fr); + min-height: min(820px, calc(100vh - 120px)); + overflow: hidden; +} + +.nam-product:has(.nam-slot-browser) { + grid-template-rows: auto auto minmax(118px, auto) minmax(0, 1fr); +} + +.nam-product-topbar { + grid-template-columns: + minmax(170px, 1.05fr) + minmax(190px, 1.25fr) + auto + auto + auto + minmax(92px, 0.52fr) + minmax(92px, 0.52fr) + minmax(92px, 0.52fr); + padding: 9px; +} + +.nam-view-tabs { + display: inline-flex; + align-items: center; + gap: 4px; + padding: 3px; + border: 1px solid rgba(255, 255, 255, 0.09); + border-radius: 8px; + background: rgba(0, 0, 0, 0.24); +} + +.nam-view-tabs button { + min-height: 28px; + padding: 0 10px; + border: 0; + border-radius: 6px; + background: transparent; + color: rgba(226, 232, 240, 0.68); + font-size: 11px; + font-weight: 900; + cursor: pointer; +} + +.nam-view-tabs button[data-active="true"] { + border: 1px solid rgba(142, 245, 194, 0.34); + color: #d1fae5; + background: + linear-gradient(180deg, rgba(69, 179, 107, 0.22), rgba(0, 0, 0, 0.18)), + #101211; + box-shadow: + inset 0 1px 0 rgba(255, 255, 255, 0.06), + 0 0 0 1px rgba(142, 245, 194, 0.08); +} + +.nam-save-tone-topbar, +.nam-library-cta, +.nam-primary-stage-action { + min-height: 32px; + display: inline-flex; + align-items: center; + justify-content: center; + gap: 7px; + padding: 0 12px; + border: 1px solid rgba(142, 245, 194, 0.34); + border-radius: 7px; + color: #d1fae5; + background: + radial-gradient(circle at 20% 0%, rgba(142, 245, 194, 0.18), transparent 38%), + linear-gradient(180deg, rgba(69, 179, 107, 0.2), rgba(7, 10, 8, 0.94)), + #101211; + box-shadow: + inset 0 1px 0 rgba(255, 255, 255, 0.06), + 0 10px 22px rgba(0, 0, 0, 0.18); + font-size: 11px; + font-weight: 950; + white-space: nowrap; + cursor: pointer; +} + +.nam-save-tone-topbar { + border-color: rgba(245, 200, 106, 0.44); + color: #fff7d6; + background: + radial-gradient(circle at 18% 0%, rgba(245, 200, 106, 0.22), transparent 42%), + linear-gradient(180deg, rgba(156, 112, 36, 0.28), rgba(7, 7, 6, 0.94)), + #14100a; +} + +.nam-library-cta[data-active="true"], +.nam-save-tone-topbar:hover:not(:disabled), +.nam-library-cta:hover, +.nam-primary-stage-action:hover { + border-color: rgba(142, 245, 194, 0.58); + background: + radial-gradient(circle at 20% 0%, rgba(142, 245, 194, 0.26), transparent 38%), + linear-gradient(180deg, rgba(69, 179, 107, 0.3), rgba(7, 10, 8, 0.96)), + #101211; +} + +.nam-save-tone-topbar:hover:not(:disabled) { + border-color: rgba(245, 200, 106, 0.64); + background: + radial-gradient(circle at 18% 0%, rgba(245, 200, 106, 0.3), transparent 42%), + linear-gradient(180deg, rgba(156, 112, 36, 0.36), rgba(7, 7, 6, 0.96)), + #171108; +} + +.nam-save-tone-topbar:disabled { + cursor: wait; + opacity: 0.72; +} + +.nam-tuner-strip { + min-width: 0; + min-height: 34px; + display: grid; + grid-template-columns: auto minmax(0, 1fr) auto; + align-items: center; + gap: 7px; + padding: 0 9px; + border: 1px solid rgba(142, 245, 194, 0.18); + border-radius: 8px; + background: + linear-gradient(180deg, rgba(69, 179, 107, 0.08), rgba(0, 0, 0, 0.16)), + #101211; + color: #8ef5c2; +} + +.nam-tuner-strip span { + overflow: hidden; + color: rgba(226, 232, 240, 0.66); + font-size: 10px; + font-weight: 900; + text-transform: uppercase; + text-overflow: ellipsis; + white-space: nowrap; +} + +.nam-tuner-strip strong { + color: #f8fafc; + font-size: 12px; + font-variant-numeric: tabular-nums; +} + +.nam-product-main { + min-height: 0; + overflow: hidden; +} + +.nam-rack-stage-view { + height: 100%; + min-height: 0; + display: grid; + grid-template-rows: minmax(0, 1fr) auto; + grid-template-columns: minmax(0, 1fr) minmax(190px, 0.24fr); + gap: 10px; +} + +.nam-stage-hero { + min-height: 0; + display: grid; + grid-template-columns: minmax(0, 1fr); + grid-template-rows: auto minmax(0, 1fr); + gap: 10px; + padding: 12px; + border: 1px solid rgba(236, 196, 110, 0.15); + border-radius: 8px; + background: + radial-gradient(circle at 70% 18%, rgba(245, 200, 106, 0.12), transparent 34%), + linear-gradient(180deg, rgba(26, 26, 24, 0.98), rgba(8, 8, 7, 0.98)); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.055); +} + +.nam-stage-hero-head { + display: grid; + grid-template-columns: minmax(0, 1fr) auto; + align-items: center; + gap: 12px; +} + +.nam-module-panel { + position: relative; + min-height: 0; + display: grid; + grid-template-columns: minmax(190px, 0.32fr) minmax(0, 0.24fr) minmax(0, 1fr); + align-items: center; + gap: 22px; + padding: clamp(18px, 2.2vw, 30px); + overflow: hidden; + border: 1px solid rgba(236, 196, 110, 0.18); + border-radius: 8px; + background: + linear-gradient(135deg, rgba(245, 200, 106, 0.13), transparent 28%), + linear-gradient(180deg, #242424, #0d0d0d); + box-shadow: + inset 0 1px 0 rgba(255, 255, 255, 0.07), + inset 0 -42px 68px rgba(0, 0, 0, 0.38); +} + +.nam-module-copy { + display: grid; + gap: 8px; + min-width: 0; +} + +.nam-module-copy span { + color: #8ef5c2; + font-size: 10px; + font-weight: 900; + text-transform: uppercase; +} + +.nam-module-copy strong { + color: #f8fafc; + font-size: clamp(20px, 2vw, 30px); + line-height: 1.1; +} + +.nam-module-copy small { + color: rgba(226, 232, 240, 0.62); + font-size: 12px; + line-height: 1.45; +} + +.nam-module-chips { + display: flex; + flex-wrap: wrap; + gap: 6px; +} + +.nam-module-chips span { + width: fit-content; + padding: 4px 8px; + border: 1px solid rgba(142, 245, 194, 0.18); + border-radius: 999px; + color: #8ef5c2; + background: rgba(69, 179, 107, 0.08); + font-size: 10px; + font-weight: 900; + text-transform: uppercase; +} + +.nam-stage-sidebar { + min-width: 0; + display: grid; + align-content: start; + gap: 10px; + padding: 12px; + border: 1px solid rgba(255, 255, 255, 0.09); + border-radius: 8px; + background: linear-gradient(180deg, rgba(30, 31, 29, 0.96), rgba(10, 10, 9, 0.98)); +} + +.nam-stage-sidebar > div { + display: grid; + gap: 4px; + padding: 10px; + border: 1px solid rgba(236, 196, 110, 0.14); + border-radius: 7px; + background: rgba(0, 0, 0, 0.18); +} + +.nam-stage-sidebar span { + color: rgba(226, 232, 240, 0.56); + font-size: 10px; + font-weight: 900; + text-transform: uppercase; +} + +.nam-stage-sidebar strong { + overflow: hidden; + color: #f8fafc; + font-size: 12px; + text-overflow: ellipsis; + white-space: nowrap; +} + +.nam-rack-utility-strip { + grid-column: 1 / -1; + min-width: 0; + display: grid; + grid-template-columns: repeat(6, minmax(80px, 1fr)) auto; + align-items: center; + gap: 6px; + padding: 8px; + border: 1px solid rgba(255, 255, 255, 0.085); + border-radius: 8px; + background: + linear-gradient(180deg, rgba(28, 29, 28, 0.96), rgba(10, 10, 9, 0.98)), + #10100f; +} + +.nam-rack-utility-strip span, +.nam-rack-utility-strip button { + min-width: 0; + min-height: 28px; + display: inline-flex; + align-items: center; + justify-content: center; + gap: 6px; + padding: 0 8px; + border: 1px solid rgba(255, 255, 255, 0.075); + border-radius: 6px; + color: rgba(226, 232, 240, 0.72); + background: rgba(0, 0, 0, 0.2); + font-size: 10px; + font-weight: 850; + white-space: nowrap; +} + +.nam-rack-utility-strip span { + overflow: hidden; + text-overflow: ellipsis; +} + +.nam-rack-utility-strip svg { + flex: 0 0 auto; + color: #f5c86a; +} + +.nam-rack-utility-strip button { + cursor: pointer; +} + +.nam-rack-utility-strip button:hover { + border-color: rgba(245, 200, 106, 0.32); + color: #f8fafc; + background: rgba(245, 200, 106, 0.08); +} + +.nam-browser-drawer-full, +.nam-advanced-view { + height: 100%; + min-height: 0; + overflow: hidden; +} + +.nam-browser-drawer-full { + grid-template-rows: auto minmax(0, 1fr); +} + +.nam-browser-drawer-full .nam-explorer { + height: 100%; + min-height: 0; + grid-template-columns: minmax(205px, 0.52fr) minmax(500px, 1.35fr) minmax(330px, 0.7fr); +} + +.nam-browser-drawer-full .nam-explorer-sidebar, +.nam-browser-drawer-full .nam-explorer-main, +.nam-browser-drawer-full .nam-detail { + min-height: 0; + overflow: auto; +} + +.nam-browser-drawer-full .nam-results { + max-height: none; + min-height: 0; +} + +.nam-browser-drawer-full .nam-results[data-view="cards"] { + grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); +} + +.nam-browser-drawer-full .nam-result-card[data-view="cards"] { + min-height: 244px; +} + +.nam-browser-drawer-full .nam-card-art { + min-height: 142px; +} + +.nam-advanced-view { + display: grid; + align-content: start; + gap: 10px; + padding-right: 4px; + overflow: auto; +} + +.nam-advanced-header { + display: flex; + align-items: center; + gap: 9px; + padding: 11px 12px; + border: 1px solid rgba(245, 200, 106, 0.14); + border-radius: 8px; + background: rgba(0, 0, 0, 0.22); +} + +.nam-advanced-header strong { + display: block; + color: #f8fafc; + font-size: 13px; +} + +.nam-advanced-header small { + color: rgba(226, 232, 240, 0.58); + font-size: 11px; +} + +.nam-chain { + position: relative; + isolation: isolate; + background: + linear-gradient(90deg, transparent 0 4%, rgba(245, 200, 106, 0.16) 4% 96%, transparent 96%), + linear-gradient(180deg, rgba(22, 23, 21, 0.98), rgba(8, 8, 7, 0.98)); +} + +.nam-chain::before { + content: ""; + position: absolute; + z-index: 0; + left: 38px; + right: 38px; + top: 50%; + height: 2px; + border-radius: 999px; + background: linear-gradient(90deg, rgba(245, 200, 106, 0.08), rgba(245, 200, 106, 0.34), rgba(245, 200, 106, 0.08)); + transform: translateY(-50%); +} + +.nam-chain-module { + z-index: 1; + background: + radial-gradient(circle at 16% 0%, rgba(255, 255, 255, 0.065), transparent 36%), + linear-gradient(180deg, rgba(32, 33, 31, 0.98), rgba(12, 12, 11, 0.98)); + box-shadow: + inset 0 1px 0 rgba(255, 255, 255, 0.07), + inset 0 -14px 24px rgba(0, 0, 0, 0.2); +} + +.nam-chain-module[data-active="true"] { + background: + radial-gradient(circle at 16% 0%, rgba(142, 245, 194, 0.16), transparent 38%), + linear-gradient(180deg, rgba(28, 43, 34, 0.98), rgba(10, 16, 13, 0.98)); +} + +.nam-chain-module[data-selected="true"] { + transform: translateY(-1px); + border-color: rgba(255, 216, 122, 0.92); + background: + radial-gradient(circle at 20% 0%, rgba(245, 200, 106, 0.24), transparent 42%), + linear-gradient(180deg, rgba(54, 43, 22, 0.98), rgba(13, 12, 9, 0.98)); + box-shadow: + inset 0 0 0 2px rgba(255, 216, 122, 0.5), + 0 12px 28px rgba(0, 0, 0, 0.26), + 0 0 34px rgba(245, 200, 106, 0.2); +} + +.nam-chain-icon { + border-radius: 8px; + background: + radial-gradient(circle at 50% 15%, rgba(255, 255, 255, 0.14), transparent 42%), + linear-gradient(180deg, rgba(245, 200, 106, 0.14), rgba(0, 0, 0, 0.18)); +} + +.nam-stage-hero { + position: relative; + isolation: isolate; + overflow: hidden; + background: + radial-gradient(circle at 72% 10%, rgba(245, 200, 106, 0.16), transparent 30%), + radial-gradient(circle at 22% 92%, rgba(142, 245, 194, 0.07), transparent 34%), + linear-gradient(180deg, rgba(24, 24, 22, 0.99), rgba(6, 6, 5, 0.99)); +} + +.nam-stage-hero::before { + content: ""; + position: absolute; + inset: 0; + z-index: -1; + pointer-events: none; + background: + linear-gradient(90deg, rgba(255, 255, 255, 0.03) 0 1px, transparent 1px 18px), + linear-gradient(180deg, rgba(255, 255, 255, 0.035), transparent 22%, rgba(0, 0, 0, 0.28)); + opacity: 0.46; +} + +.nam-module-panel { + background: + radial-gradient(circle at 18% 15%, rgba(245, 200, 106, 0.16), transparent 34%), + radial-gradient(circle at 86% 82%, rgba(142, 245, 194, 0.08), transparent 30%), + linear-gradient(180deg, #242522, #080807); +} + +.nam-product[data-view="rack"] .nam-module-panel { + grid-template-columns: minmax(250px, 0.34fr) minmax(180px, 0.24fr) minmax(0, 1fr); +} + +.nam-product[data-view="rack"] .nam-module-panel[data-module="gate"], +.nam-product[data-view="rack"] .nam-module-panel[data-module="eq"], +.nam-product[data-view="rack"] .nam-module-panel[data-module="mod"], +.nam-product[data-view="rack"] .nam-module-panel[data-module="delay"], +.nam-product[data-view="rack"] .nam-module-panel[data-module="reverb"] { + background: + radial-gradient(circle at 16% 18%, rgba(245, 200, 106, 0.16), transparent 30%), + radial-gradient(circle at 84% 80%, rgba(69, 179, 107, 0.1), transparent 34%), + linear-gradient(180deg, #20211f, #070707); +} + +.nam-product[data-view="rack"] .nam-module-copy { + align-content: center; + gap: 10px; +} + +.nam-product[data-view="rack"] .nam-module-copy > span { + color: #8ef5c2; + font-size: 10px; + font-weight: 900; + text-transform: uppercase; +} + +.nam-product[data-view="rack"] .nam-module-copy strong { + font-size: clamp(22px, 2.2vw, 32px); +} + +.nam-product[data-view="rack"] .nam-module-copy small { + max-width: 300px; +} + +.nam-product[data-view="rack"] .nam-module-chips span { + color: #8ef5c2; + letter-spacing: 0; +} + +.nam-browser-drawer-full .nam-explorer { + background: + radial-gradient(circle at 28% 0%, rgba(245, 200, 106, 0.06), transparent 34%), + linear-gradient(180deg, rgba(15, 15, 14, 0.98), rgba(7, 7, 6, 0.98)); +} + +.nam-result-card { + border-color: rgba(236, 196, 110, 0.1); + background: + linear-gradient(180deg, rgba(34, 35, 32, 0.98), rgba(12, 12, 11, 0.98)), + #151515; +} + +.nam-results[data-view="cards"] { + gap: 10px; +} + +.nam-browser-drawer-full .nam-results[data-view="cards"] { + grid-template-columns: repeat(auto-fit, minmax(270px, 1fr)); +} + +.nam-browser-drawer-full .nam-result-card[data-view="cards"] { + min-height: 286px; +} + +.nam-card-art { + min-height: 154px; + border-color: rgba(236, 196, 110, 0.14); + box-shadow: + inset 0 -64px 56px rgba(0, 0, 0, 0.62), + 0 14px 28px rgba(0, 0, 0, 0.2); +} + +.nam-result-card[data-view="list"] { + min-height: 104px; +} + +.nam-result-card[data-view="list"] .nam-card-art { + min-height: 86px; + aspect-ratio: 16 / 10; +} + +.nam-detail-art { + min-height: 218px; + border-color: rgba(236, 196, 110, 0.16); + box-shadow: + inset 0 -84px 70px rgba(0, 0, 0, 0.66), + 0 18px 36px rgba(0, 0, 0, 0.24); +} + +.nam-result-card[data-provider-art="true"] .nam-card-art::before, +.nam-result-card[data-provider-art="true"] .nam-card-art::after, +.nam-detail-art[data-provider-art="true"]::before, +.nam-detail-art[data-provider-art="true"]::after { + display: none; +} + +.nam-result-card[data-has-art="true"] .nam-card-art, +.nam-detail-art[data-has-art="true"], +.nam-browse-hero-art[data-has-art="true"] { + background-image: var(--nam-card-profile-image); +} + +.nam-result-card[data-provider-art="false"] .nam-card-art::before, +.nam-result-card[data-provider-art="false"] .nam-card-art::after, +.nam-detail-art[data-provider-art="false"]::before, +.nam-detail-art[data-provider-art="false"]::after { + display: none; +} + +.nam-result-card[data-provider-art="false"] .nam-card-art, +.nam-detail-art[data-provider-art="false"], +.nam-browse-hero-art[data-provider-art="false"] { + background-blend-mode: color, soft-light, normal; +} + +.nam-result-card[data-provider-art="false"][data-fallback-profile="clean"] .nam-card-art, +.nam-detail-art[data-provider-art="false"][data-fallback-profile="clean"], +.nam-browse-hero-art[data-provider-art="false"][data-fallback-profile="clean"] { + background-image: + linear-gradient(135deg, rgba(142, 245, 194, 0.22), transparent 46%), + radial-gradient(circle at 80% 18%, rgba(245, 200, 106, 0.13), transparent 34%), + var(--nam-card-profile-image, none); + border-color: rgba(142, 245, 194, 0.24); +} + +.nam-result-card[data-provider-art="false"][data-fallback-profile="crunch"] .nam-card-art, +.nam-detail-art[data-provider-art="false"][data-fallback-profile="crunch"], +.nam-browse-hero-art[data-provider-art="false"][data-fallback-profile="crunch"] { + background-image: + linear-gradient(135deg, rgba(245, 200, 106, 0.28), transparent 44%), + radial-gradient(circle at 78% 22%, rgba(248, 113, 113, 0.12), transparent 34%), + var(--nam-card-profile-image, none); + border-color: rgba(245, 200, 106, 0.28); +} + +.nam-result-card[data-provider-art="false"][data-fallback-profile="high-gain"] .nam-card-art, +.nam-detail-art[data-provider-art="false"][data-fallback-profile="high-gain"], +.nam-browse-hero-art[data-provider-art="false"][data-fallback-profile="high-gain"] { + background-image: + linear-gradient(135deg, rgba(248, 113, 113, 0.22), transparent 48%), + radial-gradient(circle at 76% 16%, rgba(196, 181, 253, 0.15), transparent 34%), + var(--nam-card-profile-image, none); + border-color: rgba(248, 113, 113, 0.26); +} + +.nam-result-card[data-provider-art="false"][data-fallback-profile="pedal"] .nam-card-art, +.nam-detail-art[data-provider-art="false"][data-fallback-profile="pedal"], +.nam-browse-hero-art[data-provider-art="false"][data-fallback-profile="pedal"] { + background-image: + radial-gradient(circle at 18% 12%, rgba(125, 211, 252, 0.2), transparent 34%), + linear-gradient(135deg, rgba(69, 179, 107, 0.16), transparent 52%), + var(--nam-card-profile-image, none); + border-color: rgba(125, 211, 252, 0.24); +} + +.nam-result-card[data-provider-art="false"][data-fallback-profile="cab"] .nam-card-art, +.nam-detail-art[data-provider-art="false"][data-fallback-profile="cab"], +.nam-browse-hero-art[data-provider-art="false"][data-fallback-profile="cab"] { + background-image: + linear-gradient(135deg, rgba(148, 163, 184, 0.2), transparent 48%), + radial-gradient(circle at 78% 20%, rgba(245, 200, 106, 0.1), transparent 34%), + var(--nam-card-profile-image, none); + border-color: rgba(148, 163, 184, 0.26); +} + +.nam-product[data-view="rack"] .nam-rack-stage-view { + grid-template-columns: minmax(0, 1fr); + grid-template-rows: minmax(0, 1fr) auto auto; + gap: 8px; +} + +.nam-product[data-view="rack"] .nam-stage-hero { + padding: 10px; +} + +.nam-product[data-view="rack"] .nam-stage-hero-head { + min-height: 44px; + padding: 0 2px; +} + +.nam-product[data-view="rack"] .nam-focus-copy { + display: grid; + gap: 2px; +} + +.nam-product[data-view="rack"] .nam-focus-copy strong { + font-size: clamp(16px, 1.45vw, 22px); + line-height: 1.05; +} + +.nam-product[data-view="rack"] .nam-focus-copy small { + max-width: 620px; +} + +.nam-product[data-view="rack"] .nam-stage-sidebar { + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 6px; + padding: 6px; + background: + linear-gradient(180deg, rgba(22, 23, 21, 0.98), rgba(8, 8, 7, 0.98)), + #10100f; +} + +.nam-product[data-view="rack"] .nam-stage-sidebar > div { + grid-template-columns: auto minmax(0, 1fr); + align-items: center; + column-gap: 8px; + padding: 7px 9px; + min-height: 34px; +} + +.nam-product[data-view="rack"] .nam-stage-sidebar span { + min-width: 58px; +} + +.nam-product[data-view="rack"] .nam-stage-sidebar strong { + text-align: right; +} + +.nam-product[data-view="rack"] .nam-rack-utility-strip { + padding: 6px; +} + +.nam-product[data-view="rack"] .nam-rack-utility-strip span, +.nam-product[data-view="rack"] .nam-rack-utility-strip button { + min-height: 25px; +} + +.nam-product-topbar { + grid-template-columns: + minmax(170px, 1.05fr) + minmax(190px, 1.25fr) + auto + auto + minmax(118px, 0.64fr) + minmax(118px, 0.64fr); +} + +.nam-mini-meter { + grid-template-columns: auto minmax(0, 1fr) auto; + align-items: center; + column-gap: 7px; + row-gap: 3px; +} + +.nam-mini-meter span { + color: rgba(226, 232, 240, 0.72); +} + +.nam-mini-meter strong { + color: rgba(226, 232, 240, 0.56); + font-size: 10px; + font-weight: 800; + font-variant-numeric: tabular-nums; + text-align: right; +} + +.nam-mini-meter i { + height: 10px; +} + +.nam-mini-meter i::after { + transition: width 110ms linear; +} + +.nam-mini-meter i > b { + transition: left 150ms linear, opacity 120ms ease; +} + +.nam-mini-meter[data-active="false"] i::after { + opacity: 0.28; +} + +.nam-mini-meter[data-silent="true"] i::after { + opacity: 0; +} + +.nam-mini-meter[data-clip="true"] span { + color: #fb7185; +} + +.nam-rack-control-knob { + position: relative; + touch-action: none; + user-select: none; + cursor: ns-resize; +} + +.nam-rack-control-knob:focus-within .nam-rack-knob-cap { + outline: 2px solid rgba(142, 245, 194, 0.54); + outline-offset: 3px; +} + +.nam-rack-control-knob .nam-rack-knob-input { + position: absolute; + width: 1px; + height: 1px; + opacity: 0; + pointer-events: none; +} + +.nam-rack-knob-cap { + background: + radial-gradient(circle at 34% 28%, rgba(255, 255, 255, 0.26), transparent 17%), + radial-gradient(circle at 50% 54%, #1a1a1a 0 43%, #070707 44% 58%, transparent 60%), + conic-gradient( + from -135deg, + rgba(255, 217, 120, 0.1) 0 var(--nam-knob-fill-start), + #ffd978 var(--nam-knob-fill-start) var(--nam-knob-fill-end), + rgba(65, 65, 65, 0.92) var(--nam-knob-fill-end) 75%, + transparent 75% 100% + ); +} + +.nam-product[data-view="rack"] .nam-rack-stage-view[data-module="amp"] { + grid-template-columns: minmax(0, 1fr); + grid-template-rows: minmax(0, 1fr) auto auto; +} + +.nam-product[data-view="rack"] .nam-rack-stage-view[data-module="amp"] .nam-stage-hero { + min-height: 0; +} + +.nam-product[data-view="rack"] .nam-rack-stage-view[data-module="amp"] .nam-stage-sidebar { + grid-template-columns: repeat(3, minmax(0, 1fr)); +} + +@media (max-width: 900px) { + .fx-chain-panel-two-column { + width: 98%; + height: 92vh; + } + + .fx-chain-two-column-content { + grid-template-columns: 1fr; + grid-template-rows: minmax(260px, 44vh) minmax(0, 1fr); + } + + .fx-chain-loaded-column { + border-right: 0; + border-bottom: 1px solid #404040; + } + + .builtin-param-grid, + .builtin-macro-strip { + grid-template-columns: repeat(auto-fit, minmax(136px, 1fr)); + } + + .nam-product-topbar, + .nam-rig-stage, + .nam-rack-stage-view, + .nam-browser-drawer-full .nam-explorer, + .nam-explorer { + grid-template-columns: 1fr; + } + + .nam-product-main { + overflow: auto; + } + + .nam-rack-stage-view, + .nam-browser-drawer-full .nam-explorer { + height: auto; + min-height: 100%; + } + + .nam-stage-hero { + min-height: 540px; + } + + .nam-stage-hero-head, + .nam-module-panel { + grid-template-columns: 1fr; + } + + .nam-stage-sidebar { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + + .nam-rack-utility-strip { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .nam-browser-drawer-full { + overflow: auto; + } + + .nam-browser-drawer-full .nam-explorer-sidebar, + .nam-browser-drawer-full .nam-explorer-main, + .nam-browser-drawer-full .nam-detail { + overflow: visible; + } + + .nam-chain { + grid-template-columns: 1fr; + } + + .nam-chain-slots { + grid-template-columns: repeat(4, minmax(80px, 1fr)); + } + + .nam-auth-grid { + grid-template-columns: 1fr; + } +} + +@media (min-width: 901px) and (max-height: 840px) { + .nam-product { + gap: 8px; + padding: 8px; + min-height: calc(100vh - 78px); + } + + .nam-product-topbar { + padding: 7px; + } + + .nam-stage-hero { + gap: 8px; + padding: 10px; + } + +} + +@media (max-width: 520px) { + .builtin-plugin-panel { + padding: 8px; + } + + .builtin-visual { + height: 112px; + } + + .builtin-param-grid, + .builtin-macro-strip { + grid-template-columns: 1fr; + } + + .nam-product { + padding: 8px; + } + + .nam-chain { + grid-template-columns: 1fr; + } + + .nam-chain-slots { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + + .nam-filters, + .nam-search-row, + .nam-result-card[data-view="list"] { + grid-template-columns: 1fr; + } + + .nam-filters label { + grid-column: 1 / -1; + } + + .nam-results[data-view="cards"] { + grid-template-columns: 1fr; + } + + .nam-stage-sidebar { + grid-template-columns: 1fr; + } + + .nam-rack-utility-strip { + grid-template-columns: 1fr; + } + + .nam-stage-hero { + min-height: 620px; + } + + .nam-module-panel { + gap: 14px; + } + + .nam-detail dl > div { + grid-template-columns: 1fr; + gap: 2px; + } +} + +.nam-shelves button[data-active="true"] { + position: relative; + border-color: rgba(245, 200, 106, 0.4); + color: #f8fafc; + background: + linear-gradient(90deg, rgba(245, 200, 106, 0.16), rgba(69, 179, 107, 0.08)), + rgba(255, 255, 255, 0.04); + box-shadow: inset 3px 0 0 rgba(245, 200, 106, 0.78); +} + +.nam-browse-hero { + position: relative; + isolation: isolate; + display: grid; + grid-template-columns: minmax(210px, 0.44fr) minmax(0, 1fr) minmax(160px, auto); + align-items: stretch; + gap: 14px; + min-height: 178px; + padding: 12px; + overflow: hidden; + border: 1px solid rgba(245, 200, 106, 0.24); + border-radius: 8px; + background: + radial-gradient(circle at 16% 12%, rgba(245, 200, 106, 0.18), transparent 32%), + radial-gradient(circle at 92% 86%, rgba(69, 179, 107, 0.11), transparent 34%), + linear-gradient(135deg, rgba(35, 34, 30, 0.98), rgba(8, 8, 7, 0.99)); + box-shadow: + inset 0 1px 0 rgba(255, 255, 255, 0.055), + 0 20px 44px rgba(0, 0, 0, 0.28); +} + +.nam-browse-hero::before { + content: ""; + position: absolute; + inset: 0; + z-index: -1; + background: + linear-gradient(90deg, rgba(255, 255, 255, 0.035) 0 1px, transparent 1px 24px), + linear-gradient(180deg, rgba(255, 255, 255, 0.04), transparent 36%, rgba(0, 0, 0, 0.32)); + opacity: 0.48; + pointer-events: none; +} + +.nam-browse-hero[data-audition="true"] { + border-color: rgba(142, 245, 194, 0.38); + background: + radial-gradient(circle at 16% 12%, rgba(142, 245, 194, 0.15), transparent 32%), + radial-gradient(circle at 92% 86%, rgba(245, 200, 106, 0.14), transparent 34%), + linear-gradient(135deg, rgba(24, 36, 29, 0.98), rgba(7, 9, 8, 0.99)); +} + +.nam-browse-hero-art { + position: relative; + min-height: 154px; + overflow: hidden; + display: grid; + align-content: end; + gap: 6px; + padding: 12px; + border: 1px solid rgba(245, 200, 106, 0.2); + border-radius: 8px; + background: + radial-gradient(circle at 52% 16%, rgba(245, 200, 106, 0.18), transparent 46%), + linear-gradient(145deg, rgba(48, 45, 35, 0.96), rgba(8, 8, 7, 0.98)); + background-position: center; + background-repeat: no-repeat; + background-size: cover; + box-shadow: + inset 0 -74px 68px rgba(0, 0, 0, 0.7), + 0 18px 34px rgba(0, 0, 0, 0.28); +} + +.nam-browse-hero-art::after { + content: ""; + position: absolute; + inset: 0; + background: + linear-gradient(180deg, rgba(0, 0, 0, 0.04), transparent 35%, rgba(0, 0, 0, 0.54)); + pointer-events: none; +} + +.nam-browse-hero-art span, +.nam-browse-hero-art strong { + position: relative; + z-index: 1; + width: fit-content; + max-width: 100%; + overflow: hidden; + padding: 3px 8px; + border-radius: 999px; + background: rgba(0, 0, 0, 0.6); + color: #f8fafc; + font-size: 10px; + font-weight: 900; + text-overflow: ellipsis; + white-space: nowrap; +} + +.nam-browse-hero-art span { + border: 1px solid rgba(142, 245, 194, 0.24); + color: #8ef5c2; +} + +.nam-browse-hero-copy { + min-width: 0; + display: grid; + align-content: center; + gap: 7px; +} + +.nam-browse-hero-copy > span { + color: #8ef5c2; + font-size: 10px; + font-weight: 950; + text-transform: uppercase; +} + +.nam-browse-hero-copy > strong { + display: -webkit-box; + overflow: hidden; + color: #f8fafc; + font-size: clamp(24px, 2.6vw, 40px); + line-height: 0.98; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} + +.nam-browse-hero-copy > small { + min-width: 0; + overflow: hidden; + color: rgba(226, 232, 240, 0.68); + font-size: 12px; + line-height: 1.35; + text-overflow: ellipsis; + white-space: nowrap; +} + +.nam-browse-hero-tags, +.nam-browse-hero-stats { + display: flex; + flex-wrap: wrap; + gap: 6px; +} + +.nam-browse-hero-tags span, +.nam-browse-hero-stats span { + max-width: 150px; + overflow: hidden; + padding: 4px 8px; + border: 1px solid rgba(142, 245, 194, 0.14); + border-radius: 999px; + color: rgba(226, 232, 240, 0.82); + background: rgba(0, 0, 0, 0.24); + font-size: 10px; + font-weight: 850; + text-overflow: ellipsis; + white-space: nowrap; +} + +.nam-browse-hero-tags span:first-child { + color: #8ef5c2; +} + +.nam-browse-hero-side { + min-width: 0; + display: grid; + align-content: space-between; + justify-items: end; + gap: 10px; +} + +.nam-browse-hero-stats { + justify-content: flex-end; +} + +.nam-browse-hero-actions { + display: flex; + align-items: center; + justify-content: flex-end; + flex-wrap: wrap; + gap: 7px; +} + +.nam-browse-hero-actions > button { + min-height: 34px; + font-weight: 900; +} + +.nam-browse-hero-actions > button:first-child:not(:disabled) { + border-color: rgba(142, 245, 194, 0.44); + background: + linear-gradient(180deg, rgba(69, 179, 107, 0.3), rgba(7, 10, 8, 0.96)), + #101211; + color: #d1fae5; + box-shadow: + inset 0 1px 0 rgba(255, 255, 255, 0.06), + 0 0 0 1px rgba(142, 245, 194, 0.1), + 0 10px 22px rgba(0, 0, 0, 0.22); + font-weight: 900; +} + +.nam-browse-hero-actions > button:first-child:not(:disabled):hover { + border-color: rgba(142, 245, 194, 0.62); + filter: brightness(1.04); +} + +.nam-save-tone-modal { + color: #e2e8f0; +} + +.nam-save-tone-form { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 12px; + padding: 4px; +} + +.nam-save-tone-form > :first-child, +.nam-save-tone-form textarea, +.nam-save-tone-form .nam-save-tone-favorite { + grid-column: 1 / -1; +} + +.nam-save-tone-form input, +.nam-save-tone-form textarea { + color: #e2e8f0; +} + +.nam-save-tone-favorite { + display: inline-flex; + align-items: center; + gap: 8px; + color: rgba(226, 232, 240, 0.78); + font-size: 12px; + font-weight: 850; +} + +.nam-save-tone-favorite input { + width: 16px; + height: 16px; + accent-color: #45b36b; +} + +.nam-selected-tone-rail { + display: grid; + grid-template-columns: minmax(112px, 0.22fr) minmax(0, 1fr) auto; + align-items: center; + gap: 12px; + min-height: 104px; + padding: 10px; + border: 1px solid rgba(245, 200, 106, 0.24); + border-radius: 8px; + background: + radial-gradient(circle at 12% 20%, rgba(245, 200, 106, 0.14), transparent 32%), + radial-gradient(circle at 88% 72%, rgba(69, 179, 107, 0.1), transparent 34%), + linear-gradient(180deg, rgba(30, 29, 25, 0.98), rgba(8, 8, 7, 0.98)); + box-shadow: + inset 0 1px 0 rgba(255, 255, 255, 0.055), + 0 16px 30px rgba(0, 0, 0, 0.22); +} + +.nam-selected-tone-rail[data-audition="true"] { + border-color: rgba(142, 245, 194, 0.34); + background: + radial-gradient(circle at 12% 20%, rgba(142, 245, 194, 0.13), transparent 32%), + radial-gradient(circle at 88% 72%, rgba(245, 200, 106, 0.12), transparent 34%), + linear-gradient(180deg, rgba(24, 34, 28, 0.98), rgba(7, 9, 8, 0.98)); +} + +.nam-selected-tone-art { + position: relative; + min-height: 84px; + overflow: hidden; + display: grid; + align-content: end; + gap: 5px; + padding: 9px; + border: 1px solid rgba(245, 200, 106, 0.18); + border-radius: 7px; + background: + radial-gradient(circle at 50% 24%, rgba(245, 200, 106, 0.18), transparent 48%), + linear-gradient(145deg, rgba(45, 42, 33, 0.96), rgba(8, 8, 7, 0.98)); + background-position: center; + background-repeat: no-repeat; + background-size: cover; + box-shadow: inset 0 -46px 44px rgba(0, 0, 0, 0.62); +} + +.nam-selected-tone-art span, +.nam-selected-tone-art strong { + position: relative; + z-index: 1; + width: fit-content; + max-width: 100%; + overflow: hidden; + padding: 2px 7px; + border-radius: 999px; + background: rgba(0, 0, 0, 0.58); + color: #f8fafc; + font-size: 10px; + font-weight: 900; + text-overflow: ellipsis; + white-space: nowrap; +} + +.nam-selected-tone-art span { + color: #8ef5c2; +} + +.nam-selected-tone-copy { + min-width: 0; + display: grid; + gap: 4px; +} + +.nam-selected-tone-copy span { + color: #8ef5c2; + font-size: 10px; + font-weight: 900; + text-transform: uppercase; +} + +.nam-selected-tone-copy strong { + min-width: 0; + overflow: hidden; + color: #f8fafc; + font-size: clamp(17px, 1.5vw, 23px); + line-height: 1.08; + text-overflow: ellipsis; + white-space: nowrap; +} + +.nam-selected-tone-copy small { + min-width: 0; + overflow: hidden; + color: rgba(226, 232, 240, 0.66); + font-size: 12px; + text-overflow: ellipsis; + white-space: nowrap; +} + +.nam-selected-tone-actions { + display: flex; + align-items: center; + justify-content: flex-end; + flex-wrap: wrap; + gap: 7px; +} + +.nam-selected-tone-actions > button { + min-height: 34px; + font-weight: 900; +} + +.nam-selected-tone-actions > button:first-child:not(:disabled), +.nam-detail-actions > button:first-child:not(:disabled) { + border-color: rgba(142, 245, 194, 0.44); + background: + linear-gradient(180deg, rgba(69, 179, 107, 0.3), rgba(7, 10, 8, 0.96)), + #101211; + color: #d1fae5; + box-shadow: + inset 0 1px 0 rgba(255, 255, 255, 0.06), + 0 0 0 1px rgba(142, 245, 194, 0.1), + 0 10px 22px rgba(0, 0, 0, 0.22); + font-weight: 900; +} + +.nam-selected-tone-actions > button:first-child:not(:disabled):hover, +.nam-detail-actions > button:first-child:not(:disabled):hover { + border-color: rgba(142, 245, 194, 0.62); + filter: brightness(1.04); +} + +.nam-result-card[data-view="cards"] { + grid-template-rows: minmax(0, auto) auto auto; +} + +.nam-result-card[data-view="cards"] .nam-result-copy { + display: none; +} + +.nam-card-art > span { + position: absolute; + top: 10px; + left: 10px; +} + +.nam-card-art > strong { + position: absolute; + top: 36px; + left: 10px; + max-width: calc(100% - 56px); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.nam-card-titleplate { + position: relative; + z-index: 2; + display: grid; + gap: 3px; + max-width: min(100%, 360px); + padding: 8px 9px; + border: 1px solid rgba(255, 255, 255, 0.09); + border-radius: 7px; + background: + linear-gradient(180deg, rgba(0, 0, 0, 0.62), rgba(0, 0, 0, 0.38)); + box-shadow: + inset 0 1px 0 rgba(255, 255, 255, 0.055), + 0 12px 22px rgba(0, 0, 0, 0.28); + backdrop-filter: blur(8px); +} + +.nam-card-titleplate b { + display: -webkit-box; + overflow: hidden; + color: #f8fafc; + font-size: 13px; + line-height: 1.18; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} + +.nam-card-titleplate small { + min-width: 0; + overflow: hidden; + color: rgba(226, 232, 240, 0.68); + font-size: 10px; + text-overflow: ellipsis; + white-space: nowrap; +} + +.nam-card-art .nam-card-audition-puck { + margin-top: 1px; +} + +.nam-browser-drawer-full .nam-result-card[data-view="cards"] { + min-height: 278px; +} + +.nam-browser-drawer-full .nam-card-art { + min-height: 176px; +} + +.nam-browser-drawer-full .nam-results[data-view="cards"] { + grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); +} + +.nam-results-header { + display: grid; + grid-template-columns: 98px minmax(0, 1.22fr) minmax(150px, 0.78fr) minmax(112px, 0.48fr) minmax(112px, auto); + align-items: center; + gap: 9px; + padding: 0 10px 2px; + color: rgba(226, 232, 240, 0.44); + font-size: 9px; + font-weight: 900; + text-transform: uppercase; +} + +.nam-result-card[data-view="list"] { + grid-template-columns: 98px minmax(0, 1.22fr) minmax(150px, 0.78fr) minmax(112px, 0.48fr) minmax(112px, auto); + align-items: center; + gap: 9px; + min-height: 104px; + padding: 9px; + background: + linear-gradient(90deg, rgba(255, 255, 255, 0.052), rgba(255, 255, 255, 0.018)), + rgba(0, 0, 0, 0.15); +} + +.nam-result-card[data-view="list"]:hover { + border-color: rgba(245, 200, 106, 0.28); + background: + linear-gradient(90deg, rgba(245, 200, 106, 0.07), rgba(69, 179, 107, 0.03)), + rgba(0, 0, 0, 0.18); +} + +.nam-result-card[data-view="list"] .nam-card-art { + width: 100%; + height: 72px; + min-height: 0; + aspect-ratio: auto; + border-color: rgba(236, 196, 110, 0.12); +} + +.nam-result-card[data-view="list"] .nam-card-titleplate, +.nam-result-card[data-view="list"] .nam-card-audition-puck { + display: none; +} + +.nam-result-card[data-view="list"] .nam-card-art > span { + top: 8px; + left: 8px; +} + +.nam-result-card[data-view="list"] .nam-card-art > strong { + top: auto; + bottom: 8px; + left: 8px; + max-width: calc(100% - 16px); +} + +.nam-result-card[data-view="list"] .nam-result-copy { + gap: 5px; +} + +.nam-result-card[data-view="list"] .nam-result-copy strong { + -webkit-line-clamp: 1; +} + +.nam-result-badges { + min-width: 0; + display: flex; + align-items: center; + flex-wrap: wrap; + gap: 5px; +} + +.nam-result-badges span { + max-width: 132px; + overflow: hidden; + padding: 3px 7px; + border: 1px solid rgba(142, 245, 194, 0.14); + border-radius: 999px; + color: rgba(226, 232, 240, 0.78); + background: rgba(0, 0, 0, 0.22); + font-size: 10px; + font-weight: 850; + text-overflow: ellipsis; + white-space: nowrap; +} + +.nam-result-badges span:first-child { + color: #8ef5c2; +} + +.nam-result-card[data-view="cards"] .nam-result-badges { + display: none; +} + +.nam-result-card[data-view="list"] .nam-stats { + justify-content: flex-start; +} + +.nam-result-card[data-view="list"] .nam-result-actions { + align-self: stretch; + justify-content: flex-end; +} + +@media (max-width: 980px) { + .nam-preset-manager { + left: 12px; + right: 12px; + } + + .nam-preset-manager-grid { + grid-template-columns: 1fr; + } + + .nam-preset-save-fields { + grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); + } + + .nam-user-preset-row { + grid-template-columns: minmax(0, 1fr) repeat(4, 30px); + } + + .nam-browse-hero { + grid-template-columns: minmax(120px, 0.34fr) minmax(0, 1fr); + } + + .nam-browse-hero-side { + grid-column: 1 / -1; + grid-template-columns: minmax(0, 1fr) auto; + align-items: center; + justify-items: stretch; + } + + .nam-browse-hero-stats { + justify-content: flex-start; + } + + .nam-selected-tone-rail { + grid-template-columns: minmax(92px, 0.32fr) minmax(0, 1fr); + } + + .nam-selected-tone-actions { + grid-column: 1 / -1; + justify-content: flex-start; + } + + .nam-library-summary { + grid-template-columns: 1fr; + align-items: start; + } + + .nam-catalog-health, + .nam-active-filters { + justify-content: flex-start; + } +} + +@media (max-width: 520px) { + .nam-browse-hero { + grid-template-columns: 1fr; + } + + .nam-browse-hero-art { + min-height: 150px; + } + + .nam-browse-hero-side { + grid-template-columns: 1fr; + justify-items: start; + } + + .nam-browse-hero-actions, + .nam-browse-hero-stats { + justify-content: flex-start; + } + + .nam-save-tone-form { + grid-template-columns: 1fr; + } + + .nam-user-preset-row { + grid-template-columns: repeat(8, 30px); + } + + .nam-user-preset-row > button:first-child { + grid-column: 1 / -1; + } +} + +.builtin-empty { + padding: 16px 8px; + color: #737373; + font-size: 11px; + text-align: center; +} + +.fx-slot-name:hover { + color: #2563eb; +} + +.fx-remove-btn { + width: 24px; + height: 24px; + display: flex; + align-items: center; + justify-content: center; + background: transparent; + border: 1px solid #404040; + border-radius: 4px; + color: #737373; + font-size: 18px; + cursor: pointer; + transition: all 0.2s; +} + +.fx-remove-btn:hover { + background: #dc2626; + border-color: #dc2626; + color: white; +} + +/* Empty state */ +.fx-empty-state { + text-align: center; + padding: 60px 20px; + color: #737373; +} + +.fx-empty-state p { + margin: 8px 0; +} + +.fx-empty-state .hint { + font-size: 13px; + color: #525252; +} + +/* Old single-column styles (kept for backward compatibility) */ +.fx-chain-panel { + background: #171717; + border: 1px solid #404040; + border-radius: 8px; + width: 90%; + max-width: 600px; + max-height: 80vh; + display: flex; + flex-direction: column; + box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5); +} + +.fx-chain-content { + flex: 1; + overflow-y: auto; + padding: 16px; + background: #0a0a0a; +} + +.fx-slots { + display: flex; + flex-direction: column; + gap: 8px; +} + +.fx-slot { + display: flex; + justify-content: space-between; + align-items: center; + padding: 12px; + background: #1a1a1a; + border: 1px solid #404040; + border-radius: 6px; + transition: all 0.2s; +} + +.fx-slot:hover { + border-color: #2563eb; + background: #1f1f1f; +} + +.fx-info { + flex: 1; +} + +.fx-name { + font-weight: 600; + color: white; + margin-bottom: 4px; +} + +.fx-index { + font-size: 12px; + color: #737373; +} + +.fx-controls { + display: flex; + gap: 8px; +} + +.fx-btn { + padding: 6px 14px; + border: none; + border-radius: 4px; + font-size: 13px; + font-weight: 600; + cursor: pointer; + transition: all 0.2s; +} + +.edit-btn { + background: #2563eb; + color: white; +} + +.edit-btn:hover { + background: #1d4ed8; +} + +.bypass-btn { + background: #f59e0b; + color: white; +} + +.bypass-btn:hover { + background: #d97706; +} + +.remove-btn { + background: #dc2626; + color: white; +} + +.remove-btn:hover { + background: #b91c1c; +} + +.close-btn-small { + background: #404040; + color: white; } .close-btn-small:hover { @@ -879,3 +5287,328 @@ color: #737373; text-align: center; } + +.nam-rack-prompt-modal { + width: min(460px, calc(100vw - 32px)); + border-color: rgba(224, 161, 73, 0.34); + border-radius: 8px; + color: #e9ebee; + background: + radial-gradient(circle at 18% 0%, rgba(224, 161, 73, 0.08), transparent 38%), + linear-gradient(180deg, #171b20, #0e1115); + box-shadow: 0 28px 80px rgba(0, 0, 0, 0.68), inset 0 1px rgba(255, 255, 255, 0.035); +} + +.nam-rack-prompt-modal > div:first-child { + border-bottom-color: rgba(255, 255, 255, 0.09); +} + +.nam-rack-prompt-modal > div:first-child h2 { + color: #f0f1f2; + font-size: 17px; + font-weight: 650; + letter-spacing: -0.015em; +} + +.nam-rack-prompt-modal > div:last-child { + border-top-color: rgba(255, 255, 255, 0.09); +} + +.nam-rack-prompt-body { + display: grid; + gap: 14px; +} + +.nam-rack-prompt-body p { + margin: 0; + color: #9299a3; + font-size: 12px; + line-height: 1.55; +} + +.nam-rack-prompt-body input, +.nam-rack-prompt-body textarea { + width: 100%; + min-height: 40px; + padding: 0 12px; + border: 1px solid rgba(255, 255, 255, 0.13); + border-radius: 5px; + outline: none; + color: #f1f2f3; + background: #090c10; + font: inherit; + font-size: 12px; + box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.45); +} + +.nam-rack-prompt-body textarea { + min-height: 96px; + padding-block: 10px; + resize: vertical; +} + +.nam-rack-prompt-body input:focus, +.nam-rack-prompt-body textarea:focus { + border-color: rgba(224, 161, 73, 0.68); + box-shadow: 0 0 0 2px rgba(224, 161, 73, 0.1), inset 0 1px 4px rgba(0, 0, 0, 0.45); +} + +.nam-rack-prompt-cancel, +.nam-rack-prompt-confirm { + min-height: 36px; + padding: 0 15px; + border: 1px solid rgba(255, 255, 255, 0.11); + border-radius: 5px; + color: #b8bec6; + background: linear-gradient(180deg, #20252c, #15191e); + font-size: 11px; + font-weight: 650; +} + +.nam-rack-prompt-confirm { + border-color: rgba(224, 161, 73, 0.58); + color: #241507; + background: linear-gradient(180deg, #f2b960, #ca8432); +} + +.nam-rack-prompt-confirm[data-destructive="true"] { + border-color: rgba(229, 105, 91, 0.6); + color: #fff4f2; + background: linear-gradient(180deg, #c95a50, #8d3731); +} + +.nam-rack-prompt-cancel:hover { color: #fff; border-color: rgba(255, 255, 255, 0.2); } +.nam-rack-prompt-confirm:hover { filter: brightness(1.05); } + +/* NAM Rack preset library: visually belongs to the premium graphite/amber shell. */ +.nam-preset-manager { + z-index: 70; + top: clamp(154px, 18vh, 176px); + right: auto; + left: 50%; + width: min(1040px, calc(100% - 40px)); + max-width: none; + max-height: calc(100% - 190px); + box-sizing: border-box; + gap: 12px; + padding: 16px; + overflow: auto; + transform: translateX(-50%); + border-color: rgba(224, 161, 73, 0.34); + border-radius: 8px; + background: + radial-gradient(circle at 50% -24%, rgba(224, 161, 73, 0.1), transparent 42%), + linear-gradient(180deg, rgba(22, 26, 32, 0.99), rgba(8, 11, 15, 0.99)); + box-shadow: + 0 34px 90px rgba(0, 0, 0, 0.76), + inset 0 1px rgba(255, 255, 255, 0.045), + inset 0 0 0 1px rgba(0, 0, 0, 0.55); + font-family: Inter, "Segoe UI Variable", "Segoe UI", Arial, sans-serif; + scrollbar-width: thin; + scrollbar-color: #414955 transparent; +} + +.nam-preset-manager-head { + min-height: 44px; + padding-bottom: 10px; + border-bottom: 1px solid rgba(255, 255, 255, 0.085); +} + +.nam-preset-manager-head > div { gap: 4px; } + +.nam-preset-manager-head span, +.nam-preset-column > span { + color: #d99a48; + font-size: 9px; + font-weight: 720; + letter-spacing: 0.12em; +} + +.nam-preset-manager-head strong { + color: #f0f1f2; + font-size: 20px; + font-weight: 620; + letter-spacing: -0.02em; +} + +.nam-preset-manager-head > button, +.nam-preset-save-row button, +.nam-preset-transfer-row button, +.nam-user-preset-row > button:last-child { + border-color: rgba(255, 255, 255, 0.11); + border-radius: 5px; + color: #aeb4bc; + background: linear-gradient(180deg, #20252c, #13171c); + box-shadow: inset 0 1px rgba(255, 255, 255, 0.035); +} + +.nam-preset-manager-head > button:hover:not(:disabled), +.nam-preset-transfer-row button:hover:not(:disabled) { + border-color: rgba(224, 161, 73, 0.42); + color: #f2c17a; + background: linear-gradient(180deg, #282d34, #171b20); +} + +.nam-preset-search { + height: 38px; + border-color: rgba(255, 255, 255, 0.105); + border-radius: 5px; + color: #747c87; + background: #090c10; + box-shadow: inset 0 1px 4px rgba(0, 0, 0, 0.4); +} + +.nam-preset-search input, +.nam-preset-save-row input { + color: #e8eaec; + font-size: 11px; +} + +.nam-preset-search input::placeholder, +.nam-preset-save-row input::placeholder { color: #5f6670; } + +.nam-preset-filter-row { gap: 6px; } + +.nam-preset-filter-row button { + min-height: 27px; + padding-inline: 9px; + border-radius: 4px; + color: #858d97; + background: #12161b; + font-weight: 650; +} + +.nam-preset-filter-row button small { + color: #171008; + background: #d79a4a; + font-weight: 760; +} + +.nam-preset-filter-row button[data-active="true"] { + border-color: rgba(224, 161, 73, 0.48); + color: #f1bd72; + background: rgba(224, 161, 73, 0.1); + box-shadow: inset 0 0 0 1px rgba(224, 161, 73, 0.05); +} + +.nam-preset-save-fields { gap: 6px; } + +.nam-preset-save-row input { + border-color: rgba(255, 255, 255, 0.1); + border-radius: 5px; + background: #0b0e12; +} + +.nam-preset-save-row input:focus, +.nam-preset-search:focus-within { + border-color: rgba(224, 161, 73, 0.55); + box-shadow: 0 0 0 2px rgba(224, 161, 73, 0.08), inset 0 1px 4px rgba(0, 0, 0, 0.42); +} + +.nam-preset-save-row button { + min-width: 92px; + border-color: rgba(224, 161, 73, 0.58); + color: #211509; + background: linear-gradient(180deg, #ecb25c, #c98331); + font-weight: 720; +} + +.nam-preset-save-row button:hover:not(:disabled) { + border-color: rgba(255, 197, 108, 0.78); + background: linear-gradient(180deg, #f2bd6a, #d28e3b); +} + +.nam-preset-transfer-row button { + min-height: 32px; + border-color: rgba(255, 255, 255, 0.1); + color: #aab0b8; + background: #14181d; + font-weight: 650; +} + +.nam-preset-status { + border-color: rgba(224, 161, 73, 0.2); + color: #b7bdc5; + background: rgba(224, 161, 73, 0.065); +} + +.nam-preset-manager-grid { gap: 12px; } + +.nam-preset-column { + gap: 9px; + padding: 11px; + border-color: rgba(255, 255, 255, 0.085); + border-radius: 6px; + background: rgba(4, 6, 9, 0.38); +} + +.nam-preset-list { gap: 7px; } + +.nam-preset-list > button, +.nam-user-preset-row > button:first-child { + min-height: 52px; + padding: 9px 10px; + border-color: rgba(255, 255, 255, 0.085); + border-radius: 5px; + color: #a9afb7; + background: linear-gradient(180deg, rgba(255, 255, 255, 0.032), rgba(255, 255, 255, 0.012)); +} + +.nam-preset-list > button:hover:not(:disabled), +.nam-user-preset-row > button:first-child:hover:not(:disabled) { + border-color: rgba(255, 255, 255, 0.16); + background: rgba(255, 255, 255, 0.045); +} + +.nam-preset-list > button[data-active="true"] { + border-color: rgba(224, 161, 73, 0.5); + background: linear-gradient(90deg, rgba(224, 161, 73, 0.13), rgba(255, 255, 255, 0.025)); + box-shadow: inset 2px 0 #d99947; +} + +.nam-preset-list strong { + color: #e7e9eb; + font-weight: 650; +} + +.nam-preset-list small, +.nam-preset-list em { color: #747c86; } + +.nam-user-preset-row { + grid-template-columns: minmax(150px, 1fr) repeat(8, 28px); + gap: 4px; +} + +.nam-user-preset-row > button:not(:first-child) { + width: 28px; + min-height: 28px; + border-radius: 4px; + color: #7d858f; + background: #14181d; +} + +.nam-user-preset-row[data-favorite="true"] > button:nth-child(2) { + border-color: rgba(224, 161, 73, 0.46); + color: #f2b963; + background: rgba(224, 161, 73, 0.11); +} + +.nam-user-preset-row > button:first-child em { + border-color: rgba(224, 161, 73, 0.16); + color: #9aa1aa; + background: rgba(224, 161, 73, 0.055); +} + +.nam-preset-manager button:disabled { cursor: default; opacity: 0.44; } + +@media (max-width: 980px) { + .nam-preset-manager { + top: 142px; + width: calc(100% - 24px); + max-height: calc(100% - 158px); + padding: 13px; + } + + .nam-preset-save-fields { grid-template-columns: repeat(2, minmax(0, 1fr)); } + .nam-preset-manager-grid { grid-template-columns: 1fr; } +} diff --git a/frontend/src/components/FXChainPanel.tsx b/frontend/src/components/FXChainPanel.tsx index 4a477d3..8a46efa 100644 --- a/frontend/src/components/FXChainPanel.tsx +++ b/frontend/src/components/FXChainPanel.tsx @@ -27,15 +27,27 @@ import { Star, ExternalLink, } from "lucide-react"; -import { nativeBridge } from "../services/NativeBridge"; +import { + nativeBridge, + type BuiltInPluginAddress, + type PluginParameterInfo, + type PluginScanReport, +} from "../services/NativeBridge"; import { PitchCorrectorPanel } from "./PitchCorrectorPanel"; import { BuiltInPluginPanel } from "./BuiltInPluginPanel"; import { MIDIFXControls } from "./MIDIFXControls"; import { useDAWStore } from "../store/useDAWStore"; -import { pluginAutomationParamId } from "../store/automationParams"; +import { registerScopedActionExecutor } from "../store/actionRegistry"; +import { builtInAutomationParamId, pluginAutomationParamId } from "../store/automationParams"; import { useShallow } from "zustand/react/shallow"; import { guardModalContextMenu } from "../utils/modalEventGuards"; -import { Button, Input, Select } from "./ui"; +import { + activateShortcutContext, + getActiveShortcutContext, + registerShortcutSurface, + type ShortcutSurfaceHandler, +} from "../utils/shortcutContext"; +import { Button, Input, ProfiledRangeInput, Select } from "./ui"; import { EQGraph, CompressorGraph, @@ -82,11 +94,22 @@ interface S13FXSlider { enumNames?: string[]; } -interface PluginParam { - index: number; - name: string; - value: number; - text: string; +type PluginParam = PluginParameterInfo; + +function formatPluginParameterValue(param: PluginParam, normalizedValue: number): string { + if (!param.builtIn) return `${Math.round(normalizedValue * 100)}%`; + const minimum = Number(param.min ?? 0); + const maximum = Number(param.max ?? 1); + let rawValue = minimum + normalizedValue * (maximum - minimum); + if (param.discrete) rawValue = Math.round(rawValue); + if (param.type === "toggle") return rawValue >= 0.5 ? "On" : "Off"; + if (param.type === "enum") { + return param.enumOptions?.find((option) => Math.round(option.value) === Math.round(rawValue))?.label + ?? String(Math.round(rawValue)); + } + const span = Math.abs(maximum - minimum); + const decimals = span <= 2 ? 2 : span <= 50 ? 1 : 0; + return `${rawValue.toFixed(decimals)}${param.unit ? ` ${param.unit}` : ""}`; } interface Plugin { @@ -94,6 +117,7 @@ interface Plugin { manufacturer: string; category: string; fileOrIdentifier: string; + identifier?: string; isInstrument: boolean; hasARA?: boolean; snapshot?: string; @@ -101,6 +125,21 @@ interface Plugin { instrumentMode?: number; } +function getPluginCategoryTokens(category: string): string[] { + const categories = new Map(); + for (const rawToken of category.split("|")) { + const token = rawToken.trim(); + if (token) categories.set(token.toLowerCase(), token); + } + return Array.from(categories.values()); +} + +function getPluginReference(plugin: Plugin): string { + return plugin.pluginType === "s13fx" || plugin.pluginType === "builtin" + ? plugin.fileOrIdentifier + : plugin.identifier || plugin.fileOrIdentifier; +} + // Map VST3 category substrings to Lucide icons and colors const CATEGORY_ICON_MAP: Array<{ match: string; @@ -138,7 +177,8 @@ function getPluginDisplayName( ) { if (!pluginPath) return "Instrument"; const knownPlugin = plugins.find( - (plugin) => plugin.fileOrIdentifier === pluginPath, + (plugin) => + plugin.fileOrIdentifier === pluginPath || plugin.identifier === pluginPath, ); if (knownPlugin) return knownPlugin.name; @@ -155,7 +195,11 @@ export function FXChainPanel({ const { updateTrack, addTrackFXWithUndo, + addTrackBuiltInFXWithUndo, + reorderTrackFXWithUndo, removeTrackFXWithUndo, + removeMasterFXWithUndo, + toggleFXSlotBypassWithUndo, loadInstrumentWithUndo, removeInstrumentWithUndo, clearTrackSamplerSampleWithUndo, @@ -175,7 +219,11 @@ export function FXChainPanel({ useShallow((s) => ({ updateTrack: s.updateTrack, addTrackFXWithUndo: s.addTrackFXWithUndo, + addTrackBuiltInFXWithUndo: s.addTrackBuiltInFXWithUndo, + reorderTrackFXWithUndo: s.reorderTrackFXWithUndo, removeTrackFXWithUndo: s.removeTrackFXWithUndo, + removeMasterFXWithUndo: s.removeMasterFXWithUndo, + toggleFXSlotBypassWithUndo: s.toggleFXSlotBypassWithUndo, loadInstrumentWithUndo: s.loadInstrumentWithUndo, removeInstrumentWithUndo: s.removeInstrumentWithUndo, clearTrackSamplerSampleWithUndo: s.clearTrackSamplerSampleWithUndo, @@ -196,6 +244,8 @@ export function FXChainPanel({ const [fxSlots, setFxSlots] = useState([]); const [loading, setLoading] = useState(false); const [draggedIndex, setDraggedIndex] = useState(null); + const [selectedFxIndex, setSelectedFxIndex] = useState(null); + const availablePluginSearchRef = useRef(null); const [addingPlugin, setAddingPlugin] = useState(null); const [bypassedFx, setBypassedFx] = useState>(new Set()); const [expandedS13FX, setExpandedS13FX] = useState(null); @@ -204,9 +254,6 @@ export function FXChainPanel({ const [expandedPitchCorrector, setExpandedPitchCorrector] = useState< number | null >(null); - const [expandedBuiltInFX, setExpandedBuiltInFX] = useState( - null, - ); const [expandedFallbackInstrument, setExpandedFallbackInstrument] = useState(false); const [showPresetMenu, setShowPresetMenu] = useState(false); @@ -215,6 +262,14 @@ export function FXChainPanel({ null, ); + useEffect(() => { + setSelectedFxIndex((current) => ( + current !== null && fxSlots.some((fx) => fx.index === current) + ? current + : null + )); + }, [fxSlots]); + // Plugin parameter list state (per-slot) const [expandedParamsFx, setExpandedParamsFx] = useState(null); const [pluginParams, setPluginParams] = useState([]); @@ -231,19 +286,27 @@ export function FXChainPanel({ // MIDI Learn state const [midiLearnActive, setMidiLearnActive] = useState<{ fxIndex: number; - paramIndex: number; + paramKey: string; } | null>(null); const midiLearnTimerRef = useRef | null>(null); const handleStartMIDILearn = useCallback( - async (fxIndex: number, paramIndex: number) => { + async (fxIndex: number, param: PluginParam) => { // Cancel any existing learn session if (midiLearnActive) { await nativeBridge.cancelPluginMIDILearn(); if (midiLearnTimerRef.current) clearTimeout(midiLearnTimerRef.current); } - setMidiLearnActive({ fxIndex, paramIndex }); - await nativeBridge.startPluginMIDILearn(trackId, fxIndex, paramIndex); + const paramKey = param.builtIn && param.paramId ? `builtin:${param.paramId}` : `plugin:${param.index}`; + setMidiLearnActive({ fxIndex, paramKey }); + if (param.builtIn && param.paramId) { + await nativeBridge.startBuiltInMIDILearn( + { trackId, chain: chainType === "input" ? "input" : "track", fxIndex }, + param.paramId, + ); + } else { + await nativeBridge.startPluginMIDILearn(trackId, fxIndex, param.index, chainType === "input"); + } // Auto-cancel after 10 seconds midiLearnTimerRef.current = setTimeout(async () => { await nativeBridge.cancelPluginMIDILearn(); @@ -251,7 +314,7 @@ export function FXChainPanel({ midiLearnTimerRef.current = null; }, 10000); }, - [midiLearnActive, trackId], + [chainType, midiLearnActive, trackId], ); const handleCancelMIDILearn = useCallback(async () => { @@ -324,6 +387,9 @@ export function FXChainPanel({ // Plugin browser state const [plugins, setPlugins] = useState([]); const [pluginsLoading, setPluginsLoading] = useState(false); + const [pluginScanReport, setPluginScanReport] = + useState(null); + const [pluginScanError, setPluginScanError] = useState(""); const [searchTerm, setSearchTerm] = useState(""); const [categoryFilter, setCategoryFilter] = useState("All"); const currentTrack = tracks.find((track) => track.id === trackId); @@ -334,9 +400,11 @@ export function FXChainPanel({ name === "OpenStudio Piano" || name === "OpenStudio Drums" || name === "OpenStudio Basic Synth" || + name === "OpenStudio Clean Guitar" || name === "Studio13 Piano" || name === "Studio13 Drums" || - name === "Studio13 Basic Synth"; + name === "Studio13 Basic Synth" || + name === "Studio13 Clean Guitar"; const hasBuiltInInstrumentFX = chainType === "track" && @@ -479,6 +547,23 @@ export function FXChainPanel({ void loadAvailablePlugins(); }, [chainType, loadAvailablePlugins, loadPlugins, trackId]); + useEffect(() => { + const handleCatalogChanged = () => { + void loadAvailablePlugins(); + }; + + window.addEventListener( + "openstudio:plugin-catalog-changed", + handleCatalogChanged, + ); + return () => { + window.removeEventListener( + "openstudio:plugin-catalog-changed", + handleCatalogChanged, + ); + }; + }, [loadAvailablePlugins]); + useEffect(() => { return subscribeToFXChainChanged((detail) => { if (detail.trackId !== trackId || detail.chainType !== chainType) { @@ -489,20 +574,43 @@ export function FXChainPanel({ }); }, [chainType, loadPlugins, trackId]); - const handleScan = async () => { + const handleScan = async (forceRescan: boolean) => { setPluginsLoading(true); + setPluginScanError(""); try { - await nativeBridge.scanForPlugins(); + setPluginScanReport(await nativeBridge.scanForPlugins(forceRescan)); await loadAvailablePlugins(); } catch (e) { console.error("[FXChain] Failed to scan:", e); + setPluginScanError( + "Scan did not complete; the previous plug-in catalog was preserved.", + ); } finally { setPluginsLoading(false); } }; + const handleAddPluginScanFolder = async () => { + setPluginScanError(""); + try { + const folder = ( + await nativeBridge.browseForFolder("Choose a plug-in scan folder") + ).trim(); + if (!folder) return; + if (!(await nativeBridge.addPluginScanPath(folder))) { + setPluginScanError("That plug-in folder could not be added."); + return; + } + await handleScan(false); + } catch (error) { + console.error("[FXChain] Failed to add plug-in scan folder:", error); + setPluginScanError("That plug-in folder could not be added."); + } + }; + const handleAddPlugin = async (plugin: Plugin) => { - setAddingPlugin(plugin.fileOrIdentifier); + const pluginReference = getPluginReference(plugin); + setAddingPlugin(pluginReference); try { let success = false; const expectedLength = @@ -517,11 +625,10 @@ export function FXChainPanel({ if (chainType === "master") { success = await nativeBridge.addMasterBuiltInFX(plugin.name); } else { - const isInputFX = chainType === "input"; - success = await nativeBridge.addTrackBuiltInFX( + success = await addTrackBuiltInFXWithUndo( trackId, plugin.name, - isInputFX, + chainType, ); if (success && plugin.isInstrument && chainType === "track") { updateTrack(trackId, { @@ -547,25 +654,25 @@ export function FXChainPanel({ ); } } else if (chainType === "master") { - success = await nativeBridge.addMasterFX(plugin.fileOrIdentifier); + success = await nativeBridge.addMasterFX(pluginReference); } else if (plugin.isInstrument && chainType === "track" && trackId) { // Instrument plugins (VSTi) must be loaded via loadInstrument so the // track is set to Instrument type and receives MIDI for synthesis. success = await loadInstrumentWithUndo( trackId, - plugin.fileOrIdentifier, + pluginReference, ); if (success) { notifyInstrumentChanged({ trackId, - instrumentPlugin: plugin.fileOrIdentifier, + instrumentPlugin: pluginReference, }); await nativeBridge.openInstrumentEditor(trackId); } } else if (chainType === "input" || chainType === "track") { success = await addTrackFXWithUndo( trackId, - plugin.fileOrIdentifier, + pluginReference, chainType, ); } @@ -577,6 +684,7 @@ export function FXChainPanel({ chainType, trackId, fileOrIdentifier: plugin.fileOrIdentifier, + identifier: plugin.identifier, }); let updatedFx: FXSlot[] = []; if (chainType === "master") { @@ -686,7 +794,7 @@ export function FXChainPanel({ if (plugin.pluginType === "builtin" && updatedFx.length > 0) { const lastFx = updatedFx[updatedFx.length - 1]; if (lastFx) { - setExpandedBuiltInFX(lastFx.index); + await handleOpenBuiltInEditor(lastFx); setExpandedPitchCorrector(null); } } @@ -726,6 +834,40 @@ export function FXChainPanel({ } }; + async function handleOpenBuiltInEditor(fx: FXSlot) { + const title = fx.name || "OpenStudio Plugin"; + const address: BuiltInPluginAddress = { + trackId, + chain: chainType, + fxIndex: fx.index, + }; + const isNAMRack = title.toLowerCase().includes("nam rack"); + const sessionId = JSON.stringify({ + address, + title, + fallbackName: title, + }); + + try { + const opened = await nativeBridge.openBuiltInPluginEditorWindow( + sessionId, + { + x: isNAMRack ? 140 : 220, + y: isNAMRack ? 70 : 130, + width: isNAMRack ? 1320 : 980, + height: isNAMRack ? 860 : 720, + }, + ); + if (!opened) { + console.error( + `[FXChain] Failed to open built-in editor window for ${title}`, + ); + } + } catch (e) { + console.error("[FXChain] Failed to open built-in editor window:", e); + } + } + const handleRemoveInstrument = async () => { try { if (currentTrack?.samplerSamplePath && !currentTrack.instrumentPlugin) { @@ -743,8 +885,7 @@ export function FXChainPanel({ try { let success = false; if (chainType === "master") { - await nativeBridge.removeMasterFX(fxIndex); - success = true; + success = await removeMasterFXWithUndo(fxIndex); } else if (chainType === "input" || chainType === "track") { success = await removeTrackFXWithUndo(trackId, fxIndex, chainType); } @@ -752,9 +893,6 @@ export function FXChainPanel({ if (success) { console.log(`[FXChain] Removed ${chainType} FX ${fxIndex}`); await loadPlugins(); - if (chainType === "master") { - notifyFXChainChanged({ trackId, chainType }); - } } } catch (e) { console.error("[FXChain] Failed to remove plugin:", e); @@ -762,38 +900,148 @@ export function FXChainPanel({ }; const handleToggleBypass = async (fxIndex: number) => { - const isBypassed = bypassedFx.has(fxIndex); - const newBypassed = !isBypassed; try { - let success = false; - if (chainType === "master") { - success = await nativeBridge.bypassMasterFX(fxIndex, newBypassed); - } else if (chainType === "input") { - success = await nativeBridge.bypassTrackInputFX( - trackId, - fxIndex, - newBypassed, - ); - } else { - success = await nativeBridge.bypassTrackFX( - trackId, - fxIndex, - newBypassed, - ); - } + const success = await toggleFXSlotBypassWithUndo(trackId, fxIndex, chainType); if (success) { - setBypassedFx((prev) => { - const next = new Set(prev); - if (newBypassed) next.add(fxIndex); - else next.delete(fxIndex); - return next; - }); + await loadPlugins(); } } catch (e) { console.error("[FXChain] Failed to toggle bypass:", e); } }; + const fxShortcutSessionId = `fx-chain:${chainType}:${trackId}`; + const fxActionExecutorRef = useRef< + (actionId: string) => ReturnType + >(() => "unmatched"); + fxActionExecutorRef.current = (actionId) => { + if (actionId === "fx.close") { + onClose(); + return "handled"; + } + if (actionId === "track.openSelectedFxChain") { + return chainType === "track" && useDAWStore.getState().selectedTrackId === trackId + ? "handled" + : "claimed_noop"; + } + if (actionId === "fx.add") { + const searchInput = availablePluginSearchRef.current; + if (!searchInput) return "claimed_noop"; + searchInput.scrollIntoView({ block: "nearest", inline: "nearest" }); + searchInput.focus(); + searchInput.select(); + return "handled"; + } + if (actionId === "fx.openInstrumentEditor") { + if (chainType !== "track") return "claimed_noop"; + if (hasLoadedInstrument) void handleOpenInstrumentEditor(); + else if (hasFallbackInstrument) setExpandedFallbackInstrument((expanded) => !expanded); + else return "claimed_noop"; + return "handled"; + } + if (actionId === "fx.removeInstrument") { + if (chainType !== "track" || (!hasLoadedInstrument && !hasFallbackInstrument)) { + return "claimed_noop"; + } + void handleRemoveInstrument(); + return "handled"; + } + if ( + actionId !== "fx.removeSelected" + && actionId !== "fx.toggleSelectedBypass" + && actionId !== "fx.openSelectedEditor" + && actionId !== "fx.toggleSelectedAB" + && actionId !== "fx.reloadSelectedScript" + && actionId !== "fx.toggleSelectedParameters" + && actionId !== "fx.toggleSelectedPresets" + ) return "unmatched"; + + const selectedFx = selectedFxIndex === null + ? undefined + : fxSlots.find((fx) => fx.index === selectedFxIndex); + if (!selectedFx) return "claimed_noop"; + + if (actionId === "fx.removeSelected") { + void handleRemove(selectedFx.index); + return "handled"; + } + if (actionId === "fx.toggleSelectedBypass") { + void handleToggleBypass(selectedFx.index); + return "handled"; + } + if (actionId === "fx.toggleSelectedAB") { + if (selectedFx.type === "s13fx") return "claimed_noop"; + togglePluginAB(trackId, selectedFx.index, chainType === "input"); + return "handled"; + } + if (actionId === "fx.reloadSelectedScript") { + if (selectedFx.type !== "s13fx") return "claimed_noop"; + void handleReloadS13FX(selectedFx.index); + return "handled"; + } + if (actionId === "fx.toggleSelectedParameters") { + if (selectedFx.type === "s13fx" || selectedFx.type === "builtin") return "claimed_noop"; + void handleToggleParams(selectedFx.index); + return "handled"; + } + if (actionId === "fx.toggleSelectedPresets") { + if (selectedFx.type === "s13fx") return "claimed_noop"; + void handleTogglePluginPresets(selectedFx.index); + return "handled"; + } + + if (selectedFx.type === "builtin") { + void handleOpenBuiltInEditor(selectedFx); + } else { + void handleOpenEditor(selectedFx.index); + } + return "handled"; + }; + + useEffect(() => { + const context = { kind: "plugin", sessionId: fxShortcutSessionId } as const; + const fallback = getActiveShortcutContext(); + const unregisterSurface = registerShortcutSurface( + context, + () => "unmatched", + fallback, + ); + const unregisterActions = registerScopedActionExecutor( + context, + (actionId) => fxActionExecutorRef.current(actionId), + [ + "fx.close", + "fx.add", + ...(chainType === "track" ? ["track.openSelectedFxChain"] : []), + ...(chainType === "track" && (hasLoadedInstrument || hasFallbackInstrument) + ? ["fx.openInstrumentEditor", "fx.removeInstrument"] + : []), + ...(selectedFxIndex !== null ? [ + "fx.removeSelected", + "fx.toggleSelectedBypass", + "fx.openSelectedEditor", + ...(fxSlots.find((slot) => slot.index === selectedFxIndex)?.type !== "s13fx" + ? ["fx.toggleSelectedAB", "fx.toggleSelectedPresets"] + : ["fx.reloadSelectedScript"]), + ...(["s13fx", "builtin"].includes( + fxSlots.find((slot) => slot.index === selectedFxIndex)?.type ?? "", + ) ? [] : ["fx.toggleSelectedParameters"]), + ] : []), + ], + ); + return () => { + unregisterActions(); + unregisterSurface(); + }; + }, [ + chainType, + fxShortcutSessionId, + fxSlots, + hasFallbackInstrument, + hasLoadedInstrument, + selectedFxIndex, + ]); + const handleSetPrecisionOverride = useCallback( async (fxIndex: number, mode: "auto" | "float32") => { setPrecisionUpdatingFx(fxIndex); @@ -850,17 +1098,12 @@ export function FXChainPanel({ if (chainType === "master") { // Master FX reorder not yet supported success = false; - } else if (chainType === "input") { - success = await nativeBridge.reorderTrackInputFX( - trackId, - draggedIndex, - dropIndex, - ); } else { - success = await nativeBridge.reorderTrackFX( + success = await reorderTrackFXWithUndo( trackId, draggedIndex, dropIndex, + chainType, ); } @@ -970,11 +1213,9 @@ export function FXChainPanel({ const handleAutomateParam = (fxIndex: number, param: PluginParam) => { if (chainType === "master") return; // Master automation not supported - const automationParam = pluginAutomationParamId( - chainType === "input", - fxIndex, - param.index, - ); + const automationParam = param.builtIn && param.paramId + ? builtInAutomationParamId(chainType === "input", fxIndex, param.paramId) + : pluginAutomationParamId(chainType === "input", fxIndex, param.index); addAutomationLane( trackId, automationParam, @@ -984,30 +1225,34 @@ export function FXChainPanel({ const handlePluginParamChange = async ( fxIndex: number, - paramIndex: number, + changedParam: PluginParam, value: number, ) => { const isInputFX = chainType === "input"; - const automationParam = pluginAutomationParamId( - isInputFX, - fxIndex, - paramIndex, - ); + const automationParam = changedParam.builtIn && changedParam.paramId + ? builtInAutomationParamId(isInputFX, fxIndex, changedParam.paramId) + : pluginAutomationParamId(isInputFX, fxIndex, changedParam.index); setAutomationWriteValue(trackId, automationParam, value); setPluginParams((params) => params.map((param) => - param.index === paramIndex - ? { ...param, value, text: `${Math.round(value * 100)}%` } + param.index === changedParam.index && param.paramId === changedParam.paramId + ? { ...param, value, text: formatPluginParameterValue(changedParam, value) } : param, ), ); - await nativeBridge.setPluginParameter( - trackId, - fxIndex, - isInputFX, - paramIndex, - value, - ); + if (changedParam.builtIn && changedParam.paramId) { + const minimum = Number(changedParam.min ?? 0); + const maximum = Number(changedParam.max ?? 1); + let rawValue = minimum + value * (maximum - minimum); + if (changedParam.discrete) rawValue = Math.round(rawValue); + await nativeBridge.setBuiltInPluginParam( + { trackId, chain: isInputFX ? "input" : "track", fxIndex }, + changedParam.paramId, + rawValue, + ); + } else { + await nativeBridge.setPluginParameter(trackId, fxIndex, isInputFX, changedParam.index, value); + } }; // ---- Plugin Presets handlers ---- @@ -1077,9 +1322,20 @@ export function FXChainPanel({ } }; + const categoryByIdentity = new Map(); + for (const plugin of plugins) { + for (const category of getPluginCategoryTokens(plugin.category)) { + const identity = category.toLowerCase(); + if (!categoryByIdentity.has(identity)) { + categoryByIdentity.set(identity, category); + } + } + } const categories = [ "All", - ...Array.from(new Set(plugins.map((p) => p.category))), + ...Array.from(categoryByIdentity.values()).sort((a, b) => + a.localeCompare(b), + ), ]; const filteredPlugins = plugins.filter((p) => { if (p.isInstrument && chainType !== "track") return false; @@ -1089,7 +1345,11 @@ export function FXChainPanel({ p.manufacturer.toLowerCase().includes(term) || p.category.toLowerCase().includes(term); const matchesCategory = - categoryFilter === "All" || p.category === categoryFilter; + categoryFilter === "All" || + getPluginCategoryTokens(p.category).some( + (category) => + category.toLowerCase() === categoryFilter.toLowerCase(), + ); return matchesSearch && matchesCategory; }); @@ -1106,6 +1366,9 @@ export function FXChainPanel({ className="fx-chain-panel-two-column" onClick={(e) => e.stopPropagation()} onContextMenu={guardModalContextMenu} + onPointerDownCapture={() => activateShortcutContext({ kind: "plugin", sessionId: fxShortcutSessionId })} + onFocusCapture={() => activateShortcutContext({ kind: "plugin", sessionId: fxShortcutSessionId })} + data-shortcut-context={`plugin:${fxShortcutSessionId}`} >

    @@ -1319,6 +1582,7 @@ export function FXChainPanel({ }} fallbackName={fallbackInstrumentDisplayName} onClose={() => setExpandedFallbackInstrument(false)} + shortcutSessionId={fxShortcutSessionId} /> )}

    @@ -1392,28 +1656,20 @@ export function FXChainPanel({ return (
    setSelectedFxIndex(fx.index)} + onFocus={() => setSelectedFxIndex(fx.index)} onDragStart={() => handleDragStart(index)} onDragOver={handleDragOver} onDrop={(e) => handleDrop(e, index)} onClick={() => { if (isS13FX) handleToggleS13FXSliders(fx.index); else if (isBuiltIn) { - setExpandedBuiltInFX( - expandedBuiltInFX === fx.index - ? null - : fx.index, - ); - if (fx.name.includes("Pitch Correct")) { - setExpandedPitchCorrector( - expandedPitchCorrector === fx.index - ? null - : fx.index, - ); - } else { - setExpandedPitchCorrector(null); - } + void handleOpenBuiltInEditor(fx); + setExpandedPitchCorrector(null); } else handleOpenEditor(fx.index); }} > @@ -1469,7 +1725,7 @@ export function FXChainPanel({ isS13FX ? "Click to show sliders" : isBuiltIn - ? "Click to edit built-in plugin" + ? "Click to open editor window" : "Click to open editor" } > @@ -1506,6 +1762,21 @@ export function FXChainPanel({ )} + {isBuiltIn && ( + + )} {/* A/B Comparison Toggle */} {!isS13FX && (() => { @@ -1645,19 +1916,6 @@ export function FXChainPanel({
    )} - {/* React built-in editor panel */} - {isBuiltIn && expandedBuiltInFX === fx.index && ( - setExpandedBuiltInFX(null)} - /> - )} - {/* Plugin Parameter Automation List */} {!isS13FX && expandedParamsFx === fx.index && (
    @@ -1677,7 +1935,12 @@ export function FXChainPanel({ {pluginParams.map((param) => { const isLearning = midiLearnActive?.fxIndex === fx.index && - midiLearnActive?.paramIndex === param.index; + midiLearnActive?.paramKey === (param.builtIn && param.paramId + ? `builtin:${param.paramId}` + : `plugin:${param.index}`); + const automationParamId = param.builtIn && param.paramId + ? builtInAutomationParamId(chainType === "input", fx.index, param.paramId) + : pluginAutomationParamId(chainType === "input", fx.index, param.index); return (
    {param.text} - { + onBeginEdit={() => { if (chainType !== "master") { beginAutomationParamTouch( trackId, - pluginAutomationParamId( - chainType === "input", - fx.index, - param.index, - ), + automationParamId, ); } }} - onPointerUp={() => { + onCommitEdit={() => { if (chainType !== "master") { endAutomationParamTouch( trackId, - pluginAutomationParamId( - chainType === "input", - fx.index, - param.index, - ), + automationParamId, ); } }} - onPointerCancel={() => { - if (chainType !== "master") { - endAutomationParamTouch( - trackId, - pluginAutomationParamId( - chainType === "input", - fx.index, - param.index, - ), - ); - } - }} - onBlur={() => { - if (chainType !== "master") { - endAutomationParamTouch( - trackId, - pluginAutomationParamId( - chainType === "input", - fx.index, - param.index, - ), - ); - } - }} - onChange={(event) => { + onValueChange={(value) => { void handlePluginParamChange( fx.index, - param.index, - Number(event.currentTarget.value), + param, + value, ); }} title={`Set ${param.name}`} /> {/* MIDI Learn button */} - {isLearning ? ( + {chainType !== "master" && (isLearning ? ( - )} + ))} {chainType !== "master" && (
    + {(pluginScanReport || pluginScanError) && ( +
    0 || + (pluginScanReport?.skippedCount ?? 0) > 0 + ? "border-amber-800/60 bg-amber-950/30 text-amber-200" + : "border-emerald-800/50 bg-emerald-950/20 text-emerald-200" + }`} + role={pluginScanError ? "alert" : "status"} + > + {pluginScanError || + (!pluginScanReport?.success && pluginScanReport?.error) || + `Cataloged ${pluginScanReport?.pluginCount ?? 0} plug-in classes from ${pluginScanReport?.candidateCount ?? 0} candidates${ + (pluginScanReport?.failedCount ?? 0) > 0 + ? `; ${pluginScanReport?.failedCount} could not be loaded. Open the full Plugin Browser for details.` + : (pluginScanReport?.skippedCount ?? 0) > 0 + ? `; ${pluginScanReport?.skippedCount} were skipped. Open the full Plugin Browser for details or retry.` + : "." + }`} +
    + )} + {/* Plugin List */}
    {pluginsLoading ? ( @@ -2066,10 +2332,13 @@ export function FXChainPanel({
    ) : filteredPlugins.length === 0 ? (
    - No plugins found. Click "Scan" to search your system. + {plugins.length > 0 + ? "No plug-ins match the current search or category filter." + : "No plug-ins are cataloged. Click Deep Scan to inspect the configured folders."}
    ) : ( - filteredPlugins.map((plugin, idx) => { + filteredPlugins.map((plugin) => { + const pluginReference = getPluginReference(plugin); const isScript = plugin.pluginType === "s13fx"; const isBuiltInPlugin = plugin.pluginType === "builtin"; const { Icon, color } = isScript @@ -2079,7 +2348,7 @@ export function FXChainPanel({ : getCategoryIcon(plugin.category); return (
    handleAddPlugin(plugin)} disabled={addingPlugin !== null} > - {addingPlugin === plugin.fileOrIdentifier + {addingPlugin === pluginReference ? "Adding..." : "Add"} diff --git a/frontend/src/components/GettingStartedGuide.tsx b/frontend/src/components/GettingStartedGuide.tsx index 95932ba..6830967 100644 --- a/frontend/src/components/GettingStartedGuide.tsx +++ b/frontend/src/components/GettingStartedGuide.tsx @@ -1,7 +1,13 @@ -import { useState, useCallback, useMemo } from "react"; +import { + useState, + useCallback, + useEffect, + useMemo, + useRef, + type KeyboardEvent as ReactKeyboardEvent, +} from "react"; import { useShallow } from "zustand/shallow"; import { - X, ChevronLeft, ChevronRight, Sparkles, @@ -15,11 +21,27 @@ import { Download, Wand2, HelpCircle, + X, } from "lucide-react"; -import { getEffectiveActionShortcut } from "../store/actionRegistry"; import { useDAWStore } from "../store/useDAWStore"; import { Button } from "./ui"; +import { + getKeyboardShortcutProfile, + getKeyboardShortcutProfilePresentation, + KEYBOARD_SHORTCUT_PROFILES, +} from "../utils/shortcutProfiles"; +import { + getEffectiveShortcutLabel, + getTimelineWheelHelp, +} from "../utils/inputProfileHelp"; +import { getShortcutPlatform } from "../utils/platform"; +import { getMouseBehaviorProfile } from "../utils/mouseBehaviorProfiles"; import { guardModalContextMenu } from "../utils/modalEventGuards"; +import { + routeModalShortcutEvent, + useModalShortcutScope, +} from "../utils/modalShortcutScope"; +import { activateShortcutContext } from "../utils/shortcutContext"; interface GuideStep { icon: React.ReactNode; @@ -30,10 +52,25 @@ interface GuideStep { } function shortcut(actionId: string, fallback: string): string { - return getEffectiveActionShortcut(actionId) ?? fallback; + return getEffectiveShortcutLabel(actionId, fallback); } function buildGuideSteps(): GuideStep[] { + const state = useDAWStore.getState(); + const shortcutPlatform = getShortcutPlatform(); + const keyboardProfile = getKeyboardShortcutProfile(state.keyboardShortcutProfileId); + const keyboardPresentation = getKeyboardShortcutProfilePresentation( + state.keyboardShortcutProfileId, + shortcutPlatform, + ); + const mouseProfile = getMouseBehaviorProfile( + state.mouseBehaviorProfileId, + shortcutPlatform, + ); + const wheelHelp = getTimelineWheelHelp( + state.mouseBehaviorProfileId, + shortcutPlatform, + ); const commandPaletteShortcut = shortcut("view.commandPalette", "Ctrl+Shift+P"); const audioTrackShortcut = shortcut("insert.audioTrack", "Ctrl+T"); const midiTrackShortcut = shortcut("insert.midiTrack", "Ctrl+Shift+T"); @@ -49,6 +86,9 @@ function buildGuideSteps(): GuideStep[] { const playShortcut = shortcut("transport.play", "Space"); const mixerShortcut = shortcut("view.toggleMixer", "Ctrl+M"); const virtualKeyboardShortcut = shortcut("view.toggleVirtualKeyboard", "Alt+B"); + const availableProfileNames = KEYBOARD_SHORTCUT_PROFILES + .map((profile) => profile.shortName) + .join(", "); return [ { @@ -64,17 +104,28 @@ function buildGuideSteps(): GuideStep[] { ], tip: `Press ${commandPaletteShortcut} at any time to search for actions instead of hunting through menus.`, }, + { + icon: , + title: "Choose Familiar Controls", + description: + "Keyboard shortcuts and mouse behavior are independent profiles, so you can use the key map from one DAW and the scroll or drag conventions from another.", + details: [ + `Current keyboard profile: ${keyboardProfile.name}`, + `Current mouse & scroll profile: ${mouseProfile.name}`, + `Choose from ${availableProfileNames}`, + "Custom action bindings override the selected keyboard profile", + keyboardPresentation.policyLabel, + keyboardPresentation.availabilityLabel, + ], + tip: "Open Keyboard Shortcuts to switch profiles or rebind any global, Timeline, Piano Roll, Pitch Editor, Mixer, browser, or plug-in scoped action.", + }, { icon: , title: "Essential Navigation Gestures & Hotkeys", description: - "Learn these controls first. They cover most of what a new user needs in the first two minutes and match the current app behavior exactly.", + `Learn these controls first. The displayed hotkeys follow ${keyboardProfile.name}, and the gestures follow ${mouseProfile.name}.`, details: [ - "Scroll: native vertical scrolling through the workspace", - "Ctrl+Scroll: zoom the timeline horizontally around the pointer", - "Shift+Scroll: move horizontally through the timeline", - "Alt+Scroll: resize track height", - "Ctrl+Shift+Scroll: zoom track height more aggressively", + ...wheelHelp.items.map((item) => `${item.gesture}: ${item.action}`), `${playShortcut}: Play / Stop`, `${recordShortcut}: Start recording on armed tracks`, `${audioTrackShortcut}: New audio track`, @@ -198,32 +249,47 @@ function buildGuideSteps(): GuideStep[] { "Once you know the core gestures and shortcuts, the fastest next step is to use the built-in references instead of memorizing everything immediately.", details: [ `${helpShortcut}: Help Reference for searchable feature guidance`, - "Keyboard Shortcuts window for the full shortcut list and custom global rebinding", + "Keyboard Shortcuts window for profiles, the full shortcut list, and scoped rebinding", `Preferences (${preferencesShortcut}) for editing, display, mouse, and backup settings`, `Command Palette (${commandPaletteShortcut}) to find actions by name`, ], - tip: "If a shortcut behaves differently than expected, check the Keyboard Shortcuts window first because global bindings may have been customized.", + tip: "If a shortcut behaves differently than expected, check the Keyboard Shortcuts window first because its scoped binding or selected profile may have changed.", }, ]; } const LS_KEY = "openstudio_gettingStartedDismissed"; +const GUIDE_FOCUSABLE_SELECTOR = [ + "button:not([disabled])", + "input:not([disabled])", + "select:not([disabled])", + "textarea:not([disabled])", + "[href]", + "[tabindex]:not([tabindex='-1'])", +].join(","); export function GettingStartedGuide() { - const { showGettingStarted, toggleGettingStarted } = useDAWStore( + const { showGettingStarted, toggleGettingStarted, customShortcuts, keyboardShortcutProfileId, mouseBehaviorProfileId } = useDAWStore( useShallow((s) => ({ showGettingStarted: s.showGettingStarted, toggleGettingStarted: s.toggleGettingStarted, + customShortcuts: s.customShortcuts, + keyboardShortcutProfileId: s.keyboardShortcutProfileId, + mouseBehaviorProfileId: s.mouseBehaviorProfileId, })), ); - const customShortcuts = useDAWStore((s) => s.customShortcuts); const [currentStep, setCurrentStep] = useState(0); + const dialogRef = useRef(null); + const returnFocusRef = useRef(null); const [dontShowAgain, setDontShowAgain] = useState( () => localStorage.getItem(LS_KEY) === "true", ); - const steps = useMemo(() => buildGuideSteps(), [customShortcuts]); + const steps = useMemo( + () => buildGuideSteps(), + [customShortcuts, keyboardShortcutProfileId, mouseBehaviorProfileId], + ); const step = steps[currentStep]; const isFirst = currentStep === 0; const isLast = currentStep === steps.length - 1; @@ -231,11 +297,15 @@ export function GettingStartedGuide() { const handleClose = useCallback(() => { if (dontShowAgain) { localStorage.setItem(LS_KEY, "true"); + } else { + localStorage.removeItem(LS_KEY); } setCurrentStep(0); toggleGettingStarted(); }, [dontShowAgain, toggleGettingStarted]); + useModalShortcutScope(showGettingStarted, handleClose); + const handleNext = useCallback(() => { if (isLast) { handleClose(); @@ -248,6 +318,49 @@ export function GettingStartedGuide() { setCurrentStep((s) => Math.max(0, s - 1)); }, []); + useEffect(() => { + if (!showGettingStarted) return; + returnFocusRef.current = document.activeElement instanceof HTMLElement + ? document.activeElement + : null; + const frame = window.requestAnimationFrame(() => dialogRef.current?.focus()); + return () => { + window.cancelAnimationFrame(frame); + const returnTarget = returnFocusRef.current; + returnFocusRef.current = null; + if (returnTarget?.isConnected) returnTarget.focus({ preventScroll: true }); + }; + }, [showGettingStarted]); + + const handleDialogKeyDown = useCallback((event: ReactKeyboardEvent) => { + const modalRoute = routeModalShortcutEvent(event.nativeEvent); + if (modalRoute.result !== "unmatched" || modalRoute.suppressedHeadlessEscape) { + if (modalRoute.result !== "unmatched") event.preventDefault(); + event.stopPropagation(); + return; + } + if (event.key !== "Tab") return; + const dialog = dialogRef.current; + if (!dialog) return; + const focusable = Array.from( + dialog.querySelectorAll(GUIDE_FOCUSABLE_SELECTOR), + ).filter((element) => element.offsetParent !== null); + if (focusable.length === 0) { + event.preventDefault(); + dialog.focus(); + return; + } + const first = focusable[0]; + const last = focusable[focusable.length - 1]; + if (event.shiftKey && (document.activeElement === first || document.activeElement === dialog)) { + event.preventDefault(); + last.focus(); + } else if (!event.shiftKey && document.activeElement === last) { + event.preventDefault(); + first.focus(); + } + }, []); + if (!showGettingStarted) return null; return ( @@ -255,13 +368,30 @@ export function GettingStartedGuide() { className="fixed inset-0 z-[10000] flex items-center justify-center p-4" data-modal-root="true" onContextMenu={guardModalContextMenu} + onPointerDownCapture={() => activateShortcutContext({ kind: "modal" })} + onFocusCapture={() => activateShortcutContext({ kind: "modal" })} > -
    +