From eb97c459390bdb39eb6ecf071fd0932a8386edac Mon Sep 17 00:00:00 2001 From: clover caruso Date: Sun, 5 Jul 2026 13:22:48 -0700 Subject: [PATCH] feat: yay --- pitch/Package.swift | 13 + pitch/Sources/Pitch/App.swift | 25 + pitch/Sources/Pitch/AudioEngine.swift | 289 + pitch/Sources/Pitch/ContentView.swift | 41 + pitch/Sources/Pitch/CoreAudioDevices.swift | 88 + pitch/Sources/Pitch/Music.swift | 99 + pitch/Sources/Pitch/PitchDetector.swift | 102 + pitch/Sources/Pitch/PitchGraphView.swift | 174 + pitch/Sources/Pitch/Settings.swift | 18 + pitch/Sources/Pitch/Theme.swift | 79 + pitch/Sources/Pitch/TopBar.swift | 122 + pitch/build.sh | 103 + pitch/readme.md | 52 + pitch/run.sh | 8 + readme.md | 1 + sequencer/CLAUDE.md | 8 +- sequencer/Deltarune Ch5.sq/project.json | 11285 ++++++++++++++++ sequencer/Sources/Sequencer/AppDelegate.swift | 13 +- .../Sources/Sequencer/ChunkedProxy.swift | 301 +- sequencer/Sources/Sequencer/Document.swift | 51 + sequencer/Sources/Sequencer/PerfTest.swift | 109 + .../Sequencer/PlaybackController.swift | 273 +- sequencer/Sources/Sequencer/Store.swift | 67 +- .../Sources/Sequencer/TimelineView.swift | 504 +- .../Sources/Sequencer/TransportBar.swift | 108 +- sequencer/Sources/Sequencer/UITest.swift | 21 +- .../Sources/Sequencer/ViewerGridView.swift | 143 +- sequencer/Sources/Sequencer/main.swift | 9 + sequencer/build.sh | 59 +- 29 files changed, 13906 insertions(+), 259 deletions(-) create mode 100644 pitch/Package.swift create mode 100644 pitch/Sources/Pitch/App.swift create mode 100644 pitch/Sources/Pitch/AudioEngine.swift create mode 100644 pitch/Sources/Pitch/ContentView.swift create mode 100644 pitch/Sources/Pitch/CoreAudioDevices.swift create mode 100644 pitch/Sources/Pitch/Music.swift create mode 100644 pitch/Sources/Pitch/PitchDetector.swift create mode 100644 pitch/Sources/Pitch/PitchGraphView.swift create mode 100644 pitch/Sources/Pitch/Settings.swift create mode 100644 pitch/Sources/Pitch/Theme.swift create mode 100644 pitch/Sources/Pitch/TopBar.swift create mode 100755 pitch/build.sh create mode 100644 pitch/readme.md create mode 100755 pitch/run.sh create mode 100644 sequencer/Deltarune Ch5.sq/project.json create mode 100644 sequencer/Sources/Sequencer/PerfTest.swift diff --git a/pitch/Package.swift b/pitch/Package.swift new file mode 100644 index 0000000000000000000000000000000000000000..0006d05081ef154534a04f2fb36c8378790bce92 --- /dev/null +++ b/pitch/Package.swift @@ -0,0 +1,13 @@ +// swift-tools-version:5.10 +import PackageDescription + +let package = Package( + name: "Pitch", + platforms: [.macOS(.v14)], + targets: [ + .executableTarget( + name: "Pitch", + path: "Sources/Pitch" + ) + ] +) diff --git a/pitch/Sources/Pitch/App.swift b/pitch/Sources/Pitch/App.swift new file mode 100644 index 0000000000000000000000000000000000000000..7675dd8edf6b1c3db4fa0d6bc8603ead8342a447 --- /dev/null +++ b/pitch/Sources/Pitch/App.swift @@ -0,0 +1,25 @@ +import SwiftUI +import AppKit + +@main +struct PitchApp: App { + @NSApplicationDelegateAdaptor(AppDelegate.self) private var delegate + + var body: some Scene { + WindowGroup("Clover Pitch") { + ContentView() + .frame(minWidth: 300, minHeight: 340) + .navigationTitle("Clover Pitch") + } + .windowResizability(.contentMinSize) + .commands { CommandGroup(replacing: .newItem) {} } + } +} + +final class AppDelegate: NSObject, NSApplicationDelegate { + func applicationDidFinishLaunching(_ notification: Notification) { + NSApp.setActivationPolicy(.regular) + NSApp.activate(ignoringOtherApps: true) + } + func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { true } +} diff --git a/pitch/Sources/Pitch/AudioEngine.swift b/pitch/Sources/Pitch/AudioEngine.swift new file mode 100644 index 0000000000000000000000000000000000000000..0b338adf76a1f5da7ad21dddf021445435a34a4a --- /dev/null +++ b/pitch/Sources/Pitch/AudioEngine.swift @@ -0,0 +1,289 @@ +import AVFoundation +import AudioToolbox +import CoreAudio +import QuartzCore +import Combine + +/// One detected pitch point on the timeline. +struct PitchSample { + let time: Double // seconds on the CACurrentMediaTime clock + let midi: Double // fractional MIDI note + let clarity: Double +} + +/// The most recent live reading, for the big note readout / tuner. +struct LivePitch { + let frequency: Double + let midi: Double + let clarity: Double + let level: Double +} + +enum MicPermission { + case unknown, granted, denied +} + +/// Captures microphone audio, runs the YIN detector at a fixed hop, and +/// exposes both a rolling history (for the graph) and the latest reading. +final class AudioEngine: ObservableObject, @unchecked Sendable { + + // Published UI state (mutated on the main thread only). Deliberately + // low-frequency — the live pitch is NOT published, so per-frame detection + // never invalidates the SwiftUI tree. The graph reads it via currentLive(). + @Published var devices: [AudioInputDevice] = [] + @Published var selectedDeviceID: AudioDeviceID? + @Published var isRunning = false + @Published var permission: MicPermission = .unknown + @Published var statusMessage: String? + + private let engine = AVAudioEngine() + // Sensitive settings: low RMS gate so quiet singing registers, and a + // slightly looser YIN threshold so less-perfectly-periodic tones are kept. + // Very low level gate so quiet singing registers; the clarity gate (not the + // level gate) is what rejects room noise, so lowering this is safe. + private var detector = YINDetector(sampleRate: 48000, windowSize: 2048, + threshold: 0.22, rmsGate: 0.0005, minClarity: 0.5) + + private let windowSize = 2048 + private let hop = 256 // ~5.3 ms between points at 48 kHz → dense, smooth trace + + // Detection ring state (audio thread). + private var accumulator = [Float]() + private var framesProcessed: Int = 0 + private var startHostTime: Double = 0 + private var haveStart = false + + // Small median window to reject single-frame octave/spike errors. + private var recentMidi = [Double]() + + // History shared with the UI thread. + private let historyLock = NSLock() + private var history = [PitchSample]() + private let historyWindow: Double = 30 // seconds retained + + // Latest reading, read lock-free-ish by the graph each display frame. + private let liveLock = NSLock() + private var latestLive: LivePitch? + private var latestLiveTime: Double = 0 + private let liveHold: Double = 0.3 // keep showing the last note this long after silence + + // MARK: - Lifecycle + + func start() { + refreshDevices() + requestPermission { [weak self] granted in + guard let self else { return } + if granted { + self.selectedDeviceID = CoreAudioDevices.defaultInputDevice() + self.beginCapture() + } + } + } + + func requestPermission(_ completion: @escaping (Bool) -> Void) { + switch AVCaptureDevice.authorizationStatus(for: .audio) { + case .authorized: + permission = .granted + completion(true) + case .notDetermined: + AVCaptureDevice.requestAccess(for: .audio) { [weak self] granted in + DispatchQueue.main.async { + self?.permission = granted ? .granted : .denied + completion(granted) + } + } + default: + permission = .denied + statusMessage = "Microphone access denied — enable it in System Settings ▸ Privacy & Security ▸ Microphone." + completion(false) + } + } + + func refreshDevices() { + let list = CoreAudioDevices.inputDevices() + DispatchQueue.main.async { + self.devices = list + if let sel = self.selectedDeviceID, !list.contains(where: { $0.id == sel }) { + self.selectedDeviceID = list.first?.id + } + } + } + + // MARK: - Device selection + + func selectDevice(_ id: AudioDeviceID) { + selectedDeviceID = id + let wasRunning = isRunning + if wasRunning { stopCapture() } + applyDevice(id) + if wasRunning { beginCapture() } + } + + private func applyDevice(_ id: AudioDeviceID) { + guard let unit = engine.inputNode.audioUnit else { return } + var dev = id + let status = AudioUnitSetProperty( + unit, + kAudioOutputUnitProperty_CurrentDevice, + kAudioUnitScope_Global, + 0, + &dev, + UInt32(MemoryLayout.size)) + if status != noErr { + DispatchQueue.main.async { self.statusMessage = "Couldn't switch input device (\(status))." } + } + } + + // MARK: - Capture + + private func beginCapture() { + if let id = selectedDeviceID { applyDevice(id) } + + let input = engine.inputNode + let format = input.inputFormat(forBus: 0) + guard format.sampleRate > 0, format.channelCount > 0 else { + DispatchQueue.main.async { self.statusMessage = "No usable audio input." } + return + } + + detector.sampleRate = format.sampleRate + resetDetectionState() + + input.removeTap(onBus: 0) + input.installTap(onBus: 0, bufferSize: 1024, format: format) { [weak self] buffer, _ in + self?.process(buffer) + } + + engine.prepare() + do { + try engine.start() + DispatchQueue.main.async { + self.isRunning = true + self.statusMessage = nil + } + } catch { + DispatchQueue.main.async { + self.statusMessage = "Audio engine failed to start: \(error.localizedDescription)" + } + } + } + + private func stopCapture() { + engine.inputNode.removeTap(onBus: 0) + if engine.isRunning { engine.stop() } + DispatchQueue.main.async { self.isRunning = false } + } + + private func resetDetectionState() { + accumulator.removeAll(keepingCapacity: true) + recentMidi.removeAll(keepingCapacity: true) + framesProcessed = 0 + haveStart = false + } + + // MARK: - Audio-thread processing + + private func process(_ buffer: AVAudioPCMBuffer) { + guard let channelData = buffer.floatChannelData else { return } + let frames = Int(buffer.frameLength) + if frames == 0 { return } + let channels = Int(buffer.format.channelCount) + + if !haveStart { + haveStart = true + startHostTime = CACurrentMediaTime() + framesProcessed = 0 + } + + // Down-mix to mono. + accumulator.reserveCapacity(accumulator.count + frames) + if channels == 1 { + let p = channelData[0] + for i in 0..= windowSize { + var result: YINDetector.Result? + accumulator.withUnsafeBufferPointer { buf in + result = detector.detect(buf.baseAddress!, count: windowSize) + } + let windowStartTime = startHostTime + Double(framesProcessed) / sr + + if let r = result { + let raw = Music.midi(fromFrequency: r.frequency) + let midi = smoothedMidi(raw) + let freq = Music.frequency(fromMidi: midi) + newSamples.append(PitchSample(time: windowStartTime, midi: midi, clarity: r.clarity)) + setLive(LivePitch(frequency: freq, midi: midi, clarity: r.clarity, level: r.level), + at: windowStartTime) + } else { + recentMidi.removeAll(keepingCapacity: true) + } + + accumulator.removeFirst(hop) + framesProcessed += hop + } + + if !newSamples.isEmpty { appendHistory(newSamples) } + } + + /// Median-of-3 over consecutive detections — removes lone octave/spike + /// errors while preserving vibrato and fast slides. + private func smoothedMidi(_ raw: Double) -> Double { + recentMidi.append(raw) + if recentMidi.count > 3 { recentMidi.removeFirst() } + if recentMidi.count < 3 { return raw } + return recentMidi.sorted()[1] + } + + private func appendHistory(_ samples: [PitchSample]) { + historyLock.lock() + history.append(contentsOf: samples) + let cutoff = (samples.last?.time ?? 0) - historyWindow + if let first = history.first, first.time < cutoff { + history.removeAll { $0.time < cutoff } + } + historyLock.unlock() + } + + private func setLive(_ value: LivePitch, at time: Double) { + liveLock.lock() + latestLive = value + latestLiveTime = time + liveLock.unlock() + } + + /// The current reading, or nil once the note has been silent past `liveHold`. + /// Read every display frame by the graph — cheap and never touches @Published. + func currentLive() -> LivePitch? { + liveLock.lock() + defer { liveLock.unlock() } + guard let v = latestLive else { return nil } + if CACurrentMediaTime() - latestLiveTime > liveHold { return nil } + return v + } + + // MARK: - Read access for the graph + + /// Snapshot of samples with `time >= since`, oldest first. + func snapshot(since: Double) -> [PitchSample] { + historyLock.lock() + defer { historyLock.unlock() } + if history.isEmpty { return [] } + var start = history.count + for i in stride(from: history.count - 1, through: 0, by: -1) { + if history[i].time < since { break } + start = i + } + return Array(history[start...]) + } +} diff --git a/pitch/Sources/Pitch/ContentView.swift b/pitch/Sources/Pitch/ContentView.swift new file mode 100644 index 0000000000000000000000000000000000000000..744c4c8db48cad977f923d3d09154167992d96c0 --- /dev/null +++ b/pitch/Sources/Pitch/ContentView.swift @@ -0,0 +1,41 @@ +import SwiftUI + +struct ContentView: View { + @StateObject private var engine = AudioEngine() + @StateObject private var settings = Settings() + @Environment(\.colorScheme) private var scheme + + var body: some View { + let palette = Palette.make(scheme) + VStack(spacing: 0) { + TopBar(engine: engine, settings: settings) + ZStack { + PitchGraphView(engine: engine, settings: settings, palette: palette) + if engine.permission == .denied { + PermissionOverlay() + } + } + } + .background(palette.background) + .onAppear { engine.start() } + } +} + +struct PermissionOverlay: View { + var body: some View { + VStack(spacing: 10) { + Image(systemName: "mic.slash.fill") + .font(.system(size: 34)) + .foregroundColor(.secondary) + Text("Microphone access needed") + .font(.system(size: 15, weight: .semibold)) + Text("Enable it in System Settings ▸ Privacy & Security ▸ Microphone,\nthen relaunch Clover Pitch.") + .font(.system(size: 12)) + .multilineTextAlignment(.center) + .foregroundColor(.secondary) + } + .padding(28) + .frame(maxWidth: .infinity, maxHeight: .infinity) + .background(Color(nsColor: .windowBackgroundColor).opacity(0.9)) + } +} diff --git a/pitch/Sources/Pitch/CoreAudioDevices.swift b/pitch/Sources/Pitch/CoreAudioDevices.swift new file mode 100644 index 0000000000000000000000000000000000000000..9ee2d96fb86d7707f281d964f70e5aace5eba014 --- /dev/null +++ b/pitch/Sources/Pitch/CoreAudioDevices.swift @@ -0,0 +1,88 @@ +import Foundation +import CoreAudio + +struct AudioInputDevice: Identifiable, Hashable { + let id: AudioDeviceID + let name: String +} + +/// Thin wrapper over the CoreAudio HAL for enumerating and identifying +/// hardware input devices. +enum CoreAudioDevices { + + static func inputDevices() -> [AudioInputDevice] { + var address = AudioObjectPropertyAddress( + mSelector: kAudioHardwarePropertyDevices, + mScope: kAudioObjectPropertyScopeGlobal, + mElement: kAudioObjectPropertyElementMain) + + var dataSize: UInt32 = 0 + guard AudioObjectGetPropertyDataSize( + AudioObjectID(kAudioObjectSystemObject), &address, 0, nil, &dataSize) == noErr + else { return [] } + + let count = Int(dataSize) / MemoryLayout.size + var ids = [AudioDeviceID](repeating: 0, count: count) + guard AudioObjectGetPropertyData( + AudioObjectID(kAudioObjectSystemObject), &address, 0, nil, &dataSize, &ids) == noErr + else { return [] } + + return ids.compactMap { id in + guard hasInputChannels(id) else { return nil } + return AudioInputDevice(id: id, name: name(of: id) ?? "Device \(id)") + } + } + + static func defaultInputDevice() -> AudioDeviceID? { + var address = AudioObjectPropertyAddress( + mSelector: kAudioHardwarePropertyDefaultInputDevice, + mScope: kAudioObjectPropertyScopeGlobal, + mElement: kAudioObjectPropertyElementMain) + var deviceID: AudioDeviceID = 0 + var size = UInt32(MemoryLayout.size) + guard AudioObjectGetPropertyData( + AudioObjectID(kAudioObjectSystemObject), &address, 0, nil, &size, &deviceID) == noErr, + deviceID != 0 + else { return nil } + return deviceID + } + + // MARK: - Helpers + + private static func hasInputChannels(_ id: AudioDeviceID) -> Bool { + var address = AudioObjectPropertyAddress( + mSelector: kAudioDevicePropertyStreamConfiguration, + mScope: kAudioObjectPropertyScopeInput, + mElement: kAudioObjectPropertyElementMain) + + var size: UInt32 = 0 + guard AudioObjectGetPropertyDataSize(id, &address, 0, nil, &size) == noErr, size > 0 + else { return false } + + let bufferList = UnsafeMutableRawPointer.allocate( + byteCount: Int(size), alignment: MemoryLayout.alignment) + defer { bufferList.deallocate() } + + guard AudioObjectGetPropertyData(id, &address, 0, nil, &size, bufferList) == noErr + else { return false } + + let list = UnsafeMutableAudioBufferListPointer( + bufferList.assumingMemoryBound(to: AudioBufferList.self)) + var channels = 0 + for buffer in list { channels += Int(buffer.mNumberChannels) } + return channels > 0 + } + + private static func name(of id: AudioDeviceID) -> String? { + var address = AudioObjectPropertyAddress( + mSelector: kAudioObjectPropertyName, + mScope: kAudioObjectPropertyScopeGlobal, + mElement: kAudioObjectPropertyElementMain) + var name: Unmanaged? + var size = UInt32(MemoryLayout?>.size) + guard AudioObjectGetPropertyData(id, &address, 0, nil, &size, &name) == noErr, + let value = name?.takeRetainedValue() + else { return nil } + return value as String + } +} diff --git a/pitch/Sources/Pitch/Music.swift b/pitch/Sources/Pitch/Music.swift new file mode 100644 index 0000000000000000000000000000000000000000..77b9dfbc2407ea73f63f6ac547b65b6e48bd1193 --- /dev/null +++ b/pitch/Sources/Pitch/Music.swift @@ -0,0 +1,99 @@ +import SwiftUI + +// MARK: - Note naming systems + +enum NoteNaming: String, CaseIterable, Identifiable { + case sharps = "Sharps (C♯ D♯)" + case flats = "Flats (D♭ E♭)" + case solfege = "Solfège (Do Re)" + case german = "German (H / B)" + + var id: String { rawValue } + + var shortLabel: String { + switch self { + case .sharps: return "Sharps" + case .flats: return "Flats" + case .solfege: return "Solfège" + case .german: return "German" + } + } + + /// Pitch-class names, index 0 == C. + var names: [String] { + switch self { + case .sharps: + return ["C", "C♯", "D", "D♯", "E", "F", "F♯", "G", "G♯", "A", "A♯", "B"] + case .flats: + return ["C", "D♭", "D", "E♭", "E", "F", "G♭", "G", "A♭", "A", "B♭", "B"] + case .solfege: + return ["Do", "Di", "Re", "Ri", "Mi", "Fa", "Fi", "Sol", "Si", "La", "Li", "Ti"] + case .german: + // German convention: A♯/B♭ is written "B", and B natural is "H". + return ["C", "C♯", "D", "D♯", "E", "F", "F♯", "G", "G♯", "A", "B", "H"] + } + } +} + +// MARK: - Musical helpers + +enum Music { + /// MIDI note number (may be fractional) for a frequency in Hz. A4 (440) == 69. + static func midi(fromFrequency f: Double) -> Double { + 69.0 + 12.0 * log2(f / 440.0) + } + + static func frequency(fromMidi m: Double) -> Double { + 440.0 * pow(2.0, (m - 69.0) / 12.0) + } + + /// Pitch class 0–11 for an integer MIDI number. + static func pitchClass(_ midi: Int) -> Int { + ((midi % 12) + 12) % 12 + } + + /// True for the "black keys" — C♯ D♯ F♯ G♯ A♯. + static func isAccidental(_ midi: Int) -> Bool { + [1, 3, 6, 8, 10].contains(pitchClass(midi)) + } + + /// Scientific-pitch octave (C4 == middle C == MIDI 60). + static func octave(_ midi: Int) -> Int { + midi / 12 - 1 + } + + /// Name without octave, e.g. "F♯". + static func name(_ midi: Int, naming: NoteNaming) -> String { + naming.names[pitchClass(midi)] + } + + /// Name with octave, e.g. "F♯4". + static func fullName(_ midi: Int, naming: NoteNaming) -> String { + "\(name(midi, naming: naming))\(octave(midi))" + } +} + +// MARK: - Vocal / instrument ranges + +struct PitchRange: Identifiable, Hashable { + let name: String + let low: Int // MIDI (inclusive) + let high: Int // MIDI (inclusive) + var id: String { name } + var span: Int { high - low } +} + +extension PitchRange { + static let presets: [PitchRange] = [ + PitchRange(name: "Full (C1–C7)", low: 24, high: 96), + PitchRange(name: "Bass (E2–E4)", low: 40, high: 64), + PitchRange(name: "Baritone (A2–A4)", low: 45, high: 69), + PitchRange(name: "Tenor (C3–C5)", low: 48, high: 72), + PitchRange(name: "Alto (F3–F5)", low: 53, high: 77), + PitchRange(name: "Mezzo (A3–A5)", low: 57, high: 81), + PitchRange(name: "Soprano (C4–C6)", low: 60, high: 84), + PitchRange(name: "Wide (C2–C6)", low: 36, high: 84), + ] + + static let `default` = presets[7] // Wide +} diff --git a/pitch/Sources/Pitch/PitchDetector.swift b/pitch/Sources/Pitch/PitchDetector.swift new file mode 100644 index 0000000000000000000000000000000000000000..1a5e433373137841f04cbc99c8416112adae695f --- /dev/null +++ b/pitch/Sources/Pitch/PitchDetector.swift @@ -0,0 +1,102 @@ +import Foundation + +/// Monophonic fundamental-frequency estimator using the YIN algorithm +/// (de Cheveigné & Kawahara, 2002) with parabolic interpolation. +final class YINDetector { + var sampleRate: Double + let windowSize: Int + private let threshold: Float + private let rmsGate: Float + private let minClarity: Double + + // Scratch buffers reused across calls to avoid per-frame allocation. + private var diff: [Float] + private var cmnd: [Float] + + init(sampleRate: Double, windowSize: Int = 2048, threshold: Float = 0.15, + rmsGate: Float = 0.006, minClarity: Double = 0.5) { + self.sampleRate = sampleRate + self.windowSize = windowSize + self.threshold = threshold + self.rmsGate = rmsGate + self.minClarity = minClarity + self.diff = [Float](repeating: 0, count: windowSize / 2) + self.cmnd = [Float](repeating: 1, count: windowSize / 2) + } + + struct Result { + let frequency: Double + let clarity: Double // 0…1, higher == more periodic + let level: Double // RMS, 0…1 + } + + /// Returns a pitch estimate for `samples` (must be `windowSize` long) or nil + /// if the signal is too quiet or not periodic enough. + func detect(_ samples: UnsafePointer, count: Int) -> Result? { + guard count >= windowSize else { return nil } + let half = windowSize / 2 + + // --- RMS gate: ignore near-silence --- + var sumSq: Float = 0 + for i in 0.. 0 ? diff[tau] * Float(tau) / running : 1 + } + + // --- Absolute threshold --- + var tauEst = -1 + var tau = 2 + while tau < half - 1 { + if cmnd[tau] < threshold { + while tau + 1 < half && cmnd[tau + 1] < cmnd[tau] { tau += 1 } + tauEst = tau + break + } + tau += 1 + } + guard tauEst > 0 else { return nil } + + // --- Parabolic interpolation around the dip --- + let betterTau = parabolicRefine(tauEst) + guard betterTau > 0 else { return nil } + let freq = sampleRate / betterTau + guard freq >= 40, freq <= 2000 else { return nil } + + let clarity = Double(max(0, min(1, 1 - cmnd[tauEst]))) + guard clarity >= minClarity else { return nil } + return Result(frequency: freq, clarity: clarity, level: level) + } + + private func parabolicRefine(_ tau: Int) -> Double { + let half = windowSize / 2 + let x0 = tau > 1 ? tau - 1 : tau + let x2 = tau + 1 < half ? tau + 1 : tau + if x0 == tau { return Double(cmnd[tau] <= cmnd[x2] ? tau : x2) } + if x2 == tau { return Double(cmnd[tau] <= cmnd[x0] ? tau : x0) } + let s0 = cmnd[x0], s1 = cmnd[tau], s2 = cmnd[x2] + let denom = 2 * (2 * s1 - s2 - s0) + if denom == 0 { return Double(tau) } + return Double(tau) + Double(s2 - s0) / Double(denom) + } +} diff --git a/pitch/Sources/Pitch/PitchGraphView.swift b/pitch/Sources/Pitch/PitchGraphView.swift new file mode 100644 index 0000000000000000000000000000000000000000..dd2131dc03bc342945c494e2d83867d0fc0b87fc --- /dev/null +++ b/pitch/Sources/Pitch/PitchGraphView.swift @@ -0,0 +1,174 @@ +import SwiftUI +import QuartzCore + +/// pitchreader.com-style visualiser. Two layers: +/// • `GridCanvas` — staff lines + right-hand labels. Redraws only when the +/// range / naming / transpose / appearance change (never per frame). +/// • `TraceCanvas` — the active-note band, the scrolling pitch trace, the dot +/// and the note pill. Driven by `TimelineView(.animation)` so it advances at +/// the display refresh rate. +struct PitchGraphView: View { + @ObservedObject var engine: AudioEngine + @ObservedObject var settings: Settings + var palette: Palette + + var body: some View { + ZStack { + palette.background + GridCanvas(settings: settings, palette: palette) + TraceCanvas(engine: engine, settings: settings, palette: palette) + } + } +} + +/// Natural-note staff lines and labels, laid out on the right like pitchreader. +private struct GridCanvas: View { + @ObservedObject var settings: Settings + var palette: Palette + + var body: some View { + Canvas { ctx, size in + let layout = PitchLayout(size: size, range: settings.range) + let lineRight = layout.plotWidth - 2 + let labelX = layout.plotWidth + 7 + + for midi in settings.range.low...settings.range.high { + let displayed = midi + settings.transpose + let accidental = Music.isAccidental(displayed) + let isC = Music.pitchClass(displayed) == 0 + let yy = layout.y(Double(midi)) + + // Every semitone gets a line; sharps/flats are drawn fainter. + var line = Path() + line.move(to: CGPoint(x: 0, y: yy)) + line.addLine(to: CGPoint(x: lineRight, y: yy)) + let lineColor = accidental ? palette.accidentalLine : (isC ? palette.cLine : palette.naturalLine) + ctx.stroke(line, with: .color(lineColor), lineWidth: isC ? 1.4 : (accidental ? 0.75 : 1)) + + // Only naturals are labelled, to keep the gutter readable. + guard !accidental else { continue } + let color = isC ? palette.cLabel : palette.naturalLabel + let label = Text(Music.name(displayed, naming: settings.naming)) + .font(.system(size: 11.5, weight: isC ? .bold : .semibold, design: .rounded)) + .foregroundColor(color) + + Text(" \(Music.octave(displayed))") + .font(.system(size: 9.5, weight: isC ? .semibold : .regular, design: .rounded)) + .foregroundColor(color.opacity(0.85)) + ctx.draw(label, at: CGPoint(x: labelX, y: yy), anchor: .leading) + } + } + } +} + +/// The moving parts: active band, pitch trace, current dot, and the note pill. +private struct TraceCanvas: View { + @ObservedObject var engine: AudioEngine + @ObservedObject var settings: Settings + var palette: Palette + + var body: some View { + TimelineView(.animation) { timeline in + // Capturing a per-frame value (the frame's timestamp) into the + // Canvas closure is what makes SwiftUI invalidate & redraw it every + // display frame — without it the Canvas is memoized and only + // repaints on geometry changes (e.g. a window resize). + let now = timeline.date.timeIntervalSinceReferenceDate + Self.clockOffset + Canvas { ctx, size in + let layout = PitchLayout(size: size, range: settings.range) + let visible = settings.visibleSeconds + let live = engine.currentLive() + + drawBand(ctx: &ctx, size: size, layout: layout, live: live) + drawTrace(ctx: &ctx, layout: layout, now: now, visible: visible) + drawPill(ctx: &ctx, size: size, layout: layout, live: live) + } + } + } + + /// Fixed offset between `Date` (reference-date epoch) and the + /// `CACurrentMediaTime` clock that sample timestamps use. Both advance at + /// real-time, so this difference is constant for the process lifetime. + private static let clockOffset: Double = + CACurrentMediaTime() - Date().timeIntervalSinceReferenceDate + + // Thin solid coral line marking the nearest note — a couple of pixels + // thicker than a staff line. + private func drawBand(ctx: inout GraphicsContext, size: CGSize, + layout: PitchLayout, live: LivePitch?) { + guard let live else { return } + let nearest = Int(live.midi.rounded()) + guard nearest >= settings.range.low, nearest <= settings.range.high else { return } + let yy = layout.y(Double(nearest)) + let h: CGFloat = 3.5 + let rect = CGRect(x: 0, y: yy - h / 2, width: size.width, height: h) + ctx.fill(Path(roundedRect: rect, cornerRadius: h / 2), with: .color(palette.pill)) + } + + // Thick, smoothed pitch line. Breaks into a new segment on a silence gap or + // an implausible pitch jump, so stray octave errors never draw as long + // vertical spikes. + private func drawTrace(ctx: inout GraphicsContext, layout: PitchLayout, + now: Double, visible: Double) { + let samples = engine.snapshot(since: now - visible) + guard samples.count > 1 else { return } + + let gapLimit = 0.08 // seconds + let maxJump = 4.0 // semitones between adjacent ~5 ms frames + var run: [CGPoint] = [] + + func stroke() { + guard run.count > 1 else { run.removeAll(keepingCapacity: true); return } + var path = Path() + path.move(to: run[0]) + // Quadratic smoothing through midpoints for a clean, hand-drawn line. + for i in 1.. gapLimit || abs(s.midi - p.midi) > maxJump { + stroke() + } + run.append(CGPoint(x: layout.x(s.time, now: now, visible: visible), y: layout.y(s.midi))) + prev = s + } + stroke() + + // Current dot at the leading edge (only while actively voiced). + if let last = samples.last, engine.currentLive() != nil { + let p = CGPoint(x: layout.x(last.time, now: now, visible: visible), y: layout.y(last.midi)) + ctx.fill(Path(ellipseIn: CGRect(x: p.x - 4, y: p.y - 4, width: 8, height: 8)), + with: .color(palette.dot)) + } + } + + // Solid coral pill with the active note name, in the right-hand gutter. + private func drawPill(ctx: inout GraphicsContext, size: CGSize, + layout: PitchLayout, live: LivePitch?) { + guard let live else { return } + let nearest = Int(live.midi.rounded()) + guard nearest >= settings.range.low, nearest <= settings.range.high else { return } + let displayed = nearest + settings.transpose + let yy = layout.y(Double(nearest)) + + let pillRect = CGRect(x: layout.plotWidth + 1, y: yy - 9, + width: layout.labelWidth - 3, height: 18) + ctx.fill(Path(roundedRect: pillRect, cornerRadius: 9), with: .color(palette.pill)) + + let label = Text(Music.name(displayed, naming: settings.naming)) + .font(.system(size: 11.5, weight: .bold, design: .rounded)) + .foregroundColor(palette.pillText) + + Text(" \(Music.octave(displayed))") + .font(.system(size: 9.5, weight: .semibold, design: .rounded)) + .foregroundColor(palette.pillText.opacity(0.9)) + ctx.draw(label, at: CGPoint(x: pillRect.minX + 6, y: yy), anchor: .leading) + } +} diff --git a/pitch/Sources/Pitch/Settings.swift b/pitch/Sources/Pitch/Settings.swift new file mode 100644 index 0000000000000000000000000000000000000000..0a26a869c284fb07bbfb2d1ca89130c720b726d8 --- /dev/null +++ b/pitch/Sources/Pitch/Settings.swift @@ -0,0 +1,18 @@ +import SwiftUI + +/// UI-side view settings driven by the top-bar dropdowns. +final class Settings: ObservableObject { + @Published var transpose: Int = 0 // semitones added to displayed labels + @Published var naming: NoteNaming = .sharps + @Published var range: PitchRange = .default + + /// How many seconds of history the graph shows. + @Published var visibleSeconds: Double = 6 + + static let transposeChoices = Array(-12...12) + + func transposeLabel(_ n: Int) -> String { + if n == 0 { return "Transpose 0" } + return "Transpose \(n > 0 ? "+" : "")\(n)" + } +} diff --git a/pitch/Sources/Pitch/Theme.swift b/pitch/Sources/Pitch/Theme.swift new file mode 100644 index 0000000000000000000000000000000000000000..d969ec70afd25108e6b97f47412a47b4464a95a1 --- /dev/null +++ b/pitch/Sources/Pitch/Theme.swift @@ -0,0 +1,79 @@ +import SwiftUI + +/// A fully resolved colour set for one appearance (light or dark), styled after +/// pitchreader.com: white/near-black staff, blue natural lines, a coral active +/// band, and a heavy dark (or light) pitch trace. +struct Palette { + var background: Color + var cLine: Color + var cLabel: Color + var naturalLine: Color + var naturalLabel: Color + var accidentalLine: Color + var band: Color + var pill: Color + var pillText: Color + var trace: Color + var dot: Color + + static func make(_ scheme: ColorScheme) -> Palette { + scheme == .dark ? .dark : .light + } + + static let light = Palette( + background: Color.white, + cLine: Color(red: 0.11, green: 0.12, blue: 0.14).opacity(0.9), + cLabel: Color(red: 0.10, green: 0.11, blue: 0.13), + naturalLine: Color(red: 0.42, green: 0.58, blue: 0.93).opacity(0.42), + naturalLabel: Color(red: 0.33, green: 0.50, blue: 0.90), + accidentalLine: Color(red: 0.55, green: 0.58, blue: 0.66).opacity(0.20), + band: Color(red: 0.95, green: 0.55, blue: 0.50).opacity(0.50), + pill: Color(red: 0.93, green: 0.49, blue: 0.45), + pillText: Color.white, + trace: Color(red: 0.20, green: 0.24, blue: 0.31), + dot: Color(red: 0.20, green: 0.24, blue: 0.31)) + + static let dark = Palette( + background: Color(red: 0.09, green: 0.10, blue: 0.12), + cLine: Color.white.opacity(0.85), + cLabel: Color.white.opacity(0.95), + naturalLine: Color(red: 0.46, green: 0.61, blue: 0.96).opacity(0.42), + naturalLabel: Color(red: 0.56, green: 0.69, blue: 0.99), + accidentalLine: Color.white.opacity(0.07), + band: Color(red: 0.90, green: 0.46, blue: 0.43).opacity(0.36), + pill: Color(red: 0.90, green: 0.47, blue: 0.44), + pillText: Color.white, + trace: Color(red: 0.93, green: 0.95, blue: 0.99), + dot: Color(red: 0.93, green: 0.95, blue: 0.99)) +} + +/// Shared plot geometry so the static grid layer and the animated trace layer +/// map pitch → screen identically. Vertical axis is uniform per semitone — +/// every semitone (naturals and sharps alike) gets an evenly-spaced row. +struct PitchLayout { + let size: CGSize + let top: Double // MIDI at the top edge + let bot: Double // MIDI at the bottom edge + let labelWidth: CGFloat + + init(size: CGSize, range: PitchRange, labelWidth: CGFloat = 44) { + self.size = size + self.top = Double(range.high) + 0.7 + self.bot = Double(range.low) - 0.7 + self.labelWidth = labelWidth + } + + var plotWidth: CGFloat { size.width - labelWidth } + + func y(_ midi: Double) -> CGFloat { + CGFloat((top - midi) / (top - bot)) * size.height + } + + /// Screen x for a timestamp, with `now` at the right edge of the plot area. + func x(_ t: Double, now: Double, visible: Double) -> CGFloat { + plotWidth * CGFloat(1 - (now - t) / visible) + } + + /// Height of one semitone row, in points. + var rowHeight: CGFloat { abs(y(0) - y(1)) } +} diff --git a/pitch/Sources/Pitch/TopBar.swift b/pitch/Sources/Pitch/TopBar.swift new file mode 100644 index 0000000000000000000000000000000000000000..65be20863a14c4bdb15f696548461df9e712c2ee --- /dev/null +++ b/pitch/Sources/Pitch/TopBar.swift @@ -0,0 +1,122 @@ +import SwiftUI +import CoreAudio + +struct TopBar: View { + @ObservedObject var engine: AudioEngine + @ObservedObject var settings: Settings + + var body: some View { + HStack(spacing: 14) { + // Microphone + Dropdown(icon: "mic.fill") { + Picker("", selection: micBinding) { + if engine.devices.isEmpty { + Text("No inputs").tag(AudioDeviceID?.none) + } + ForEach(engine.devices) { d in + Text(d.name).tag(AudioDeviceID?.some(d.id)) + } + } + .labelsHidden() + } + + // Transpose + Dropdown(icon: "arrow.up.arrow.down") { + Picker("", selection: $settings.transpose) { + ForEach(Settings.transposeChoices, id: \.self) { n in + Text(settings.transposeLabel(n)).tag(n) + } + } + .labelsHidden() + } + + // Note labels + Dropdown(icon: "textformat") { + Picker("", selection: $settings.naming) { + ForEach(NoteNaming.allCases) { n in + Text(n.rawValue).tag(n) + } + } + .labelsHidden() + } + + // Range + Dropdown(icon: "arrow.up.and.down") { + Picker("", selection: $settings.range) { + ForEach(PitchRange.presets) { r in + Text(r.name).tag(r) + } + } + .labelsHidden() + } + + Spacer(minLength: 8) + + StatusPill(engine: engine) + } + .padding(.horizontal, 16) + .padding(.vertical, 10) + .background(.bar) + .overlay(Rectangle().frame(height: 1).foregroundColor(Color(nsColor: .separatorColor)), alignment: .bottom) + } + + private var micBinding: Binding { + Binding( + get: { engine.selectedDeviceID }, + set: { if let id = $0 { engine.selectDevice(id) } } + ) + } +} + +/// A pill-shaped container that gives each Picker a leading icon and a +/// consistent dark style. +private struct Dropdown: View { + let icon: String + @ViewBuilder var content: Content + + var body: some View { + HStack(spacing: 6) { + Image(systemName: icon) + .font(.system(size: 11, weight: .semibold)) + .foregroundColor(.secondary) + content + .tint(.primary) + } + .padding(.horizontal, 10) + .padding(.vertical, 5) + .background( + RoundedRectangle(cornerRadius: 8) + .fill(Color(nsColor: .controlBackgroundColor)) + .overlay(RoundedRectangle(cornerRadius: 8).stroke(Color(nsColor: .separatorColor), lineWidth: 1)) + ) + } +} + +private struct StatusPill: View { + @ObservedObject var engine: AudioEngine + + var body: some View { + HStack(spacing: 7) { + Circle() + .fill(color) + .frame(width: 8, height: 8) + Text(text) + .font(.system(size: 11, weight: .medium)) + .foregroundColor(.secondary) + .lineLimit(1) + } + .padding(.horizontal, 10) + .padding(.vertical, 5) + .help(engine.statusMessage ?? text) + } + + private var color: Color { + if engine.permission == .denied { return .red } + return engine.isRunning ? Color(red: 0.3, green: 0.75, blue: 0.5) : .secondary + } + + private var text: String { + if engine.permission == .denied { return "Mic denied" } + return engine.isRunning ? "Listening" : "Idle" + } +} diff --git a/pitch/build.sh b/pitch/build.sh new file mode 100755 index 0000000000000000000000000000000000000000..d244c7bd58f5cbb87b14c9d959f458101bb264ab --- /dev/null +++ b/pitch/build.sh @@ -0,0 +1,103 @@ +#!/bin/sh +set -e +cd "$(dirname "$0")" + +CONFIG=release +APP=Pitch.app +BIN=Pitch + +# Signing identity. Override with: SIGN_ID="Some Identity" ./build.sh +SIGN_ID="${SIGN_ID:-Pitch Dev}" +LOGIN_KEYCHAIN="$HOME/Library/Keychains/login.keychain-db" + +# Create a self-signed code-signing identity named "$SIGN_ID" in the login +# keychain, so codesign works on a machine that has no dev certificate. +create_cert() { + name="$SIGN_ID" + echo "Creating self-signed code-signing identity \"$name\"…" + tmp=$(mktemp -d) + openssl req -x509 -newkey rsa:2048 -sha256 -days 3650 -nodes \ + -keyout "$tmp/key.pem" -out "$tmp/cert.pem" \ + -subj "/CN=$name" \ + -addext "basicConstraints=critical,CA:false" \ + -addext "keyUsage=critical,digitalSignature" \ + -addext "extendedKeyUsage=critical,codeSigning" >/dev/null 2>&1 + openssl pkcs12 -export -legacy -out "$tmp/id.p12" \ + -inkey "$tmp/key.pem" -in "$tmp/cert.pem" -passout pass: >/dev/null 2>&1 \ + || openssl pkcs12 -export -out "$tmp/id.p12" \ + -inkey "$tmp/key.pem" -in "$tmp/cert.pem" -passout pass: >/dev/null 2>&1 + security import "$tmp/id.p12" -k "$LOGIN_KEYCHAIN" -P "" \ + -T /usr/bin/codesign -T /usr/bin/security + security add-trusted-cert -r trustRoot -p codeSign -k "$LOGIN_KEYCHAIN" \ + "$tmp/cert.pem" >/dev/null 2>&1 || true + security set-key-partition-list -S apple-tool:,apple:,codesign: -s \ + -k "" "$LOGIN_KEYCHAIN" >/dev/null 2>&1 || true + rm -rf "$tmp" +} + +pick_identity() { + if security find-identity -v -p codesigning 2>/dev/null | grep -qF "\"$SIGN_ID\""; then + printf '%s' "$SIGN_ID"; return + fi + first=$(security find-identity -v -p codesigning 2>/dev/null \ + | sed -n 's/^[[:space:]]*[0-9][0-9]*)[[:space:]]*[0-9A-Fa-f]*[[:space:]]*"\(.*\)"$/\1/p' \ + | head -n1) + if [ -n "$first" ]; then + echo "Identity \"$SIGN_ID\" not found; using \"$first\"." >&2 + printf '%s' "$first"; return + fi + echo "No code-signing identity found — using ad-hoc signing (-)." >&2 + echo " Run './build.sh --create-cert' to make a reusable self-signed \"$SIGN_ID\"." >&2 + printf '%s' "-" +} + +if [ "$1" = "--create-cert" ]; then + create_cert + shift +fi + +swift build -c "$CONFIG" + +rm -rf "$APP" +mkdir -p "$APP/Contents/MacOS" "$APP/Contents/Resources" + +cp ".build/$CONFIG/$BIN" "$APP/Contents/MacOS/$BIN" + +cat > "$APP/Contents/Info.plist" <<'PLIST' + + + + + CFBundleName + Clover Pitch + CFBundleDisplayName + Clover Pitch + CFBundleExecutable + Pitch + CFBundleIdentifier + com.clover.Pitch + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSMinimumSystemVersion + 14.0 + NSHighResolutionCapable + + NSPrincipalClass + NSApplication + NSMicrophoneUsageDescription + Pitch listens to your microphone to detect and visualise the pitch you sing or play. Audio is processed live and never recorded or sent anywhere. + + +PLIST + +printf 'APPL????' > "$APP/Contents/PkgInfo" + +IDENTITY=$(pick_identity) +echo "Signing with: $IDENTITY" +codesign --force --deep --sign "$IDENTITY" "$APP" + +echo "Built $APP" diff --git a/pitch/readme.md b/pitch/readme.md new file mode 100644 index 0000000000000000000000000000000000000000..18a1db10ee0d4dff072a83ca8d22f45a40e61012 --- /dev/null +++ b/pitch/readme.md @@ -0,0 +1,52 @@ +# Clover Pitch + +A native macOS real-time pitch visualiser — a from-scratch clone of +[pitchreader.com](https://pitchreader.com). It listens to a microphone, detects +the fundamental frequency you sing or play, and scrolls it across a piano-roll +timeline against note gridlines. + +Live only — there is no recording mode. + +## Features + +- **Live pitch-over-time graph** — a scrolling piano-roll where the last few + seconds of your pitch are drawn as a glowing trace, weighted by detection + confidence. Sharps/flats rows are shaded like piano keys; octave C lines are + emphasised and labelled. +- **Active note readout** — a large current-note display with octave, exact Hz, + and a ±50-cent tuner needle ("in tune" when within 5¢). +- **Top bar** + - **Microphone** — pick any CoreAudio input device; switching is live. + - **Transpose** — ±12 semitones; shifts every displayed label (like a capo). + - **Note labels** — Sharps, Flats, Solfège (fixed Do), or German (H/B). + - **Range** — vocal/instrument presets (Bass … Soprano, Wide, Full) that set + the visible vertical span. + +## How it works + +- `AudioEngine` captures mono audio via `AVAudioEngine`, down-mixes, and runs a + YIN pitch detector (`PitchDetector.swift`) at a 512-sample hop over a 2048 + window. Detected samples land in a lock-guarded ring buffer. +- `PitchGraphView` is a SwiftUI `Canvas` driven by `TimelineView(.animation)`; + each frame it snapshots the ring buffer and repaints the trace against the + note grid. The clock is `CACurrentMediaTime()` so the trace stays in sync + with the audio timeline. +- Input-device enumeration/selection goes through the CoreAudio HAL + (`CoreAudioDevices.swift`), and the selected device is set on the input + AudioUnit via `kAudioOutputUnitProperty_CurrentDevice`. + +The detector is accurate to a fraction of a cent on synthetic tones across the +full E2–A5 range (see the note-name test compiled from `PitchDetector.swift`). + +## Build & run + +```sh +./run.sh # builds a signed Pitch.app and launches it +./build.sh # just build Pitch.app +``` + +The app must be a signed `.app` bundle (not a bare binary) so the microphone +TCC prompt appears — `NSMicrophoneUsageDescription` lives in the generated +`Info.plist`. `build.sh` signs with the first available codesigning identity, +or run `./build.sh --create-cert` once to mint a reusable self-signed +`Pitch Dev` identity (same pattern as the Sequencer). diff --git a/pitch/run.sh b/pitch/run.sh new file mode 100755 index 0000000000000000000000000000000000000000..1845fdc149a1fa5a5a042b25022053b7155acb27 --- /dev/null +++ b/pitch/run.sh @@ -0,0 +1,8 @@ +#!/bin/sh +set -e +cd "$(dirname "$0")" + +# Build a signed .app (needed so the microphone TCC prompt appears) then launch. +SIGN_ID="${SIGN_ID:-Pitch Dev}" ./build.sh "$@" +pkill -x Pitch 2>/dev/null || true +open Pitch.app diff --git a/readme.md b/readme.md index d148206dc26685a67967a1b37585830cf915b080..3c8bc8a66ab514d3fb40431a636832681855f62c 100644 --- a/readme.md +++ b/readme.md @@ -7,3 +7,4 @@ The projects are independant, yet related: - [**Clover Control**](./control): Glue external input devices to creative software. - [**Clover Recorder**](./recorder): Capture multi-screen recordings. - [**Clover Sequencer**](./sequencer): Multi-track video synchronization. +- [**Clover Pitch**](./pitch): Realtime microphone pitch visualiser. diff --git a/sequencer/CLAUDE.md b/sequencer/CLAUDE.md index 437f3967245b02dc302bfb7d95d1b244cf738c1c..3c24098b91c0839ad454364fda60dcfba1d206a5 100644 --- a/sequencer/CLAUDE.md +++ b/sequencer/CLAUDE.md @@ -16,10 +16,12 @@ There is no test target in Package.swift. Verification instead happens through t ```sh swift run Sequencer --selftest # headless pipeline check (see Selftest.swift) swift run Sequencer --uitest # offscreen TimelineView harness (see UITest.swift) +swift run Sequencer --perftest # offscreen draw-timing harness (see PerfTest.swift) ``` - `--selftest` exercises the real media pipeline against a file you pass in: ffprobe, filmstrip/waveform generation, chunk-proxy building, AVFoundation playability of the built proxy, and prints sample Fusion Lua output. Useful when touching `MediaPipeline.swift` or `ChunkedProxy.swift`. - `--uitest` hosts the real `TimelineView` in an offscreen window and drives it with synthetic `NSEvent`s (move, trim, slip, stretch, box select, split, links, storyboard split, comp parsing, fades, plus file-format migration/round-trip — ~100 assertions, PASS/FAIL printer). Useful when touching timeline gesture code. +- `--perftest` loads a real `.sq` into an offscreen `TimelineView` and times `draw(_:)` while simulating a horizontal pan, at several zoom levels, in both full-detail and simplified (mid-scroll) modes, printing ms/frame and a per-section breakdown (`DrawProf`). Use it when touching timeline **drawing** — it's how the per-clip draw cost was found. The lesson baked into `TimelineView`: never build/tint an `NSImage(systemSymbolName:)` per clip/element per frame (SF-symbol tinting does a `lockFocus` composite) — bake once via `bakedSymbol(...)`. Clip labels and filmstrips are also gated to at-rest / wide-enough via the `isScrolling` simplified path. Requires `ffmpeg`/`ffprobe` on PATH for anything touching media (probing, filmstrips, proxies). @@ -57,10 +59,10 @@ Each open project is a `ProjectDocument: NSDocument` owning a `DocumentContext` This is the most complex subsystem — a three-stage pipeline. `ChunkManager` and `PlaybackController`/`PlayerManager` are per-document (`ctx.chunks`, `ctx.playback`, `ctx.players`); `MediaPipeline` is the one global (a shared content-addressed cache): 1. **`MediaPipeline`** (`MediaPipeline.swift`) — wraps ffprobe/ffmpeg. Probes media, generates filmstrips (thumbnail strips) and waveforms async, LRU content-addressed cache (default 50GB). Cache key = `SHA256(path|size|mtime)`, so moved/remounted files with identical content still hit cache. -2. **`ChunkManager`** (`ChunkedProxy.swift`) — demand-driven **30-second ProRes Proxy chunks** instead of whole-file transcodes. Builds chunks around the playhead and on-timeline clip ranges, three priority queues (urgent/background/failed). Adaptive quality (4 resolution/fps tiers) steps down/up based on measured encode wall-time vs. realtime ratio, and distinguishes network vs. encode bottlenecks. Composes ready chunks + original-file fallback into an `AVComposition`, versioned so playback only swaps when it's a strict upgrade (avoids black-frame flashes). -3. **`PlaybackController`** + `PlayerManager` (`PlaybackController.swift`) — master clock anchored to `CACurrentMediaTime()`; all players chase this one authoritative time at 60Hz. Supports reverse and J/K/L shuttle speeds (±1/2/4/8/16/32/64). One `AVPlayer` per video track, one per overlapping audio clip (audio gets looser sync tolerance since originals live on NAS). Seeks coalesce while one is in-flight. +2. **`ChunkManager`** (`ChunkedProxy.swift`) — demand-driven **30-second ProRes Proxy chunks** instead of whole-file transcodes. **Build order is the whole game** (`updateDemand` → `nextJob` → `pump`): every playback tick recomputes a best-first `demand` list from the playhead, playback direction, and visibility — for each video clip in a look-ahead window it scores the proxy chunks its source range needs (coverage before sharpening, visible/focused tracks before hidden, nearer the playhead in the playback direction before farther) so the frame you're about to see is always built first. Chunks outside the window fall to the whole-project background fill (`ensure`). Adaptive quality (4 resolution/fps tiers) steps down/up based on measured encode wall-time vs. realtime ratio and distinguishes network vs. encode bottlenecks; **imminent** coverage (uncovered, just ahead, visible) builds at that adaptive realtime quality so it lands in time, everything else at the full preview-quality target. Composes ready chunks + original-file fallback into a **per-media** `AVComposition` (`composition(for:)`), versioned so playback only swaps on a strict upgrade. Per-media (not per-track) is deliberate: only the clip under the playhead needs building, so the current frame is ready fast — a whole-track composition would have to assemble the entire timeline before it could show anything, which is far too slow for a big multicut project. +3. **`PlaybackController`** + `PlayerManager` (`PlaybackController.swift`) — master clock anchored to `CACurrentMediaTime()`; all players chase this one authoritative time at 60Hz. Supports reverse and J/K/L shuttle speeds (±1/2/4/8/16/32/64). Each video track is a **`VideoTrackPlayer`: two `AVPlayer`s (front/back) for gapless cuts.** The front shows the clip under the playhead (`currentTime` == source time, chasing at `rate × clip.speed`); as a cut to a *different media* approaches (~1.5 s out) the back is prerolled to the next clip's first frame — loaded, decoded, parked, muted — and at the cut the roles flip. The viewer's cell holds two `AVPlayerLayer`s (one bound to each sub-player, stable) and just toggles which is visible, so the flip is a layer swap with no `replaceCurrentItem` black-frame gap. Same-media continuations don't buffer (the front keeps its item and seeks). `tick()` runs `sync()` (which does the flip) *before* posting `.playheadChanged`, so the viewer reflects the flip on the same frame. Standalone `.audio` clips get one `AVPlayer` per clip (looser sync tolerance since originals live on NAS); a clip's player is **prerolled ~1 s before its cut and kept running (silent — its fade gain is 0 until reached)**, so crossing an audio cut is a seamless volume handover rather than a cold start — see `audioLookahead`/`audioLinger` in `syncAudio`. Item swaps hold the fresh item silent (`rate = 0`) until the immediately-following `syncTime` seeks it to the live position, so a swap never blips wrong content from t=0. `.projectChanged` forces a hard resync only while **paused** — during playback the 60 Hz tick already tracks, so edits away from the playhead don't stutter. Seeks coalesce while one is in-flight. -When working on playback bugs, the mental model is: `MediaPipeline` produces cached derived assets → `ChunkManager` decides what to build and assembles compositions → `PlaybackController` drives players against those compositions on a shared clock. +When working on playback bugs, the mental model is: `MediaPipeline` produces cached derived assets → `ChunkManager` decides what to build (playhead/visibility-ordered) and assembles per-media compositions → `PlaybackController` drives the players (a double-buffered pair per video track, one per audio clip) against those compositions on a shared clock. Two levers make cuts gapless: the **build order** gets the next clip's proxy ready ahead of time, and the **double buffer** prerolls it and flips without an item swap. ### Fusion integration (`FusionExport.swift`, `FusionComps.swift`) diff --git a/sequencer/Deltarune Ch5.sq/project.json b/sequencer/Deltarune Ch5.sq/project.json new file mode 100644 index 0000000000000000000000000000000000000000..474767f697c486ce06c41b116df1df51bc3ae133 --- /dev/null +++ b/sequencer/Deltarune Ch5.sq/project.json @@ -0,0 +1,11285 @@ +{ + "formatVersion" : 2, + "project" : { + "boardHeight" : 1080, + "boardWidth" : 1920, + "clips" : [ + { + "duration" : 8.779661016949152, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "0856AA33-6A7E-4E96-BFB1-7B40DCC5C3E2", + "kind" : "video", + "linkId" : "E4929B8D-EE5B-4B9D-850D-B43F8A803E7A", + "mediaId" : "26CBEF77-6850-4D82-A5BD-A6A37587C040", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 0.8026453438086703, + "start" : 0, + "track" : "v0" + }, + { + "duration" : 8.779661016949152, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "F03A433A-DD0D-43A4-B2E0-77976661B8D5", + "kind" : "audio", + "linkId" : "E4929B8D-EE5B-4B9D-850D-B43F8A803E7A", + "mediaId" : "F676BA7D-A0E0-4603-AE13-B853D2F9F2BB", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 0.9509002194553415, + "start" : 0, + "track" : "v1" + }, + { + "duration" : 8.779661016949152, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "DDC04C1A-94A8-4F4D-9568-73F07B3E0304", + "kind" : "audio", + "linkId" : "E4929B8D-EE5B-4B9D-850D-B43F8A803E7A", + "mediaId" : "6FFA3786-8E51-4E69-A15D-D6A991C0CCAD", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1.2881355932203389, + "start" : 0, + "track" : "v2" + }, + { + "duration" : 8.779661016949152, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "856D7E40-8EF3-4242-AB37-B26CBFD4B3F7", + "kind" : "video", + "linkId" : "E4929B8D-EE5B-4B9D-850D-B43F8A803E7A", + "mediaId" : "609E978E-5994-4757-A6C7-EAAE72818A49", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 0.8603196774655755, + "start" : 0, + "track" : "v3" + }, + { + "duration" : 8.779661016949152, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "ACBD774E-FC95-41F4-B5FB-037577828AD9", + "kind" : "video", + "linkId" : "E4929B8D-EE5B-4B9D-850D-B43F8A803E7A", + "mediaId" : "C0E05C14-2D32-4A55-9041-7A752A97F6B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 0.8603078854665893, + "start" : 0, + "track" : "v4" + }, + { + "duration" : 9.288135593220339, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "21E55168-059F-4CFC-AF14-FF43F7E7A9F8", + "kind" : "video", + "linkId" : "7ADB32D0-2D02-491A-8BF7-11F6A47A354E", + "mediaId" : "26CBEF77-6850-4D82-A5BD-A6A37587C040", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 11.582306360757823, + "start" : 8.779661016949152, + "track" : "v0" + }, + { + "duration" : 9.288135593220339, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "FA932A03-4AEE-428C-9593-EB3CFA09BEBE", + "kind" : "audio", + "linkId" : "7ADB32D0-2D02-491A-8BF7-11F6A47A354E", + "mediaId" : "F676BA7D-A0E0-4603-AE13-B853D2F9F2BB", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 11.730561236404494, + "start" : 8.779661016949152, + "track" : "v1" + }, + { + "duration" : 9.288135593220339, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "BDB5ABE0-71D2-457D-A7D4-21ADCC3B5743", + "kind" : "audio", + "linkId" : "7ADB32D0-2D02-491A-8BF7-11F6A47A354E", + "mediaId" : "6FFA3786-8E51-4E69-A15D-D6A991C0CCAD", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 12.067796610169491, + "start" : 8.779661016949152, + "track" : "v2" + }, + { + "duration" : 9.288135593220339, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "2A859930-C3F8-4E02-BD27-4CF36CF2138E", + "kind" : "video", + "linkId" : "7ADB32D0-2D02-491A-8BF7-11F6A47A354E", + "mediaId" : "609E978E-5994-4757-A6C7-EAAE72818A49", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 11.639980694414728, + "start" : 8.779661016949152, + "track" : "v3" + }, + { + "duration" : 9.288135593220339, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "197B76CD-FB1C-4DB5-BB64-B260CC9CC769", + "kind" : "video", + "linkId" : "7ADB32D0-2D02-491A-8BF7-11F6A47A354E", + "mediaId" : "C0E05C14-2D32-4A55-9041-7A752A97F6B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 11.639968902415742, + "start" : 8.779661016949152, + "track" : "v4" + }, + { + "duration" : 1.322033898305083, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "30FF8D20-D84E-4A9C-8303-F75C6D488959", + "kind" : "video", + "linkId" : "DE8705CE-9B40-487A-A252-50C469C56589", + "mediaId" : "26CBEF77-6850-4D82-A5BD-A6A37587C040", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 86.02298432685951, + "start" : 18.067796610169495, + "track" : "v0" + }, + { + "duration" : 1.322033898305083, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "28F8C52E-77E0-4886-9A6F-49E8524EFDB0", + "kind" : "audio", + "linkId" : "DE8705CE-9B40-487A-A252-50C469C56589", + "mediaId" : "F676BA7D-A0E0-4603-AE13-B853D2F9F2BB", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 86.17123920250619, + "start" : 18.067796610169495, + "track" : "v1" + }, + { + "duration" : 1.322033898305083, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "385FB864-B457-4585-A1E2-B07F0B398682", + "kind" : "audio", + "linkId" : "DE8705CE-9B40-487A-A252-50C469C56589", + "mediaId" : "6FFA3786-8E51-4E69-A15D-D6A991C0CCAD", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 86.50847457627118, + "start" : 18.067796610169495, + "track" : "v2" + }, + { + "duration" : 1.322033898305083, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "4703FBC9-8E06-4DE3-A460-19695096A67B", + "kind" : "video", + "linkId" : "DE8705CE-9B40-487A-A252-50C469C56589", + "mediaId" : "609E978E-5994-4757-A6C7-EAAE72818A49", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 86.08065866051642, + "start" : 18.067796610169495, + "track" : "v3" + }, + { + "duration" : 1.322033898305083, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "14297849-4D4F-41D8-A59A-15B5B1D60DF2", + "kind" : "video", + "linkId" : "DE8705CE-9B40-487A-A252-50C469C56589", + "mediaId" : "C0E05C14-2D32-4A55-9041-7A752A97F6B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 86.08064686851743, + "start" : 18.067796610169495, + "track" : "v4" + }, + { + "duration" : 1.1525423728813529, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "5EF423FA-AD82-4C89-8385-335325345015", + "kind" : "video", + "linkId" : "66157B6F-FF8D-490F-B510-26417942AA98", + "mediaId" : "26CBEF77-6850-4D82-A5BD-A6A37587C040", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 113.98908602177477, + "start" : 19.389830508474578, + "track" : "v0" + }, + { + "duration" : 1.1525423728813529, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "95F0F7BD-FA8B-48FE-A975-859CBDE2F60A", + "kind" : "audio", + "linkId" : "66157B6F-FF8D-490F-B510-26417942AA98", + "mediaId" : "F676BA7D-A0E0-4603-AE13-B853D2F9F2BB", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 114.13734089742144, + "start" : 19.389830508474578, + "track" : "v1" + }, + { + "duration" : 1.1525423728813529, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "236F5693-66F0-4DF2-9C6B-0FC10DC039A0", + "kind" : "audio", + "linkId" : "66157B6F-FF8D-490F-B510-26417942AA98", + "mediaId" : "6FFA3786-8E51-4E69-A15D-D6A991C0CCAD", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 114.47457627118644, + "start" : 19.389830508474578, + "track" : "v2" + }, + { + "duration" : 1.1525423728813529, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "08DF237F-434A-4ADB-B77C-F165BA3B9BAE", + "kind" : "video", + "linkId" : "66157B6F-FF8D-490F-B510-26417942AA98", + "mediaId" : "609E978E-5994-4757-A6C7-EAAE72818A49", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 114.04676035543167, + "start" : 19.389830508474578, + "track" : "v3" + }, + { + "duration" : 1.1525423728813529, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "6CEFB0C1-9FA6-4727-B291-AE95CBF63C1E", + "kind" : "video", + "linkId" : "66157B6F-FF8D-490F-B510-26417942AA98", + "mediaId" : "C0E05C14-2D32-4A55-9041-7A752A97F6B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 114.04674856343269, + "start" : 19.389830508474578, + "track" : "v4" + }, + { + "duration" : 5.220338983050851, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "CBC234E0-371D-4FDA-99B5-0BB7DE1737EB", + "kind" : "video", + "linkId" : "CEA52F0A-38E4-4F7B-AB96-117218501790", + "mediaId" : "26CBEF77-6850-4D82-A5BD-A6A37587C040", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 397.9212894116052, + "start" : 20.54237288135596, + "track" : "v0" + }, + { + "duration" : 5.220338983050851, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A4F89301-A2DE-4597-AD9E-DC51F3507355", + "kind" : "audio", + "linkId" : "CEA52F0A-38E4-4F7B-AB96-117218501790", + "mediaId" : "F676BA7D-A0E0-4603-AE13-B853D2F9F2BB", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 398.06954428725186, + "start" : 20.54237288135596, + "track" : "v1" + }, + { + "duration" : 5.220338983050851, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "F00A71B2-649B-4BF6-9C0A-80270331C353", + "kind" : "audio", + "linkId" : "CEA52F0A-38E4-4F7B-AB96-117218501790", + "mediaId" : "6FFA3786-8E51-4E69-A15D-D6A991C0CCAD", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 398.40677966101686, + "start" : 20.54237288135596, + "track" : "v2" + }, + { + "duration" : 5.220338983050851, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "31A4F820-D7C2-4CAB-8A20-F52F615C6114", + "kind" : "video", + "linkId" : "CEA52F0A-38E4-4F7B-AB96-117218501790", + "mediaId" : "609E978E-5994-4757-A6C7-EAAE72818A49", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 397.9789637452621, + "start" : 20.54237288135596, + "track" : "v3" + }, + { + "duration" : 5.220338983050851, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "4B6EF408-0BAE-4495-885B-A0281AFD0B46", + "kind" : "video", + "linkId" : "CEA52F0A-38E4-4F7B-AB96-117218501790", + "mediaId" : "C0E05C14-2D32-4A55-9041-7A752A97F6B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 397.9789519532631, + "start" : 20.54237288135596, + "track" : "v4" + }, + { + "duration" : 14.57627118644065, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "B386A5EC-7B75-421C-941E-9A2E8FC4C303", + "kind" : "video", + "linkId" : "3688DE28-A2CB-4ED5-9666-9772A7FAF5FD", + "mediaId" : "26CBEF77-6850-4D82-A5BD-A6A37587C040", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 422.73484873363907, + "start" : 25.76271186440681, + "track" : "v0" + }, + { + "duration" : 14.57627118644065, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "78D95643-9E92-4665-A49E-1640916F222F", + "kind" : "audio", + "linkId" : "3688DE28-A2CB-4ED5-9666-9772A7FAF5FD", + "mediaId" : "F676BA7D-A0E0-4603-AE13-B853D2F9F2BB", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 422.88310360928574, + "start" : 25.76271186440681, + "track" : "v1" + }, + { + "duration" : 14.57627118644065, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "3EC46637-04E5-407D-90BD-BB290FB532C6", + "kind" : "audio", + "linkId" : "3688DE28-A2CB-4ED5-9666-9772A7FAF5FD", + "mediaId" : "6FFA3786-8E51-4E69-A15D-D6A991C0CCAD", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 423.22033898305074, + "start" : 25.76271186440681, + "track" : "v2" + }, + { + "duration" : 14.57627118644065, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "54D04272-5607-4E88-BBAB-A50A9FEAA953", + "kind" : "video", + "linkId" : "3688DE28-A2CB-4ED5-9666-9772A7FAF5FD", + "mediaId" : "609E978E-5994-4757-A6C7-EAAE72818A49", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 422.792523067296, + "start" : 25.76271186440681, + "track" : "v3" + }, + { + "duration" : 14.57627118644065, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "7B34B91A-3E53-4B21-A7C7-22172D7442EA", + "kind" : "video", + "linkId" : "3688DE28-A2CB-4ED5-9666-9772A7FAF5FD", + "mediaId" : "C0E05C14-2D32-4A55-9041-7A752A97F6B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 422.792511275297, + "start" : 25.76271186440681, + "track" : "v4" + }, + { + "duration" : 10.644067796610166, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "3EDF6E35-1C81-4706-878F-E685962438E7", + "kind" : "video", + "linkId" : "E6380C0A-8BCB-4E01-A3FF-4B6CE609EBA7", + "mediaId" : "26CBEF77-6850-4D82-A5BD-A6A37587C040", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 447.0399334794017, + "start" : 40.33898305084746, + "track" : "v0" + }, + { + "duration" : 10.644067796610166, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "5E3BFA57-DA8E-47B2-969D-026F31AD2A3C", + "kind" : "audio", + "linkId" : "E6380C0A-8BCB-4E01-A3FF-4B6CE609EBA7", + "mediaId" : "F676BA7D-A0E0-4603-AE13-B853D2F9F2BB", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 447.1881883550484, + "start" : 40.33898305084746, + "track" : "v1" + }, + { + "duration" : 10.644067796610166, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "8E2AD73C-7F9E-4F46-8D04-EF9087EE690A", + "kind" : "audio", + "linkId" : "E6380C0A-8BCB-4E01-A3FF-4B6CE609EBA7", + "mediaId" : "6FFA3786-8E51-4E69-A15D-D6A991C0CCAD", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 447.5254237288134, + "start" : 40.33898305084746, + "track" : "v2" + }, + { + "duration" : 10.644067796610166, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "F54DE68B-6E96-4BA9-BEB6-81E4B984892C", + "kind" : "video", + "linkId" : "E6380C0A-8BCB-4E01-A3FF-4B6CE609EBA7", + "mediaId" : "609E978E-5994-4757-A6C7-EAAE72818A49", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 447.09760781305863, + "start" : 40.33898305084746, + "track" : "v3" + }, + { + "duration" : 10.644067796610166, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "C77A294D-6278-4BAD-8BC5-F7BC3C372A00", + "kind" : "video", + "linkId" : "E6380C0A-8BCB-4E01-A3FF-4B6CE609EBA7", + "mediaId" : "C0E05C14-2D32-4A55-9041-7A752A97F6B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 447.09759602105964, + "start" : 40.33898305084746, + "track" : "v4" + }, + { + "duration" : 9.694915254237287, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "BA4DCFDD-E47E-4485-86C7-5D2F91DAD82A", + "kind" : "video", + "linkId" : "6CC9888B-E11F-41E5-BAC2-A15C7D015557", + "mediaId" : "26CBEF77-6850-4D82-A5BD-A6A37587C040", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 495.4128148353339, + "start" : 50.983050847457626, + "track" : "v0" + }, + { + "duration" : 9.694915254237287, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "F7D2760F-4578-4319-9C36-40A5E0C0554A", + "kind" : "audio", + "linkId" : "6CC9888B-E11F-41E5-BAC2-A15C7D015557", + "mediaId" : "F676BA7D-A0E0-4603-AE13-B853D2F9F2BB", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 495.5610697109806, + "start" : 50.983050847457626, + "track" : "v1" + }, + { + "duration" : 9.694915254237287, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "344797CD-1399-4A2F-B5D4-ED0DAFF921B2", + "kind" : "audio", + "linkId" : "6CC9888B-E11F-41E5-BAC2-A15C7D015557", + "mediaId" : "6FFA3786-8E51-4E69-A15D-D6A991C0CCAD", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 495.8983050847456, + "start" : 50.983050847457626, + "track" : "v2" + }, + { + "duration" : 9.694915254237287, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "436EE031-3821-460A-B1E6-362C6AC7DD15", + "kind" : "video", + "linkId" : "6CC9888B-E11F-41E5-BAC2-A15C7D015557", + "mediaId" : "609E978E-5994-4757-A6C7-EAAE72818A49", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 495.4704891689908, + "start" : 50.983050847457626, + "track" : "v3" + }, + { + "duration" : 9.694915254237287, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "DA7C94D5-26B6-465A-958E-DA029F1CEC3F", + "kind" : "video", + "linkId" : "6CC9888B-E11F-41E5-BAC2-A15C7D015557", + "mediaId" : "C0E05C14-2D32-4A55-9041-7A752A97F6B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 495.4704773769918, + "start" : 50.983050847457626, + "track" : "v4" + }, + { + "duration" : 12.440677966101696, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "EF8B18B2-7BEB-4520-9C17-903C1A223C06", + "kind" : "video", + "linkId" : "8D7F9D29-68E0-4E62-B7D7-B149575B3269", + "mediaId" : "26CBEF77-6850-4D82-A5BD-A6A37587C040", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 511.0399334794017, + "start" : 60.67796610169491, + "track" : "v0" + }, + { + "duration" : 12.440677966101696, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "65C8245D-4AA2-4534-BDAF-3D2841DC3F70", + "kind" : "audio", + "linkId" : "8D7F9D29-68E0-4E62-B7D7-B149575B3269", + "mediaId" : "F676BA7D-A0E0-4603-AE13-B853D2F9F2BB", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 511.1881883550484, + "start" : 60.67796610169491, + "track" : "v1" + }, + { + "duration" : 12.440677966101696, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "8ECF7044-2C74-43E6-9219-036DB453AA8E", + "kind" : "audio", + "linkId" : "8D7F9D29-68E0-4E62-B7D7-B149575B3269", + "mediaId" : "6FFA3786-8E51-4E69-A15D-D6A991C0CCAD", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 511.5254237288134, + "start" : 60.67796610169491, + "track" : "v2" + }, + { + "duration" : 12.440677966101696, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "E0691830-C2E3-4692-A443-C96E79034416", + "kind" : "video", + "linkId" : "8D7F9D29-68E0-4E62-B7D7-B149575B3269", + "mediaId" : "609E978E-5994-4757-A6C7-EAAE72818A49", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 511.09760781305863, + "start" : 60.67796610169491, + "track" : "v3" + }, + { + "duration" : 12.440677966101696, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "1DF28AA1-85FC-4AA6-8BCC-86CF38B06C1B", + "kind" : "video", + "linkId" : "8D7F9D29-68E0-4E62-B7D7-B149575B3269", + "mediaId" : "C0E05C14-2D32-4A55-9041-7A752A97F6B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 511.09759602105964, + "start" : 60.67796610169491, + "track" : "v4" + }, + { + "duration" : 2.0677966101694807, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "4937BF52-96D7-4AF0-B222-22E27B797A5C", + "kind" : "video", + "linkId" : "E5D93442-8B82-4040-8E5F-BD717FD75859", + "mediaId" : "26CBEF77-6850-4D82-A5BD-A6A37587C040", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 539.9212894116051, + "start" : 73.11864406779661, + "track" : "v0" + }, + { + "duration" : 2.0677966101694807, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "16FFB49E-AD0E-430F-BC1E-0E649D37B469", + "kind" : "audio", + "linkId" : "E5D93442-8B82-4040-8E5F-BD717FD75859", + "mediaId" : "F676BA7D-A0E0-4603-AE13-B853D2F9F2BB", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 540.0695442872518, + "start" : 73.11864406779661, + "track" : "v1" + }, + { + "duration" : 2.0677966101694807, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "3772DE62-3FC2-491B-9DBC-922F6DDC5BB1", + "kind" : "audio", + "linkId" : "E5D93442-8B82-4040-8E5F-BD717FD75859", + "mediaId" : "6FFA3786-8E51-4E69-A15D-D6A991C0CCAD", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 540.4067796610168, + "start" : 73.11864406779661, + "track" : "v2" + }, + { + "duration" : 2.0677966101694807, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "4A62F7EC-EFF6-4CE8-82FA-024FC1AE5421", + "kind" : "video", + "linkId" : "E5D93442-8B82-4040-8E5F-BD717FD75859", + "mediaId" : "609E978E-5994-4757-A6C7-EAAE72818A49", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 539.978963745262, + "start" : 73.11864406779661, + "track" : "v3" + }, + { + "duration" : 2.0677966101694807, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "7E5889B3-52E4-48AD-8E76-DCAC57E2F26C", + "kind" : "video", + "linkId" : "E5D93442-8B82-4040-8E5F-BD717FD75859", + "mediaId" : "C0E05C14-2D32-4A55-9041-7A752A97F6B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 539.978951953263, + "start" : 73.11864406779661, + "track" : "v4" + }, + { + "duration" : 4.542372881355931, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "779C851A-2F3C-4B84-8EDB-99C3D657B311", + "kind" : "video", + "linkId" : "DCA0DA82-D677-4F94-8ECD-EC2EE408A444", + "mediaId" : "26CBEF77-6850-4D82-A5BD-A6A37587C040", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 552.0229843268594, + "start" : 75.18644067796609, + "track" : "v0" + }, + { + "duration" : 4.542372881355931, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "6897606B-DA0A-4825-B6DB-325E170FC9B9", + "kind" : "audio", + "linkId" : "DCA0DA82-D677-4F94-8ECD-EC2EE408A444", + "mediaId" : "F676BA7D-A0E0-4603-AE13-B853D2F9F2BB", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 552.1712392025061, + "start" : 75.18644067796609, + "track" : "v1" + }, + { + "duration" : 4.542372881355931, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "07934764-AD42-4089-80B6-B244015447CF", + "kind" : "audio", + "linkId" : "DCA0DA82-D677-4F94-8ECD-EC2EE408A444", + "mediaId" : "6FFA3786-8E51-4E69-A15D-D6A991C0CCAD", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 552.508474576271, + "start" : 75.18644067796609, + "track" : "v2" + }, + { + "duration" : 4.542372881355931, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "EE2670C2-1AAA-40FC-A411-8CE33185992E", + "kind" : "video", + "linkId" : "DCA0DA82-D677-4F94-8ECD-EC2EE408A444", + "mediaId" : "609E978E-5994-4757-A6C7-EAAE72818A49", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 552.0806586605163, + "start" : 75.18644067796609, + "track" : "v3" + }, + { + "duration" : 4.542372881355931, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "83DC8C97-0117-495D-AB6F-488575028DF6", + "kind" : "video", + "linkId" : "DCA0DA82-D677-4F94-8ECD-EC2EE408A444", + "mediaId" : "C0E05C14-2D32-4A55-9041-7A752A97F6B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 552.0806468685173, + "start" : 75.18644067796609, + "track" : "v4" + }, + { + "duration" : 2.542372881355945, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "75DD8465-3E74-4576-A287-6F0B7A25885F", + "kind" : "video", + "linkId" : "B3514666-D79A-43F4-96AF-77F14857D9AE", + "mediaId" : "26CBEF77-6850-4D82-A5BD-A6A37587C040", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 565.1077300895713, + "start" : 79.76271186440677, + "track" : "v0" + }, + { + "duration" : 2.542372881355945, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "B5BC5C0D-5C8F-4616-954E-F0544734C4CC", + "kind" : "audio", + "linkId" : "B3514666-D79A-43F4-96AF-77F14857D9AE", + "mediaId" : "F676BA7D-A0E0-4603-AE13-B853D2F9F2BB", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 565.255984965218, + "start" : 79.76271186440677, + "track" : "v1" + }, + { + "duration" : 2.542372881355945, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "743266F1-8759-428D-8500-328A33B14EE7", + "kind" : "audio", + "linkId" : "B3514666-D79A-43F4-96AF-77F14857D9AE", + "mediaId" : "6FFA3786-8E51-4E69-A15D-D6A991C0CCAD", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 565.593220338983, + "start" : 79.76271186440677, + "track" : "v2" + }, + { + "duration" : 2.542372881355945, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "99C8EB5C-633C-407A-B29D-0F563C4A2A11", + "kind" : "video", + "linkId" : "B3514666-D79A-43F4-96AF-77F14857D9AE", + "mediaId" : "609E978E-5994-4757-A6C7-EAAE72818A49", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 565.1654044232282, + "start" : 79.76271186440677, + "track" : "v3" + }, + { + "duration" : 2.542372881355945, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "F5A5A67A-1C13-4920-94A3-D63379305184", + "kind" : "video", + "linkId" : "B3514666-D79A-43F4-96AF-77F14857D9AE", + "mediaId" : "C0E05C14-2D32-4A55-9041-7A752A97F6B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 565.1653926312292, + "start" : 79.76271186440677, + "track" : "v4" + }, + { + "duration" : 7.457627118644069, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "C4F9A637-30B0-4050-B75E-6C87C85699A8", + "kind" : "video", + "linkId" : "E6C60A60-B509-4E76-A1F1-797378C6C7EF", + "mediaId" : "26CBEF77-6850-4D82-A5BD-A6A37587C040", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 792.0229843268595, + "start" : 82.30508474576271, + "track" : "v0" + }, + { + "duration" : 7.457627118644069, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "D0EF66D9-DF73-4099-BAA1-CD7E3DC03441", + "kind" : "audio", + "linkId" : "E6C60A60-B509-4E76-A1F1-797378C6C7EF", + "mediaId" : "F676BA7D-A0E0-4603-AE13-B853D2F9F2BB", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 792.1712392025062, + "start" : 82.30508474576271, + "track" : "v1" + }, + { + "duration" : 7.457627118644069, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "FACBA48B-CB80-4E8C-AAF6-55705F37FDB8", + "kind" : "audio", + "linkId" : "E6C60A60-B509-4E76-A1F1-797378C6C7EF", + "mediaId" : "6FFA3786-8E51-4E69-A15D-D6A991C0CCAD", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 792.5084745762712, + "start" : 82.30508474576271, + "track" : "v2" + }, + { + "duration" : 7.457627118644069, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "24F56A9C-9D34-412D-AAFA-816D98E1BF4C", + "kind" : "video", + "linkId" : "E6C60A60-B509-4E76-A1F1-797378C6C7EF", + "mediaId" : "609E978E-5994-4757-A6C7-EAAE72818A49", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 792.0806586605164, + "start" : 82.30508474576271, + "track" : "v3" + }, + { + "duration" : 7.457627118644069, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "E8BDB4FD-1478-46C9-B2B9-4A995785C804", + "kind" : "video", + "linkId" : "E6C60A60-B509-4E76-A1F1-797378C6C7EF", + "mediaId" : "C0E05C14-2D32-4A55-9041-7A752A97F6B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 792.0806468685174, + "start" : 82.30508474576271, + "track" : "v4" + }, + { + "duration" : 5.7966101694915295, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "9F719822-EE9F-4D98-AE6F-95832502501D", + "kind" : "video", + "linkId" : "33DE57F6-49E9-47DA-971D-A7E3824D9B47", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 6.203389830508485, + "start" : 89.76271186440678, + "track" : "v0" + }, + { + "duration" : 5.7966101694915295, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "4D903E13-8AAE-4EED-9E78-EB2D6201EE84", + "kind" : "audio", + "linkId" : "33DE57F6-49E9-47DA-971D-A7E3824D9B47", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 6.1195182891674165, + "start" : 89.76271186440678, + "track" : "v1" + }, + { + "duration" : 5.7966101694915295, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "0A6A0000-76C4-4F4F-A5EC-B9DB5AA10EE5", + "kind" : "audio", + "linkId" : "33DE57F6-49E9-47DA-971D-A7E3824D9B47", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 6.166194592398341, + "start" : 89.76271186440678, + "track" : "v2" + }, + { + "duration" : 5.7966101694915295, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "91FC4279-5D23-44A0-BA93-5BC8CFB0775C", + "kind" : "video", + "linkId" : "33DE57F6-49E9-47DA-971D-A7E3824D9B47", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 6.029587456170219, + "start" : 89.76271186440678, + "track" : "v3" + }, + { + "duration" : 5.7966101694915295, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "51B251E0-3404-4CAC-B18A-37A29B9BF96B", + "kind" : "video", + "linkId" : "33DE57F6-49E9-47DA-971D-A7E3824D9B47", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 6.029582872171403, + "start" : 89.76271186440678, + "track" : "v4" + }, + { + "duration" : 18.847457627118715, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "E8DC76EC-C4D2-46AE-853A-A60F4F0D2E07", + "kind" : "video", + "linkId" : "C5B94050-9128-423F-8A3C-F610A15ECBE8", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 153.08474576271186, + "start" : 116.81355932203384, + "track" : "v0" + }, + { + "duration" : 18.847457627118715, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "4440B25F-48FC-49CC-9A78-207D16DDCCB7", + "kind" : "audio", + "linkId" : "C5B94050-9128-423F-8A3C-F610A15ECBE8", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 153.0008742213708, + "start" : 116.81355932203384, + "track" : "v1" + }, + { + "duration" : 18.847457627118715, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "6FEFD05B-C857-4EBE-9EE7-F0EAAA08569F", + "kind" : "audio", + "linkId" : "C5B94050-9128-423F-8A3C-F610A15ECBE8", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 153.04755052460172, + "start" : 116.81355932203384, + "track" : "v2" + }, + { + "duration" : 18.847457627118715, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "E1C8762B-5477-4769-BD47-2DE3F3E7F08A", + "kind" : "video", + "linkId" : "C5B94050-9128-423F-8A3C-F610A15ECBE8", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 152.9109433883736, + "start" : 116.81355932203384, + "track" : "v3" + }, + { + "duration" : 18.847457627118715, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "6C90A7B0-6891-4C26-9ACE-E78062706047", + "kind" : "video", + "linkId" : "C5B94050-9128-423F-8A3C-F610A15ECBE8", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 152.91093880437478, + "start" : 116.81355932203384, + "track" : "v4" + }, + { + "duration" : 13.220338983050851, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "BE66E066-F241-46FE-8D9A-606DBA9554B7", + "kind" : "video", + "linkId" : "17FC9151-B113-420C-8754-353E10218637", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 81.01694915254235, + "start" : 103.59322033898304, + "track" : "v0" + }, + { + "duration" : 13.220338983050851, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "D10CE445-F3A3-46E4-B38D-B77AAB60F5FB", + "kind" : "audio", + "linkId" : "17FC9151-B113-420C-8754-353E10218637", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 80.93307761120128, + "start" : 103.59322033898304, + "track" : "v1" + }, + { + "duration" : 13.220338983050851, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "4F4DB6E2-2CC1-4696-8CE6-9B7119E8F034", + "kind" : "audio", + "linkId" : "17FC9151-B113-420C-8754-353E10218637", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 80.97975391443221, + "start" : 103.59322033898304, + "track" : "v2" + }, + { + "duration" : 13.220338983050851, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "27A9D3E7-68B7-40B3-B332-244F8C0C1BF6", + "kind" : "video", + "linkId" : "17FC9151-B113-420C-8754-353E10218637", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 80.84314677820409, + "start" : 103.59322033898304, + "track" : "v3" + }, + { + "duration" : 13.220338983050851, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "5DB078BA-6259-4E90-9C12-E9642D920CED", + "kind" : "video", + "linkId" : "17FC9151-B113-420C-8754-353E10218637", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 80.84314219420527, + "start" : 103.59322033898304, + "track" : "v4" + }, + { + "duration" : 2.6779661016949063, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "5FE10E54-0DF5-4AE4-BD39-77E27BADC0B3", + "kind" : "video", + "linkId" : "557C472E-4AC3-4428-8BD4-7817D0701CAB", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 22.40677966101694, + "start" : 95.55932203389831, + "track" : "v0" + }, + { + "duration" : 2.6779661016949063, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "981061A0-98AF-4B09-9FEF-6DE942F56A18", + "kind" : "audio", + "linkId" : "557C472E-4AC3-4428-8BD4-7817D0701CAB", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 22.322908119675873, + "start" : 95.55932203389831, + "track" : "v1" + }, + { + "duration" : 2.6779661016949063, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "AD29D0F7-2863-42EA-BF7F-AB91267B34D1", + "kind" : "audio", + "linkId" : "557C472E-4AC3-4428-8BD4-7817D0701CAB", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 22.369584422906797, + "start" : 95.55932203389831, + "track" : "v2" + }, + { + "duration" : 2.6779661016949063, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "665388F4-40AF-450A-9C85-EE082E1EE31F", + "kind" : "video", + "linkId" : "557C472E-4AC3-4428-8BD4-7817D0701CAB", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 22.232977286678675, + "start" : 95.55932203389831, + "track" : "v3" + }, + { + "duration" : 2.6779661016949063, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "3A784722-971F-44D4-B835-69C262B69DC7", + "kind" : "video", + "linkId" : "557C472E-4AC3-4428-8BD4-7817D0701CAB", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 22.23297270267986, + "start" : 95.55932203389831, + "track" : "v4" + }, + { + "duration" : 5.355932203389827, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "3101D12D-3956-4472-A689-AC25FAF6B2B3", + "kind" : "video", + "linkId" : "DD4C0E3A-C905-48F3-BA08-017781831163", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 29.423728813559308, + "start" : 98.23728813559322, + "track" : "v0" + }, + { + "duration" : 5.355932203389827, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "8AE89603-E830-41CB-98AA-FCE4DDB65200", + "kind" : "audio", + "linkId" : "DD4C0E3A-C905-48F3-BA08-017781831163", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 29.33985727221824, + "start" : 98.23728813559322, + "track" : "v1" + }, + { + "duration" : 5.355932203389827, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "30FEEB7F-94C6-4D85-98F3-9D56EFDEA6DB", + "kind" : "audio", + "linkId" : "DD4C0E3A-C905-48F3-BA08-017781831163", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 29.386533575449164, + "start" : 98.23728813559322, + "track" : "v2" + }, + { + "duration" : 5.355932203389827, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "986FD34B-99B0-48E4-8AA8-EA9747E0F300", + "kind" : "video", + "linkId" : "DD4C0E3A-C905-48F3-BA08-017781831163", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 29.249926439221042, + "start" : 98.23728813559322, + "track" : "v3" + }, + { + "duration" : 5.355932203389827, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "847F33A9-CA10-4FA4-95E4-3B250E43146A", + "kind" : "video", + "linkId" : "DD4C0E3A-C905-48F3-BA08-017781831163", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 29.249921855222226, + "start" : 98.23728813559322, + "track" : "v4" + }, + { + "duration" : 7.423728813559308, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "11BBE731-6722-4267-9D42-9A793553DE06", + "kind" : "video", + "linkId" : "DA913126-892F-46B7-9A7A-51A2A1951521", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 193.55932203389838, + "start" : 135.66101694915255, + "track" : "v0" + }, + { + "duration" : 7.423728813559308, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "22421728-439D-4470-95A1-EC2EF0D21C81", + "kind" : "audio", + "linkId" : "DA913126-892F-46B7-9A7A-51A2A1951521", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 193.47545049255731, + "start" : 135.66101694915255, + "track" : "v1" + }, + { + "duration" : 7.423728813559308, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "AE02280F-55B2-4037-9D75-5CC083936FD1", + "kind" : "audio", + "linkId" : "DA913126-892F-46B7-9A7A-51A2A1951521", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 193.52212679578824, + "start" : 135.66101694915255, + "track" : "v2" + }, + { + "duration" : 7.423728813559308, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "E2A5436F-D353-42DF-9A48-073C9FE6246F", + "kind" : "video", + "linkId" : "DA913126-892F-46B7-9A7A-51A2A1951521", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 193.38551965956012, + "start" : 135.66101694915255, + "track" : "v3" + }, + { + "duration" : 7.423728813559308, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A1DA8F0A-B592-4DBD-9926-213A33E42749", + "kind" : "video", + "linkId" : "DA913126-892F-46B7-9A7A-51A2A1951521", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 193.3855150755613, + "start" : 135.66101694915255, + "track" : "v4" + }, + { + "duration" : 2.3389830508474745, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "0F625D10-4206-4D6D-8623-4F14529073E3", + "kind" : "video", + "linkId" : "E458F570-26D5-47DD-87C2-E11FF928A2CA", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 214.9152542372882, + "start" : 143.08474576271186, + "track" : "v0" + }, + { + "duration" : 2.3389830508474745, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "F69F71DF-6EEA-48C1-A1F0-F8EE77EE669C", + "kind" : "audio", + "linkId" : "E458F570-26D5-47DD-87C2-E11FF928A2CA", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 214.83138269594713, + "start" : 143.08474576271186, + "track" : "v1" + }, + { + "duration" : 2.3389830508474745, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "63619F12-6728-45D4-9664-77B370607EEB", + "kind" : "audio", + "linkId" : "E458F570-26D5-47DD-87C2-E11FF928A2CA", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 214.87805899917805, + "start" : 143.08474576271186, + "track" : "v2" + }, + { + "duration" : 2.3389830508474745, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "4F7963B1-6583-494B-A319-8F2BF093C517", + "kind" : "video", + "linkId" : "E458F570-26D5-47DD-87C2-E11FF928A2CA", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 214.74145186294993, + "start" : 143.08474576271186, + "track" : "v3" + }, + { + "duration" : 2.3389830508474745, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "95B72825-D2B7-4D97-8C1F-63E1EB598DF9", + "kind" : "video", + "linkId" : "E458F570-26D5-47DD-87C2-E11FF928A2CA", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 214.7414472789511, + "start" : 143.08474576271186, + "track" : "v4" + }, + { + "duration" : 6.135593220338961, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "112CE6B8-BFDF-497C-9C69-CCE7802DB06C", + "kind" : "video", + "linkId" : "A28DCAA3-B061-4E38-8372-878AD7EF2060", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 226.33898305084753, + "start" : 145.42372881355934, + "track" : "v0" + }, + { + "duration" : 6.135593220338961, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "4040BC36-A9F4-4ED3-A653-1978DDDAF7C5", + "kind" : "audio", + "linkId" : "A28DCAA3-B061-4E38-8372-878AD7EF2060", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 226.25511150950646, + "start" : 145.42372881355934, + "track" : "v1" + }, + { + "duration" : 6.135593220338961, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "EFD116A1-EB5D-4CE3-B95D-14B73ECDE548", + "kind" : "audio", + "linkId" : "A28DCAA3-B061-4E38-8372-878AD7EF2060", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 226.3017878127374, + "start" : 145.42372881355934, + "track" : "v2" + }, + { + "duration" : 6.135593220338961, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "0AE31757-C7B4-49BB-AB63-0641A6D83BC3", + "kind" : "video", + "linkId" : "A28DCAA3-B061-4E38-8372-878AD7EF2060", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 226.16518067650927, + "start" : 145.42372881355934, + "track" : "v3" + }, + { + "duration" : 6.135593220338961, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "9E1DFB7E-F165-4D38-AC11-812E55244554", + "kind" : "video", + "linkId" : "A28DCAA3-B061-4E38-8372-878AD7EF2060", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 226.16517609251045, + "start" : 145.42372881355934, + "track" : "v4" + }, + { + "duration" : 8.508474576271198, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "6C78F572-76AD-4191-822E-E127F9D580E4", + "kind" : "video", + "linkId" : "CBF9981A-DB5A-459B-96C0-CFDCEB644C78", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 233.8305084745763, + "start" : 151.5593220338983, + "track" : "v0" + }, + { + "duration" : 8.508474576271198, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "443C9738-2CD2-45FF-89ED-93D209FFBFCA", + "kind" : "audio", + "linkId" : "CBF9981A-DB5A-459B-96C0-CFDCEB644C78", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 233.74663693323524, + "start" : 151.5593220338983, + "track" : "v1" + }, + { + "duration" : 8.508474576271198, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "B28457F9-9054-461C-99E1-73E68152E679", + "kind" : "audio", + "linkId" : "CBF9981A-DB5A-459B-96C0-CFDCEB644C78", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 233.79331323646616, + "start" : 151.5593220338983, + "track" : "v2" + }, + { + "duration" : 8.508474576271198, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "3D057A10-3381-4125-B50C-BC1998039A9D", + "kind" : "video", + "linkId" : "CBF9981A-DB5A-459B-96C0-CFDCEB644C78", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 233.65670610023804, + "start" : 151.5593220338983, + "track" : "v3" + }, + { + "duration" : 8.508474576271198, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "BDECC22C-1053-4191-B2F2-2EDBC4F3B5B5", + "kind" : "video", + "linkId" : "CBF9981A-DB5A-459B-96C0-CFDCEB644C78", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 233.65670151623922, + "start" : 151.5593220338983, + "track" : "v4" + }, + { + "duration" : 9.050847457627128, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "62014848-FAC6-4BBC-8E7A-14F0B28CC0E6", + "kind" : "video", + "linkId" : "4288CB77-E89F-42B1-927E-DEADACE56BA4", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 279.6271186440679, + "start" : 160.0677966101695, + "track" : "v0" + }, + { + "duration" : 9.050847457627128, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "59D15847-5750-41D0-84C8-63D08E771477", + "kind" : "audio", + "linkId" : "4288CB77-E89F-42B1-927E-DEADACE56BA4", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 279.5432471027268, + "start" : 160.0677966101695, + "track" : "v1" + }, + { + "duration" : 9.050847457627128, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "3404389F-7945-4513-A69B-1C428F1D90BE", + "kind" : "audio", + "linkId" : "4288CB77-E89F-42B1-927E-DEADACE56BA4", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 279.58992340595773, + "start" : 160.0677966101695, + "track" : "v2" + }, + { + "duration" : 9.050847457627128, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "91B4872C-9861-4274-ADDC-E13CB1843662", + "kind" : "video", + "linkId" : "4288CB77-E89F-42B1-927E-DEADACE56BA4", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 279.4533162697296, + "start" : 160.0677966101695, + "track" : "v3" + }, + { + "duration" : 9.050847457627128, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "BA59E5A7-F140-4986-8E5B-E8994D035D5D", + "kind" : "video", + "linkId" : "4288CB77-E89F-42B1-927E-DEADACE56BA4", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 279.4533116857308, + "start" : 160.0677966101695, + "track" : "v4" + }, + { + "duration" : 20.983050847457605, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "D9CE7BC0-0A5C-4C90-A15A-7694E9E749B7", + "kind" : "video", + "linkId" : "1B8AA32F-8AAC-4699-91CD-75C5E92F7BA0", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 341.42372881355936, + "start" : 169.11864406779662, + "track" : "v0" + }, + { + "duration" : 20.983050847457605, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "6F77C3F0-E5FF-426F-99E1-AA28B988BB0A", + "kind" : "audio", + "linkId" : "1B8AA32F-8AAC-4699-91CD-75C5E92F7BA0", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 341.3398572722183, + "start" : 169.11864406779662, + "track" : "v1" + }, + { + "duration" : 20.983050847457605, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "DAF8FD62-8F36-4F73-94EE-5380D1E30401", + "kind" : "audio", + "linkId" : "1B8AA32F-8AAC-4699-91CD-75C5E92F7BA0", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 341.3865335754492, + "start" : 169.11864406779662, + "track" : "v2" + }, + { + "duration" : 20.983050847457605, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "74FC2FC5-A8A4-469B-9482-73979D2C373D", + "kind" : "video", + "linkId" : "1B8AA32F-8AAC-4699-91CD-75C5E92F7BA0", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 341.2499264392211, + "start" : 169.11864406779662, + "track" : "v3" + }, + { + "duration" : 20.983050847457605, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "FFA5E7DE-E5C3-4ED5-9004-3201CD4A30DA", + "kind" : "video", + "linkId" : "1B8AA32F-8AAC-4699-91CD-75C5E92F7BA0", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 341.2499218552223, + "start" : 169.11864406779662, + "track" : "v4" + }, + { + "duration" : 3.1525423728813564, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "F7F6AF02-0DE4-4485-8590-753751DA656D", + "kind" : "video", + "linkId" : "1B2E5F19-8476-4AC4-B136-E5222F541298", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 516.9830508474577, + "start" : 190.10169491525423, + "track" : "v0" + }, + { + "duration" : 3.1525423728813564, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "0F29059A-7B58-4133-AA5B-F26BDD11FCEA", + "kind" : "audio", + "linkId" : "1B2E5F19-8476-4AC4-B136-E5222F541298", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 516.8991793061166, + "start" : 190.10169491525423, + "track" : "v1" + }, + { + "duration" : 3.1525423728813564, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "67E73C14-2908-4A77-83E5-6A8F38F25BF4", + "kind" : "audio", + "linkId" : "1B2E5F19-8476-4AC4-B136-E5222F541298", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 516.9458556093475, + "start" : 190.10169491525423, + "track" : "v2" + }, + { + "duration" : 3.1525423728813564, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "DACD3C89-6F61-4E5A-BFF4-ABCB5013028B", + "kind" : "video", + "linkId" : "1B2E5F19-8476-4AC4-B136-E5222F541298", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 516.8092484731194, + "start" : 190.10169491525423, + "track" : "v3" + }, + { + "duration" : 3.1525423728813564, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "D85A8D17-5419-4FE8-A767-7886ACAD06D2", + "kind" : "video", + "linkId" : "1B2E5F19-8476-4AC4-B136-E5222F541298", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 516.8092438891206, + "start" : 190.10169491525423, + "track" : "v4" + }, + { + "duration" : 3.0508474576271283, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "22E40845-33D9-4113-9E6A-72ABDBAF556B", + "kind" : "video", + "linkId" : "3CC5F7F4-7A10-4825-BA22-58F0E5FA39EC", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 526.0677966101696, + "start" : 193.25423728813558, + "track" : "v0" + }, + { + "duration" : 3.0508474576271283, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "80104D35-A942-4197-BE85-9E999B164BD5", + "kind" : "audio", + "linkId" : "3CC5F7F4-7A10-4825-BA22-58F0E5FA39EC", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 525.9839250688285, + "start" : 193.25423728813558, + "track" : "v1" + }, + { + "duration" : 3.0508474576271283, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "98A4488E-8AFB-4DAF-AA4A-B6171B5BE4B0", + "kind" : "audio", + "linkId" : "3CC5F7F4-7A10-4825-BA22-58F0E5FA39EC", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 526.0306013720594, + "start" : 193.25423728813558, + "track" : "v2" + }, + { + "duration" : 3.0508474576271283, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "31F9AFDE-F19F-4D52-8468-6E4FD6E73843", + "kind" : "video", + "linkId" : "3CC5F7F4-7A10-4825-BA22-58F0E5FA39EC", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 525.8939942358313, + "start" : 193.25423728813558, + "track" : "v3" + }, + { + "duration" : 3.0508474576271283, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "58C86E52-F741-4EAF-93E1-9AD9B238BEBC", + "kind" : "video", + "linkId" : "3CC5F7F4-7A10-4825-BA22-58F0E5FA39EC", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 525.8939896518325, + "start" : 193.25423728813558, + "track" : "v4" + }, + { + "duration" : 12.101694915254257, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "729D86A6-9A2B-4F18-97A2-9E4B8842705A", + "kind" : "video", + "linkId" : "96ED86B5-C0C4-427A-AB87-51061D1B6C02", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 547.3898305084747, + "start" : 196.3050847457627, + "track" : "v0" + }, + { + "duration" : 12.101694915254257, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "537BA6C3-FE42-41F7-AFD1-CCD1498FD164", + "kind" : "audio", + "linkId" : "96ED86B5-C0C4-427A-AB87-51061D1B6C02", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 547.3059589671336, + "start" : 196.3050847457627, + "track" : "v1" + }, + { + "duration" : 12.101694915254257, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "DF50C8A8-7061-47D8-9E3E-F76059F64F17", + "kind" : "audio", + "linkId" : "96ED86B5-C0C4-427A-AB87-51061D1B6C02", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 547.3526352703645, + "start" : 196.3050847457627, + "track" : "v2" + }, + { + "duration" : 12.101694915254257, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "396149DF-84B8-447F-8A4F-6BC523F5F5C2", + "kind" : "video", + "linkId" : "96ED86B5-C0C4-427A-AB87-51061D1B6C02", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 547.2160281341364, + "start" : 196.3050847457627, + "track" : "v3" + }, + { + "duration" : 12.101694915254257, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "8BAC1614-CB12-4DC2-9F56-99B2DD91B028", + "kind" : "video", + "linkId" : "96ED86B5-C0C4-427A-AB87-51061D1B6C02", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 547.2160235501376, + "start" : 196.3050847457627, + "track" : "v4" + }, + { + "duration" : 4.203389830508456, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "C677D610-A145-44E9-A5DF-4F24EF105083", + "kind" : "video", + "linkId" : "61201D64-66C9-4C57-8602-97A96701E0BF", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 566.3389830508476, + "start" : 208.40677966101697, + "track" : "v0" + }, + { + "duration" : 4.203389830508456, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "2D9D8A03-3523-4FF8-A897-637F158C3C79", + "kind" : "audio", + "linkId" : "61201D64-66C9-4C57-8602-97A96701E0BF", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 566.2551115095065, + "start" : 208.40677966101697, + "track" : "v1" + }, + { + "duration" : 4.203389830508456, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "61480E1E-954B-45A2-9C3A-FF0F0BB690FC", + "kind" : "audio", + "linkId" : "61201D64-66C9-4C57-8602-97A96701E0BF", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 566.3017878127374, + "start" : 208.40677966101697, + "track" : "v2" + }, + { + "duration" : 4.203389830508456, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "0501FE38-6C08-467C-9E1C-E41CA0498523", + "kind" : "video", + "linkId" : "61201D64-66C9-4C57-8602-97A96701E0BF", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 566.1651806765093, + "start" : 208.40677966101697, + "track" : "v3" + }, + { + "duration" : 4.203389830508456, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "74D8A914-BC66-4C84-BFFA-A0CA6639D704", + "kind" : "video", + "linkId" : "61201D64-66C9-4C57-8602-97A96701E0BF", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 566.1651760925105, + "start" : 208.40677966101697, + "track" : "v4" + }, + { + "duration" : 6.406779661016941, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "9B498BC6-78AB-44F5-B23B-25E8F7DDC89B", + "kind" : "video", + "linkId" : "02AB076D-1732-49F9-AA10-410FA9A3E78F", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 571.35593220339, + "start" : 212.61016949152543, + "track" : "v0" + }, + { + "duration" : 6.406779661016941, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "8C7D77E2-3FA1-41F1-884C-63C516C4AE33", + "kind" : "audio", + "linkId" : "02AB076D-1732-49F9-AA10-410FA9A3E78F", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 571.272060662049, + "start" : 212.61016949152543, + "track" : "v1" + }, + { + "duration" : 6.406779661016941, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "21A1243A-B2AF-4637-B9E4-3BA86980E892", + "kind" : "audio", + "linkId" : "02AB076D-1732-49F9-AA10-410FA9A3E78F", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 571.3187369652799, + "start" : 212.61016949152543, + "track" : "v2" + }, + { + "duration" : 6.406779661016941, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "F361620E-6686-4423-BFBD-736FF93CDEC5", + "kind" : "video", + "linkId" : "02AB076D-1732-49F9-AA10-410FA9A3E78F", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 571.1821298290517, + "start" : 212.61016949152543, + "track" : "v3" + }, + { + "duration" : 6.406779661016941, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "2A763F6C-BEF9-435E-8F42-C72F8F08381A", + "kind" : "video", + "linkId" : "02AB076D-1732-49F9-AA10-410FA9A3E78F", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 571.1821252450529, + "start" : 212.61016949152543, + "track" : "v4" + }, + { + "duration" : 4.610169491525454, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "ADAD35C0-6E8C-4D37-B4E4-D2859B73BE27", + "kind" : "video", + "linkId" : "3473CFA9-BD18-42DA-AD05-6C5914B914B6", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 584.813559322034, + "start" : 222.06779661016947, + "track" : "v0" + }, + { + "duration" : 4.610169491525454, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "86415894-FDC6-4F60-A9B8-0954DBA0D01D", + "kind" : "audio", + "linkId" : "3473CFA9-BD18-42DA-AD05-6C5914B914B6", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 584.729687780693, + "start" : 222.06779661016947, + "track" : "v1" + }, + { + "duration" : 4.610169491525454, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "48CD7335-7777-4C44-A35A-17CFAA490549", + "kind" : "audio", + "linkId" : "3473CFA9-BD18-42DA-AD05-6C5914B914B6", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 584.7763640839239, + "start" : 222.06779661016947, + "track" : "v2" + }, + { + "duration" : 4.610169491525454, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "54BD8C49-005E-4485-9DC1-7F916CF8BDD3", + "kind" : "video", + "linkId" : "3473CFA9-BD18-42DA-AD05-6C5914B914B6", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 584.6397569476958, + "start" : 222.06779661016947, + "track" : "v3" + }, + { + "duration" : 4.610169491525454, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "23AEC066-77D9-4BA3-8117-EE7A8161CBBD", + "kind" : "video", + "linkId" : "3473CFA9-BD18-42DA-AD05-6C5914B914B6", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 584.639752363697, + "start" : 222.06779661016947, + "track" : "v4" + }, + { + "duration" : 2.237288135593218, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "0991B547-CD7C-4CC3-87EC-AD16FF79CEEC", + "kind" : "video", + "linkId" : "02A86E0B-9E9F-4742-A7B2-44024A6F3E6B", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 577.7627118644069, + "start" : 219.01694915254237, + "track" : "v0" + }, + { + "duration" : 2.237288135593218, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A7485496-22C3-4CB6-8034-93F5ACE90052", + "kind" : "audio", + "linkId" : "02A86E0B-9E9F-4742-A7B2-44024A6F3E6B", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 577.6788403230659, + "start" : 219.01694915254237, + "track" : "v1" + }, + { + "duration" : 2.237288135593218, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A8426C1F-0305-45DF-A0C4-57CB7AD56360", + "kind" : "audio", + "linkId" : "02A86E0B-9E9F-4742-A7B2-44024A6F3E6B", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 577.7255166262968, + "start" : 219.01694915254237, + "track" : "v2" + }, + { + "duration" : 2.237288135593218, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "F0053E8C-8FC8-47E2-8431-73026DBACEC8", + "kind" : "video", + "linkId" : "02A86E0B-9E9F-4742-A7B2-44024A6F3E6B", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 577.5889094900687, + "start" : 219.01694915254237, + "track" : "v3" + }, + { + "duration" : 2.237288135593218, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "EF04E82D-AA3C-41CA-B856-4A6914526EC1", + "kind" : "video", + "linkId" : "02A86E0B-9E9F-4742-A7B2-44024A6F3E6B", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 577.5889049060698, + "start" : 219.01694915254237, + "track" : "v4" + }, + { + "duration" : 0.33898305084744607, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "CABADC3E-FA59-4C65-87F2-13BFBE96E557", + "kind" : "video", + "linkId" : "00C998B7-CF37-4D26-B09F-6C36B9B32D82", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 582.4067796610171, + "start" : 221.25423728813558, + "track" : "v0" + }, + { + "duration" : 0.33898305084744607, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "FD19E6CE-504A-42B5-96A0-1CD953096F29", + "kind" : "audio", + "linkId" : "00C998B7-CF37-4D26-B09F-6C36B9B32D82", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 582.3229081196761, + "start" : 221.25423728813558, + "track" : "v1" + }, + { + "duration" : 0.33898305084744607, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A112502F-0EDC-4D49-9AB8-9ACA09DFCDE5", + "kind" : "audio", + "linkId" : "00C998B7-CF37-4D26-B09F-6C36B9B32D82", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 582.369584422907, + "start" : 221.25423728813558, + "track" : "v2" + }, + { + "duration" : 0.33898305084744607, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "F01A73DE-9729-484B-89E7-719D0391276E", + "kind" : "video", + "linkId" : "00C998B7-CF37-4D26-B09F-6C36B9B32D82", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 582.2329772866789, + "start" : 221.25423728813558, + "track" : "v3" + }, + { + "duration" : 0.33898305084744607, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "627B2BC3-48D0-4F6C-A129-90620B0EB3FD", + "kind" : "video", + "linkId" : "00C998B7-CF37-4D26-B09F-6C36B9B32D82", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 582.2329727026801, + "start" : 221.25423728813558, + "track" : "v4" + }, + { + "duration" : 0.47457627118643586, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "DC2DEF3C-5F2B-476E-AF27-8A22D6D9AED7", + "kind" : "video", + "linkId" : "699AF368-3D93-47C1-8338-C3D28F300CB5", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 583.1864406779663, + "start" : 221.59322033898303, + "track" : "v0" + }, + { + "duration" : 0.47457627118643586, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "F714792D-CAB4-45F1-9BD8-36A1DF081EB8", + "kind" : "audio", + "linkId" : "699AF368-3D93-47C1-8338-C3D28F300CB5", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 583.1025691366252, + "start" : 221.59322033898303, + "track" : "v1" + }, + { + "duration" : 0.47457627118643586, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "BA43BF71-4C54-4370-863D-D0B445C4A4DF", + "kind" : "audio", + "linkId" : "699AF368-3D93-47C1-8338-C3D28F300CB5", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 583.1492454398561, + "start" : 221.59322033898303, + "track" : "v2" + }, + { + "duration" : 0.47457627118643586, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "4BAC786B-BDD8-4676-9B29-2A7AC95177F6", + "kind" : "video", + "linkId" : "699AF368-3D93-47C1-8338-C3D28F300CB5", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 583.012638303628, + "start" : 221.59322033898303, + "track" : "v3" + }, + { + "duration" : 0.47457627118643586, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "987F92AC-8229-449F-BA8F-BB01CA7CADC3", + "kind" : "video", + "linkId" : "699AF368-3D93-47C1-8338-C3D28F300CB5", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 583.0126337196292, + "start" : 221.59322033898303, + "track" : "v4" + }, + { + "duration" : 4.813559322033882, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "8B6B0536-EAC5-4272-9106-03B9E89E36AB", + "kind" : "video", + "linkId" : "0F2B0909-5C81-4A61-BBD8-6CD3ECC9563D", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 589.6949152542375, + "start" : 226.67796610169492, + "track" : "v0" + }, + { + "duration" : 4.813559322033882, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "DD50D9F8-4C08-47DA-AB75-382FE215D3C0", + "kind" : "audio", + "linkId" : "0F2B0909-5C81-4A61-BBD8-6CD3ECC9563D", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 589.6110437128964, + "start" : 226.67796610169492, + "track" : "v1" + }, + { + "duration" : 4.813559322033882, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A2113A02-7099-45C4-990B-263F71229BAA", + "kind" : "audio", + "linkId" : "0F2B0909-5C81-4A61-BBD8-6CD3ECC9563D", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 589.6577200161273, + "start" : 226.67796610169492, + "track" : "v2" + }, + { + "duration" : 4.813559322033882, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "72B5DADE-2448-445A-A7AB-6BA636E753FD", + "kind" : "video", + "linkId" : "0F2B0909-5C81-4A61-BBD8-6CD3ECC9563D", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 589.5211128798992, + "start" : 226.67796610169492, + "track" : "v3" + }, + { + "duration" : 4.813559322033882, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "8CC675CB-9ABE-45FF-B384-C7AC4D78F091", + "kind" : "video", + "linkId" : "0F2B0909-5C81-4A61-BBD8-6CD3ECC9563D", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 589.5211082959004, + "start" : 226.67796610169492, + "track" : "v4" + }, + { + "duration" : 4.81355932203391, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "EF0E9A54-F218-4203-8874-E267C94F96ED", + "kind" : "video", + "linkId" : "C9B743A1-0C1E-4522-9FAE-C8D05A31C193", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 594.5084745762713, + "start" : 231.4915254237288, + "track" : "v0" + }, + { + "duration" : 4.81355932203391, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "3E1A7EAE-EA47-443C-A5DF-51295361CA28", + "kind" : "audio", + "linkId" : "C9B743A1-0C1E-4522-9FAE-C8D05A31C193", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 594.4246030349302, + "start" : 231.4915254237288, + "track" : "v1" + }, + { + "duration" : 4.81355932203391, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "63928E72-332C-4FF0-AB20-7C4D9674F55F", + "kind" : "audio", + "linkId" : "C9B743A1-0C1E-4522-9FAE-C8D05A31C193", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 594.4712793381611, + "start" : 231.4915254237288, + "track" : "v2" + }, + { + "duration" : 4.81355932203391, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "AF037655-401A-4032-866C-0E9B1BB6EAC8", + "kind" : "video", + "linkId" : "C9B743A1-0C1E-4522-9FAE-C8D05A31C193", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 594.334672201933, + "start" : 231.4915254237288, + "track" : "v3" + }, + { + "duration" : 4.81355932203391, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "AF0F661D-9868-49AB-9276-E20CC57DBC28", + "kind" : "video", + "linkId" : "C9B743A1-0C1E-4522-9FAE-C8D05A31C193", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 594.3346676179342, + "start" : 231.4915254237288, + "track" : "v4" + }, + { + "duration" : 2.13559322033899, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "EBA9BB70-0CEA-4170-9DBC-65B5D2FE9AD5", + "kind" : "video", + "linkId" : "4AAA7ABF-1577-4C2E-BF38-8705136C6450", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 616.8813559322035, + "start" : 236.3050847457627, + "track" : "v0" + }, + { + "duration" : 2.13559322033899, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A8D715D7-2371-400B-A53A-90BFA9CA14E1", + "kind" : "audio", + "linkId" : "4AAA7ABF-1577-4C2E-BF38-8705136C6450", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 616.7974843908625, + "start" : 236.3050847457627, + "track" : "v1" + }, + { + "duration" : 2.13559322033899, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "1EC0AD88-9036-49C3-99E3-32F0047EB028", + "kind" : "audio", + "linkId" : "4AAA7ABF-1577-4C2E-BF38-8705136C6450", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 616.8441606940934, + "start" : 236.3050847457627, + "track" : "v2" + }, + { + "duration" : 2.13559322033899, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A1C1C0D1-CF81-42A4-8930-B00C4C02387B", + "kind" : "video", + "linkId" : "4AAA7ABF-1577-4C2E-BF38-8705136C6450", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 616.7075535578653, + "start" : 236.3050847457627, + "track" : "v3" + }, + { + "duration" : 2.13559322033899, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "9694A094-9FA8-4451-BBC8-3A505816AB5C", + "kind" : "video", + "linkId" : "4AAA7ABF-1577-4C2E-BF38-8705136C6450", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 616.7075489738664, + "start" : 236.3050847457627, + "track" : "v4" + }, + { + "duration" : 2.2033898305084563, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "2DFE5FB3-850C-408B-888E-1B117520E619", + "kind" : "video", + "linkId" : "20A4E34D-C55C-439E-9743-C91BA434CB07", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 623.1864406779663, + "start" : 238.4406779661017, + "track" : "v0" + }, + { + "duration" : 2.2033898305084563, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "1C5AFA4B-AB07-45EB-9012-D6817BCA669F", + "kind" : "audio", + "linkId" : "20A4E34D-C55C-439E-9743-C91BA434CB07", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 623.1025691366252, + "start" : 238.4406779661017, + "track" : "v1" + }, + { + "duration" : 2.2033898305084563, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "FA4004F4-5AA3-4F29-999B-41460017B48F", + "kind" : "audio", + "linkId" : "20A4E34D-C55C-439E-9743-C91BA434CB07", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 623.1492454398561, + "start" : 238.4406779661017, + "track" : "v2" + }, + { + "duration" : 2.2033898305084563, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "F4539CE1-8350-4649-A8D5-75DEC9A85285", + "kind" : "video", + "linkId" : "20A4E34D-C55C-439E-9743-C91BA434CB07", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 623.012638303628, + "start" : 238.4406779661017, + "track" : "v3" + }, + { + "duration" : 2.2033898305084563, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "B9D12715-E647-49E2-A68A-393FDA9865DF", + "kind" : "video", + "linkId" : "20A4E34D-C55C-439E-9743-C91BA434CB07", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 623.0126337196292, + "start" : 238.4406779661017, + "track" : "v4" + }, + { + "duration" : 6.27118644067798, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "92455958-0ACB-484E-B1D9-19C02F73901A", + "kind" : "video", + "linkId" : "FB7680B4-9AF3-40EC-B7FB-010031D66837", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 627.491525423729, + "start" : 240.64406779661016, + "track" : "v0" + }, + { + "duration" : 6.27118644067798, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "DB167161-A9FA-4F64-92F8-79A205627364", + "kind" : "audio", + "linkId" : "FB7680B4-9AF3-40EC-B7FB-010031D66837", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 627.4076538823879, + "start" : 240.64406779661016, + "track" : "v1" + }, + { + "duration" : 6.27118644067798, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "D53DC51B-6ED3-43B5-90CF-F263E6A8EF0F", + "kind" : "audio", + "linkId" : "FB7680B4-9AF3-40EC-B7FB-010031D66837", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 627.4543301856188, + "start" : 240.64406779661016, + "track" : "v2" + }, + { + "duration" : 6.27118644067798, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "0F96EE3E-4FE2-417F-9760-F24B131C949C", + "kind" : "video", + "linkId" : "FB7680B4-9AF3-40EC-B7FB-010031D66837", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 627.3177230493907, + "start" : 240.64406779661016, + "track" : "v3" + }, + { + "duration" : 6.27118644067798, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "473DAC6E-6B6F-4395-AA04-1D2A9448459F", + "kind" : "video", + "linkId" : "FB7680B4-9AF3-40EC-B7FB-010031D66837", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 627.3177184653919, + "start" : 240.64406779661016, + "track" : "v4" + }, + { + "duration" : 5.288135593220346, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "04295A05-E2E5-4A94-A70F-1C9DCC3ACF86", + "kind" : "video", + "linkId" : "EDE7F931-7884-4F1E-8EFB-E8B00DCB5A07", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 641.220338983051, + "start" : 246.91525423728814, + "track" : "v0" + }, + { + "duration" : 5.288135593220346, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A4446EF1-6B91-4D7B-9285-3C4E42A475ED", + "kind" : "audio", + "linkId" : "EDE7F931-7884-4F1E-8EFB-E8B00DCB5A07", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 641.1364674417099, + "start" : 246.91525423728814, + "track" : "v1" + }, + { + "duration" : 5.288135593220346, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "37E22D5C-E179-4CD6-9C69-C6B281846229", + "kind" : "audio", + "linkId" : "EDE7F931-7884-4F1E-8EFB-E8B00DCB5A07", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 641.1831437449408, + "start" : 246.91525423728814, + "track" : "v2" + }, + { + "duration" : 5.288135593220346, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "0D2B5334-E420-4746-B09A-110DA7EE6BA5", + "kind" : "video", + "linkId" : "EDE7F931-7884-4F1E-8EFB-E8B00DCB5A07", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 641.0465366087127, + "start" : 246.91525423728814, + "track" : "v3" + }, + { + "duration" : 5.288135593220346, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "95AA48BC-4C4B-4F4B-B29F-FB2E01943DE6", + "kind" : "video", + "linkId" : "EDE7F931-7884-4F1E-8EFB-E8B00DCB5A07", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 641.0465320247139, + "start" : 246.91525423728814, + "track" : "v4" + }, + { + "duration" : 3.3898305084745743, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "36A8E6B0-4985-4EBD-BD50-2621E6D840E5", + "kind" : "video", + "linkId" : "E1D1EEBE-B0FA-47B6-B02B-0D25E3E7C904", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 649.4237288135594, + "start" : 252.20338983050848, + "track" : "v0" + }, + { + "duration" : 3.3898305084745743, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "CDDA95CC-536D-4225-AAC3-470904596C1D", + "kind" : "audio", + "linkId" : "E1D1EEBE-B0FA-47B6-B02B-0D25E3E7C904", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 649.3398572722183, + "start" : 252.20338983050848, + "track" : "v1" + }, + { + "duration" : 3.3898305084745743, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "79AC6946-AD60-4D7C-9B74-BAF2C5043ED9", + "kind" : "audio", + "linkId" : "E1D1EEBE-B0FA-47B6-B02B-0D25E3E7C904", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 649.3865335754492, + "start" : 252.20338983050848, + "track" : "v2" + }, + { + "duration" : 3.3898305084745743, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "266B1043-1A29-4485-85C8-9921E2D077FE", + "kind" : "video", + "linkId" : "E1D1EEBE-B0FA-47B6-B02B-0D25E3E7C904", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 649.2499264392211, + "start" : 252.20338983050848, + "track" : "v3" + }, + { + "duration" : 3.3898305084745743, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "F9D93C0A-48FD-4149-B214-E2648C026BB8", + "kind" : "video", + "linkId" : "E1D1EEBE-B0FA-47B6-B02B-0D25E3E7C904", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 649.2499218552223, + "start" : 252.20338983050848, + "track" : "v4" + }, + { + "duration" : 8.9491525423729, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "E13CDB86-D0E7-4219-891E-396AF72F7200", + "kind" : "video", + "linkId" : "E0DD6E6F-D7C7-4743-ADC2-D8787163B0C3", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 664.1016949152543, + "start" : 255.59322033898306, + "track" : "v0" + }, + { + "duration" : 8.9491525423729, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "CF093561-83EC-4803-9CD7-E1D07429E06C", + "kind" : "audio", + "linkId" : "E0DD6E6F-D7C7-4743-ADC2-D8787163B0C3", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 664.0178233739132, + "start" : 255.59322033898306, + "track" : "v1" + }, + { + "duration" : 8.9491525423729, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "D7A74DDC-3F2A-4E02-B350-45455C959B82", + "kind" : "audio", + "linkId" : "E0DD6E6F-D7C7-4743-ADC2-D8787163B0C3", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 664.0644996771441, + "start" : 255.59322033898306, + "track" : "v2" + }, + { + "duration" : 8.9491525423729, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "95E67BFD-C59E-4F99-92B5-027C3BC13CC3", + "kind" : "video", + "linkId" : "E0DD6E6F-D7C7-4743-ADC2-D8787163B0C3", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 663.927892540916, + "start" : 255.59322033898306, + "track" : "v3" + }, + { + "duration" : 8.9491525423729, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "AE9DDFED-5BE9-44A5-8349-623A8C1F1587", + "kind" : "video", + "linkId" : "E0DD6E6F-D7C7-4743-ADC2-D8787163B0C3", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 663.9278879569172, + "start" : 255.59322033898306, + "track" : "v4" + }, + { + "duration" : 2.4067796610169125, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "6929AB44-D977-4A42-9DD4-69D4E759E4B7", + "kind" : "video", + "linkId" : "B1E3CEAB-46C9-4EF7-8BC4-F413D2FDD063", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 676.7796610169491, + "start" : 264.54237288135596, + "track" : "v0" + }, + { + "duration" : 2.4067796610169125, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "F6BA54DA-3AAD-48D5-A132-C946F6FF5BBE", + "kind" : "audio", + "linkId" : "B1E3CEAB-46C9-4EF7-8BC4-F413D2FDD063", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 676.6957894756081, + "start" : 264.54237288135596, + "track" : "v1" + }, + { + "duration" : 2.4067796610169125, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "95E0BF0A-76D3-4341-87C0-4C3855C6AD49", + "kind" : "audio", + "linkId" : "B1E3CEAB-46C9-4EF7-8BC4-F413D2FDD063", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 676.742465778839, + "start" : 264.54237288135596, + "track" : "v2" + }, + { + "duration" : 2.4067796610169125, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "56B8138F-5F33-4EC1-A202-59403546D6C5", + "kind" : "video", + "linkId" : "B1E3CEAB-46C9-4EF7-8BC4-F413D2FDD063", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 676.6058586426109, + "start" : 264.54237288135596, + "track" : "v3" + }, + { + "duration" : 2.4067796610169125, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "7C722B8F-E78E-45E3-8A2E-F30FF2127283", + "kind" : "video", + "linkId" : "B1E3CEAB-46C9-4EF7-8BC4-F413D2FDD063", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 676.6058540586121, + "start" : 264.54237288135596, + "track" : "v4" + }, + { + "duration" : 4.27118644067798, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "74A4A856-856E-45BF-BF4B-60A6E5627D38", + "kind" : "video", + "linkId" : "4DA91130-EF31-48CE-9353-1BCA2F4D362F", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 680.5084745762712, + "start" : 266.9491525423729, + "track" : "v0" + }, + { + "duration" : 4.27118644067798, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "3DBBE8FE-AD87-457B-8670-E95DE832B26C", + "kind" : "audio", + "linkId" : "4DA91130-EF31-48CE-9353-1BCA2F4D362F", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 680.4246030349301, + "start" : 266.9491525423729, + "track" : "v1" + }, + { + "duration" : 4.27118644067798, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "5E2EC015-CDDC-45F6-BEF4-76E842BBC389", + "kind" : "audio", + "linkId" : "4DA91130-EF31-48CE-9353-1BCA2F4D362F", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 680.471279338161, + "start" : 266.9491525423729, + "track" : "v2" + }, + { + "duration" : 4.27118644067798, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "1275A44B-DBDA-421C-9443-3923A7274D8D", + "kind" : "video", + "linkId" : "4DA91130-EF31-48CE-9353-1BCA2F4D362F", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 680.3346722019329, + "start" : 266.9491525423729, + "track" : "v3" + }, + { + "duration" : 4.27118644067798, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "15AE2513-D3F9-47C3-B4F7-61A351DAB004", + "kind" : "video", + "linkId" : "4DA91130-EF31-48CE-9353-1BCA2F4D362F", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 680.3346676179341, + "start" : 266.9491525423729, + "track" : "v4" + }, + { + "duration" : 1.1186440677965948, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "2077C05E-DE10-4841-AB24-8F92DE0579D1", + "kind" : "video", + "linkId" : "870FE72E-0830-4984-8A17-C8265B573862", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 698.1016949152543, + "start" : 271.22033898305085, + "track" : "v0" + }, + { + "duration" : 1.1186440677965948, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "1832EFCE-19F8-4EBA-B21A-88826F9AE7BF", + "kind" : "audio", + "linkId" : "870FE72E-0830-4984-8A17-C8265B573862", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 698.0178233739132, + "start" : 271.22033898305085, + "track" : "v1" + }, + { + "duration" : 1.1186440677965948, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "4823B8FA-4845-43E7-A4AD-95170EAE1A77", + "kind" : "audio", + "linkId" : "870FE72E-0830-4984-8A17-C8265B573862", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 698.0644996771441, + "start" : 271.22033898305085, + "track" : "v2" + }, + { + "duration" : 1.1186440677965948, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "AB47B68B-4217-46FF-A1EA-D21122BC749F", + "kind" : "video", + "linkId" : "870FE72E-0830-4984-8A17-C8265B573862", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 697.927892540916, + "start" : 271.22033898305085, + "track" : "v3" + }, + { + "duration" : 1.1186440677965948, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "948310E4-F6E1-4C7B-8DFC-4B1EFE91D9F3", + "kind" : "video", + "linkId" : "870FE72E-0830-4984-8A17-C8265B573862", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 697.9278879569172, + "start" : 271.22033898305085, + "track" : "v4" + }, + { + "duration" : 3.9661016949152668, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "1841DCD7-E1AC-46F4-8BA9-65F76CE7F997", + "kind" : "video", + "linkId" : "8E3E2F7E-8CEA-4F62-AC48-EAD5610BBF7A", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 706.1016949152543, + "start" : 272.33898305084745, + "track" : "v0" + }, + { + "duration" : 3.9661016949152668, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "9F70CFD3-7AB7-4A6D-87AF-B53BEDECA24A", + "kind" : "audio", + "linkId" : "8E3E2F7E-8CEA-4F62-AC48-EAD5610BBF7A", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 706.0178233739132, + "start" : 272.33898305084745, + "track" : "v1" + }, + { + "duration" : 3.9661016949152668, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "6296E4FA-F3A8-4E9F-B5A6-21C104C11316", + "kind" : "audio", + "linkId" : "8E3E2F7E-8CEA-4F62-AC48-EAD5610BBF7A", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 706.0644996771441, + "start" : 272.33898305084745, + "track" : "v2" + }, + { + "duration" : 3.9661016949152668, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "7DBC5BCC-4F01-497F-97A9-FD8E5FED80ED", + "kind" : "video", + "linkId" : "8E3E2F7E-8CEA-4F62-AC48-EAD5610BBF7A", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 705.927892540916, + "start" : 272.33898305084745, + "track" : "v3" + }, + { + "duration" : 3.9661016949152668, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "D22E7D29-E8F2-49FC-AE39-95140062ED4C", + "kind" : "video", + "linkId" : "8E3E2F7E-8CEA-4F62-AC48-EAD5610BBF7A", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 705.9278879569172, + "start" : 272.33898305084745, + "track" : "v4" + }, + { + "duration" : 7.2542372881355845, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "ADE6D5E2-A342-4F16-9FAB-2F40C2D1BCDD", + "kind" : "video", + "linkId" : "7AAFBE23-17BF-4AC0-B4E6-3D003AF75DF9", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 710.0677966101696, + "start" : 276.3050847457627, + "track" : "v0" + }, + { + "duration" : 7.2542372881355845, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "BFEEDB13-FCE4-473E-BA8B-BAA795862399", + "kind" : "audio", + "linkId" : "7AAFBE23-17BF-4AC0-B4E6-3D003AF75DF9", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 709.9839250688285, + "start" : 276.3050847457627, + "track" : "v1" + }, + { + "duration" : 7.2542372881355845, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "BC83D6FA-84FA-483B-8699-D1219DF29357", + "kind" : "audio", + "linkId" : "7AAFBE23-17BF-4AC0-B4E6-3D003AF75DF9", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 710.0306013720594, + "start" : 276.3050847457627, + "track" : "v2" + }, + { + "duration" : 7.2542372881355845, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "58221FDA-00C6-45A1-9267-2AC4500070FE", + "kind" : "video", + "linkId" : "7AAFBE23-17BF-4AC0-B4E6-3D003AF75DF9", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 709.8939942358313, + "start" : 276.3050847457627, + "track" : "v3" + }, + { + "duration" : 7.2542372881355845, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "BC23C71D-81CD-40A8-8D4C-5728293351FB", + "kind" : "video", + "linkId" : "7AAFBE23-17BF-4AC0-B4E6-3D003AF75DF9", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 709.8939896518325, + "start" : 276.3050847457627, + "track" : "v4" + }, + { + "duration" : 7.830508474576277, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "5B448404-52D6-4D2E-83B3-DDABD2847728", + "kind" : "video", + "linkId" : "B6345D38-3912-4C07-BC43-685A4C767720", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 721.6271186440679, + "start" : 283.5593220338983, + "track" : "v0" + }, + { + "duration" : 7.830508474576277, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "EE73D2CB-10F9-47A3-B0A9-B077DC6C6B40", + "kind" : "audio", + "linkId" : "B6345D38-3912-4C07-BC43-685A4C767720", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 721.5432471027268, + "start" : 283.5593220338983, + "track" : "v1" + }, + { + "duration" : 7.830508474576277, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "BD06C153-DAD3-449C-B108-1A8130000941", + "kind" : "audio", + "linkId" : "B6345D38-3912-4C07-BC43-685A4C767720", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 721.5899234059577, + "start" : 283.5593220338983, + "track" : "v2" + }, + { + "duration" : 7.830508474576277, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "9EFE24ED-F389-4DB3-945B-BF2F18D9915B", + "kind" : "video", + "linkId" : "B6345D38-3912-4C07-BC43-685A4C767720", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 721.4533162697296, + "start" : 283.5593220338983, + "track" : "v3" + }, + { + "duration" : 7.830508474576277, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "26D01EC2-D5AF-4693-809B-C57786F0F277", + "kind" : "video", + "linkId" : "B6345D38-3912-4C07-BC43-685A4C767720", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 721.4533116857308, + "start" : 283.5593220338983, + "track" : "v4" + }, + { + "duration" : 6.27118644067798, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "6ACBC2E5-88A0-48BD-ABE1-16D4214541B8", + "kind" : "video", + "linkId" : "9DBD3CAA-D3B8-40E4-9DAB-5C8025F8248C", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 736.3389830508476, + "start" : 291.3898305084746, + "track" : "v0" + }, + { + "duration" : 6.27118644067798, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "EBF24B46-FE81-45AB-97D4-6FD5E677B893", + "kind" : "audio", + "linkId" : "9DBD3CAA-D3B8-40E4-9DAB-5C8025F8248C", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 736.2551115095065, + "start" : 291.3898305084746, + "track" : "v1" + }, + { + "duration" : 6.27118644067798, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "DF4C7EBF-43A7-4CDE-837E-4995C5DE3EE7", + "kind" : "audio", + "linkId" : "9DBD3CAA-D3B8-40E4-9DAB-5C8025F8248C", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 736.3017878127374, + "start" : 291.3898305084746, + "track" : "v2" + }, + { + "duration" : 6.27118644067798, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "F39E9B23-7810-4DA0-B17A-6D487A801159", + "kind" : "video", + "linkId" : "9DBD3CAA-D3B8-40E4-9DAB-5C8025F8248C", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 736.1651806765093, + "start" : 291.3898305084746, + "track" : "v3" + }, + { + "duration" : 6.27118644067798, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "D58A628D-522C-4267-BA46-9E4D55FE030E", + "kind" : "video", + "linkId" : "9DBD3CAA-D3B8-40E4-9DAB-5C8025F8248C", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 736.1651760925105, + "start" : 291.3898305084746, + "track" : "v4" + }, + { + "duration" : 9.288135593220318, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "8A9513E7-2C9C-4EB6-84AE-EDFF80DCF552", + "kind" : "video", + "linkId" : "2D759F83-E902-4851-A3CB-8D0088A77D2D", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 747.2881355932204, + "start" : 297.66101694915255, + "track" : "v0" + }, + { + "duration" : 9.288135593220318, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "D7CDE17B-5946-4F71-B09B-6983C216681E", + "kind" : "audio", + "linkId" : "2D759F83-E902-4851-A3CB-8D0088A77D2D", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 747.2042640518794, + "start" : 297.66101694915255, + "track" : "v1" + }, + { + "duration" : 9.288135593220318, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "CC586FEC-2BAB-4053-AC79-1FA59BD9BF45", + "kind" : "audio", + "linkId" : "2D759F83-E902-4851-A3CB-8D0088A77D2D", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 747.2509403551103, + "start" : 297.66101694915255, + "track" : "v2" + }, + { + "duration" : 9.288135593220318, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "926C01C2-ADAD-4B46-BE04-CD6B4618CCC3", + "kind" : "video", + "linkId" : "2D759F83-E902-4851-A3CB-8D0088A77D2D", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 747.1143332188822, + "start" : 297.66101694915255, + "track" : "v3" + }, + { + "duration" : 9.288135593220318, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "0AB6F4F2-89CA-4D4B-A52E-765F89C40923", + "kind" : "video", + "linkId" : "2D759F83-E902-4851-A3CB-8D0088A77D2D", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 747.1143286348833, + "start" : 297.66101694915255, + "track" : "v4" + }, + { + "duration" : 4.372881355932236, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "E84D7CB3-1292-4241-AAD4-AA71BA97E643", + "kind" : "video", + "linkId" : "1F9BC1C6-8DE8-4750-ADF1-DBC052261B98", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 763.2203389830509, + "start" : 306.9491525423729, + "track" : "v0" + }, + { + "duration" : 4.372881355932236, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "48214E82-E8A7-45D1-A218-C6F71276D005", + "kind" : "audio", + "linkId" : "1F9BC1C6-8DE8-4750-ADF1-DBC052261B98", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 763.1364674417098, + "start" : 306.9491525423729, + "track" : "v1" + }, + { + "duration" : 4.372881355932236, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "5D3BAE7E-FE37-43FE-9E8C-945DB4037BD3", + "kind" : "audio", + "linkId" : "1F9BC1C6-8DE8-4750-ADF1-DBC052261B98", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 763.1831437449407, + "start" : 306.9491525423729, + "track" : "v2" + }, + { + "duration" : 4.372881355932236, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "6B9196EE-5BAF-4BC6-A372-D785A26AB9B6", + "kind" : "video", + "linkId" : "1F9BC1C6-8DE8-4750-ADF1-DBC052261B98", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 763.0465366087126, + "start" : 306.9491525423729, + "track" : "v3" + }, + { + "duration" : 4.372881355932236, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "92FFAC2A-5A18-4CD5-A8E8-38A3237085FB", + "kind" : "video", + "linkId" : "1F9BC1C6-8DE8-4750-ADF1-DBC052261B98", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 763.0465320247138, + "start" : 306.9491525423729, + "track" : "v4" + }, + { + "duration" : 6.203389830508456, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "B4E35468-D60F-41C5-9DEB-00DF0D9AB8F0", + "kind" : "video", + "linkId" : "5C054F95-5ECF-452C-8B05-51B9272EC65B", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 771.2203389830509, + "start" : 311.3220338983051, + "track" : "v0" + }, + { + "duration" : 6.203389830508456, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "EE8E5E05-B61B-4960-ABF2-9C3490F03B65", + "kind" : "audio", + "linkId" : "5C054F95-5ECF-452C-8B05-51B9272EC65B", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 771.1364674417098, + "start" : 311.3220338983051, + "track" : "v1" + }, + { + "duration" : 6.203389830508456, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "41C6BBFA-FF1F-4336-8A02-CC2A7AD8D711", + "kind" : "audio", + "linkId" : "5C054F95-5ECF-452C-8B05-51B9272EC65B", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 771.1831437449407, + "start" : 311.3220338983051, + "track" : "v2" + }, + { + "duration" : 6.203389830508456, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "01FAD5BD-4079-4B78-964E-021AB45FD327", + "kind" : "video", + "linkId" : "5C054F95-5ECF-452C-8B05-51B9272EC65B", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 771.0465366087126, + "start" : 311.3220338983051, + "track" : "v3" + }, + { + "duration" : 6.203389830508456, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "D05C5F7B-1439-48C3-A549-332D2965E644", + "kind" : "video", + "linkId" : "5C054F95-5ECF-452C-8B05-51B9272EC65B", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 771.0465320247138, + "start" : 311.3220338983051, + "track" : "v4" + }, + { + "duration" : 4.033898305084733, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "9ADC6EF4-01E6-44A2-A4E7-CE979C4216A6", + "kind" : "video", + "linkId" : "E7791304-08F7-4757-B49E-97BD758DF635", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 780.271186440678, + "start" : 317.52542372881356, + "track" : "v0" + }, + { + "duration" : 4.033898305084733, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "C83F690F-75F2-4F0E-9F44-2B3B64FC4D7D", + "kind" : "audio", + "linkId" : "E7791304-08F7-4757-B49E-97BD758DF635", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 780.1873148993369, + "start" : 317.52542372881356, + "track" : "v1" + }, + { + "duration" : 4.033898305084733, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "7F4D1569-EB2B-470A-A39D-4E27BB9631D3", + "kind" : "audio", + "linkId" : "E7791304-08F7-4757-B49E-97BD758DF635", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 780.2339912025678, + "start" : 317.52542372881356, + "track" : "v2" + }, + { + "duration" : 4.033898305084733, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "F566D86E-6BCB-450B-B165-E742669968FE", + "kind" : "video", + "linkId" : "E7791304-08F7-4757-B49E-97BD758DF635", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 780.0973840663397, + "start" : 317.52542372881356, + "track" : "v3" + }, + { + "duration" : 4.033898305084733, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "397C4077-BE8E-46D8-9A26-4A85FB164ADD", + "kind" : "video", + "linkId" : "E7791304-08F7-4757-B49E-97BD758DF635", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 780.0973794823409, + "start" : 317.52542372881356, + "track" : "v4" + }, + { + "duration" : 2.474576271186436, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "3EA1AE5B-B71F-4DD3-BAB2-258343BC38E6", + "kind" : "video", + "linkId" : "9683EB9F-EC01-480F-8BE7-2201B247DE7E", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 790.7118644067798, + "start" : 321.5593220338983, + "track" : "v0" + }, + { + "duration" : 2.474576271186436, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "84190D3F-8FAE-46C1-8402-B9BE98C961DD", + "kind" : "audio", + "linkId" : "9683EB9F-EC01-480F-8BE7-2201B247DE7E", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 790.6279928654387, + "start" : 321.5593220338983, + "track" : "v1" + }, + { + "duration" : 2.474576271186436, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "BA726F72-FB82-4612-8EBA-361CFF5A177B", + "kind" : "audio", + "linkId" : "9683EB9F-EC01-480F-8BE7-2201B247DE7E", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 790.6746691686697, + "start" : 321.5593220338983, + "track" : "v2" + }, + { + "duration" : 2.474576271186436, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A2BD0CC2-F087-4B62-B210-2422E7CDA62E", + "kind" : "video", + "linkId" : "9683EB9F-EC01-480F-8BE7-2201B247DE7E", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 790.5380620324415, + "start" : 321.5593220338983, + "track" : "v3" + }, + { + "duration" : 2.474576271186436, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "CB9AED26-D860-4411-9D20-1B63F56F0BEC", + "kind" : "video", + "linkId" : "9683EB9F-EC01-480F-8BE7-2201B247DE7E", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 790.5380574484427, + "start" : 321.5593220338983, + "track" : "v4" + }, + { + "duration" : 3.525423728813564, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "5650BD3B-4BF5-4533-B873-6A89B355DBBD", + "kind" : "video", + "linkId" : "CABF546D-96A6-4629-8BD2-A6CED6EBD7E4", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 794.7118644067798, + "start" : 324.03389830508473, + "track" : "v0" + }, + { + "duration" : 3.525423728813564, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "3BA60039-3255-435B-90E4-738D94B13821", + "kind" : "audio", + "linkId" : "CABF546D-96A6-4629-8BD2-A6CED6EBD7E4", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 794.6279928654387, + "start" : 324.03389830508473, + "track" : "v1" + }, + { + "duration" : 3.525423728813564, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "1A07AF09-C783-4547-BB45-5671AD0A75E7", + "kind" : "audio", + "linkId" : "CABF546D-96A6-4629-8BD2-A6CED6EBD7E4", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 794.6746691686697, + "start" : 324.03389830508473, + "track" : "v2" + }, + { + "duration" : 3.525423728813564, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A656775F-4507-44FD-ADCB-E23AE9572BD6", + "kind" : "video", + "linkId" : "CABF546D-96A6-4629-8BD2-A6CED6EBD7E4", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 794.5380620324415, + "start" : 324.03389830508473, + "track" : "v3" + }, + { + "duration" : 3.525423728813564, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "F287E2E4-9B24-4928-9DF4-BE2A88C6F6E1", + "kind" : "video", + "linkId" : "CABF546D-96A6-4629-8BD2-A6CED6EBD7E4", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 794.5380574484427, + "start" : 324.03389830508473, + "track" : "v4" + }, + { + "duration" : 11.694915254237287, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "10BDB7F1-A97E-46B4-AA17-D5AA082F4FE5", + "kind" : "video", + "linkId" : "FE61ADB3-0C95-4A1A-B7F6-D3B4874BD0EA", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 812.6440677966104, + "start" : 327.5593220338983, + "track" : "v0" + }, + { + "duration" : 11.694915254237287, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "1A175E00-C9B8-4071-9395-B96E6BBC0766", + "kind" : "audio", + "linkId" : "FE61ADB3-0C95-4A1A-B7F6-D3B4874BD0EA", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 812.5601962552694, + "start" : 327.5593220338983, + "track" : "v1" + }, + { + "duration" : 11.694915254237287, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "9CDBFDAC-83C2-4F7B-AC48-618437D267F1", + "kind" : "audio", + "linkId" : "FE61ADB3-0C95-4A1A-B7F6-D3B4874BD0EA", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 812.6068725585003, + "start" : 327.5593220338983, + "track" : "v2" + }, + { + "duration" : 11.694915254237287, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "F8DB026C-68E2-4110-8310-A4E77894383C", + "kind" : "video", + "linkId" : "FE61ADB3-0C95-4A1A-B7F6-D3B4874BD0EA", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 812.4702654222722, + "start" : 327.5593220338983, + "track" : "v3" + }, + { + "duration" : 11.694915254237287, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "2C6F6969-72A9-49A9-8A8D-A15D2D15A434", + "kind" : "video", + "linkId" : "FE61ADB3-0C95-4A1A-B7F6-D3B4874BD0EA", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 812.4702608382734, + "start" : 327.5593220338983, + "track" : "v4" + }, + { + "duration" : 1.3898305084745743, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "5D76FCCF-E20B-4E2B-B2BF-06D04D2EC873", + "kind" : "video", + "linkId" : "5A0236C5-2C98-4C5E-A570-96D211E7B3C6", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 980.813559322034, + "start" : 339.2542372881356, + "track" : "v0" + }, + { + "duration" : 1.3898305084745743, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "B834F191-B8D9-4288-A76C-5BC67BBEAA7E", + "kind" : "audio", + "linkId" : "5A0236C5-2C98-4C5E-A570-96D211E7B3C6", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 980.729687780693, + "start" : 339.2542372881356, + "track" : "v1" + }, + { + "duration" : 1.3898305084745743, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "EC711F21-C8A3-40C5-B230-A451B6878977", + "kind" : "audio", + "linkId" : "5A0236C5-2C98-4C5E-A570-96D211E7B3C6", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 980.7763640839239, + "start" : 339.2542372881356, + "track" : "v2" + }, + { + "duration" : 1.3898305084745743, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "3BFC58C2-D801-45E4-8F01-5F94BDB9ED96", + "kind" : "video", + "linkId" : "5A0236C5-2C98-4C5E-A570-96D211E7B3C6", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 980.6397569476958, + "start" : 339.2542372881356, + "track" : "v3" + }, + { + "duration" : 1.3898305084745743, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "28885AEF-445D-47A2-88D3-550BBF692ADE", + "kind" : "video", + "linkId" : "5A0236C5-2C98-4C5E-A570-96D211E7B3C6", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 980.639752363697, + "start" : 339.2542372881356, + "track" : "v4" + }, + { + "duration" : 0.6440677966101589, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "EA534368-94B4-475D-8041-45696947070E", + "kind" : "video", + "linkId" : "B31B5062-B2A8-445B-A891-F2D2104E86E3", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 983.1186440677968, + "start" : 340.64406779661016, + "track" : "v0" + }, + { + "duration" : 0.6440677966101589, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "F6F6F9A9-8B8B-443A-B401-32205A74C093", + "kind" : "audio", + "linkId" : "B31B5062-B2A8-445B-A891-F2D2104E86E3", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 983.0347725264558, + "start" : 340.64406779661016, + "track" : "v1" + }, + { + "duration" : 0.6440677966101589, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "1176FB5D-D780-4273-9FCA-9695A04A100F", + "kind" : "audio", + "linkId" : "B31B5062-B2A8-445B-A891-F2D2104E86E3", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 983.0814488296867, + "start" : 340.64406779661016, + "track" : "v2" + }, + { + "duration" : 0.6440677966101589, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "5DA60AD6-AC7E-4579-86CD-50F79A14150D", + "kind" : "video", + "linkId" : "B31B5062-B2A8-445B-A891-F2D2104E86E3", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 982.9448416934586, + "start" : 340.64406779661016, + "track" : "v3" + }, + { + "duration" : 0.6440677966101589, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "3DBD1518-ACEA-4CC3-9B85-FB6C1BFDDDE4", + "kind" : "video", + "linkId" : "B31B5062-B2A8-445B-A891-F2D2104E86E3", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 982.9448371094597, + "start" : 340.64406779661016, + "track" : "v4" + }, + { + "duration" : 3.6271186440678207, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "832B3ED1-5BC4-43EE-8FE6-717D93008C5A", + "kind" : "video", + "linkId" : "596C8323-127D-44C1-B319-7DF1FB8B1171", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1037.8305084745766, + "start" : 341.2881355932203, + "track" : "v0" + }, + { + "duration" : 3.6271186440678207, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "00209D2F-08A1-4B49-96F2-91A8C5EF454D", + "kind" : "audio", + "linkId" : "596C8323-127D-44C1-B319-7DF1FB8B1171", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1037.7466369332355, + "start" : 341.2881355932203, + "track" : "v1" + }, + { + "duration" : 3.6271186440678207, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "43AEF5F0-29EF-45AD-A7B6-893C574685CB", + "kind" : "audio", + "linkId" : "596C8323-127D-44C1-B319-7DF1FB8B1171", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1037.7933132364665, + "start" : 341.2881355932203, + "track" : "v2" + }, + { + "duration" : 3.6271186440678207, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "32BC4FE2-4816-49E7-80A0-2DA08DCC56A0", + "kind" : "video", + "linkId" : "596C8323-127D-44C1-B319-7DF1FB8B1171", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1037.6567061002384, + "start" : 341.2881355932203, + "track" : "v3" + }, + { + "duration" : 3.6271186440678207, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "7C5CF291-4A7F-4BBD-809E-A9094B0B00E0", + "kind" : "video", + "linkId" : "596C8323-127D-44C1-B319-7DF1FB8B1171", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1037.6567015162395, + "start" : 341.2881355932203, + "track" : "v4" + }, + { + "duration" : 1.355932203389841, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "0905362C-DE86-4A3A-B256-9FD740D3A19D", + "kind" : "video", + "linkId" : "E5D49AA9-6CD5-438D-8B96-6ADA7002033B", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1122.203389830509, + "start" : 344.91525423728814, + "track" : "v0" + }, + { + "duration" : 1.355932203389841, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "48C76EE1-E83E-45E8-A767-47E35F66576F", + "kind" : "audio", + "linkId" : "E5D49AA9-6CD5-438D-8B96-6ADA7002033B", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1122.119518289168, + "start" : 344.91525423728814, + "track" : "v1" + }, + { + "duration" : 1.355932203389841, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "2F82F324-00A9-48EC-BF8C-DAA85B8C9D73", + "kind" : "audio", + "linkId" : "E5D49AA9-6CD5-438D-8B96-6ADA7002033B", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1122.1661945923988, + "start" : 344.91525423728814, + "track" : "v2" + }, + { + "duration" : 1.355932203389841, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "5B27AC9E-88CF-4AB2-927D-A79412E95F09", + "kind" : "video", + "linkId" : "E5D49AA9-6CD5-438D-8B96-6ADA7002033B", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1122.0295874561707, + "start" : 344.91525423728814, + "track" : "v3" + }, + { + "duration" : 1.355932203389841, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "6CC1FC2E-3809-4A37-87B2-3255B1430A3C", + "kind" : "video", + "linkId" : "E5D49AA9-6CD5-438D-8B96-6ADA7002033B", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1122.0295828721719, + "start" : 344.91525423728814, + "track" : "v4" + }, + { + "duration" : 5.0847457627118615, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "F27B9C51-75DE-4E4F-8808-3BA889863CF9", + "kind" : "video", + "linkId" : "81F5C3C3-3A90-4A30-8056-87972464F37F", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1129.254237288136, + "start" : 346.271186440678, + "track" : "v0" + }, + { + "duration" : 5.0847457627118615, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "D6CB9F93-3A96-4AD3-8448-52E45B33A28D", + "kind" : "audio", + "linkId" : "81F5C3C3-3A90-4A30-8056-87972464F37F", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1129.170365746795, + "start" : 346.271186440678, + "track" : "v1" + }, + { + "duration" : 5.0847457627118615, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "34239B0B-3D34-4D29-9C48-D18A775FCDDB", + "kind" : "audio", + "linkId" : "81F5C3C3-3A90-4A30-8056-87972464F37F", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1129.2170420500258, + "start" : 346.271186440678, + "track" : "v2" + }, + { + "duration" : 5.0847457627118615, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "C0EC3471-CC80-448C-BA8B-6F565ED9EE06", + "kind" : "video", + "linkId" : "81F5C3C3-3A90-4A30-8056-87972464F37F", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1129.0804349137977, + "start" : 346.271186440678, + "track" : "v3" + }, + { + "duration" : 5.0847457627118615, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "89A2AE13-B7C0-4138-B475-2D7ED7D1BEEA", + "kind" : "video", + "linkId" : "81F5C3C3-3A90-4A30-8056-87972464F37F", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1129.080430329799, + "start" : 346.271186440678, + "track" : "v4" + }, + { + "duration" : 4.711864406779625, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "2E892202-DFC8-4722-848D-8ED956667E0D", + "kind" : "video", + "linkId" : "CD0169DB-72F4-4E7A-B27D-1D1C0A2437D9", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1278.2372881355936, + "start" : 351.35593220338984, + "track" : "v0" + }, + { + "duration" : 4.711864406779625, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "43D45A86-49A1-449A-9E77-900F5D0ACC61", + "kind" : "audio", + "linkId" : "CD0169DB-72F4-4E7A-B27D-1D1C0A2437D9", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1278.1534165942526, + "start" : 351.35593220338984, + "track" : "v1" + }, + { + "duration" : 4.711864406779625, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "9B4179AA-3FE3-4B93-B578-86F7BDFBAC59", + "kind" : "audio", + "linkId" : "CD0169DB-72F4-4E7A-B27D-1D1C0A2437D9", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1278.2000928974835, + "start" : 351.35593220338984, + "track" : "v2" + }, + { + "duration" : 4.711864406779625, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "84160650-3975-445E-9CCE-FE9A4B354DE4", + "kind" : "video", + "linkId" : "CD0169DB-72F4-4E7A-B27D-1D1C0A2437D9", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1278.0634857612554, + "start" : 351.35593220338984, + "track" : "v3" + }, + { + "duration" : 4.711864406779625, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "EEE0A850-F637-47A2-A351-78A5E35E2E71", + "kind" : "video", + "linkId" : "CD0169DB-72F4-4E7A-B27D-1D1C0A2437D9", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1278.0634811772566, + "start" : 351.35593220338984, + "track" : "v4" + }, + { + "duration" : 12.27118644067798, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "40E92BD1-0CD5-4846-B649-57DEE758C62A", + "kind" : "video", + "linkId" : "7D4C2DFB-52DA-48A5-B7A5-8C50DE99C254", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1283.4237288135596, + "start" : 356.06779661016947, + "track" : "v0" + }, + { + "duration" : 12.27118644067798, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A9E11104-5BA1-47B5-A29B-0DB9D895655D", + "kind" : "audio", + "linkId" : "7D4C2DFB-52DA-48A5-B7A5-8C50DE99C254", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1283.3398572722185, + "start" : 356.06779661016947, + "track" : "v1" + }, + { + "duration" : 12.27118644067798, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "EB6EE9AD-7386-4D10-BFBF-E253B17F3431", + "kind" : "audio", + "linkId" : "7D4C2DFB-52DA-48A5-B7A5-8C50DE99C254", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1283.3865335754494, + "start" : 356.06779661016947, + "track" : "v2" + }, + { + "duration" : 12.27118644067798, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "438EA227-D2C5-4532-9A3A-252007721608", + "kind" : "video", + "linkId" : "7D4C2DFB-52DA-48A5-B7A5-8C50DE99C254", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1283.2499264392213, + "start" : 356.06779661016947, + "track" : "v3" + }, + { + "duration" : 12.27118644067798, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "E7E7A787-8710-4FC3-8D04-8FB4A9808A63", + "kind" : "video", + "linkId" : "7D4C2DFB-52DA-48A5-B7A5-8C50DE99C254", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1283.2499218552225, + "start" : 356.06779661016947, + "track" : "v4" + }, + { + "duration" : 3.0508474576271283, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "65671782-CE0B-49E2-AF2D-C5D2D41FFA24", + "kind" : "video", + "linkId" : "D50E12ED-A0DF-4078-95DE-6D5332CDFB62", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1304.271186440678, + "start" : 368.33898305084745, + "track" : "v0" + }, + { + "duration" : 3.0508474576271283, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "B250A8E7-5DB5-463B-BC7E-2A985C554A48", + "kind" : "audio", + "linkId" : "D50E12ED-A0DF-4078-95DE-6D5332CDFB62", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1304.187314899337, + "start" : 368.33898305084745, + "track" : "v1" + }, + { + "duration" : 3.0508474576271283, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "538F899C-5E20-49EC-8416-74178778FE07", + "kind" : "audio", + "linkId" : "D50E12ED-A0DF-4078-95DE-6D5332CDFB62", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1304.233991202568, + "start" : 368.33898305084745, + "track" : "v2" + }, + { + "duration" : 3.0508474576271283, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "AB06969E-2217-4DDA-B6A6-0537DB89EDD0", + "kind" : "video", + "linkId" : "D50E12ED-A0DF-4078-95DE-6D5332CDFB62", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1304.0973840663398, + "start" : 368.33898305084745, + "track" : "v3" + }, + { + "duration" : 3.0508474576271283, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "84921634-8C3A-4FDC-9737-68D94154D037", + "kind" : "video", + "linkId" : "D50E12ED-A0DF-4078-95DE-6D5332CDFB62", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1304.097379482341, + "start" : 368.33898305084745, + "track" : "v4" + }, + { + "duration" : 6.610169491525426, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "B2E2127E-A4B7-4682-BC09-FE4FBF53EC66", + "kind" : "video", + "linkId" : "4A3BE2AA-0118-46FB-9311-40602A8063DF", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1309.6610169491526, + "start" : 371.3898305084746, + "track" : "v0" + }, + { + "duration" : 6.610169491525426, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A2F9926B-983E-4F53-99C7-92BB9B023122", + "kind" : "audio", + "linkId" : "4A3BE2AA-0118-46FB-9311-40602A8063DF", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1309.5771454078115, + "start" : 371.3898305084746, + "track" : "v1" + }, + { + "duration" : 6.610169491525426, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "D13D2198-79F9-4915-A5E0-AC690ADBC371", + "kind" : "audio", + "linkId" : "4A3BE2AA-0118-46FB-9311-40602A8063DF", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1309.6238217110424, + "start" : 371.3898305084746, + "track" : "v2" + }, + { + "duration" : 6.610169491525426, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "53651C3A-4919-49F0-ADED-34CDF520F07E", + "kind" : "video", + "linkId" : "4A3BE2AA-0118-46FB-9311-40602A8063DF", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1309.4872145748143, + "start" : 371.3898305084746, + "track" : "v3" + }, + { + "duration" : 6.610169491525426, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "00F70279-9C4E-40AB-8D35-B686234D9CD2", + "kind" : "video", + "linkId" : "4A3BE2AA-0118-46FB-9311-40602A8063DF", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1309.4872099908155, + "start" : 371.3898305084746, + "track" : "v4" + }, + { + "duration" : 6.372881355932179, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "3EB22ECC-5EAD-4107-9F24-6864C9464EAC", + "kind" : "video", + "linkId" : "346B7025-BD91-4339-98B4-DBE997BC1A27", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1319.1186440677966, + "start" : 378, + "track" : "v0" + }, + { + "duration" : 6.372881355932179, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "2B2021EE-7138-45C6-A0CF-0D8BBAC1116A", + "kind" : "audio", + "linkId" : "346B7025-BD91-4339-98B4-DBE997BC1A27", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1319.0347725264555, + "start" : 378, + "track" : "v1" + }, + { + "duration" : 6.372881355932179, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "4A8A3D03-F2FB-4651-A609-318676737F28", + "kind" : "audio", + "linkId" : "346B7025-BD91-4339-98B4-DBE997BC1A27", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1319.0814488296865, + "start" : 378, + "track" : "v2" + }, + { + "duration" : 6.372881355932179, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "196CB0CE-61ED-4852-A694-AB8B592CF510", + "kind" : "video", + "linkId" : "346B7025-BD91-4339-98B4-DBE997BC1A27", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1318.9448416934583, + "start" : 378, + "track" : "v3" + }, + { + "duration" : 6.372881355932179, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "AB9E730D-3DB3-430E-92B1-8528951D9146", + "kind" : "video", + "linkId" : "346B7025-BD91-4339-98B4-DBE997BC1A27", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1318.9448371094595, + "start" : 378, + "track" : "v4" + }, + { + "duration" : 10.983050847457662, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "59AB16D3-EBCD-438B-8B8C-88413E1E8D67", + "kind" : "video", + "linkId" : "8A7CFF6A-2FE9-4C3F-813E-9DDC903D1C26", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1327.1186440677966, + "start" : 384.3728813559322, + "track" : "v0" + }, + { + "duration" : 10.983050847457662, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "77501D06-4929-403D-8FCB-6E79E9A296A4", + "kind" : "audio", + "linkId" : "8A7CFF6A-2FE9-4C3F-813E-9DDC903D1C26", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1327.0347725264555, + "start" : 384.3728813559322, + "track" : "v1" + }, + { + "duration" : 10.983050847457662, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A8B5D5C7-311F-4D71-BD19-7B1BAC7B047E", + "kind" : "audio", + "linkId" : "8A7CFF6A-2FE9-4C3F-813E-9DDC903D1C26", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1327.0814488296865, + "start" : 384.3728813559322, + "track" : "v2" + }, + { + "duration" : 10.983050847457662, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "F9DB0D5E-9113-4D5E-81AB-EAE9AF22C7FE", + "kind" : "video", + "linkId" : "8A7CFF6A-2FE9-4C3F-813E-9DDC903D1C26", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1326.9448416934583, + "start" : 384.3728813559322, + "track" : "v3" + }, + { + "duration" : 10.983050847457662, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "D4A49349-31F4-41F7-91B5-682C810269F4", + "kind" : "video", + "linkId" : "8A7CFF6A-2FE9-4C3F-813E-9DDC903D1C26", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1326.9448371094595, + "start" : 384.3728813559322, + "track" : "v4" + }, + { + "duration" : 14.169491525423723, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "3BEF9E6B-7901-407C-BEA3-7AFAB2A27DF5", + "kind" : "video", + "linkId" : "704CF8B0-3041-4053-9080-715DFE6B2D25", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1389.0169491525423, + "start" : 395.35593220338984, + "track" : "v0" + }, + { + "duration" : 14.169491525423723, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "BC1D4D97-B973-4693-9B24-5823A5192FAA", + "kind" : "audio", + "linkId" : "704CF8B0-3041-4053-9080-715DFE6B2D25", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1388.9330776112013, + "start" : 395.35593220338984, + "track" : "v1" + }, + { + "duration" : 14.169491525423723, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "DBBCAF21-55F8-44F0-9F8A-4EA556B8EB57", + "kind" : "audio", + "linkId" : "704CF8B0-3041-4053-9080-715DFE6B2D25", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1388.9797539144322, + "start" : 395.35593220338984, + "track" : "v2" + }, + { + "duration" : 14.169491525423723, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "6C7A0EB2-88FC-4404-B48D-AA7FE6269170", + "kind" : "video", + "linkId" : "704CF8B0-3041-4053-9080-715DFE6B2D25", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1388.843146778204, + "start" : 395.35593220338984, + "track" : "v3" + }, + { + "duration" : 14.169491525423723, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "50068A9B-E7CF-4DD9-9917-7155FEEE9EA2", + "kind" : "video", + "linkId" : "704CF8B0-3041-4053-9080-715DFE6B2D25", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1388.8431421942053, + "start" : 395.35593220338984, + "track" : "v4" + }, + { + "duration" : 12.610169491525426, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "EA7CF47C-E4D3-437C-B0E5-4275167856C5", + "kind" : "video", + "linkId" : "5E30C5A7-ECB1-41A5-9456-2F737C45E0C1", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1406.5762711864404, + "start" : 409.52542372881356, + "track" : "v0" + }, + { + "duration" : 12.610169491525426, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "1E9A4B81-6D6C-4CEF-BCD9-A56D14BC12E5", + "kind" : "audio", + "linkId" : "5E30C5A7-ECB1-41A5-9456-2F737C45E0C1", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1406.4923996450993, + "start" : 409.52542372881356, + "track" : "v1" + }, + { + "duration" : 12.610169491525426, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "1506A648-D35B-4619-A082-06FF4E3CBA5B", + "kind" : "audio", + "linkId" : "5E30C5A7-ECB1-41A5-9456-2F737C45E0C1", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1406.5390759483303, + "start" : 409.52542372881356, + "track" : "v2" + }, + { + "duration" : 12.610169491525426, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "9D08D70B-5627-48C7-873D-A8153FA5DA0E", + "kind" : "video", + "linkId" : "5E30C5A7-ECB1-41A5-9456-2F737C45E0C1", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1406.4024688121021, + "start" : 409.52542372881356, + "track" : "v3" + }, + { + "duration" : 12.610169491525426, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A6181FAE-7AFB-4D19-B593-91540501DC66", + "kind" : "video", + "linkId" : "5E30C5A7-ECB1-41A5-9456-2F737C45E0C1", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1406.4024642281033, + "start" : 409.52542372881356, + "track" : "v4" + }, + { + "duration" : 12.13559322033899, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "4E3F3515-7F7B-447C-BC9F-E4220A2BA2A2", + "kind" : "video", + "linkId" : "226C31FD-B8DF-4F4A-A67B-DCB285B8B836", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1434.1694915254236, + "start" : 428.271186440678, + "track" : "v0" + }, + { + "duration" : 12.13559322033899, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "635A9B0E-7D5C-4F08-BEB1-0D43CEB95071", + "kind" : "audio", + "linkId" : "226C31FD-B8DF-4F4A-A67B-DCB285B8B836", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1434.0856199840825, + "start" : 428.271186440678, + "track" : "v1" + }, + { + "duration" : 12.13559322033899, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "B26C43CA-9142-4FF8-8DE6-5FB3CF02701F", + "kind" : "audio", + "linkId" : "226C31FD-B8DF-4F4A-A67B-DCB285B8B836", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1434.1322962873135, + "start" : 428.271186440678, + "track" : "v2" + }, + { + "duration" : 12.13559322033899, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "1D681666-828B-4516-905F-70C0B9927714", + "kind" : "video", + "linkId" : "226C31FD-B8DF-4F4A-A67B-DCB285B8B836", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1433.9956891510853, + "start" : 428.271186440678, + "track" : "v3" + }, + { + "duration" : 12.13559322033899, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "14FFF5E0-4F74-4347-AEC2-714B77823B90", + "kind" : "video", + "linkId" : "226C31FD-B8DF-4F4A-A67B-DCB285B8B836", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1433.9956845670865, + "start" : 428.271186440678, + "track" : "v4" + }, + { + "duration" : 6.13559322033899, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "651982BC-F62C-433E-9CA6-7F53FDD18AD2", + "kind" : "video", + "linkId" : "985611EC-FA7E-4535-BFEC-AECD319001B6", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1428.0338983050847, + "start" : 422.135593220339, + "track" : "v0" + }, + { + "duration" : 6.13559322033899, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "011DD52B-7DF9-4AB2-9143-9249F293A98C", + "kind" : "audio", + "linkId" : "985611EC-FA7E-4535-BFEC-AECD319001B6", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1427.9500267637436, + "start" : 422.135593220339, + "track" : "v1" + }, + { + "duration" : 6.13559322033899, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "9C6C77CE-A577-41A8-AF62-5B1AD22511CB", + "kind" : "audio", + "linkId" : "985611EC-FA7E-4535-BFEC-AECD319001B6", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1427.9967030669745, + "start" : 422.135593220339, + "track" : "v2" + }, + { + "duration" : 6.13559322033899, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "81445B0A-E2DC-4623-B61E-F78297F1AF9B", + "kind" : "video", + "linkId" : "985611EC-FA7E-4535-BFEC-AECD319001B6", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1427.8600959307464, + "start" : 422.135593220339, + "track" : "v3" + }, + { + "duration" : 6.13559322033899, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "2FCF79AA-A233-43B0-924A-F22316673337", + "kind" : "video", + "linkId" : "985611EC-FA7E-4535-BFEC-AECD319001B6", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1427.8600913467476, + "start" : 422.135593220339, + "track" : "v4" + }, + { + "duration" : 9.45762711864404, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "3226AEDC-71C8-4045-95AB-2938C4E153FF", + "kind" : "video", + "linkId" : "ABBC461D-6EED-494A-8B1A-7677A2E7D027", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1449.559322033898, + "start" : 440.40677966101697, + "track" : "v0" + }, + { + "duration" : 9.45762711864404, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "FAF956D0-C01F-4926-93F2-49FA34A04E13", + "kind" : "audio", + "linkId" : "ABBC461D-6EED-494A-8B1A-7677A2E7D027", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1449.475450492557, + "start" : 440.40677966101697, + "track" : "v1" + }, + { + "duration" : 9.45762711864404, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "3EB9B48B-CACE-4489-BAFE-59EB0F2E6305", + "kind" : "audio", + "linkId" : "ABBC461D-6EED-494A-8B1A-7677A2E7D027", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1449.522126795788, + "start" : 440.40677966101697, + "track" : "v2" + }, + { + "duration" : 9.45762711864404, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "4406B9FA-D633-49BC-BB25-FA2554A8FA6A", + "kind" : "video", + "linkId" : "ABBC461D-6EED-494A-8B1A-7677A2E7D027", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1449.3855196595598, + "start" : 440.40677966101697, + "track" : "v3" + }, + { + "duration" : 9.45762711864404, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "99E4D7B0-8E74-4871-B79C-5EE9AE03E424", + "kind" : "video", + "linkId" : "ABBC461D-6EED-494A-8B1A-7677A2E7D027", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1449.385515075561, + "start" : 440.40677966101697, + "track" : "v4" + }, + { + "duration" : 6.677966101694949, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "559361D5-9DB2-4B63-8E39-79DEB5DA658A", + "kind" : "video", + "linkId" : "F4E6AD2E-D33A-4B9D-9CC7-E85C4DF5F3C7", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1462.64406779661, + "start" : 449.864406779661, + "track" : "v0" + }, + { + "duration" : 6.677966101694949, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "37884883-822C-45CA-B6E1-133027A1718A", + "kind" : "audio", + "linkId" : "F4E6AD2E-D33A-4B9D-9CC7-E85C4DF5F3C7", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1462.560196255269, + "start" : 449.864406779661, + "track" : "v1" + }, + { + "duration" : 6.677966101694949, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "81675B52-F6A6-4C8A-997F-8AF4803A89E7", + "kind" : "audio", + "linkId" : "F4E6AD2E-D33A-4B9D-9CC7-E85C4DF5F3C7", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1462.6068725584998, + "start" : 449.864406779661, + "track" : "v2" + }, + { + "duration" : 6.677966101694949, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "4787230C-8C29-4CF7-854E-A3AB00759466", + "kind" : "video", + "linkId" : "F4E6AD2E-D33A-4B9D-9CC7-E85C4DF5F3C7", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1462.4702654222717, + "start" : 449.864406779661, + "track" : "v3" + }, + { + "duration" : 6.677966101694949, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "CDA54502-AAC3-496A-B251-B43F1F744E11", + "kind" : "video", + "linkId" : "F4E6AD2E-D33A-4B9D-9CC7-E85C4DF5F3C7", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1462.470260838273, + "start" : 449.864406779661, + "track" : "v4" + }, + { + "duration" : 2.1016949152541997, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "CEDDFF86-9747-4058-98DC-1EB7A4B1F572", + "kind" : "video", + "linkId" : "EDBE29AE-0AD9-452E-A93A-771CE2BE813D", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1471.6610169491523, + "start" : 456.54237288135596, + "track" : "v0" + }, + { + "duration" : 2.1016949152541997, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "65DBD942-E0B7-428A-B955-F7C74957C7E7", + "kind" : "audio", + "linkId" : "EDBE29AE-0AD9-452E-A93A-771CE2BE813D", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1471.5771454078113, + "start" : 456.54237288135596, + "track" : "v1" + }, + { + "duration" : 2.1016949152541997, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "F6898171-8F65-41C6-8518-DFF6DBBABC04", + "kind" : "audio", + "linkId" : "EDBE29AE-0AD9-452E-A93A-771CE2BE813D", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1471.6238217110422, + "start" : 456.54237288135596, + "track" : "v2" + }, + { + "duration" : 2.1016949152541997, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "D865CA10-5853-486F-82AD-02B05EE60EDB", + "kind" : "video", + "linkId" : "EDBE29AE-0AD9-452E-A93A-771CE2BE813D", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1471.487214574814, + "start" : 456.54237288135596, + "track" : "v3" + }, + { + "duration" : 2.1016949152541997, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "0616F857-62D2-44F6-A078-21F47E1CD066", + "kind" : "video", + "linkId" : "EDBE29AE-0AD9-452E-A93A-771CE2BE813D", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1471.4872099908152, + "start" : 456.54237288135596, + "track" : "v4" + }, + { + "duration" : 8.101694915254257, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A734B468-A8AC-4E1B-BBFF-00BCD0D78390", + "kind" : "video", + "linkId" : "E9457961-D7DC-4D55-8C56-3E6D232AC821", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1478.3389830508472, + "start" : 458.64406779661016, + "track" : "v0" + }, + { + "duration" : 8.101694915254257, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "0B521685-7B77-48BB-B145-8FC0FC1B8D14", + "kind" : "audio", + "linkId" : "E9457961-D7DC-4D55-8C56-3E6D232AC821", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1478.2551115095062, + "start" : 458.64406779661016, + "track" : "v1" + }, + { + "duration" : 8.101694915254257, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "B79DCE82-D278-4E64-BF3E-DD1383DE9320", + "kind" : "audio", + "linkId" : "E9457961-D7DC-4D55-8C56-3E6D232AC821", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1478.301787812737, + "start" : 458.64406779661016, + "track" : "v2" + }, + { + "duration" : 8.101694915254257, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "C1373384-5CBC-48DA-AEEA-B1DC0A1277AB", + "kind" : "video", + "linkId" : "E9457961-D7DC-4D55-8C56-3E6D232AC821", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1478.165180676509, + "start" : 458.64406779661016, + "track" : "v3" + }, + { + "duration" : 8.101694915254257, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "8B3DE2A2-8DE0-408E-96C4-669DAE9AD4A9", + "kind" : "video", + "linkId" : "E9457961-D7DC-4D55-8C56-3E6D232AC821", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1478.1651760925101, + "start" : 458.64406779661016, + "track" : "v4" + }, + { + "duration" : 2.13559322033899, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "EFA97D54-119E-4829-9D03-E931F198D283", + "kind" : "video", + "linkId" : "8FAC32E3-47A3-49EC-A6FC-51E8FD39E2C8", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1491.2203389830506, + "start" : 466.7457627118644, + "track" : "v0" + }, + { + "duration" : 2.13559322033899, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "D10DB1AB-A596-41C4-99D6-2874E01C4666", + "kind" : "audio", + "linkId" : "8FAC32E3-47A3-49EC-A6FC-51E8FD39E2C8", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1491.1364674417096, + "start" : 466.7457627118644, + "track" : "v1" + }, + { + "duration" : 2.13559322033899, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "05FD9DBC-666B-4F86-98C5-B006D88468C8", + "kind" : "audio", + "linkId" : "8FAC32E3-47A3-49EC-A6FC-51E8FD39E2C8", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1491.1831437449405, + "start" : 466.7457627118644, + "track" : "v2" + }, + { + "duration" : 2.13559322033899, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "F8379F4E-716C-4AB7-A712-E90386ACAAF5", + "kind" : "video", + "linkId" : "8FAC32E3-47A3-49EC-A6FC-51E8FD39E2C8", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1491.0465366087124, + "start" : 466.7457627118644, + "track" : "v3" + }, + { + "duration" : 2.13559322033899, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "0AE01210-BDC5-4A27-A1D9-447FB98CBD8C", + "kind" : "video", + "linkId" : "8FAC32E3-47A3-49EC-A6FC-51E8FD39E2C8", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1491.0465320247135, + "start" : 466.7457627118644, + "track" : "v4" + }, + { + "duration" : 12.13559322033899, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "17C94894-CE9A-414A-99D9-983680DBF3C0", + "kind" : "video", + "linkId" : "BD0AA767-5E48-4364-B00E-41745729A942", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1493.3559322033896, + "start" : 468.8813559322034, + "track" : "v0" + }, + { + "duration" : 12.13559322033899, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "517FEEE5-722F-4AF0-9739-D6C4CBFF13F7", + "kind" : "audio", + "linkId" : "BD0AA767-5E48-4364-B00E-41745729A942", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1493.2720606620485, + "start" : 468.8813559322034, + "track" : "v1" + }, + { + "duration" : 12.13559322033899, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "66CDAA10-44F3-4B54-AE2E-76150ACC9CD0", + "kind" : "audio", + "linkId" : "BD0AA767-5E48-4364-B00E-41745729A942", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1493.3187369652794, + "start" : 468.8813559322034, + "track" : "v2" + }, + { + "duration" : 12.13559322033899, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A6487CCD-4DF5-4DD5-BFE5-2536683FBC19", + "kind" : "video", + "linkId" : "BD0AA767-5E48-4364-B00E-41745729A942", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1493.1821298290513, + "start" : 468.8813559322034, + "track" : "v3" + }, + { + "duration" : 12.13559322033899, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "3E4AB4B8-236F-4408-8452-95DFA2ED6598", + "kind" : "video", + "linkId" : "BD0AA767-5E48-4364-B00E-41745729A942", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1493.1821252450525, + "start" : 468.8813559322034, + "track" : "v4" + }, + { + "duration" : 2.7796610169491487, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "D2B2B51E-C0F9-43FA-A96C-FF04E0956544", + "kind" : "video", + "linkId" : "F6AD378F-5CCF-4E64-988D-88B2876624B9", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1537.8644067796606, + "start" : 481.0169491525424, + "track" : "v0" + }, + { + "duration" : 2.7796610169491487, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "6F365D36-DA75-4DAC-875E-2799D7405B79", + "kind" : "audio", + "linkId" : "F6AD378F-5CCF-4E64-988D-88B2876624B9", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1537.7805352383195, + "start" : 481.0169491525424, + "track" : "v1" + }, + { + "duration" : 2.7796610169491487, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "6086A913-26DD-4E7A-8DA8-5B7FF6C55700", + "kind" : "audio", + "linkId" : "F6AD378F-5CCF-4E64-988D-88B2876624B9", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1537.8272115415505, + "start" : 481.0169491525424, + "track" : "v2" + }, + { + "duration" : 2.7796610169491487, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "2F29A3B0-A10F-4DB4-B9E2-B76DBFA73359", + "kind" : "video", + "linkId" : "F6AD378F-5CCF-4E64-988D-88B2876624B9", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1537.6906044053223, + "start" : 481.0169491525424, + "track" : "v3" + }, + { + "duration" : 2.7796610169491487, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "1684BBB7-47B4-4BFA-B8C1-058C3FAC9CED", + "kind" : "video", + "linkId" : "F6AD378F-5CCF-4E64-988D-88B2876624B9", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1537.6905998213235, + "start" : 481.0169491525424, + "track" : "v4" + }, + { + "duration" : 1.0847457627118615, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A7680D68-6BCD-4F79-A28F-858D96D4A6E2", + "kind" : "video", + "linkId" : "A3087F67-EF84-47FF-B3BE-7F42F50669A0", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1540.6440677966098, + "start" : 483.79661016949154, + "track" : "v0" + }, + { + "duration" : 1.0847457627118615, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "3854E595-101A-4295-A1B3-5765E651A0AF", + "kind" : "audio", + "linkId" : "A3087F67-EF84-47FF-B3BE-7F42F50669A0", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1540.5601962552687, + "start" : 483.79661016949154, + "track" : "v1" + }, + { + "duration" : 1.0847457627118615, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "D256891E-1C5E-4D56-9CA9-3638EDDF53E4", + "kind" : "audio", + "linkId" : "A3087F67-EF84-47FF-B3BE-7F42F50669A0", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1540.6068725584996, + "start" : 483.79661016949154, + "track" : "v2" + }, + { + "duration" : 1.0847457627118615, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "B12D34EF-C8C7-49A2-8C6F-04B3A3068BC7", + "kind" : "video", + "linkId" : "A3087F67-EF84-47FF-B3BE-7F42F50669A0", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1540.4702654222715, + "start" : 483.79661016949154, + "track" : "v3" + }, + { + "duration" : 1.0847457627118615, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "D07A239B-1D03-40C0-82F5-BF4EE984E137", + "kind" : "video", + "linkId" : "A3087F67-EF84-47FF-B3BE-7F42F50669A0", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1540.4702608382727, + "start" : 483.79661016949154, + "track" : "v4" + }, + { + "duration" : 3.5932203389830306, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "B7BE7F5F-53C9-40B3-9F12-7DF7A2D9685A", + "kind" : "video", + "linkId" : "F9AD2997-81A6-4EF6-BD27-5B43EE87F75A", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1630.745762711864, + "start" : 484.8813559322034, + "track" : "v0" + }, + { + "duration" : 3.5932203389830306, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "B0F7D729-54ED-422A-B202-11DF2760B5F3", + "kind" : "audio", + "linkId" : "F9AD2997-81A6-4EF6-BD27-5B43EE87F75A", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1630.661891170523, + "start" : 484.8813559322034, + "track" : "v1" + }, + { + "duration" : 3.5932203389830306, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "905A3ACC-296C-4843-B9D9-B86F50F5BA5F", + "kind" : "audio", + "linkId" : "F9AD2997-81A6-4EF6-BD27-5B43EE87F75A", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1630.7085674737539, + "start" : 484.8813559322034, + "track" : "v2" + }, + { + "duration" : 3.5932203389830306, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "0B7D26CE-983C-4362-B1CD-AC3A40378E3B", + "kind" : "video", + "linkId" : "F9AD2997-81A6-4EF6-BD27-5B43EE87F75A", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1630.5719603375258, + "start" : 484.8813559322034, + "track" : "v3" + }, + { + "duration" : 3.5932203389830306, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "AFE6D697-39D5-420E-BD1B-A64E0A13DC41", + "kind" : "video", + "linkId" : "F9AD2997-81A6-4EF6-BD27-5B43EE87F75A", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1630.571955753527, + "start" : 484.8813559322034, + "track" : "v4" + }, + { + "duration" : 5.525423728813564, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "FFF0A0F3-132A-4462-A828-0FAEB88BBC4D", + "kind" : "video", + "linkId" : "0DB5CF0D-9192-4B84-94D8-6B5373F51616", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1690.881355932203, + "start" : 488.47457627118644, + "track" : "v0" + }, + { + "duration" : 5.525423728813564, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "8C1B2FDC-C8A5-44ED-9F1E-CA222B045C32", + "kind" : "audio", + "linkId" : "0DB5CF0D-9192-4B84-94D8-6B5373F51616", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1690.7974843908619, + "start" : 488.47457627118644, + "track" : "v1" + }, + { + "duration" : 5.525423728813564, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "630C64EC-19AC-4FC2-B36B-5B8934D80D33", + "kind" : "audio", + "linkId" : "0DB5CF0D-9192-4B84-94D8-6B5373F51616", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1690.8441606940928, + "start" : 488.47457627118644, + "track" : "v2" + }, + { + "duration" : 5.525423728813564, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "234A86B0-ECCC-4314-9B52-A58DB3C619BB", + "kind" : "video", + "linkId" : "0DB5CF0D-9192-4B84-94D8-6B5373F51616", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1690.7075535578647, + "start" : 488.47457627118644, + "track" : "v3" + }, + { + "duration" : 5.525423728813564, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "02321509-9B22-45BA-884A-BFB975074D08", + "kind" : "video", + "linkId" : "0DB5CF0D-9192-4B84-94D8-6B5373F51616", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1690.7075489738659, + "start" : 488.47457627118644, + "track" : "v4" + }, + { + "duration" : 3.9661016949152668, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A8D392D7-E60E-4189-B7D6-B1C2B5E6927D", + "kind" : "video", + "linkId" : "A50B7D21-1369-498E-A893-10D9266DA682", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1703.5254237288132, + "start" : 494, + "track" : "v0" + }, + { + "duration" : 3.9661016949152668, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "79B92814-E4D4-422A-B414-FEC1D42BABF8", + "kind" : "audio", + "linkId" : "A50B7D21-1369-498E-A893-10D9266DA682", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1703.441552187472, + "start" : 494, + "track" : "v1" + }, + { + "duration" : 3.9661016949152668, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "154F32D0-7DAB-433B-833A-86D9F7B2B99E", + "kind" : "audio", + "linkId" : "A50B7D21-1369-498E-A893-10D9266DA682", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1703.488228490703, + "start" : 494, + "track" : "v2" + }, + { + "duration" : 3.9661016949152668, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "C57B1520-E9CD-43AB-ABB5-AA9F59B97CE5", + "kind" : "video", + "linkId" : "A50B7D21-1369-498E-A893-10D9266DA682", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1703.351621354475, + "start" : 494, + "track" : "v3" + }, + { + "duration" : 3.9661016949152668, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "72ECB107-E625-47A0-91F5-4B07C84F9D01", + "kind" : "video", + "linkId" : "A50B7D21-1369-498E-A893-10D9266DA682", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1703.351616770476, + "start" : 494, + "track" : "v4" + }, + { + "duration" : 3.322033898305051, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "592BF8E8-84BB-4D68-ACAF-C5250A378311", + "kind" : "video", + "linkId" : "2F16524C-A3E5-4EC3-B918-2C0107EB5F71", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1714.4067796610166, + "start" : 497.96610169491527, + "track" : "v0" + }, + { + "duration" : 3.322033898305051, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "6A420F63-349C-490A-AEF2-A9A23B8F5911", + "kind" : "audio", + "linkId" : "2F16524C-A3E5-4EC3-B918-2C0107EB5F71", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1714.3229081196755, + "start" : 497.96610169491527, + "track" : "v1" + }, + { + "duration" : 3.322033898305051, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "9BFFE86E-C803-440C-A23A-27946EB8F38E", + "kind" : "audio", + "linkId" : "2F16524C-A3E5-4EC3-B918-2C0107EB5F71", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1714.3695844229064, + "start" : 497.96610169491527, + "track" : "v2" + }, + { + "duration" : 3.322033898305051, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "507C5A42-E790-48A6-8DE6-F867042AD251", + "kind" : "video", + "linkId" : "2F16524C-A3E5-4EC3-B918-2C0107EB5F71", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1714.2329772866783, + "start" : 497.96610169491527, + "track" : "v3" + }, + { + "duration" : 3.322033898305051, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "1255A12C-C270-451F-B9E7-2C3827620218", + "kind" : "video", + "linkId" : "2F16524C-A3E5-4EC3-B918-2C0107EB5F71", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1714.2329727026795, + "start" : 497.96610169491527, + "track" : "v4" + }, + { + "duration" : 5.491525423728831, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "FAF25F24-F13A-4DE0-9CF8-7D2584531C9E", + "kind" : "video", + "linkId" : "EE183339-F801-4116-A9EF-D64A77C5996D", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1722.372881355932, + "start" : 501.2881355932203, + "track" : "v0" + }, + { + "duration" : 5.491525423728831, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "E764AB44-88DC-41E9-A83E-E32A15AD06C5", + "kind" : "audio", + "linkId" : "EE183339-F801-4116-A9EF-D64A77C5996D", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1722.2890098145908, + "start" : 501.2881355932203, + "track" : "v1" + }, + { + "duration" : 5.491525423728831, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A156F3B8-0CDE-4ADF-8CA0-BA16EF901769", + "kind" : "audio", + "linkId" : "EE183339-F801-4116-A9EF-D64A77C5996D", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1722.3356861178218, + "start" : 501.2881355932203, + "track" : "v2" + }, + { + "duration" : 5.491525423728831, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "60A808DE-37D0-4C45-925D-276CA1D59EB7", + "kind" : "video", + "linkId" : "EE183339-F801-4116-A9EF-D64A77C5996D", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1722.1990789815936, + "start" : 501.2881355932203, + "track" : "v3" + }, + { + "duration" : 5.491525423728831, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "C8564707-EE02-4CAD-BFA6-0089C454CE2A", + "kind" : "video", + "linkId" : "EE183339-F801-4116-A9EF-D64A77C5996D", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1722.1990743975948, + "start" : 501.2881355932203, + "track" : "v4" + }, + { + "duration" : 7.627118644067764, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "BB4F9A82-C969-4E01-BDBE-E481B17343CF", + "kind" : "video", + "linkId" : "DFDDB477-FE81-42F4-A11E-389F9E0A1439", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1729.050847457627, + "start" : 506.77966101694915, + "track" : "v0" + }, + { + "duration" : 7.627118644067764, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "D539326D-CFC6-4F6B-A59C-770061337CBD", + "kind" : "audio", + "linkId" : "DFDDB477-FE81-42F4-A11E-389F9E0A1439", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1728.966975916286, + "start" : 506.77966101694915, + "track" : "v1" + }, + { + "duration" : 7.627118644067764, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "28F991A4-9D42-4CBC-BE96-E89FEBFAF96C", + "kind" : "audio", + "linkId" : "DFDDB477-FE81-42F4-A11E-389F9E0A1439", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1729.0136522195169, + "start" : 506.77966101694915, + "track" : "v2" + }, + { + "duration" : 7.627118644067764, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "D4D4B878-3981-44A7-9435-B6B607F17D8E", + "kind" : "video", + "linkId" : "DFDDB477-FE81-42F4-A11E-389F9E0A1439", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1728.8770450832887, + "start" : 506.77966101694915, + "track" : "v3" + }, + { + "duration" : 7.627118644067764, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "BFB922A9-8931-4826-A5AE-4A8F51627F00", + "kind" : "video", + "linkId" : "DFDDB477-FE81-42F4-A11E-389F9E0A1439", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1728.87704049929, + "start" : 506.77966101694915, + "track" : "v4" + }, + { + "duration" : 7.491525423728831, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "08360F23-5B06-4769-94DC-42A31CD3BD46", + "kind" : "video", + "linkId" : "2C7554F2-E73F-41CD-85CB-697100DCD6C1", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1747.593220338983, + "start" : 514.4067796610169, + "track" : "v0" + }, + { + "duration" : 7.491525423728831, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "8BCF92B0-D87A-42BB-A168-F889F41CD1AB", + "kind" : "audio", + "linkId" : "2C7554F2-E73F-41CD-85CB-697100DCD6C1", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1747.509348797642, + "start" : 514.4067796610169, + "track" : "v1" + }, + { + "duration" : 7.491525423728831, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "2753AF8E-8B68-4B0D-A289-CCF8ABFA4EA6", + "kind" : "audio", + "linkId" : "2C7554F2-E73F-41CD-85CB-697100DCD6C1", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1747.5560251008728, + "start" : 514.4067796610169, + "track" : "v2" + }, + { + "duration" : 7.491525423728831, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "913D7AB9-49C1-4FEE-B538-D81313C8CDAA", + "kind" : "video", + "linkId" : "2C7554F2-E73F-41CD-85CB-697100DCD6C1", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1747.4194179646447, + "start" : 514.4067796610169, + "track" : "v3" + }, + { + "duration" : 7.491525423728831, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A4078960-1488-4073-A3C0-10A87E8A55C7", + "kind" : "video", + "linkId" : "2C7554F2-E73F-41CD-85CB-697100DCD6C1", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1747.419413380646, + "start" : 514.4067796610169, + "track" : "v4" + }, + { + "duration" : 10.677966101694892, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "B0A75210-7D43-4E54-906B-32BFB4856787", + "kind" : "video", + "linkId" : "68BA82C2-1D37-4341-BBD5-0BE799A2C6FA", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1755.084745762712, + "start" : 521.8983050847457, + "track" : "v0" + }, + { + "duration" : 10.677966101694892, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "581E6DD4-D543-4188-9C1B-BC9D2F1F908C", + "kind" : "audio", + "linkId" : "68BA82C2-1D37-4341-BBD5-0BE799A2C6FA", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1755.0008742213709, + "start" : 521.8983050847457, + "track" : "v1" + }, + { + "duration" : 10.677966101694892, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "B8BFF2A6-3F9E-4D5E-8DFE-EDF5101E1AE5", + "kind" : "audio", + "linkId" : "68BA82C2-1D37-4341-BBD5-0BE799A2C6FA", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1755.0475505246018, + "start" : 521.8983050847457, + "track" : "v2" + }, + { + "duration" : 10.677966101694892, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "6669C09D-E39D-46DE-A862-6BA3B20F558E", + "kind" : "video", + "linkId" : "68BA82C2-1D37-4341-BBD5-0BE799A2C6FA", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1754.9109433883737, + "start" : 521.8983050847457, + "track" : "v3" + }, + { + "duration" : 10.677966101694892, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "C6619902-8ED4-46F4-907C-4F6DF342850B", + "kind" : "video", + "linkId" : "68BA82C2-1D37-4341-BBD5-0BE799A2C6FA", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1754.9109388043748, + "start" : 521.8983050847457, + "track" : "v4" + }, + { + "duration" : 3.152542372881385, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "1E1F6B29-A2BC-44CA-BC6B-B2DA54F93FE5", + "kind" : "video", + "linkId" : "F2447BC6-DF74-439E-8FD2-0FBAC39A205C", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1766.6101694915255, + "start" : 532.5762711864406, + "track" : "v0" + }, + { + "duration" : 3.152542372881385, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "97A49AEA-492D-4D8E-A171-E4F0831755E7", + "kind" : "audio", + "linkId" : "F2447BC6-DF74-439E-8FD2-0FBAC39A205C", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1766.5262979501845, + "start" : 532.5762711864406, + "track" : "v1" + }, + { + "duration" : 3.152542372881385, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "C0542DA4-D2C3-4854-B510-3701574E9CD1", + "kind" : "audio", + "linkId" : "F2447BC6-DF74-439E-8FD2-0FBAC39A205C", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1766.5729742534154, + "start" : 532.5762711864406, + "track" : "v2" + }, + { + "duration" : 3.152542372881385, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "85D95CB3-B6F4-4DFA-9F00-55E80014D2B2", + "kind" : "video", + "linkId" : "F2447BC6-DF74-439E-8FD2-0FBAC39A205C", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1766.4363671171873, + "start" : 532.5762711864406, + "track" : "v3" + }, + { + "duration" : 3.152542372881385, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "3AD412AE-C961-4FE7-B65F-3266A0980B36", + "kind" : "video", + "linkId" : "F2447BC6-DF74-439E-8FD2-0FBAC39A205C", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1766.4363625331885, + "start" : 532.5762711864406, + "track" : "v4" + }, + { + "duration" : 5.491525423728831, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "1F116DEE-E2FC-4C19-B84E-F62E8C7FB58E", + "kind" : "video", + "linkId" : "CC83DD13-876C-4795-A07C-8A9F20E0FCD4", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1771.898305084746, + "start" : 535.728813559322, + "track" : "v0" + }, + { + "duration" : 5.491525423728831, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "26F01770-1063-4614-838E-9C7408CB8EA7", + "kind" : "audio", + "linkId" : "CC83DD13-876C-4795-A07C-8A9F20E0FCD4", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1771.814433543405, + "start" : 535.728813559322, + "track" : "v1" + }, + { + "duration" : 5.491525423728831, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "E27B6F72-E807-4B80-B045-EF94CBEAE518", + "kind" : "audio", + "linkId" : "CC83DD13-876C-4795-A07C-8A9F20E0FCD4", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1771.8611098466358, + "start" : 535.728813559322, + "track" : "v2" + }, + { + "duration" : 5.491525423728831, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "780E91E1-D956-46CE-AD94-132F9146FF16", + "kind" : "video", + "linkId" : "CC83DD13-876C-4795-A07C-8A9F20E0FCD4", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1771.7245027104077, + "start" : 535.728813559322, + "track" : "v3" + }, + { + "duration" : 5.491525423728831, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "502017FB-B15D-472A-92CD-864B01FA9D5A", + "kind" : "video", + "linkId" : "CC83DD13-876C-4795-A07C-8A9F20E0FCD4", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1771.724498126409, + "start" : 535.728813559322, + "track" : "v4" + }, + { + "duration" : 4.0677966101694665, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "C08F7E72-3AD4-4B1D-8250-1512128E7940", + "kind" : "video", + "linkId" : "A2118321-9E02-4656-BCE9-0E3980E8372E", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1779.5593220338988, + "start" : 541.2203389830509, + "track" : "v0" + }, + { + "duration" : 4.0677966101694665, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "B58ABDEF-6C61-45A8-95FF-6445D0C0EABC", + "kind" : "audio", + "linkId" : "A2118321-9E02-4656-BCE9-0E3980E8372E", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1779.4754504925577, + "start" : 541.2203389830509, + "track" : "v1" + }, + { + "duration" : 4.0677966101694665, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "141D7901-0677-44F5-8296-15BC113C1EBE", + "kind" : "audio", + "linkId" : "A2118321-9E02-4656-BCE9-0E3980E8372E", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1779.5221267957886, + "start" : 541.2203389830509, + "track" : "v2" + }, + { + "duration" : 4.0677966101694665, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "BADB3830-CF8B-4208-A04F-439958ACADDA", + "kind" : "video", + "linkId" : "A2118321-9E02-4656-BCE9-0E3980E8372E", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1779.3855196595605, + "start" : 541.2203389830509, + "track" : "v3" + }, + { + "duration" : 4.0677966101694665, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "83BD9C59-2FC5-4F64-9963-A86B647F6F52", + "kind" : "video", + "linkId" : "A2118321-9E02-4656-BCE9-0E3980E8372E", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1779.3855150755617, + "start" : 541.2203389830509, + "track" : "v4" + }, + { + "duration" : 1.661016949152554, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "81042DC7-94FE-4359-959F-C9E29D4F9461", + "kind" : "video", + "linkId" : "CDF46AA7-2655-4344-81E6-6C7AB4F4B303", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1815.5932203389834, + "start" : 545.2881355932203, + "track" : "v0" + }, + { + "duration" : 1.661016949152554, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "EB5D9E21-E9FF-430D-B90A-143FFFC161D0", + "kind" : "audio", + "linkId" : "CDF46AA7-2655-4344-81E6-6C7AB4F4B303", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1815.5093487976424, + "start" : 545.2881355932203, + "track" : "v1" + }, + { + "duration" : 1.661016949152554, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "E5C8677F-212F-43D4-95D6-F86D218562F5", + "kind" : "audio", + "linkId" : "CDF46AA7-2655-4344-81E6-6C7AB4F4B303", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1815.5560251008733, + "start" : 545.2881355932203, + "track" : "v2" + }, + { + "duration" : 1.661016949152554, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "899CE36B-86FD-4463-ACF9-64EFDF419140", + "kind" : "video", + "linkId" : "CDF46AA7-2655-4344-81E6-6C7AB4F4B303", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1815.4194179646452, + "start" : 545.2881355932203, + "track" : "v3" + }, + { + "duration" : 1.661016949152554, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "B0B393DE-7AAD-46D0-8783-D2E08335DC13", + "kind" : "video", + "linkId" : "CDF46AA7-2655-4344-81E6-6C7AB4F4B303", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1815.4194133806463, + "start" : 545.2881355932203, + "track" : "v4" + }, + { + "duration" : 1.1525423728813848, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "18E9C9F7-AA69-4D86-9DD9-5278392186CD", + "kind" : "video", + "linkId" : "2426D580-BCAA-49B5-BF7C-9DCE2A558605", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1817.5593220338988, + "start" : 546.9491525423729, + "track" : "v0" + }, + { + "duration" : 1.1525423728813848, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "098E9E68-8FCE-4C2E-8A24-81EFEECCD127", + "kind" : "audio", + "linkId" : "2426D580-BCAA-49B5-BF7C-9DCE2A558605", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1817.4754504925577, + "start" : 546.9491525423729, + "track" : "v1" + }, + { + "duration" : 1.1525423728813848, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "3A68B520-1B13-4837-98C7-4715D6250B50", + "kind" : "audio", + "linkId" : "2426D580-BCAA-49B5-BF7C-9DCE2A558605", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1817.5221267957886, + "start" : 546.9491525423729, + "track" : "v2" + }, + { + "duration" : 1.1525423728813848, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "3D51136D-FC09-46D4-A29C-C1E8B7022D04", + "kind" : "video", + "linkId" : "2426D580-BCAA-49B5-BF7C-9DCE2A558605", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1817.3855196595605, + "start" : 546.9491525423729, + "track" : "v3" + }, + { + "duration" : 1.1525423728813848, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "879B5431-78D7-4E34-98CD-811F0D7D8D2B", + "kind" : "video", + "linkId" : "2426D580-BCAA-49B5-BF7C-9DCE2A558605", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1817.3855150755617, + "start" : 546.9491525423729, + "track" : "v4" + }, + { + "duration" : 11.525423728813507, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "B6AD6E92-A164-48D3-962D-8D5472AC5ED8", + "kind" : "video", + "linkId" : "5F7B4F1D-CE0A-49F1-A14C-6C7D1809E682", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1823.5593220338988, + "start" : 548.1016949152543, + "track" : "v0" + }, + { + "duration" : 11.525423728813507, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "15310F42-B66D-4DDB-B571-28824E2AA8F2", + "kind" : "audio", + "linkId" : "5F7B4F1D-CE0A-49F1-A14C-6C7D1809E682", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1823.4754504925577, + "start" : 548.1016949152543, + "track" : "v1" + }, + { + "duration" : 11.525423728813507, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "60DB4DB9-D800-414F-8313-D3C0C9CF620C", + "kind" : "audio", + "linkId" : "5F7B4F1D-CE0A-49F1-A14C-6C7D1809E682", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1823.5221267957886, + "start" : 548.1016949152543, + "track" : "v2" + }, + { + "duration" : 11.525423728813507, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "66EBCF41-7ABC-4B4F-B3D6-670B5DE5FF4B", + "kind" : "video", + "linkId" : "5F7B4F1D-CE0A-49F1-A14C-6C7D1809E682", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1823.3855196595605, + "start" : 548.1016949152543, + "track" : "v3" + }, + { + "duration" : 11.525423728813507, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "74B48312-8BD1-4CF9-967A-E7EED8D50E2A", + "kind" : "video", + "linkId" : "5F7B4F1D-CE0A-49F1-A14C-6C7D1809E682", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1823.3855150755617, + "start" : 548.1016949152543, + "track" : "v4" + }, + { + "duration" : 3.6271186440678775, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "7E495919-B008-4616-BB9C-17E3BDE688A9", + "kind" : "video", + "linkId" : "9769E036-22A2-4F7C-95DD-F0F9F243A183", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1836.474576271187, + "start" : 559.6271186440678, + "track" : "v0" + }, + { + "duration" : 3.6271186440678775, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "7E503A80-A896-4D03-9DC1-896D78C0F03A", + "kind" : "audio", + "linkId" : "9769E036-22A2-4F7C-95DD-F0F9F243A183", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1836.390704729846, + "start" : 559.6271186440678, + "track" : "v1" + }, + { + "duration" : 3.6271186440678775, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "37A7F54D-1185-4016-9C07-149400B154B8", + "kind" : "audio", + "linkId" : "9769E036-22A2-4F7C-95DD-F0F9F243A183", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1836.437381033077, + "start" : 559.6271186440678, + "track" : "v2" + }, + { + "duration" : 3.6271186440678775, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "12B7D82E-9520-4486-82BA-A1EFA3443CC5", + "kind" : "video", + "linkId" : "9769E036-22A2-4F7C-95DD-F0F9F243A183", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1836.3007738968488, + "start" : 559.6271186440678, + "track" : "v3" + }, + { + "duration" : 3.6271186440678775, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "467D66A4-ABC0-4A30-B666-EC09C21670C2", + "kind" : "video", + "linkId" : "9769E036-22A2-4F7C-95DD-F0F9F243A183", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1836.30076931285, + "start" : 559.6271186440678, + "track" : "v4" + }, + { + "duration" : 5.118644067796595, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "F7C9CC46-173D-4CEA-B84A-F83B2D94A2CE", + "kind" : "video", + "linkId" : "B85938EF-37B5-4F22-B0B6-0C3F5749452C", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1849.1186440677973, + "start" : 563.2542372881356, + "track" : "v0" + }, + { + "duration" : 5.118644067796595, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "AA8C606C-3D23-4965-B5D1-E17B4413C421", + "kind" : "audio", + "linkId" : "B85938EF-37B5-4F22-B0B6-0C3F5749452C", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1849.0347725264562, + "start" : 563.2542372881356, + "track" : "v1" + }, + { + "duration" : 5.118644067796595, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "FB4942C0-5842-419B-A4CA-242596D7CF03", + "kind" : "audio", + "linkId" : "B85938EF-37B5-4F22-B0B6-0C3F5749452C", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1849.0814488296871, + "start" : 563.2542372881356, + "track" : "v2" + }, + { + "duration" : 5.118644067796595, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "8D875994-D892-44D9-A74C-9AE0403A1240", + "kind" : "video", + "linkId" : "B85938EF-37B5-4F22-B0B6-0C3F5749452C", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1848.944841693459, + "start" : 563.2542372881356, + "track" : "v3" + }, + { + "duration" : 5.118644067796595, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "D7122A1E-0F1A-4EDA-BA83-5032DCB51740", + "kind" : "video", + "linkId" : "B85938EF-37B5-4F22-B0B6-0C3F5749452C", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1848.9448371094602, + "start" : 563.2542372881356, + "track" : "v4" + }, + { + "duration" : 8.2033898305084, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "54B76DE8-2057-470C-97CB-916B91B32B1C", + "kind" : "video", + "linkId" : "65CA1374-003F-413C-9F77-8A22B7EECDC3", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1854.9830508474583, + "start" : 568.3728813559322, + "track" : "v0" + }, + { + "duration" : 8.2033898305084, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "12851101-B365-4F9E-BFB3-FDEABAE1453A", + "kind" : "audio", + "linkId" : "65CA1374-003F-413C-9F77-8A22B7EECDC3", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1854.8991793061173, + "start" : 568.3728813559322, + "track" : "v1" + }, + { + "duration" : 8.2033898305084, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "38DCBA3E-C18E-447C-B319-9E3A3DE4DC21", + "kind" : "audio", + "linkId" : "65CA1374-003F-413C-9F77-8A22B7EECDC3", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1854.9458556093482, + "start" : 568.3728813559322, + "track" : "v2" + }, + { + "duration" : 8.2033898305084, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "FE05A76D-4FB5-43E6-9960-DE92DC23FD6C", + "kind" : "video", + "linkId" : "65CA1374-003F-413C-9F77-8A22B7EECDC3", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1854.80924847312, + "start" : 568.3728813559322, + "track" : "v3" + }, + { + "duration" : 8.2033898305084, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "35C17BC8-29A1-44B4-A655-A1AF25C6D713", + "kind" : "video", + "linkId" : "65CA1374-003F-413C-9F77-8A22B7EECDC3", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1854.8092438891213, + "start" : 568.3728813559322, + "track" : "v4" + }, + { + "duration" : 5.559322033898297, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "ED705251-681D-4EEE-81C8-D077FBB072B5", + "kind" : "video", + "linkId" : "FD6E0C12-08F2-474C-B889-10F178952804", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1865.525423728814, + "start" : 576.5762711864406, + "track" : "v0" + }, + { + "duration" : 5.559322033898297, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A57F8B52-605A-4BB2-8B24-0CBC8B78EBAB", + "kind" : "audio", + "linkId" : "FD6E0C12-08F2-474C-B889-10F178952804", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1865.441552187473, + "start" : 576.5762711864406, + "track" : "v1" + }, + { + "duration" : 5.559322033898297, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "93D09BC6-1947-40D5-82BA-E6E1035452E2", + "kind" : "audio", + "linkId" : "FD6E0C12-08F2-474C-B889-10F178952804", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1865.488228490704, + "start" : 576.5762711864406, + "track" : "v2" + }, + { + "duration" : 5.559322033898297, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "48D771B8-EC5B-45CD-842D-CFC4F85FC9D3", + "kind" : "video", + "linkId" : "FD6E0C12-08F2-474C-B889-10F178952804", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1865.3516213544758, + "start" : 576.5762711864406, + "track" : "v3" + }, + { + "duration" : 5.559322033898297, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "6F0B9EDA-F628-4403-9AC9-D23443721AA7", + "kind" : "video", + "linkId" : "FD6E0C12-08F2-474C-B889-10F178952804", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1865.351616770477, + "start" : 576.5762711864406, + "track" : "v4" + }, + { + "duration" : 18.881355932203405, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "B0DF95C7-AB53-4E4B-B365-DA47C88E233F", + "kind" : "video", + "linkId" : "17C6BBA2-9064-425D-8592-73511CF2CF98", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1938.101694915255, + "start" : 582.1355932203389, + "track" : "v0" + }, + { + "duration" : 18.881355932203405, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "10C2DDB7-13BF-4707-A836-146E1C1DF546", + "kind" : "audio", + "linkId" : "17C6BBA2-9064-425D-8592-73511CF2CF98", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1938.0178233739139, + "start" : 582.1355932203389, + "track" : "v1" + }, + { + "duration" : 18.881355932203405, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "D426D540-67E5-4B2C-8355-17C9D9356D6E", + "kind" : "audio", + "linkId" : "17C6BBA2-9064-425D-8592-73511CF2CF98", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1938.0644996771448, + "start" : 582.1355932203389, + "track" : "v2" + }, + { + "duration" : 18.881355932203405, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "4270D3EC-C6D9-44CD-BAEF-E087D96DEE47", + "kind" : "video", + "linkId" : "17C6BBA2-9064-425D-8592-73511CF2CF98", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1937.9278925409167, + "start" : 582.1355932203389, + "track" : "v3" + }, + { + "duration" : 18.881355932203405, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "4D883F8E-FE22-4FD7-80D8-05BB6DF23E69", + "kind" : "video", + "linkId" : "17C6BBA2-9064-425D-8592-73511CF2CF98", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1937.9278879569179, + "start" : 582.1355932203389, + "track" : "v4" + }, + { + "duration" : 6.237288135593303, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "73E5F742-AA2F-4AD8-89B1-D1CD80D854E7", + "kind" : "video", + "linkId" : "338C9A6C-870B-46F8-8240-2067335F8F8A", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1956.9830508474583, + "start" : 601.0169491525423, + "track" : "v0" + }, + { + "duration" : 6.237288135593303, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "01D1EA2C-B8BB-4B95-8C2F-716EE57867DE", + "kind" : "audio", + "linkId" : "338C9A6C-870B-46F8-8240-2067335F8F8A", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 1956.8991793061173, + "start" : 601.0169491525423, + "track" : "v1" + }, + { + "duration" : 6.237288135593303, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "588AAA62-D950-4167-88E1-3A7E9016735E", + "kind" : "audio", + "linkId" : "338C9A6C-870B-46F8-8240-2067335F8F8A", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1956.9458556093482, + "start" : 601.0169491525423, + "track" : "v2" + }, + { + "duration" : 6.237288135593303, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "5F41A84E-E3E3-417E-B7E8-82995513D4E2", + "kind" : "video", + "linkId" : "338C9A6C-870B-46F8-8240-2067335F8F8A", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1956.80924847312, + "start" : 601.0169491525423, + "track" : "v3" + }, + { + "duration" : 6.237288135593303, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "06DE79D5-6984-41FF-8120-821047F987C5", + "kind" : "video", + "linkId" : "338C9A6C-870B-46F8-8240-2067335F8F8A", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 1956.8092438891213, + "start" : 601.0169491525423, + "track" : "v4" + }, + { + "duration" : 10.677966101694892, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "F7574C8D-473A-44C7-BB33-CA9C31856531", + "kind" : "video", + "linkId" : "5715D6B2-69B7-4806-A021-82A001C82B8D", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2022.8474576271192, + "start" : 607.2542372881356, + "track" : "v0" + }, + { + "duration" : 10.677966101694892, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "6F7C3CE2-9238-415C-A314-90B677ECAE17", + "kind" : "audio", + "linkId" : "5715D6B2-69B7-4806-A021-82A001C82B8D", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2022.7635860857781, + "start" : 607.2542372881356, + "track" : "v1" + }, + { + "duration" : 10.677966101694892, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "BC1D7F8D-872D-4749-97D4-9CBF947EB008", + "kind" : "audio", + "linkId" : "5715D6B2-69B7-4806-A021-82A001C82B8D", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2022.810262389009, + "start" : 607.2542372881356, + "track" : "v2" + }, + { + "duration" : 10.677966101694892, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "5AC16FB7-ABB0-462A-926D-6657645660DB", + "kind" : "video", + "linkId" : "5715D6B2-69B7-4806-A021-82A001C82B8D", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2022.673655252781, + "start" : 607.2542372881356, + "track" : "v3" + }, + { + "duration" : 10.677966101694892, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "7EC1D808-B244-481D-AEED-29FBAD17A539", + "kind" : "video", + "linkId" : "5715D6B2-69B7-4806-A021-82A001C82B8D", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2022.673650668782, + "start" : 607.2542372881356, + "track" : "v4" + }, + { + "duration" : 3.627118644067764, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "60AAA140-4B79-4568-92FB-E8B2070677B4", + "kind" : "video", + "linkId" : "7A62ADBD-0427-472A-880B-89AAE3A2A8F4", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2045.2881355932209, + "start" : 617.9322033898305, + "track" : "v0" + }, + { + "duration" : 3.627118644067764, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "AA1ADCAE-DA36-4FF1-A7CC-6C3B75A693B7", + "kind" : "audio", + "linkId" : "7A62ADBD-0427-472A-880B-89AAE3A2A8F4", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2045.2042640518798, + "start" : 617.9322033898305, + "track" : "v1" + }, + { + "duration" : 3.627118644067764, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "C3588EA8-F756-402E-B6EC-A9C9772EB504", + "kind" : "audio", + "linkId" : "7A62ADBD-0427-472A-880B-89AAE3A2A8F4", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2045.2509403551107, + "start" : 617.9322033898305, + "track" : "v2" + }, + { + "duration" : 3.627118644067764, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "8A86F818-17D6-4DA6-806A-BD6E61EDD16A", + "kind" : "video", + "linkId" : "7A62ADBD-0427-472A-880B-89AAE3A2A8F4", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2045.1143332188826, + "start" : 617.9322033898305, + "track" : "v3" + }, + { + "duration" : 3.627118644067764, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "DF8175BF-3E2D-4B78-8761-2798CBEEB331", + "kind" : "video", + "linkId" : "7A62ADBD-0427-472A-880B-89AAE3A2A8F4", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2045.1143286348838, + "start" : 617.9322033898305, + "track" : "v4" + }, + { + "duration" : 2.4067796610169125, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "0079348D-917B-4B45-A779-BE7BDA967808", + "kind" : "video", + "linkId" : "B5A3F4FE-CCAA-45AE-A6FB-0579F3BF1536", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2050.542372881356, + "start" : 621.5593220338983, + "track" : "v0" + }, + { + "duration" : 2.4067796610169125, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "2D8FE96C-46AE-4C66-B4A5-30D8857C61FB", + "kind" : "audio", + "linkId" : "B5A3F4FE-CCAA-45AE-A6FB-0579F3BF1536", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2050.458501340015, + "start" : 621.5593220338983, + "track" : "v1" + }, + { + "duration" : 2.4067796610169125, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "B675F446-CEBF-4F4A-B344-F62184FADF3B", + "kind" : "audio", + "linkId" : "B5A3F4FE-CCAA-45AE-A6FB-0579F3BF1536", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2050.505177643246, + "start" : 621.5593220338983, + "track" : "v2" + }, + { + "duration" : 2.4067796610169125, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "C21A6286-77CE-4A32-B617-2710BCE8CBD9", + "kind" : "video", + "linkId" : "B5A3F4FE-CCAA-45AE-A6FB-0579F3BF1536", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2050.368570507018, + "start" : 621.5593220338983, + "track" : "v3" + }, + { + "duration" : 2.4067796610169125, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "64279978-B9D7-4E8D-AFED-D7913E1B9532", + "kind" : "video", + "linkId" : "B5A3F4FE-CCAA-45AE-A6FB-0579F3BF1536", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2050.368565923019, + "start" : 621.5593220338983, + "track" : "v4" + }, + { + "duration" : 3.4237288135593644, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A040FD6A-EC96-415F-8D28-7B4691F99BF3", + "kind" : "video", + "linkId" : "0F6F0554-6C53-4419-B9B3-D9C2EE7D2267", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2052.949152542373, + "start" : 623.9661016949152, + "track" : "v0" + }, + { + "duration" : 3.4237288135593644, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "6AC76567-F75D-4A33-B204-A10F431BBFDD", + "kind" : "audio", + "linkId" : "0F6F0554-6C53-4419-B9B3-D9C2EE7D2267", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2052.865281001032, + "start" : 623.9661016949152, + "track" : "v1" + }, + { + "duration" : 3.4237288135593644, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "FA9C2797-0EB0-4B75-A617-5D4CF590AC43", + "kind" : "audio", + "linkId" : "0F6F0554-6C53-4419-B9B3-D9C2EE7D2267", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2052.911957304263, + "start" : 623.9661016949152, + "track" : "v2" + }, + { + "duration" : 3.4237288135593644, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "429309C1-5820-4F55-97F5-8FBD04302BA5", + "kind" : "video", + "linkId" : "0F6F0554-6C53-4419-B9B3-D9C2EE7D2267", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2052.775350168035, + "start" : 623.9661016949152, + "track" : "v3" + }, + { + "duration" : 3.4237288135593644, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "89C2D014-50A7-43ED-AE56-0AA708FA28ED", + "kind" : "video", + "linkId" : "0F6F0554-6C53-4419-B9B3-D9C2EE7D2267", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2052.775345584036, + "start" : 623.9661016949152, + "track" : "v4" + }, + { + "duration" : 5.69491525423723, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "01E331DE-F3BA-42B2-B95C-4FA7802600C4", + "kind" : "video", + "linkId" : "681599CE-614B-4D54-9956-0A2F59A0C020", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2114.6779661016953, + "start" : 627.3898305084746, + "track" : "v0" + }, + { + "duration" : 5.69491525423723, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "602A3DDB-AB74-45B5-8FAE-A660E6CA2700", + "kind" : "audio", + "linkId" : "681599CE-614B-4D54-9956-0A2F59A0C020", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2114.5940945603543, + "start" : 627.3898305084746, + "track" : "v1" + }, + { + "duration" : 5.69491525423723, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "0BA636D9-34A5-47E7-9BC5-0BDD5579680E", + "kind" : "audio", + "linkId" : "681599CE-614B-4D54-9956-0A2F59A0C020", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2114.640770863585, + "start" : 627.3898305084746, + "track" : "v2" + }, + { + "duration" : 5.69491525423723, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "4E01905E-2230-4C63-9855-875F6C89C92B", + "kind" : "video", + "linkId" : "681599CE-614B-4D54-9956-0A2F59A0C020", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2114.504163727357, + "start" : 627.3898305084746, + "track" : "v3" + }, + { + "duration" : 5.69491525423723, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "78183D76-36AF-4F77-8481-6336BB1F1340", + "kind" : "video", + "linkId" : "681599CE-614B-4D54-9956-0A2F59A0C020", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2114.5041591433583, + "start" : 627.3898305084746, + "track" : "v4" + }, + { + "duration" : 15.76271186440681, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "581AB06A-CA87-43B3-9083-3BF4CA1B488F", + "kind" : "video", + "linkId" : "54C20EBF-C3C2-46DA-929B-9C51CBA0B7D6", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2230.1694915254243, + "start" : 633.0847457627118, + "track" : "v0" + }, + { + "duration" : 15.76271186440681, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "39BA14C0-0C38-4545-B0B0-C33EB72363EF", + "kind" : "audio", + "linkId" : "54C20EBF-C3C2-46DA-929B-9C51CBA0B7D6", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2230.085619984083, + "start" : 633.0847457627118, + "track" : "v1" + }, + { + "duration" : 15.76271186440681, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "2161011F-CC8E-4C61-8661-7A947C751069", + "kind" : "audio", + "linkId" : "54C20EBF-C3C2-46DA-929B-9C51CBA0B7D6", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2230.132296287314, + "start" : 633.0847457627118, + "track" : "v2" + }, + { + "duration" : 15.76271186440681, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "7265B315-57C1-47FB-A27C-3AB7B8CA1004", + "kind" : "video", + "linkId" : "54C20EBF-C3C2-46DA-929B-9C51CBA0B7D6", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2229.995689151086, + "start" : 633.0847457627118, + "track" : "v3" + }, + { + "duration" : 15.76271186440681, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "EFC80E51-0F05-4B16-8596-E78F73CB045F", + "kind" : "video", + "linkId" : "54C20EBF-C3C2-46DA-929B-9C51CBA0B7D6", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2229.995684567087, + "start" : 633.0847457627118, + "track" : "v4" + }, + { + "duration" : 3.3898305084745743, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "8BD87ADB-1AA9-4B14-9370-4DF20E448896", + "kind" : "video", + "linkId" : "C2740056-FAEB-4E91-9E00-112253797C46", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2256.372881355933, + "start" : 648.8474576271186, + "track" : "v0" + }, + { + "duration" : 3.3898305084745743, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "7A48AFF3-E08F-437C-AC57-92133246569E", + "kind" : "audio", + "linkId" : "C2740056-FAEB-4E91-9E00-112253797C46", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2256.2890098145917, + "start" : 648.8474576271186, + "track" : "v1" + }, + { + "duration" : 3.3898305084745743, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "E427E26F-1FDB-4742-A1E4-015E32255D38", + "kind" : "audio", + "linkId" : "C2740056-FAEB-4E91-9E00-112253797C46", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2256.3356861178227, + "start" : 648.8474576271186, + "track" : "v2" + }, + { + "duration" : 3.3898305084745743, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "107EE1C9-66CC-4E8E-9743-C6900E649621", + "kind" : "video", + "linkId" : "C2740056-FAEB-4E91-9E00-112253797C46", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2256.1990789815945, + "start" : 648.8474576271186, + "track" : "v3" + }, + { + "duration" : 3.3898305084745743, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "D7AAC444-EA58-4486-9341-92E3C325D17F", + "kind" : "video", + "linkId" : "C2740056-FAEB-4E91-9E00-112253797C46", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2256.1990743975957, + "start" : 648.8474576271186, + "track" : "v4" + }, + { + "duration" : 15.423728813559364, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "4754E275-63E9-4C43-8DBD-3771650BDEB8", + "kind" : "video", + "linkId" : "FF0D729E-3013-4F28-A488-DBD70296587F", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2280.9491525423737, + "start" : 652.2372881355932, + "track" : "v0" + }, + { + "duration" : 15.423728813559364, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A8BCA6E8-0804-4D39-8229-30DF2DFBF320", + "kind" : "audio", + "linkId" : "FF0D729E-3013-4F28-A488-DBD70296587F", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2280.8652810010326, + "start" : 652.2372881355932, + "track" : "v1" + }, + { + "duration" : 15.423728813559364, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "2A8D5833-B3BC-4A82-A7E7-6319DFF51DC3", + "kind" : "audio", + "linkId" : "FF0D729E-3013-4F28-A488-DBD70296587F", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2280.9119573042635, + "start" : 652.2372881355932, + "track" : "v2" + }, + { + "duration" : 15.423728813559364, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "B8963AE1-23D3-4C35-B241-00A5396F4DD7", + "kind" : "video", + "linkId" : "FF0D729E-3013-4F28-A488-DBD70296587F", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2280.7753501680354, + "start" : 652.2372881355932, + "track" : "v3" + }, + { + "duration" : 15.423728813559364, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "1FC80A57-7A45-4C7D-9200-0C1A48A3D6F5", + "kind" : "video", + "linkId" : "FF0D729E-3013-4F28-A488-DBD70296587F", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2280.7753455840366, + "start" : 652.2372881355932, + "track" : "v4" + }, + { + "duration" : 12.745762711864359, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "0CA818E8-62B3-474A-8050-49368421A90E", + "kind" : "video", + "linkId" : "C5B9230A-8789-4FD4-B107-6702F012D99A", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2296.372881355933, + "start" : 667.6610169491526, + "track" : "v0" + }, + { + "duration" : 12.745762711864359, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "EB3722EC-6C38-40B2-B519-694180267E3A", + "kind" : "audio", + "linkId" : "C5B9230A-8789-4FD4-B107-6702F012D99A", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2296.2890098145917, + "start" : 667.6610169491526, + "track" : "v1" + }, + { + "duration" : 12.745762711864359, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A797E488-873A-4FC3-816A-D61A73E2F1D9", + "kind" : "audio", + "linkId" : "C5B9230A-8789-4FD4-B107-6702F012D99A", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2296.3356861178227, + "start" : 667.6610169491526, + "track" : "v2" + }, + { + "duration" : 12.745762711864359, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "75FC92A1-B149-4AB0-A366-35F476711F59", + "kind" : "video", + "linkId" : "C5B9230A-8789-4FD4-B107-6702F012D99A", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2296.1990789815945, + "start" : 667.6610169491526, + "track" : "v3" + }, + { + "duration" : 12.745762711864359, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "5B3388A0-5AC5-481F-8DD8-BED12840C1D9", + "kind" : "video", + "linkId" : "C5B9230A-8789-4FD4-B107-6702F012D99A", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2296.1990743975957, + "start" : 667.6610169491526, + "track" : "v4" + }, + { + "duration" : 4.677966101695006, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "5A8649A2-00AB-447F-BC8C-3085E8695184", + "kind" : "video", + "linkId" : "2782DABC-F157-44FA-B15C-F2D70A28D22C", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2313.254237288136, + "start" : 680.4067796610169, + "track" : "v0" + }, + { + "duration" : 4.677966101695006, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "EAC07860-D644-40FF-9A4D-08BD56F332C4", + "kind" : "audio", + "linkId" : "2782DABC-F157-44FA-B15C-F2D70A28D22C", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2313.170365746795, + "start" : 680.4067796610169, + "track" : "v1" + }, + { + "duration" : 4.677966101695006, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "0950EA6E-C41F-453A-9C62-F24BC14CD76E", + "kind" : "audio", + "linkId" : "2782DABC-F157-44FA-B15C-F2D70A28D22C", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2313.217042050026, + "start" : 680.4067796610169, + "track" : "v2" + }, + { + "duration" : 4.677966101695006, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "C0EBCCE6-06A8-4958-8643-35B908EA7C98", + "kind" : "video", + "linkId" : "2782DABC-F157-44FA-B15C-F2D70A28D22C", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2313.080434913798, + "start" : 680.4067796610169, + "track" : "v3" + }, + { + "duration" : 4.677966101695006, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "7D753BA0-2851-4A2B-B1AB-52234E029F7C", + "kind" : "video", + "linkId" : "2782DABC-F157-44FA-B15C-F2D70A28D22C", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2313.080430329799, + "start" : 680.4067796610169, + "track" : "v4" + }, + { + "duration" : 19.186440677966175, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "B4AB14C4-4491-499A-8505-0934B993F07B", + "kind" : "video", + "linkId" : "028E7FFC-FA84-47CF-8683-266C5E78C890", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2414.6440677966107, + "start" : 685.0847457627119, + "track" : "v0" + }, + { + "duration" : 19.186440677966175, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "36653084-A594-47D9-82C7-05282A42CE6C", + "kind" : "audio", + "linkId" : "028E7FFC-FA84-47CF-8683-266C5E78C890", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2414.5601962552696, + "start" : 685.0847457627119, + "track" : "v1" + }, + { + "duration" : 19.186440677966175, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "5A23146F-8246-498B-AC51-C4FE4B6C4DDA", + "kind" : "audio", + "linkId" : "028E7FFC-FA84-47CF-8683-266C5E78C890", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2414.6068725585005, + "start" : 685.0847457627119, + "track" : "v2" + }, + { + "duration" : 19.186440677966175, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "C7D8CAF3-5789-4F76-924A-24654359FD7F", + "kind" : "video", + "linkId" : "028E7FFC-FA84-47CF-8683-266C5E78C890", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2414.4702654222724, + "start" : 685.0847457627119, + "track" : "v3" + }, + { + "duration" : 19.186440677966175, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "DFB2B3EE-B824-4672-A351-269C20BF2ADE", + "kind" : "video", + "linkId" : "028E7FFC-FA84-47CF-8683-266C5E78C890", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2414.4702608382736, + "start" : 685.0847457627119, + "track" : "v4" + }, + { + "duration" : 5.694915254237344, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "EB2F9D36-DD5F-468C-9DA8-90D56D42E0A9", + "kind" : "video", + "linkId" : "DDA38179-F497-4A55-8BF0-09672B42936C", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2446.1355932203396, + "start" : 704.2711864406781, + "track" : "v0" + }, + { + "duration" : 5.694915254237344, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "D07C45CE-44A0-4FEF-8F34-54E4FD3F7D39", + "kind" : "audio", + "linkId" : "DDA38179-F497-4A55-8BF0-09672B42936C", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2446.0517216789985, + "start" : 704.2711864406781, + "track" : "v1" + }, + { + "duration" : 5.694915254237344, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A22E3A44-8F76-4713-9D7F-7948A74D9CCC", + "kind" : "audio", + "linkId" : "DDA38179-F497-4A55-8BF0-09672B42936C", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2446.0983979822295, + "start" : 704.2711864406781, + "track" : "v2" + }, + { + "duration" : 5.694915254237344, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "15C53598-6F8F-4C89-B6EE-8BEAEA74F23A", + "kind" : "video", + "linkId" : "DDA38179-F497-4A55-8BF0-09672B42936C", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2445.9617908460013, + "start" : 704.2711864406781, + "track" : "v3" + }, + { + "duration" : 5.694915254237344, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "FB595553-A66D-4B22-8173-3AAE10CB58D0", + "kind" : "video", + "linkId" : "DDA38179-F497-4A55-8BF0-09672B42936C", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2445.9617862620025, + "start" : 704.2711864406781, + "track" : "v4" + }, + { + "duration" : 9.59322033898286, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "815EF8E2-F1E8-4B38-829B-D2C6971FDCD7", + "kind" : "video", + "linkId" : "1D15D7CC-5494-459C-BAF8-DD757B81547D", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2454.1355932203396, + "start" : 709.9661016949154, + "track" : "v0" + }, + { + "duration" : 9.59322033898286, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "6599B7E9-8BC7-4339-8544-580C7E40A6B3", + "kind" : "audio", + "linkId" : "1D15D7CC-5494-459C-BAF8-DD757B81547D", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2454.0517216789985, + "start" : 709.9661016949154, + "track" : "v1" + }, + { + "duration" : 9.59322033898286, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "913AD485-580A-4CF5-832E-3A866323A594", + "kind" : "audio", + "linkId" : "1D15D7CC-5494-459C-BAF8-DD757B81547D", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2454.0983979822295, + "start" : 709.9661016949154, + "track" : "v2" + }, + { + "duration" : 9.59322033898286, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "3F04DEF9-CD7C-486B-913A-989ECE77DE57", + "kind" : "video", + "linkId" : "1D15D7CC-5494-459C-BAF8-DD757B81547D", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2453.9617908460013, + "start" : 709.9661016949154, + "track" : "v3" + }, + { + "duration" : 9.59322033898286, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "715FA793-E1B3-4C26-B441-31D597B1938B", + "kind" : "video", + "linkId" : "1D15D7CC-5494-459C-BAF8-DD757B81547D", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2453.9617862620025, + "start" : 709.9661016949154, + "track" : "v4" + }, + { + "duration" : 14.474576271186379, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "40CCDD9D-5568-40CA-AEF5-90D94B8580BB", + "kind" : "video", + "linkId" : "F3271449-9FF2-4A35-8582-579E52CA2EFC", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2526.6779661016953, + "start" : 723.7627118644068, + "track" : "v0" + }, + { + "duration" : 14.474576271186379, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "C9DD81B8-F688-49A6-8638-2A626AF597C9", + "kind" : "audio", + "linkId" : "F3271449-9FF2-4A35-8582-579E52CA2EFC", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2526.5940945603543, + "start" : 723.7627118644068, + "track" : "v1" + }, + { + "duration" : 14.474576271186379, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "BC7A036D-1FA0-4738-A7F4-AD8EC3488B82", + "kind" : "audio", + "linkId" : "F3271449-9FF2-4A35-8582-579E52CA2EFC", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2526.640770863585, + "start" : 723.7627118644068, + "track" : "v2" + }, + { + "duration" : 14.474576271186379, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A34F945B-0445-4497-9DD0-1E68E72ADA27", + "kind" : "video", + "linkId" : "F3271449-9FF2-4A35-8582-579E52CA2EFC", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2526.504163727357, + "start" : 723.7627118644068, + "track" : "v3" + }, + { + "duration" : 14.474576271186379, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "E2ECA174-0D6E-4E40-961D-0804BCB7E988", + "kind" : "video", + "linkId" : "F3271449-9FF2-4A35-8582-579E52CA2EFC", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2526.5041591433583, + "start" : 723.7627118644068, + "track" : "v4" + }, + { + "duration" : 12.372881355932236, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "793A00B4-D559-495E-BF6E-23E5FF440C18", + "kind" : "video", + "linkId" : "57734964-46B6-4D2E-8D3E-63DAA6A4B487", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2542.203389830509, + "start" : 738.2372881355932, + "track" : "v0" + }, + { + "duration" : 12.372881355932236, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "C4AC4AF2-ACA7-4B5B-B85A-13CC8E338B0C", + "kind" : "audio", + "linkId" : "57734964-46B6-4D2E-8D3E-63DAA6A4B487", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2542.119518289168, + "start" : 738.2372881355932, + "track" : "v1" + }, + { + "duration" : 12.372881355932236, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "0A904774-EBBE-42E8-BC32-42DDB4E21185", + "kind" : "audio", + "linkId" : "57734964-46B6-4D2E-8D3E-63DAA6A4B487", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2542.166194592399, + "start" : 738.2372881355932, + "track" : "v2" + }, + { + "duration" : 12.372881355932236, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "8CA5857B-2D5B-4E8A-90EB-7BE589C6785D", + "kind" : "video", + "linkId" : "57734964-46B6-4D2E-8D3E-63DAA6A4B487", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2542.0295874561707, + "start" : 738.2372881355932, + "track" : "v3" + }, + { + "duration" : 12.372881355932236, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A1354766-A4E2-423C-A148-D457C645DEED", + "kind" : "video", + "linkId" : "57734964-46B6-4D2E-8D3E-63DAA6A4B487", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2542.029582872172, + "start" : 738.2372881355932, + "track" : "v4" + }, + { + "duration" : 15112.237288, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "1EDE863A-2897-4FFD-A49E-B943B438866F", + "kind" : "video", + "linkId" : "FD2B233D-ADAA-43D0-86FE-BD93A20C9129", + "mediaId" : "CC300C55-7090-4A6E-81FA-55CB6644FAC9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 0, + "start" : 4193.627118644067, + "track" : "v0" + }, + { + "duration" : 15112.106667, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A3D2A572-1789-4532-9D15-1312C8312A41", + "kind" : "audio", + "linkId" : "FD2B233D-ADAA-43D0-86FE-BD93A20C9129", + "mediaId" : "2613683E-12E6-402E-BF4D-6D9ACD7C1491", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 0, + "start" : 4193.710543352058, + "track" : "v1" + }, + { + "duration" : 15112.213333, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "387BD48F-5D42-4795-A2FE-DA7340E094B2", + "kind" : "audio", + "linkId" : "FD2B233D-ADAA-43D0-86FE-BD93A20C9129", + "mediaId" : "7889E9EC-F67A-491B-81C0-0CF8338965A3", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 0, + "start" : 4193.660488258577, + "track" : "v2" + }, + { + "duration" : 15112.066667, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "15742468-AF06-408A-B0E3-DE8D543186D0", + "kind" : "video", + "linkId" : "FD2B233D-ADAA-43D0-86FE-BD93A20C9129", + "mediaId" : "BC4E74C5-4C45-4633-B31A-3CAA58D4B2BF", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 0, + "start" : 4193.796015394061, + "track" : "v3" + }, + { + "duration" : 15111.366667, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "14D49BF0-68EB-4A4B-A627-9A55600AD1C2", + "kind" : "video", + "linkId" : "FD2B233D-ADAA-43D0-86FE-BD93A20C9129", + "mediaId" : "98882264-A2ED-477B-A7B8-B63E54EDEACE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 0, + "start" : 4193.796020644072, + "track" : "v4" + }, + { + "duration" : 10045.254237, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "82C83010-6BFE-4B26-81BC-CB291FAEB910", + "kind" : "video", + "linkId" : "F0D0664C-0131-446A-9354-CEB5E8E228DE", + "mediaId" : "2D5EED57-87EB-44B4-9623-2CF48314C5F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 0, + "start" : 19305.864406779656, + "track" : "v0" + }, + { + "duration" : 10045.162667, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "83C1AFB5-E771-4D3A-8092-30A98A34B026", + "kind" : "audio", + "linkId" : "F0D0664C-0131-446A-9354-CEB5E8E228DE", + "mediaId" : "0ECB1F4F-9065-432F-B0B1-7F47BD31FDCC", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 0, + "start" : 19305.9261039463, + "track" : "v1" + }, + { + "duration" : 10045.248, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "BD5B3686-815E-483F-8CDF-DC040625A81F", + "kind" : "audio", + "linkId" : "F0D0664C-0131-446A-9354-CEB5E8E228DE", + "mediaId" : "02A5DFB3-9348-4102-BD13-F1856B431A70", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 0, + "start" : 19305.87683716514, + "track" : "v2" + }, + { + "duration" : 10045.133333, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "7C227E93-B4B2-44BB-81C4-0621CFA85F4E", + "kind" : "video", + "linkId" : "F0D0664C-0131-446A-9354-CEB5E8E228DE", + "mediaId" : "9CA51332-5865-4C3D-9972-E781BDE75ECD", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 0, + "start" : 19306.0080157373, + "track" : "v3" + }, + { + "duration" : 10045.166667, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "472EB6D0-EF6A-469B-83F3-955C5C672361", + "kind" : "video", + "linkId" : "F0D0664C-0131-446A-9354-CEB5E8E228DE", + "mediaId" : "0DEB0D7E-0C1E-49DA-9911-7773FB2158DE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 0, + "start" : 19306.00801794631, + "track" : "v4" + }, + { + "duration" : 11597.966102, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "CE776B50-2A67-4285-9707-01DA14BBB04E", + "kind" : "video", + "linkId" : "F27C213D-566E-46A3-AF60-6D581EE67217", + "mediaId" : "F06DF483-F96F-4DD1-8602-53609FA888F1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 0, + "start" : 29351.18644067796, + "track" : "v0" + }, + { + "duration" : 11598.101333, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "7DB3CB28-8BB6-48ED-9B76-4FC6A5B2A106", + "kind" : "audio", + "linkId" : "F27C213D-566E-46A3-AF60-6D581EE67217", + "mediaId" : "59213540-870A-4795-BD44-B3AFBC9F14E3", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 0, + "start" : 29351.035369510933, + "track" : "v1" + }, + { + "duration" : 11598.464, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "7941E3BC-CC88-41DB-A7BB-7C7519B8B9D6", + "kind" : "audio", + "linkId" : "F27C213D-566E-46A3-AF60-6D581EE67217", + "mediaId" : "F4DB0AF3-2C74-4501-A58A-A519C046E3D6", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 0, + "start" : 29350.707797367297, + "track" : "v2" + }, + { + "duration" : 11598.033333, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "C6613E59-9E23-4934-B5DC-E224214F74D9", + "kind" : "video", + "linkId" : "F27C213D-566E-46A3-AF60-6D581EE67217", + "mediaId" : "9F95D76B-EAB2-49AA-897A-C3C9A265E0CC", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 0, + "start" : 29351.122484093936, + "track" : "v3" + }, + { + "duration" : 11598, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "628E46F4-79BD-44D7-A964-903FBD21DD0F", + "kind" : "video", + "linkId" : "F27C213D-566E-46A3-AF60-6D581EE67217", + "mediaId" : "CC497E03-E3E7-4283-A96C-F076D9F154A1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 0, + "start" : 29351.12248226092, + "track" : "v4" + }, + { + "duration" : 4.203389830508513, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "5D2DD96A-1D28-4583-A85D-DDD1286F3EC1", + "kind" : "video", + "linkId" : "B7F43758-3B67-4E4D-8D71-152570BCA4AF", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2491.0847457627124, + "start" : 719.5593220338983, + "track" : "v0" + }, + { + "duration" : 4.203389830508513, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "B7181073-3D61-47D2-A83E-A7C19C246D68", + "kind" : "audio", + "linkId" : "B7F43758-3B67-4E4D-8D71-152570BCA4AF", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2491.0008742213713, + "start" : 719.5593220338983, + "track" : "v1" + }, + { + "duration" : 4.203389830508513, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "DF6474FD-D698-4232-9E94-EBE39BBB8545", + "kind" : "audio", + "linkId" : "B7F43758-3B67-4E4D-8D71-152570BCA4AF", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2491.0475505246022, + "start" : 719.5593220338983, + "track" : "v2" + }, + { + "duration" : 4.203389830508513, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "D06A7AA2-0BC5-4031-9EDA-7A81673249DF", + "kind" : "video", + "linkId" : "B7F43758-3B67-4E4D-8D71-152570BCA4AF", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2490.910943388374, + "start" : 719.5593220338983, + "track" : "v3" + }, + { + "duration" : 4.203389830508513, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "39DCC5F4-B663-454C-BD55-6E675B931DBA", + "kind" : "video", + "linkId" : "B7F43758-3B67-4E4D-8D71-152570BCA4AF", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2490.9109388043753, + "start" : 719.5593220338983, + "track" : "v4" + }, + { + "duration" : 15.152542372881271, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "F4373D19-EA06-4C7F-A620-FC8FD1BD6AE3", + "kind" : "video", + "linkId" : "DF0D7986-17C5-4CB7-B683-DD878723E8C7", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2557.3898305084754, + "start" : 750.6101694915254, + "track" : "v0" + }, + { + "duration" : 15.152542372881271, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "84DE87BB-60F8-41DF-933A-3B41704FE3D2", + "kind" : "audio", + "linkId" : "DF0D7986-17C5-4CB7-B683-DD878723E8C7", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2557.3059589671343, + "start" : 750.6101694915254, + "track" : "v1" + }, + { + "duration" : 15.152542372881271, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "F6A29700-D4EE-4106-AA51-21C13AD34CA4", + "kind" : "audio", + "linkId" : "DF0D7986-17C5-4CB7-B683-DD878723E8C7", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2557.352635270365, + "start" : 750.6101694915254, + "track" : "v2" + }, + { + "duration" : 15.152542372881271, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "353D8752-627E-40D9-8D76-BFB4084F392D", + "kind" : "video", + "linkId" : "DF0D7986-17C5-4CB7-B683-DD878723E8C7", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2557.216028134137, + "start" : 750.6101694915254, + "track" : "v3" + }, + { + "duration" : 15.152542372881271, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "901CEC11-981C-4F2C-8857-98E171F95538", + "kind" : "video", + "linkId" : "DF0D7986-17C5-4CB7-B683-DD878723E8C7", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2557.2160235501383, + "start" : 750.6101694915254, + "track" : "v4" + }, + { + "duration" : 5.661016949152554, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "E259582D-FC1C-4FA5-BE66-998C83FEC210", + "kind" : "video", + "linkId" : "9A0BE697-0A09-4342-804A-A10695A5765B", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2575.42372881356, + "start" : 765.7627118644068, + "track" : "v0" + }, + { + "duration" : 5.661016949152554, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "FB4E9075-64CB-4C65-A7BE-659E4788FCF8", + "kind" : "audio", + "linkId" : "9A0BE697-0A09-4342-804A-A10695A5765B", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2575.339857272219, + "start" : 765.7627118644068, + "track" : "v1" + }, + { + "duration" : 5.661016949152554, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A6714A57-F046-4DE6-805C-A525B611FBD7", + "kind" : "audio", + "linkId" : "9A0BE697-0A09-4342-804A-A10695A5765B", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2575.38653357545, + "start" : 765.7627118644068, + "track" : "v2" + }, + { + "duration" : 5.661016949152554, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "DB4E1C97-4EDB-41E2-966E-057D14890226", + "kind" : "video", + "linkId" : "9A0BE697-0A09-4342-804A-A10695A5765B", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2575.249926439222, + "start" : 765.7627118644068, + "track" : "v3" + }, + { + "duration" : 5.661016949152554, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "E9D9C86D-9ED7-4309-8C45-79EE9034CFD1", + "kind" : "video", + "linkId" : "9A0BE697-0A09-4342-804A-A10695A5765B", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2575.249921855223, + "start" : 765.7627118644068, + "track" : "v4" + }, + { + "duration" : 65.15254237288138, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "864CC0F8-B363-4CE4-B255-61F2E32173FE", + "kind" : "video", + "linkId" : "FAD43732-5E8B-4F4A-AF1A-5F977F88D803", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2581.0847457627124, + "start" : 778.0677966101695, + "track" : "v0" + }, + { + "duration" : 65.15254237288138, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "F19656B8-AD96-45A9-AB45-41E84163B720", + "kind" : "audio", + "linkId" : "FAD43732-5E8B-4F4A-AF1A-5F977F88D803", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2581.0008742213713, + "start" : 778.0677966101695, + "track" : "v1" + }, + { + "duration" : 65.15254237288138, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "D40E7E5C-E58F-4D04-8A61-4C5A0AFE2C2C", + "kind" : "audio", + "linkId" : "FAD43732-5E8B-4F4A-AF1A-5F977F88D803", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2581.0475505246022, + "start" : 778.0677966101695, + "track" : "v2" + }, + { + "duration" : 65.15254237288138, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "0AEACF86-70AC-4999-8D26-F9BDE6003C4F", + "kind" : "video", + "linkId" : "FAD43732-5E8B-4F4A-AF1A-5F977F88D803", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2580.910943388374, + "start" : 778.0677966101695, + "track" : "v3" + }, + { + "duration" : 65.15254237288138, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "8566FA67-6A70-4CFF-9C03-5DED0AE5F620", + "kind" : "video", + "linkId" : "FAD43732-5E8B-4F4A-AF1A-5F977F88D803", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2580.9109388043753, + "start" : 778.0677966101695, + "track" : "v4" + }, + { + "duration" : 2.135593220338933, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "0FAA1CB7-A092-406F-B1FD-828EE4768B07", + "kind" : "video", + "linkId" : "FC57D67A-F7BF-448D-985C-05D71447DD0A", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2646.2372881355936, + "start" : 843.2203389830509, + "track" : "v0" + }, + { + "duration" : 2.135593220338933, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "AC5A9D19-E998-4CC0-B033-5C9AF84326C4", + "kind" : "audio", + "linkId" : "FC57D67A-F7BF-448D-985C-05D71447DD0A", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2646.1534165942526, + "start" : 843.2203389830509, + "track" : "v1" + }, + { + "duration" : 2.135593220338933, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "BF2AE534-1A06-4009-B825-8C1570D790C7", + "kind" : "audio", + "linkId" : "FC57D67A-F7BF-448D-985C-05D71447DD0A", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2646.2000928974835, + "start" : 843.2203389830509, + "track" : "v2" + }, + { + "duration" : 2.135593220338933, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "10E9AD27-80E1-4F3C-BD87-414A1B6617A8", + "kind" : "video", + "linkId" : "FC57D67A-F7BF-448D-985C-05D71447DD0A", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2646.0634857612554, + "start" : 843.2203389830509, + "track" : "v3" + }, + { + "duration" : 2.135593220338933, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "3EE49ACC-C52A-4ADF-86BE-884CE4259D4B", + "kind" : "video", + "linkId" : "FC57D67A-F7BF-448D-985C-05D71447DD0A", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2646.0634811772566, + "start" : 843.2203389830509, + "track" : "v4" + }, + { + "duration" : 2.1355932203390466, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "6F6DB3B3-42CE-4046-9988-087B5847CE7F", + "kind" : "video", + "linkId" : "28EA7312-79F0-4C9C-A37D-04E32716FA29", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2650.203389830509, + "start" : 845.3559322033898, + "track" : "v0" + }, + { + "duration" : 2.1355932203390466, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "96066F14-B10E-4826-890D-95FE249BB166", + "kind" : "audio", + "linkId" : "28EA7312-79F0-4C9C-A37D-04E32716FA29", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2650.119518289168, + "start" : 845.3559322033898, + "track" : "v1" + }, + { + "duration" : 2.1355932203390466, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "B07978FC-00CF-41C2-8657-665D128435D0", + "kind" : "audio", + "linkId" : "28EA7312-79F0-4C9C-A37D-04E32716FA29", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2650.166194592399, + "start" : 845.3559322033898, + "track" : "v2" + }, + { + "duration" : 2.1355932203390466, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "4FAD2B83-A8E8-4692-9360-C2F908C32F76", + "kind" : "video", + "linkId" : "28EA7312-79F0-4C9C-A37D-04E32716FA29", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2650.0295874561707, + "start" : 845.3559322033898, + "track" : "v3" + }, + { + "duration" : 2.1355932203390466, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "DF197166-8983-45B6-A285-54D45DECCFFB", + "kind" : "video", + "linkId" : "28EA7312-79F0-4C9C-A37D-04E32716FA29", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2650.029582872172, + "start" : 845.3559322033898, + "track" : "v4" + }, + { + "duration" : 0.7118644067796822, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A6D0B507-6A36-4A23-B415-3888A8D66CEE", + "kind" : "video", + "linkId" : "E3D0D877-F5B9-4B99-B94B-44E5E47BEAE8", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2653.118644067797, + "start" : 847.4915254237288, + "track" : "v0" + }, + { + "duration" : 0.7118644067796822, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "AEBE3D73-9EE9-42F3-80FF-AF4E272C5BF5", + "kind" : "audio", + "linkId" : "E3D0D877-F5B9-4B99-B94B-44E5E47BEAE8", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2653.034772526456, + "start" : 847.4915254237288, + "track" : "v1" + }, + { + "duration" : 0.7118644067796822, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A3B22B00-BA4B-4A40-91A3-F3E3C884C9BA", + "kind" : "audio", + "linkId" : "E3D0D877-F5B9-4B99-B94B-44E5E47BEAE8", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2653.081448829687, + "start" : 847.4915254237288, + "track" : "v2" + }, + { + "duration" : 0.7118644067796822, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "7B3ADFE8-7F47-4800-B8D6-77B5B07AFA99", + "kind" : "video", + "linkId" : "E3D0D877-F5B9-4B99-B94B-44E5E47BEAE8", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2652.944841693459, + "start" : 847.4915254237288, + "track" : "v3" + }, + { + "duration" : 0.7118644067796822, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "BC37902D-B6DE-4EE5-9996-467DEC167330", + "kind" : "video", + "linkId" : "E3D0D877-F5B9-4B99-B94B-44E5E47BEAE8", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2652.94483710946, + "start" : 847.4915254237288, + "track" : "v4" + }, + { + "duration" : 0.7796610169491487, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "8C61A3D8-55F3-4CCD-A02E-859B57EDA9CD", + "kind" : "video", + "linkId" : "86F71C9D-4CC8-49AE-85D6-08C4B076CE87", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2658.71186440678, + "start" : 848.2033898305085, + "track" : "v0" + }, + { + "duration" : 0.7796610169491487, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "25E99D83-FDE9-4E70-BBD3-A76D726F2D15", + "kind" : "audio", + "linkId" : "86F71C9D-4CC8-49AE-85D6-08C4B076CE87", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2658.627992865439, + "start" : 848.2033898305085, + "track" : "v1" + }, + { + "duration" : 0.7796610169491487, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "5FD3B500-E4B2-4AE8-B37D-DE251B465DBD", + "kind" : "audio", + "linkId" : "86F71C9D-4CC8-49AE-85D6-08C4B076CE87", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2658.67466916867, + "start" : 848.2033898305085, + "track" : "v2" + }, + { + "duration" : 0.7796610169491487, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "7BE9FE0B-5C6E-49DC-ACD3-613EE443EF5B", + "kind" : "video", + "linkId" : "86F71C9D-4CC8-49AE-85D6-08C4B076CE87", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2658.5380620324418, + "start" : 848.2033898305085, + "track" : "v3" + }, + { + "duration" : 0.7796610169491487, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "E51F2531-CEDB-4175-A047-516CD3142C93", + "kind" : "video", + "linkId" : "86F71C9D-4CC8-49AE-85D6-08C4B076CE87", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2658.538057448443, + "start" : 848.2033898305085, + "track" : "v4" + }, + { + "duration" : 4.881355932203405, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "352DB16B-39D1-475A-8C95-A0D712C61DA1", + "kind" : "video", + "linkId" : "3EABBA0E-4C24-4221-9E58-79D35BC9B08D", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2672.77966101695, + "start" : 848.9830508474577, + "track" : "v0" + }, + { + "duration" : 4.881355932203405, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "8904F908-4ED1-49D6-A064-B85CD9585F94", + "kind" : "audio", + "linkId" : "3EABBA0E-4C24-4221-9E58-79D35BC9B08D", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2672.6957894756088, + "start" : 848.9830508474577, + "track" : "v1" + }, + { + "duration" : 4.881355932203405, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "F88FC5BF-C07B-4659-96CD-F0C6423F09A3", + "kind" : "audio", + "linkId" : "3EABBA0E-4C24-4221-9E58-79D35BC9B08D", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2672.7424657788397, + "start" : 848.9830508474577, + "track" : "v2" + }, + { + "duration" : 4.881355932203405, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "319CEC14-6215-4445-8F0D-91C308A3420E", + "kind" : "video", + "linkId" : "3EABBA0E-4C24-4221-9E58-79D35BC9B08D", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2672.6058586426116, + "start" : 848.9830508474577, + "track" : "v3" + }, + { + "duration" : 4.881355932203405, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "EE17ADAE-984B-467F-8219-EC6C5F5D962B", + "kind" : "video", + "linkId" : "3EABBA0E-4C24-4221-9E58-79D35BC9B08D", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2672.6058540586127, + "start" : 848.9830508474577, + "track" : "v4" + }, + { + "duration" : 4.101694915254257, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "FCB1D834-DEAA-473C-A554-9F80416158C2", + "kind" : "video", + "linkId" : "3B4E4A04-CB5C-4738-B65E-F7076495C9D8", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2710.7118644067805, + "start" : 853.8644067796611, + "track" : "v0" + }, + { + "duration" : 4.101694915254257, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "881E7DB1-B037-40A9-9296-A99F279D7B54", + "kind" : "audio", + "linkId" : "3B4E4A04-CB5C-4738-B65E-F7076495C9D8", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2710.6279928654394, + "start" : 853.8644067796611, + "track" : "v1" + }, + { + "duration" : 4.101694915254257, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "5D38E6BE-385D-45A3-9AF3-30FF2BB3F39B", + "kind" : "audio", + "linkId" : "3B4E4A04-CB5C-4738-B65E-F7076495C9D8", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2710.6746691686703, + "start" : 853.8644067796611, + "track" : "v2" + }, + { + "duration" : 4.101694915254257, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "7B349858-7AE2-48A3-991E-DB25F74D2807", + "kind" : "video", + "linkId" : "3B4E4A04-CB5C-4738-B65E-F7076495C9D8", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2710.538062032442, + "start" : 853.8644067796611, + "track" : "v3" + }, + { + "duration" : 4.101694915254257, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "58E4F08F-1403-43B7-B93B-C6BFA5127F8D", + "kind" : "video", + "linkId" : "3B4E4A04-CB5C-4738-B65E-F7076495C9D8", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2710.5380574484434, + "start" : 853.8644067796611, + "track" : "v4" + }, + { + "duration" : 30.27118644067798, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "52F2190F-1C89-44EA-94D3-8A7085B8172A", + "kind" : "video", + "linkId" : "AE414DA9-138E-4B31-BCEA-EBD522E81175", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2721.322033898306, + "start" : 857.9661016949152, + "track" : "v0" + }, + { + "duration" : 30.27118644067798, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "369AF7CA-F05E-4BAF-B4DA-92398E680470", + "kind" : "audio", + "linkId" : "AE414DA9-138E-4B31-BCEA-EBD522E81175", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2721.238162356965, + "start" : 857.9661016949152, + "track" : "v1" + }, + { + "duration" : 30.27118644067798, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "E0C2832B-D290-4F69-B311-6CCB13D81611", + "kind" : "audio", + "linkId" : "AE414DA9-138E-4B31-BCEA-EBD522E81175", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2721.284838660196, + "start" : 857.9661016949152, + "track" : "v2" + }, + { + "duration" : 30.27118644067798, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "435A5598-D5FB-4880-AF72-ACF1883BA634", + "kind" : "video", + "linkId" : "AE414DA9-138E-4B31-BCEA-EBD522E81175", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2721.1482315239678, + "start" : 857.9661016949152, + "track" : "v3" + }, + { + "duration" : 30.27118644067798, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "E1A300BD-01C6-44F8-A372-7EDEAAA3407A", + "kind" : "video", + "linkId" : "AE414DA9-138E-4B31-BCEA-EBD522E81175", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2721.148226939969, + "start" : 857.9661016949152, + "track" : "v4" + }, + { + "duration" : 2.8135593220339388, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "F79BA8C9-1EEA-4EAD-9408-BEB36A06F6EC", + "kind" : "video", + "linkId" : "4045FA44-3B4D-4BFC-A67F-515E3C553BA0", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2760.915254237289, + "start" : 888.2372881355932, + "track" : "v0" + }, + { + "duration" : 2.8135593220339388, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "E4CC2092-0AFA-454F-A056-DC1D4B96EAE3", + "kind" : "audio", + "linkId" : "4045FA44-3B4D-4BFC-A67F-515E3C553BA0", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2760.831382695948, + "start" : 888.2372881355932, + "track" : "v1" + }, + { + "duration" : 2.8135593220339388, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "C6569D08-E232-40FD-AD5E-38A850503FDF", + "kind" : "audio", + "linkId" : "4045FA44-3B4D-4BFC-A67F-515E3C553BA0", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2760.878058999179, + "start" : 888.2372881355932, + "track" : "v2" + }, + { + "duration" : 2.8135593220339388, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "5D424C43-D60A-4A52-A33B-BBEB380053F2", + "kind" : "video", + "linkId" : "4045FA44-3B4D-4BFC-A67F-515E3C553BA0", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2760.7414518629507, + "start" : 888.2372881355932, + "track" : "v3" + }, + { + "duration" : 2.8135593220339388, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "C9ECC1B1-1D5A-4D84-9012-9864635A322A", + "kind" : "video", + "linkId" : "4045FA44-3B4D-4BFC-A67F-515E3C553BA0", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2760.741447278952, + "start" : 888.2372881355932, + "track" : "v4" + }, + { + "duration" : 5.288135593220318, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "1B56AEBA-0FE3-40D6-A485-407844047F55", + "kind" : "video", + "linkId" : "F572F9CE-FD52-495A-A477-9D6D62AC1086", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2783.186440677967, + "start" : 891.0508474576271, + "track" : "v0" + }, + { + "duration" : 5.288135593220318, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "47F3B364-BE6C-473E-85C4-AD4A9DADF041", + "kind" : "audio", + "linkId" : "F572F9CE-FD52-495A-A477-9D6D62AC1086", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2783.102569136626, + "start" : 891.0508474576271, + "track" : "v1" + }, + { + "duration" : 5.288135593220318, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "E99A647D-A1D7-4937-883D-517D2AB47C45", + "kind" : "audio", + "linkId" : "F572F9CE-FD52-495A-A477-9D6D62AC1086", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2783.1492454398567, + "start" : 891.0508474576271, + "track" : "v2" + }, + { + "duration" : 5.288135593220318, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "68CBC79C-1130-4411-9396-AF8D0501E229", + "kind" : "video", + "linkId" : "F572F9CE-FD52-495A-A477-9D6D62AC1086", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2783.0126383036286, + "start" : 891.0508474576271, + "track" : "v3" + }, + { + "duration" : 5.288135593220318, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "B4AEE7C6-2A5A-4B03-B760-5FB897266EB9", + "kind" : "video", + "linkId" : "F572F9CE-FD52-495A-A477-9D6D62AC1086", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2783.01263371963, + "start" : 891.0508474576271, + "track" : "v4" + }, + { + "duration" : 25.96610169491521, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "3A767D55-B04B-4029-9717-1C032BD7E834", + "kind" : "video", + "linkId" : "B52B0E53-2FA8-47CD-B126-B2D828808856", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2807.152542372882, + "start" : 896.3389830508474, + "track" : "v0" + }, + { + "duration" : 25.96610169491521, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "CF8D639C-6FA9-4562-BF86-A28192C1D6C3", + "kind" : "audio", + "linkId" : "B52B0E53-2FA8-47CD-B126-B2D828808856", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2807.068670831541, + "start" : 896.3389830508474, + "track" : "v1" + }, + { + "duration" : 25.96610169491521, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "304BEE54-6B93-44B2-BF5C-F5E0F8864DBB", + "kind" : "audio", + "linkId" : "B52B0E53-2FA8-47CD-B126-B2D828808856", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2807.115347134772, + "start" : 896.3389830508474, + "track" : "v2" + }, + { + "duration" : 25.96610169491521, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "7DAAE3B6-0D4A-4029-9891-8A2D9DD41EB6", + "kind" : "video", + "linkId" : "B52B0E53-2FA8-47CD-B126-B2D828808856", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2806.978739998544, + "start" : 896.3389830508474, + "track" : "v3" + }, + { + "duration" : 25.96610169491521, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A7EC127B-861B-436B-973A-566A7282AB56", + "kind" : "video", + "linkId" : "B52B0E53-2FA8-47CD-B126-B2D828808856", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2806.978735414545, + "start" : 896.3389830508474, + "track" : "v4" + }, + { + "duration" : 1.9322033898305335, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "B9DADEF6-8878-42FB-BD66-05228CB67D3F", + "kind" : "video", + "linkId" : "6C868D02-D8F5-470C-891B-B0D8A8F52B42", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2833.1186440677975, + "start" : 922.3050847457627, + "track" : "v0" + }, + { + "duration" : 1.9322033898305335, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "43CC1239-2AD4-4790-8627-80441483FA43", + "kind" : "audio", + "linkId" : "6C868D02-D8F5-470C-891B-B0D8A8F52B42", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2833.0347725264564, + "start" : 922.3050847457627, + "track" : "v1" + }, + { + "duration" : 1.9322033898305335, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "3E10D3AF-E56C-4B77-B15A-7A6A433E78B5", + "kind" : "audio", + "linkId" : "6C868D02-D8F5-470C-891B-B0D8A8F52B42", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2833.0814488296874, + "start" : 922.3050847457627, + "track" : "v2" + }, + { + "duration" : 1.9322033898305335, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "0AE9423C-B5CA-40D7-A25F-1D5950077D5C", + "kind" : "video", + "linkId" : "6C868D02-D8F5-470C-891B-B0D8A8F52B42", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2832.9448416934592, + "start" : 922.3050847457627, + "track" : "v3" + }, + { + "duration" : 1.9322033898305335, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "FA6C223A-7F5A-4150-A5F4-D2B4B445D9C0", + "kind" : "video", + "linkId" : "6C868D02-D8F5-470C-891B-B0D8A8F52B42", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2832.9448371094604, + "start" : 922.3050847457627, + "track" : "v4" + }, + { + "duration" : 7.186440677966175, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "934F79A8-575E-43F0-AD6C-F24F5199B7CB", + "kind" : "video", + "linkId" : "851CBD5D-70B1-429E-9236-7ECFEDAAA252", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2838.7118644067805, + "start" : 924.2372881355932, + "track" : "v0" + }, + { + "duration" : 7.186440677966175, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A6FAE2FB-6564-42B5-ACC5-56029B3331BE", + "kind" : "audio", + "linkId" : "851CBD5D-70B1-429E-9236-7ECFEDAAA252", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2838.6279928654394, + "start" : 924.2372881355932, + "track" : "v1" + }, + { + "duration" : 7.186440677966175, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "EE147F25-D8F4-43EB-B6A4-DE05CB21BB12", + "kind" : "audio", + "linkId" : "851CBD5D-70B1-429E-9236-7ECFEDAAA252", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2838.6746691686703, + "start" : 924.2372881355932, + "track" : "v2" + }, + { + "duration" : 7.186440677966175, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "4890D002-161D-4D3E-A662-D441F2232FFF", + "kind" : "video", + "linkId" : "851CBD5D-70B1-429E-9236-7ECFEDAAA252", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2838.538062032442, + "start" : 924.2372881355932, + "track" : "v3" + }, + { + "duration" : 7.186440677966175, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "9BAE233F-FFA4-4044-A029-3B4EC16018C3", + "kind" : "video", + "linkId" : "851CBD5D-70B1-429E-9236-7ECFEDAAA252", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2838.5380574484434, + "start" : 924.2372881355932, + "track" : "v4" + }, + { + "duration" : 3.830508474576277, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "FB84EAA1-5B89-4489-89B4-D080098A1CD8", + "kind" : "video", + "linkId" : "6206B630-2FC1-4084-9937-5E08F99F118D", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2890.5084745762715, + "start" : 931.4237288135594, + "track" : "v0" + }, + { + "duration" : 3.830508474576277, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "EE6692DD-2585-4607-A46A-C6A25FB86B72", + "kind" : "audio", + "linkId" : "6206B630-2FC1-4084-9937-5E08F99F118D", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2890.4246030349304, + "start" : 931.4237288135594, + "track" : "v1" + }, + { + "duration" : 3.830508474576277, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "78A13F6F-DCA5-491A-8B52-0FC2409760AB", + "kind" : "audio", + "linkId" : "6206B630-2FC1-4084-9937-5E08F99F118D", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2890.4712793381614, + "start" : 931.4237288135594, + "track" : "v2" + }, + { + "duration" : 3.830508474576277, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "629569A0-6C4A-466A-AFA1-918C22E2E018", + "kind" : "video", + "linkId" : "6206B630-2FC1-4084-9937-5E08F99F118D", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2890.3346722019332, + "start" : 931.4237288135594, + "track" : "v3" + }, + { + "duration" : 3.830508474576277, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "55E9F328-E350-4B59-ACEA-6C4EF5E5A345", + "kind" : "video", + "linkId" : "6206B630-2FC1-4084-9937-5E08F99F118D", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2890.3346676179344, + "start" : 931.4237288135594, + "track" : "v4" + }, + { + "duration" : 3.016949152542338, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "61D97AD3-FA77-4D5E-85F2-0D8E088424D8", + "kind" : "video", + "linkId" : "03409808-1CF1-4E22-8CFC-D7F337CA20C0", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2897.593220338983, + "start" : 935.2542372881356, + "track" : "v0" + }, + { + "duration" : 3.016949152542338, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A4B63EE7-142A-4568-B3A3-9BD1DFE06CE5", + "kind" : "audio", + "linkId" : "03409808-1CF1-4E22-8CFC-D7F337CA20C0", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2897.509348797642, + "start" : 935.2542372881356, + "track" : "v1" + }, + { + "duration" : 3.016949152542338, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "2195C3FF-C478-48A3-B480-A8D661ECF7EF", + "kind" : "audio", + "linkId" : "03409808-1CF1-4E22-8CFC-D7F337CA20C0", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2897.556025100873, + "start" : 935.2542372881356, + "track" : "v2" + }, + { + "duration" : 3.016949152542338, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "12215B20-BCE9-4ED2-BEC6-1EF6791F42B1", + "kind" : "video", + "linkId" : "03409808-1CF1-4E22-8CFC-D7F337CA20C0", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2897.4194179646447, + "start" : 935.2542372881356, + "track" : "v3" + }, + { + "duration" : 3.016949152542338, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "416FCED0-3BEE-4052-95C4-0D4395DF944A", + "kind" : "video", + "linkId" : "03409808-1CF1-4E22-8CFC-D7F337CA20C0", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2897.419413380646, + "start" : 935.2542372881356, + "track" : "v4" + }, + { + "duration" : 0.8135593220338251, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "3D695665-26AC-4ECE-B055-5ED89B2AEF2E", + "kind" : "video", + "linkId" : "D7000904-0663-4407-824B-32447EFF33F6", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2904.5423728813553, + "start" : 938.271186440678, + "track" : "v0" + }, + { + "duration" : 0.8135593220338251, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "1895810B-430E-4DE6-8E5B-653139F5FBEE", + "kind" : "audio", + "linkId" : "D7000904-0663-4407-824B-32447EFF33F6", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2904.458501340014, + "start" : 938.271186440678, + "track" : "v1" + }, + { + "duration" : 0.8135593220338251, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "0E102FE5-7926-4A40-9B94-CF405C37EB75", + "kind" : "audio", + "linkId" : "D7000904-0663-4407-824B-32447EFF33F6", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2904.505177643245, + "start" : 938.271186440678, + "track" : "v2" + }, + { + "duration" : 0.8135593220338251, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "222B3055-014A-4379-98CD-69EC43A35470", + "kind" : "video", + "linkId" : "D7000904-0663-4407-824B-32447EFF33F6", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2904.368570507017, + "start" : 938.271186440678, + "track" : "v3" + }, + { + "duration" : 0.8135593220338251, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "28CA102D-CDC8-46C5-988E-86F0EEF5EEDC", + "kind" : "video", + "linkId" : "D7000904-0663-4407-824B-32447EFF33F6", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2904.368565923018, + "start" : 938.271186440678, + "track" : "v4" + }, + { + "duration" : 16.169491525423723, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "1BBD2846-8898-43ED-B9EF-51ABB977D172", + "kind" : "video", + "linkId" : "441E27DB-C392-40BA-85B8-B3F421EF14E8", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2905.3559322033893, + "start" : 939.0847457627119, + "track" : "v0" + }, + { + "duration" : 16.169491525423723, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "0238A063-2A08-4FDB-920C-7372B455BCB8", + "kind" : "audio", + "linkId" : "441E27DB-C392-40BA-85B8-B3F421EF14E8", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2905.2720606620483, + "start" : 939.0847457627119, + "track" : "v1" + }, + { + "duration" : 16.169491525423723, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "CAF3113A-611A-4A6B-9A03-3539D6A0E4B1", + "kind" : "audio", + "linkId" : "441E27DB-C392-40BA-85B8-B3F421EF14E8", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2905.318736965279, + "start" : 939.0847457627119, + "track" : "v2" + }, + { + "duration" : 16.169491525423723, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "19424805-E973-46BC-BD0D-3547754230B4", + "kind" : "video", + "linkId" : "441E27DB-C392-40BA-85B8-B3F421EF14E8", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2905.182129829051, + "start" : 939.0847457627119, + "track" : "v3" + }, + { + "duration" : 16.169491525423723, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "D38B18BD-6C89-4507-A1EF-9B817B8E10CA", + "kind" : "video", + "linkId" : "441E27DB-C392-40BA-85B8-B3F421EF14E8", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2905.1821252450522, + "start" : 939.0847457627119, + "track" : "v4" + }, + { + "duration" : 32.4406779661017, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "92828BED-54D1-43DA-ADCC-A2784A7E60A8", + "kind" : "video", + "linkId" : "C90940D8-882F-4CBD-839A-3F097CE89ED2", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2950.3389830508468, + "start" : 955.2542372881356, + "track" : "v0" + }, + { + "duration" : 32.4406779661017, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "64CCF21E-AA71-4C5F-9CB3-EAE93F031C97", + "kind" : "audio", + "linkId" : "C90940D8-882F-4CBD-839A-3F097CE89ED2", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2950.2551115095057, + "start" : 955.2542372881356, + "track" : "v1" + }, + { + "duration" : 32.4406779661017, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "0EF2F1D8-B27D-425B-A77E-024D9E8ED834", + "kind" : "audio", + "linkId" : "C90940D8-882F-4CBD-839A-3F097CE89ED2", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2950.3017878127366, + "start" : 955.2542372881356, + "track" : "v2" + }, + { + "duration" : 32.4406779661017, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "7F966B3B-7499-46E3-A145-F4F6CB9899E5", + "kind" : "video", + "linkId" : "C90940D8-882F-4CBD-839A-3F097CE89ED2", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2950.1651806765085, + "start" : 955.2542372881356, + "track" : "v3" + }, + { + "duration" : 32.4406779661017, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "869C0AAC-694F-4A83-ACBD-BA02B2F1EBCA", + "kind" : "video", + "linkId" : "C90940D8-882F-4CBD-839A-3F097CE89ED2", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2950.1651760925097, + "start" : 955.2542372881356, + "track" : "v4" + }, + { + "duration" : 2.5762711864406356, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "25EDDE61-86BB-4F70-A496-23BF74AE9006", + "kind" : "video", + "linkId" : "9D7E5089-781D-46B7-83D2-8B95043855FA", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2983.661016949152, + "start" : 987.6949152542373, + "track" : "v0" + }, + { + "duration" : 2.5762711864406356, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "AAAAE9EC-5D0B-4491-B3AE-40D47947A105", + "kind" : "audio", + "linkId" : "9D7E5089-781D-46B7-83D2-8B95043855FA", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2983.577145407811, + "start" : 987.6949152542373, + "track" : "v1" + }, + { + "duration" : 2.5762711864406356, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A75BBCB8-738D-4750-B235-F5EC59113946", + "kind" : "audio", + "linkId" : "9D7E5089-781D-46B7-83D2-8B95043855FA", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2983.6238217110417, + "start" : 987.6949152542373, + "track" : "v2" + }, + { + "duration" : 2.5762711864406356, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "71F23B1C-6343-4637-9DFC-DF10EEE27AD4", + "kind" : "video", + "linkId" : "9D7E5089-781D-46B7-83D2-8B95043855FA", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2983.4872145748136, + "start" : 987.6949152542373, + "track" : "v3" + }, + { + "duration" : 2.5762711864406356, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "BFF6C236-F0FD-45E2-B714-265E9B8F2102", + "kind" : "video", + "linkId" : "9D7E5089-781D-46B7-83D2-8B95043855FA", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2983.487209990815, + "start" : 987.6949152542373, + "track" : "v4" + }, + { + "duration" : 14.101694915254257, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "2B6D6836-A007-4343-9775-70DD28CB6EB9", + "kind" : "video", + "linkId" : "EFD99B70-8810-42EC-8F2B-5AA76217327E", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2986.542372881355, + "start" : 990.271186440678, + "track" : "v0" + }, + { + "duration" : 14.101694915254257, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "7E48882C-AD53-4651-90D8-9CBDFEF95F0C", + "kind" : "audio", + "linkId" : "EFD99B70-8810-42EC-8F2B-5AA76217327E", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 2986.4585013400138, + "start" : 990.271186440678, + "track" : "v1" + }, + { + "duration" : 14.101694915254257, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "BA449FE2-AFB9-4E77-8799-8FE2429251A7", + "kind" : "audio", + "linkId" : "EFD99B70-8810-42EC-8F2B-5AA76217327E", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2986.5051776432447, + "start" : 990.271186440678, + "track" : "v2" + }, + { + "duration" : 14.101694915254257, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A3C307CE-4B58-4DB3-B763-3452763F1277", + "kind" : "video", + "linkId" : "EFD99B70-8810-42EC-8F2B-5AA76217327E", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2986.3685705070166, + "start" : 990.271186440678, + "track" : "v3" + }, + { + "duration" : 14.101694915254257, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "322BFB74-8CE6-4C2F-950C-898A113AB445", + "kind" : "video", + "linkId" : "EFD99B70-8810-42EC-8F2B-5AA76217327E", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 2986.3685659230177, + "start" : 990.271186440678, + "track" : "v4" + }, + { + "duration" : 41.18644067796606, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "1C0BB1B6-1862-4A8E-B78B-26DBECD3F37B", + "kind" : "video", + "linkId" : "9F7D047B-0DE6-4655-9D6E-5B8ADDD0267B", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 3016.4745762711855, + "start" : 1004.3728813559322, + "track" : "v0" + }, + { + "duration" : 41.18644067796606, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "3DF07444-8948-4073-A7B7-DCD022163D06", + "kind" : "audio", + "linkId" : "9F7D047B-0DE6-4655-9D6E-5B8ADDD0267B", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 3016.3907047298444, + "start" : 1004.3728813559322, + "track" : "v1" + }, + { + "duration" : 41.18644067796606, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "17518456-794B-46AE-8B57-11535384C6DD", + "kind" : "audio", + "linkId" : "9F7D047B-0DE6-4655-9D6E-5B8ADDD0267B", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 3016.4373810330753, + "start" : 1004.3728813559322, + "track" : "v2" + }, + { + "duration" : 41.18644067796606, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "D83C6190-0569-4756-B034-B56F5EA95C6A", + "kind" : "video", + "linkId" : "9F7D047B-0DE6-4655-9D6E-5B8ADDD0267B", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 3016.300773896847, + "start" : 1004.3728813559322, + "track" : "v3" + }, + { + "duration" : 41.18644067796606, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "04909166-A121-49EA-B441-2498FB853E8E", + "kind" : "video", + "linkId" : "9F7D047B-0DE6-4655-9D6E-5B8ADDD0267B", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 3016.3007693128484, + "start" : 1004.3728813559322, + "track" : "v4" + }, + { + "duration" : 1.661016949152554, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "AB7E6E67-21DC-473D-A4F5-32C751A46EE1", + "kind" : "video", + "linkId" : "0B407464-C16F-4EE0-8709-4530856B5481", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 3065.593220338982, + "start" : 1045.5593220338983, + "track" : "v0" + }, + { + "duration" : 1.661016949152554, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "3945B5C6-C770-47E5-BF52-BC27D9ABFAE0", + "kind" : "audio", + "linkId" : "0B407464-C16F-4EE0-8709-4530856B5481", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 3065.509348797641, + "start" : 1045.5593220338983, + "track" : "v1" + }, + { + "duration" : 1.661016949152554, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "D21DCFAE-885B-46AB-BBCD-46F5F68A4841", + "kind" : "audio", + "linkId" : "0B407464-C16F-4EE0-8709-4530856B5481", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 3065.556025100872, + "start" : 1045.5593220338983, + "track" : "v2" + }, + { + "duration" : 1.661016949152554, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "09CE071F-2BC1-44E9-80B4-A3B494754324", + "kind" : "video", + "linkId" : "0B407464-C16F-4EE0-8709-4530856B5481", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 3065.419417964644, + "start" : 1045.5593220338983, + "track" : "v3" + }, + { + "duration" : 1.661016949152554, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "E59CB212-BAFB-4792-9E87-27750E214AFF", + "kind" : "video", + "linkId" : "0B407464-C16F-4EE0-8709-4530856B5481", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 3065.419413380645, + "start" : 1045.5593220338983, + "track" : "v4" + }, + { + "duration" : 4.745762711864472, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "E92C9D2B-F806-42DF-BBBD-6444CED9CFA0", + "kind" : "video", + "linkId" : "BBA33081-9695-4391-B23B-D376880D264E", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 3070.203389830507, + "start" : 1047.2203389830509, + "track" : "v0" + }, + { + "duration" : 4.745762711864472, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "C13910BD-C1D5-42AA-B25A-F4AFA7E0807E", + "kind" : "audio", + "linkId" : "BBA33081-9695-4391-B23B-D376880D264E", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 3070.119518289166, + "start" : 1047.2203389830509, + "track" : "v1" + }, + { + "duration" : 4.745762711864472, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "6A6D3754-91FF-45E9-9A9C-EC342D95E136", + "kind" : "audio", + "linkId" : "BBA33081-9695-4391-B23B-D376880D264E", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 3070.166194592397, + "start" : 1047.2203389830509, + "track" : "v2" + }, + { + "duration" : 4.745762711864472, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "122D9228-98AA-4877-A0C4-2DFD8CAE845B", + "kind" : "video", + "linkId" : "BBA33081-9695-4391-B23B-D376880D264E", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 3070.029587456169, + "start" : 1047.2203389830509, + "track" : "v3" + }, + { + "duration" : 4.745762711864472, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "9124C8F4-A9B8-40C9-A87D-03794D9BFD5B", + "kind" : "video", + "linkId" : "BBA33081-9695-4391-B23B-D376880D264E", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 3070.02958287217, + "start" : 1047.2203389830509, + "track" : "v4" + }, + { + "duration" : 11.93220338983042, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "28D0F5F8-073A-4EB4-ABCD-C489AF0CA087", + "kind" : "video", + "linkId" : "318B4FD4-E1D7-41FD-B760-CA9E5DAB9B1F", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 3082.271186440677, + "start" : 1051.9661016949153, + "track" : "v0" + }, + { + "duration" : 11.93220338983042, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "2B967FFC-3967-43AC-B348-992E7603AE2C", + "kind" : "audio", + "linkId" : "318B4FD4-E1D7-41FD-B760-CA9E5DAB9B1F", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 3082.187314899336, + "start" : 1051.9661016949153, + "track" : "v1" + }, + { + "duration" : 11.93220338983042, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "5DCE6786-7E43-4D1A-9415-C2E364A3C1E5", + "kind" : "audio", + "linkId" : "318B4FD4-E1D7-41FD-B760-CA9E5DAB9B1F", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 3082.233991202567, + "start" : 1051.9661016949153, + "track" : "v2" + }, + { + "duration" : 11.93220338983042, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "CCB5A926-E4B6-4AA9-9EF3-2E8A78E7B2F2", + "kind" : "video", + "linkId" : "318B4FD4-E1D7-41FD-B760-CA9E5DAB9B1F", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 3082.0973840663387, + "start" : 1051.9661016949153, + "track" : "v3" + }, + { + "duration" : 11.93220338983042, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "296DECA8-17FA-4732-85F9-E7E62AB4390E", + "kind" : "video", + "linkId" : "318B4FD4-E1D7-41FD-B760-CA9E5DAB9B1F", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 3082.09737948234, + "start" : 1051.9661016949153, + "track" : "v4" + }, + { + "duration" : 2.7118644067795685, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "F118809D-1E6F-4E06-9DD8-59627D7FD31E", + "kind" : "video", + "linkId" : "D27F02ED-F905-4600-B733-AF4B73B5174F", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 3097.559322033897, + "start" : 1063.8983050847457, + "track" : "v0" + }, + { + "duration" : 2.7118644067795685, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "4A2040D0-20BE-429F-AD73-5B3ED24C0A6D", + "kind" : "audio", + "linkId" : "D27F02ED-F905-4600-B733-AF4B73B5174F", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 3097.475450492556, + "start" : 1063.8983050847457, + "track" : "v1" + }, + { + "duration" : 2.7118644067795685, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "3D418272-0D62-4126-A9C7-71E7D7FC255D", + "kind" : "audio", + "linkId" : "D27F02ED-F905-4600-B733-AF4B73B5174F", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 3097.522126795787, + "start" : 1063.8983050847457, + "track" : "v2" + }, + { + "duration" : 2.7118644067795685, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "B50F2156-B9AC-4F52-B362-40B0B0D732A4", + "kind" : "video", + "linkId" : "D27F02ED-F905-4600-B733-AF4B73B5174F", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 3097.3855196595587, + "start" : 1063.8983050847457, + "track" : "v3" + }, + { + "duration" : 2.7118644067795685, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "8C35ED3F-0857-4157-9DDF-8937A65375E5", + "kind" : "video", + "linkId" : "D27F02ED-F905-4600-B733-AF4B73B5174F", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 3097.38551507556, + "start" : 1063.8983050847457, + "track" : "v4" + }, + { + "duration" : 29.864406779661067, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "5F3F6F18-5791-47A8-BCA4-A9790558A314", + "kind" : "video", + "linkId" : "0F08CC53-E7F9-4A91-9D1E-F73D91D3ECB9", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 3101.3559322033884, + "start" : 1066.6101694915253, + "track" : "v0" + }, + { + "duration" : 29.864406779661067, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "CF1D8F7D-26D5-4CD2-8D99-2370B29915C0", + "kind" : "audio", + "linkId" : "0F08CC53-E7F9-4A91-9D1E-F73D91D3ECB9", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 3101.2720606620474, + "start" : 1066.6101694915253, + "track" : "v1" + }, + { + "duration" : 29.864406779661067, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A1160BCB-0740-4FC5-BEA2-A90D6030BFA6", + "kind" : "audio", + "linkId" : "0F08CC53-E7F9-4A91-9D1E-F73D91D3ECB9", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 3101.3187369652783, + "start" : 1066.6101694915253, + "track" : "v2" + }, + { + "duration" : 29.864406779661067, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "8E323D18-4C84-4AFA-B90D-264EE10DBF94", + "kind" : "video", + "linkId" : "0F08CC53-E7F9-4A91-9D1E-F73D91D3ECB9", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 3101.18212982905, + "start" : 1066.6101694915253, + "track" : "v3" + }, + { + "duration" : 29.864406779661067, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "A1E18A2B-C2ED-4F4F-B090-2F04AB1EAB86", + "kind" : "video", + "linkId" : "0F08CC53-E7F9-4A91-9D1E-F73D91D3ECB9", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 3101.1821252450513, + "start" : 1066.6101694915253, + "track" : "v4" + }, + { + "duration" : 3046.474576440677, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "77231674-DFD4-469D-8BD3-B0384766ED44", + "kind" : "video", + "linkId" : "06145E01-F314-4D25-9F5A-C1D23472B857", + "mediaId" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 3175.7288135593208, + "start" : 1096.4745762711864, + "track" : "v0" + }, + { + "duration" : 3046.477724982019, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "46D41482-2761-4F49-8714-E482340928D2", + "kind" : "audio", + "linkId" : "06145E01-F314-4D25-9F5A-C1D23472B857", + "mediaId" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "muted" : true, + "newShot" : false, + "speed" : 1, + "srcIn" : 3175.6449420179797, + "start" : 1096.4745762711864, + "track" : "v1" + }, + { + "duration" : 3046.516381678787, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "6655D05A-2F89-4E98-A2C0-475D1908D6DB", + "kind" : "audio", + "linkId" : "06145E01-F314-4D25-9F5A-C1D23472B857", + "mediaId" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 3175.6916183212106, + "start" : 1096.4745762711864, + "track" : "v2" + }, + { + "duration" : 3046.5116558150157, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "0BA9AB3D-B156-466B-A477-DD6CBCC6D5D0", + "kind" : "video", + "linkId" : "06145E01-F314-4D25-9F5A-C1D23472B857", + "mediaId" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 3175.5550111849825, + "start" : 1096.4745762711864, + "track" : "v3" + }, + { + "duration" : 3046.5116603990145, + "fadeIn" : 0, + "fadeOut" : 0, + "id" : "FA5C83A2-F1FC-4E94-B0A3-D12DF73B9D65", + "kind" : "video", + "linkId" : "06145E01-F314-4D25-9F5A-C1D23472B857", + "mediaId" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "muted" : false, + "newShot" : false, + "speed" : 1, + "srcIn" : 3175.5550066009837, + "start" : 1096.4745762711864, + "track" : "v4" + } + ], + "fps" : 29.5, + "markers" : [ + + ], + "media" : [ + { + "cacheKey" : "cb2b0cb1418eb04f", + "duration" : 812.745763, + "fps" : 29.5, + "hasAudio" : false, + "height" : 720, + "id" : "26CBEF77-6850-4D82-A5BD-A6A37587C040", + "isAudio" : false, + "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_13.49\/cam.mov", + "width" : 1280 + }, + { + "cacheKey" : "49108ecb3168df5a", + "duration" : 812.885333, + "fps" : 30, + "hasAudio" : true, + "height" : 0, + "id" : "F676BA7D-A0E0-4603-AE13-B853D2F9F2BB", + "isAudio" : true, + "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_13.49\/desktop.m4a", + "width" : 0 + }, + { + "cacheKey" : "9f6621781616504d", + "duration" : 813.269333, + "fps" : 30, + "hasAudio" : true, + "height" : 0, + "id" : "6FFA3786-8E51-4E69-A15D-D6A991C0CCAD", + "isAudio" : true, + "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_13.49\/mic.m4a", + "width" : 0 + }, + { + "cacheKey" : "fbe623fb3a0f34ba", + "duration" : 812.833333, + "fps" : 30, + "hasAudio" : false, + "height" : 2160, + "id" : "609E978E-5994-4757-A6C7-EAAE72818A49", + "isAudio" : false, + "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_13.49\/screen-1.mov", + "width" : 3840 + }, + { + "cacheKey" : "1be7aaff98d7b0ff", + "duration" : 812.833333, + "fps" : 30, + "hasAudio" : false, + "height" : 2160, + "id" : "C0E05C14-2D32-4A55-9041-7A752A97F6B1", + "isAudio" : false, + "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_13.49\/screen-2.mov", + "width" : 3840 + }, + { + "cacheKey" : "bc4651748a6b1673", + "duration" : 6222.20339, + "fps" : 29.5, + "hasAudio" : false, + "height" : 720, + "id" : "40BBB768-793D-44DA-BBC9-B22F6591159D", + "isAudio" : false, + "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_14.03\/cam.mov", + "width" : 1280 + }, + { + "cacheKey" : "27d4dedeccdacecc", + "duration" : 6222.122667, + "fps" : 30, + "hasAudio" : true, + "height" : 0, + "id" : "55C13A17-0423-4BC0-93A6-3FEFD02E7FC6", + "isAudio" : true, + "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_14.03\/desktop.m4a", + "width" : 0 + }, + { + "cacheKey" : "103551fc583e9882", + "duration" : 6222.208, + "fps" : 30, + "hasAudio" : true, + "height" : 0, + "id" : "501034F8-09AC-44B1-8826-FCE9B36C68F9", + "isAudio" : true, + "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_14.03\/mic.m4a", + "width" : 0 + }, + { + "cacheKey" : "5bfa7a15f159568d", + "duration" : 6222.066667, + "fps" : 30, + "hasAudio" : false, + "height" : 2160, + "id" : "D866E8BE-A5B1-4B51-B465-D3F753701CCE", + "isAudio" : false, + "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_14.03\/screen-1.mov", + "width" : 3840 + }, + { + "cacheKey" : "8cea14167c6e9778", + "duration" : 6222.066667, + "fps" : 30, + "hasAudio" : false, + "height" : 2160, + "id" : "92E85F7F-CA8B-473D-82F6-C7A7418875B1", + "isAudio" : false, + "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_14.03\/screen-2.mov", + "width" : 3840 + }, + { + "cacheKey" : "b966487289885ec1", + "duration" : 15112.237288, + "fps" : 29.5, + "hasAudio" : false, + "height" : 720, + "id" : "CC300C55-7090-4A6E-81FA-55CB6644FAC9", + "isAudio" : false, + "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_16.36\/cam.mov", + "width" : 1280 + }, + { + "cacheKey" : "9044d1d53bcf480f", + "duration" : 15112.106667, + "fps" : 30, + "hasAudio" : true, + "height" : 0, + "id" : "2613683E-12E6-402E-BF4D-6D9ACD7C1491", + "isAudio" : true, + "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_16.36\/desktop.m4a", + "width" : 0 + }, + { + "cacheKey" : "36fc42c715b64632", + "duration" : 15112.213333, + "fps" : 30, + "hasAudio" : true, + "height" : 0, + "id" : "7889E9EC-F67A-491B-81C0-0CF8338965A3", + "isAudio" : true, + "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_16.36\/mic.m4a", + "width" : 0 + }, + { + "cacheKey" : "0308132cb01a092a", + "duration" : 15112.066667, + "fps" : 30, + "hasAudio" : false, + "height" : 2160, + "id" : "BC4E74C5-4C45-4633-B31A-3CAA58D4B2BF", + "isAudio" : false, + "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_16.36\/screen-1.mov", + "width" : 3840 + }, + { + "cacheKey" : "270afa9f16a6fb41", + "duration" : 15111.366667, + "fps" : 30, + "hasAudio" : false, + "height" : 2160, + "id" : "98882264-A2ED-477B-A7B8-B63E54EDEACE", + "isAudio" : false, + "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_16.36\/screen-2.mov", + "width" : 3840 + }, + { + "cacheKey" : "02a6eb97d64d4630", + "duration" : 10045.254237, + "fps" : 29.5, + "hasAudio" : false, + "height" : 720, + "id" : "2D5EED57-87EB-44B4-9623-2CF48314C5F9", + "isAudio" : false, + "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_22.54\/cam.mov", + "width" : 1280 + }, + { + "cacheKey" : "cc655edd968d5060", + "duration" : 10045.162667, + "fps" : 30, + "hasAudio" : true, + "height" : 0, + "id" : "0ECB1F4F-9065-432F-B0B1-7F47BD31FDCC", + "isAudio" : true, + "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_22.54\/desktop.m4a", + "width" : 0 + }, + { + "cacheKey" : "4a0d44fc07d2db63", + "duration" : 10045.248, + "fps" : 30, + "hasAudio" : true, + "height" : 0, + "id" : "02A5DFB3-9348-4102-BD13-F1856B431A70", + "isAudio" : true, + "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_22.54\/mic.m4a", + "width" : 0 + }, + { + "cacheKey" : "edc26bd451155492", + "duration" : 10045.133333, + "fps" : 30, + "hasAudio" : false, + "height" : 2160, + "id" : "9CA51332-5865-4C3D-9972-E781BDE75ECD", + "isAudio" : false, + "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_22.54\/screen-1.mov", + "width" : 3840 + }, + { + "cacheKey" : "3c45ae09f47beeae", + "duration" : 10045.166667, + "fps" : 30, + "hasAudio" : false, + "height" : 2160, + "id" : "0DEB0D7E-0C1E-49DA-9911-7773FB2158DE", + "isAudio" : false, + "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-03_22.54\/screen-2.mov", + "width" : 3840 + }, + { + "cacheKey" : "81f385d21caafc19", + "duration" : 11597.966102, + "fps" : 29.5, + "hasAudio" : false, + "height" : 720, + "id" : "F06DF483-F96F-4DD1-8602-53609FA888F1", + "isAudio" : false, + "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-04_17.30\/cam.mov", + "width" : 1280 + }, + { + "cacheKey" : "88621a686d385fe8", + "duration" : 11598.101333, + "fps" : 30, + "hasAudio" : true, + "height" : 0, + "id" : "59213540-870A-4795-BD44-B3AFBC9F14E3", + "isAudio" : true, + "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-04_17.30\/desktop.m4a", + "width" : 0 + }, + { + "cacheKey" : "3ee60110dd18110c", + "duration" : 11598.464, + "fps" : 30, + "hasAudio" : true, + "height" : 0, + "id" : "F4DB0AF3-2C74-4501-A58A-A519C046E3D6", + "isAudio" : true, + "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-04_17.30\/mic.m4a", + "width" : 0 + }, + { + "cacheKey" : "290f82433dd61a4c", + "duration" : 11598.033333, + "fps" : 30, + "hasAudio" : false, + "height" : 2160, + "id" : "9F95D76B-EAB2-49AA-897A-C3C9A265E0CC", + "isAudio" : false, + "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-04_17.30\/screen-1.mov", + "width" : 3840 + }, + { + "cacheKey" : "12165002971af6ff", + "duration" : 11598, + "fps" : 30, + "hasAudio" : false, + "height" : 2160, + "id" : "CC497E03-E3E7-4283-A96C-F076D9F154A1", + "isAudio" : false, + "path" : "\/Volumes\/clover\/Archive\/2026\/Journal\/2026-07-04_17.30\/screen-2.mov", + "width" : 3840 + } + ], + "preferredTakes" : [ + + ], + "tracks" : [ + { + "hue" : 0 + }, + { + "hue" : 0.6180339887498949 + }, + { + "hue" : 0.2360679774997898 + }, + { + "hue" : 0.8541019662496847 + }, + { + "hue" : 0.4721359549995796 + } + ] + }, + "view" : { + "focusedTracks" : [ + + ], + "fusionFocus" : false, + "fusionHidden" : false, + "hiddenTracks" : [ + + ], + "laneScale" : 1.5562744140625, + "previewsOnLeft" : false, + "priorityPane" : "v4", + "showFilmstrips" : true, + "snapping" : true, + "trackHeights" : [ + { + "factor" : 0.99639892578125, + "track" : "v0" + }, + { + "factor" : 1, + "track" : "v4" + } + ] + } +} \ No newline at end of file diff --git a/sequencer/Sources/Sequencer/AppDelegate.swift b/sequencer/Sources/Sequencer/AppDelegate.swift index b14af0c5c7555facd548b951bfcafc122126d8e5..f938f54fc324eda0e216ebb48200924267f5100a 100644 --- a/sequencer/Sources/Sequencer/AppDelegate.swift +++ b/sequencer/Sources/Sequencer/AppDelegate.swift @@ -171,9 +171,11 @@ final class AppDelegate: NSObject, NSApplicationDelegate { clip.addItem(item("Link Clips", #selector(SequencerWindowController.linkClips), key: "g", mods: [])) clip.addItem(item("Unlink Clips", #selector(SequencerWindowController.unlinkClips), key: "g", mods: [.option])) clip.addItem(.separator()) - clip.addItem(item("Delete", #selector(SequencerWindowController.deleteSelected), key: "\u{8}", mods: [])) + // X deletes, ⇧X ripple-deletes; ⌫ / ⌥⌫ remain aliases (handled in + // TimelineView.keyDown, so they keep working without a menu equivalent). + clip.addItem(item("Delete", #selector(SequencerWindowController.deleteSelected), key: "x", mods: [])) clip.addItem(item("Ripple Delete", #selector(SequencerWindowController.rippleDeleteSelected), - key: "\u{8}", mods: [.option])) + key: "X", mods: [.shift])) clip.addItem(item("Close Gap at Playhead", #selector(SequencerWindowController.closeGapAtPlayhead))) clip.addItem(.separator()) clip.addItem(item("Ripple Trim Start to Playhead", #selector(SequencerWindowController.rippleTrimLeft), @@ -315,4 +317,11 @@ final class AppDelegate: NSObject, NSApplicationDelegate { ("59.94 fps", 60000.0 / 1001.0), ("60 fps", 60), ] + /// Normal-play speed presets for the transport's speed dropdown. These set + /// the forward speed Space plays at; J/K/L shuttle is independent. + static let playbackSpeeds: [(String, Double)] = [ + ("0.25×", 0.25), ("0.5×", 0.5), ("0.75×", 0.75), ("1×", 1), + ("1.25×", 1.25), ("1.5×", 1.5), ("2×", 2), ("4×", 4), + ] + } diff --git a/sequencer/Sources/Sequencer/ChunkedProxy.swift b/sequencer/Sources/Sequencer/ChunkedProxy.swift index 2391ee8ee273be57b502c3898fb7219fc7c7d9fd..a76d0afaf1c109fd1ecde975b4bafaf82e019138 100644 --- a/sequencer/Sources/Sequencer/ChunkedProxy.swift +++ b/sequencer/Sources/Sequencer/ChunkedProxy.swift @@ -16,20 +16,43 @@ final class ChunkManager { unowned var ctx: DocumentContext! static let chunkSeconds: Double = 30 - /// Adaptive proxy quality. Proxies are encoded at the highest quality the - /// machine can still produce FASTER than real time, so playback never - /// outruns the render queue. Each step trades resolution (and, lower down, - /// frame rate) for encode speed. Level 0 is the original full quality. - struct Quality { let maxWidth: Int; let fpsDivisor: Int } + /// Adaptive proxy quality *ladder*, expressed as a fraction of a build + /// target width rather than an absolute size. Level 0 is the target itself; + /// lower levels trade resolution (and, further down, frame rate) for encode + /// speed so realtime playback keeps up even when the target is large. The + /// target width itself comes from the preview size (`previewTargetWidth`) — + /// a big preview asks for sharper proxies, a small one isn't over-rendered. + struct Quality { let widthFraction: Double; let fpsDivisor: Int } static let qualities: [Quality] = [ - Quality(maxWidth: 960, fpsDivisor: 1), // full — matches the old fixed proxy - Quality(maxWidth: 640, fpsDivisor: 1), // reduced - Quality(maxWidth: 480, fpsDivisor: 2), // low - Quality(maxWidth: 320, fpsDivisor: 2), // minimum + Quality(widthFraction: 1.0, fpsDivisor: 1), // full target + Quality(widthFraction: 0.66, fpsDivisor: 1), // reduced + Quality(widthFraction: 0.5, fpsDivisor: 2), // low + Quality(widthFraction: 0.33, fpsDivisor: 2), // minimum ] + /// Largest on-screen preview width in device pixels, reported by the viewer + /// (`setPreviewTargetWidth`). Background optimisation targets this so the + /// proxy is as sharp as the preview it's displayed in. Defaults to the old + /// fixed 960 until the viewer measures itself. + private(set) var previewTargetWidth = 960 + + /// The width a fresh proxy for this media should reach — the preview target, + /// never upscaled past the source. + private func targetWidth(for media: MediaItem) -> Int { + let native = media.width > 0 ? media.width : previewTargetWidth + return min(native, previewTargetWidth) + } + + /// Effective encode width at `level` for this media (even, ffmpeg-friendly). + private func buildWidth(level: Int, media: MediaItem) -> Int { + let q = Self.qualities[min(max(0, level), Self.qualities.count - 1)] + let w = Int((Double(targetWidth(for: media)) * q.widthFraction).rounded()) + return max(160, w - (w % 2)) + } + private struct MediaState { - var built: Set = [] + var built: [Int: Int] = [:] // chunk index → effective width on disk + var attempted: [Int: Int] = [:] // chunk index → width of the last attempt var inFlight: Set = [] var failed: Set = [] var urgent: [Int] = [] @@ -67,11 +90,34 @@ final class ChunkManager { /// Playback started: while paused, resume building the chunks it needs. func playbackDidStart() { pump() } + /// The viewer reports its largest preview cell's width in device pixels so + /// optimisation can target a proxy that's actually sharp at that size. + /// Quantised to a ladder so layout jitter of a few pixels doesn't churn the + /// target; growing it opens fresh upgrade work. + func setPreviewTargetWidth(_ pixels: Int) { + let steps = [640, 960, 1280, 1600, 1920, 2560, 3200, 3840] + let q = steps.first { $0 >= pixels } ?? steps.last! + guard q != previewTargetWidth else { return } + let grew = q > previewTargetWidth + previewTargetWidth = q + if grew { pump() } // below-target chunks are now upgrade candidates + } + + /// Serialises the tiny per-media width manifests (index → built width) so + /// upgrades survive relaunch and a larger preview knows what to re-render. + private let manifestQueue = DispatchQueue(label: "sequencer.chunk.manifest") + init() { NotificationCenter.default.addObserver( forName: .projectChanged, object: nil, queue: .main) { [weak self] _ in guard let self else { return } self.ensure(for: self.ctx.store.project) + self.updateDemand(force: true) + } + // Hiding/focusing a track changes what to optimize first. + NotificationCenter.default.addObserver( + forName: .viewOptionsChanged, object: nil, queue: .main) { [weak self] _ in + self?.updateDemand(force: true) } } @@ -89,6 +135,33 @@ final class ChunkManager { private func chunkURL(key: String, index: Int) -> URL { chunksDir(key).appendingPathComponent(String(format: "c%06d.mov", index)) } + private func manifestURL(_ key: String) -> URL { + chunksDir(key).appendingPathComponent("widths.json") + } + + /// Legacy width assumed for a chunk on disk with no manifest entry — the + /// old fixed proxy size. Correct enough that a normal-sized preview won't + /// pointlessly re-render old caches, while a bigger one still upgrades them. + private static let legacyWidth = 960 + + private func loadWidths(_ key: String) -> [Int: Int] { + guard let data = try? Data(contentsOf: manifestURL(key)), + let obj = try? JSONSerialization.jsonObject(with: data) as? [String: Int] + else { return [:] } + return Dictionary(uniqueKeysWithValues: obj.compactMap { k, v in + Int(k).map { ($0, v) } + }) + } + private func persistWidths(key: String) { + let widths = states[key]?.built ?? [:] + let url = manifestURL(key) + manifestQueue.async { + let obj = Dictionary(uniqueKeysWithValues: widths.map { (String($0.key), $0.value) }) + if let data = try? JSONSerialization.data(withJSONObject: obj) { + try? data.write(to: url) + } + } + } static func chunkIndex(forSource t: Double) -> Int { max(0, Int(t / chunkSeconds)) } static func chunkCount(duration: Double) -> Int { max(1, Int(ceil(duration / chunkSeconds))) @@ -99,10 +172,13 @@ final class ChunkManager { var s = states[media.cacheKey] ?? MediaState() if !s.scanned { s.scanned = true + let widths = loadWidths(media.cacheKey) if let names = try? FileManager.default .contentsOfDirectory(atPath: chunksDir(media.cacheKey).path) { for n in names where n.hasPrefix("c") && n.hasSuffix(".mov") { - if let i = Int(n.dropFirst().dropLast(4)) { s.built.insert(i) } + if let i = Int(n.dropFirst().dropLast(4)) { + s.built[i] = widths[i] ?? Self.legacyWidth + } } } states[media.cacheKey] = s @@ -124,7 +200,7 @@ final class ChunkManager { let n = Self.chunkCount(duration: media.duration) let i = min(n - 1, Self.chunkIndex(forSource: sourceTime)) let wanted = [i, i + 1].filter { - $0 < n && !s.built.contains($0) && !s.inFlight.contains($0) && !s.failed.contains($0) + $0 < n && s.built[$0] == nil && !s.inFlight.contains($0) && !s.failed.contains($0) } guard s.urgent != wanted else { return } s.urgent = wanted @@ -151,13 +227,98 @@ final class ChunkManager { pump() } + // MARK: - Prefetch demand (what to optimize first) + + private struct DemandKey: Hashable { let key: String; let index: Int } + /// Chunks to build first, best-first. Recomputed from the playhead, playback + /// direction, and visibility — supersedes the crude current+next `urgent`. + private var demand: [DemandKey] = [] + /// The subset close enough ahead that playback will hit it imminently — these + /// build at the adaptive realtime quality so they land in time; everything + /// else builds at the full preview-quality target. + private var demandImminent: Set = [] + private var lastDemandPlayhead = -1e9 + private var lastDemandSign = 0.0 + + /// How far ahead of the playhead (in the playback direction) to prefetch, and + /// how far behind to keep. Ahead is generous so a run of playback never + /// out-paces the encoder; behind is small (for a quick reverse / re-view). + private static let prefetchAhead = 120.0 + private static let prefetchBehind = 20.0 + /// Uncovered chunks within this many seconds ahead are "imminent". + private static let imminentAhead = 45.0 + + /// Recompute the build order — the heart of "optimize the right thing first." + /// For every video clip near the playhead we score the proxy chunks its + /// source range needs and sort them: coverage before sharpening, visible + /// (and focused) tracks before hidden, and nearer the playhead in the + /// playback direction before farther. Chunks outside the window fall through + /// to the whole-project background queue (`ensure`). Cheap; safe to call as + /// the playhead moves (self-throttled). + func updateDemand(force: Bool = false) { + guard ctx != nil else { return } + let ph = ctx.playback.playhead + let sign = ctx.playback.rate < 0 ? -1.0 : 1.0 + guard force || abs(ph - lastDemandPlayhead) > 1.5 || sign != lastDemandSign else { return } + lastDemandPlayhead = ph + lastDemandSign = sign + + let project = ctx.store.project + let dir = sign + let anyFocused = !ctx.session.focusedTracks.isEmpty + + struct Cand { let key: DemandKey; let score: Double; let imminent: Bool } + var cands: [Cand] = [] + for clip in project.clips where clip.kind == .video { + guard let media = project.media(clip.mediaId), media.duration > 0, + !media.isAudio, !hasFullProxy(media) else { continue } + let visible = !ctx.session.hiddenTracks.contains(clip.track) + let focused = ctx.session.focusedTracks.contains(clip.track) + let lo = ph - (dir > 0 ? Self.prefetchBehind : Self.prefetchAhead) + let hi = ph + (dir > 0 ? Self.prefetchAhead : Self.prefetchBehind) + let a = max(clip.start, lo), b = min(clip.end, hi) + guard b > a else { continue } + let n = Self.chunkCount(duration: media.duration) + let s = state(for: media) + let target = targetWidth(for: media) + let srcA = clip.srcIn + (a - clip.start) * clip.speed + let srcB = clip.srcIn + (b - clip.start) * clip.speed + let ci = min(n - 1, Self.chunkIndex(forSource: min(srcA, srcB))) + let cj = min(n - 1, Self.chunkIndex(forSource: max(srcA, srcB) - 1e-6)) + for idx in ci...max(ci, cj) { + if (s.built[idx] ?? 0) >= target { continue } // already good enough + let covered = s.built[idx] != nil + // Timeline moment this chunk's content plays inside this clip. + let tl = clip.start + + (Double(idx) * Self.chunkSeconds - clip.srcIn) / max(1e-4, clip.speed) + let signed = (min(max(tl, a), b) - ph) * dir // >0 = ahead + var score = signed >= 0 ? signed : -signed * 4 // behind costs 4× + if covered { score += 10_000 } // coverage beats sharpening + if !visible { score += 100_000 } // hidden tracks last + else if anyFocused && !focused { score += 1_000 } // the enlarged pane first + let imminent = visible && !covered && signed >= 0 && signed < Self.imminentAhead + cands.append(Cand(key: DemandKey(key: media.cacheKey, index: idx), + score: score, imminent: imminent)) + } + } + cands.sort { $0.score < $1.score } + demand.removeAll(keepingCapacity: true) + demandImminent.removeAll(keepingCapacity: true) + var seen = Set() + for c in cands where seen.insert(c.key).inserted { + demand.append(c.key) + if c.imminent { demandImminent.insert(c.key) } + } + pump() + } + // MARK: - Status queries func isCovered(media: MediaItem, sourceTime: Double) -> Bool { if media.isAudio { return true } // audio plays the original directly if hasFullProxy(media) { return true } let s = state(for: media) - return s.built.contains(Self.chunkIndex(forSource: sourceTime)) + return s.built[Self.chunkIndex(forSource: sourceTime)] != nil } /// Last known answer; unknown kicks the async composition build (which @@ -170,38 +331,79 @@ final class ChunkManager { } /// (building now, waiting in queue) across all media — for the status bar. + /// A chunk counts as queued while it's either missing OR still below the + /// preview-quality target (i.e. an upgrade is pending). func queueSummary() -> (building: Int, queued: Int) { var building = 0, queued = 0 - for s in states.values { + for (key, s) in states { building += s.inFlight.count - let pending = Set(s.urgent + s.background) - .subtracting(s.built).subtracting(s.inFlight).subtracting(s.failed) - queued += pending.count + let target = mediaByKey[key].map { targetWidth(for: $0) } ?? previewTargetWidth + for i in Set(s.urgent + s.background) + where !s.inFlight.contains(i) && !s.failed.contains(i) { + if (s.built[i] ?? 0) < target { queued += 1 } + } } return (building, queued) } - /// The proxy-backed chunk set right now (players record this at item-swap - /// time to judge whether a later swap upgrades anything). - func builtChunks(media: MediaItem) -> Set { + /// Per-chunk proxy width right now (players record this at item-swap time + /// to judge whether a later swap upgrades the frame under the playhead). + func builtWidths(media: MediaItem) -> [Int: Int] { state(for: media).built } func builtChunkURL(media: MediaItem, index: Int) -> URL? { - state(for: media).built.contains(index) + state(for: media).built[index] != nil ? chunkURL(key: media.cacheKey, index: index) : nil } // MARK: - Build queue - private func nextJob() -> (MediaItem, Int)? { - for pass in 0..<2 { - for (key, s) in states { - guard let media = mediaByKey[key] else { continue } - let list = pass == 0 ? s.urgent : s.background - for i in list where !s.built.contains(i) && !s.inFlight.contains(i) - && !s.failed.contains(i) { - return (media, i) + /// Next chunk to build, in priority order: + /// 0. urgent — coverage the playhead needs NOW, at any quality; + /// 1. missing — background chunks not yet built at all (coverage first); + /// 2. upgrade — background chunks built below the preview-quality target. + /// Coverage always beats sharpening, so playback never stalls waiting on a + /// quality upgrade of a frame that's already visible. + private func nextJob() -> (media: MediaItem, index: Int, urgent: Bool)? { + // 1. Prefetch demand — already ordered best-first (visible/focused, near, + // coverage before sharpening). Coverage rides the adaptive realtime + // quality when imminent; an upgrade goes for the full target. + for dk in demand { + guard let media = mediaByKey[dk.key] else { continue } + let s = states[dk.key] ?? state(for: media) + guard !s.inFlight.contains(dk.index), !s.failed.contains(dk.index) else { continue } + let target = targetWidth(for: media) + if let have = s.built[dk.index] { + if have < target, (s.attempted[dk.index] ?? 0) < target { + return (media, dk.index, false) // upgrade → target + } + } else { + return (media, dk.index, demandImminent.contains(dk)) // coverage + } + } + // 2. Legacy urgent (headless `want`) then the whole-project background + // fill for chunks off-screen of the prefetch window. + for (key, s) in states { + guard let media = mediaByKey[key] else { continue } + for i in s.urgent where s.built[i] == nil + && !s.inFlight.contains(i) && !s.failed.contains(i) { + return (media, i, true) + } + } + for (key, s) in states { + guard let media = mediaByKey[key] else { continue } + for i in s.background where s.built[i] == nil + && !s.inFlight.contains(i) && !s.failed.contains(i) { + return (media, i, false) + } + } + for (key, s) in states { + guard let media = mediaByKey[key] else { continue } + let target = targetWidth(for: media) + for i in s.background where !s.inFlight.contains(i) { + if let have = s.built[i], have < target, (s.attempted[i] ?? 0) < target { + return (media, i, false) } } } @@ -212,26 +414,45 @@ final class ChunkManager { // Paused stops idle background fill, but playback still optimizes the // chunks it's about to need. while (!isPaused || ctx.playback.isPlaying), - activeBuilds < maxBuilds, let (media, index) = nextJob() { + activeBuilds < maxBuilds, let job = nextJob() { + // During playback keep one slot free for urgent coverage so a slow + // background quality-upgrade can't stall the frames being played. + if !job.urgent, ctx.playback.isPlaying, activeBuilds >= maxBuilds - 1 { break } + let (media, index, urgent) = job + // Urgent builds ride the adaptive realtime level; background builds + // go for the full preview-quality target. + let level = urgent ? (states[media.cacheKey]?.qualityIndex ?? 0) : 0 + let width = buildWidth(level: level, media: media) + let fpsDiv = Self.qualities[min(max(0, level), Self.qualities.count - 1)].fpsDivisor + let fps = max(1, Int((media.fps / Double(fpsDiv)).rounded())) states[media.cacheKey]?.inFlight.insert(index) - let level = states[media.cacheKey]?.qualityIndex ?? 0 + states[media.cacheKey]?.attempted[index] = width activeBuilds += 1 DispatchQueue.global(qos: .userInitiated).async { [self] in - let r = buildChunk(media: media, index: index, level: level) + let r = buildChunk(media: media, index: index, width: width, fps: fps) DispatchQueue.main.async { self.activeBuilds -= 1 var s = self.states[media.cacheKey] ?? MediaState() s.inFlight.remove(index) if r.ok { - s.built.insert(index) + s.built[index] = width + s.failed.remove(index) s.version += 1 - } else { + } else if s.built[index] == nil { + // Only a hard failure when we have NOTHING; a failed + // upgrade just keeps the existing lower-quality chunk. s.failed.insert(index) } self.states[media.cacheKey] = s if r.ok { - self.adaptQuality(key: media.cacheKey, level: level, - wall: r.wall, dur: r.dur, isNetwork: r.isNetwork) + self.persistWidths(key: media.cacheKey) + // Only realtime (urgent) builds inform the realtime + // controller — a slow, quality-first background build + // would falsely make it think the box can't keep up. + if urgent { + self.adaptQuality(key: media.cacheKey, level: level, + wall: r.wall, dur: r.dur, isNetwork: r.isNetwork) + } } NotificationCenter.default.post(name: .mediaStatusChanged, object: nil) MediaPipeline.shared.evictIfNeeded() @@ -243,7 +464,7 @@ final class ChunkManager { struct BuildResult { var ok: Bool; var wall: Double; var dur: Double; var isNetwork: Bool } - private func buildChunk(media: MediaItem, index: Int, level: Int) -> BuildResult { + private func buildChunk(media: MediaItem, index: Int, width: Int, fps: Int) -> BuildResult { let isNet = Self.isNetworkPath(media.path) func fail(_ wall: Double = 0, _ dur: Double = 0) -> BuildResult { BuildResult(ok: false, wall: wall, dur: dur, isNetwork: isNet) @@ -257,8 +478,6 @@ final class ChunkManager { let start = Double(index) * Self.chunkSeconds let dur = min(Self.chunkSeconds, media.duration - start) guard dur > 0.01 else { return fail() } - let q = Self.qualities[min(max(0, level), Self.qualities.count - 1)] - let fps = max(1, Int((media.fps / Double(q.fpsDivisor)).rounded())) func args(encoder: String) -> [String] { var a = ["-y", "-hwaccel", "videotoolbox", @@ -266,7 +485,7 @@ final class ChunkManager { "-i", media.path, "-t", String(format: "%.3f", dur), "-map", "0:v:0", - "-vf", "scale='min(\(q.maxWidth),iw)':-2,fps=\(fps)", + "-vf", "scale='min(\(width),iw)':-2,fps=\(fps)", "-c:v", encoder, "-profile:v", "proxy"] if media.hasAudio { a += ["-map", "0:a:0", "-c:a", "pcm_s16le"] } a.append(tmp.path) @@ -399,7 +618,7 @@ final class ChunkManager { let s = state(for: media) let version = s.version let chunkURLs = Dictionary(uniqueKeysWithValues: - s.built.map { ($0, chunkURL(key: key, index: $0)) }) + s.built.keys.map { ($0, chunkURL(key: key, index: $0)) }) Task.detached(priority: .userInitiated) { let (comp, playable) = await Self.assemble(media: media, chunkURLs: chunkURLs) await MainActor.run { [self] in diff --git a/sequencer/Sources/Sequencer/Document.swift b/sequencer/Sources/Sequencer/Document.swift index ec1c69f9ab45c79fe769dc746aa1113be2aa0bef..1ff497fe81bd5a65561617f00718b3117964d38f 100644 --- a/sequencer/Sources/Sequencer/Document.swift +++ b/sequencer/Sources/Sequencer/Document.swift @@ -1,5 +1,56 @@ import AppKit +/// Document controller that reliably opens `.sq` project *packages*. +/// +/// A `.sq` is a directory bundle. The app exports a UTType conforming to +/// `com.apple.package`, but LaunchServices doesn't always know about it (a dev +/// build rebuilt in place, or another app claiming `.sq`). When it doesn't, the +/// system types a `.sq` as a plain `public.folder`: the stock Open panel won't +/// let you choose it, and even if you could, `NSDocumentController` fails with +/// "cannot open files in the folder format" because no document handles a +/// folder. We fix both ends: run our own Open panel that makes `.sq` choosable, +/// and force the document type for any `.sq` URL — regardless of what +/// LaunchServices believes — so opening always resolves to `ProjectDocument`. +final class ProjectDocumentController: NSDocumentController { + private static let projectType = "com.clover.sequencer.project" + private let sqPanelDelegate = SQOpenPanelDelegate() + + /// Pin the document type for `.sq` URLs so it never resolves to a folder, + /// whatever LaunchServices thinks. Covers the Open panel, Open Recent, and + /// drag-drop paths alike (they all route through here). + override func typeForContents(of url: URL) throws -> String { + if url.pathExtension.lowercased() == "sq" { return Self.projectType } + return try super.typeForContents(of: url) + } + + /// Drive the Open panel ourselves so a `.sq` bundle is always selectable — + /// the stock panel greys it out when the type reads as a plain folder. + override func openDocument(_ sender: Any?) { + let panel = NSOpenPanel() + panel.canChooseFiles = true + panel.canChooseDirectories = true // a `.sq` may read as a folder + panel.allowsMultipleSelection = true + panel.treatsFilePackagesAsDirectories = false + panel.delegate = sqPanelDelegate + panel.begin { [weak self] response in + guard response == .OK, let self else { return } + for url in panel.urls { + self.openDocument(withContentsOf: url, display: true) { _, _, error in + if let error { self.presentError(error) } + } + } + } + } +} + +/// Enables only `.sq` items (package directories or legacy flat files) in the +/// Open panel; other folders remain navigable but not choosable. +final class SQOpenPanelDelegate: NSObject, NSOpenSavePanelDelegate { + func panel(_ sender: Any, shouldEnable url: URL) -> Bool { + url.pathExtension.lowercased() == "sq" + } +} + /// One open `.sq` project. The on-disk format is a **document package** (a /// directory Finder shows as one file): /// ``` diff --git a/sequencer/Sources/Sequencer/PerfTest.swift b/sequencer/Sources/Sequencer/PerfTest.swift new file mode 100644 index 0000000000000000000000000000000000000000..339bd30a2d46a3b191520fca213e3698e28891ab --- /dev/null +++ b/sequencer/Sources/Sequencer/PerfTest.swift @@ -0,0 +1,109 @@ +import AppKit + +/// Headless draw-performance harness: `sequencer --perftest `. +/// Loads a real project into an offscreen `TimelineView` and times `draw(_:)` +/// while simulating a horizontal pan, at a few zoom levels, in both full-detail +/// and simplified (mid-scroll) modes. Reports milliseconds per frame so timeline +/// rendering changes can be judged against real numbers instead of feel. +@MainActor +func runPerfTest(path: String) { + let url = URL(fileURLWithPath: path) + var isDir: ObjCBool = false + FileManager.default.fileExists(atPath: url.path, isDirectory: &isDir) + let jsonURL = isDir.boolValue ? url.appendingPathComponent("project.json") : url + guard let data = try? Data(contentsOf: jsonURL), + let doc = try? JSONDecoder().decode(SequencerDocument.self, from: data) else { + print("perftest: could not read \(jsonURL.path)") + exit(1) + } + + let ctx = DocumentContext.headless + ctx.session.apply(doc.view) + ctx.store.replaceForTest(doc.project) + + let W: CGFloat = 2000, H: CGFloat = 600 + let timeline = TimelineView(frame: NSRect(x: 0, y: 0, width: W, height: H)) + let window = NSWindow(contentRect: NSRect(x: 0, y: 0, width: W, height: H), + styleMask: [.borderless], backing: .buffered, defer: false) + window.contentView = timeline + + // Persistent bitmap-backed context: set current ONCE so we time draw(), not + // per-frame bitmap allocation. + let rep = timeline.bitmapImageRepForCachingDisplay(in: timeline.bounds)! + let gctx = NSGraphicsContext(bitmapImageRep: rep)! + + let dur = timeline.testTimelineDuration + print(String(format: "project: %d clips, %.0f s span, view %.0f×%.0f", + doc.project.clips.count, dur, W, H)) + + let panSpan = max(1, dur * 0.5) + + // filmstripImage loads thumbnails ASYNC on the main queue, so a tight draw + // loop that never spins the runloop measures the thumbnail-LESS path. Warm + // the cache: draw across the pan range at the current zoom and pump the + // runloop until the loads land, so we then measure real thumbnail blits. + func warmThumbnails() { + ctx.session.showFilmstrips = true + timeline.testSetScrolling(false) + NSGraphicsContext.saveGraphicsState() + NSGraphicsContext.current = gctx + for _ in 0..<5 { + for i in 0..<40 { + timeline.testSetOrigin(panSpan * Double(i) / 40) + timeline.testRedraw() + } + RunLoop.current.run(until: Date().addingTimeInterval(0.2)) + } + NSGraphicsContext.restoreGraphicsState() + } + + // Pan across the first half of the timeline over `frames` steps, timing each + // direct draw. Returns mean ms/frame. + func measure(scrolling: Bool, frames: Int = 120) -> Double { + timeline.testSetScrolling(scrolling) + NSGraphicsContext.saveGraphicsState() + NSGraphicsContext.current = gctx + defer { NSGraphicsContext.restoreGraphicsState() } + for _ in 0..<3 { timeline.testRedraw() } // warm up + let t0 = Date() + for i in 0.. Bool { + guard isPlaying, let origin = playbackStartPlayhead else { return false } + setRate(0) + seek(to: origin) + return true + } + + /// Set the normal play speed (from the transport dropdown). Applies live if + /// already playing — keeping the current direction — otherwise it becomes the + /// speed the next Space starts at. Clamped to a sane 0.1×–64× range. + func setPlaySpeed(_ speed: Double) { + playSpeed = max(0.1, min(64, speed)) + if rate != 0 { + setRate(rate < 0 ? -playSpeed : playSpeed) // live; also updates lastRate + } else { + lastRate = playSpeed // so the next Space uses it + ctx.notify.post(name: .playheadChanged, object: nil) + } + let text = playSpeed == playSpeed.rounded() + ? String(format: "%.0f×", playSpeed) : String(format: "%g×", playSpeed) + NotificationCenter.default.post(name: .transientStatus, object: nil, + userInfo: ["text": "Playback speed: \(text)"]) + } + /// J/K/L: each press in the moving direction doubles the rate (capped at /// 64x); pressing the opposite direction halves it until it stops. func shuttle(_ direction: Double) { @@ -111,6 +153,19 @@ final class PlaybackController { seek(to: playhead + seconds) } + /// Shift the playhead by `delta` seconds, preserving playback continuity. + /// Unlike `seek`, this re-anchors WITHOUT forcing a hard resync — used by + /// ripple edits where content slides under the playhead by the same amount, + /// so every player is already on the right frame and must not hiccup. + func shift(by delta: Double) { + let target = max(0, playhead + delta) + pausedPlayhead = target + anchorHost = CACurrentMediaTime() + anchorTime = target + ctx.notify.post(name: .playheadChanged, object: nil) + ctx.players.sync(force: false) + } + // MARK: - Loop / cycle range (I / O / C) /// Mark the in point at the playhead. A collapsed range (out ≤ in) drops @@ -197,10 +252,10 @@ final class TrackPlayer { } private var currentMediaKey: String? - /// Chunk indices that were proxy-backed in the CURRENT item's composition - /// (an item swap mid-playback is only worth its hiccup when it upgrades - /// the frames under the playhead). - private var itemChunks: Set = [] + /// Per-chunk proxy width baked into the CURRENT item's composition. A swap + /// is only worth its hiccup when it improves the frame UNDER THE PLAYHEAD — + /// either newly covered, or a sharper proxy than this item already has. + private var itemChunkWidths: [Int: Int] = [:] func setClip(_ clip: Clip?, media: MediaItem?, sourceTime: Double = 0) { guard let clip, let media else { @@ -234,27 +289,49 @@ final class TrackPlayer { } else { let (asset, version) = ctx.chunks.composition(for: media) let now = CACurrentMediaTime() + let ready = version != -2 // the real composition has assembled let sameAsset = currentMediaKey == media.cacheKey && currentSourceURL == nil && player.currentItem != nil - var swap = !sameAsset - if !swap, currentChunkVersion != version { - if player.rate == 0 || currentChunkVersion == -2 { - // Paused/scrubbing, or still on the placeholder while the - // first real composition assembled: swap freely. - swap = true + var swap = false + if !ready { + // Composition still assembling: do NOT install the empty + // placeholder item — it shows black, can go .failed, and then + // the failure-retry below flashes it every couple of seconds. + // Leave the current item; the viewer stands in meanwhile. + swap = false + } else if !sameAsset { + swap = true // first real item, or the media changed + } else if currentChunkVersion != version { + // Same media, composition upgraded. Only reload when the frame + // UNDER THE PLAYHEAD actually changes what we can show — a chunk + // finishing elsewhere must not reset (and flash) the item. + let idx = ChunkManager.chunkIndex(forSource: sourceTime) + let have = ctx.chunks.builtWidths(media: media)[idx] + let had = itemChunkWidths[idx] + let sharperProxy = have != nil && (had ?? 0) < have! + if player.rate == 0 { + // PAUSED: a swap is a pure visual flash with no playback + // benefit, so swap only to REVEAL a frame we otherwise + // can't show at all — an unplayable original (DNx) whose + // covering chunk has just landed. Never swap to merely + // sharpen a still, and never trade a playable original + // (crisper than any proxy for a still) down to a proxy. + // Pending quality upgrades take effect on the next play/seek. + swap = sharperProxy && had == nil + && !ctx.chunks.originalPlayable(media: media) } else { - // Mid-playback, only swap when it UPGRADES the frames - // under the playhead (original/empty → rendered proxy). - let idx = ChunkManager.chunkIndex(forSource: sourceTime) - swap = !itemChunks.contains(idx) - && ctx.chunks.isCovered(media: media, sourceTime: sourceTime) - && now - lastChunkSwap > 3 + // PLAYING: adopt the proxy the moment it covers the playhead + // (a NAS original may stutter), throttled so rapid + // completions don't hiccup the stream. + swap = sharperProxy && now - lastChunkSwap > 3 } } - if itemFailed { swap = now - lastChunkSwap > 2 } + // A failed stream is only worth re-swapping to recover DURING + // playback; while paused the retry just flashes with nothing gained. + if itemFailed, ready, player.rate != 0 { swap = now - lastChunkSwap > 2 } if swap { replaceItem(AVPlayerItem(asset: asset), media: media, url: nil, version: version) - itemChunks = ctx.chunks.builtChunks(media: media) + itemChunkWidths = ctx.chunks.builtWidths(media: media) lastChunkSwap = now } } @@ -264,11 +341,21 @@ final class TrackPlayer { } private func replaceItem(_ item: AVPlayerItem, media: MediaItem, url: URL?, version: Int) { - item.preferredForwardBufferDuration = lenientSync ? 8 : 1 - player.replaceCurrentItem(with: item) + installItem(item) currentSourceURL = url currentMediaKey = media.cacheKey currentChunkVersion = version + } + + /// Install a fresh item, holding it silent if we're mid-playback. A new item + /// starts at t=0; the syncTime call that always follows a swap (same sync + /// pass) seeks it to the live position and resumes. Without the hold it + /// blips wrong content from the file's head — audibly so on the audio track. + private func installItem(_ item: AVPlayerItem) { + item.preferredForwardBufferDuration = lenientSync ? 8 : 1 + let wasPlaying = player.rate != 0 + player.replaceCurrentItem(with: item) + if wasPlaying { player.rate = 0 } itemFailed = false seekInFlight = false pendingSeek = nil @@ -329,10 +416,92 @@ final class TrackPlayer { } } +/// Double-buffered video track: two `TrackPlayer`s so a cut to a DIFFERENT clip +/// is gapless. The **front** player shows the clip under the playhead; as a cut +/// approaches, the **back** player is prerolled to the next clip's first frame +/// (loaded, decoded, parked, muted). At the cut the roles flip — the viewer just +/// swaps which of its two layers is visible, and the already-warm back player +/// resumes instantly, so there's no `replaceCurrentItem` black-frame / audio gap. +/// +/// Only cuts to a different *media* need this; crossing into another clip of the +/// same media keeps the item and just seeks (already gapless), so the back +/// buffer is only spun up for a genuine media change. +final class VideoTrackPlayer { + unowned var ctx: DocumentContext! { + didSet { a.ctx = ctx; b.ctx = ctx } + } + let a = TrackPlayer() + let b = TrackPlayer() + private(set) var frontIsA = true + var front: TrackPlayer { frontIsA ? a : b } + var back: TrackPlayer { frontIsA ? b : a } + var currentClipId: UUID? { front.currentClipId } + + /// Spin up the next clip's buffer this many seconds before its cut — enough + /// to load + decode the first frame even off a NAS original. + private static let preroll = 1.5 + + func sync(ref: TrackRef, playhead: Double, rate: Double, + playheadMoved: Bool, force: Bool) { + let project = ctx.store.project + let cur = project.clipAt(track: ref, time: playhead, kind: .video) + let media = cur.flatMap { project.media($0.mediaId) } + + // FLIP: the front is showing the wrong (previous) clip, but the back was + // prerolled to exactly the clip now under the playhead → hand over. + if let cur, front.currentClipId != cur.id, back.currentClipId == cur.id { + frontIsA.toggle() + } + + // FRONT: the clip under the playhead, audible. + front.setClip(cur, media: media, sourceTime: cur?.sourceTime(at: playhead) ?? 0) + if let cur, media != nil { + let expected = cur.sourceTime(at: playhead) + if rate != 0 || playheadMoved || force { + front.syncTime(expected: expected, rate: rate * cur.speed, force: force) + } + } + + // BACK: preroll the next different-media clip when its cut is imminent, + // parked (rate 0) and muted at its first frame. Forward playback only — + // a reverse/scrub cut falls back to the plain (tiny-gap) swap. + var buffering = false + if rate >= 0, let next = nextDifferentClip(on: ref, after: playhead, current: cur), + next.start - playhead <= Self.preroll, + let nextMedia = project.media(next.mediaId) { + if back.currentClipId != next.id { + back.setClip(next, media: nextMedia, sourceTime: next.srcIn) + } + back.player.isMuted = true + back.syncTime(expected: next.srcIn, rate: 0, force: false) + buffering = true + } + if !buffering, back.currentClipId != nil { + back.setClip(nil, media: nil) // release the idle buffer + } + } + + /// The next clip on this track (in time) whose media differs from `current` + /// — i.e. the next cut that would otherwise flash. Same-media continuations + /// don't need a buffer. + private func nextDifferentClip(on ref: TrackRef, after t: Double, + current: Clip?) -> Clip? { + ctx.store.project.clips + .filter { $0.track == ref && $0.kind == .video && $0.start > t + 1e-6 + && $0.mediaId != current?.mediaId } + .min { $0.start < $1.start } + } + + func clear() { + a.player.replaceCurrentItem(with: nil) + b.player.replaceCurrentItem(with: nil) + } +} + final class PlayerManager { /// The document context that owns this manager. Set at construction. unowned var ctx: DocumentContext! - private(set) var players: [TrackRef: TrackPlayer] = [:] + private(set) var players: [TrackRef: VideoTrackPlayer] = [:] /// Audio clips get one player per CLIP (not per track) so overlapping /// audio layers all sound at once. private(set) var audioPlayers: [UUID: TrackPlayer] = [:] @@ -343,7 +512,13 @@ final class PlayerManager { // and finished proxies should replace original/filmstrip playback. NotificationCenter.default.addObserver( forName: .projectChanged, object: nil, queue: .main) { [weak self] _ in - self?.sync(force: true) + guard let self else { return } + // While playing, the 60 Hz tick already keeps players synced. Forcing + // a hard resync on every edit reseeks every player and audibly stutters + // the audio; only edits that actually move content under the playhead + // then drift into a normal (throttled) resync. Force only when paused, + // where nothing else refreshes the frame under the playhead. + self.sync(force: self.ctx.playback.rate == 0) } NotificationCenter.default.addObserver( forName: .mediaStatusChanged, object: nil, queue: .main) { [weak self] _ in @@ -352,9 +527,9 @@ final class PlayerManager { } } - func player(for ref: TrackRef) -> TrackPlayer { + func videoTrack(for ref: TrackRef) -> VideoTrackPlayer { if let p = players[ref] { return p } - let p = TrackPlayer() + let p = VideoTrackPlayer() p.ctx = ctx players[ref] = p return p @@ -370,7 +545,7 @@ final class PlayerManager { // Drop players for removed tracks. let liveRefs = Set(project.tracks.indices.map { TrackRef.video($0) }) for (ref, p) in players where !liveRefs.contains(ref) { - p.player.replaceCurrentItem(with: nil) + p.clear() players.removeValue(forKey: ref) } @@ -379,37 +554,43 @@ final class PlayerManager { for i in project.tracks.indices { let ref = TrackRef.video(i) - let tp = player(for: ref) - let clip = project.clipAt(track: ref, time: playhead, kind: .video) - let media = clip.flatMap { project.media($0.mediaId) } - tp.setClip(clip, media: media, - sourceTime: clip?.sourceTime(at: playhead) ?? 0) - guard let clip, let media else { continue } - let expected = clip.sourceTime(at: playhead) - ctx.chunks.want(media: media, sourceTime: expected) - if rate != 0 || playheadMoved || force { - // Time-stretched clips chase the clock at a scaled rate. - tp.syncTime(expected: expected, rate: rate * clip.speed, force: force) - } + videoTrack(for: ref).sync(ref: ref, playhead: playhead, rate: rate, + playheadMoved: playheadMoved, force: force) } + // Recompute the proxy build order from the (moved) playhead + direction; + // self-throttled, so calling it every tick is cheap. + ctx.chunks.updateDemand() + syncAudio(project: project, playhead: playhead, rate: rate, playheadMoved: playheadMoved, force: force) } - /// Layered audio: every audio clip under the playhead plays through its - /// own player, with the fade envelope applied as volume. + /// How far ahead of a clip's start we spin up (and preroll) its player, and + /// how long we keep a just-ended one. The lookahead is the key to gapless + /// audio cuts: the next clip is already playing (silently — its fade gain is + /// 0 until the playhead reaches it) and synced to the master clock BEFORE its + /// cut, so crossing the boundary is a pure volume handover with no cold-start + /// gap. The linger avoids tearing a player down the instant it ends. + private static let audioLookahead = 1.0 + private static let audioLinger = 0.5 + + /// Layered audio: every audio clip near the playhead plays through its own + /// player, with the fade envelope applied as volume. Players for clips just + /// ahead of the playhead are kept running (silent) so cuts are seamless. private func syncAudio(project: ProjectModel, playhead: Double, rate: Double, playheadMoved: Bool, force: Bool) { - let active = project.clips.filter { - $0.kind == .audio && playhead >= $0.start && playhead < $0.end + let windowed = project.clips.filter { + $0.kind == .audio + && playhead + Self.audioLookahead >= $0.start + && playhead - Self.audioLinger < $0.end } - let activeIds = Set(active.map(\.id)) - for (id, p) in audioPlayers where !activeIds.contains(id) { + let windowedIds = Set(windowed.map(\.id)) + for (id, p) in audioPlayers where !windowedIds.contains(id) { p.player.replaceCurrentItem(with: nil) audioPlayers.removeValue(forKey: id) } - for clip in active { + for clip in windowed { guard let media = project.media(clip.mediaId) else { continue } let ap: TrackPlayer if let existing = audioPlayers[clip.id] { @@ -422,6 +603,8 @@ final class PlayerManager { } let expected = clip.srcIn + (playhead - clip.start) ap.setClip(clip, media: media, sourceTime: expected) + // audioGain is 0 outside [start, end], so a prerolled upcoming clip + // stays silent until its cut, then hands over with no gap. ap.player.volume = Float(audioGain(clip, at: playhead)) if rate != 0 || playheadMoved || force { ap.syncTime(expected: expected, rate: rate, force: force) diff --git a/sequencer/Sources/Sequencer/Store.swift b/sequencer/Sources/Sequencer/Store.swift index a68f0092b6b04ebca1b02417a0ccce84690537f1..4a245b1f786f08a86a9b485f15f495ec6fbeed62 100644 --- a/sequencer/Sources/Sequencer/Store.swift +++ b/sequencer/Sources/Sequencer/Store.swift @@ -26,23 +26,47 @@ final class Store { didSet { if selection != oldValue { post(.selectionChanged) } } } - private var undoStack: [ProjectModel] = [] - private var redoStack: [ProjectModel] = [] - private var gestureBase: ProjectModel? + /// An undo entry is the model plus the ephemeral cursor state (selection + /// and playhead) as it stood before the edit. Restoring one puts the + /// selection and playhead back too, so undo steps backward in time rather + /// than just reverting clip geometry. + private struct Snapshot { + var model: ProjectModel + var selection: Set + var playhead: Double + } + + private var undoStack: [Snapshot] = [] + private var redoStack: [Snapshot] = [] + private var gestureBase: Snapshot? var canUndo: Bool { !undoStack.isEmpty || gestureBase != nil } var canRedo: Bool { !redoStack.isEmpty } + private func snapshot() -> Snapshot { + Snapshot(model: project, selection: selection, playhead: ctx.playback.playhead) + } + + /// Restore a snapshot wholesale: model, selection (dropping any clips that + /// no longer exist), and playhead. + private func restore(_ s: Snapshot) { + project = s.model + selection = s.selection.intersection(Set(project.clips.map(\.id))) + ctx.playback.seek(to: s.playhead) + changed() + } + // MARK: - Mutation /// One-shot undoable mutation. func mutate(_ body: (inout ProjectModel) -> Void) { precondition(gestureBase == nil, "mutate() during an open gesture") + let before = snapshot() var copy = project body(©) copy.normalizeStoryboards() guard copy != project else { return } - pushUndo(project) + pushUndo(before) project = copy pruneSelection() changed() @@ -53,13 +77,13 @@ final class Store { /// so there is no accumulation error. func beginGesture() { precondition(gestureBase == nil) - gestureBase = project + gestureBase = snapshot() } - var gestureBaseModel: ProjectModel? { gestureBase } + var gestureBaseModel: ProjectModel? { gestureBase?.model } func updateGesture(_ body: (inout ProjectModel) -> Void) { - guard let base = gestureBase else { return } + guard let base = gestureBase?.model else { return } var copy = base body(©) copy.normalizeStoryboards() @@ -84,7 +108,7 @@ final class Store { post(.projectChanged) } gestureBase = nil - if project != base { + if project != base.model { pushUndo(base) pruneSelection() changed() @@ -99,10 +123,13 @@ final class Store { post(.projectChanged) } - /// Commit a finished preview as ONE undo step, given the pre-preview snapshot. - func commitPreview(from snapshot: ProjectModel) { - guard project != snapshot else { return } - pushUndo(snapshot) + /// Commit a finished preview as ONE undo step, given the pre-preview model. + /// A preview (e.g. the colour picker) doesn't touch selection or playhead, + /// so the current cursor state is also the pre-preview cursor state. + func commitPreview(from model: ProjectModel) { + guard project != model else { return } + pushUndo(Snapshot(model: model, selection: selection, + playhead: ctx.playback.playhead)) pruneSelection() changed() } @@ -110,28 +137,24 @@ final class Store { func cancelGesture() { guard let base = gestureBase else { return } gestureBase = nil - project = base + project = base.model post(.projectChanged) } func undo() { if gestureBase != nil { cancelGesture(); return } guard let prev = undoStack.popLast() else { return } - redoStack.append(project) - project = prev - pruneSelection() - changed() + redoStack.append(snapshot()) + restore(prev) } func redo() { guard let next = redoStack.popLast() else { return } - undoStack.append(project) - project = next - pruneSelection() - changed() + undoStack.append(snapshot()) + restore(next) } - private func pushUndo(_ snapshot: ProjectModel) { + private func pushUndo(_ snapshot: Snapshot) { undoStack.append(snapshot) if undoStack.count > 500 { undoStack.removeFirst() } redoStack.removeAll() diff --git a/sequencer/Sources/Sequencer/TimelineView.swift b/sequencer/Sources/Sequencer/TimelineView.swift index 6da27301694dbd9f3439f4b62694f3dce8cad9a6..e63f820b1a08045e0547d3973f8292be6109bea1 100644 --- a/sequencer/Sources/Sequencer/TimelineView.swift +++ b/sequencer/Sources/Sequencer/TimelineView.swift @@ -1,5 +1,30 @@ import AppKit +/// Dev-only per-section draw profiler (enabled by the `--perftest` harness). +/// Zero overhead when `on` is false. +enum DrawProf { + static var on = false + static var acc: [String: Double] = [:] + static var order: [String] = [] + static var thumbHits = 0 // filmstrip images actually blitted (cache hits) + @inline(__always) static func t(_ label: String, _ body: () -> T) -> T { + if !on { return body() } + let t0 = DispatchTime.now().uptimeNanoseconds + let r = body() + let dt = Double(DispatchTime.now().uptimeNanoseconds - t0) / 1e6 + if acc[label] == nil { order.append(label) } + acc[label, default: 0] += dt + return r + } + static func reset() { acc = [:]; order = [] } + static func report(frames: Int) { + for k in order { + print(String(format: " %-12@ %7.3f ms/frame", k as NSString, + acc[k]! / Double(frames))) + } + } +} + /// The timeline: ruler, Fusion comps band, track lanes, clips, playhead. /// Tracks are unnamed and color-coded; new tracks appear dynamically when a /// clip is dragged below the last lane (two rows down = two new tracks). @@ -27,6 +52,9 @@ final class TimelineView: NSView { oldValue.notify.removeObserver(self, name: .playheadChanged, object: nil) ctx.notify.addObserver(self, selector: #selector(playheadMoved), name: .playheadChanged, object: nil) + // New document ⇒ new model; the scene cache must rebuild even though + // no `.projectChanged` fires for the context swap itself. + sceneDirty = true } } private var store: Store { ctx.store } @@ -60,7 +88,7 @@ final class TimelineView: NSView { required init?(coder: NSCoder) { fatalError() } - @objc private func redraw() { needsDisplay = true } + @objc private func redraw() { sceneDirty = true; needsDisplay = true } @objc private func playheadMoved() { // Auto-follow while playing. @@ -192,19 +220,172 @@ final class TimelineView: NSView { private var panelNamesCache: [UUID: String] = [:] private var linkedSelectionCache: Set = [] + // Per-lane clips (sorted by start) and overlap ranges, grouped ONCE per + // model change rather than re-filtered/re-sorted for every lane on every + // frame. Rebuilt lazily when `sceneDirty` is set — which `redraw()` does on + // any model/selection/media/view/comps change. Scrolling, zooming and the + // 60 Hz playhead only set `needsDisplay` (not `sceneDirty`), so a pan over a + // large project is now a redraw of cached geometry, not a full recompute. + private var clipsByLane: [TrackRef: [Clip]] = [:] + private var overlapsByLane: [TrackRef: [ClipOverlap]] = [:] + private var mediaById: [UUID: MediaItem] = [:] + private var sceneDirty = true - override func draw(_ dirtyRect: NSRect) { - Theme.timelineBg.setFill() - bounds.fill() + /// Clip-title text attributes — hoisted out of the per-clip loop so we + /// don't rebuild the dictionary (and re-resolve the font) for every clip on + /// every frame. + private static let titleAttrs: [NSAttributedString.Key: Any] = [ + .font: NSFont.systemFont(ofSize: 9.5, weight: .medium), + .foregroundColor: NSColor(calibratedWhite: 0.92, alpha: 1), + ] + /// SF Symbols, tinted and baked into flat bitmaps, cached by `key`. Building + /// an SF Symbol and tinting it (`tinted` does a `lockFocus` composite) *per + /// draw* was the single biggest timeline draw cost: nearly every clip is + /// linked, so the link/mute badges alone ran hundreds of times a frame, and + /// the track-header buttons re-baked every frame too. Cached, drawing a badge + /// is a plain blit. Main-thread only (all drawing is). + private static var symbolCache: [String: NSImage] = [:] + static func bakedSymbol(_ name: String, pointSize: CGFloat = 0, + weight: NSFont.Weight = .regular, + tint: NSColor, key: String) -> NSImage? { + if let img = symbolCache[key] { return img } + var base = NSImage(systemSymbolName: name, accessibilityDescription: name) + if pointSize > 0 { + base = base?.withSymbolConfiguration(.init(pointSize: pointSize, weight: weight)) + } + guard let tinted = base?.tinted(tint) else { return nil } + // Bake into a 2× bitmap so the flattened badge stays crisp on Retina + // (a plain `lockFocus` would capture at whatever scale is current). + let size = tinted.size + guard size.width > 0, size.height > 0, + let rep = NSBitmapImageRep( + bitmapDataPlanes: nil, pixelsWide: Int(size.width * 2), + pixelsHigh: Int(size.height * 2), bitsPerSample: 8, samplesPerPixel: 4, + hasAlpha: true, isPlanar: false, colorSpaceName: .deviceRGB, + bytesPerRow: 0, bitsPerPixel: 0) else { return nil } + rep.size = size + NSGraphicsContext.saveGraphicsState() + NSGraphicsContext.current = NSGraphicsContext(bitmapImageRep: rep) + tinted.draw(in: NSRect(origin: .zero, size: size)) + NSGraphicsContext.restoreGraphicsState() + let baked = NSImage(size: size) + baked.addRepresentation(rep) + symbolCache[key] = baked + return baked + } + private static var mutedBadge: NSImage? { + bakedSymbol("speaker.slash.fill", tint: .white, key: "badge.muted") + } + private static var linkBadge: NSImage? { + bakedSymbol("link", tint: .white, key: "badge.link") + } + + /// True while the user is actively scrolling/zooming (cleared ~120 ms after + /// the last scroll event, which triggers one full-detail redraw). On its own + /// it changes nothing — clips draw at full detail while scrolling. It only + /// gates the `lightScroll` fallback: a *very dense* frame (see + /// `denseScrollClips`) sheds the heavy filmstrip/waveform pass mid-scroll so + /// a pathological timeline can't stall, restoring detail the moment it settles. + private var isScrolling = false + private var scrollSettleToken = 0 + + /// Mark a scroll/zoom in progress and schedule the settle redraw. + private func noteScrolling() { + isScrolling = true + scrollSettleToken &+= 1 + let token = scrollSettleToken + DispatchQueue.main.asyncAfter(deadline: .now() + 0.12) { [weak self] in + guard let self, self.scrollSettleToken == token else { return } + self.isScrolling = false + self.needsDisplay = true + } + } + + private func rebuildSceneIfNeeded() { + guard sceneDirty else { return } panelNamesCache = project.panelNames() // Link-mates of the selection get an aqua outline (they act selected). linkedSelectionCache = project.expandLinks(store.selection) .subtracting(store.selection) + clipsByLane = Dictionary(grouping: project.clips, by: \.track) + for ref in clipsByLane.keys { + clipsByLane[ref]?.sort { $0.start < $1.start } + } + // `overlaps()` (no arg) computes every lane in one pass; grouping by + // track yields the same per-lane arrays `overlaps(on:)` returned. + overlapsByLane = Dictionary(grouping: project.overlaps(), by: \.track) + mediaById = Dictionary(project.media.map { ($0.id, $0) }, + uniquingKeysWith: { a, _ in a }) + // Per-lane colours: the track colour and its black-blended body/strip + // shades depend only on the lane's hue, but were re-derived (an NSColor + // alloc + two colour-space `blended()` conversions) for every clip every + // frame. Compute them once per lane here. + laneColorCache = [:] + for ref in project.laneRefs { + let base = trackColor(ref) + laneColorCache[ref] = LaneColors( + base: base, + videoBody: base.blended(withFraction: 0.75, of: .black) ?? base, + audioBody: base.blended(withFraction: 0.82, of: .black) ?? base, + strip: (base.blended(withFraction: 0.5, of: .black) ?? base) + .withAlphaComponent(0.85)) + } + sceneDirty = false + } + + private struct LaneColors { + let base: NSColor // borders, waveform, filmstrip tint + let videoBody: NSColor // video clip body fill + let audioBody: NSColor // audio clip body fill + let strip: NSColor // title-strip fill + } + private var laneColorCache: [TrackRef: LaneColors] = [:] + private func laneColors(_ ref: TrackRef) -> LaneColors { + if let c = laneColorCache[ref] { return c } + let base = trackColor(ref) + return LaneColors(base: base, + videoBody: base.blended(withFraction: 0.75, of: .black) ?? base, + audioBody: base.blended(withFraction: 0.82, of: .black) ?? base, + strip: (base.blended(withFraction: 0.5, of: .black) ?? base) + .withAlphaComponent(0.85)) + } + + /// Clips intersecting the visible time window, across all lanes. Cheap: the + /// per-lane arrays are sorted, so it culls the same way the draw loop does. + private func visibleClipCount() -> Int { + let left = originSecond + let right = originSecond + Double(bounds.width - headerW) / pxPerSecond + var n = 0 + for ref in project.laneRefs { + for c in clipsByLane[ref] ?? [] { + if c.start > right { break } + if c.end < left { continue } + n += 1 + } + } + return n + } + + /// While actively scrolling a *very dense* frame, shed the heavy filmstrip/ + /// waveform pass so the pan stays fluid; it returns the instant the scroll + /// settles. Ordinary-density views keep full detail — thumbnails, waveforms + /// and labels — even mid-scroll, so nothing visibly "drops out" in normal use. + private var lightScroll = false + private static let denseScrollClips = 350 + + override func draw(_ dirtyRect: NSRect) { + Theme.timelineBg.setFill() + bounds.fill() + + DrawProf.t("scene") { rebuildSceneIfNeeded() } + lightScroll = isScrolling && visibleClipCount() > Self.denseScrollClips scrollY = min(scrollY, maxScrollY) let rows = project.laneRefs - for row in 0.. rightSec { break } + if clip.end < leftSec { continue } + drawClip(clip, row: row, ref: ref, colors: colors, + overlapping: overlappingIds.contains(clip.id)) } // Bright red overlap ranges on top of the clip bodies. @@ -343,9 +536,9 @@ final class TimelineView: NSView { private func drawHeaderButton(_ symbolName: String, in r: NSRect, on: Bool) { (on ? NSColor.white : NSColor.black.withAlphaComponent(0.35)).setFill() NSBezierPath(ovalIn: r).fill() - guard let base = NSImage(systemSymbolName: symbolName, accessibilityDescription: nil)? - .withSymbolConfiguration(.init(pointSize: 9, weight: .bold)) else { return } - let img = base.tinted(on ? .black : NSColor(calibratedWhite: 0.95, alpha: 0.9)) + let tint = on ? NSColor.black : NSColor(calibratedWhite: 0.95, alpha: 0.9) + guard let img = Self.bakedSymbol(symbolName, pointSize: 9, weight: .bold, + tint: tint, key: "hdr.\(symbolName).\(on)") else { return } let s = img.size img.draw(in: NSRect(x: r.midX - s.width / 2, y: r.midY - s.height / 2, width: s.width, height: s.height), @@ -479,11 +672,12 @@ final class TimelineView: NSView { } } - private func drawClip(_ clip: Clip, row: Int, ref: TrackRef, overlapping: Bool) { + private func drawClip(_ clip: Clip, row: Int, ref: TrackRef, colors: LaneColors, + overlapping: Bool) { let rect = clipRect(clip, row: row) guard rect.maxX > headerW, rect.minX < bounds.width else { return } - let media = project.media(clip.mediaId) - let color = trackColor(ref) + let media = clip.mediaId.flatMap { mediaById[$0] } + let color = colors.base let selected = store.selection.contains(clip.id) // Storyboard panels tile edge-to-edge (they're gapless) so the track @@ -499,25 +693,31 @@ final class TimelineView: NSView { case .storyboard: NSColor(calibratedWhite: 0.88, alpha: 1).setFill() case .audio: - (color.blended(withFraction: 0.82, of: .black) ?? color).setFill() + colors.audioBody.setFill() case .video: - (media == nil ? NSColor(calibratedWhite: 0.25, alpha: 1) - : color.blended(withFraction: 0.75, of: .black) ?? color).setFill() + (media == nil ? NSColor(calibratedWhite: 0.25, alpha: 1) : colors.videoBody).setFill() } body.fill() - NSGraphicsContext.current?.saveGraphicsState() - body.addClip() - switch clip.kind { - case .video: - if let media, session.showFilmstrips { drawFilmstrip(clip, media: media, rect: rect) } - case .audio: - if let media { drawWaveform(clip, media: media, rect: rect, color: color) } - drawFades(clip, rect: rect, selected: selected) - case .storyboard: - drawBoardThumb(clip, rect: rect) + // Full detail (thumbnails, waveforms, labels) normally — including while + // scrolling. Only a very dense frame mid-scroll drops to bodies + strip + + // border (see `lightScroll`), and only until the pan settles. + let detail = !lightScroll + + if detail { + NSGraphicsContext.current?.saveGraphicsState() + body.addClip() + switch clip.kind { + case .video: + if let media, session.showFilmstrips { drawFilmstrip(clip, media: media, rect: rect) } + case .audio: + if let media { drawWaveform(clip, media: media, rect: rect, color: color) } + drawFades(clip, rect: rect, selected: selected) + case .storyboard: + drawBoardThumb(clip, rect: rect) + } + NSGraphicsContext.current?.restoreGraphicsState() } - NSGraphicsContext.current?.restoreGraphicsState() let linkedSel = !selected && linkedSelectionCache.contains(clip.id) @@ -527,53 +727,48 @@ final class TimelineView: NSView { ? (panelNamesCache[clip.id] ?? "Panel") : "missing media") if clip.kind != .storyboard && media == nil { title = "⚠︎ " + title } if clip.kind == .audio { title = "♪ " + title } - let attrs: [NSAttributedString.Key: Any] = [ - .font: NSFont.systemFont(ofSize: 9.5, weight: .medium), - .foregroundColor: NSColor(calibratedWhite: 0.92, alpha: 1), - ] - NSGraphicsContext.current?.saveGraphicsState() - body.addClip() - color.blended(withFraction: 0.5, of: .black)?.withAlphaComponent(0.85).setFill() + // The label is drawn only at rest and only when the clip is wide enough + // to read; a clip narrower than this shows no legible text anyway. + let showLabel = detail && rect.width >= 22 + if detail { NSGraphicsContext.current?.saveGraphicsState(); body.addClip() } + colors.strip.setFill() NSRect(x: rect.minX, y: rect.minY, width: rect.width, height: 13).fill() - title.draw(at: NSPoint(x: max(rect.minX, headerW) + 5, y: rect.minY + 1), - withAttributes: attrs) + if showLabel { + title.draw(at: NSPoint(x: max(rect.minX, headerW) + 5, y: rect.minY + 1), + withAttributes: Self.titleAttrs) - var badgeX = rect.maxX - 16 - if clip.speed != 1 { - let s = String(format: "×%.4g", clip.speed) - let sAttrs: [NSAttributedString.Key: Any] = [ - .font: NSFont.monospacedDigitSystemFont(ofSize: 8.5, weight: .semibold), - .foregroundColor: FusionComps.yellow, - ] - let w = s.size(withAttributes: sAttrs).width - badgeX -= w - s.draw(at: NSPoint(x: badgeX, y: rect.minY + 1.5), withAttributes: sAttrs) - badgeX -= 5 + var badgeX = rect.maxX - 16 + if clip.speed != 1 { + let s = String(format: "×%.4g", clip.speed) + let sAttrs: [NSAttributedString.Key: Any] = [ + .font: NSFont.monospacedDigitSystemFont(ofSize: 8.5, weight: .semibold), + .foregroundColor: FusionComps.yellow, + ] + let w = s.size(withAttributes: sAttrs).width + badgeX -= w + s.draw(at: NSPoint(x: badgeX, y: rect.minY + 1.5), withAttributes: sAttrs) + badgeX -= 5 + } + if clip.muted, let img = Self.mutedBadge { + img.draw(in: NSRect(x: badgeX, y: rect.minY + 2, width: 10, height: 10), + from: .zero, operation: .sourceOver, fraction: 0.9) + badgeX -= 13 + } + if clip.linkId != nil, let img = Self.linkBadge { + img.draw(in: NSRect(x: badgeX, y: rect.minY + 2, width: 10, height: 10), + from: .zero, operation: .sourceOver, fraction: 0.7) + } } - if clip.muted, let img = NSImage(systemSymbolName: "speaker.slash.fill", - accessibilityDescription: "muted") { - img.tinted(.white).draw( - in: NSRect(x: badgeX, y: rect.minY + 2, width: 10, height: 10), - from: .zero, operation: .sourceOver, fraction: 0.9) - badgeX -= 13 - } - if clip.linkId != nil, let img = NSImage(systemSymbolName: "link", - accessibilityDescription: "linked") { - img.tinted(.white).draw( - in: NSRect(x: badgeX, y: rect.minY + 2, width: 10, height: 10), - from: .zero, operation: .sourceOver, fraction: 0.7) - } - NSGraphicsContext.current?.restoreGraphicsState() + if detail { NSGraphicsContext.current?.restoreGraphicsState() } // Selection reads as a full-card tint, not just an outline. Link-mates // of the selection (they act selected) tint aqua. if selected || linkedSel { - NSGraphicsContext.current?.saveGraphicsState() - body.addClip() + if detail { NSGraphicsContext.current?.saveGraphicsState(); body.addClip() } (selected ? NSColor.controlAccentColor : NSColor.systemCyan) .withAlphaComponent(selected ? 0.34 : 0.20).setFill() - rect.fill() - NSGraphicsContext.current?.restoreGraphicsState() + (detail ? rect : bodyRect).fill() + if detail { NSGraphicsContext.current?.restoreGraphicsState() } } // Border LAST, on top of the tint: overlap = red, selection = accent @@ -624,6 +819,7 @@ final class TimelineView: NSView { let tlSec = secondsFor(x + thumbW / 2) let srcSec = clip.sourceTime(at: tlSec) if let img = MediaPipeline.shared.filmstripImage(for: media, at: max(0, srcSec)) { + if DrawProf.on { DrawProf.thumbHits += 1 } img.draw(in: NSRect(x: x, y: rect.minY + 14, width: thumbW, height: thumbH), from: .zero, operation: .sourceOver, fraction: 0.9) } @@ -996,6 +1192,17 @@ final class TimelineView: NSView { var collapseTo: UUID? // click-on-selected: reduce to this clip if no drag } private var drag = DragState() + + // Middle-button drag grabs the timeline and hand-pans it in both axes + // (time horizontally, tracks vertically), independent of any clip edit. + private struct PanDrag { + var active = false + var start = NSPoint.zero + var origOrigin = 0.0 + var origScrollY: CGFloat = 0 + } + private var panDrag = PanDrag() + private var activeSnapTarget: Double? private var dragHintRow: Int? private var lastMousePoint = NSPoint.zero @@ -1265,6 +1472,12 @@ final class TimelineView: NSView { session.trackHeights[ref] = min(4, max(0.35, factor)) } } + // Dragging the floating scrollbars is a scroll/zoom — simplify while it + // moves, like the wheel and pinch paths. + if [.hBarPan, .hBarLeft, .hBarRight, + .vBarPan, .vBarTop, .vBarBottom].contains(drag.mode) { + noteScrolling() + } drag.moved = true autoscroll(with: event) needsDisplay = true @@ -1287,6 +1500,33 @@ final class TimelineView: NSView { needsDisplay = true } + // MARK: - Middle-mouse pan + + override func otherMouseDown(with event: NSEvent) { + guard event.buttonNumber == 2 else { return } + window?.makeFirstResponder(self) + let p = convert(event.locationInWindow, from: nil) + panDrag = PanDrag(active: true, start: p, + origOrigin: originSecond, origScrollY: scrollY) + } + + override func otherMouseDragged(with event: NSEvent) { + guard panDrag.active else { return } + let p = convert(event.locationInWindow, from: nil) + originSecond = clampOrigin(panDrag.origOrigin + - Double(p.x - panDrag.start.x) / pxPerSecond) + if maxScrollY > 0 { + scrollY = min(max(0, panDrag.origScrollY - (p.y - panDrag.start.y)), maxScrollY) + } + noteScrolling() + needsDisplay = true + } + + override func otherMouseUp(with event: NSEvent) { + guard event.buttonNumber == 2 else { return } + panDrag.active = false + } + private func dragMove(p: NSPoint, dSec: Double) { guard let orig = drag.origClip else { return } // Vertical retracking only for a lone unlinked clip. @@ -1693,6 +1933,19 @@ final class TimelineView: NSView { if event.modifierFlags.contains(.option) { unlinkSelection() } else { linkSelection() } case "b": splitStoryboardAtPlayhead(newShot: event.modifierFlags.contains(.shift)) + case "x": // X delete / ⇧X ripple (same as ⌫) + if store.selection.isEmpty { + closeBlankSpace(at: quantize(pc.playhead)) + } else if event.modifierFlags.contains(.shift) { + rippleDelete() + } else { + deleteSelection() + } + case "\\": rippleDelete() // documented default ripple-delete key (also ⌥⌫) + case "a" where !event.modifierFlags.contains(.command): // ripple trim left (also ⌥←) + rippleTrimToPlayhead(deleteLeft: true) + case "d" where !event.modifierFlags.contains(.command): // ripple trim right (also ⌥→) + rippleTrimToPlayhead(deleteLeft: false) case "[": if event.modifierFlags.contains(.option) { goToPrevMarker() } else if event.modifierFlags.contains(.command) { goToPrevStoryboardPanel() } @@ -2022,9 +2275,19 @@ final class TimelineView: NSView { } model.pruneTrailingEmptyTracks() } - // Park the playhead where the gap closed, so it follows the content - // that just slid left instead of hanging over the removed span. - if let start { playback.seek(to: start) } + // Keep the cursor on the same logical content rather than jumping it to + // the cut. If it sat after the removed span, slide it left by the gap so + // the exact frame under it is unchanged — a playing stream keeps rolling + // with no reseek. Inside the span, land on the close point; before it, + // leave it be. + if let start, let end, end > start { + let ph = playback.playhead + if ph >= end - 1e-9 { + playback.shift(by: -(end - start)) + } else if ph > start { + playback.seek(to: start) + } + } } /// ⌥← / ⌥→ — split the clip(s) under the playhead and ripple-delete the @@ -2033,40 +2296,71 @@ final class TimelineView: NSView { /// under the playhead (so multicam stays in sync). func rippleTrimToPlayhead(deleteLeft: Bool) { let t = quantize(playback.playhead) - let intersects: (Clip) -> Bool = { - $0.kind != .storyboard && $0.start + 1e-6 < t && $0.end - 1e-6 > t + let eps = 1e-6 + let straddles: (Clip) -> Bool = { + $0.kind != .storyboard && $0.start + eps < t && $0.end - eps > t } let sel = project.expandLinks(store.selection) let hadSelection = !store.selection.isEmpty - var targets = project.clips.filter { sel.contains($0.id) && intersects($0) } - if targets.isEmpty { targets = project.clips.filter(intersects) } - guard !targets.isEmpty else { return } - let gapStart = deleteLeft ? targets.map(\.start).min()! : t - let gapEnd = deleteLeft ? t : targets.map(\.end).max()! + // Prefer the selected/linked clips the playhead crosses; fall back to + // every angle under it (so multicam stays in sync). + func pick(_ p: @escaping (Clip) -> Bool) -> [Clip] { + let inSel = project.clips.filter { sel.contains($0.id) && p($0) } + return inSel.isEmpty ? project.clips.filter(p) : inSel + } + + let crossing = pick(straddles) + if !crossing.isEmpty { + let gapStart = deleteLeft ? crossing.map(\.start).min()! : t + let gapEnd = deleteLeft ? t : crossing.map(\.end).max()! + let gap = gapEnd - gapStart + guard gap > eps else { return } + let ids = Set(crossing.map(\.id)) + store.mutate { model in + for tgt in model.clips where ids.contains(tgt.id) { + guard let i = model.clips.firstIndex(where: { $0.id == tgt.id }) else { continue } + if deleteLeft { + model.clips[i].srcIn = tgt.srcIn + (t - tgt.start) * tgt.speed + model.clips[i].start = t + model.clips[i].duration = tgt.end - t + } else { + model.clips[i].duration = t - tgt.start + } + } + // Close the gap on EVERY track (the kept right pieces start at + // gapEnd, so they ride left with everything else). + for i in model.clips.indices where model.clips[i].start >= gapEnd - 1e-9 { + model.clips[i].start = max(0, model.clips[i].start - gap) + } + model.pruneTrailingEmptyTracks() + } + // The kept piece keeps its id, so a trim that started from a + // selection leaves that resulting clip selected. + if hadSelection { store.selection = ids } + playback.seek(to: gapStart) + return + } + + // Nothing straddles the playhead — it's sitting exactly on a cut (e.g. + // right after S). There's nothing to split, so ripple-delete the whole + // clip butting the playhead on the side being trimmed, closing the gap. + let abuts: (Clip) -> Bool = deleteLeft + ? { $0.kind != .storyboard && abs($0.end - t) < eps } + : { $0.kind != .storyboard && abs($0.start - t) < eps } + let adjacent = pick(abuts) + guard !adjacent.isEmpty else { return } + let gapStart = adjacent.map(\.start).min()! + let gapEnd = adjacent.map(\.end).max()! let gap = gapEnd - gapStart - guard gap > 1e-6 else { return } - let ids = Set(targets.map(\.id)) + guard gap > eps else { return } + let ids = Set(adjacent.map(\.id)) store.mutate { model in - for tgt in model.clips where ids.contains(tgt.id) { - guard let i = model.clips.firstIndex(where: { $0.id == tgt.id }) else { continue } - if deleteLeft { - model.clips[i].srcIn = tgt.srcIn + (t - tgt.start) * tgt.speed - model.clips[i].start = t - model.clips[i].duration = tgt.end - t - } else { - model.clips[i].duration = t - tgt.start - } - } - // Close the gap on EVERY track (the kept right pieces start at - // gapEnd, so they ride left with everything else). + model.clips.removeAll { ids.contains($0.id) } for i in model.clips.indices where model.clips[i].start >= gapEnd - 1e-9 { model.clips[i].start = max(0, model.clips[i].start - gap) } model.pruneTrailingEmptyTracks() } - // The kept piece keeps its id, so a trim that started from a selection - // leaves that resulting clip selected. - if hadSelection { store.selection = ids } playback.seek(to: gapStart) } @@ -2104,7 +2398,9 @@ final class TimelineView: NSView { override func cancelOperation(_ sender: Any?) { if store.gestureBaseModel != nil { store.cancelGesture() } store.selection = [] - playback.setRate(0) + // Escape during playback rewinds to where playback started; otherwise + // it's a plain stop. + if !playback.stopAndRevert() { playback.setRate(0) } needsDisplay = true } @@ -2495,7 +2791,7 @@ final class TimelineView: NSView { add("Copy", #selector(ctxCopy)) menu.addItem(.separator()) add("Delete", #selector(ctxDelete), key: "\u{8}") - add("Ripple Delete", #selector(ctxRippleDelete), key: "\u{8}", mods: .option) + add("Ripple Delete", #selector(ctxRippleDelete), key: "\\") return menu } @@ -2609,10 +2905,12 @@ final class TimelineView: NSView { originSecond = clampOrigin(originSecond - Double(dx) / pxPerSecond) } } + noteScrolling() needsDisplay = true } override func magnify(with event: NSEvent) { + noteScrolling() zoom(by: 1 + event.magnification, anchorX: convert(event.locationInWindow, from: nil).x) } @@ -2867,6 +3165,14 @@ final class TimelineView: NSView { var testPxPerSecond: Double { pxPerSecond } func testHThumb() -> NSRect { hThumbRect() } func testVThumb() -> NSRect { vThumbRect() } + func testSetOrigin(_ sec: Double) { originSecond = sec } + func testSetPxPerSecond(_ p: Double) { pxPerSecond = p } + func testSetScrolling(_ b: Bool) { isScrolling = b } + /// Draw straight into the current graphics context (set by the harness), + /// bypassing `cacheDisplay`'s per-call bitmap allocation so we time `draw`. + func testRedraw() { draw(bounds) } + var testTimelineDuration: Double { project.timelineDuration } + var testVisibleClipCount: Int { rebuildSceneIfNeeded(); return visibleClipCount() } // MARK: - Colors diff --git a/sequencer/Sources/Sequencer/TransportBar.swift b/sequencer/Sources/Sequencer/TransportBar.swift index 4a3bf67693d39da3c45233fa6a7e82f176f2c9fe..20caa18719162f2a3d46515b13d2e18220051028 100644 --- a/sequencer/Sources/Sequencer/TransportBar.swift +++ b/sequencer/Sources/Sequencer/TransportBar.swift @@ -77,7 +77,9 @@ final class TransportBar: NSView { private let fpsButton = InstantButton(title: "", target: nil, action: nil) private let customFpsField = NSTextField() private weak var fpsMenu: NSMenu? - private let rateField = NSTextField(labelWithString: "⏸") + private let rateField = NSTextField(labelWithString: "1x") + private let customSpeedField = NSTextField() + private weak var speedMenu: NSMenu? private let status = NSTextField(labelWithString: "") private let jobs = NSTextField(labelWithString: "") private let netWarn = NSTextField(labelWithString: "") @@ -202,6 +204,14 @@ final class TransportBar: NSView { fpsButton.tipText = "Frame Rate" rateField.font = .monospacedDigitSystemFont(ofSize: 11, weight: .regular) rateField.textColor = Theme.subtleLabel + rateField.toolTip = "Playback speed — click or right-click to change" + // Both buttons open the same speed editor: right-click is what was asked + // for, left-click makes it discoverable (like the frame-rate readout). + let speedLeftClick = NSClickGestureRecognizer(target: self, action: #selector(speedClicked)) + rateField.addGestureRecognizer(speedLeftClick) + let speedRightClick = NSClickGestureRecognizer(target: self, action: #selector(speedClicked)) + speedRightClick.buttonMask = 0x2 + rateField.addGestureRecognizer(speedRightClick) let centerStack = NSStackView(views: [timecode, fpsButton, rateField]) centerStack.orientation = .horizontal centerStack.spacing = 8 @@ -486,6 +496,77 @@ final class TransportBar: NSView { userInfo: ["text": "Project frame rate: \(text)"]) } + // MARK: - Playback speed dropdown + + @objc private func speedClicked() { + let menu = NSMenu() + menu.delegate = self + speedMenu = menu + let speed = playback.playSpeed + + // Editable entry first, auto-focused and pre-selected so you can just + // type a custom speed — mirrors the frame-rate dropdown. + customSpeedField.stringValue = Self.speedString(speed) + menu.addItem(makeCustomSpeedItem()) + menu.addItem(.separator()) + + for (title, v) in AppDelegate.playbackSpeeds { + let mi = NSMenuItem(title: title, action: #selector(speedPicked(_:)), + keyEquivalent: "") + mi.target = self + mi.representedObject = v + mi.state = abs(speed - v) < 0.001 ? .on : .off + menu.addItem(mi) + } + + menu.popUp(positioning: menu.items.first, + at: NSPoint(x: -12, y: rateField.bounds.maxY + 9), in: rateField) + } + + /// A menu item hosting the editable speed field, laid out like the fps one. + private func makeCustomSpeedItem() -> NSMenuItem { + let item = NSMenuItem() + let field = customSpeedField + field.isEditable = true + field.isBordered = true + field.bezelStyle = .roundedBezel + field.font = .monospacedDigitSystemFont(ofSize: 13, weight: .regular) + field.alignment = .left + field.placeholderString = "Custom speed" + field.target = self + field.action = #selector(customSpeedEntered(_:)) + field.delegate = self + field.translatesAutoresizingMaskIntoConstraints = false + + let container = NSView(frame: NSRect(x: 0, y: 0, width: 210, height: 28)) + container.addSubview(field) + NSLayoutConstraint.activate([ + field.leadingAnchor.constraint(equalTo: container.leadingAnchor, constant: 11), + field.trailingAnchor.constraint(equalTo: container.trailingAnchor, constant: -11), + field.centerYAnchor.constraint(equalTo: container.centerYAnchor), + ]) + item.view = container + return item + } + + @objc private func speedPicked(_ sender: NSMenuItem) { + guard let v = sender.representedObject as? Double else { return } + playback.setPlaySpeed(v) + } + + @objc private func customSpeedEntered(_ sender: NSTextField) { + let raw = sender.stringValue.trimmingCharacters(in: .whitespaces) + // Accept a bare number or a "1.5x"/"1.5×" string. + let scanned = raw.split(whereSeparator: { $0 == "x" || $0 == "×" || $0 == " " }) + .first.map(String.init) ?? raw + guard let v = Double(scanned), v >= 0.1, v <= 64 else { + NSSound.beep() + return + } + speedMenu?.cancelTracking() + playback.setPlaySpeed(v) + } + @objc private func heightChanged() { session.laneScale = CGFloat(heightSlider.doubleValue) } @@ -551,8 +632,17 @@ final class TransportBar: NSView { string: fpsText, attributes: [.font: NSFont.monospacedDigitSystemFont(ofSize: 10, weight: .regular), .foregroundColor: Theme.subtleLabel]) - rateField.stringValue = pc.rate == 0 ? "⏸" - : String(format: "%@%.0fx", pc.rate < 0 ? "◀︎ " : "▶︎ ", abs(pc.rate)) + // Always show a speed. Stopped → the set play speed with no arrow (that + // absence is the "paused" cue); playing → a direction arrow + the live + // rate. %g keeps fractional speeds like 1.5x / 1.25x readable. + rateField.stringValue = pc.rate == 0 + ? Self.speedString(pc.playSpeed) + : (pc.rate < 0 ? "◀︎ " : "▶︎ ") + Self.speedString(abs(pc.rate)) + } + + /// Format a speed magnitude as "1x" / "1.5x" (whole numbers drop the decimal). + private static func speedString(_ v: Double) -> String { + v == v.rounded() ? String(format: "%.0fx", v) : String(format: "%gx", v) } @objc private func updateJobs() { @@ -617,14 +707,16 @@ extension TransportBar: NSTextFieldDelegate { extension TransportBar: NSMenuDelegate { func menuWillOpen(_ menu: NSMenu) { - guard menu === fpsMenu else { return } + let field: NSTextField? = menu === fpsMenu ? customFpsField + : menu === speedMenu ? customSpeedField : nil + guard let field else { return } // The menu runs its own modal tracking loop, so focus has to be handed // to the field in that run-loop mode — a plain async dispatch would sit // idle until the menu closed. - RunLoop.current.perform(inModes: [.eventTracking]) { [weak self] in - guard let self, let window = self.customFpsField.window else { return } - window.makeFirstResponder(self.customFpsField) - self.customFpsField.currentEditor()?.selectAll(nil) + RunLoop.current.perform(inModes: [.eventTracking]) { + guard let window = field.window else { return } + window.makeFirstResponder(field) + field.currentEditor()?.selectAll(nil) } } } diff --git a/sequencer/Sources/Sequencer/UITest.swift b/sequencer/Sources/Sequencer/UITest.swift index 076a7e8eaa9a32f28da3ab15b355a5ed18b3f52c..c3e8919150c043bd994fd8e80fe6bdff2d1eed13 100644 --- a/sequencer/Sources/Sequencer/UITest.swift +++ b/sequencer/Sources/Sequencer/UITest.swift @@ -531,15 +531,32 @@ func runUITest() { "linked group moves vertically as one") store.undo() - // 31. Ripple delete closes the gap on every track. + // 31. Ripple delete closes the gap on every track. The playhead slides with + // the content it sat on: it was at 80 (after the removed [10,30) span), so + // removing that 20s gap carries it to 60 — same frame, not parked at the cut. store.selection = [la.id] // linked pair [10,30) — ripple shifts solo 40→20 DocumentContext.headless.playback.seek(to: 80) timeline.rippleDelete() check(store.project.clips.count == 1 && abs(store.project.clip(solo.id)!.start - 20) < 1e-9, "ripple delete closes the gap across tracks (got \(store.project.clip(solo.id)?.start ?? -1))") + check(abs(DocumentContext.headless.playback.playhead - 60) < 1e-6, + "ripple delete slides the playhead with the content (got \(DocumentContext.headless.playback.playhead))") + store.undo() + + // 31a. A playhead BEFORE the removed span is left untouched (content there + // didn't move); one INSIDE the span lands on the close point. + store.selection = [la.id] + DocumentContext.headless.playback.seek(to: 5) + timeline.rippleDelete() + check(abs(DocumentContext.headless.playback.playhead - 5) < 1e-6, + "ripple delete leaves an earlier playhead put (got \(DocumentContext.headless.playback.playhead))") + store.undo() + store.selection = [la.id] + DocumentContext.headless.playback.seek(to: 25) + timeline.rippleDelete() check(abs(DocumentContext.headless.playback.playhead - 10) < 1e-6, - "ripple delete parks the playhead at the closed gap (got \(DocumentContext.headless.playback.playhead))") + "ripple delete inside the span lands on the close point (got \(DocumentContext.headless.playback.playhead))") store.undo() // 31b. Trailing empty tracks collapse to the last used lane; interior and diff --git a/sequencer/Sources/Sequencer/ViewerGridView.swift b/sequencer/Sources/Sequencer/ViewerGridView.swift index d7947a1ff025ba5e40f0bb5843c16c7ae220ab83..ea4f11d7bedc6a37557f7e0e9cd67892cf1c9248 100644 --- a/sequencer/Sources/Sequencer/ViewerGridView.swift +++ b/sequencer/Sources/Sequencer/ViewerGridView.swift @@ -15,6 +15,11 @@ final class ViewerGridView: NSView { oldValue.notify.removeObserver(self, name: .playheadChanged, object: nil) ctx.notify.addObserver(self, selector: #selector(sync), name: .playheadChanged, object: nil) + // Forward the new context into cells already built against the old + // one — otherwise they keep reading the previous (or headless) store + // and render nothing but the black cell background. + for c in cells.values { c.ctx = ctx } + fusionCell?.ctx = ctx } } private var store: Store { ctx.store } @@ -190,6 +195,7 @@ final class ViewerGridView: NSView { var newPanes: [NSView] = [] for ref in tracks where cells[ref] == nil { let cell = ViewerCell(ref: ref) + cell.ctx = ctx cell.alphaValue = 0 cells[ref] = cell // Below the settled grid so it grows in UNDER its neighbours. @@ -198,6 +204,7 @@ final class ViewerGridView: NSView { } if fusion, fusionCell == nil { let cell = FusionViewerCell() + cell.ctx = ctx cell.alphaValue = 0 fusionCell = cell addSubview(cell, positioned: .below, relativeTo: nil) @@ -325,6 +332,18 @@ final class ViewerGridView: NSView { frames = justifiedFrames(aspects: aspects, in: bounds) } + // Tell optimisation how sharp the proxies need to be: the largest video + // cell on screen, in device pixels. A big preview asks for sharper + // background proxies; a small one avoids over-rendering. + let scale = window?.backingScaleFactor ?? NSScreen.main?.backingScaleFactor ?? 2 + let maxVideoWidth = zip(panes, frames) + .filter { $0.0 is ViewerCell } + .map { $0.1.width } + .max() ?? 0 + if maxVideoWidth > 0 { + ctx.chunks.setPreviewTargetWidth(Int((maxVideoWidth * scale).rounded())) + } + NSAnimationContext.runAnimationGroup({ ctx in ctx.duration = animated ? 0.16 : 0 ctx.allowsImplicitAnimation = animated @@ -442,8 +461,9 @@ final class ViewerGridView: NSView { /// or top+bottom — then run the normal justified layout in whatever space is /// left over. The strip's axis is dictated by that maximization, not chosen: /// a full-width priority leaves a band underneath, a full-height one leaves a - /// band to the side. Because the two regions tile `rect` exactly and each - /// centres its own contents, the composite reads as centred. + /// band to the side. The priority pane and the secondaries' strip are laid + /// flush against each other and the combined block is centred in `rect`, so + /// there's no gap between the two panels and the whole reads as centred. /// /// The lone knob is a 100pt floor on the strip (clamped on tiny viewers): when /// the priority's aspect nearly matches the container's, the natural leftover @@ -462,19 +482,26 @@ final class ViewerGridView: NSView { let freeBelow = rect.height - full.height // priority is full-width let freeSide = rect.width - full.width // priority is full-height + // The clamp on the strip's thickness (and any width/height limit on the + // priority pane) can leave the pane smaller than its region, so it floats + // with dead space toward the strip. Size the pane first, then lay pane + + // strip flush against each other and centre that combined block in `rect` + // along the split axis — no gap between the two panels, group centred. let priRegion: NSRect, strip: NSRect if freeBelow >= freeSide { let t = min(max(freeBelow, 100), rect.height * 0.5) - priRegion = NSRect(x: rect.minX, y: rect.minY, - width: rect.width, height: rect.height - t) - strip = NSRect(x: rect.minX, y: rect.maxY - t, - width: rect.width, height: t) + let pane = aspectFit(aspects[p], in: NSRect(x: rect.minX, y: rect.minY, + width: rect.width, height: rect.height - t)) + let y0 = rect.minY + (rect.height - (pane.height + t)) / 2 + priRegion = NSRect(x: rect.minX, y: y0, width: rect.width, height: pane.height) + strip = NSRect(x: rect.minX, y: y0 + pane.height, width: rect.width, height: t) } else { let t = min(max(freeSide, 100), rect.width * 0.5) - priRegion = NSRect(x: rect.minX, y: rect.minY, - width: rect.width - t, height: rect.height) - strip = NSRect(x: rect.maxX - t, y: rect.minY, - width: t, height: rect.height) + let pane = aspectFit(aspects[p], in: NSRect(x: rect.minX, y: rect.minY, + width: rect.width - t, height: rect.height)) + let x0 = rect.minX + (rect.width - (pane.width + t)) / 2 + priRegion = NSRect(x: x0, y: rect.minY, width: pane.width, height: rect.height) + strip = NSRect(x: x0 + pane.width, y: rect.minY, width: t, height: rect.height) } frames[p] = aspectFit(aspects[p], in: priRegion) let otherFrames = justifiedFrames(aspects: others.map { aspects[$0] }, in: strip) @@ -799,9 +826,15 @@ class ViewerCellBase: NSView { final class ViewerCell: ViewerCellBase { let ref: TrackRef + // Two layers for the double-buffered track player: `playerLayer` shows sub- + // player A, `playerLayerB` shows sub-player B. `update()` reveals whichever + // is the front buffer and hides the other — so a gapless cut is just a layer + // visibility flip (both already hold the right frame), never a rebind flash. private let playerLayer = AVPlayerLayer() + private let playerLayerB = AVPlayerLayer() private let imageLayer = CALayer() private var readyObs: NSKeyValueObservation? + private var readyObsB: NSKeyValueObservation? // "Loading Media…" overlay — a clear, frame-scaled not-rendered state // shown when there's neither live video NOR a filmstrip stand-in to show @@ -823,8 +856,11 @@ final class ViewerCell: ViewerCellBase { // fills it edge to edge WITHOUT the inward crop fill would risk. imageLayer.contentsGravity = .resizeAspect playerLayer.videoGravity = .resizeAspect + playerLayerB.videoGravity = .resizeAspect + playerLayerB.isHidden = true layer?.insertSublayer(imageLayer, at: 0) layer?.insertSublayer(playerLayer, above: imageLayer) + layer?.insertSublayer(playerLayerB, above: playerLayer) // Overlay sits above the video/image layers (but below the chrome // subviews). Hidden until update() decides there's nothing to show. @@ -846,6 +882,9 @@ final class ViewerCell: ViewerCellBase { readyObs = playerLayer.observe(\.isReadyForDisplay) { [weak self] _, _ in DispatchQueue.main.async { self?.update() } } + readyObsB = playerLayerB.observe(\.isReadyForDisplay) { [weak self] _, _ in + DispatchQueue.main.async { self?.update() } + } focusButton.onClick = { [weak self] in guard let self else { return } session.toggleFocus(self.ref) } hideButton.onClick = { [weak self] in guard let self else { return } @@ -892,6 +931,7 @@ final class ViewerCell: ViewerCellBase { override func layoutContentLayers(in target: CGRect) { playerLayer.frame = target + playerLayerB.frame = target imageLayer.frame = target layoutOverlay(in: target) } @@ -921,6 +961,27 @@ final class ViewerCell: ViewerCellBase { width: bounds.width - 8, height: textH) } + /// Pending debounced spinner. The empty state (no live frame AND no + /// filmstrip stand-in) is often just a brief transient — an item swap or a + /// seek that lands within a few frames. Showing the spinner instantly makes + /// those flash; instead we wait out a short grace period and only reveal it + /// if the cell is still empty. Any resolved frame cancels it. + private var pendingSpinner: DispatchWorkItem? + private func scheduleLoadingOverlay() { + guard !overlayVisible, pendingSpinner == nil else { return } + let work = DispatchWorkItem { [weak self] in + self?.pendingSpinner = nil + self?.showLoadingOverlay(true) + } + pendingSpinner = work + DispatchQueue.main.asyncAfter(deadline: .now() + 0.25, execute: work) + } + private func cancelLoadingOverlay() { + pendingSpinner?.cancel() + pendingSpinner = nil + showLoadingOverlay(false) + } + private func showLoadingOverlay(_ show: Bool) { if show { layoutOverlay(in: bounds) } guard overlayVisible != show else { return } @@ -1166,8 +1227,16 @@ final class ViewerCell: ViewerCellBase { defer { CATransaction.commit() } let project = store.project let playhead = playback.playhead - let tp = players.player(for: ref) - if playerLayer.player !== tp.player { playerLayer.player = tp.player } + // Double-buffered: bind each layer to its sub-player once, then show only + // the front buffer's layer. The back buffer (a prerolled upcoming clip) + // stays hidden until a cut flips the roles. + let vt = players.videoTrack(for: ref) + if playerLayer.player !== vt.a.player { playerLayer.player = vt.a.player } + if playerLayerB.player !== vt.b.player { playerLayerB.player = vt.b.player } + let frontLayer = vt.frontIsA ? playerLayer : playerLayerB + let backLayer = vt.frontIsA ? playerLayerB : playerLayer + let front = vt.front + backLayer.isHidden = true focusButton.active = session.focusedTracks.contains(ref) hideButton.active = session.hiddenTracks.contains(ref) @@ -1176,12 +1245,12 @@ final class ViewerCell: ViewerCellBase { if let panel = project.clipAt(track: ref, time: playhead, kind: .storyboard), let board = panel.board { currentClipId = panel.id - playerLayer.isHidden = true + frontLayer.isHidden = true imageLayer.isHidden = false imageLayer.contents = boards.composite(for: board) setTopLeft(project.panelNames()[panel.id] ?? "", hoverOnly: false) setStatus("") - showLoadingOverlay(false) + cancelLoadingOverlay() return } @@ -1189,12 +1258,12 @@ final class ViewerCell: ViewerCellBase { guard let clip = project.clipAt(track: ref, time: playhead, kind: .video), let media = project.media(clip.mediaId) else { currentClipId = nil - playerLayer.isHidden = true + frontLayer.isHidden = true imageLayer.isHidden = true imageLayer.contents = nil setTopLeft("", hoverOnly: true) setStatus("") - showLoadingOverlay(false) + cancelLoadingOverlay() return } currentClipId = clip.id @@ -1208,32 +1277,34 @@ final class ViewerCell: ViewerCellBase { // parked near the expected source time; otherwise the filmstrip (a // real frame at this moment) stands in — so the transition is // filmstrip → video, never black. - let cur = tp.player.currentTime().seconds + let cur = front.player.currentTime().seconds let onTime = cur.isFinite && abs(cur - src) < 0.5 - let itemOK = tp.player.currentItem != nil && !tp.itemFailed - && tp.player.currentItem?.status != .failed + let itemOK = front.player.currentItem != nil && !front.itemFailed + && front.player.currentItem?.status != .failed && (covered || chunks.originalPlayable(media: media)) - && playerLayer.isReadyForDisplay + && frontLayer.isReadyForDisplay && onTime - playerLayer.isHidden = !itemOK - imageLayer.isHidden = itemOK - var status = covered ? "" : "processing…" if itemOK { - showLoadingOverlay(false) - } else { - let strip = MediaPipeline.shared.filmstripImage(for: media, at: src) + frontLayer.isHidden = false + imageLayer.isHidden = true + cancelLoadingOverlay() + } else if let strip = MediaPipeline.shared.filmstripImage(for: media, at: src) { + // A filmstrip is a real frame for this moment: stand in with it so + // the transition is filmstrip → video, never black. + frontLayer.isHidden = true + imageLayer.isHidden = false imageLayer.contents = strip - // No live video AND no thumbnail stand-in: make "not rendered" - // unmistakable with the framed spinner + "Loading Media…" instead - // of a near-black cell. A filmstrip, when present, is a real frame - // for this moment, so it still stands in. - if strip == nil { - showLoadingOverlay(true) - status = "" - } else { - showLoadingOverlay(false) - } + cancelLoadingOverlay() + } else { + // No live video AND no stand-in. This is usually just a transient + // (an item swap or a seek that lands within a few frames), so do + // NOT blank the cell or flash the spinner immediately — hold what's + // on screen and only escalate to the framed "Loading Media…" + // overlay if the empty state actually persists (see + // scheduleLoadingOverlay). That kills the paused spinner flashes. + scheduleLoadingOverlay() + status = "" } setStatus(status) } diff --git a/sequencer/Sources/Sequencer/main.swift b/sequencer/Sources/Sequencer/main.swift index e47e1dac66cc579f805f93d096230ac91cbbbe07..6310b1a0be3dfe9f9d901fc1a2f6791c00c96471 100644 --- a/sequencer/Sources/Sequencer/main.swift +++ b/sequencer/Sources/Sequencer/main.swift @@ -11,8 +11,17 @@ if CommandLine.arguments.contains("--uitest") { MainActor.assumeIsolated { runUITest() } } +if CommandLine.arguments.count >= 3, CommandLine.arguments[1] == "--perftest" { + _ = NSApplication.shared + MainActor.assumeIsolated { runPerfTest(path: CommandLine.arguments[2]) } +} + let app = SeqApplication.shared let delegate = AppDelegate() app.delegate = delegate +// Instantiate our controller before anything opens a document: the first +// NSDocumentController created becomes the shared instance. Retained here so it +// stays the shared controller for the app's lifetime. +let documentController = ProjectDocumentController() app.setActivationPolicy(.regular) app.run() diff --git a/sequencer/build.sh b/sequencer/build.sh index 90ab43a0b005651e74d89007766b912531933fbe..4a412ae9f9151e8151247d1f5a9966a6cc932866 100755 --- a/sequencer/build.sh +++ b/sequencer/build.sh @@ -6,6 +6,61 @@ CONFIG=release APP=Sequencer.app BIN=Sequencer +# Signing identity. Override with: SIGN_ID="Some Identity" ./build.sh +SIGN_ID="${SIGN_ID:-Sequencer Dev}" +LOGIN_KEYCHAIN="$HOME/Library/Keychains/login.keychain-db" + +# Create a self-signed code-signing identity named "$SIGN_ID" in the login +# keychain, so codesign works on a machine that has no dev certificate. +create_cert() { + name="$SIGN_ID" + echo "Creating self-signed code-signing identity \"$name\"…" + tmp=$(mktemp -d) + openssl req -x509 -newkey rsa:2048 -sha256 -days 3650 -nodes \ + -keyout "$tmp/key.pem" -out "$tmp/cert.pem" \ + -subj "/CN=$name" \ + -addext "basicConstraints=critical,CA:false" \ + -addext "keyUsage=critical,digitalSignature" \ + -addext "extendedKeyUsage=critical,codeSigning" >/dev/null 2>&1 + openssl pkcs12 -export -legacy -out "$tmp/id.p12" \ + -inkey "$tmp/key.pem" -in "$tmp/cert.pem" -passout pass: >/dev/null 2>&1 \ + || openssl pkcs12 -export -out "$tmp/id.p12" \ + -inkey "$tmp/key.pem" -in "$tmp/cert.pem" -passout pass: >/dev/null 2>&1 + security import "$tmp/id.p12" -k "$LOGIN_KEYCHAIN" -P "" \ + -T /usr/bin/codesign -T /usr/bin/security + # Trust it for signing, and let codesign use the key without a GUI prompt. + # Both are best-effort (may need the keychain password); a one-time + # "codesign wants to sign" prompt on first build is harmless — click Always Allow. + security add-trusted-cert -r trustRoot -p codeSign -k "$LOGIN_KEYCHAIN" \ + "$tmp/cert.pem" >/dev/null 2>&1 || true + security set-key-partition-list -S apple-tool:,apple:,codesign: -s \ + -k "" "$LOGIN_KEYCHAIN" >/dev/null 2>&1 || true + rm -rf "$tmp" +} + +# Choose a signing identity: honour $SIGN_ID if present, else the first available +# codesigning identity, else fall back to ad-hoc ("-", no certificate needed). +pick_identity() { + if security find-identity -v -p codesigning 2>/dev/null | grep -qF "\"$SIGN_ID\""; then + printf '%s' "$SIGN_ID"; return + fi + first=$(security find-identity -v -p codesigning 2>/dev/null \ + | sed -n 's/^[[:space:]]*[0-9][0-9]*)[[:space:]]*[0-9A-Fa-f]*[[:space:]]*"\(.*\)"$/\1/p' \ + | head -n1) + if [ -n "$first" ]; then + echo "Identity \"$SIGN_ID\" not found; using \"$first\"." >&2 + printf '%s' "$first"; return + fi + echo "No code-signing identity found — using ad-hoc signing (-)." >&2 + echo " Run './build.sh --create-cert' to make a reusable self-signed \"$SIGN_ID\"." >&2 + printf '%s' "-" +} + +if [ "$1" = "--create-cert" ]; then + create_cert + shift +fi + swift build -c "$CONFIG" # (Re)build the .app bundle from scratch so stale files never linger. @@ -89,6 +144,8 @@ PLIST # Mark the bundle as an app package for Finder/Launch Services. printf 'APPL????' > "$APP/Contents/PkgInfo" -codesign --force --deep --sign "Sequencer Dev" "$APP" +IDENTITY=$(pick_identity) +echo "Signing with: $IDENTITY" +codesign --force --deep --sign "$IDENTITY" "$APP" echo "Built $APP" -- 2.54.0