From 4a73315c980565b206d4407b76069fe7d29a77a1 Mon Sep 17 00:00:00 2001 From: Khan Winter <35942988+thecoolwinter@users.noreply.github.com> Date: Thu, 8 May 2025 09:29:15 -0500 Subject: [PATCH 01/30] Initial Commit - Ribbon View & Toggles --- .../xcshareddata/swiftpm/Package.resolved | 9 - .../Views/ContentView.swift | 7 +- .../Views/StatusBar.swift | 2 + Package.swift | 5 +- .../CodeEditSourceEditor.swift | 28 ++- ...extViewController+GutterViewDelegate.swift | 5 +- ...ift => TextViewController+Lifecycle.swift} | 12 +- .../TextViewController+StyleViews.swift | 1 + .../Controller/TextViewController.swift | 28 +-- .../TextView+/TextView+TextFormation.swift | 1 + .../Gutter/GutterView.swift | 103 +++++++--- .../Gutter/LineFolding/FoldRange.swift | 25 +++ .../LineFolding/FoldingRibbonView.swift | 193 ++++++++++++++++++ .../Gutter/LineFolding/LineFoldProvider.swift | 13 ++ .../Gutter/LineFolding/LineFoldingModel.swift | 151 ++++++++++++++ .../Minimap/MinimapLineRenderer.swift | 12 +- Tests/CodeEditSourceEditorTests/Mock.swift | 3 +- .../TextViewControllerTests.swift | 64 ++++-- 18 files changed, 572 insertions(+), 90 deletions(-) rename Sources/CodeEditSourceEditor/Controller/{TextViewController+LoadView.swift => TextViewController+Lifecycle.swift} (97%) create mode 100644 Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldRange.swift create mode 100644 Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift create mode 100644 Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldProvider.swift create mode 100644 Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldingModel.swift diff --git a/Example/CodeEditSourceEditorExample/CodeEditSourceEditorExample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Example/CodeEditSourceEditorExample/CodeEditSourceEditorExample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index a1eb3b548..e56a9beac 100644 --- a/Example/CodeEditSourceEditorExample/CodeEditSourceEditorExample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Example/CodeEditSourceEditorExample/CodeEditSourceEditorExample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -9,15 +9,6 @@ "version" : "0.1.20" } }, - { - "identity" : "codeedittextview", - "kind" : "remoteSourceControl", - "location" : "https://github.com/CodeEditApp/CodeEditTextView.git", - "state" : { - "revision" : "a5912e60f6bac25cd1cdf8bb532e1125b21cf7f7", - "version" : "0.10.1" - } - }, { "identity" : "rearrange", "kind" : "remoteSourceControl", diff --git a/Example/CodeEditSourceEditorExample/CodeEditSourceEditorExample/Views/ContentView.swift b/Example/CodeEditSourceEditorExample/CodeEditSourceEditorExample/Views/ContentView.swift index 8a42a5f1a..640476346 100644 --- a/Example/CodeEditSourceEditorExample/CodeEditSourceEditorExample/Views/ContentView.swift +++ b/Example/CodeEditSourceEditorExample/CodeEditSourceEditorExample/Views/ContentView.swift @@ -27,6 +27,7 @@ struct ContentView: View { @State private var settingsIsPresented: Bool = false @State private var treeSitterClient = TreeSitterClient() @AppStorage("showMinimap") private var showMinimap: Bool = true + @AppStorage("showFoldingRibbon") private var showFoldingRibbon: Bool = true @State private var indentOption: IndentOption = .spaces(count: 4) @AppStorage("reformatAtColumn") private var reformatAtColumn: Int = 80 @AppStorage("showReformattingGuide") private var showReformattingGuide: Bool = false @@ -56,7 +57,8 @@ struct ContentView: View { useSystemCursor: useSystemCursor, showMinimap: showMinimap, reformatAtColumn: reformatAtColumn, - showReformattingGuide: showReformattingGuide + showReformattingGuide: showReformattingGuide, + showFoldingRibbon: showFoldingRibbon ) .overlay(alignment: .bottom) { StatusBar( @@ -71,7 +73,8 @@ struct ContentView: View { showMinimap: $showMinimap, indentOption: $indentOption, reformatAtColumn: $reformatAtColumn, - showReformattingGuide: $showReformattingGuide + showReformattingGuide: $showReformattingGuide, + showFoldingRibbon: $showFoldingRibbon ) } .ignoresSafeArea() diff --git a/Example/CodeEditSourceEditorExample/CodeEditSourceEditorExample/Views/StatusBar.swift b/Example/CodeEditSourceEditorExample/CodeEditSourceEditorExample/Views/StatusBar.swift index 779f5cd35..78721fbb8 100644 --- a/Example/CodeEditSourceEditorExample/CodeEditSourceEditorExample/Views/StatusBar.swift +++ b/Example/CodeEditSourceEditorExample/CodeEditSourceEditorExample/Views/StatusBar.swift @@ -26,6 +26,7 @@ struct StatusBar: View { @Binding var indentOption: IndentOption @Binding var reformatAtColumn: Int @Binding var showReformattingGuide: Bool + @Binding var showFoldingRibbon: Bool var body: some View { HStack { @@ -43,6 +44,7 @@ struct StatusBar: View { .onChange(of: reformatAtColumn) { _, newValue in reformatAtColumn = max(1, min(200, newValue)) } + Toggle("Show Folding Ribbon", isOn: $showFoldingRibbon) if #available(macOS 14, *) { Toggle("Use System Cursor", isOn: $useSystemCursor) } else { diff --git a/Package.swift b/Package.swift index a14085dcf..8d207d2a7 100644 --- a/Package.swift +++ b/Package.swift @@ -16,8 +16,9 @@ let package = Package( dependencies: [ // A fast, efficient, text view for code. .package( - url: "https://github.com/CodeEditApp/CodeEditTextView.git", - from: "0.10.1" + path: "../CodeEditTextView" +// url: "https://github.com/CodeEditApp/CodeEditTextView.git", +// from: "0.10.1" ), // tree-sitter languages .package( diff --git a/Sources/CodeEditSourceEditor/CodeEditSourceEditor/CodeEditSourceEditor.swift b/Sources/CodeEditSourceEditor/CodeEditSourceEditor/CodeEditSourceEditor.swift index 12a0f5a10..3e98891a7 100644 --- a/Sources/CodeEditSourceEditor/CodeEditSourceEditor/CodeEditSourceEditor.swift +++ b/Sources/CodeEditSourceEditor/CodeEditSourceEditor/CodeEditSourceEditor.swift @@ -39,7 +39,8 @@ public struct CodeEditSourceEditor: NSViewControllerRepresentable { /// the default `TreeSitterClient` highlighter. /// - contentInsets: Insets to use to offset the content in the enclosing scroll view. Leave as `nil` to let the /// scroll view automatically adjust content insets. - /// - additionalTextInsets: An additional amount to inset the text of the editor by. + /// - additionalTextInsets: A set of extra text insets to indent only *text* content. Does not effect + /// decorations like the find panel. /// - isEditable: A Boolean value that controls whether the text view allows the user to edit text. /// - isSelectable: A Boolean value that controls whether the text view allows the user to select text. If this /// value is true, and `isEditable` is false, the editor is selectable but not editable. @@ -47,12 +48,13 @@ public struct CodeEditSourceEditor: NSViewControllerRepresentable { /// character's width between characters, etc. Defaults to `1.0` /// - bracketPairEmphasis: The type of highlight to use to highlight bracket pairs. /// See `BracketPairHighlight` for more information. Defaults to `nil` - /// - useSystemCursor: If true, uses the system cursor on `>=macOS 14`. + /// - useSystemCursor: Use the system cursor instead of the default line cursor. Only available after macOS 14. /// - undoManager: The undo manager for the text view. Defaults to `nil`, which will create a new CEUndoManager /// - coordinators: Any text coordinators for the view to use. See ``TextViewCoordinator`` for more information. - /// - showMinimap: Whether to show the minimap + /// - showMinimap: Toggle the visibility of the minimap. /// - reformatAtColumn: The column to reformat at /// - showReformattingGuide: Whether to show the reformatting guide + /// - showFoldingRibbon: Toggle the visibility of the line folding ribbon. public init( _ text: Binding, language: CodeLanguage, @@ -77,7 +79,8 @@ public struct CodeEditSourceEditor: NSViewControllerRepresentable { coordinators: [any TextViewCoordinator] = [], showMinimap: Bool, reformatAtColumn: Int, - showReformattingGuide: Bool + showReformattingGuide: Bool, + showFoldingRibbon: Bool ) { self.text = .binding(text) self.language = language @@ -107,6 +110,7 @@ public struct CodeEditSourceEditor: NSViewControllerRepresentable { self.showMinimap = showMinimap self.reformatAtColumn = reformatAtColumn self.showReformattingGuide = showReformattingGuide + self.showFoldingRibbon = showFoldingRibbon } /// Initializes a Text Editor @@ -127,6 +131,8 @@ public struct CodeEditSourceEditor: NSViewControllerRepresentable { /// the default `TreeSitterClient` highlighter. /// - contentInsets: Insets to use to offset the content in the enclosing scroll view. Leave as `nil` to let the /// scroll view automatically adjust content insets. + /// - additionalTextInsets: A set of extra text insets to indent only *text* content. Does not effect + /// decorations like the find panel. /// - isEditable: A Boolean value that controls whether the text view allows the user to edit text. /// - isSelectable: A Boolean value that controls whether the text view allows the user to select text. If this /// value is true, and `isEditable` is false, the editor is selectable but not editable. @@ -134,11 +140,13 @@ public struct CodeEditSourceEditor: NSViewControllerRepresentable { /// character's width between characters, etc. Defaults to `1.0` /// - bracketPairEmphasis: The type of highlight to use to highlight bracket pairs. /// See `BracketPairEmphasis` for more information. Defaults to `nil` + /// - useSystemCursor: Use the system cursor instead of the default line cursor. Only available after macOS 14. /// - undoManager: The undo manager for the text view. Defaults to `nil`, which will create a new CEUndoManager /// - coordinators: Any text coordinators for the view to use. See ``TextViewCoordinator`` for more information. - /// - showMinimap: Whether to show the minimap + /// - showMinimap: Toggle the visibility of the minimap. /// - reformatAtColumn: The column to reformat at /// - showReformattingGuide: Whether to show the reformatting guide + /// - showFoldingRibbon: Toggle the visibility of the line folding ribbon. public init( _ text: NSTextStorage, language: CodeLanguage, @@ -163,7 +171,8 @@ public struct CodeEditSourceEditor: NSViewControllerRepresentable { coordinators: [any TextViewCoordinator] = [], showMinimap: Bool, reformatAtColumn: Int, - showReformattingGuide: Bool + showReformattingGuide: Bool, + showFoldingRibbon: Bool ) { self.text = .storage(text) self.language = language @@ -193,6 +202,7 @@ public struct CodeEditSourceEditor: NSViewControllerRepresentable { self.showMinimap = showMinimap self.reformatAtColumn = reformatAtColumn self.showReformattingGuide = showReformattingGuide + self.showFoldingRibbon = showFoldingRibbon } package var text: TextAPI @@ -219,6 +229,7 @@ public struct CodeEditSourceEditor: NSViewControllerRepresentable { package var showMinimap: Bool private var reformatAtColumn: Int private var showReformattingGuide: Bool + package var showFoldingRibbon: Bool public typealias NSViewControllerType = TextViewController @@ -247,7 +258,8 @@ public struct CodeEditSourceEditor: NSViewControllerRepresentable { coordinators: coordinators, showMinimap: showMinimap, reformatAtColumn: reformatAtColumn, - showReformattingGuide: showReformattingGuide + showReformattingGuide: showReformattingGuide, + showFoldingRibbon: showFoldingRibbon ) switch text { case .binding(let binding): @@ -336,6 +348,7 @@ public struct CodeEditSourceEditor: NSViewControllerRepresentable { controller.contentInsets = contentInsets controller.additionalTextInsets = additionalTextInsets controller.showMinimap = showMinimap + controller.showFoldingRibbon = showFoldingRibbon if controller.indentOption != indentOption { controller.indentOption = indentOption @@ -397,6 +410,7 @@ public struct CodeEditSourceEditor: NSViewControllerRepresentable { controller.showMinimap == showMinimap && controller.reformatAtColumn == reformatAtColumn && controller.showReformattingGuide == showReformattingGuide && + controller.showFoldingRibbon == showFoldingRibbon && areHighlightProvidersEqual(controller: controller, coordinator: coordinator) } diff --git a/Sources/CodeEditSourceEditor/Controller/TextViewController+GutterViewDelegate.swift b/Sources/CodeEditSourceEditor/Controller/TextViewController+GutterViewDelegate.swift index 20abe130c..d0abfaaa8 100644 --- a/Sources/CodeEditSourceEditor/Controller/TextViewController+GutterViewDelegate.swift +++ b/Sources/CodeEditSourceEditor/Controller/TextViewController+GutterViewDelegate.swift @@ -8,8 +8,7 @@ import Foundation extension TextViewController: GutterViewDelegate { - public func gutterViewWidthDidUpdate(newWidth: CGFloat) { - gutterView?.frame.size.width = newWidth - textView?.textInsets = textViewInsets + public func gutterViewWidthDidUpdate() { + updateTextInsets() } } diff --git a/Sources/CodeEditSourceEditor/Controller/TextViewController+LoadView.swift b/Sources/CodeEditSourceEditor/Controller/TextViewController+Lifecycle.swift similarity index 97% rename from Sources/CodeEditSourceEditor/Controller/TextViewController+LoadView.swift rename to Sources/CodeEditSourceEditor/Controller/TextViewController+Lifecycle.swift index 1b960ed48..86384a6b2 100644 --- a/Sources/CodeEditSourceEditor/Controller/TextViewController+LoadView.swift +++ b/Sources/CodeEditSourceEditor/Controller/TextViewController+Lifecycle.swift @@ -9,6 +9,13 @@ import CodeEditTextView import AppKit extension TextViewController { + override public func viewWillAppear() { + super.viewWillAppear() + // The calculation this causes cannot be done until the view knows it's final position + updateTextInsets() + minimapView.layout() + } + override public func loadView() { super.loadView() @@ -106,9 +113,7 @@ extension TextViewController { object: scrollView.contentView, queue: .main ) { [weak self] notification in - guard let clipView = notification.object as? NSClipView, - let textView = self?.textView else { return } - textView.updatedViewport(self?.scrollView.documentVisibleRect ?? .zero) + guard let clipView = notification.object as? NSClipView else { return } self?.gutterView.needsDisplay = true self?.minimapXConstraint?.constant = clipView.bounds.origin.x } @@ -120,7 +125,6 @@ extension TextViewController { object: scrollView.contentView, queue: .main ) { [weak self] _ in - self?.textView.updatedViewport(self?.scrollView.documentVisibleRect ?? .zero) self?.gutterView.needsDisplay = true self?.emphasisManager?.removeEmphases(for: EmphasisGroup.brackets) self?.updateTextInsets() diff --git a/Sources/CodeEditSourceEditor/Controller/TextViewController+StyleViews.swift b/Sources/CodeEditSourceEditor/Controller/TextViewController+StyleViews.swift index 2cc2f13b5..579d5c4ef 100644 --- a/Sources/CodeEditSourceEditor/Controller/TextViewController+StyleViews.swift +++ b/Sources/CodeEditSourceEditor/Controller/TextViewController+StyleViews.swift @@ -56,6 +56,7 @@ extension TextViewController { gutterView.selectedLineTextColor = nil gutterView.selectedLineColor = .clear } + gutterView.showFoldingRibbon = showFoldingRibbon } /// Style the scroll view. diff --git a/Sources/CodeEditSourceEditor/Controller/TextViewController.swift b/Sources/CodeEditSourceEditor/Controller/TextViewController.swift index 8d3b8b69f..758e5dc74 100644 --- a/Sources/CodeEditSourceEditor/Controller/TextViewController.swift +++ b/Sources/CodeEditSourceEditor/Controller/TextViewController.swift @@ -204,6 +204,13 @@ public class TextViewController: NSViewController { // swiftlint:disable:this ty } } + /// Toggles the line folding ribbon in the gutter view. + public var showFoldingRibbon: Bool { + didSet { + gutterView?.showFoldingRibbon = showFoldingRibbon + } + } + var textCoordinators: [WeakCoordinator] = [] var highlighter: Highlighter? @@ -229,7 +236,7 @@ public class TextViewController: NSViewController { // swiftlint:disable:this ty package var textViewInsets: HorizontalEdgeInsets { HorizontalEdgeInsets( - left: gutterView.gutterWidth, + left: gutterView?.frame.width ?? 0.0, right: textViewTrailingInset ) } @@ -265,6 +272,9 @@ public class TextViewController: NSViewController { // swiftlint:disable:this ty } } + /// A default `NSParagraphStyle` with a set `lineHeight` + package lazy var paragraphStyle: NSMutableParagraphStyle = generateParagraphStyle() + // MARK: Init init( @@ -291,7 +301,8 @@ public class TextViewController: NSViewController { // swiftlint:disable:this ty coordinators: [TextViewCoordinator] = [], showMinimap: Bool, reformatAtColumn: Int = 80, - showReformattingGuide: Bool = false + showReformattingGuide: Bool = false, + showFoldingRibbon: Bool ) { self.language = language self.font = font @@ -314,6 +325,7 @@ public class TextViewController: NSViewController { // swiftlint:disable:this ty self.showMinimap = showMinimap self.reformatAtColumn = reformatAtColumn self.showReformattingGuide = showReformattingGuide + self.showFoldingRibbon = showFoldingRibbon super.init(nibName: nil, bundle: nil) @@ -362,18 +374,6 @@ public class TextViewController: NSViewController { // swiftlint:disable:this ty self.gutterView.setNeedsDisplay(self.gutterView.frame) } - // MARK: Paragraph Style - - /// A default `NSParagraphStyle` with a set `lineHeight` - package lazy var paragraphStyle: NSMutableParagraphStyle = generateParagraphStyle() - - override public func viewWillAppear() { - super.viewWillAppear() - // The calculation this causes cannot be done until the view knows it's final position - updateTextInsets() - minimapView.layout() - } - deinit { if let highlighter { textView.removeStorageDelegate(highlighter) diff --git a/Sources/CodeEditSourceEditor/Extensions/TextView+/TextView+TextFormation.swift b/Sources/CodeEditSourceEditor/Extensions/TextView+/TextView+TextFormation.swift index 346410874..853773412 100644 --- a/Sources/CodeEditSourceEditor/Extensions/TextView+/TextView+TextFormation.swift +++ b/Sources/CodeEditSourceEditor/Extensions/TextView+/TextView+TextFormation.swift @@ -45,5 +45,6 @@ extension TextView: TextInterface { in: mutation.range, replacementLength: (mutation.string as NSString).length ) + layoutManager.setNeedsLayout() } } diff --git a/Sources/CodeEditSourceEditor/Gutter/GutterView.swift b/Sources/CodeEditSourceEditor/Gutter/GutterView.swift index 0d9cf5b04..a8ca75fb2 100644 --- a/Sources/CodeEditSourceEditor/Gutter/GutterView.swift +++ b/Sources/CodeEditSourceEditor/Gutter/GutterView.swift @@ -10,7 +10,7 @@ import CodeEditTextView import CodeEditTextViewObjC public protocol GutterViewDelegate: AnyObject { - func gutterViewWidthDidUpdate(newWidth: CGFloat) + func gutterViewWidthDidUpdate() } /// The gutter view displays line numbers that match the text view's line indexes. @@ -69,12 +69,17 @@ public class GutterView: NSView { @Invalidating(.display) var selectedLineColor: NSColor = NSColor.selectedTextBackgroundColor.withSystemEffect(.disabled) - /// The required width of the entire gutter, including padding. - private(set) public var gutterWidth: CGFloat = 0 + /// Toggle the visibility of the line fold decoration. + @Invalidating(.display) + public var showFoldingRibbon: Bool = true { + didSet { + foldingRibbon.isHidden = !showFoldingRibbon + } + } private weak var textView: TextView? private weak var delegate: GutterViewDelegate? - private var maxWidth: CGFloat = 0 + private var maxLineNumberWidth: CGFloat = 0 /// The maximum number of digits found for a line number. private var maxLineLength: Int = 0 @@ -91,10 +96,35 @@ public class GutterView: NSView { fontLineHeight = (ascent + descent + leading) } + /// The view that draws the fold decoration in the gutter. + private var foldingRibbon: FoldingRibbonView + + /// Syntax helper for determining the required space for the folding ribbon. + private var foldingRibbonWidth: CGFloat { + if foldingRibbon.isHidden { 0.0 } else { FoldingRibbonView.width } + } + + /// The gutter's y positions start at the top of the document and increase as it moves down the screen. override public var isFlipped: Bool { true } + /// We override this variable so we can update the ``foldingRibbon``'s frame to match the gutter. + override public var frame: NSRect { + get { + super.frame + } + set { + super.frame = newValue + foldingRibbon.frame = NSRect( + x: newValue.width - edgeInsets.trailing - foldingRibbonWidth, + y: 0.0, + width: foldingRibbonWidth, + height: newValue.height + ) + } + } + public init( font: NSFont, textColor: NSColor, @@ -108,6 +138,8 @@ public class GutterView: NSView { self.textView = textView self.delegate = delegate + foldingRibbon = FoldingRibbonView(textView: textView, levelProvider: nil) + super.init(frame: .zero) clipsToBounds = true wantsLayer = true @@ -115,6 +147,8 @@ public class GutterView: NSView { translatesAutoresizingMaskIntoConstraints = false layer?.masksToBounds = true + addSubview(foldingRibbon) + NotificationCenter.default.addObserver( forName: TextSelectionManager.selectionChangedNotification, object: nil, @@ -124,22 +158,17 @@ public class GutterView: NSView { } } - override init(frame frameRect: NSRect) { - super.init(frame: frameRect) - } - required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } - /// Updates the width of the gutter if needed. + /// Updates the width of the gutter if needed to match the maximum line number found as well as the folding ribbon. func updateWidthIfNeeded() { guard let textView else { return } let attributes: [NSAttributedString.Key: Any] = [ .font: font, .foregroundColor: textColor ] - let originalMaxWidth = maxWidth // Reserve at least 3 digits of space no matter what let lineStorageDigits = max(3, String(textView.layoutManager.lineCount).count) @@ -149,27 +178,36 @@ public class GutterView: NSView { NSAttributedString(string: String(repeating: "0", count: lineStorageDigits), attributes: attributes) ) let width = CTLineGetTypographicBounds(maxCtLine, nil, nil, nil) - maxWidth = max(maxWidth, width) + maxLineNumberWidth = max(maxLineNumberWidth, width) maxLineLength = lineStorageDigits } - if originalMaxWidth != maxWidth { - gutterWidth = maxWidth + edgeInsets.horizontal - delegate?.gutterViewWidthDidUpdate(newWidth: maxWidth + edgeInsets.horizontal) + let newWidth = maxLineNumberWidth + edgeInsets.horizontal + foldingRibbonWidth + if frame.size.width != newWidth { + frame.size.width = newWidth + delegate?.gutterViewWidthDidUpdate() } } - private func drawBackground(_ context: CGContext) { + /// Fills the gutter background color. + /// - Parameters: + /// - context: The drawing context to draw in. + /// - dirtyRect: A rect to draw in, received from ``draw(_:)``. + private func drawBackground(_ context: CGContext, dirtyRect: NSRect) { guard let backgroundColor else { return } - let xPos = backgroundEdgeInsets.leading - let width = gutterWidth - backgroundEdgeInsets.trailing + let minX = max(backgroundEdgeInsets.leading, dirtyRect.minX) + let maxX = min(frame.width - backgroundEdgeInsets.trailing, dirtyRect.maxX) + let width = maxX - minX context.saveGState() context.setFillColor(backgroundColor.cgColor) - context.fill(CGRect(x: xPos, y: 0, width: width, height: frame.height)) + context.fill(CGRect(x: minX, y: dirtyRect.minY, width: width, height: dirtyRect.height)) context.restoreGState() } + /// Draws selected line backgrounds from the text view's selection manager into the gutter view, making the + /// selection background appear seamless between the gutter and text view. + /// - Parameter context: The drawing context to use. private func drawSelectedLines(_ context: CGContext) { guard let textView = textView, let selectionManager = textView.selectionManager, @@ -183,7 +221,7 @@ public class GutterView: NSView { context.setFillColor(selectedLineColor.cgColor) let xPos = backgroundEdgeInsets.leading - let width = gutterWidth - backgroundEdgeInsets.trailing + let width = frame.width - backgroundEdgeInsets.trailing for selection in selectionManager.textSelections where selection.range.isEmpty { guard let line = textView.layoutManager.textLineForOffset(selection.range.location), @@ -205,7 +243,11 @@ public class GutterView: NSView { context.restoreGState() } - private func drawLineNumbers(_ context: CGContext) { + /// Draw line numbers in the gutter, limited to a drawing rect. + /// - Parameters: + /// - context: The drawing context to draw in. + /// - dirtyRect: A rect to draw in, received from ``draw(_:)``. + private func drawLineNumbers(_ context: CGContext, dirtyRect: NSRect) { guard let textView = textView else { return } var attributes: [NSAttributedString.Key: Any] = [.font: font] @@ -219,9 +261,10 @@ public class GutterView: NSView { } context.saveGState() + context.clip(to: dirtyRect) context.textMatrix = CGAffineTransform(scaleX: 1, y: -1) - for linePosition in textView.layoutManager.visibleLines() { + for linePosition in textView.layoutManager.linesStartingAt(dirtyRect.minY, until: dirtyRect.maxY) { if selectionRangeMap.intersects(integersIn: linePosition.range) { attributes[.foregroundColor] = selectedLineTextColor ?? textColor } else { @@ -238,7 +281,7 @@ public class GutterView: NSView { let yPos = linePosition.yPos + ascent + (fragment?.heightDifference ?? 0)/2 + fontHeightDifference // Leading padding + (width - linewidth) - let xPos = edgeInsets.leading + (maxWidth - lineNumberWidth) + let xPos = edgeInsets.leading + (maxLineNumberWidth - lineNumberWidth) ContextSetHiddenSmoothingStyle(context, 16) @@ -249,18 +292,20 @@ public class GutterView: NSView { context.restoreGState() } + override public func setNeedsDisplay(_ invalidRect: NSRect) { + updateWidthIfNeeded() + super.setNeedsDisplay(invalidRect) + } + override public func draw(_ dirtyRect: NSRect) { guard let context = NSGraphicsContext.current?.cgContext else { return } - CATransaction.begin() - superview?.clipsToBounds = false - superview?.layer?.masksToBounds = false - updateWidthIfNeeded() - drawBackground(context) + context.saveGState() + drawBackground(context, dirtyRect: dirtyRect) drawSelectedLines(context) - drawLineNumbers(context) - CATransaction.commit() + drawLineNumbers(context, dirtyRect: dirtyRect) + context.restoreGState() } deinit { diff --git a/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldRange.swift b/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldRange.swift new file mode 100644 index 000000000..714a48a06 --- /dev/null +++ b/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldRange.swift @@ -0,0 +1,25 @@ +// +// FoldRange.swift +// CodeEditSourceEditor +// +// Created by Khan Winter on 5/7/25. +// + +import Foundation + +/// Represents a recursive folded range +class FoldRange { + var lineRange: ClosedRange + var range: NSRange + /// Ordered array of ranges that are nested in this fold. + var subFolds: [FoldRange] + + weak var parent: FoldRange? + + init(lineRange: ClosedRange, range: NSRange, parent: FoldRange?, subFolds: [FoldRange]) { + self.lineRange = lineRange + self.range = range + self.subFolds = subFolds + self.parent = parent + } +} diff --git a/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift b/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift new file mode 100644 index 000000000..3dca3fdec --- /dev/null +++ b/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift @@ -0,0 +1,193 @@ +// +// FoldingRibbonView.swift +// CodeEditSourceEditor +// +// Created by Khan Winter on 5/6/25. +// + +import Foundation +import AppKit +import CodeEditTextView + +/// Displays the code folding ribbon in the ``GutterView``. +/// +/// This view draws its contents +class FoldingRibbonView: NSView { + static let width: CGFloat = 7.0 + + private var model: LineFoldingModel + private var hoveringLine: Int? + + @Invalidating(.display) + var backgroundColor: NSColor = NSColor.controlBackgroundColor + + @Invalidating(.display) + var markerColor = CGColor(gray: 0.0, alpha: 0.1) + + override public var isFlipped: Bool { + true + } + + init(textView: TextView, levelProvider: LineFoldProvider?) { + self.model = LineFoldingModel( + textView: textView, + levelProvider: levelProvider + ) + super.init(frame: .zero) + layerContentsRedrawPolicy = .onSetNeedsDisplay + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + override func updateTrackingAreas() { + trackingAreas.forEach(removeTrackingArea) + let area = NSTrackingArea( + rect: bounds, + options: [.mouseMoved, .activeInKeyWindow], + owner: self, + userInfo: nil + ) + addTrackingArea(area) + } + + override func mouseMoved(with event: NSEvent) { + let pointInView = convert(event.locationInWindow, from: nil) + hoveringLine = model.textView?.layoutManager.textLineForPosition(pointInView.y)?.index + } + + struct FoldMarkerDrawingContext { + let range: ClosedRange + let depth: UInt + let hoveringLine: Int? + + func increment() -> FoldMarkerDrawingContext { + FoldMarkerDrawingContext( + range: range, + depth: depth + 1, + hoveringLine: isHovering() ? nil : hoveringLine + ) + } + + func isHovering() -> Bool { + guard let hoveringLine else { + return false + } + return range.contains(hoveringLine) + } + } + + override func draw(_ dirtyRect: NSRect) { + guard let context = NSGraphicsContext.current?.cgContext, + let layoutManager = model.textView?.layoutManager else { + return + } + + context.saveGState() + context.clip(to: dirtyRect) + + // Find the visible lines in the rect AppKit is asking us to draw. + guard let rangeStart = layoutManager.textLineForPosition(dirtyRect.minY), + let rangeEnd = layoutManager.textLineForPosition(dirtyRect.maxY) else { + return + } + let lineRange = rangeStart.index...rangeEnd.index + + context.setFillColor(markerColor) + let folds = model.folds(in: lineRange) + for fold in folds { + drawFoldMarker( + fold, + markerContext: FoldMarkerDrawingContext(range: lineRange, depth: 0, hoveringLine: hoveringLine), + in: context, + using: layoutManager + ) + } + + context.restoreGState() + } + + /// Draw a single fold marker for a fold. + /// + /// Ensure the correct fill color is set on the drawing context before calling. + /// + /// - Parameters: + /// - fold: The fold to draw. + /// - markerContext: The context in which the fold is being drawn, including the depth and if a line is + /// being hovered. + /// - context: The drawing context to use. + /// - layoutManager: A layout manager used to retrieve position information for lines. + private func drawFoldMarker( + _ fold: FoldRange, + markerContext: FoldMarkerDrawingContext, + in context: CGContext, + using layoutManager: TextLayoutManager + ) { + guard let minYPosition = layoutManager.textLineForIndex(fold.lineRange.lowerBound)?.yPos, + let maxPosition = layoutManager.textLineForIndex(fold.lineRange.upperBound) else { + return + } + + let maxYPosition = maxPosition.yPos + maxPosition.height + + // TODO: Draw a single line when folds are adjacent + + if markerContext.isHovering() { + // TODO: Handle hover state + } else { + let plainRect = NSRect(x: 0, y: minYPosition + 1, width: 7, height: maxYPosition - minYPosition - 2) + let roundedRect = NSBezierPath(roundedRect: plainRect, xRadius: 3.5, yRadius: 3.5) + + context.addPath(roundedRect.cgPathFallback) + context.drawPath(using: .fill) + + // Add small white line if we're overlapping with other markers + if markerContext.depth != 0 { + drawOutline( + minYPosition: minYPosition, + maxYPosition: maxYPosition, + originalPath: roundedRect, + in: context + ) + } + } + + // Draw subfolds + for subFold in fold.subFolds.filter({ $0.lineRange.overlaps(markerContext.range) }) { + drawFoldMarker(subFold, markerContext: markerContext.increment(), in: context, using: layoutManager) + } + } + + /// Draws a rounded outline for a rectangle, creating the small, light, outline around each fold indicator. + /// + /// This function does not change fill colors for the given context. + /// + /// - Parameters: + /// - minYPosition: The minimum y position of the rectangle to outline. + /// - maxYPosition: The maximum y position of the rectangle to outline. + /// - originalPath: The original bezier path for the rounded rectangle. + /// - context: The context to draw in. + private func drawOutline( + minYPosition: CGFloat, + maxYPosition: CGFloat, + originalPath: NSBezierPath, + in context: CGContext + ) { + context.saveGState() + + let plainRect = NSRect(x: -0.5, y: minYPosition, width: 8, height: maxYPosition - minYPosition) + let roundedRect = NSBezierPath(roundedRect: plainRect, xRadius: 4, yRadius: 4) + + let combined = CGMutablePath() + combined.addPath(roundedRect.cgPathFallback) + combined.addPath(originalPath.cgPathFallback) + + context.clip(to: CGRect(x: 0, y: minYPosition, width: 7, height: maxYPosition - minYPosition)) + context.addPath(combined) + context.setFillColor(CGColor(gray: 1.0, alpha: 0.4)) + context.drawPath(using: .eoFill) + + context.restoreGState() + } +} diff --git a/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldProvider.swift b/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldProvider.swift new file mode 100644 index 000000000..64a15ae71 --- /dev/null +++ b/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldProvider.swift @@ -0,0 +1,13 @@ +// +// LineFoldProvider.swift +// CodeEditSourceEditor +// +// Created by Khan Winter on 5/7/25. +// + +import AppKit +import CodeEditTextView + +protocol LineFoldProvider: AnyObject { + func foldLevelAtLine(_ lineNumber: Int, layoutManager: TextLayoutManager, textStorage: NSTextStorage) -> Int? +} diff --git a/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldingModel.swift b/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldingModel.swift new file mode 100644 index 000000000..932728c04 --- /dev/null +++ b/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldingModel.swift @@ -0,0 +1,151 @@ +// +// LineFoldingModel.swift +// CodeEditSourceEditor +// +// Created by Khan Winter on 5/7/25. +// + +import AppKit +import CodeEditTextView + +/// # Basic Premise +/// +/// We need to update, delete, or add fold ranges in the invalidated lines. +/// +/// # Implementation +/// +/// - For each line in the document, put its indent level into a list. +/// - Loop through the list, creating nested folds as indents go up and down. +/// +class LineFoldingModel: NSObject, NSTextStorageDelegate { + /// An ordered tree of fold ranges in a document. Can be traversed using ``FoldRange/parent`` + /// and ``FoldRange/subFolds``. + private var foldCache: [FoldRange] = [] + + weak var levelProvider: LineFoldProvider? + weak var textView: TextView? + + init(textView: TextView, levelProvider: LineFoldProvider?) { + self.textView = textView + self.levelProvider = levelProvider + super.init() + textView.addStorageDelegate(self) + buildFoldsForDocument() + } + + func folds(in lineRange: ClosedRange) -> [FoldRange] { + foldCache.filter({ $0.lineRange.overlaps(lineRange) }) + } + + func buildFoldsForDocument() { + guard let textView, let levelProvider else { return } + foldCache.removeAll(keepingCapacity: true) + + var currentFold: FoldRange? + var currentDepth: Int = 0 + for linePosition in textView.layoutManager.linesInRange(textView.documentRange) { + guard let foldDepth = levelProvider.foldLevelAtLine( + linePosition.index, + layoutManager: textView.layoutManager, + textStorage: textView.textStorage + ) else { + continue + } + // Start a new fold + if foldDepth > currentDepth { + let newFold = FoldRange( + lineRange: (linePosition.index - 1)...(linePosition.index - 1), + range: .zero, + parent: currentFold, + subFolds: [] + ) + + if currentDepth == 0 { + foldCache.append(newFold) + } + currentFold?.subFolds.append(newFold) + currentFold = newFold + } else if foldDepth < currentDepth { + // End this fold + if let fold = currentFold { + fold.lineRange = fold.lineRange.lowerBound...linePosition.index + + if foldDepth == 0 { + currentFold = nil + } + } + currentFold = currentFold?.parent + } + + currentDepth = foldDepth + } + } + + func invalidateLine(lineNumber: Int) { + // TODO: Check if we need to rebuild, or even better, incrementally update the tree. + + // Temporary + buildFoldsForDocument() + } + + func textStorage( + _ textStorage: NSTextStorage, + didProcessEditing editedMask: NSTextStorageEditActions, + range editedRange: NSRange, + changeInLength delta: Int + ) { + guard editedMask.contains(.editedCharacters), + let lineNumber = textView?.layoutManager.textLineForOffset(editedRange.location)?.index else { + return + } + invalidateLine(lineNumber: lineNumber) + } +} + +// MARK: - Search Folds + +private extension LineFoldingModel { + /// Finds the deepest cached depth of the fold for a line number. + /// - Parameter lineNumber: The line number to query, zero-indexed. + /// - Returns: The deepest cached depth of the fold if it was found. + func getCachedDepthAt(lineNumber: Int) -> Int? { + return findCachedFoldAt(lineNumber: lineNumber)?.depth + } + + /// Finds the deepest cached fold and depth of the fold for a line number. + /// - Parameter lineNumber: The line number to query, zero-indexed. + /// - Returns: The deepest cached fold and depth of the fold if it was found. + func findCachedFoldAt(lineNumber: Int) -> (range: FoldRange, depth: Int)? { + binarySearchFoldsArray(lineNumber: lineNumber, folds: foldCache, currentDepth: 0) + } + + /// A generic function for searching an ordered array of fold ranges. + /// - Returns: The found range and depth it was found at, if it exists. + func binarySearchFoldsArray( + lineNumber: Int, + folds: borrowing [FoldRange], + currentDepth: Int + ) -> (range: FoldRange, depth: Int)? { + var low = 0 + var high = folds.count - 1 + + while low <= high { + let mid = (low + high) / 2 + let fold = folds[mid] + + if fold.lineRange.contains(lineNumber) { + // Search deeper into subFolds, if any + return binarySearchFoldsArray( + lineNumber: lineNumber, + folds: fold.subFolds, + currentDepth: currentDepth + 1 + ) ?? (fold, currentDepth) + } else if lineNumber < fold.lineRange.lowerBound { + high = mid - 1 + } else { + low = mid + 1 + } + } + return nil + } +} diff --git a/Sources/CodeEditSourceEditor/Minimap/MinimapLineRenderer.swift b/Sources/CodeEditSourceEditor/Minimap/MinimapLineRenderer.swift index f4de2e376..0a5a050f3 100644 --- a/Sources/CodeEditSourceEditor/Minimap/MinimapLineRenderer.swift +++ b/Sources/CodeEditSourceEditor/Minimap/MinimapLineRenderer.swift @@ -21,7 +21,7 @@ final class MinimapLineRenderer: TextLayoutManagerRenderDelegate { range: NSRange, stringRef: NSTextStorage, markedRanges: MarkedRanges?, - breakStrategy: LineBreakStrategy + attachments: [AnyTextAttachment] ) { let maxWidth: CGFloat = if let textView, textView.wrapLines { textView.layoutManager.maxLineLayoutWidth @@ -34,7 +34,7 @@ final class MinimapLineRenderer: TextLayoutManagerRenderDelegate { range: range, stringRef: stringRef, markedRanges: markedRanges, - breakStrategy: breakStrategy + attachments: [] ) // Make all fragments 2px tall @@ -62,6 +62,12 @@ final class MinimapLineRenderer: TextLayoutManagerRenderDelegate { func characterXPosition(in lineFragment: LineFragment, for offset: Int) -> CGFloat { // Offset is relative to the whole line, the CTLine is too. - return 8 + (CGFloat(offset - CTLineGetStringRange(lineFragment.ctLine).location) * 1.5) + guard let content = lineFragment.contents.first else { return 0.0 } + switch content.data { + case .text(let ctLine): + return 8 + (CGFloat(offset - CTLineGetStringRange(ctLine).location) * 1.5) + case .attachment: + return 0.0 + } } } diff --git a/Tests/CodeEditSourceEditorTests/Mock.swift b/Tests/CodeEditSourceEditorTests/Mock.swift index 1eb96c0c4..fd4360ad3 100644 --- a/Tests/CodeEditSourceEditorTests/Mock.swift +++ b/Tests/CodeEditSourceEditorTests/Mock.swift @@ -64,7 +64,8 @@ enum Mock { letterSpacing: 1.0, useSystemCursor: false, bracketPairEmphasis: .flash, - showMinimap: true + showMinimap: true, + showFoldingRibbon: true ) } diff --git a/Tests/CodeEditSourceEditorTests/TextViewControllerTests.swift b/Tests/CodeEditSourceEditorTests/TextViewControllerTests.swift index 956a763d9..a1329de4e 100644 --- a/Tests/CodeEditSourceEditorTests/TextViewControllerTests.swift +++ b/Tests/CodeEditSourceEditorTests/TextViewControllerTests.swift @@ -5,7 +5,7 @@ import AppKit import SwiftUI import TextStory -// swiftlint:disable all +// swiftlint:disable:next type_body_length final class TextViewControllerTests: XCTestCase { var controller: TextViewController! @@ -32,7 +32,8 @@ final class TextViewControllerTests: XCTestCase { letterSpacing: 1.0, useSystemCursor: false, bracketPairEmphasis: .flash, - showMinimap: true + showMinimap: true, + showFoldingRibbon: true ) controller.loadView() @@ -226,24 +227,27 @@ final class TextViewControllerTests: XCTestCase { // Insert lots of spaces controller.indentOption = .spaces(count: 1000) - controller.textView.replaceCharacters(in: NSRange(location: 0, length: controller.textView.textStorage.length), with: "") + controller.textView.replaceCharacters( + in: NSRange(location: 0, length: controller.textView.textStorage.length), + with: "" + ) controller.textView.insertText("\t", replacementRange: .zero) XCTAssertEqual(controller.textView.string, String(repeating: " ", count: 1000)) } - func test_letterSpacing() { + func test_letterSpacing() throws { let font: NSFont = .monospacedSystemFont(ofSize: 11, weight: .medium) controller.letterSpacing = 1.0 XCTAssertEqual( - controller.attributesFor(nil)[.kern]! as! CGFloat, + try XCTUnwrap(controller.attributesFor(nil)[.kern] as? CGFloat), (" " as NSString).size(withAttributes: [.font: font]).width * 0.0 ) controller.letterSpacing = 2.0 XCTAssertEqual( - controller.attributesFor(nil)[.kern]! as! CGFloat, + try XCTUnwrap(controller.attributesFor(nil)[.kern] as? CGFloat), (" " as NSString).size(withAttributes: [.font: font]).width * 1.0 ) @@ -259,7 +263,7 @@ final class TextViewControllerTests: XCTestCase { controller.scrollView.setFrameSize(NSSize(width: 500, height: 500)) controller.viewDidLoad() - let _ = controller.textView.becomeFirstResponder() + _ = controller.textView.becomeFirstResponder() controller.bracketPairEmphasis = nil controller.setText("{ Lorem Ipsum {} }") controller.setCursorPositions([CursorPosition(line: 1, column: 2)]) // After first opening { @@ -298,7 +302,7 @@ final class TextViewControllerTests: XCTestCase { } func test_findClosingPair() { - let _ = controller.textView.becomeFirstResponder() + _ = controller.textView.becomeFirstResponder() controller.textView.string = "{ Lorem Ipsum {} }" var idx: Int? @@ -313,28 +317,40 @@ final class TextViewControllerTests: XCTestCase { // Test extra pair controller.textView.string = "{ Loren Ipsum {}} }" idx = controller.findClosingPair("{", "}", from: 1, limit: 19, reverse: false) - XCTAssert(idx == 16, "Walking forwards with extra bracket pair failed. Expected `16`, found: `\(String(describing: idx))`") + XCTAssert( + idx == 16, + "Walking forwards with extra bracket pair failed. Expected `16`, found: `\(String(describing: idx))`" + ) // Text extra pair backwards controller.textView.string = "{ Loren Ipsum {{} }" idx = controller.findClosingPair("}", "{", from: 18, limit: 0, reverse: true) - XCTAssert(idx == 14, "Walking backwards with extra bracket pair failed. Expected `14`, found: `\(String(describing: idx))`") + XCTAssert( + idx == 14, + "Walking backwards with extra bracket pair failed. Expected `14`, found: `\(String(describing: idx))`" + ) // Test missing pair controller.textView.string = "{ Loren Ipsum { }" idx = controller.findClosingPair("{", "}", from: 1, limit: 17, reverse: false) - XCTAssert(idx == nil, "Walking forwards with missing pair failed. Expected `nil`, found: `\(String(describing: idx))`") + XCTAssert( + idx == nil, + "Walking forwards with missing pair failed. Expected `nil`, found: `\(String(describing: idx))`" + ) // Test missing pair backwards controller.textView.string = " Loren Ipsum {} }" idx = controller.findClosingPair("}", "{", from: 17, limit: 0, reverse: true) - XCTAssert(idx == nil, "Walking backwards with missing pair failed. Expected `nil`, found: `\(String(describing: idx))`") + XCTAssert( + idx == nil, + "Walking backwards with missing pair failed. Expected `nil`, found: `\(String(describing: idx))`" + ) } // MARK: Set Text func test_setText() { - let _ = controller.textView.becomeFirstResponder() + _ = controller.textView.becomeFirstResponder() controller.textView.string = "Hello World" controller.textView.selectionManager.setSelectedRange(NSRange(location: 1, length: 2)) @@ -354,7 +370,7 @@ final class TextViewControllerTests: XCTestCase { // MARK: Cursor Positions func test_cursorPositionRangeInit() { - let _ = controller.textView.becomeFirstResponder() + _ = controller.textView.becomeFirstResponder() controller.setText("Hello World") // Test adding a position returns a valid one @@ -395,7 +411,7 @@ final class TextViewControllerTests: XCTestCase { } func test_cursorPositionRowColInit() { - let _ = controller.textView.becomeFirstResponder() + _ = controller.textView.becomeFirstResponder() controller.setText("Hello World") // Test adding a position returns a valid one @@ -460,5 +476,21 @@ final class TextViewControllerTests: XCTestCase { XCTAssertEqual(controller.minimapView.frame.width, MinimapView.maxWidth) XCTAssertEqual(controller.textViewInsets.right, MinimapView.maxWidth) } + + // MARK: Folding Ribbon + + func test_foldingRibbonToggle() { + controller.setText("Hello World") + controller.showFoldingRibbon = false + XCTAssertFalse(controller.gutterView.showFoldingRibbon) + controller.gutterView.updateWidthIfNeeded() // Would be called on a display pass + let noRibbonWidth = controller.gutterView.gutterWidth + + controller.showFoldingRibbon = true + XCTAssertTrue(controller.gutterView.showFoldingRibbon) + controller.gutterView.updateWidthIfNeeded() // Would be called on a display pass + XCTAssertEqual(controller.gutterView.gutterWidth, noRibbonWidth + 7.0) + } } -// swiftlint:enable all + +// swiftlint:disable:this file_length From 91ddcecd8ded37a4ac08e1f2cfb7281c7106541c Mon Sep 17 00:00:00 2001 From: Khan Winter <35942988+thecoolwinter@users.noreply.github.com> Date: Thu, 8 May 2025 10:13:43 -0500 Subject: [PATCH 02/30] Correct Gutter Padding With Transparency, Dark Mode --- Package.resolved | 9 --- .../Gutter/GutterView.swift | 16 +++- .../LineFolding/FoldingRibbonView.swift | 76 +++++++++++++++++-- .../Gutter/LineFolding/LineFoldingModel.swift | 18 +++-- .../LineFoldingModelTests.swift | 55 ++++++++++++++ .../TextViewControllerTests.swift | 4 +- 6 files changed, 149 insertions(+), 29 deletions(-) create mode 100644 Tests/CodeEditSourceEditorTests/LineFoldingTests/LineFoldingModelTests.swift diff --git a/Package.resolved b/Package.resolved index b646b2e64..89e82645a 100644 --- a/Package.resolved +++ b/Package.resolved @@ -9,15 +9,6 @@ "version" : "0.1.20" } }, - { - "identity" : "codeedittextview", - "kind" : "remoteSourceControl", - "location" : "https://github.com/CodeEditApp/CodeEditTextView.git", - "state" : { - "revision" : "a5912e60f6bac25cd1cdf8bb532e1125b21cf7f7", - "version" : "0.10.1" - } - }, { "identity" : "rearrange", "kind" : "remoteSourceControl", diff --git a/Sources/CodeEditSourceEditor/Gutter/GutterView.swift b/Sources/CodeEditSourceEditor/Gutter/GutterView.swift index a8ca75fb2..2a5125789 100644 --- a/Sources/CodeEditSourceEditor/Gutter/GutterView.swift +++ b/Sources/CodeEditSourceEditor/Gutter/GutterView.swift @@ -57,6 +57,10 @@ public class GutterView: NSView { @Invalidating(.display) var backgroundEdgeInsets: EdgeInsets = EdgeInsets(leading: 0, trailing: 8) + /// The leading padding for the folding ribbon from the line numbers. + @Invalidating(.display) + var foldingRibbonPadding: CGFloat = 4 + @Invalidating(.display) var backgroundColor: NSColor? = NSColor.controlBackgroundColor @@ -101,7 +105,11 @@ public class GutterView: NSView { /// Syntax helper for determining the required space for the folding ribbon. private var foldingRibbonWidth: CGFloat { - if foldingRibbon.isHidden { 0.0 } else { FoldingRibbonView.width } + if foldingRibbon.isHidden { + 0.0 + } else { + FoldingRibbonView.width + foldingRibbonPadding + } } /// The gutter's y positions start at the top of the document and increase as it moves down the screen. @@ -117,7 +125,7 @@ public class GutterView: NSView { set { super.frame = newValue foldingRibbon.frame = NSRect( - x: newValue.width - edgeInsets.trailing - foldingRibbonWidth, + x: newValue.width - edgeInsets.trailing - foldingRibbonWidth + foldingRibbonPadding, y: 0.0, width: foldingRibbonWidth, height: newValue.height @@ -138,7 +146,7 @@ public class GutterView: NSView { self.textView = textView self.delegate = delegate - foldingRibbon = FoldingRibbonView(textView: textView, levelProvider: nil) + foldingRibbon = FoldingRibbonView(textView: textView, foldProvider: nil) super.init(frame: .zero) clipsToBounds = true @@ -196,7 +204,7 @@ public class GutterView: NSView { private func drawBackground(_ context: CGContext, dirtyRect: NSRect) { guard let backgroundColor else { return } let minX = max(backgroundEdgeInsets.leading, dirtyRect.minX) - let maxX = min(frame.width - backgroundEdgeInsets.trailing, dirtyRect.maxX) + let maxX = min(frame.width - backgroundEdgeInsets.trailing - foldingRibbonWidth, dirtyRect.maxX) let width = maxX - minX context.saveGState() diff --git a/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift b/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift index 3dca3fdec..aef151199 100644 --- a/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift +++ b/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift @@ -9,6 +9,47 @@ import Foundation import AppKit import CodeEditTextView +final class IndentationLineFoldProvider: LineFoldProvider { + func foldLevelAtLine(_ lineNumber: Int, layoutManager: TextLayoutManager, textStorage: NSTextStorage) -> Int? { + guard let linePosition = layoutManager.textLineForIndex(lineNumber), + let indentLevel = indentLevelForPosition(linePosition, textStorage: textStorage) else { + return nil + } + + // if let precedingLinePosition = layoutManager.textLineForIndex(lineNumber - 1), + // let precedingIndentLevel = indentLevelForPosition(precedingLinePosition, textStorage: textStorage) { + // if precedingIndentLevel > indentLevel { + // return precedingIndentLevel + // } + // } + // + // if let nextLinePosition = layoutManager.textLineForIndex(lineNumber + 1), + // let nextIndentLevel = indentLevelForPosition(nextLinePosition, textStorage: textStorage) { + // if nextIndentLevel > indentLevel { + // return nextIndentLevel + // } + // } + + return indentLevel + } + + private func indentLevelForPosition( + _ position: TextLineStorage.TextLinePosition, + textStorage: NSTextStorage + ) -> Int? { + guard let substring = textStorage.substring(from: position.range) else { + return nil + } + + return substring.utf16 // Keep NSString units + .enumerated() + .first(where: { UnicodeScalar($0.element)?.properties.isWhitespace != true })? + .offset + } +} + +let buh = IndentationLineFoldProvider() + /// Displays the code folding ribbon in the ``GutterView``. /// /// This view draws its contents @@ -22,16 +63,37 @@ class FoldingRibbonView: NSView { var backgroundColor: NSColor = NSColor.controlBackgroundColor @Invalidating(.display) - var markerColor = CGColor(gray: 0.0, alpha: 0.1) + var markerColor = NSColor(name: nil) { appearance in + return switch appearance.name { + case .aqua: + NSColor(deviceWhite: 0.0, alpha: 0.1) + case .darkAqua: + NSColor(deviceWhite: 1.0, alpha: 0.1) + default: + NSColor() + } + }.cgColor + + @Invalidating(.display) + var markerBorderColor = NSColor(name: nil) { appearance in + return switch appearance.name { + case .aqua: + NSColor(deviceWhite: 1.0, alpha: 0.4) + case .darkAqua: + NSColor(deviceWhite: 0.0, alpha: 0.4) + default: + NSColor() + } + }.cgColor override public var isFlipped: Bool { true } - init(textView: TextView, levelProvider: LineFoldProvider?) { + init(textView: TextView, foldProvider: LineFoldProvider?) { self.model = LineFoldingModel( textView: textView, - levelProvider: levelProvider + foldProvider: buh ) super.init(frame: .zero) layerContentsRedrawPolicy = .onSetNeedsDisplay @@ -95,7 +157,7 @@ class FoldingRibbonView: NSView { let lineRange = rangeStart.index...rangeEnd.index context.setFillColor(markerColor) - let folds = model.folds(in: lineRange) + let folds = model.getFolds(in: lineRange) for fold in folds { drawFoldMarker( fold, @@ -107,7 +169,7 @@ class FoldingRibbonView: NSView { context.restoreGState() } - + /// Draw a single fold marker for a fold. /// /// Ensure the correct fill color is set on the drawing context before calling. @@ -158,7 +220,7 @@ class FoldingRibbonView: NSView { drawFoldMarker(subFold, markerContext: markerContext.increment(), in: context, using: layoutManager) } } - + /// Draws a rounded outline for a rectangle, creating the small, light, outline around each fold indicator. /// /// This function does not change fill colors for the given context. @@ -185,7 +247,7 @@ class FoldingRibbonView: NSView { context.clip(to: CGRect(x: 0, y: minYPosition, width: 7, height: maxYPosition - minYPosition)) context.addPath(combined) - context.setFillColor(CGColor(gray: 1.0, alpha: 0.4)) + context.setFillColor(markerBorderColor) context.drawPath(using: .eoFill) context.restoreGState() diff --git a/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldingModel.swift b/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldingModel.swift index 932728c04..97bb0a8a9 100644 --- a/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldingModel.swift +++ b/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldingModel.swift @@ -22,35 +22,40 @@ class LineFoldingModel: NSObject, NSTextStorageDelegate { /// and ``FoldRange/subFolds``. private var foldCache: [FoldRange] = [] - weak var levelProvider: LineFoldProvider? + weak var foldProvider: LineFoldProvider? weak var textView: TextView? - init(textView: TextView, levelProvider: LineFoldProvider?) { + init(textView: TextView, foldProvider: LineFoldProvider?) { self.textView = textView - self.levelProvider = levelProvider + self.foldProvider = foldProvider super.init() textView.addStorageDelegate(self) buildFoldsForDocument() } - func folds(in lineRange: ClosedRange) -> [FoldRange] { + func getFolds(in lineRange: ClosedRange) -> [FoldRange] { foldCache.filter({ $0.lineRange.overlaps(lineRange) }) } + /// Build out the ``foldCache`` for the entire document. + /// + /// For each line in the document, find the indentation level using the ``levelProvider``. At each line, if the + /// indent increases from the previous line, we start a new fold. If it decreases we end the fold we were in. func buildFoldsForDocument() { - guard let textView, let levelProvider else { return } + guard let textView, let foldProvider else { return } foldCache.removeAll(keepingCapacity: true) var currentFold: FoldRange? var currentDepth: Int = 0 for linePosition in textView.layoutManager.linesInRange(textView.documentRange) { - guard let foldDepth = levelProvider.foldLevelAtLine( + guard let foldDepth = foldProvider.foldLevelAtLine( linePosition.index, layoutManager: textView.layoutManager, textStorage: textView.textStorage ) else { continue } + print(foldDepth, linePosition.index) // Start a new fold if foldDepth > currentDepth { let newFold = FoldRange( @@ -59,7 +64,6 @@ class LineFoldingModel: NSObject, NSTextStorageDelegate { parent: currentFold, subFolds: [] ) - if currentDepth == 0 { foldCache.append(newFold) } diff --git a/Tests/CodeEditSourceEditorTests/LineFoldingTests/LineFoldingModelTests.swift b/Tests/CodeEditSourceEditorTests/LineFoldingTests/LineFoldingModelTests.swift new file mode 100644 index 000000000..4ba76f767 --- /dev/null +++ b/Tests/CodeEditSourceEditorTests/LineFoldingTests/LineFoldingModelTests.swift @@ -0,0 +1,55 @@ +// +// LineFoldingModelTests.swift +// CodeEditSourceEditor +// +// Created by Khan Winter on 5/8/25. +// + +import Testing +import AppKit +import CodeEditTextView +@testable import CodeEditSourceEditor + +@Suite +@MainActor +struct LineFoldingModelTests { + /// Makes a fold pattern that increases until halfway through the document then goes back to zero. + class HillPatternFoldProvider: LineFoldProvider { + func foldLevelAtLine(_ lineNumber: Int, layoutManager: TextLayoutManager, textStorage: NSTextStorage) -> Int? { + let halfLineCount = (layoutManager.lineCount / 2) - 1 + + return if lineNumber > halfLineCount { + layoutManager.lineCount - 2 - lineNumber + } else { + lineNumber + } + } + } + + let textView: TextView + let model: LineFoldingModel + + init() { + textView = TextView(string: "A\nB\nC\nD\nE\nF\n") + textView.frame = NSRect(x: 0, y: 0, width: 1000, height: 1000) + textView.updatedViewport(NSRect(x: 0, y: 0, width: 1000, height: 1000)) + model = LineFoldingModel(textView: textView, foldProvider: nil) + } + + /// A little unintuitive but we only expect two folds with this. Our provider goes 0-1-2-2-1-0, but we don't + /// make folds for indent level 0. We also expect folds to start on the lines *before* the indent increases and + /// after it decreases, so the fold covers the start/end of the region being folded. + @Test + func buildFoldsForDocument() throws { + let provider = HillPatternFoldProvider() + model.foldProvider = provider + + model.buildFoldsForDocument() + + let fold = try #require(model.getFolds(in: 0...5).first) + #expect(fold.lineRange == 0...5) + + let innerFold = try #require(fold.subFolds.first) + #expect(innerFold.lineRange == 1...4) + } +} diff --git a/Tests/CodeEditSourceEditorTests/TextViewControllerTests.swift b/Tests/CodeEditSourceEditorTests/TextViewControllerTests.swift index a1329de4e..126905be2 100644 --- a/Tests/CodeEditSourceEditorTests/TextViewControllerTests.swift +++ b/Tests/CodeEditSourceEditorTests/TextViewControllerTests.swift @@ -484,12 +484,12 @@ final class TextViewControllerTests: XCTestCase { controller.showFoldingRibbon = false XCTAssertFalse(controller.gutterView.showFoldingRibbon) controller.gutterView.updateWidthIfNeeded() // Would be called on a display pass - let noRibbonWidth = controller.gutterView.gutterWidth + let noRibbonWidth = controller.gutterView.frame.width controller.showFoldingRibbon = true XCTAssertTrue(controller.gutterView.showFoldingRibbon) controller.gutterView.updateWidthIfNeeded() // Would be called on a display pass - XCTAssertEqual(controller.gutterView.gutterWidth, noRibbonWidth + 7.0) + XCTAssertEqual(controller.gutterView.frame.width, noRibbonWidth + 7.0) } } From 0a7519e3abd219dc25092408172b8764587de83e Mon Sep 17 00:00:00 2001 From: Khan Winter <35942988+thecoolwinter@users.noreply.github.com> Date: Thu, 8 May 2025 10:14:08 -0500 Subject: [PATCH 03/30] Revert Debugging Changes --- .../LineFolding/FoldingRibbonView.swift | 43 +------------------ 1 file changed, 1 insertion(+), 42 deletions(-) diff --git a/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift b/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift index aef151199..77d9b6263 100644 --- a/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift +++ b/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift @@ -9,47 +9,6 @@ import Foundation import AppKit import CodeEditTextView -final class IndentationLineFoldProvider: LineFoldProvider { - func foldLevelAtLine(_ lineNumber: Int, layoutManager: TextLayoutManager, textStorage: NSTextStorage) -> Int? { - guard let linePosition = layoutManager.textLineForIndex(lineNumber), - let indentLevel = indentLevelForPosition(linePosition, textStorage: textStorage) else { - return nil - } - - // if let precedingLinePosition = layoutManager.textLineForIndex(lineNumber - 1), - // let precedingIndentLevel = indentLevelForPosition(precedingLinePosition, textStorage: textStorage) { - // if precedingIndentLevel > indentLevel { - // return precedingIndentLevel - // } - // } - // - // if let nextLinePosition = layoutManager.textLineForIndex(lineNumber + 1), - // let nextIndentLevel = indentLevelForPosition(nextLinePosition, textStorage: textStorage) { - // if nextIndentLevel > indentLevel { - // return nextIndentLevel - // } - // } - - return indentLevel - } - - private func indentLevelForPosition( - _ position: TextLineStorage.TextLinePosition, - textStorage: NSTextStorage - ) -> Int? { - guard let substring = textStorage.substring(from: position.range) else { - return nil - } - - return substring.utf16 // Keep NSString units - .enumerated() - .first(where: { UnicodeScalar($0.element)?.properties.isWhitespace != true })? - .offset - } -} - -let buh = IndentationLineFoldProvider() - /// Displays the code folding ribbon in the ``GutterView``. /// /// This view draws its contents @@ -93,7 +52,7 @@ class FoldingRibbonView: NSView { init(textView: TextView, foldProvider: LineFoldProvider?) { self.model = LineFoldingModel( textView: textView, - foldProvider: buh + foldProvider: foldProvider ) super.init(frame: .zero) layerContentsRedrawPolicy = .onSetNeedsDisplay From c056e4a181ceb4a297805e600a781476727d8ed1 Mon Sep 17 00:00:00 2001 From: Khan Winter <35942988+thecoolwinter@users.noreply.github.com> Date: Thu, 8 May 2025 10:15:59 -0500 Subject: [PATCH 04/30] Add Demo Line Fold Provider (For Testing) --- .../IndentationLineFoldProvider.swift | 34 +++++++++++++++++++ .../LineFolding/FoldingRibbonView.swift | 6 +++- 2 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 Sources/CodeEditSourceEditor/Gutter/LineFolding/DefaultProviders/IndentationLineFoldProvider.swift diff --git a/Sources/CodeEditSourceEditor/Gutter/LineFolding/DefaultProviders/IndentationLineFoldProvider.swift b/Sources/CodeEditSourceEditor/Gutter/LineFolding/DefaultProviders/IndentationLineFoldProvider.swift new file mode 100644 index 000000000..03dbd9fa1 --- /dev/null +++ b/Sources/CodeEditSourceEditor/Gutter/LineFolding/DefaultProviders/IndentationLineFoldProvider.swift @@ -0,0 +1,34 @@ +// +// IndentationLineFoldProvider.swift +// CodeEditSourceEditor +// +// Created by Khan Winter on 5/8/25. +// + +import AppKit +import CodeEditTextView + +final class IndentationLineFoldProvider: LineFoldProvider { + func foldLevelAtLine(_ lineNumber: Int, layoutManager: TextLayoutManager, textStorage: NSTextStorage) -> Int? { + guard let linePosition = layoutManager.textLineForIndex(lineNumber), + let indentLevel = indentLevelForPosition(linePosition, textStorage: textStorage) else { + return nil + } + + return indentLevel + } + + private func indentLevelForPosition( + _ position: TextLineStorage.TextLinePosition, + textStorage: NSTextStorage + ) -> Int? { + guard let substring = textStorage.substring(from: position.range) else { + return nil + } + + return substring.utf16 // Keep NSString units + .enumerated() + .first(where: { UnicodeScalar($0.element)?.properties.isWhitespace != true })? + .offset + } +} diff --git a/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift b/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift index 77d9b6263..413851fb8 100644 --- a/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift +++ b/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift @@ -9,6 +9,9 @@ import Foundation import AppKit import CodeEditTextView +#warning("Replace before release") +fileprivate let demoFoldProvider = IndentationLineFoldProvider() + /// Displays the code folding ribbon in the ``GutterView``. /// /// This view draws its contents @@ -50,9 +53,10 @@ class FoldingRibbonView: NSView { } init(textView: TextView, foldProvider: LineFoldProvider?) { + #warning("Replace before release") self.model = LineFoldingModel( textView: textView, - foldProvider: foldProvider + foldProvider: foldProvider ?? demoFoldProvider ) super.init(frame: .zero) layerContentsRedrawPolicy = .onSetNeedsDisplay From 0b840f6c0e58992a43be855ecc42595b21fbba9c Mon Sep 17 00:00:00 2001 From: Khan Winter <35942988+thecoolwinter@users.noreply.github.com> Date: Thu, 8 May 2025 10:29:45 -0500 Subject: [PATCH 05/30] Remove Some Unnecessary Hovering Stuff --- .../LineFolding/FoldingRibbonView.swift | 24 +++++++------------ .../Gutter/LineFolding/LineFoldingModel.swift | 8 +++---- 2 files changed, 12 insertions(+), 20 deletions(-) diff --git a/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift b/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift index 413851fb8..d7d8543bf 100644 --- a/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift +++ b/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift @@ -82,25 +82,18 @@ class FoldingRibbonView: NSView { hoveringLine = model.textView?.layoutManager.textLineForPosition(pointInView.y)?.index } + /// The context in which the fold is being drawn, including the depth and fold range. struct FoldMarkerDrawingContext { let range: ClosedRange let depth: UInt - let hoveringLine: Int? - func increment() -> FoldMarkerDrawingContext { + /// Increment the depth + func incrementDepth() -> FoldMarkerDrawingContext { FoldMarkerDrawingContext( range: range, - depth: depth + 1, - hoveringLine: isHovering() ? nil : hoveringLine + depth: depth + 1 ) } - - func isHovering() -> Bool { - guard let hoveringLine else { - return false - } - return range.contains(hoveringLine) - } } override func draw(_ dirtyRect: NSRect) { @@ -124,7 +117,7 @@ class FoldingRibbonView: NSView { for fold in folds { drawFoldMarker( fold, - markerContext: FoldMarkerDrawingContext(range: lineRange, depth: 0, hoveringLine: hoveringLine), + markerContext: FoldMarkerDrawingContext(range: lineRange, depth: 0), in: context, using: layoutManager ) @@ -156,12 +149,11 @@ class FoldingRibbonView: NSView { let maxYPosition = maxPosition.yPos + maxPosition.height - // TODO: Draw a single line when folds are adjacent - - if markerContext.isHovering() { + if false /*model.getCachedDepthAt(lineNumber: hoveringLine ?? -1)*/ { // TODO: Handle hover state } else { let plainRect = NSRect(x: 0, y: minYPosition + 1, width: 7, height: maxYPosition - minYPosition - 2) + // TODO: Draw a single horizontal line when folds are adjacent let roundedRect = NSBezierPath(roundedRect: plainRect, xRadius: 3.5, yRadius: 3.5) context.addPath(roundedRect.cgPathFallback) @@ -180,7 +172,7 @@ class FoldingRibbonView: NSView { // Draw subfolds for subFold in fold.subFolds.filter({ $0.lineRange.overlaps(markerContext.range) }) { - drawFoldMarker(subFold, markerContext: markerContext.increment(), in: context, using: layoutManager) + drawFoldMarker(subFold, markerContext: markerContext.incrementDepth(), in: context, using: layoutManager) } } diff --git a/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldingModel.swift b/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldingModel.swift index 97bb0a8a9..b2e4dfbcf 100644 --- a/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldingModel.swift +++ b/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldingModel.swift @@ -104,18 +104,18 @@ class LineFoldingModel: NSObject, NSTextStorageDelegate { } invalidateLine(lineNumber: lineNumber) } -} - -// MARK: - Search Folds -private extension LineFoldingModel { /// Finds the deepest cached depth of the fold for a line number. /// - Parameter lineNumber: The line number to query, zero-indexed. /// - Returns: The deepest cached depth of the fold if it was found. func getCachedDepthAt(lineNumber: Int) -> Int? { return findCachedFoldAt(lineNumber: lineNumber)?.depth } +} + +// MARK: - Search Folds +private extension LineFoldingModel { /// Finds the deepest cached fold and depth of the fold for a line number. /// - Parameter lineNumber: The line number to query, zero-indexed. /// - Returns: The deepest cached fold and depth of the fold if it was found. From 5c813dd364bcd510145736087e13b21f16b91b04 Mon Sep 17 00:00:00 2001 From: Khan Winter <35942988+thecoolwinter@users.noreply.github.com> Date: Thu, 8 May 2025 12:53:47 -0500 Subject: [PATCH 06/30] Implement Hover State and Animation --- .../LineFolding/FoldingRibbonView+Draw.swift | 191 +++++++++++++++++ .../LineFolding/FoldingRibbonView.swift | 199 ++++++++---------- .../Gutter/LineFolding/LineFoldingModel.swift | 15 +- 3 files changed, 281 insertions(+), 124 deletions(-) create mode 100644 Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView+Draw.swift diff --git a/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView+Draw.swift b/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView+Draw.swift new file mode 100644 index 000000000..5d68da778 --- /dev/null +++ b/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView+Draw.swift @@ -0,0 +1,191 @@ +// +// FoldingRibbonView.swift +// CodeEditSourceEditor +// +// Created by Khan Winter on 5/8/25. +// + +import AppKit +import CodeEditTextView + +extension FoldingRibbonView { + override func draw(_ dirtyRect: NSRect) { + guard let context = NSGraphicsContext.current?.cgContext, + let layoutManager = model.textView?.layoutManager else { + return + } + + context.saveGState() + context.clip(to: dirtyRect) + + // Find the visible lines in the rect AppKit is asking us to draw. + guard let rangeStart = layoutManager.textLineForPosition(dirtyRect.minY), + let rangeEnd = layoutManager.textLineForPosition(dirtyRect.maxY) else { + return + } + let lineRange = rangeStart.index...rangeEnd.index + + context.setFillColor(markerColor) + let folds = model.getFolds(in: lineRange) + for fold in folds { + drawFoldMarker( + fold, + markerContext: FoldMarkerDrawingContext(range: lineRange, depth: 0), + in: context, + using: layoutManager + ) + } + + context.restoreGState() + } + + /// Draw a single fold marker for a fold. + /// + /// Ensure the correct fill color is set on the drawing context before calling. + /// + /// - Parameters: + /// - fold: The fold to draw. + /// - markerContext: The context in which the fold is being drawn, including the depth and if a line is + /// being hovered. + /// - context: The drawing context to use. + /// - layoutManager: A layout manager used to retrieve position information for lines. + private func drawFoldMarker( + _ fold: FoldRange, + markerContext: FoldMarkerDrawingContext, + in context: CGContext, + using layoutManager: TextLayoutManager + ) { + guard let minYPosition = layoutManager.textLineForIndex(fold.lineRange.lowerBound)?.yPos, + let maxPosition = layoutManager.textLineForIndex(fold.lineRange.upperBound) else { + return + } + + let maxYPosition = maxPosition.yPos + maxPosition.height + + if let hoveringFold, + hoveringFold.depth == markerContext.depth, + fold.lineRange == hoveringFold.range { + drawHoveredFold( + markerContext: markerContext, + minYPosition: minYPosition, + maxYPosition: maxYPosition, + in: context + ) + } else { + drawNestedFold( + markerContext: markerContext, + minYPosition: minYPosition, + maxYPosition: maxYPosition, + in: context + ) + } + + // Draw subfolds + for subFold in fold.subFolds.filter({ $0.lineRange.overlaps(markerContext.range) }) { + drawFoldMarker(subFold, markerContext: markerContext.incrementDepth(), in: context, using: layoutManager) + } + } + + private func drawHoveredFold( + markerContext: FoldMarkerDrawingContext, + minYPosition: CGFloat, + maxYPosition: CGFloat, + in context: CGContext + ) { + context.saveGState() + let plainRect = NSRect(x: -2, y: minYPosition, width: 11.0, height: maxYPosition - minYPosition) + let roundedRect = NSBezierPath(roundedRect: plainRect, xRadius: 11.0 / 2, yRadius: 11.0 / 2) + + context.setFillColor(hoverFillColor.copy(alpha: hoverAnimationProgress) ?? hoverFillColor) + context.setStrokeColor(hoverBorderColor.copy(alpha: hoverAnimationProgress) ?? hoverBorderColor) + context.addPath(roundedRect.cgPathFallback) + context.drawPath(using: .fillStroke) + + // Add the little arrows + drawChevron(in: context, yPosition: minYPosition + 8, pointingUp: false) + drawChevron(in: context, yPosition: maxYPosition - 8, pointingUp: true) + + context.restoreGState() + } + + private func drawChevron(in context: CGContext, yPosition: CGFloat, pointingUp: Bool) { + context.saveGState() + let path = CGMutablePath() + let chevronSize = CGSize(width: 4.0, height: 2.5) + + let center = (Self.width / 2) + let minX = center - (chevronSize.width / 2) + let maxX = center + (chevronSize.width / 2) + + let startY = pointingUp ? yPosition + chevronSize.height : yPosition - chevronSize.height + + context.setStrokeColor(NSColor.secondaryLabelColor.withAlphaComponent(hoverAnimationProgress).cgColor) + context.setLineCap(.round) + context.setLineJoin(.round) + context.setLineWidth(1.3) + + path.move(to: CGPoint(x: minX, y: startY)) + path.addLine(to: CGPoint(x: center, y: yPosition)) + path.addLine(to: CGPoint(x: maxX, y: startY)) + + context.addPath(path) + context.strokePath() + context.restoreGState() + } + + private func drawNestedFold( + markerContext: FoldMarkerDrawingContext, + minYPosition: CGFloat, + maxYPosition: CGFloat, + in context: CGContext + ) { + let plainRect = NSRect(x: 0, y: minYPosition + 1, width: 7, height: maxYPosition - minYPosition - 2) + // TODO: Draw a single horizontal line when folds are adjacent + let roundedRect = NSBezierPath(roundedRect: plainRect, xRadius: 3.5, yRadius: 3.5) + + context.addPath(roundedRect.cgPathFallback) + context.drawPath(using: .fill) + + // Add small white line if we're overlapping with other markers + if markerContext.depth != 0 { + drawOutline( + minYPosition: minYPosition, + maxYPosition: maxYPosition, + originalPath: roundedRect, + in: context + ) + } + } + + /// Draws a rounded outline for a rectangle, creating the small, light, outline around each fold indicator. + /// + /// This function does not change fill colors for the given context. + /// + /// - Parameters: + /// - minYPosition: The minimum y position of the rectangle to outline. + /// - maxYPosition: The maximum y position of the rectangle to outline. + /// - originalPath: The original bezier path for the rounded rectangle. + /// - context: The context to draw in. + private func drawOutline( + minYPosition: CGFloat, + maxYPosition: CGFloat, + originalPath: NSBezierPath, + in context: CGContext + ) { + context.saveGState() + + let plainRect = NSRect(x: -0.5, y: minYPosition, width: 8, height: maxYPosition - minYPosition) + let roundedRect = NSBezierPath(roundedRect: plainRect, xRadius: 4, yRadius: 4) + + let combined = CGMutablePath() + combined.addPath(roundedRect.cgPathFallback) + combined.addPath(originalPath.cgPathFallback) + + context.clip(to: CGRect(x: 0, y: minYPosition, width: 7, height: maxYPosition - minYPosition)) + context.addPath(combined) + context.setFillColor(markerBorderColor) + context.drawPath(using: .eoFill) + + context.restoreGState() + } +} diff --git a/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift b/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift index d7d8543bf..8df0cb63d 100644 --- a/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift +++ b/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift @@ -16,10 +16,21 @@ fileprivate let demoFoldProvider = IndentationLineFoldProvider() /// /// This view draws its contents class FoldingRibbonView: NSView { + struct HoveringFold: Equatable { + let range: ClosedRange + let depth: Int + } + static let width: CGFloat = 7.0 - private var model: LineFoldingModel - private var hoveringLine: Int? + var model: LineFoldingModel + + // Disabling this lint rule because this initial value is required for @Invalidating + @Invalidating(.display) + var hoveringFold: HoveringFold? = nil // swiftlint:disable:this redundant_optional_initialization + var hoverAnimationTimer: Timer? + @Invalidating(.display) + var hoverAnimationProgress: CGFloat = 0.0 @Invalidating(.display) var backgroundColor: NSColor = NSColor.controlBackgroundColor @@ -30,7 +41,7 @@ class FoldingRibbonView: NSView { case .aqua: NSColor(deviceWhite: 0.0, alpha: 0.1) case .darkAqua: - NSColor(deviceWhite: 1.0, alpha: 0.1) + NSColor(deviceWhite: 1.0, alpha: 0.2) default: NSColor() } @@ -48,6 +59,30 @@ class FoldingRibbonView: NSView { } }.cgColor + @Invalidating(.display) + var hoverFillColor = NSColor(name: nil) { appearance in + return switch appearance.name { + case .aqua: + NSColor(deviceWhite: 1.0, alpha: 1.0) + case .darkAqua: + NSColor(deviceWhite: 0.17, alpha: 1.0) + default: + NSColor() + } + }.cgColor + + @Invalidating(.display) + var hoverBorderColor = NSColor(name: nil) { appearance in + return switch appearance.name { + case .aqua: + NSColor(deviceWhite: 0.8, alpha: 1.0) + case .darkAqua: + NSColor(deviceWhite: 0.4, alpha: 1.0) + default: + NSColor() + } + }.cgColor + override public var isFlipped: Bool { true } @@ -60,17 +95,20 @@ class FoldingRibbonView: NSView { ) super.init(frame: .zero) layerContentsRedrawPolicy = .onSetNeedsDisplay + clipsToBounds = false } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } + // MARK: - Hover + override func updateTrackingAreas() { trackingAreas.forEach(removeTrackingArea) let area = NSTrackingArea( rect: bounds, - options: [.mouseMoved, .activeInKeyWindow], + options: [.mouseMoved, .activeInKeyWindow, .mouseEnteredAndExited], owner: self, userInfo: nil ) @@ -79,7 +117,46 @@ class FoldingRibbonView: NSView { override func mouseMoved(with event: NSEvent) { let pointInView = convert(event.locationInWindow, from: nil) - hoveringLine = model.textView?.layoutManager.textLineForPosition(pointInView.y)?.index + guard let lineNumber = model.textView?.layoutManager.textLineForPosition(pointInView.y)?.index, + let fold = model.getCachedFoldAt(lineNumber: lineNumber) else { + hoverAnimationProgress = 0.0 + hoveringFold = nil + return + } + + let newHoverRange = HoveringFold(range: fold.range.lineRange, depth: fold.depth) + guard newHoverRange != hoveringFold else { + return + } + hoverAnimationTimer?.invalidate() + // We only animate the first hovered fold. If the user moves the mouse vertically into other folds we just + // show it immediately. + if hoveringFold == nil { + hoverAnimationProgress = 0.0 + hoveringFold = newHoverRange + + let duration: TimeInterval = 0.2 + let startTime = CACurrentMediaTime() + hoverAnimationTimer = Timer.scheduledTimer(withTimeInterval: 1/60, repeats: true) { [weak self] timer in + guard let self = self else { return } + let now = CACurrentMediaTime() + let time = CGFloat((now - startTime) / duration) + self.hoverAnimationProgress = min(1.0, time) + if self.hoverAnimationProgress >= 1.0 { + timer.invalidate() + } + } + return + } + + // Don't animate these + hoverAnimationProgress = 1.0 + hoveringFold = newHoverRange + } + + override func mouseExited(with event: NSEvent) { + hoverAnimationProgress = 0.0 + hoveringFold = nil } /// The context in which the fold is being drawn, including the depth and fold range. @@ -95,116 +172,4 @@ class FoldingRibbonView: NSView { ) } } - - override func draw(_ dirtyRect: NSRect) { - guard let context = NSGraphicsContext.current?.cgContext, - let layoutManager = model.textView?.layoutManager else { - return - } - - context.saveGState() - context.clip(to: dirtyRect) - - // Find the visible lines in the rect AppKit is asking us to draw. - guard let rangeStart = layoutManager.textLineForPosition(dirtyRect.minY), - let rangeEnd = layoutManager.textLineForPosition(dirtyRect.maxY) else { - return - } - let lineRange = rangeStart.index...rangeEnd.index - - context.setFillColor(markerColor) - let folds = model.getFolds(in: lineRange) - for fold in folds { - drawFoldMarker( - fold, - markerContext: FoldMarkerDrawingContext(range: lineRange, depth: 0), - in: context, - using: layoutManager - ) - } - - context.restoreGState() - } - - /// Draw a single fold marker for a fold. - /// - /// Ensure the correct fill color is set on the drawing context before calling. - /// - /// - Parameters: - /// - fold: The fold to draw. - /// - markerContext: The context in which the fold is being drawn, including the depth and if a line is - /// being hovered. - /// - context: The drawing context to use. - /// - layoutManager: A layout manager used to retrieve position information for lines. - private func drawFoldMarker( - _ fold: FoldRange, - markerContext: FoldMarkerDrawingContext, - in context: CGContext, - using layoutManager: TextLayoutManager - ) { - guard let minYPosition = layoutManager.textLineForIndex(fold.lineRange.lowerBound)?.yPos, - let maxPosition = layoutManager.textLineForIndex(fold.lineRange.upperBound) else { - return - } - - let maxYPosition = maxPosition.yPos + maxPosition.height - - if false /*model.getCachedDepthAt(lineNumber: hoveringLine ?? -1)*/ { - // TODO: Handle hover state - } else { - let plainRect = NSRect(x: 0, y: minYPosition + 1, width: 7, height: maxYPosition - minYPosition - 2) - // TODO: Draw a single horizontal line when folds are adjacent - let roundedRect = NSBezierPath(roundedRect: plainRect, xRadius: 3.5, yRadius: 3.5) - - context.addPath(roundedRect.cgPathFallback) - context.drawPath(using: .fill) - - // Add small white line if we're overlapping with other markers - if markerContext.depth != 0 { - drawOutline( - minYPosition: minYPosition, - maxYPosition: maxYPosition, - originalPath: roundedRect, - in: context - ) - } - } - - // Draw subfolds - for subFold in fold.subFolds.filter({ $0.lineRange.overlaps(markerContext.range) }) { - drawFoldMarker(subFold, markerContext: markerContext.incrementDepth(), in: context, using: layoutManager) - } - } - - /// Draws a rounded outline for a rectangle, creating the small, light, outline around each fold indicator. - /// - /// This function does not change fill colors for the given context. - /// - /// - Parameters: - /// - minYPosition: The minimum y position of the rectangle to outline. - /// - maxYPosition: The maximum y position of the rectangle to outline. - /// - originalPath: The original bezier path for the rounded rectangle. - /// - context: The context to draw in. - private func drawOutline( - minYPosition: CGFloat, - maxYPosition: CGFloat, - originalPath: NSBezierPath, - in context: CGContext - ) { - context.saveGState() - - let plainRect = NSRect(x: -0.5, y: minYPosition, width: 8, height: maxYPosition - minYPosition) - let roundedRect = NSBezierPath(roundedRect: plainRect, xRadius: 4, yRadius: 4) - - let combined = CGMutablePath() - combined.addPath(roundedRect.cgPathFallback) - combined.addPath(originalPath.cgPathFallback) - - context.clip(to: CGRect(x: 0, y: minYPosition, width: 7, height: maxYPosition - minYPosition)) - context.addPath(combined) - context.setFillColor(markerBorderColor) - context.drawPath(using: .eoFill) - - context.restoreGState() - } } diff --git a/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldingModel.swift b/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldingModel.swift index b2e4dfbcf..9785afbce 100644 --- a/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldingModel.swift +++ b/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldingModel.swift @@ -55,7 +55,7 @@ class LineFoldingModel: NSObject, NSTextStorageDelegate { ) else { continue } - print(foldDepth, linePosition.index) + // Start a new fold if foldDepth > currentDepth { let newFold = FoldRange( @@ -109,19 +109,20 @@ class LineFoldingModel: NSObject, NSTextStorageDelegate { /// - Parameter lineNumber: The line number to query, zero-indexed. /// - Returns: The deepest cached depth of the fold if it was found. func getCachedDepthAt(lineNumber: Int) -> Int? { - return findCachedFoldAt(lineNumber: lineNumber)?.depth + return getCachedFoldAt(lineNumber: lineNumber)?.depth } -} -// MARK: - Search Folds - -private extension LineFoldingModel { /// Finds the deepest cached fold and depth of the fold for a line number. /// - Parameter lineNumber: The line number to query, zero-indexed. /// - Returns: The deepest cached fold and depth of the fold if it was found. - func findCachedFoldAt(lineNumber: Int) -> (range: FoldRange, depth: Int)? { + func getCachedFoldAt(lineNumber: Int) -> (range: FoldRange, depth: Int)? { binarySearchFoldsArray(lineNumber: lineNumber, folds: foldCache, currentDepth: 0) } +} + +// MARK: - Search Folds + +private extension LineFoldingModel { /// A generic function for searching an ordered array of fold ranges. /// - Returns: The found range and depth it was found at, if it exists. From 8ee94b5237cdcc754d16822e9ba8728b715b6424 Mon Sep 17 00:00:00 2001 From: Khan Winter <35942988+thecoolwinter@users.noreply.github.com> Date: Thu, 8 May 2025 12:55:00 -0500 Subject: [PATCH 07/30] Move DrawingContext Struct --- .../LineFolding/FoldingRibbonView+Draw.swift | 14 ++++++++++++++ .../Gutter/LineFolding/FoldingRibbonView.swift | 14 -------------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView+Draw.swift b/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView+Draw.swift index 5d68da778..d85a25916 100644 --- a/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView+Draw.swift +++ b/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView+Draw.swift @@ -9,6 +9,20 @@ import AppKit import CodeEditTextView extension FoldingRibbonView { + /// The context in which the fold is being drawn, including the depth and fold range. + struct FoldMarkerDrawingContext { + let range: ClosedRange + let depth: UInt + + /// Increment the depth + func incrementDepth() -> FoldMarkerDrawingContext { + FoldMarkerDrawingContext( + range: range, + depth: depth + 1 + ) + } + } + override func draw(_ dirtyRect: NSRect) { guard let context = NSGraphicsContext.current?.cgContext, let layoutManager = model.textView?.layoutManager else { diff --git a/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift b/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift index 8df0cb63d..4800e8115 100644 --- a/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift +++ b/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift @@ -158,18 +158,4 @@ class FoldingRibbonView: NSView { hoverAnimationProgress = 0.0 hoveringFold = nil } - - /// The context in which the fold is being drawn, including the depth and fold range. - struct FoldMarkerDrawingContext { - let range: ClosedRange - let depth: UInt - - /// Increment the depth - func incrementDepth() -> FoldMarkerDrawingContext { - FoldMarkerDrawingContext( - range: range, - depth: depth + 1 - ) - } - } } From 4d9d1d0b0ef0e6b31bdd25861e03449e1939900d Mon Sep 17 00:00:00 2001 From: Khan Winter <35942988+thecoolwinter@users.noreply.github.com> Date: Thu, 8 May 2025 13:28:04 -0500 Subject: [PATCH 08/30] Update View When Folds Change --- .../Gutter/LineFolding/FoldingRibbonView.swift | 11 +++++++++++ .../Gutter/LineFolding/LineFoldingModel.swift | 15 +++++++++------ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift b/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift index 4800e8115..6fe1f9907 100644 --- a/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift +++ b/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift @@ -8,6 +8,7 @@ import Foundation import AppKit import CodeEditTextView +import Combine #warning("Replace before release") fileprivate let demoFoldProvider = IndentationLineFoldProvider() @@ -83,6 +84,8 @@ class FoldingRibbonView: NSView { } }.cgColor + private var foldUpdateCancellable: AnyCancellable? + override public var isFlipped: Bool { true } @@ -96,12 +99,20 @@ class FoldingRibbonView: NSView { super.init(frame: .zero) layerContentsRedrawPolicy = .onSetNeedsDisplay clipsToBounds = false + + foldUpdateCancellable = model.foldsUpdatedPublisher.sink { + self.needsDisplay = true + } } required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } + deinit { + foldUpdateCancellable?.cancel() + } + // MARK: - Hover override func updateTrackingAreas() { diff --git a/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldingModel.swift b/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldingModel.swift index 9785afbce..f55007a34 100644 --- a/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldingModel.swift +++ b/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldingModel.swift @@ -7,6 +7,7 @@ import AppKit import CodeEditTextView +import Combine /// # Basic Premise /// @@ -25,6 +26,8 @@ class LineFoldingModel: NSObject, NSTextStorageDelegate { weak var foldProvider: LineFoldProvider? weak var textView: TextView? + lazy var foldsUpdatedPublisher = PassthroughSubject() + init(textView: TextView, foldProvider: LineFoldProvider?) { self.textView = textView self.foldProvider = foldProvider @@ -64,25 +67,25 @@ class LineFoldingModel: NSObject, NSTextStorageDelegate { parent: currentFold, subFolds: [] ) - if currentDepth == 0 { + + if currentFold == nil { foldCache.append(newFold) + } else { + currentFold?.subFolds.append(newFold) } - currentFold?.subFolds.append(newFold) currentFold = newFold } else if foldDepth < currentDepth { // End this fold if let fold = currentFold { fold.lineRange = fold.lineRange.lowerBound...linePosition.index - - if foldDepth == 0 { - currentFold = nil - } } currentFold = currentFold?.parent } currentDepth = foldDepth } + + foldsUpdatedPublisher.send() } func invalidateLine(lineNumber: Int) { From 2c1af464f76aa80c366a24ad0ad8a069e05693a0 Mon Sep 17 00:00:00 2001 From: Khan Winter <35942988+thecoolwinter@users.noreply.github.com> Date: Thu, 8 May 2025 16:12:46 -0500 Subject: [PATCH 09/30] Dispatch Folding Calculation To Background --- .../DispatchQueue+dispatchMainIfNot.swift | 6 +- .../IndentationLineFoldProvider.swift | 27 +-- .../LineFolding/FoldingRibbonView.swift | 4 +- .../Gutter/LineFolding/LineFoldProvider.swift | 2 +- .../Gutter/LineFolding/LineFoldingModel.swift | 186 +++++++++++------- 5 files changed, 126 insertions(+), 99 deletions(-) diff --git a/Sources/CodeEditSourceEditor/Extensions/DispatchQueue+dispatchMainIfNot.swift b/Sources/CodeEditSourceEditor/Extensions/DispatchQueue+dispatchMainIfNot.swift index 0b14ea65a..322a8d203 100644 --- a/Sources/CodeEditSourceEditor/Extensions/DispatchQueue+dispatchMainIfNot.swift +++ b/Sources/CodeEditSourceEditor/Extensions/DispatchQueue+dispatchMainIfNot.swift @@ -27,13 +27,11 @@ extension DispatchQueue { /// executed if not already on the main thread. /// - Parameter item: The work item to execute. /// - Returns: The value of the work item. - static func syncMainIfNot(_ item: @escaping () -> T) -> T { + static func syncMainIfNot(_ item: () -> T) -> T { if Thread.isMainThread { return item() } else { - return DispatchQueue.main.sync { - return item() - } + return DispatchQueue.main.sync(execute: item) } } } diff --git a/Sources/CodeEditSourceEditor/Gutter/LineFolding/DefaultProviders/IndentationLineFoldProvider.swift b/Sources/CodeEditSourceEditor/Gutter/LineFolding/DefaultProviders/IndentationLineFoldProvider.swift index 03dbd9fa1..6a03a4be3 100644 --- a/Sources/CodeEditSourceEditor/Gutter/LineFolding/DefaultProviders/IndentationLineFoldProvider.swift +++ b/Sources/CodeEditSourceEditor/Gutter/LineFolding/DefaultProviders/IndentationLineFoldProvider.swift @@ -9,26 +9,13 @@ import AppKit import CodeEditTextView final class IndentationLineFoldProvider: LineFoldProvider { - func foldLevelAtLine(_ lineNumber: Int, layoutManager: TextLayoutManager, textStorage: NSTextStorage) -> Int? { - guard let linePosition = layoutManager.textLineForIndex(lineNumber), - let indentLevel = indentLevelForPosition(linePosition, textStorage: textStorage) else { - return nil + func foldLevelAtLine(_ lineNumber: Int, substring: NSString) -> Int? { + for idx in 0...TextLinePosition, - textStorage: NSTextStorage - ) -> Int? { - guard let substring = textStorage.substring(from: position.range) else { - return nil - } - - return substring.utf16 // Keep NSString units - .enumerated() - .first(where: { UnicodeScalar($0.element)?.properties.isWhitespace != true })? - .offset + return nil } } diff --git a/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift b/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift index 6fe1f9907..05f9c1e5a 100644 --- a/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift +++ b/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift @@ -11,7 +11,7 @@ import CodeEditTextView import Combine #warning("Replace before release") -fileprivate let demoFoldProvider = IndentationLineFoldProvider() +private let demoFoldProvider = IndentationLineFoldProvider() /// Displays the code folding ribbon in the ``GutterView``. /// @@ -100,7 +100,7 @@ class FoldingRibbonView: NSView { layerContentsRedrawPolicy = .onSetNeedsDisplay clipsToBounds = false - foldUpdateCancellable = model.foldsUpdatedPublisher.sink { + foldUpdateCancellable = model.$foldCache.receive(on: RunLoop.main).sink { _ in self.needsDisplay = true } } diff --git a/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldProvider.swift b/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldProvider.swift index 64a15ae71..97b79f4ca 100644 --- a/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldProvider.swift +++ b/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldProvider.swift @@ -9,5 +9,5 @@ import AppKit import CodeEditTextView protocol LineFoldProvider: AnyObject { - func foldLevelAtLine(_ lineNumber: Int, layoutManager: TextLayoutManager, textStorage: NSTextStorage) -> Int? + func foldLevelAtLine(_ lineNumber: Int, substring: NSString) -> Int? } diff --git a/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldingModel.swift b/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldingModel.swift index f55007a34..a63146e56 100644 --- a/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldingModel.swift +++ b/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldingModel.swift @@ -9,6 +9,99 @@ import AppKit import CodeEditTextView import Combine +class LineFoldCalculator { + weak var foldProvider: LineFoldProvider? + weak var textView: TextView? + + var rangesPublisher = CurrentValueSubject<[FoldRange], Never>([]) + + private let workQueue = DispatchQueue(label: "app.codeedit.line-folds") + + var textChangedReceiver = PassthroughSubject() + private var textChangedCancellable: AnyCancellable? + + init(foldProvider: LineFoldProvider?, textView: TextView) { + self.foldProvider = foldProvider + self.textView = textView + + textChangedCancellable = textChangedReceiver.throttle(for: 0.1, scheduler: RunLoop.main, latest: true).sink { + self.buildFoldsForDocument() + } + } + + /// Build out the folds for the entire document. + /// + /// For each line in the document, find the indentation level using the ``levelProvider``. At each line, if the + /// indent increases from the previous line, we start a new fold. If it decreases we end the fold we were in. + private func buildFoldsForDocument() { + workQueue.async { + guard let textView = self.textView, let foldProvider = self.foldProvider else { return } + var foldCache: [FoldRange] = [] + var currentFold: FoldRange? + var currentDepth: Int = 0 + var iterator = textView.layoutManager.linesInRange(textView.documentRange) + + var lines = self.getMoreLines(textView: textView, iterator: &iterator, foldProvider: foldProvider) + while !lines.isEmpty { + for (lineNumber, foldDepth) in lines { + // Start a new fold + if foldDepth > currentDepth { + let newFold = FoldRange( + lineRange: (lineNumber - 1)...(lineNumber - 1), + range: .zero, + parent: currentFold, + subFolds: [] + ) + + if currentFold == nil { + foldCache.append(newFold) + } else { + currentFold?.subFolds.append(newFold) + } + currentFold = newFold + } else if foldDepth < currentDepth { + // End this fold + if let fold = currentFold { + fold.lineRange = fold.lineRange.lowerBound...lineNumber + } + currentFold = currentFold?.parent + } + + currentDepth = foldDepth + } + lines = self.getMoreLines(textView: textView, iterator: &iterator, foldProvider: foldProvider) + } + + self.rangesPublisher.send(foldCache) + } + } + + private func getMoreLines( + textView: TextView, + iterator: inout TextLayoutManager.RangeIterator, + foldProvider: LineFoldProvider + ) -> [(index: Int, foldDepth: Int)] { + DispatchQueue.main.asyncAndWait { + var results: [(index: Int, foldDepth: Int)] = [] + var count = 0 + while count < 50, let linePosition = iterator.next() { + guard let substring = textView.textStorage.substring(from: linePosition.range) as NSString?, + let foldDepth = foldProvider.foldLevelAtLine( + linePosition.index, + substring: substring + ) else { + count += 1 + continue + } + + results.append((linePosition.index, foldDepth)) + count += 1 + } + return results + } + } +} + /// # Basic Premise /// /// We need to update, delete, or add fold ranges in the invalidated lines. @@ -21,91 +114,35 @@ import Combine class LineFoldingModel: NSObject, NSTextStorageDelegate { /// An ordered tree of fold ranges in a document. Can be traversed using ``FoldRange/parent`` /// and ``FoldRange/subFolds``. - private var foldCache: [FoldRange] = [] + @Published var foldCache: [FoldRange] = [] + private var calculator: LineFoldCalculator + private var cancellable: AnyCancellable? - weak var foldProvider: LineFoldProvider? weak var textView: TextView? - lazy var foldsUpdatedPublisher = PassthroughSubject() - init(textView: TextView, foldProvider: LineFoldProvider?) { self.textView = textView - self.foldProvider = foldProvider + self.calculator = LineFoldCalculator(foldProvider: foldProvider, textView: textView) super.init() textView.addStorageDelegate(self) - buildFoldsForDocument() + cancellable = self.calculator.rangesPublisher.receive(on: RunLoop.main).assign(to: \.foldCache, on: self) + calculator.textChangedReceiver.send() } func getFolds(in lineRange: ClosedRange) -> [FoldRange] { foldCache.filter({ $0.lineRange.overlaps(lineRange) }) } - /// Build out the ``foldCache`` for the entire document. - /// - /// For each line in the document, find the indentation level using the ``levelProvider``. At each line, if the - /// indent increases from the previous line, we start a new fold. If it decreases we end the fold we were in. - func buildFoldsForDocument() { - guard let textView, let foldProvider else { return } - foldCache.removeAll(keepingCapacity: true) - - var currentFold: FoldRange? - var currentDepth: Int = 0 - for linePosition in textView.layoutManager.linesInRange(textView.documentRange) { - guard let foldDepth = foldProvider.foldLevelAtLine( - linePosition.index, - layoutManager: textView.layoutManager, - textStorage: textView.textStorage - ) else { - continue - } - - // Start a new fold - if foldDepth > currentDepth { - let newFold = FoldRange( - lineRange: (linePosition.index - 1)...(linePosition.index - 1), - range: .zero, - parent: currentFold, - subFolds: [] - ) - - if currentFold == nil { - foldCache.append(newFold) - } else { - currentFold?.subFolds.append(newFold) - } - currentFold = newFold - } else if foldDepth < currentDepth { - // End this fold - if let fold = currentFold { - fold.lineRange = fold.lineRange.lowerBound...linePosition.index - } - currentFold = currentFold?.parent - } - - currentDepth = foldDepth - } - - foldsUpdatedPublisher.send() - } - - func invalidateLine(lineNumber: Int) { - // TODO: Check if we need to rebuild, or even better, incrementally update the tree. - - // Temporary - buildFoldsForDocument() - } - func textStorage( _ textStorage: NSTextStorage, didProcessEditing editedMask: NSTextStorageEditActions, range editedRange: NSRange, changeInLength delta: Int ) { - guard editedMask.contains(.editedCharacters), - let lineNumber = textView?.layoutManager.textLineForOffset(editedRange.location)?.index else { + guard editedMask.contains(.editedCharacters) else { return } - invalidateLine(lineNumber: lineNumber) + calculator.textChangedReceiver.send() } /// Finds the deepest cached depth of the fold for a line number. @@ -119,20 +156,20 @@ class LineFoldingModel: NSObject, NSTextStorageDelegate { /// - Parameter lineNumber: The line number to query, zero-indexed. /// - Returns: The deepest cached fold and depth of the fold if it was found. func getCachedFoldAt(lineNumber: Int) -> (range: FoldRange, depth: Int)? { - binarySearchFoldsArray(lineNumber: lineNumber, folds: foldCache, currentDepth: 0) + binarySearchFoldsArray(lineNumber: lineNumber, folds: foldCache, currentDepth: 0, findDeepest: true) } } // MARK: - Search Folds private extension LineFoldingModel { - /// A generic function for searching an ordered array of fold ranges. /// - Returns: The found range and depth it was found at, if it exists. func binarySearchFoldsArray( lineNumber: Int, folds: borrowing [FoldRange], - currentDepth: Int + currentDepth: Int, + findDeepest: Bool ) -> (range: FoldRange, depth: Int)? { var low = 0 var high = folds.count - 1 @@ -143,11 +180,16 @@ private extension LineFoldingModel { if fold.lineRange.contains(lineNumber) { // Search deeper into subFolds, if any - return binarySearchFoldsArray( - lineNumber: lineNumber, - folds: fold.subFolds, - currentDepth: currentDepth + 1 - ) ?? (fold, currentDepth) + if findDeepest { + return binarySearchFoldsArray( + lineNumber: lineNumber, + folds: fold.subFolds, + currentDepth: currentDepth + 1, + findDeepest: findDeepest + ) ?? (fold, currentDepth) + } else { + return (fold, currentDepth) + } } else if lineNumber < fold.lineRange.lowerBound { high = mid - 1 } else { From 2f1fdad8bbb94d0ac21322270e7d200bc01edcda Mon Sep 17 00:00:00 2001 From: Khan Winter <35942988+thecoolwinter@users.noreply.github.com> Date: Fri, 9 May 2025 14:06:03 -0500 Subject: [PATCH 10/30] Use Lock For Cache, Skip Depth Changes --- .../DispatchQueue+dispatchMainIfNot.swift | 4 +- .../TextView+/TextView+createReadBlock.swift | 4 +- .../Gutter/LineFolding/LineFoldingModel.swift | 201 ------------------ .../IndentationLineFoldProvider.swift | 0 .../FoldProviders}/LineFoldProvider.swift | 0 .../Model}/FoldRange.swift | 4 +- .../Model/LineFoldCalculator.swift | 122 +++++++++++ .../LineFolding/Model/LineFoldingModel.swift | 113 ++++++++++ .../View}/FoldingRibbonView+Draw.swift | 0 .../View}/FoldingRibbonView.swift | 0 .../TreeSitter/Atomic.swift | 4 + .../TreeSitter/LanguageLayer.swift | 2 +- 12 files changed, 247 insertions(+), 207 deletions(-) delete mode 100644 Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldingModel.swift rename Sources/CodeEditSourceEditor/{Gutter/LineFolding/DefaultProviders => LineFolding/FoldProviders}/IndentationLineFoldProvider.swift (100%) rename Sources/CodeEditSourceEditor/{Gutter/LineFolding => LineFolding/FoldProviders}/LineFoldProvider.swift (100%) rename Sources/CodeEditSourceEditor/{Gutter/LineFolding => LineFolding/Model}/FoldRange.swift (75%) create mode 100644 Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift create mode 100644 Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldingModel.swift rename Sources/CodeEditSourceEditor/{Gutter/LineFolding => LineFolding/View}/FoldingRibbonView+Draw.swift (100%) rename Sources/CodeEditSourceEditor/{Gutter/LineFolding => LineFolding/View}/FoldingRibbonView.swift (100%) diff --git a/Sources/CodeEditSourceEditor/Extensions/DispatchQueue+dispatchMainIfNot.swift b/Sources/CodeEditSourceEditor/Extensions/DispatchQueue+dispatchMainIfNot.swift index 322a8d203..b579e8d52 100644 --- a/Sources/CodeEditSourceEditor/Extensions/DispatchQueue+dispatchMainIfNot.swift +++ b/Sources/CodeEditSourceEditor/Extensions/DispatchQueue+dispatchMainIfNot.swift @@ -27,11 +27,11 @@ extension DispatchQueue { /// executed if not already on the main thread. /// - Parameter item: The work item to execute. /// - Returns: The value of the work item. - static func syncMainIfNot(_ item: () -> T) -> T { + static func waitMainIfNot(_ item: () -> T) -> T { if Thread.isMainThread { return item() } else { - return DispatchQueue.main.sync(execute: item) + return DispatchQueue.main.asyncAndWait(execute: item) } } } diff --git a/Sources/CodeEditSourceEditor/Extensions/TextView+/TextView+createReadBlock.swift b/Sources/CodeEditSourceEditor/Extensions/TextView+/TextView+createReadBlock.swift index 38153e154..2e00dff36 100644 --- a/Sources/CodeEditSourceEditor/Extensions/TextView+/TextView+createReadBlock.swift +++ b/Sources/CodeEditSourceEditor/Extensions/TextView+/TextView+createReadBlock.swift @@ -30,7 +30,7 @@ extension TextView { let range = NSRange(location.. String? = { self?.textStorage.substring(from: range) } - return DispatchQueue.syncMainIfNot(workItem) + return DispatchQueue.waitMainIfNot(workItem) } } } diff --git a/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldingModel.swift b/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldingModel.swift deleted file mode 100644 index a63146e56..000000000 --- a/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldingModel.swift +++ /dev/null @@ -1,201 +0,0 @@ -// -// LineFoldingModel.swift -// CodeEditSourceEditor -// -// Created by Khan Winter on 5/7/25. -// - -import AppKit -import CodeEditTextView -import Combine - -class LineFoldCalculator { - weak var foldProvider: LineFoldProvider? - weak var textView: TextView? - - var rangesPublisher = CurrentValueSubject<[FoldRange], Never>([]) - - private let workQueue = DispatchQueue(label: "app.codeedit.line-folds") - - var textChangedReceiver = PassthroughSubject() - private var textChangedCancellable: AnyCancellable? - - init(foldProvider: LineFoldProvider?, textView: TextView) { - self.foldProvider = foldProvider - self.textView = textView - - textChangedCancellable = textChangedReceiver.throttle(for: 0.1, scheduler: RunLoop.main, latest: true).sink { - self.buildFoldsForDocument() - } - } - - /// Build out the folds for the entire document. - /// - /// For each line in the document, find the indentation level using the ``levelProvider``. At each line, if the - /// indent increases from the previous line, we start a new fold. If it decreases we end the fold we were in. - private func buildFoldsForDocument() { - workQueue.async { - guard let textView = self.textView, let foldProvider = self.foldProvider else { return } - var foldCache: [FoldRange] = [] - var currentFold: FoldRange? - var currentDepth: Int = 0 - var iterator = textView.layoutManager.linesInRange(textView.documentRange) - - var lines = self.getMoreLines(textView: textView, iterator: &iterator, foldProvider: foldProvider) - while !lines.isEmpty { - for (lineNumber, foldDepth) in lines { - // Start a new fold - if foldDepth > currentDepth { - let newFold = FoldRange( - lineRange: (lineNumber - 1)...(lineNumber - 1), - range: .zero, - parent: currentFold, - subFolds: [] - ) - - if currentFold == nil { - foldCache.append(newFold) - } else { - currentFold?.subFolds.append(newFold) - } - currentFold = newFold - } else if foldDepth < currentDepth { - // End this fold - if let fold = currentFold { - fold.lineRange = fold.lineRange.lowerBound...lineNumber - } - currentFold = currentFold?.parent - } - - currentDepth = foldDepth - } - lines = self.getMoreLines(textView: textView, iterator: &iterator, foldProvider: foldProvider) - } - - self.rangesPublisher.send(foldCache) - } - } - - private func getMoreLines( - textView: TextView, - iterator: inout TextLayoutManager.RangeIterator, - foldProvider: LineFoldProvider - ) -> [(index: Int, foldDepth: Int)] { - DispatchQueue.main.asyncAndWait { - var results: [(index: Int, foldDepth: Int)] = [] - var count = 0 - while count < 50, let linePosition = iterator.next() { - guard let substring = textView.textStorage.substring(from: linePosition.range) as NSString?, - let foldDepth = foldProvider.foldLevelAtLine( - linePosition.index, - substring: substring - ) else { - count += 1 - continue - } - - results.append((linePosition.index, foldDepth)) - count += 1 - } - return results - } - } -} - -/// # Basic Premise -/// -/// We need to update, delete, or add fold ranges in the invalidated lines. -/// -/// # Implementation -/// -/// - For each line in the document, put its indent level into a list. -/// - Loop through the list, creating nested folds as indents go up and down. -/// -class LineFoldingModel: NSObject, NSTextStorageDelegate { - /// An ordered tree of fold ranges in a document. Can be traversed using ``FoldRange/parent`` - /// and ``FoldRange/subFolds``. - @Published var foldCache: [FoldRange] = [] - private var calculator: LineFoldCalculator - private var cancellable: AnyCancellable? - - weak var textView: TextView? - - init(textView: TextView, foldProvider: LineFoldProvider?) { - self.textView = textView - self.calculator = LineFoldCalculator(foldProvider: foldProvider, textView: textView) - super.init() - textView.addStorageDelegate(self) - cancellable = self.calculator.rangesPublisher.receive(on: RunLoop.main).assign(to: \.foldCache, on: self) - calculator.textChangedReceiver.send() - } - - func getFolds(in lineRange: ClosedRange) -> [FoldRange] { - foldCache.filter({ $0.lineRange.overlaps(lineRange) }) - } - - func textStorage( - _ textStorage: NSTextStorage, - didProcessEditing editedMask: NSTextStorageEditActions, - range editedRange: NSRange, - changeInLength delta: Int - ) { - guard editedMask.contains(.editedCharacters) else { - return - } - calculator.textChangedReceiver.send() - } - - /// Finds the deepest cached depth of the fold for a line number. - /// - Parameter lineNumber: The line number to query, zero-indexed. - /// - Returns: The deepest cached depth of the fold if it was found. - func getCachedDepthAt(lineNumber: Int) -> Int? { - return getCachedFoldAt(lineNumber: lineNumber)?.depth - } - - /// Finds the deepest cached fold and depth of the fold for a line number. - /// - Parameter lineNumber: The line number to query, zero-indexed. - /// - Returns: The deepest cached fold and depth of the fold if it was found. - func getCachedFoldAt(lineNumber: Int) -> (range: FoldRange, depth: Int)? { - binarySearchFoldsArray(lineNumber: lineNumber, folds: foldCache, currentDepth: 0, findDeepest: true) - } -} - -// MARK: - Search Folds - -private extension LineFoldingModel { - /// A generic function for searching an ordered array of fold ranges. - /// - Returns: The found range and depth it was found at, if it exists. - func binarySearchFoldsArray( - lineNumber: Int, - folds: borrowing [FoldRange], - currentDepth: Int, - findDeepest: Bool - ) -> (range: FoldRange, depth: Int)? { - var low = 0 - var high = folds.count - 1 - - while low <= high { - let mid = (low + high) / 2 - let fold = folds[mid] - - if fold.lineRange.contains(lineNumber) { - // Search deeper into subFolds, if any - if findDeepest { - return binarySearchFoldsArray( - lineNumber: lineNumber, - folds: fold.subFolds, - currentDepth: currentDepth + 1, - findDeepest: findDeepest - ) ?? (fold, currentDepth) - } else { - return (fold, currentDepth) - } - } else if lineNumber < fold.lineRange.lowerBound { - high = mid - 1 - } else { - low = mid + 1 - } - } - return nil - } -} diff --git a/Sources/CodeEditSourceEditor/Gutter/LineFolding/DefaultProviders/IndentationLineFoldProvider.swift b/Sources/CodeEditSourceEditor/LineFolding/FoldProviders/IndentationLineFoldProvider.swift similarity index 100% rename from Sources/CodeEditSourceEditor/Gutter/LineFolding/DefaultProviders/IndentationLineFoldProvider.swift rename to Sources/CodeEditSourceEditor/LineFolding/FoldProviders/IndentationLineFoldProvider.swift diff --git a/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldProvider.swift b/Sources/CodeEditSourceEditor/LineFolding/FoldProviders/LineFoldProvider.swift similarity index 100% rename from Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldProvider.swift rename to Sources/CodeEditSourceEditor/LineFolding/FoldProviders/LineFoldProvider.swift diff --git a/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldRange.swift b/Sources/CodeEditSourceEditor/LineFolding/Model/FoldRange.swift similarity index 75% rename from Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldRange.swift rename to Sources/CodeEditSourceEditor/LineFolding/Model/FoldRange.swift index 714a48a06..d84929d4c 100644 --- a/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldRange.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/Model/FoldRange.swift @@ -11,14 +11,16 @@ import Foundation class FoldRange { var lineRange: ClosedRange var range: NSRange + var depth: Int /// Ordered array of ranges that are nested in this fold. var subFolds: [FoldRange] weak var parent: FoldRange? - init(lineRange: ClosedRange, range: NSRange, parent: FoldRange?, subFolds: [FoldRange]) { + init(lineRange: ClosedRange, range: NSRange, depth: Int, parent: FoldRange?, subFolds: [FoldRange]) { self.lineRange = lineRange self.range = range + self.depth = depth self.subFolds = subFolds self.parent = parent } diff --git a/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift b/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift new file mode 100644 index 000000000..40ec540fe --- /dev/null +++ b/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift @@ -0,0 +1,122 @@ +// +// LineFoldCalculator.swift +// CodeEditSourceEditor +// +// Created by Khan Winter on 5/9/25. +// + +import AppKit +import CodeEditTextView +import Combine + +/// A utility that calculates foldable line ranges in a text document based on indentation depth. +/// +/// `LineFoldCalculator` observes text edits and rebuilds fold regions asynchronously. +/// Fold information is emitted via `rangesPublisher`. +/// Notify the calculator it should re-calculate +class LineFoldCalculator { + weak var foldProvider: LineFoldProvider? + weak var textView: TextView? + + var rangesPublisher = CurrentValueSubject<[FoldRange], Never>([]) + + private let workQueue = DispatchQueue.global(qos: .default) + + var textChangedReceiver = PassthroughSubject<(NSRange, Int), Never>() + private var textChangedCancellable: AnyCancellable? + + init(foldProvider: LineFoldProvider?, textView: TextView) { + self.foldProvider = foldProvider + self.textView = textView + + textChangedCancellable = textChangedReceiver + .throttle(for: 0.1, scheduler: RunLoop.main, latest: true) + .sink { edit in + self.buildFoldsForDocument(afterEditIn: edit.0, delta: edit.1) + } + } + + /// Build out the folds for the entire document. + /// + /// For each line in the document, find the indentation level using the ``levelProvider``. At each line, if the + /// indent increases from the previous line, we start a new fold. If it decreases we end the fold we were in. + private func buildFoldsForDocument(afterEditIn: NSRange, delta: Int) { + workQueue.async { + guard let textView = self.textView, let foldProvider = self.foldProvider else { return } + var foldCache: [FoldRange] = [] + var currentFold: FoldRange? + var currentDepth: Int = 0 + var iterator = textView.layoutManager.linesInRange(textView.documentRange) + + var lines = self.getMoreLines(textView: textView, iterator: &iterator, foldProvider: foldProvider) + while let lineChunk = lines { + for (lineNumber, foldDepth) in lineChunk { + // Start a new fold, going deeper to a new depth. + if foldDepth > currentDepth { + let newFold = FoldRange( + lineRange: (lineNumber - 1)...(lineNumber - 1), + range: .zero, + depth: foldDepth, + parent: currentFold, + subFolds: [] + ) + + if currentFold == nil { + foldCache.append(newFold) + } else { + currentFold?.subFolds.append(newFold) + } + currentFold = newFold + } else if foldDepth < currentDepth { + // End this fold, go shallower "popping" folds deeper than the new depth + while let fold = currentFold, fold.depth > foldDepth { + // close this fold at the current line + fold.lineRange = fold.lineRange.lowerBound...lineNumber + // move up + currentFold = fold.parent + } + } + + currentDepth = foldDepth + } + lines = self.getMoreLines(textView: textView, iterator: &iterator, foldProvider: foldProvider) + } + + // Clean up any hanging folds. + while let fold = currentFold { + fold.lineRange = fold.lineRange.lowerBound...textView.layoutManager.lineCount + currentFold = fold.parent + } + + self.rangesPublisher.send(foldCache) + } + } + + private func getMoreLines( + textView: TextView, + iterator: inout TextLayoutManager.RangeIterator, + foldProvider: LineFoldProvider + ) -> [(index: Int, foldDepth: Int)]? { + DispatchQueue.main.asyncAndWait { + var results: [(index: Int, foldDepth: Int)] = [] + var count = 0 + while count < 50, let linePosition = iterator.next() { + guard let substring = textView.textStorage.substring(from: linePosition.range) as NSString?, + let foldDepth = foldProvider.foldLevelAtLine( + linePosition.index, + substring: substring + ) else { + count += 1 + continue + } + + results.append((linePosition.index, foldDepth)) + count += 1 + } + if results.isEmpty && count == 0 { + return nil + } + return results + } + } +} diff --git a/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldingModel.swift b/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldingModel.swift new file mode 100644 index 000000000..fc6fd7377 --- /dev/null +++ b/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldingModel.swift @@ -0,0 +1,113 @@ +// +// LineFoldingModel.swift +// CodeEditSourceEditor +// +// Created by Khan Winter on 5/7/25. +// + +import AppKit +import CodeEditTextView +import Combine + +/// # Basic Premise +/// +/// We need to update, delete, or add fold ranges in the invalidated lines. +/// +/// # Implementation +/// +/// - For each line in the document, put its indent level into a list. +/// - Loop through the list, creating nested folds as indents go up and down. +/// +class LineFoldingModel: NSObject, NSTextStorageDelegate { + /// An ordered tree of fold ranges in a document. Can be traversed using ``FoldRange/parent`` + /// and ``FoldRange/subFolds``. + @Published var foldCache: Atomic<[FoldRange]> = Atomic([]) + private var cacheLock = NSLock() + private var calculator: LineFoldCalculator + private var cancellable: AnyCancellable? + + weak var textView: TextView? + + init(textView: TextView, foldProvider: LineFoldProvider?) { + self.textView = textView + self.calculator = LineFoldCalculator(foldProvider: foldProvider, textView: textView) + super.init() + textView.addStorageDelegate(self) + cancellable = self.calculator.rangesPublisher.receive(on: RunLoop.main).sink { newFolds in + self.foldCache.mutate { $0 = newFolds } + } + calculator.textChangedReceiver.send((.zero, 0)) + } + + func getFolds(in lineRange: ClosedRange) -> [FoldRange] { + foldCache.withValue { $0.filter({ $0.lineRange.overlaps(lineRange) }) } + } + + func textStorage( + _ textStorage: NSTextStorage, + didProcessEditing editedMask: NSTextStorageEditActions, + range editedRange: NSRange, + changeInLength delta: Int + ) { + guard editedMask.contains(.editedCharacters) else { + return + } + calculator.textChangedReceiver.send((editedRange, delta)) + } + + /// Finds the deepest cached depth of the fold for a line number. + /// - Parameter lineNumber: The line number to query, zero-indexed. + /// - Returns: The deepest cached depth of the fold if it was found. + func getCachedDepthAt(lineNumber: Int) -> Int? { + return getCachedFoldAt(lineNumber: lineNumber)?.depth + } + + /// Finds the deepest cached fold and depth of the fold for a line number. + /// - Parameter lineNumber: The line number to query, zero-indexed. + /// - Returns: The deepest cached fold and depth of the fold if it was found. + func getCachedFoldAt(lineNumber: Int) -> (range: FoldRange, depth: Int)? { + foldCache.withValue { foldCache in + binarySearchFoldsArray(lineNumber: lineNumber, folds: foldCache, currentDepth: 0, findDeepest: true) + } + } +} + +// MARK: - Search Folds + +private extension LineFoldingModel { + /// A generic function for searching an ordered array of fold ranges. + /// - Returns: The found range and depth it was found at, if it exists. + func binarySearchFoldsArray( + lineNumber: Int, + folds: borrowing [FoldRange], + currentDepth: Int, + findDeepest: Bool + ) -> (range: FoldRange, depth: Int)? { + var low = 0 + var high = folds.count - 1 + + while low <= high { + let mid = (low + high) / 2 + let fold = folds[mid] + + if fold.lineRange.contains(lineNumber) { + // Search deeper into subFolds, if any + if findDeepest { + return binarySearchFoldsArray( + lineNumber: lineNumber, + folds: fold.subFolds, + currentDepth: currentDepth + 1, + findDeepest: findDeepest + ) ?? (fold, currentDepth) + } else { + return (fold, currentDepth) + } + } else if lineNumber < fold.lineRange.lowerBound { + high = mid - 1 + } else { + low = mid + 1 + } + } + return nil + } +} diff --git a/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView+Draw.swift b/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+Draw.swift similarity index 100% rename from Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView+Draw.swift rename to Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+Draw.swift diff --git a/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift b/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView.swift similarity index 100% rename from Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift rename to Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView.swift diff --git a/Sources/CodeEditSourceEditor/TreeSitter/Atomic.swift b/Sources/CodeEditSourceEditor/TreeSitter/Atomic.swift index 4de83868e..b2815fbf6 100644 --- a/Sources/CodeEditSourceEditor/TreeSitter/Atomic.swift +++ b/Sources/CodeEditSourceEditor/TreeSitter/Atomic.swift @@ -22,6 +22,10 @@ final package class Atomic { } } + func withValue(_ handler: (T) -> F) -> F { + lock.withLock { handler(wrappedValue) } + } + func value() -> T { lock.withLock { wrappedValue } } diff --git a/Sources/CodeEditSourceEditor/TreeSitter/LanguageLayer.swift b/Sources/CodeEditSourceEditor/TreeSitter/LanguageLayer.swift index ce67a0c93..89d934914 100644 --- a/Sources/CodeEditSourceEditor/TreeSitter/LanguageLayer.swift +++ b/Sources/CodeEditSourceEditor/TreeSitter/LanguageLayer.swift @@ -158,7 +158,7 @@ public class LanguageLayer: Hashable { } wasLongParse = true } - newTree = DispatchQueue.syncMainIfNot { parser.parse(tree: tree, readBlock: readBlock) } + newTree = DispatchQueue.waitMainIfNot { parser.parse(tree: tree, readBlock: readBlock) } } if wasLongParse { From f8433f37cd459ba06f28ea094aa60ee34fe80c35 Mon Sep 17 00:00:00 2001 From: Khan Winter <35942988+thecoolwinter@users.noreply.github.com> Date: Fri, 9 May 2025 14:07:30 -0500 Subject: [PATCH 11/30] Sanity Check Range --- .../LineFolding/Model/LineFoldCalculator.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift b/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift index 40ec540fe..d6a2931ae 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift @@ -101,7 +101,8 @@ class LineFoldCalculator { var results: [(index: Int, foldDepth: Int)] = [] var count = 0 while count < 50, let linePosition = iterator.next() { - guard let substring = textView.textStorage.substring(from: linePosition.range) as NSString?, + guard textView.textStorage.length <= linePosition.range.max, + let substring = textView.textStorage.substring(from: linePosition.range) as NSString?, let foldDepth = foldProvider.foldLevelAtLine( linePosition.index, substring: substring From d618acee82091f1c748dcb433ab2f014b449f84d Mon Sep 17 00:00:00 2001 From: Khan Winter <35942988+thecoolwinter@users.noreply.github.com> Date: Fri, 9 May 2025 16:25:22 -0500 Subject: [PATCH 12/30] Toggle Folding State --- .../TextViewController+Lifecycle.swift | 1 + .../Gutter/GutterView.swift | 2 +- .../IndentationLineFoldProvider.swift | 32 +++++++- .../FoldProviders/LineFoldProvider.swift | 30 +++++++- .../LineFolding/Model/FoldRange.swift | 11 ++- .../Model/LineFoldCalculator.swift | 73 +++++++++++++------ .../Placeholder/LineFoldPlaceholder.swift | 27 +++++++ .../View/FoldingRibbonView+Draw.swift | 37 +++++++++- .../LineFolding/View/FoldingRibbonView.swift | 29 ++++++++ 9 files changed, 216 insertions(+), 26 deletions(-) create mode 100644 Sources/CodeEditSourceEditor/LineFolding/Placeholder/LineFoldPlaceholder.swift diff --git a/Sources/CodeEditSourceEditor/Controller/TextViewController+Lifecycle.swift b/Sources/CodeEditSourceEditor/Controller/TextViewController+Lifecycle.swift index 86384a6b2..323c7e3ef 100644 --- a/Sources/CodeEditSourceEditor/Controller/TextViewController+Lifecycle.swift +++ b/Sources/CodeEditSourceEditor/Controller/TextViewController+Lifecycle.swift @@ -143,6 +143,7 @@ extension TextViewController { - (self?.scrollView.contentInsets.top ?? 0) self?.gutterView.needsDisplay = true + self?.gutterView.foldingRibbon.needsDisplay = true self?.guideView?.updatePosition(in: textView) self?.scrollView.needsLayout = true } diff --git a/Sources/CodeEditSourceEditor/Gutter/GutterView.swift b/Sources/CodeEditSourceEditor/Gutter/GutterView.swift index 2a5125789..4bdf0a2e7 100644 --- a/Sources/CodeEditSourceEditor/Gutter/GutterView.swift +++ b/Sources/CodeEditSourceEditor/Gutter/GutterView.swift @@ -101,7 +101,7 @@ public class GutterView: NSView { } /// The view that draws the fold decoration in the gutter. - private var foldingRibbon: FoldingRibbonView + var foldingRibbon: FoldingRibbonView /// Syntax helper for determining the required space for the folding ribbon. private var foldingRibbonWidth: CGFloat { diff --git a/Sources/CodeEditSourceEditor/LineFolding/FoldProviders/IndentationLineFoldProvider.swift b/Sources/CodeEditSourceEditor/LineFolding/FoldProviders/IndentationLineFoldProvider.swift index 6a03a4be3..9cd02bc5b 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/FoldProviders/IndentationLineFoldProvider.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/FoldProviders/IndentationLineFoldProvider.swift @@ -9,7 +9,7 @@ import AppKit import CodeEditTextView final class IndentationLineFoldProvider: LineFoldProvider { - func foldLevelAtLine(_ lineNumber: Int, substring: NSString) -> Int? { + func indentLevelAtLine(substring: NSString) -> Int? { for idx in 0.. LineFoldProviderLineInfo? { + guard let leadingIndent = text.leadingRange(in: lineRange, within: .whitespacesWithoutNewlines)?.length, + leadingIndent > 0 else { + return nil + } + + if leadingIndent < currentDepth { + // End the fold at the start of whitespace + return .endFold(rangeEnd: lineRange.location + leadingIndent, newDepth: leadingIndent) + } + + // Check if the next line has more indent + let maxRange = NSRange(start: lineRange.max, end: text.length) + guard let nextIndent = text.leadingRange(in: maxRange, within: .whitespacesWithoutNewlines)?.length, + nextIndent > 0 else { + return nil + } + + if nextIndent > currentDepth, let trailingWhitespace = text.trailingWhitespaceRange(in: lineRange) { + return .startFold(rangeStart: trailingWhitespace.location, newDepth: nextIndent) + } + + return nil + } } diff --git a/Sources/CodeEditSourceEditor/LineFolding/FoldProviders/LineFoldProvider.swift b/Sources/CodeEditSourceEditor/LineFolding/FoldProviders/LineFoldProvider.swift index 97b79f4ca..c155d4de0 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/FoldProviders/LineFoldProvider.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/FoldProviders/LineFoldProvider.swift @@ -8,6 +8,34 @@ import AppKit import CodeEditTextView +enum LineFoldProviderLineInfo { + case startFold(rangeStart: Int, newDepth: Int) + case endFold(rangeEnd: Int, newDepth: Int) + + var depth: Int { + switch self { + case .startFold(_, let newDepth): + return newDepth + case .endFold(_, let newDepth): + return newDepth + } + } + + var rangeIndice: Int { + switch self { + case .startFold(let rangeStart, _): + return rangeStart + case .endFold(let rangeEnd, _): + return rangeEnd + } + } +} + protocol LineFoldProvider: AnyObject { - func foldLevelAtLine(_ lineNumber: Int, substring: NSString) -> Int? + func foldLevelAtLine( + lineNumber: Int, + lineRange: NSRange, + currentDepth: Int, + text: NSTextStorage + ) -> LineFoldProviderLineInfo? } diff --git a/Sources/CodeEditSourceEditor/LineFolding/Model/FoldRange.swift b/Sources/CodeEditSourceEditor/LineFolding/Model/FoldRange.swift index d84929d4c..f775ae5b3 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/Model/FoldRange.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/Model/FoldRange.swift @@ -12,15 +12,24 @@ class FoldRange { var lineRange: ClosedRange var range: NSRange var depth: Int + var collapsed: Bool /// Ordered array of ranges that are nested in this fold. var subFolds: [FoldRange] weak var parent: FoldRange? - init(lineRange: ClosedRange, range: NSRange, depth: Int, parent: FoldRange?, subFolds: [FoldRange]) { + init( + lineRange: ClosedRange, + range: NSRange, + depth: Int, + collapsed: Bool, + parent: FoldRange?, + subFolds: [FoldRange] + ) { self.lineRange = lineRange self.range = range self.depth = depth + self.collapsed = collapsed self.subFolds = subFolds self.parent = parent } diff --git a/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift b/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift index d6a2931ae..0ed289377 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift @@ -15,6 +15,12 @@ import Combine /// Fold information is emitted via `rangesPublisher`. /// Notify the calculator it should re-calculate class LineFoldCalculator { + private struct LineInfo { + let lineNumber: Int + let providerInfo: LineFoldProviderLineInfo + let collapsed: Bool + } + weak var foldProvider: LineFoldProvider? weak var textView: TextView? @@ -48,15 +54,21 @@ class LineFoldCalculator { var currentDepth: Int = 0 var iterator = textView.layoutManager.linesInRange(textView.documentRange) - var lines = self.getMoreLines(textView: textView, iterator: &iterator, foldProvider: foldProvider) + var lines = self.getMoreLines( + textView: textView, + iterator: &iterator, + lastDepth: currentDepth, + foldProvider: foldProvider + ) while let lineChunk = lines { - for (lineNumber, foldDepth) in lineChunk { + for lineInfo in lineChunk { // Start a new fold, going deeper to a new depth. - if foldDepth > currentDepth { + if lineInfo.providerInfo.depth > currentDepth { let newFold = FoldRange( - lineRange: (lineNumber - 1)...(lineNumber - 1), - range: .zero, - depth: foldDepth, + lineRange: lineInfo.lineNumber...lineInfo.lineNumber, + range: NSRange(location: lineInfo.providerInfo.rangeIndice, length: 0), + depth: lineInfo.providerInfo.depth, + collapsed: lineInfo.collapsed, parent: currentFold, subFolds: [] ) @@ -67,24 +79,31 @@ class LineFoldCalculator { currentFold?.subFolds.append(newFold) } currentFold = newFold - } else if foldDepth < currentDepth { + } else if lineInfo.providerInfo.depth < currentDepth { // End this fold, go shallower "popping" folds deeper than the new depth - while let fold = currentFold, fold.depth > foldDepth { + while let fold = currentFold, fold.depth > lineInfo.providerInfo.depth { // close this fold at the current line - fold.lineRange = fold.lineRange.lowerBound...lineNumber + fold.lineRange = fold.lineRange.lowerBound...lineInfo.lineNumber + fold.range = NSRange(start: fold.range.location, end: lineInfo.providerInfo.rangeIndice) // move up currentFold = fold.parent } } - currentDepth = foldDepth + currentDepth = lineInfo.providerInfo.depth } - lines = self.getMoreLines(textView: textView, iterator: &iterator, foldProvider: foldProvider) + lines = self.getMoreLines( + textView: textView, + iterator: &iterator, + lastDepth: currentDepth, + foldProvider: foldProvider + ) } // Clean up any hanging folds. while let fold = currentFold { - fold.lineRange = fold.lineRange.lowerBound...textView.layoutManager.lineCount + fold.lineRange = fold.lineRange.lowerBound...textView.layoutManager.lineCount - 1 + fold.range = NSRange(start: fold.range.location, end: textView.documentRange.length) currentFold = fold.parent } @@ -95,24 +114,36 @@ class LineFoldCalculator { private func getMoreLines( textView: TextView, iterator: inout TextLayoutManager.RangeIterator, + lastDepth: Int, foldProvider: LineFoldProvider - ) -> [(index: Int, foldDepth: Int)]? { + ) -> [LineInfo]? { DispatchQueue.main.asyncAndWait { - var results: [(index: Int, foldDepth: Int)] = [] + var results: [LineInfo] = [] var count = 0 + var lastDepth = lastDepth while count < 50, let linePosition = iterator.next() { - guard textView.textStorage.length <= linePosition.range.max, - let substring = textView.textStorage.substring(from: linePosition.range) as NSString?, - let foldDepth = foldProvider.foldLevelAtLine( - linePosition.index, - substring: substring - ) else { + guard let foldInfo = foldProvider.foldLevelAtLine( + lineNumber: linePosition.index, + lineRange: linePosition.range, + currentDepth: lastDepth, + text: textView.textStorage + ) else { count += 1 continue } + let attachments = textView.layoutManager.attachments + .getAttachmentsOverlapping(linePosition.range) + .compactMap({ $0.attachment as? LineFoldPlaceholder }) - results.append((linePosition.index, foldDepth)) + results.append( + LineInfo( + lineNumber: linePosition.index, + providerInfo: foldInfo, + collapsed: !attachments.isEmpty + ) + ) count += 1 + lastDepth = foldInfo.depth } if results.isEmpty && count == 0 { return nil diff --git a/Sources/CodeEditSourceEditor/LineFolding/Placeholder/LineFoldPlaceholder.swift b/Sources/CodeEditSourceEditor/LineFolding/Placeholder/LineFoldPlaceholder.swift new file mode 100644 index 000000000..d973a6483 --- /dev/null +++ b/Sources/CodeEditSourceEditor/LineFolding/Placeholder/LineFoldPlaceholder.swift @@ -0,0 +1,27 @@ +// +// LineFoldPlaceholder.swift +// CodeEditSourceEditor +// +// Created by Khan Winter on 5/9/25. +// + +import AppKit +import CodeEditTextView + +class LineFoldPlaceholder: TextAttachment { + var width: CGFloat { 17 } + + func draw(in context: CGContext, rect: NSRect) { + context.saveGState() + + let centerY = rect.midY - 1.5 + + context.setFillColor(NSColor.secondaryLabelColor.cgColor) + context.addEllipse(in: CGRect(x: rect.minX + 2, y: centerY, width: 3, height: 3)) + context.addEllipse(in: CGRect(x: rect.minX + 7, y: centerY, width: 3, height: 3)) + context.addEllipse(in: CGRect(x: rect.minX + 12, y: centerY, width: 3, height: 3)) + context.fillPath() + + context.restoreGState() + } +} diff --git a/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+Draw.swift b/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+Draw.swift index d85a25916..c81ab8f74 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+Draw.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+Draw.swift @@ -76,7 +76,9 @@ extension FoldingRibbonView { let maxYPosition = maxPosition.yPos + maxPosition.height - if let hoveringFold, + if fold.collapsed { + drawCollapsedFold(minYPosition: minYPosition, maxYPosition: maxYPosition, in: context) + } else if let hoveringFold, hoveringFold.depth == markerContext.depth, fold.lineRange == hoveringFold.range { drawHoveredFold( @@ -100,6 +102,39 @@ extension FoldingRibbonView { } } + private func drawCollapsedFold( + minYPosition: CGFloat, + maxYPosition: CGFloat, + in context: CGContext + ) { + context.saveGState() + + let fillRect = CGRect(x: 0, y: minYPosition, width: Self.width, height: maxYPosition - minYPosition) + + let height = 5.0 + let minX = 2.0 + let maxX = Self.width - 2.0 + let centerY = minYPosition + (maxYPosition - minYPosition)/2 + let minY = centerY - (height/2) + let maxY = centerY + (height/2) + let chevron = CGMutablePath() + + chevron.move(to: CGPoint(x: minX, y: minY)) + chevron.addLine(to: CGPoint(x: maxX, y: centerY)) + chevron.addLine(to: CGPoint(x: minX, y: maxY)) + + context.setStrokeColor(NSColor.secondaryLabelColor.cgColor) + context.setLineCap(.round) + context.setLineJoin(.round) + context.setLineWidth(1.3) + + context.fill(fillRect) + context.addPath(chevron) + context.strokePath() + + context.restoreGState() + } + private func drawHoveredFold( markerContext: FoldMarkerDrawingContext, minYPosition: CGFloat, diff --git a/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView.swift b/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView.swift index 05f9c1e5a..1a3505d79 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView.swift @@ -113,6 +113,11 @@ class FoldingRibbonView: NSView { foldUpdateCancellable?.cancel() } + override public func resetCursorRects() { + // Don't use an iBeam in this view + addCursorRect(bounds, cursor: .arrow) + } + // MARK: - Hover override func updateTrackingAreas() { @@ -126,6 +131,30 @@ class FoldingRibbonView: NSView { addTrackingArea(area) } + var attachments: [LineFoldPlaceholder] = [] + + override func mouseDown(with event: NSEvent) { + let clickPoint = convert(event.locationInWindow, from: nil) + guard event.type == .leftMouseDown, + let lineNumber = model.textView?.layoutManager.textLineForPosition(clickPoint.y)?.index, + let fold = model.getCachedFoldAt(lineNumber: lineNumber) else { + super.mouseDown(with: event) + return + } + if let attachment = model.textView?.layoutManager.attachments.getAttachmentsStartingIn(fold.range.range).first { + model.textView?.layoutManager.attachments.remove(atOffset: attachment.range.location) + fold.range.collapsed = false + attachments.removeAll(where: { $0 === attachment.attachment }) + } else { + let placeholder = LineFoldPlaceholder() + model.textView?.layoutManager.attachments.add(placeholder, for: fold.range.range) + attachments.append(placeholder) + fold.range.collapsed = true + } + + model.textView?.needsLayout = true + } + override func mouseMoved(with event: NSEvent) { let pointInView = convert(event.locationInWindow, from: nil) guard let lineNumber = model.textView?.layoutManager.textLineForPosition(pointInView.y)?.index, From d3c03cfe16b29b13f246dd08ab926296014a677f Mon Sep 17 00:00:00 2001 From: Khan Winter <35942988+thecoolwinter@users.noreply.github.com> Date: Wed, 28 May 2025 16:12:23 -0500 Subject: [PATCH 13/30] Make StyledRangeStore Generalized and `Sendable` --- .../Highlighting/Highlighter.swift | 2 +- .../StyledRangeContainer.swift | 51 +++++++--- .../StyledRangeStoreRun.swift | 47 --------- .../StyledRangeStore+Coalesce.swift | 6 +- .../StyledRangeStore+FindIndex.swift | 0 .../StyledRangeStore+OffsetMetric.swift | 0 .../StyledRangeStore+StyledRun.swift | 19 ++-- .../StyledRangeStore/StyledRangeStore.swift | 28 +++--- .../StyledRangeStoreRun.swift | 48 +++++++++ .../StyledRangeContainerTests.swift | 44 ++++----- .../Highlighting/StyledRangeStoreTests.swift | 97 ++++++++++--------- 11 files changed, 190 insertions(+), 152 deletions(-) delete mode 100644 Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeStore/StyledRangeStoreRun.swift rename Sources/CodeEditSourceEditor/{Highlighting/StyledRangeContainer => }/StyledRangeStore/StyledRangeStore+Coalesce.swift (89%) rename Sources/CodeEditSourceEditor/{Highlighting/StyledRangeContainer => }/StyledRangeStore/StyledRangeStore+FindIndex.swift (100%) rename Sources/CodeEditSourceEditor/{Highlighting/StyledRangeContainer => }/StyledRangeStore/StyledRangeStore+OffsetMetric.swift (100%) rename Sources/CodeEditSourceEditor/{Highlighting/StyledRangeContainer => }/StyledRangeStore/StyledRangeStore+StyledRun.swift (79%) rename Sources/CodeEditSourceEditor/{Highlighting/StyledRangeContainer => }/StyledRangeStore/StyledRangeStore.swift (79%) create mode 100644 Sources/CodeEditSourceEditor/StyledRangeStore/StyledRangeStoreRun.swift diff --git a/Sources/CodeEditSourceEditor/Highlighting/Highlighter.swift b/Sources/CodeEditSourceEditor/Highlighting/Highlighter.swift index 884415bf0..4a9b0c9e4 100644 --- a/Sources/CodeEditSourceEditor/Highlighting/Highlighter.swift +++ b/Sources/CodeEditSourceEditor/Highlighting/Highlighter.swift @@ -276,7 +276,7 @@ extension Highlighter: StyledRangeContainerDelegate { guard let range = NSRange(location: offset, length: run.length).intersection(range) else { continue } - storage?.setAttributes(attributeProvider.attributesFor(run.capture), range: range) + storage?.setAttributes(attributeProvider.attributesFor(run.value?.capture), range: range) offset += range.length } diff --git a/Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeContainer.swift b/Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeContainer.swift index 6ac69bcc7..f159c25f7 100644 --- a/Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeContainer.swift +++ b/Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeContainer.swift @@ -18,7 +18,34 @@ protocol StyledRangeContainerDelegate: AnyObject { /// See ``runsIn(range:)`` for more details on how conflicting highlights are handled. @MainActor class StyledRangeContainer { - var _storage: [ProviderID: StyledRangeStore] = [:] + struct StyleElement: StyledRangeStoreElement, CustomDebugStringConvertible { + var capture: CaptureName? + var modifiers: CaptureModifierSet + + var isEmpty: Bool { + capture == nil && modifiers.isEmpty + } + + func combineLowerPriority(_ other: StyleElement?) -> StyleElement { + StyleElement( + capture: self.capture ?? other?.capture, + modifiers: modifiers.union(other?.modifiers ?? []) + ) + } + + func combineHigherPriority(_ other: StyleElement?) -> StyleElement { + StyleElement( + capture: other?.capture ?? self.capture, + modifiers: modifiers.union(other?.modifiers ?? []) + ) + } + + var debugDescription: String { + "\(capture?.stringValue ?? "(empty)"), \(modifiers)" + } + } + + var _storage: [ProviderID: StyledRangeStore] = [:] weak var delegate: StyledRangeContainerDelegate? /// Initialize the container with a list of provider identifiers. Each provider is given an id, they should be @@ -28,13 +55,13 @@ class StyledRangeContainer { /// - providers: An array of identifiers given to providers. init(documentLength: Int, providers: [ProviderID]) { for provider in providers { - _storage[provider] = StyledRangeStore(documentLength: documentLength) + _storage[provider] = StyledRangeStore(documentLength: documentLength) } } func addProvider(_ id: ProviderID, documentLength: Int) { assert(!_storage.keys.contains(id), "Provider already exists") - _storage[id] = StyledRangeStore(documentLength: documentLength) + _storage[id] = StyledRangeStore(documentLength: documentLength) } func removeProvider(_ id: ProviderID) { @@ -55,10 +82,10 @@ class StyledRangeContainer { /// /// - Parameter range: The range to query. /// - Returns: An array of continuous styled runs. - func runsIn(range: NSRange) -> [StyledRangeStoreRun] { + func runsIn(range: NSRange) -> [StyledRangeStoreRun] { // Ordered by priority, lower = higher priority. var allRuns = _storage.sorted(by: { $0.key < $1.key }).map { $0.value.runs(in: range.intRange) } - var runs: [StyledRangeStoreRun] = [] + var runs: [StyledRangeStoreRun] = [] var minValue = allRuns.compactMap { $0.last }.enumerated().min(by: { $0.1.length < $1.1.length }) @@ -93,8 +120,8 @@ class StyledRangeContainer { } func storageUpdated(replacedContentIn range: Range, withCount newLength: Int) { - _storage.values.forEach { - $0.storageUpdated(replacedCharactersIn: range, withCount: newLength) + for (key, value) in _storage { + _storage[key]?.storageUpdated(replacedCharactersIn: range, withCount: newLength) } } } @@ -109,11 +136,11 @@ extension StyledRangeContainer: HighlightProviderStateDelegate { /// - rangeToHighlight: The range to apply the highlights to. func applyHighlightResult(provider: ProviderID, highlights: [HighlightRange], rangeToHighlight: NSRange) { assert(rangeToHighlight != .notFound, "NSNotFound is an invalid highlight range") - guard let storage = _storage[provider] else { + guard var storage = _storage[provider] else { assertionFailure("No storage found for the given provider: \(provider)") return } - var runs: [StyledRangeStoreRun] = [] + var runs: [StyledRangeStoreRun] = [] var lastIndex = rangeToHighlight.lowerBound for highlight in highlights { @@ -123,10 +150,9 @@ extension StyledRangeContainer: HighlightProviderStateDelegate { continue // Skip! Overlapping } runs.append( - StyledRangeStoreRun( + StyledRangeStoreRun( length: highlight.range.length, - capture: highlight.capture, - modifiers: highlight.modifiers + value: StyleElement(capture: highlight.capture, modifiers: highlight.modifiers) ) ) lastIndex = highlight.range.max @@ -137,6 +163,7 @@ extension StyledRangeContainer: HighlightProviderStateDelegate { } storage.set(runs: runs, for: rangeToHighlight.intRange) + _storage[provider] = storage delegate?.styleContainerDidUpdate(in: rangeToHighlight) } } diff --git a/Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeStore/StyledRangeStoreRun.swift b/Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeStore/StyledRangeStoreRun.swift deleted file mode 100644 index 06335edba..000000000 --- a/Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeStore/StyledRangeStoreRun.swift +++ /dev/null @@ -1,47 +0,0 @@ -// -// StyledRangeStoreRun.swift -// CodeEditSourceEditor -// -// Created by Khan Winter on 11/4/24. -// - -/// Consumer-facing value type for the stored values in this container. -struct StyledRangeStoreRun: Equatable, Hashable { - var length: Int - var capture: CaptureName? - var modifiers: CaptureModifierSet - - static func empty(length: Int) -> Self { - StyledRangeStoreRun(length: length, capture: nil, modifiers: []) - } - - var isEmpty: Bool { - capture == nil && modifiers.isEmpty - } - - mutating package func combineLowerPriority(_ other: borrowing StyledRangeStoreRun) { - if self.capture == nil { - self.capture = other.capture - } - self.modifiers.formUnion(other.modifiers) - } - - mutating package func combineHigherPriority(_ other: borrowing StyledRangeStoreRun) { - self.capture = other.capture ?? self.capture - self.modifiers.formUnion(other.modifiers) - } - - mutating package func subtractLength(_ other: borrowing StyledRangeStoreRun) { - self.length -= other.length - } -} - -extension StyledRangeStoreRun: CustomDebugStringConvertible { - var debugDescription: String { - if isEmpty { - "\(length) (empty)" - } else { - "\(length) (\(capture.debugDescription), \(modifiers.values.debugDescription))" - } - } -} diff --git a/Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeStore/StyledRangeStore+Coalesce.swift b/Sources/CodeEditSourceEditor/StyledRangeStore/StyledRangeStore+Coalesce.swift similarity index 89% rename from Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeStore/StyledRangeStore+Coalesce.swift rename to Sources/CodeEditSourceEditor/StyledRangeStore/StyledRangeStore+Coalesce.swift index 542661b5a..39f26612e 100644 --- a/Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeStore/StyledRangeStore+Coalesce.swift +++ b/Sources/CodeEditSourceEditor/StyledRangeStore/StyledRangeStore+Coalesce.swift @@ -16,7 +16,7 @@ extension StyledRangeStore { /// rather than the queried one. /// /// - Parameter range: The range of the item to coalesce around. - func coalesceNearby(range: Range) { + mutating func coalesceNearby(range: Range) { var index = findIndex(at: range.lastIndex).index if index < _guts.endIndex && _guts.index(after: index) != _guts.endIndex { coalesceRunAfter(index: &index) @@ -30,11 +30,11 @@ extension StyledRangeStore { } /// Check if the run and the run after it are equal, and if so remove the next one and concatenate the two. - private func coalesceRunAfter(index: inout Index) { + private mutating func coalesceRunAfter(index: inout Index) { let thisRun = _guts[index] let nextRun = _guts[_guts.index(after: index)] - if thisRun.styleCompare(nextRun) { + if thisRun.compareValue(nextRun) { _guts.update(at: &index, by: { $0.length += nextRun.length }) var nextIndex = index diff --git a/Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeStore/StyledRangeStore+FindIndex.swift b/Sources/CodeEditSourceEditor/StyledRangeStore/StyledRangeStore+FindIndex.swift similarity index 100% rename from Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeStore/StyledRangeStore+FindIndex.swift rename to Sources/CodeEditSourceEditor/StyledRangeStore/StyledRangeStore+FindIndex.swift diff --git a/Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeStore/StyledRangeStore+OffsetMetric.swift b/Sources/CodeEditSourceEditor/StyledRangeStore/StyledRangeStore+OffsetMetric.swift similarity index 100% rename from Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeStore/StyledRangeStore+OffsetMetric.swift rename to Sources/CodeEditSourceEditor/StyledRangeStore/StyledRangeStore+OffsetMetric.swift diff --git a/Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeStore/StyledRangeStore+StyledRun.swift b/Sources/CodeEditSourceEditor/StyledRangeStore/StyledRangeStore+StyledRun.swift similarity index 79% rename from Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeStore/StyledRangeStore+StyledRun.swift rename to Sources/CodeEditSourceEditor/StyledRangeStore/StyledRangeStore+StyledRun.swift index 3fe15a150..ea45402d9 100644 --- a/Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeStore/StyledRangeStore+StyledRun.swift +++ b/Sources/CodeEditSourceEditor/StyledRangeStore/StyledRangeStore+StyledRun.swift @@ -9,18 +9,25 @@ import _RopeModule extension StyledRangeStore { struct StyledRun { var length: Int - let capture: CaptureName? - let modifiers: CaptureModifierSet + let value: Element? static func empty(length: Int) -> Self { - StyledRun(length: length, capture: nil, modifiers: []) + StyledRun(length: length, value: nil) } /// Compare two styled ranges by their stored styles. /// - Parameter other: The range to compare to. /// - Returns: The result of the comparison. - func styleCompare(_ other: Self) -> Bool { - capture == other.capture && modifiers == other.modifiers + func compareValue(_ other: Self) -> Bool { + return if let lhs = value, let rhs = other.value { + lhs == rhs + } else if let lhs = value { + lhs.isEmpty + } else if let rhs = other.value { + rhs.isEmpty + } else { + true + } } } } @@ -50,7 +57,7 @@ extension StyledRangeStore.StyledRun: RopeElement { mutating func split(at index: Self.Index) -> Self { assert(index >= 0 && index <= length) - let tail = Self(length: length - index, capture: capture, modifiers: modifiers) + let tail = Self(length: length - index, value: value) length = index return tail } diff --git a/Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeStore/StyledRangeStore.swift b/Sources/CodeEditSourceEditor/StyledRangeStore/StyledRangeStore.swift similarity index 79% rename from Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeStore/StyledRangeStore.swift rename to Sources/CodeEditSourceEditor/StyledRangeStore/StyledRangeStore.swift index 68d4056da..407f4fbf0 100644 --- a/Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeStore/StyledRangeStore.swift +++ b/Sources/CodeEditSourceEditor/StyledRangeStore/StyledRangeStore.swift @@ -12,10 +12,11 @@ import _RopeModule /// /// Internally this class uses a `Rope` from the swift-collections package, allowing for efficient updates and /// retrievals. -final class StyledRangeStore { - typealias Run = StyledRangeStoreRun - typealias Index = Rope.Index - var _guts = Rope() +struct StyledRangeStore: Sendable { + typealias Run = StyledRangeStoreRun + typealias RopeType = Rope + typealias Index = RopeType.Index + var _guts = RopeType() var length: Int { _guts.count(in: OffsetMetric()) @@ -26,7 +27,7 @@ final class StyledRangeStore { private var cache: (range: Range, runs: [Run])? init(documentLength: Int) { - self._guts = Rope([StyledRun(length: documentLength, capture: nil, modifiers: [])]) + self._guts = RopeType([StyledRun(length: documentLength, value: nil)]) } // MARK: - Core @@ -48,7 +49,7 @@ final class StyledRangeStore { while index < _guts.endIndex { let run = _guts[index] - runs.append(Run(length: run.length - (offset ?? 0), capture: run.capture, modifiers: run.modifiers)) + runs.append(Run(length: run.length - (offset ?? 0), value: run.value)) index = _guts.index(after: index) offset = nil @@ -57,22 +58,21 @@ final class StyledRangeStore { return runs } - /// Sets a capture and modifiers for a range. + /// Sets a value for a range. /// - Parameters: - /// - capture: The capture to set. - /// - modifiers: The modifiers to set. + /// - value: The value to set for the given range. /// - range: The range to write to. - func set(capture: CaptureName, modifiers: CaptureModifierSet, for range: Range) { + mutating func set(value: Element, for range: Range) { assert(range.lowerBound >= 0, "Negative lowerBound") assert(range.upperBound <= _guts.count(in: OffsetMetric()), "upperBound outside valid range") - set(runs: [Run(length: range.length, capture: capture, modifiers: modifiers)], for: range) + set(runs: [Run(length: range.length, value: value)], for: range) } /// Replaces a range in the document with an array of runs. /// - Parameters: /// - runs: The runs to insert. /// - range: The range to replace. - func set(runs: [Run], for range: Range) { + mutating func set(runs: [Run], for range: Range) { let gutsRange = 0..<_guts.count(in: OffsetMetric()) if range.clamped(to: gutsRange) != range { let upperBound = range.clamped(to: gutsRange).upperBound @@ -83,7 +83,7 @@ final class StyledRangeStore { _guts.replaceSubrange( range, in: OffsetMetric(), - with: runs.map { StyledRun(length: $0.length, capture: $0.capture, modifiers: $0.modifiers) } + with: runs.map { StyledRun(length: $0.length, value: $0.value) } ) coalesceNearby(range: range) @@ -95,7 +95,7 @@ final class StyledRangeStore { extension StyledRangeStore { /// Handles keeping the internal storage in sync with the document. - func storageUpdated(replacedCharactersIn range: Range, withCount newLength: Int) { + mutating func storageUpdated(replacedCharactersIn range: Range, withCount newLength: Int) { assert(range.lowerBound >= 0, "Negative lowerBound") assert(range.upperBound <= _guts.count(in: OffsetMetric()), "upperBound outside valid range") diff --git a/Sources/CodeEditSourceEditor/StyledRangeStore/StyledRangeStoreRun.swift b/Sources/CodeEditSourceEditor/StyledRangeStore/StyledRangeStoreRun.swift new file mode 100644 index 000000000..6e3b0deb9 --- /dev/null +++ b/Sources/CodeEditSourceEditor/StyledRangeStore/StyledRangeStoreRun.swift @@ -0,0 +1,48 @@ +// +// StyledRangeStoreRun.swift +// CodeEditSourceEditor +// +// Created by Khan Winter on 11/4/24. +// + +protocol StyledRangeStoreElement: Equatable, Hashable { + var isEmpty: Bool { get } + func combineLowerPriority(_ other: Self?) -> Self + func combineHigherPriority(_ other: Self?) -> Self +} + +/// Consumer-facing value type for the stored values in this container. +struct StyledRangeStoreRun: Equatable, Hashable { + var length: Int + var value: Element? + + static func empty(length: Int) -> Self { + StyledRangeStoreRun(length: length, value: nil) + } + + var isEmpty: Bool { + value?.isEmpty ?? true + } + + mutating func combineLowerPriority(_ other: StyledRangeStoreRun) { + value = value?.combineLowerPriority(other.value) ?? other.value + } + + mutating func combineHigherPriority(_ other: StyledRangeStoreRun) { + value = value?.combineHigherPriority(other.value) ?? other.value + } + + mutating func subtractLength(_ other: borrowing StyledRangeStoreRun) { + self.length -= other.length + } +} + +extension StyledRangeStoreRun: CustomDebugStringConvertible { + var debugDescription: String { + if let value = value as? CustomDebugStringConvertible { + "\(length) (\(value.debugDescription))" + } else { + "\(length) (empty)" + } + } +} diff --git a/Tests/CodeEditSourceEditorTests/Highlighting/StyledRangeContainerTests.swift b/Tests/CodeEditSourceEditorTests/Highlighting/StyledRangeContainerTests.swift index 1ea05fc20..6506f2eb0 100644 --- a/Tests/CodeEditSourceEditorTests/Highlighting/StyledRangeContainerTests.swift +++ b/Tests/CodeEditSourceEditorTests/Highlighting/StyledRangeContainerTests.swift @@ -2,7 +2,7 @@ import XCTest @testable import CodeEditSourceEditor final class StyledRangeContainerTests: XCTestCase { - typealias Run = StyledRangeStoreRun + typealias Run = StyledRangeStoreRun @MainActor func test_init() { @@ -27,16 +27,16 @@ final class StyledRangeContainerTests: XCTestCase { XCTAssertNotNil(store._storage[providers[0]]) XCTAssertEqual(store._storage[providers[0]]!.count, 3) - XCTAssertNil(store._storage[providers[0]]!.runs(in: 0..<100)[0].capture) - XCTAssertEqual(store._storage[providers[0]]!.runs(in: 0..<100)[1].capture, .comment) - XCTAssertNil(store._storage[providers[0]]!.runs(in: 0..<100)[2].capture) + XCTAssertNil(store._storage[providers[0]]!.runs(in: 0..<100)[0].value?.capture) + XCTAssertEqual(store._storage[providers[0]]!.runs(in: 0..<100)[1].value?.capture, .comment) + XCTAssertNil(store._storage[providers[0]]!.runs(in: 0..<100)[2].value?.capture) XCTAssertEqual( store.runsIn(range: NSRange(location: 0, length: 100)), [ - Run(length: 40, capture: nil, modifiers: []), - Run(length: 10, capture: .comment, modifiers: []), - Run(length: 50, capture: nil, modifiers: []) + Run(length: 40, value: nil), + Run(length: 10, value: .init(capture: .comment, modifiers: [])), + Run(length: 50, value: nil) ] ) } @@ -63,10 +63,10 @@ final class StyledRangeContainerTests: XCTestCase { XCTAssertEqual( store.runsIn(range: NSRange(location: 0, length: 100)), [ - Run(length: 40, capture: nil, modifiers: []), - Run(length: 5, capture: .comment, modifiers: []), - Run(length: 5, capture: .comment, modifiers: [.declaration]), - Run(length: 50, capture: nil, modifiers: []) + Run(length: 40, value: nil), + Run(length: 5, value: .init(capture: .comment, modifiers: [])), + Run(length: 5, value: .init(capture: .comment, modifiers: [.declaration])), + Run(length: 50, value: nil) ] ) } @@ -107,16 +107,16 @@ final class StyledRangeContainerTests: XCTestCase { XCTAssertEqual(runs.reduce(0, { $0 + $1.length}), 200) - XCTAssertEqual(runs[0], Run(length: 30, capture: nil, modifiers: [])) - XCTAssertEqual(runs[1], Run(length: 5, capture: .comment, modifiers: [])) - XCTAssertEqual(runs[2], Run(length: 5, capture: .comment, modifiers: [.declaration])) - XCTAssertEqual(runs[3], Run(length: 5, capture: .comment, modifiers: [.abstract, .declaration])) - XCTAssertEqual(runs[4], Run(length: 5, capture: .comment, modifiers: [])) - XCTAssertEqual(runs[5], Run(length: 30, capture: nil, modifiers: [])) - XCTAssertEqual(runs[6], Run(length: 10, capture: .string, modifiers: [])) - XCTAssertEqual(runs[7], Run(length: 10, capture: .string, modifiers: [.static])) - XCTAssertEqual(runs[8], Run(length: 5, capture: .string, modifiers: [.static, .modification])) - XCTAssertEqual(runs[9], Run(length: 5, capture: .string, modifiers: [.modification])) - XCTAssertEqual(runs[10], Run(length: 90, capture: nil, modifiers: [])) + XCTAssertEqual(runs[0], Run(length: 30, value: nil)) + XCTAssertEqual(runs[1], Run(length: 5, value: .init(capture: .comment, modifiers: []))) + XCTAssertEqual(runs[2], Run(length: 5, value: .init(capture: .comment, modifiers: [.declaration]))) + XCTAssertEqual(runs[3], Run(length: 5, value: .init(capture: .comment, modifiers: [.abstract, .declaration]))) + XCTAssertEqual(runs[4], Run(length: 5, value: .init(capture: .comment, modifiers: []))) + XCTAssertEqual(runs[5], Run(length: 30, value: nil)) + XCTAssertEqual(runs[6], Run(length: 10, value: .init(capture: .string, modifiers: []))) + XCTAssertEqual(runs[7], Run(length: 10, value: .init(capture: .string, modifiers: [.static]))) + XCTAssertEqual(runs[8], Run(length: 5, value: .init(capture: .string, modifiers: [.static, .modification]))) + XCTAssertEqual(runs[9], Run(length: 5, value: .init(capture: .string, modifiers: [.modification]))) + XCTAssertEqual(runs[10], Run(length: 90, value: nil)) } } diff --git a/Tests/CodeEditSourceEditorTests/Highlighting/StyledRangeStoreTests.swift b/Tests/CodeEditSourceEditorTests/Highlighting/StyledRangeStoreTests.swift index 5b43d5d2e..7a50e185d 100644 --- a/Tests/CodeEditSourceEditorTests/Highlighting/StyledRangeStoreTests.swift +++ b/Tests/CodeEditSourceEditorTests/Highlighting/StyledRangeStoreTests.swift @@ -7,6 +7,8 @@ extension StyledRangeStore { } final class StyledRangeStoreTests: XCTestCase { + typealias Store = StyledRangeStore + override var continueAfterFailure: Bool { get { false } set { } @@ -15,7 +17,7 @@ final class StyledRangeStoreTests: XCTestCase { func test_initWithLength() { for _ in 0..<100 { let length = Int.random(in: 0..<1000) - let store = StyledRangeStore(documentLength: length) + var store = Store(documentLength: length) XCTAssertEqual(store.length, length) } } @@ -23,26 +25,27 @@ final class StyledRangeStoreTests: XCTestCase { // MARK: - Storage func test_storageRemoveCharacters() { - let store = StyledRangeStore(documentLength: 100) + var store = Store(documentLength: 100) store.storageUpdated(replacedCharactersIn: 10..<12, withCount: 0) XCTAssertEqual(store.length, 98, "Failed to remove correct range") XCTAssertEqual(store.count, 1, "Failed to coalesce") } func test_storageRemoveFromEnd() { - let store = StyledRangeStore(documentLength: 100) + var store = Store(documentLength: 100) store.storageUpdated(replacedCharactersIn: 95..<100, withCount: 0) XCTAssertEqual(store.length, 95, "Failed to remove correct range") XCTAssertEqual(store.count, 1, "Failed to coalesce") } func test_storageRemoveSingleCharacterFromEnd() { - let store = StyledRangeStore(documentLength: 10) + var store = Store(documentLength: 10) store.set( // Test that we can delete a character associated with a single syntax run too runs: [ .empty(length: 8), - .init(length: 1, modifiers: [.abstract]), - .init(length: 1, modifiers: [.declaration])], + .init(length: 1, value: .init(modifiers: [.abstract])), + .init(length: 1, value: .init(modifiers: [.declaration])) + ], for: 0..<10 ) store.storageUpdated(replacedCharactersIn: 9..<10, withCount: 0) @@ -51,70 +54,70 @@ final class StyledRangeStoreTests: XCTestCase { } func test_storageRemoveFromBeginning() { - let store = StyledRangeStore(documentLength: 100) + var store = Store(documentLength: 100) store.storageUpdated(replacedCharactersIn: 0..<15, withCount: 0) XCTAssertEqual(store.length, 85, "Failed to remove correct range") XCTAssertEqual(store.count, 1, "Failed to coalesce") } func test_storageRemoveAll() { - let store = StyledRangeStore(documentLength: 100) + var store = Store(documentLength: 100) store.storageUpdated(replacedCharactersIn: 0..<100, withCount: 0) XCTAssertEqual(store.length, 0, "Failed to remove correct range") XCTAssertEqual(store.count, 0, "Failed to remove all runs") } func test_storageInsert() { - let store = StyledRangeStore(documentLength: 100) + var store = Store(documentLength: 100) store.storageUpdated(replacedCharactersIn: 45..<45, withCount: 10) XCTAssertEqual(store.length, 110) XCTAssertEqual(store.count, 1, "Failed to coalesce") } func test_storageInsertAtEnd() { - let store = StyledRangeStore(documentLength: 100) + var store = Store(documentLength: 100) store.storageUpdated(replacedCharactersIn: 100..<100, withCount: 10) XCTAssertEqual(store.length, 110) XCTAssertEqual(store.count, 1, "Failed to coalesce") } func test_storageInsertAtBeginning() { - let store = StyledRangeStore(documentLength: 100) + var store = Store(documentLength: 100) store.storageUpdated(replacedCharactersIn: 0..<0, withCount: 10) XCTAssertEqual(store.length, 110) XCTAssertEqual(store.count, 1, "Failed to coalesce") } func test_storageInsertFromEmpty() { - let store = StyledRangeStore(documentLength: 0) + var store = Store(documentLength: 0) store.storageUpdated(replacedCharactersIn: 0..<0, withCount: 10) XCTAssertEqual(store.length, 10) XCTAssertEqual(store.count, 1, "Failed to coalesce") } func test_storageEdit() { - let store = StyledRangeStore(documentLength: 100) + var store = Store(documentLength: 100) store.storageUpdated(replacedCharactersIn: 45..<50, withCount: 10) XCTAssertEqual(store.length, 105) XCTAssertEqual(store.count, 1, "Failed to coalesce") } func test_storageEditAtEnd() { - let store = StyledRangeStore(documentLength: 100) + var store = Store(documentLength: 100) store.storageUpdated(replacedCharactersIn: 95..<100, withCount: 10) XCTAssertEqual(store.length, 105) XCTAssertEqual(store.count, 1, "Failed to coalesce") } func test_storageEditAtBeginning() { - let store = StyledRangeStore(documentLength: 100) + var store = Store(documentLength: 100) store.storageUpdated(replacedCharactersIn: 0..<5, withCount: 10) XCTAssertEqual(store.length, 105) XCTAssertEqual(store.count, 1, "Failed to coalesce") } func test_storageEditAll() { - let store = StyledRangeStore(documentLength: 100) + var store = Store(documentLength: 100) store.storageUpdated(replacedCharactersIn: 0..<100, withCount: 10) XCTAssertEqual(store.length, 10) XCTAssertEqual(store.count, 1, "Failed to coalesce") @@ -123,8 +126,8 @@ final class StyledRangeStoreTests: XCTestCase { // MARK: - Styles func test_setOneRun() { - let store = StyledRangeStore(documentLength: 100) - store.set(capture: .comment, modifiers: [.static], for: 45..<50) + var store = Store(documentLength: 100) + store.set(value: .init(capture: .comment, modifiers: [.static]), for: 45..<50) XCTAssertEqual(store.length, 100) XCTAssertEqual(store.count, 3) @@ -134,18 +137,18 @@ final class StyledRangeStoreTests: XCTestCase { XCTAssertEqual(runs[1].length, 5) XCTAssertEqual(runs[2].length, 50) - XCTAssertNil(runs[0].capture) - XCTAssertEqual(runs[1].capture, .comment) - XCTAssertNil(runs[2].capture) + XCTAssertNil(runs[0].value?.capture) + XCTAssertEqual(runs[1].value?.capture, .comment) + XCTAssertNil(runs[2].value?.capture) - XCTAssertEqual(runs[0].modifiers, []) - XCTAssertEqual(runs[1].modifiers, [.static]) - XCTAssertEqual(runs[2].modifiers, []) + XCTAssertEqual(runs[0].value?.modifiers, nil) + XCTAssertEqual(runs[1].value?.modifiers, [.static]) + XCTAssertEqual(runs[2].value?.modifiers, nil) } func test_queryOverlappingRun() { - let store = StyledRangeStore(documentLength: 100) - store.set(capture: .comment, modifiers: [.static], for: 45..<50) + var store = Store(documentLength: 100) + store.set(value: .init(capture: .comment, modifiers: [.static]), for: 45..<50) XCTAssertEqual(store.length, 100) XCTAssertEqual(store.count, 3) @@ -154,21 +157,21 @@ final class StyledRangeStoreTests: XCTestCase { XCTAssertEqual(runs[0].length, 3) XCTAssertEqual(runs[1].length, 50) - XCTAssertEqual(runs[0].capture, .comment) - XCTAssertNil(runs[1].capture) + XCTAssertEqual(runs[0].value?.capture, .comment) + XCTAssertNil(runs[1].value?.capture) - XCTAssertEqual(runs[0].modifiers, [.static]) - XCTAssertEqual(runs[1].modifiers, []) + XCTAssertEqual(runs[0].value?.modifiers, [.static]) + XCTAssertEqual(runs[1].value?.modifiers, nil) } func test_setMultipleRuns() { - let store = StyledRangeStore(documentLength: 100) + var store = Store(documentLength: 100) - store.set(capture: .comment, modifiers: [.static], for: 5..<15) - store.set(capture: .keyword, modifiers: [], for: 20..<30) - store.set(capture: .string, modifiers: [.static], for: 35..<40) - store.set(capture: .function, modifiers: [], for: 45..<50) - store.set(capture: .variable, modifiers: [], for: 60..<70) + store.set(value: .init(capture: .comment, modifiers: [.static]), for: 5..<15) + store.set(value: .init(capture: .keyword, modifiers: []), for: 20..<30) + store.set(value: .init(capture: .string, modifiers: [.static]), for: 35..<40) + store.set(value: .init(capture: .function, modifiers: []), for: 45..<50) + store.set(value: .init(capture: .variable, modifiers: []), for: 60..<70) XCTAssertEqual(store.length, 100) @@ -182,13 +185,13 @@ final class StyledRangeStoreTests: XCTestCase { runs.enumerated().forEach { XCTAssertEqual($0.element.length, lengths[$0.offset]) - XCTAssertEqual($0.element.capture, captures[$0.offset]) - XCTAssertEqual($0.element.modifiers, modifiers[$0.offset]) + XCTAssertEqual($0.element.value?.capture, captures[$0.offset]) + XCTAssertEqual($0.element.value?.modifiers ?? [], modifiers[$0.offset]) } } func test_setMultipleRunsAndStorageUpdate() { - let store = StyledRangeStore(documentLength: 100) + var store = Store(documentLength: 100) var lengths = [5, 10, 5, 10, 5, 5, 5, 5, 10, 10, 30] var captures: [CaptureName?] = [nil, .comment, nil, .keyword, nil, .string, nil, .function, nil, .variable, nil] @@ -196,7 +199,7 @@ final class StyledRangeStoreTests: XCTestCase { store.set( runs: zip(zip(lengths, captures), modifiers).map { - StyledRangeStore.Run(length: $0.0, capture: $0.1, modifiers: $1) + Store.Run(length: $0.0, value: .init(capture: $0.1, modifiers: $1)) }, for: 0..<100 ) @@ -214,14 +217,14 @@ final class StyledRangeStoreTests: XCTestCase { "Run \($0.offset) has incorrect length: \($0.element.length). Expected \(lengths[$0.offset])" ) XCTAssertEqual( - $0.element.capture, + $0.element.value?.capture, captures[$0.offset], // swiftlint:disable:next line_length - "Run \($0.offset) has incorrect capture: \(String(describing: $0.element.capture)). Expected \(String(describing: captures[$0.offset]))" + "Run \($0.offset) has incorrect capture: \(String(describing: $0.element.value?.capture)). Expected \(String(describing: captures[$0.offset]))" ) XCTAssertEqual( - $0.element.modifiers, - modifiers[$0.offset], - "Run \($0.offset) has incorrect modifiers: \($0.element.modifiers). Expected \(modifiers[$0.offset])" + $0.element.value?.modifiers, + modifiers[$0.offset], // swiftlint:disable:next line_length + "Run \($0.offset) has incorrect modifiers: \(String(describing: $0.element.value?.modifiers)). Expected \(modifiers[$0.offset])" ) } @@ -236,8 +239,8 @@ final class StyledRangeStoreTests: XCTestCase { runs.enumerated().forEach { XCTAssertEqual($0.element.length, lengths[$0.offset]) - XCTAssertEqual($0.element.capture, captures[$0.offset]) - XCTAssertEqual($0.element.modifiers, modifiers[$0.offset]) + XCTAssertEqual($0.element.value?.capture, captures[$0.offset]) + XCTAssertEqual($0.element.value?.modifiers ?? [], modifiers[$0.offset]) } } } From c7d78235dfc90c462ad46636f1a7d3c990182e6a Mon Sep 17 00:00:00 2001 From: Khan Winter <35942988+thecoolwinter@users.noreply.github.com> Date: Wed, 28 May 2025 16:19:32 -0500 Subject: [PATCH 14/30] Rename to `RangeStore` --- .../Highlighting/Highlighter.swift | 4 ++-- .../StyledRangeContainer.swift | 6 +++--- .../RangeStore+Coalesce.swift} | 4 ++-- .../RangeStore+FindIndex.swift} | 4 ++-- .../RangeStore+OffsetMetric.swift} | 8 ++++---- .../RangeStore+StyledRun.swift} | 16 ++++++++-------- .../RangeStore.swift} | 8 ++++---- .../RangeStoreRun.swift} | 0 .../Highlighting/StyledRangeStoreTests.swift | 4 ++-- 9 files changed, 27 insertions(+), 27 deletions(-) rename Sources/CodeEditSourceEditor/{StyledRangeStore/StyledRangeStore+Coalesce.swift => RangeStore/RangeStore+Coalesce.swift} (95%) rename Sources/CodeEditSourceEditor/{StyledRangeStore/StyledRangeStore+FindIndex.swift => RangeStore/RangeStore+FindIndex.swift} (85%) rename Sources/CodeEditSourceEditor/{StyledRangeStore/StyledRangeStore+OffsetMetric.swift => RangeStore/RangeStore+OffsetMetric.swift} (52%) rename Sources/CodeEditSourceEditor/{StyledRangeStore/StyledRangeStore+StyledRun.swift => RangeStore/RangeStore+StyledRun.swift} (81%) rename Sources/CodeEditSourceEditor/{StyledRangeStore/StyledRangeStore.swift => RangeStore/RangeStore.swift} (94%) rename Sources/CodeEditSourceEditor/{StyledRangeStore/StyledRangeStoreRun.swift => RangeStore/RangeStoreRun.swift} (100%) diff --git a/Sources/CodeEditSourceEditor/Highlighting/Highlighter.swift b/Sources/CodeEditSourceEditor/Highlighting/Highlighter.swift index 4a9b0c9e4..31c1a2a1d 100644 --- a/Sources/CodeEditSourceEditor/Highlighting/Highlighter.swift +++ b/Sources/CodeEditSourceEditor/Highlighting/Highlighter.swift @@ -17,7 +17,7 @@ import OSLog /// /// This class manages multiple objects that help perform this task: /// - ``StyledRangeContainer`` -/// - ``StyledRangeStore`` +/// - ``RangeStore`` /// - ``VisibleRangeProvider`` /// - ``HighlightProviderState`` /// @@ -35,7 +35,7 @@ import OSLog /// | Queries coalesced styles /// v /// +-------------------------------+ +-----------------------------+ -/// | StyledRangeContainer | ------> | StyledRangeStore[] | +/// | StyledRangeContainer | ------> | RangeStore[] | /// | | | | Stores styles for one provider /// | - manages combined ranges | | - stores raw ranges & | /// | - layers highlight styles | | captures | diff --git a/Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeContainer.swift b/Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeContainer.swift index f159c25f7..c971376d2 100644 --- a/Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeContainer.swift +++ b/Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeContainer.swift @@ -45,7 +45,7 @@ class StyledRangeContainer { } } - var _storage: [ProviderID: StyledRangeStore] = [:] + var _storage: [ProviderID: RangeStore] = [:] weak var delegate: StyledRangeContainerDelegate? /// Initialize the container with a list of provider identifiers. Each provider is given an id, they should be @@ -55,13 +55,13 @@ class StyledRangeContainer { /// - providers: An array of identifiers given to providers. init(documentLength: Int, providers: [ProviderID]) { for provider in providers { - _storage[provider] = StyledRangeStore(documentLength: documentLength) + _storage[provider] = RangeStore(documentLength: documentLength) } } func addProvider(_ id: ProviderID, documentLength: Int) { assert(!_storage.keys.contains(id), "Provider already exists") - _storage[id] = StyledRangeStore(documentLength: documentLength) + _storage[id] = RangeStore(documentLength: documentLength) } func removeProvider(_ id: ProviderID) { diff --git a/Sources/CodeEditSourceEditor/StyledRangeStore/StyledRangeStore+Coalesce.swift b/Sources/CodeEditSourceEditor/RangeStore/RangeStore+Coalesce.swift similarity index 95% rename from Sources/CodeEditSourceEditor/StyledRangeStore/StyledRangeStore+Coalesce.swift rename to Sources/CodeEditSourceEditor/RangeStore/RangeStore+Coalesce.swift index 39f26612e..d6fb93259 100644 --- a/Sources/CodeEditSourceEditor/StyledRangeStore/StyledRangeStore+Coalesce.swift +++ b/Sources/CodeEditSourceEditor/RangeStore/RangeStore+Coalesce.swift @@ -1,5 +1,5 @@ // -// StyledRangeStore+Internals.swift +// RangeStore+Internals.swift // CodeEditSourceEditor // // Created by Khan Winter on 10/25/24 @@ -7,7 +7,7 @@ import _RopeModule -extension StyledRangeStore { +extension RangeStore { /// Coalesce items before and after the given range. /// /// Compares the next run with the run at the given range. If they're the same, removes the next run and grows the diff --git a/Sources/CodeEditSourceEditor/StyledRangeStore/StyledRangeStore+FindIndex.swift b/Sources/CodeEditSourceEditor/RangeStore/RangeStore+FindIndex.swift similarity index 85% rename from Sources/CodeEditSourceEditor/StyledRangeStore/StyledRangeStore+FindIndex.swift rename to Sources/CodeEditSourceEditor/RangeStore/RangeStore+FindIndex.swift index a07076b58..363768d2e 100644 --- a/Sources/CodeEditSourceEditor/StyledRangeStore/StyledRangeStore+FindIndex.swift +++ b/Sources/CodeEditSourceEditor/RangeStore/RangeStore+FindIndex.swift @@ -1,11 +1,11 @@ // -// StyledRangeStore+FindIndex.swift +// RangeStore+FindIndex.swift // CodeEditSourceEditor // // Created by Khan Winter on 1/6/25. // -extension StyledRangeStore { +extension RangeStore { /// Finds a Rope index, given a string offset. /// - Parameter offset: The offset to query for. /// - Returns: The index of the containing element in the rope. diff --git a/Sources/CodeEditSourceEditor/StyledRangeStore/StyledRangeStore+OffsetMetric.swift b/Sources/CodeEditSourceEditor/RangeStore/RangeStore+OffsetMetric.swift similarity index 52% rename from Sources/CodeEditSourceEditor/StyledRangeStore/StyledRangeStore+OffsetMetric.swift rename to Sources/CodeEditSourceEditor/RangeStore/RangeStore+OffsetMetric.swift index a05b68f68..2a74bf166 100644 --- a/Sources/CodeEditSourceEditor/StyledRangeStore/StyledRangeStore+OffsetMetric.swift +++ b/Sources/CodeEditSourceEditor/RangeStore/RangeStore+OffsetMetric.swift @@ -1,5 +1,5 @@ // -// StyledRangeStore+OffsetMetric.swift +// RangeStore+OffsetMetric.swift // CodeEditSourceEditor // // Created by Khan Winter on 10/25/24 @@ -7,15 +7,15 @@ import _RopeModule -extension StyledRangeStore { +extension RangeStore { struct OffsetMetric: RopeMetric { typealias Element = StyledRun - func size(of summary: StyledRangeStore.StyledRun.Summary) -> Int { + func size(of summary: RangeStore.StyledRun.Summary) -> Int { summary.length } - func index(at offset: Int, in element: StyledRangeStore.StyledRun) -> Int { + func index(at offset: Int, in element: RangeStore.StyledRun) -> Int { return offset } } diff --git a/Sources/CodeEditSourceEditor/StyledRangeStore/StyledRangeStore+StyledRun.swift b/Sources/CodeEditSourceEditor/RangeStore/RangeStore+StyledRun.swift similarity index 81% rename from Sources/CodeEditSourceEditor/StyledRangeStore/StyledRangeStore+StyledRun.swift rename to Sources/CodeEditSourceEditor/RangeStore/RangeStore+StyledRun.swift index ea45402d9..823eb54d0 100644 --- a/Sources/CodeEditSourceEditor/StyledRangeStore/StyledRangeStore+StyledRun.swift +++ b/Sources/CodeEditSourceEditor/RangeStore/RangeStore+StyledRun.swift @@ -1,12 +1,12 @@ // -// StyledRangeStore+StyledRun.swift +// RangeStore+StyledRun.swift // CodeEditSourceEditor // // Created by Khan Winter on 10/25/24 import _RopeModule -extension StyledRangeStore { +extension RangeStore { struct StyledRun { var length: Int let value: Element? @@ -32,7 +32,7 @@ extension StyledRangeStore { } } -extension StyledRangeStore.StyledRun: RopeElement { +extension RangeStore.StyledRun: RopeElement { typealias Index = Int var summary: Summary { Summary(length: length) } @@ -63,28 +63,28 @@ extension StyledRangeStore.StyledRun: RopeElement { } } -extension StyledRangeStore.StyledRun { +extension RangeStore.StyledRun { struct Summary { var length: Int } } -extension StyledRangeStore.StyledRun.Summary: RopeSummary { +extension RangeStore.StyledRun.Summary: RopeSummary { // FIXME: This is entirely arbitrary. Benchmark this. @inline(__always) static var maxNodeSize: Int { 10 } @inline(__always) - static var zero: StyledRangeStore.StyledRun.Summary { Self(length: 0) } + static var zero: RangeStore.StyledRun.Summary { Self(length: 0) } @inline(__always) var isZero: Bool { length == 0 } - mutating func add(_ other: StyledRangeStore.StyledRun.Summary) { + mutating func add(_ other: RangeStore.StyledRun.Summary) { length += other.length } - mutating func subtract(_ other: StyledRangeStore.StyledRun.Summary) { + mutating func subtract(_ other: RangeStore.StyledRun.Summary) { length -= other.length } } diff --git a/Sources/CodeEditSourceEditor/StyledRangeStore/StyledRangeStore.swift b/Sources/CodeEditSourceEditor/RangeStore/RangeStore.swift similarity index 94% rename from Sources/CodeEditSourceEditor/StyledRangeStore/StyledRangeStore.swift rename to Sources/CodeEditSourceEditor/RangeStore/RangeStore.swift index 407f4fbf0..2ebd7d488 100644 --- a/Sources/CodeEditSourceEditor/StyledRangeStore/StyledRangeStore.swift +++ b/Sources/CodeEditSourceEditor/RangeStore/RangeStore.swift @@ -1,5 +1,5 @@ // -// StyledRangeStore.swift +// RangeStore.swift // CodeEditSourceEditor // // Created by Khan Winter on 10/24/24 @@ -7,12 +7,12 @@ import _RopeModule -/// StyledRangeStore is a container type that allows for setting and querying captures and modifiers for syntax +/// RangeStore is a container type that allows for setting and querying captures and modifiers for syntax /// highlighting. The container reflects a text document in that its length needs to be kept up-to-date. /// /// Internally this class uses a `Rope` from the swift-collections package, allowing for efficient updates and /// retrievals. -struct StyledRangeStore: Sendable { +struct RangeStore: Sendable { typealias Run = StyledRangeStoreRun typealias RopeType = Rope typealias Index = RopeType.Index @@ -93,7 +93,7 @@ struct StyledRangeStore: Sendable { // MARK: - Storage Sync -extension StyledRangeStore { +extension RangeStore { /// Handles keeping the internal storage in sync with the document. mutating func storageUpdated(replacedCharactersIn range: Range, withCount newLength: Int) { assert(range.lowerBound >= 0, "Negative lowerBound") diff --git a/Sources/CodeEditSourceEditor/StyledRangeStore/StyledRangeStoreRun.swift b/Sources/CodeEditSourceEditor/RangeStore/RangeStoreRun.swift similarity index 100% rename from Sources/CodeEditSourceEditor/StyledRangeStore/StyledRangeStoreRun.swift rename to Sources/CodeEditSourceEditor/RangeStore/RangeStoreRun.swift diff --git a/Tests/CodeEditSourceEditorTests/Highlighting/StyledRangeStoreTests.swift b/Tests/CodeEditSourceEditorTests/Highlighting/StyledRangeStoreTests.swift index 7a50e185d..502be9c31 100644 --- a/Tests/CodeEditSourceEditorTests/Highlighting/StyledRangeStoreTests.swift +++ b/Tests/CodeEditSourceEditorTests/Highlighting/StyledRangeStoreTests.swift @@ -1,13 +1,13 @@ import XCTest @testable import CodeEditSourceEditor -extension StyledRangeStore { +extension RangeStore { var length: Int { _guts.summary.length } var count: Int { _guts.count } } final class StyledRangeStoreTests: XCTestCase { - typealias Store = StyledRangeStore + typealias Store = RangeStore override var continueAfterFailure: Bool { get { false } From 26d2b66da0faf41f442bfde4e5d523a583d5b49e Mon Sep 17 00:00:00 2001 From: Khan Winter <35942988+thecoolwinter@users.noreply.github.com> Date: Wed, 28 May 2025 16:25:07 -0500 Subject: [PATCH 15/30] Finish Rename --- .../StyledRangeContainer.swift | 10 +++++----- .../RangeStore/RangeStore+OffsetMetric.swift | 6 +++--- ...edRun.swift => RangeStore+StoredRun.swift} | 18 ++++++++--------- .../RangeStore/RangeStore.swift | 16 ++++++++------- .../RangeStore/RangeStoreElement.swift | 12 +++++++++++ .../RangeStore/RangeStoreRun.swift | 20 +++++++------------ .../StyledRangeContainerTests.swift | 2 +- 7 files changed, 46 insertions(+), 38 deletions(-) rename Sources/CodeEditSourceEditor/RangeStore/{RangeStore+StyledRun.swift => RangeStore+StoredRun.swift} (81%) create mode 100644 Sources/CodeEditSourceEditor/RangeStore/RangeStoreElement.swift diff --git a/Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeContainer.swift b/Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeContainer.swift index c971376d2..b1971b7d0 100644 --- a/Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeContainer.swift +++ b/Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeContainer.swift @@ -18,7 +18,7 @@ protocol StyledRangeContainerDelegate: AnyObject { /// See ``runsIn(range:)`` for more details on how conflicting highlights are handled. @MainActor class StyledRangeContainer { - struct StyleElement: StyledRangeStoreElement, CustomDebugStringConvertible { + struct StyleElement: RangeStoreElement, CustomDebugStringConvertible { var capture: CaptureName? var modifiers: CaptureModifierSet @@ -82,10 +82,10 @@ class StyledRangeContainer { /// /// - Parameter range: The range to query. /// - Returns: An array of continuous styled runs. - func runsIn(range: NSRange) -> [StyledRangeStoreRun] { + func runsIn(range: NSRange) -> [RangeStoreRun] { // Ordered by priority, lower = higher priority. var allRuns = _storage.sorted(by: { $0.key < $1.key }).map { $0.value.runs(in: range.intRange) } - var runs: [StyledRangeStoreRun] = [] + var runs: [RangeStoreRun] = [] var minValue = allRuns.compactMap { $0.last }.enumerated().min(by: { $0.1.length < $1.1.length }) @@ -140,7 +140,7 @@ extension StyledRangeContainer: HighlightProviderStateDelegate { assertionFailure("No storage found for the given provider: \(provider)") return } - var runs: [StyledRangeStoreRun] = [] + var runs: [RangeStoreRun] = [] var lastIndex = rangeToHighlight.lowerBound for highlight in highlights { @@ -150,7 +150,7 @@ extension StyledRangeContainer: HighlightProviderStateDelegate { continue // Skip! Overlapping } runs.append( - StyledRangeStoreRun( + RangeStoreRun( length: highlight.range.length, value: StyleElement(capture: highlight.capture, modifiers: highlight.modifiers) ) diff --git a/Sources/CodeEditSourceEditor/RangeStore/RangeStore+OffsetMetric.swift b/Sources/CodeEditSourceEditor/RangeStore/RangeStore+OffsetMetric.swift index 2a74bf166..efbfb4a12 100644 --- a/Sources/CodeEditSourceEditor/RangeStore/RangeStore+OffsetMetric.swift +++ b/Sources/CodeEditSourceEditor/RangeStore/RangeStore+OffsetMetric.swift @@ -9,13 +9,13 @@ import _RopeModule extension RangeStore { struct OffsetMetric: RopeMetric { - typealias Element = StyledRun + typealias Element = StoredRun - func size(of summary: RangeStore.StyledRun.Summary) -> Int { + func size(of summary: RangeStore.StoredRun.Summary) -> Int { summary.length } - func index(at offset: Int, in element: RangeStore.StyledRun) -> Int { + func index(at offset: Int, in element: RangeStore.StoredRun) -> Int { return offset } } diff --git a/Sources/CodeEditSourceEditor/RangeStore/RangeStore+StyledRun.swift b/Sources/CodeEditSourceEditor/RangeStore/RangeStore+StoredRun.swift similarity index 81% rename from Sources/CodeEditSourceEditor/RangeStore/RangeStore+StyledRun.swift rename to Sources/CodeEditSourceEditor/RangeStore/RangeStore+StoredRun.swift index 823eb54d0..b7a7afdf1 100644 --- a/Sources/CodeEditSourceEditor/RangeStore/RangeStore+StyledRun.swift +++ b/Sources/CodeEditSourceEditor/RangeStore/RangeStore+StoredRun.swift @@ -1,5 +1,5 @@ // -// RangeStore+StyledRun.swift +// RangeStore+StoredRun.swift // CodeEditSourceEditor // // Created by Khan Winter on 10/25/24 @@ -7,12 +7,12 @@ import _RopeModule extension RangeStore { - struct StyledRun { + struct StoredRun { var length: Int let value: Element? static func empty(length: Int) -> Self { - StyledRun(length: length, value: nil) + StoredRun(length: length, value: nil) } /// Compare two styled ranges by their stored styles. @@ -32,7 +32,7 @@ extension RangeStore { } } -extension RangeStore.StyledRun: RopeElement { +extension RangeStore.StoredRun: RopeElement { typealias Index = Int var summary: Summary { Summary(length: length) } @@ -63,28 +63,28 @@ extension RangeStore.StyledRun: RopeElement { } } -extension RangeStore.StyledRun { +extension RangeStore.StoredRun { struct Summary { var length: Int } } -extension RangeStore.StyledRun.Summary: RopeSummary { +extension RangeStore.StoredRun.Summary: RopeSummary { // FIXME: This is entirely arbitrary. Benchmark this. @inline(__always) static var maxNodeSize: Int { 10 } @inline(__always) - static var zero: RangeStore.StyledRun.Summary { Self(length: 0) } + static var zero: RangeStore.StoredRun.Summary { Self(length: 0) } @inline(__always) var isZero: Bool { length == 0 } - mutating func add(_ other: RangeStore.StyledRun.Summary) { + mutating func add(_ other: RangeStore.StoredRun.Summary) { length += other.length } - mutating func subtract(_ other: RangeStore.StyledRun.Summary) { + mutating func subtract(_ other: RangeStore.StoredRun.Summary) { length -= other.length } } diff --git a/Sources/CodeEditSourceEditor/RangeStore/RangeStore.swift b/Sources/CodeEditSourceEditor/RangeStore/RangeStore.swift index 2ebd7d488..5e22fc5f8 100644 --- a/Sources/CodeEditSourceEditor/RangeStore/RangeStore.swift +++ b/Sources/CodeEditSourceEditor/RangeStore/RangeStore.swift @@ -7,14 +7,16 @@ import _RopeModule -/// RangeStore is a container type that allows for setting and querying captures and modifiers for syntax -/// highlighting. The container reflects a text document in that its length needs to be kept up-to-date. +/// RangeStore is a container type that allows for setting and querying values for relative ranges in text. The +/// container reflects a text document in that its length needs to be kept up-to-date. It can efficiently remove and +/// replace subranges even for large documents. Provides helper methods for keeping some state in-sync with a text +/// document's content. /// /// Internally this class uses a `Rope` from the swift-collections package, allowing for efficient updates and /// retrievals. -struct RangeStore: Sendable { - typealias Run = StyledRangeStoreRun - typealias RopeType = Rope +struct RangeStore: Sendable { + typealias Run = RangeStoreRun + typealias RopeType = Rope typealias Index = RopeType.Index var _guts = RopeType() @@ -27,7 +29,7 @@ struct RangeStore: Sendable { private var cache: (range: Range, runs: [Run])? init(documentLength: Int) { - self._guts = RopeType([StyledRun(length: documentLength, value: nil)]) + self._guts = RopeType([StoredRun(length: documentLength, value: nil)]) } // MARK: - Core @@ -83,7 +85,7 @@ struct RangeStore: Sendable { _guts.replaceSubrange( range, in: OffsetMetric(), - with: runs.map { StyledRun(length: $0.length, value: $0.value) } + with: runs.map { StoredRun(length: $0.length, value: $0.value) } ) coalesceNearby(range: range) diff --git a/Sources/CodeEditSourceEditor/RangeStore/RangeStoreElement.swift b/Sources/CodeEditSourceEditor/RangeStore/RangeStoreElement.swift new file mode 100644 index 000000000..6b0a23b95 --- /dev/null +++ b/Sources/CodeEditSourceEditor/RangeStore/RangeStoreElement.swift @@ -0,0 +1,12 @@ +// +// RangeStoreElement.swift +// CodeEditSourceEditor +// +// Created by Khan Winter on 5/28/25. +// + +protocol RangeStoreElement: Equatable, Hashable { + var isEmpty: Bool { get } + func combineLowerPriority(_ other: Self?) -> Self + func combineHigherPriority(_ other: Self?) -> Self +} diff --git a/Sources/CodeEditSourceEditor/RangeStore/RangeStoreRun.swift b/Sources/CodeEditSourceEditor/RangeStore/RangeStoreRun.swift index 6e3b0deb9..48c68cc2c 100644 --- a/Sources/CodeEditSourceEditor/RangeStore/RangeStoreRun.swift +++ b/Sources/CodeEditSourceEditor/RangeStore/RangeStoreRun.swift @@ -1,43 +1,37 @@ // -// StyledRangeStoreRun.swift +// RangeStoreRun.swift // CodeEditSourceEditor // // Created by Khan Winter on 11/4/24. // -protocol StyledRangeStoreElement: Equatable, Hashable { - var isEmpty: Bool { get } - func combineLowerPriority(_ other: Self?) -> Self - func combineHigherPriority(_ other: Self?) -> Self -} - /// Consumer-facing value type for the stored values in this container. -struct StyledRangeStoreRun: Equatable, Hashable { +struct RangeStoreRun: Equatable, Hashable { var length: Int var value: Element? static func empty(length: Int) -> Self { - StyledRangeStoreRun(length: length, value: nil) + RangeStoreRun(length: length, value: nil) } var isEmpty: Bool { value?.isEmpty ?? true } - mutating func combineLowerPriority(_ other: StyledRangeStoreRun) { + mutating func combineLowerPriority(_ other: RangeStoreRun) { value = value?.combineLowerPriority(other.value) ?? other.value } - mutating func combineHigherPriority(_ other: StyledRangeStoreRun) { + mutating func combineHigherPriority(_ other: RangeStoreRun) { value = value?.combineHigherPriority(other.value) ?? other.value } - mutating func subtractLength(_ other: borrowing StyledRangeStoreRun) { + mutating func subtractLength(_ other: borrowing RangeStoreRun) { self.length -= other.length } } -extension StyledRangeStoreRun: CustomDebugStringConvertible { +extension RangeStoreRun: CustomDebugStringConvertible { var debugDescription: String { if let value = value as? CustomDebugStringConvertible { "\(length) (\(value.debugDescription))" diff --git a/Tests/CodeEditSourceEditorTests/Highlighting/StyledRangeContainerTests.swift b/Tests/CodeEditSourceEditorTests/Highlighting/StyledRangeContainerTests.swift index 6506f2eb0..c366ad46c 100644 --- a/Tests/CodeEditSourceEditorTests/Highlighting/StyledRangeContainerTests.swift +++ b/Tests/CodeEditSourceEditorTests/Highlighting/StyledRangeContainerTests.swift @@ -2,7 +2,7 @@ import XCTest @testable import CodeEditSourceEditor final class StyledRangeContainerTests: XCTestCase { - typealias Run = StyledRangeStoreRun + typealias Run = RangeStoreRun @MainActor func test_init() { From 7e7172cb80520d8e6d33d6f4d543cea80acfb2ff Mon Sep 17 00:00:00 2001 From: Khan Winter <35942988+thecoolwinter@users.noreply.github.com> Date: Wed, 28 May 2025 16:30:31 -0500 Subject: [PATCH 16/30] Fix Doc Comment Drawing --- .../Highlighting/Highlighter.swift | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Sources/CodeEditSourceEditor/Highlighting/Highlighter.swift b/Sources/CodeEditSourceEditor/Highlighting/Highlighter.swift index 31c1a2a1d..678e2761f 100644 --- a/Sources/CodeEditSourceEditor/Highlighting/Highlighter.swift +++ b/Sources/CodeEditSourceEditor/Highlighting/Highlighter.swift @@ -34,12 +34,12 @@ import OSLog /// | /// | Queries coalesced styles /// v -/// +-------------------------------+ +-----------------------------+ -/// | StyledRangeContainer | ------> | RangeStore[] | -/// | | | | Stores styles for one provider -/// | - manages combined ranges | | - stores raw ranges & | -/// | - layers highlight styles | | captures | -/// | + getAttributesForRange() | +-----------------------------+ +/// +-------------------------------+ +-------------------------+ +/// | StyledRangeContainer | ------> | RangeStore[] | +/// | | | | Stores styles for one provider +/// | - manages combined ranges | | - stores raw ranges & | +/// | - layers highlight styles | | captures | +/// | + getAttributesForRange() | +-------------------------+ /// +-------------------------------+ /// ^ /// | Sends highlighted runs From 168725835499e6bd6aceda339721452ef2927991 Mon Sep 17 00:00:00 2001 From: Khan Winter <35942988+thecoolwinter@users.noreply.github.com> Date: Wed, 28 May 2025 16:31:19 -0500 Subject: [PATCH 17/30] Update Test Names --- .../StyledRangeStoreTests.swift => RangeStoreTests.swift} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename Tests/CodeEditSourceEditorTests/{Highlighting/StyledRangeStoreTests.swift => RangeStoreTests.swift} (99%) diff --git a/Tests/CodeEditSourceEditorTests/Highlighting/StyledRangeStoreTests.swift b/Tests/CodeEditSourceEditorTests/RangeStoreTests.swift similarity index 99% rename from Tests/CodeEditSourceEditorTests/Highlighting/StyledRangeStoreTests.swift rename to Tests/CodeEditSourceEditorTests/RangeStoreTests.swift index 502be9c31..6fa78447e 100644 --- a/Tests/CodeEditSourceEditorTests/Highlighting/StyledRangeStoreTests.swift +++ b/Tests/CodeEditSourceEditorTests/RangeStoreTests.swift @@ -6,7 +6,7 @@ extension RangeStore { var count: Int { _guts.count } } -final class StyledRangeStoreTests: XCTestCase { +final class RangeStoreTests: XCTestCase { typealias Store = RangeStore override var continueAfterFailure: Bool { From 0acd4585cecce74782bfa4d1d75cd59dacb4e63d Mon Sep 17 00:00:00 2001 From: Khan Winter <35942988+thecoolwinter@users.noreply.github.com> Date: Wed, 28 May 2025 16:35:30 -0500 Subject: [PATCH 18/30] Loosen `RangeStoreElement` Requirements --- .../StyledRangeContainer.swift | 14 +++++++++++--- .../RangeStore/RangeStoreElement.swift | 2 -- .../RangeStore/RangeStoreRun.swift | 8 -------- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeContainer.swift b/Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeContainer.swift index b1971b7d0..d61bfb009 100644 --- a/Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeContainer.swift +++ b/Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeContainer.swift @@ -83,6 +83,14 @@ class StyledRangeContainer { /// - Parameter range: The range to query. /// - Returns: An array of continuous styled runs. func runsIn(range: NSRange) -> [RangeStoreRun] { + func combineLowerPriority(_ lhs: inout RangeStoreRun, _ rhs: RangeStoreRun) { + lhs.value = lhs.value?.combineLowerPriority(rhs.value) ?? rhs.value + } + + func combineHigherPriority(_ lhs: inout RangeStoreRun, _ rhs: RangeStoreRun) { + lhs.value = lhs.value?.combineHigherPriority(rhs.value) ?? rhs.value + } + // Ordered by priority, lower = higher priority. var allRuns = _storage.sorted(by: { $0.key < $1.key }).map { $0.value.runs(in: range.intRange) } var runs: [RangeStoreRun] = [] @@ -97,9 +105,9 @@ class StyledRangeContainer { for idx in (0.., withCount newLength: Int) { - for (key, value) in _storage { + for key in _storage.keys { _storage[key]?.storageUpdated(replacedCharactersIn: range, withCount: newLength) } } diff --git a/Sources/CodeEditSourceEditor/RangeStore/RangeStoreElement.swift b/Sources/CodeEditSourceEditor/RangeStore/RangeStoreElement.swift index 6b0a23b95..9db2d325e 100644 --- a/Sources/CodeEditSourceEditor/RangeStore/RangeStoreElement.swift +++ b/Sources/CodeEditSourceEditor/RangeStore/RangeStoreElement.swift @@ -7,6 +7,4 @@ protocol RangeStoreElement: Equatable, Hashable { var isEmpty: Bool { get } - func combineLowerPriority(_ other: Self?) -> Self - func combineHigherPriority(_ other: Self?) -> Self } diff --git a/Sources/CodeEditSourceEditor/RangeStore/RangeStoreRun.swift b/Sources/CodeEditSourceEditor/RangeStore/RangeStoreRun.swift index 48c68cc2c..116764eec 100644 --- a/Sources/CodeEditSourceEditor/RangeStore/RangeStoreRun.swift +++ b/Sources/CodeEditSourceEditor/RangeStore/RangeStoreRun.swift @@ -18,14 +18,6 @@ struct RangeStoreRun: Equatable, Hashable { value?.isEmpty ?? true } - mutating func combineLowerPriority(_ other: RangeStoreRun) { - value = value?.combineLowerPriority(other.value) ?? other.value - } - - mutating func combineHigherPriority(_ other: RangeStoreRun) { - value = value?.combineHigherPriority(other.value) ?? other.value - } - mutating func subtractLength(_ other: borrowing RangeStoreRun) { self.length -= other.length } From 80f534e5e31d9093bda5323a2a4f552dd5edf0f7 Mon Sep 17 00:00:00 2001 From: Khan Winter <35942988+thecoolwinter@users.noreply.github.com> Date: Thu, 29 May 2025 11:47:51 -0500 Subject: [PATCH 19/30] Update Package.resolved --- .../project.xcworkspace/xcshareddata/swiftpm/Package.resolved | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Example/CodeEditSourceEditorExample/CodeEditSourceEditorExample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Example/CodeEditSourceEditorExample/CodeEditSourceEditorExample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 3f475425b..a7030c2eb 100644 --- a/Example/CodeEditSourceEditorExample/CodeEditSourceEditorExample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Example/CodeEditSourceEditorExample/CodeEditSourceEditorExample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -23,8 +23,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/CodeEditApp/CodeEditTextView.git", "state" : { - "revision" : "a5912e60f6bac25cd1cdf8bb532e1125b21cf7f7", - "version" : "0.10.1" + "revision" : "69282e2ea7ad8976b062b945d575da47b61ed208", + "version" : "0.11.1" } }, { From cd5b7c8a8118d6969b1cf82b4baa6008097a7665 Mon Sep 17 00:00:00 2001 From: Khan Winter <35942988+thecoolwinter@users.noreply.github.com> Date: Thu, 29 May 2025 11:48:52 -0500 Subject: [PATCH 20/30] Remove Moved Files --- .../IndentationLineFoldProvider.swift | 34 --- .../Gutter/LineFolding/FoldRange.swift | 25 --- .../LineFolding/FoldingRibbonView.swift | 210 ------------------ .../Gutter/LineFolding/LineFoldProvider.swift | 13 -- .../Gutter/LineFolding/LineFoldingModel.swift | 155 ------------- 5 files changed, 437 deletions(-) delete mode 100644 Sources/CodeEditSourceEditor/Gutter/LineFolding/DefaultProviders/IndentationLineFoldProvider.swift delete mode 100644 Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldRange.swift delete mode 100644 Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift delete mode 100644 Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldProvider.swift delete mode 100644 Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldingModel.swift diff --git a/Sources/CodeEditSourceEditor/Gutter/LineFolding/DefaultProviders/IndentationLineFoldProvider.swift b/Sources/CodeEditSourceEditor/Gutter/LineFolding/DefaultProviders/IndentationLineFoldProvider.swift deleted file mode 100644 index 03dbd9fa1..000000000 --- a/Sources/CodeEditSourceEditor/Gutter/LineFolding/DefaultProviders/IndentationLineFoldProvider.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// IndentationLineFoldProvider.swift -// CodeEditSourceEditor -// -// Created by Khan Winter on 5/8/25. -// - -import AppKit -import CodeEditTextView - -final class IndentationLineFoldProvider: LineFoldProvider { - func foldLevelAtLine(_ lineNumber: Int, layoutManager: TextLayoutManager, textStorage: NSTextStorage) -> Int? { - guard let linePosition = layoutManager.textLineForIndex(lineNumber), - let indentLevel = indentLevelForPosition(linePosition, textStorage: textStorage) else { - return nil - } - - return indentLevel - } - - private func indentLevelForPosition( - _ position: TextLineStorage.TextLinePosition, - textStorage: NSTextStorage - ) -> Int? { - guard let substring = textStorage.substring(from: position.range) else { - return nil - } - - return substring.utf16 // Keep NSString units - .enumerated() - .first(where: { UnicodeScalar($0.element)?.properties.isWhitespace != true })? - .offset - } -} diff --git a/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldRange.swift b/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldRange.swift deleted file mode 100644 index 714a48a06..000000000 --- a/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldRange.swift +++ /dev/null @@ -1,25 +0,0 @@ -// -// FoldRange.swift -// CodeEditSourceEditor -// -// Created by Khan Winter on 5/7/25. -// - -import Foundation - -/// Represents a recursive folded range -class FoldRange { - var lineRange: ClosedRange - var range: NSRange - /// Ordered array of ranges that are nested in this fold. - var subFolds: [FoldRange] - - weak var parent: FoldRange? - - init(lineRange: ClosedRange, range: NSRange, parent: FoldRange?, subFolds: [FoldRange]) { - self.lineRange = lineRange - self.range = range - self.subFolds = subFolds - self.parent = parent - } -} diff --git a/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift b/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift deleted file mode 100644 index d7d8543bf..000000000 --- a/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView.swift +++ /dev/null @@ -1,210 +0,0 @@ -// -// FoldingRibbonView.swift -// CodeEditSourceEditor -// -// Created by Khan Winter on 5/6/25. -// - -import Foundation -import AppKit -import CodeEditTextView - -#warning("Replace before release") -fileprivate let demoFoldProvider = IndentationLineFoldProvider() - -/// Displays the code folding ribbon in the ``GutterView``. -/// -/// This view draws its contents -class FoldingRibbonView: NSView { - static let width: CGFloat = 7.0 - - private var model: LineFoldingModel - private var hoveringLine: Int? - - @Invalidating(.display) - var backgroundColor: NSColor = NSColor.controlBackgroundColor - - @Invalidating(.display) - var markerColor = NSColor(name: nil) { appearance in - return switch appearance.name { - case .aqua: - NSColor(deviceWhite: 0.0, alpha: 0.1) - case .darkAqua: - NSColor(deviceWhite: 1.0, alpha: 0.1) - default: - NSColor() - } - }.cgColor - - @Invalidating(.display) - var markerBorderColor = NSColor(name: nil) { appearance in - return switch appearance.name { - case .aqua: - NSColor(deviceWhite: 1.0, alpha: 0.4) - case .darkAqua: - NSColor(deviceWhite: 0.0, alpha: 0.4) - default: - NSColor() - } - }.cgColor - - override public var isFlipped: Bool { - true - } - - init(textView: TextView, foldProvider: LineFoldProvider?) { - #warning("Replace before release") - self.model = LineFoldingModel( - textView: textView, - foldProvider: foldProvider ?? demoFoldProvider - ) - super.init(frame: .zero) - layerContentsRedrawPolicy = .onSetNeedsDisplay - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - override func updateTrackingAreas() { - trackingAreas.forEach(removeTrackingArea) - let area = NSTrackingArea( - rect: bounds, - options: [.mouseMoved, .activeInKeyWindow], - owner: self, - userInfo: nil - ) - addTrackingArea(area) - } - - override func mouseMoved(with event: NSEvent) { - let pointInView = convert(event.locationInWindow, from: nil) - hoveringLine = model.textView?.layoutManager.textLineForPosition(pointInView.y)?.index - } - - /// The context in which the fold is being drawn, including the depth and fold range. - struct FoldMarkerDrawingContext { - let range: ClosedRange - let depth: UInt - - /// Increment the depth - func incrementDepth() -> FoldMarkerDrawingContext { - FoldMarkerDrawingContext( - range: range, - depth: depth + 1 - ) - } - } - - override func draw(_ dirtyRect: NSRect) { - guard let context = NSGraphicsContext.current?.cgContext, - let layoutManager = model.textView?.layoutManager else { - return - } - - context.saveGState() - context.clip(to: dirtyRect) - - // Find the visible lines in the rect AppKit is asking us to draw. - guard let rangeStart = layoutManager.textLineForPosition(dirtyRect.minY), - let rangeEnd = layoutManager.textLineForPosition(dirtyRect.maxY) else { - return - } - let lineRange = rangeStart.index...rangeEnd.index - - context.setFillColor(markerColor) - let folds = model.getFolds(in: lineRange) - for fold in folds { - drawFoldMarker( - fold, - markerContext: FoldMarkerDrawingContext(range: lineRange, depth: 0), - in: context, - using: layoutManager - ) - } - - context.restoreGState() - } - - /// Draw a single fold marker for a fold. - /// - /// Ensure the correct fill color is set on the drawing context before calling. - /// - /// - Parameters: - /// - fold: The fold to draw. - /// - markerContext: The context in which the fold is being drawn, including the depth and if a line is - /// being hovered. - /// - context: The drawing context to use. - /// - layoutManager: A layout manager used to retrieve position information for lines. - private func drawFoldMarker( - _ fold: FoldRange, - markerContext: FoldMarkerDrawingContext, - in context: CGContext, - using layoutManager: TextLayoutManager - ) { - guard let minYPosition = layoutManager.textLineForIndex(fold.lineRange.lowerBound)?.yPos, - let maxPosition = layoutManager.textLineForIndex(fold.lineRange.upperBound) else { - return - } - - let maxYPosition = maxPosition.yPos + maxPosition.height - - if false /*model.getCachedDepthAt(lineNumber: hoveringLine ?? -1)*/ { - // TODO: Handle hover state - } else { - let plainRect = NSRect(x: 0, y: minYPosition + 1, width: 7, height: maxYPosition - minYPosition - 2) - // TODO: Draw a single horizontal line when folds are adjacent - let roundedRect = NSBezierPath(roundedRect: plainRect, xRadius: 3.5, yRadius: 3.5) - - context.addPath(roundedRect.cgPathFallback) - context.drawPath(using: .fill) - - // Add small white line if we're overlapping with other markers - if markerContext.depth != 0 { - drawOutline( - minYPosition: minYPosition, - maxYPosition: maxYPosition, - originalPath: roundedRect, - in: context - ) - } - } - - // Draw subfolds - for subFold in fold.subFolds.filter({ $0.lineRange.overlaps(markerContext.range) }) { - drawFoldMarker(subFold, markerContext: markerContext.incrementDepth(), in: context, using: layoutManager) - } - } - - /// Draws a rounded outline for a rectangle, creating the small, light, outline around each fold indicator. - /// - /// This function does not change fill colors for the given context. - /// - /// - Parameters: - /// - minYPosition: The minimum y position of the rectangle to outline. - /// - maxYPosition: The maximum y position of the rectangle to outline. - /// - originalPath: The original bezier path for the rounded rectangle. - /// - context: The context to draw in. - private func drawOutline( - minYPosition: CGFloat, - maxYPosition: CGFloat, - originalPath: NSBezierPath, - in context: CGContext - ) { - context.saveGState() - - let plainRect = NSRect(x: -0.5, y: minYPosition, width: 8, height: maxYPosition - minYPosition) - let roundedRect = NSBezierPath(roundedRect: plainRect, xRadius: 4, yRadius: 4) - - let combined = CGMutablePath() - combined.addPath(roundedRect.cgPathFallback) - combined.addPath(originalPath.cgPathFallback) - - context.clip(to: CGRect(x: 0, y: minYPosition, width: 7, height: maxYPosition - minYPosition)) - context.addPath(combined) - context.setFillColor(markerBorderColor) - context.drawPath(using: .eoFill) - - context.restoreGState() - } -} diff --git a/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldProvider.swift b/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldProvider.swift deleted file mode 100644 index 64a15ae71..000000000 --- a/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldProvider.swift +++ /dev/null @@ -1,13 +0,0 @@ -// -// LineFoldProvider.swift -// CodeEditSourceEditor -// -// Created by Khan Winter on 5/7/25. -// - -import AppKit -import CodeEditTextView - -protocol LineFoldProvider: AnyObject { - func foldLevelAtLine(_ lineNumber: Int, layoutManager: TextLayoutManager, textStorage: NSTextStorage) -> Int? -} diff --git a/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldingModel.swift b/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldingModel.swift deleted file mode 100644 index b2e4dfbcf..000000000 --- a/Sources/CodeEditSourceEditor/Gutter/LineFolding/LineFoldingModel.swift +++ /dev/null @@ -1,155 +0,0 @@ -// -// LineFoldingModel.swift -// CodeEditSourceEditor -// -// Created by Khan Winter on 5/7/25. -// - -import AppKit -import CodeEditTextView - -/// # Basic Premise -/// -/// We need to update, delete, or add fold ranges in the invalidated lines. -/// -/// # Implementation -/// -/// - For each line in the document, put its indent level into a list. -/// - Loop through the list, creating nested folds as indents go up and down. -/// -class LineFoldingModel: NSObject, NSTextStorageDelegate { - /// An ordered tree of fold ranges in a document. Can be traversed using ``FoldRange/parent`` - /// and ``FoldRange/subFolds``. - private var foldCache: [FoldRange] = [] - - weak var foldProvider: LineFoldProvider? - weak var textView: TextView? - - init(textView: TextView, foldProvider: LineFoldProvider?) { - self.textView = textView - self.foldProvider = foldProvider - super.init() - textView.addStorageDelegate(self) - buildFoldsForDocument() - } - - func getFolds(in lineRange: ClosedRange) -> [FoldRange] { - foldCache.filter({ $0.lineRange.overlaps(lineRange) }) - } - - /// Build out the ``foldCache`` for the entire document. - /// - /// For each line in the document, find the indentation level using the ``levelProvider``. At each line, if the - /// indent increases from the previous line, we start a new fold. If it decreases we end the fold we were in. - func buildFoldsForDocument() { - guard let textView, let foldProvider else { return } - foldCache.removeAll(keepingCapacity: true) - - var currentFold: FoldRange? - var currentDepth: Int = 0 - for linePosition in textView.layoutManager.linesInRange(textView.documentRange) { - guard let foldDepth = foldProvider.foldLevelAtLine( - linePosition.index, - layoutManager: textView.layoutManager, - textStorage: textView.textStorage - ) else { - continue - } - print(foldDepth, linePosition.index) - // Start a new fold - if foldDepth > currentDepth { - let newFold = FoldRange( - lineRange: (linePosition.index - 1)...(linePosition.index - 1), - range: .zero, - parent: currentFold, - subFolds: [] - ) - if currentDepth == 0 { - foldCache.append(newFold) - } - currentFold?.subFolds.append(newFold) - currentFold = newFold - } else if foldDepth < currentDepth { - // End this fold - if let fold = currentFold { - fold.lineRange = fold.lineRange.lowerBound...linePosition.index - - if foldDepth == 0 { - currentFold = nil - } - } - currentFold = currentFold?.parent - } - - currentDepth = foldDepth - } - } - - func invalidateLine(lineNumber: Int) { - // TODO: Check if we need to rebuild, or even better, incrementally update the tree. - - // Temporary - buildFoldsForDocument() - } - - func textStorage( - _ textStorage: NSTextStorage, - didProcessEditing editedMask: NSTextStorageEditActions, - range editedRange: NSRange, - changeInLength delta: Int - ) { - guard editedMask.contains(.editedCharacters), - let lineNumber = textView?.layoutManager.textLineForOffset(editedRange.location)?.index else { - return - } - invalidateLine(lineNumber: lineNumber) - } - - /// Finds the deepest cached depth of the fold for a line number. - /// - Parameter lineNumber: The line number to query, zero-indexed. - /// - Returns: The deepest cached depth of the fold if it was found. - func getCachedDepthAt(lineNumber: Int) -> Int? { - return findCachedFoldAt(lineNumber: lineNumber)?.depth - } -} - -// MARK: - Search Folds - -private extension LineFoldingModel { - /// Finds the deepest cached fold and depth of the fold for a line number. - /// - Parameter lineNumber: The line number to query, zero-indexed. - /// - Returns: The deepest cached fold and depth of the fold if it was found. - func findCachedFoldAt(lineNumber: Int) -> (range: FoldRange, depth: Int)? { - binarySearchFoldsArray(lineNumber: lineNumber, folds: foldCache, currentDepth: 0) - } - - /// A generic function for searching an ordered array of fold ranges. - /// - Returns: The found range and depth it was found at, if it exists. - func binarySearchFoldsArray( - lineNumber: Int, - folds: borrowing [FoldRange], - currentDepth: Int - ) -> (range: FoldRange, depth: Int)? { - var low = 0 - var high = folds.count - 1 - - while low <= high { - let mid = (low + high) / 2 - let fold = folds[mid] - - if fold.lineRange.contains(lineNumber) { - // Search deeper into subFolds, if any - return binarySearchFoldsArray( - lineNumber: lineNumber, - folds: fold.subFolds, - currentDepth: currentDepth + 1 - ) ?? (fold, currentDepth) - } else if lineNumber < fold.lineRange.lowerBound { - high = mid - 1 - } else { - low = mid + 1 - } - } - return nil - } -} From 24d9b7af8bf7c41c3e93f784117b419457daeb7b Mon Sep 17 00:00:00 2001 From: Khan Winter <35942988+thecoolwinter@users.noreply.github.com> Date: Fri, 30 May 2025 10:55:45 -0500 Subject: [PATCH 21/30] Begin Transition To `RangeStore` Model --- .../LineFolding/Model/FoldRange.swift | 103 ++++++++++++-- .../Model/LineFoldCalculator.swift | 130 +++++++++--------- .../LineFolding/Model/LineFoldingModel.swift | 50 +------ .../View/FoldingRibbonView+Draw.swift | 62 ++++----- .../LineFolding/View/FoldingRibbonView.swift | 92 ++++++------- .../RangeStore/RangeStore+FindIndex.swift | 7 + .../LineFoldStorageTests.swift | 59 ++++++++ .../LineFoldingModelTests.swift | 84 +++++------ 8 files changed, 346 insertions(+), 241 deletions(-) create mode 100644 Tests/CodeEditSourceEditorTests/LineFoldingTests/LineFoldStorageTests.swift diff --git a/Sources/CodeEditSourceEditor/LineFolding/Model/FoldRange.swift b/Sources/CodeEditSourceEditor/LineFolding/Model/FoldRange.swift index f775ae5b3..8a84cc02e 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/Model/FoldRange.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/Model/FoldRange.swift @@ -7,30 +7,107 @@ import Foundation -/// Represents a recursive folded range +/// Represents a folded range class FoldRange { - var lineRange: ClosedRange var range: NSRange var depth: Int var collapsed: Bool - /// Ordered array of ranges that are nested in this fold. - var subFolds: [FoldRange] - - weak var parent: FoldRange? init( - lineRange: ClosedRange, range: NSRange, depth: Int, - collapsed: Bool, - parent: FoldRange?, - subFolds: [FoldRange] + collapsed: Bool ) { - self.lineRange = lineRange self.range = range self.depth = depth self.collapsed = collapsed - self.subFolds = subFolds - self.parent = parent + } +} + +struct LineFoldStorage: Sendable { + struct Fold: RangeStoreElement, Sendable { + var isEmpty: Bool { depth == nil } + + var depth: Int? + var collapsed: Bool + } + + struct FoldRunInfo: Equatable, Sendable { + let depth: Int + let collapsed: Bool + let runs: [Range] + } + + var storage: RangeStore + + init(foldDepths: [(range: Range, depth: Int)], documentLength: Int) { + storage = RangeStore(documentLength: documentLength) + + for foldDepth in foldDepths { + storage.set( + value: Fold(depth: foldDepth.depth, collapsed: false), + for: foldDepth.range + ) + } + } + + func depth(at offset: Int) -> Int? { + storage.findValue(at: offset)?.depth + } + + func foldMarkers(for range: ClosedRange) -> [FoldRange] { + [] + } + + func collectRuns(forDeepestFoldAt offset: Int) -> FoldRunInfo? { + let initialIndex = storage.findIndex(at: offset).index + guard let foldRange = storage.findValue(at: offset), + let foldDepth = foldRange.depth else { + return nil + } + + var runs: [Range] = [] + + func appendRun(_ index: RangeStore.Index) { + let location = storage._guts.offset(of: index, in: RangeStore.OffsetMetric()) + let length = storage._guts[initialIndex].length + runs.append(location..<(location + length)) + } + appendRun(initialIndex) + + // Collect up + if initialIndex != storage._guts.startIndex { + var index = storage._guts.index(before: initialIndex) + while index != storage._guts.startIndex, + let nextDepth = storage._guts[index].value?.depth, + nextDepth >= foldDepth { + if nextDepth == foldDepth { + appendRun(index) + } + index = storage._guts.index(before: index) + } + } + + // Collect down + if initialIndex != storage._guts.endIndex { + var index = storage._guts.index(after: initialIndex) + while index != storage._guts.endIndex, + let nextDepth = storage._guts[index].value?.depth, + nextDepth >= foldDepth { + if nextDepth == foldDepth { + appendRun(index) + } + index = storage._guts.index(after: index) + } + } + + return FoldRunInfo(depth: foldDepth, collapsed: foldRange.collapsed, runs: runs) + } + + mutating func toggleCollapse(at offset: Int) { + guard let foldInfo = collectRuns(forDeepestFoldAt: offset) else { return } + for run in foldInfo.runs { + storage.set(value: Fold(depth: foldInfo.depth, collapsed: !foldInfo.collapsed), for: run) + } } } diff --git a/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift b/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift index 0ed289377..9e6a7678e 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift @@ -47,68 +47,68 @@ class LineFoldCalculator { /// For each line in the document, find the indentation level using the ``levelProvider``. At each line, if the /// indent increases from the previous line, we start a new fold. If it decreases we end the fold we were in. private func buildFoldsForDocument(afterEditIn: NSRange, delta: Int) { - workQueue.async { - guard let textView = self.textView, let foldProvider = self.foldProvider else { return } - var foldCache: [FoldRange] = [] - var currentFold: FoldRange? - var currentDepth: Int = 0 - var iterator = textView.layoutManager.linesInRange(textView.documentRange) - - var lines = self.getMoreLines( - textView: textView, - iterator: &iterator, - lastDepth: currentDepth, - foldProvider: foldProvider - ) - while let lineChunk = lines { - for lineInfo in lineChunk { - // Start a new fold, going deeper to a new depth. - if lineInfo.providerInfo.depth > currentDepth { - let newFold = FoldRange( - lineRange: lineInfo.lineNumber...lineInfo.lineNumber, - range: NSRange(location: lineInfo.providerInfo.rangeIndice, length: 0), - depth: lineInfo.providerInfo.depth, - collapsed: lineInfo.collapsed, - parent: currentFold, - subFolds: [] - ) - - if currentFold == nil { - foldCache.append(newFold) - } else { - currentFold?.subFolds.append(newFold) - } - currentFold = newFold - } else if lineInfo.providerInfo.depth < currentDepth { - // End this fold, go shallower "popping" folds deeper than the new depth - while let fold = currentFold, fold.depth > lineInfo.providerInfo.depth { - // close this fold at the current line - fold.lineRange = fold.lineRange.lowerBound...lineInfo.lineNumber - fold.range = NSRange(start: fold.range.location, end: lineInfo.providerInfo.rangeIndice) - // move up - currentFold = fold.parent - } - } - - currentDepth = lineInfo.providerInfo.depth - } - lines = self.getMoreLines( - textView: textView, - iterator: &iterator, - lastDepth: currentDepth, - foldProvider: foldProvider - ) - } - - // Clean up any hanging folds. - while let fold = currentFold { - fold.lineRange = fold.lineRange.lowerBound...textView.layoutManager.lineCount - 1 - fold.range = NSRange(start: fold.range.location, end: textView.documentRange.length) - currentFold = fold.parent - } - - self.rangesPublisher.send(foldCache) - } +// workQueue.async { +// guard let textView = self.textView, let foldProvider = self.foldProvider else { return } +// var foldCache: [FoldRange] = [] +// var currentFold: FoldRange? +// var currentDepth: Int = 0 +// var iterator = textView.layoutManager.linesInRange(textView.documentRange) +// +// var lines = self.getMoreLines( +// textView: textView, +// iterator: &iterator, +// lastDepth: currentDepth, +// foldProvider: foldProvider +// ) +// while let lineChunk = lines { +// for lineInfo in lineChunk { +// // Start a new fold, going deeper to a new depth. +// if lineInfo.providerInfo.depth > currentDepth { +// let newFold = FoldRange( +// lineRange: lineInfo.lineNumber...lineInfo.lineNumber, +// range: NSRange(location: lineInfo.providerInfo.rangeIndice, length: 0), +// depth: lineInfo.providerInfo.depth, +// collapsed: lineInfo.collapsed, +// parent: currentFold, +// subFolds: [] +// ) +// +// if currentFold == nil { +// foldCache.append(newFold) +// } else { +// currentFold?.subFolds.append(newFold) +// } +// currentFold = newFold +// } else if lineInfo.providerInfo.depth < currentDepth { +// // End this fold, go shallower "popping" folds deeper than the new depth +// while let fold = currentFold, fold.depth > lineInfo.providerInfo.depth { +// // close this fold at the current line +// fold.lineRange = fold.lineRange.lowerBound...lineInfo.lineNumber +// fold.range = NSRange(start: fold.range.location, end: lineInfo.providerInfo.rangeIndice) +// // move up +// currentFold = fold.parent +// } +// } +// +// currentDepth = lineInfo.providerInfo.depth +// } +// lines = self.getMoreLines( +// textView: textView, +// iterator: &iterator, +// lastDepth: currentDepth, +// foldProvider: foldProvider +// ) +// } +// +// // Clean up any hanging folds. +// while let fold = currentFold { +// fold.lineRange = fold.lineRange.lowerBound...textView.layoutManager.lineCount - 1 +// fold.range = NSRange(start: fold.range.location, end: textView.documentRange.length) +// currentFold = fold.parent +// } +// +// self.rangesPublisher.send(foldCache) +// } } private func getMoreLines( @@ -131,15 +131,11 @@ class LineFoldCalculator { count += 1 continue } - let attachments = textView.layoutManager.attachments - .getAttachmentsOverlapping(linePosition.range) - .compactMap({ $0.attachment as? LineFoldPlaceholder }) - results.append( LineInfo( lineNumber: linePosition.index, providerInfo: foldInfo, - collapsed: !attachments.isEmpty + collapsed: false ) ) count += 1 diff --git a/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldingModel.swift b/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldingModel.swift index fc6fd7377..3b409c2fd 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldingModel.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldingModel.swift @@ -40,7 +40,8 @@ class LineFoldingModel: NSObject, NSTextStorageDelegate { } func getFolds(in lineRange: ClosedRange) -> [FoldRange] { - foldCache.withValue { $0.filter({ $0.lineRange.overlaps(lineRange) }) } +// foldCache.withValue { $0.filter({ $0.lineRange.overlaps(lineRange) }) } + [] } func textStorage( @@ -66,48 +67,9 @@ class LineFoldingModel: NSObject, NSTextStorageDelegate { /// - Parameter lineNumber: The line number to query, zero-indexed. /// - Returns: The deepest cached fold and depth of the fold if it was found. func getCachedFoldAt(lineNumber: Int) -> (range: FoldRange, depth: Int)? { - foldCache.withValue { foldCache in - binarySearchFoldsArray(lineNumber: lineNumber, folds: foldCache, currentDepth: 0, findDeepest: true) - } - } -} - -// MARK: - Search Folds - -private extension LineFoldingModel { - /// A generic function for searching an ordered array of fold ranges. - /// - Returns: The found range and depth it was found at, if it exists. - func binarySearchFoldsArray( - lineNumber: Int, - folds: borrowing [FoldRange], - currentDepth: Int, - findDeepest: Bool - ) -> (range: FoldRange, depth: Int)? { - var low = 0 - var high = folds.count - 1 - - while low <= high { - let mid = (low + high) / 2 - let fold = folds[mid] - - if fold.lineRange.contains(lineNumber) { - // Search deeper into subFolds, if any - if findDeepest { - return binarySearchFoldsArray( - lineNumber: lineNumber, - folds: fold.subFolds, - currentDepth: currentDepth + 1, - findDeepest: findDeepest - ) ?? (fold, currentDepth) - } else { - return (fold, currentDepth) - } - } else if lineNumber < fold.lineRange.lowerBound { - high = mid - 1 - } else { - low = mid + 1 - } - } - return nil +// foldCache.withValue { foldCache in +// binarySearchFoldsArray(lineNumber: lineNumber, folds: foldCache, currentDepth: 0, findDeepest: true) +// } + nil } } diff --git a/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+Draw.swift b/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+Draw.swift index c81ab8f74..8253f6ce3 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+Draw.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+Draw.swift @@ -69,37 +69,37 @@ extension FoldingRibbonView { in context: CGContext, using layoutManager: TextLayoutManager ) { - guard let minYPosition = layoutManager.textLineForIndex(fold.lineRange.lowerBound)?.yPos, - let maxPosition = layoutManager.textLineForIndex(fold.lineRange.upperBound) else { - return - } - - let maxYPosition = maxPosition.yPos + maxPosition.height - - if fold.collapsed { - drawCollapsedFold(minYPosition: minYPosition, maxYPosition: maxYPosition, in: context) - } else if let hoveringFold, - hoveringFold.depth == markerContext.depth, - fold.lineRange == hoveringFold.range { - drawHoveredFold( - markerContext: markerContext, - minYPosition: minYPosition, - maxYPosition: maxYPosition, - in: context - ) - } else { - drawNestedFold( - markerContext: markerContext, - minYPosition: minYPosition, - maxYPosition: maxYPosition, - in: context - ) - } - - // Draw subfolds - for subFold in fold.subFolds.filter({ $0.lineRange.overlaps(markerContext.range) }) { - drawFoldMarker(subFold, markerContext: markerContext.incrementDepth(), in: context, using: layoutManager) - } +// guard let minYPosition = layoutManager.textLineForIndex(fold.lineRange.lowerBound)?.yPos, +// let maxPosition = layoutManager.textLineForIndex(fold.lineRange.upperBound) else { +// return +// } +// +// let maxYPosition = maxPosition.yPos + maxPosition.height +// +// if fold.collapsed { +// drawCollapsedFold(minYPosition: minYPosition, maxYPosition: maxYPosition, in: context) +// } else if let hoveringFold, +// hoveringFold.depth == markerContext.depth, +// fold.lineRange == hoveringFold.range { +// drawHoveredFold( +// markerContext: markerContext, +// minYPosition: minYPosition, +// maxYPosition: maxYPosition, +// in: context +// ) +// } else { +// drawNestedFold( +// markerContext: markerContext, +// minYPosition: minYPosition, +// maxYPosition: maxYPosition, +// in: context +// ) +// } +// +// // Draw subfolds +// for subFold in fold.subFolds.filter({ $0.lineRange.overlaps(markerContext.range) }) { +// drawFoldMarker(subFold, markerContext: markerContext.incrementDepth(), in: context, using: layoutManager) +// } } private func drawCollapsedFold( diff --git a/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView.swift b/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView.swift index 1a3505d79..da7050ec6 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView.swift @@ -141,57 +141,57 @@ class FoldingRibbonView: NSView { super.mouseDown(with: event) return } - if let attachment = model.textView?.layoutManager.attachments.getAttachmentsStartingIn(fold.range.range).first { - model.textView?.layoutManager.attachments.remove(atOffset: attachment.range.location) - fold.range.collapsed = false - attachments.removeAll(where: { $0 === attachment.attachment }) - } else { - let placeholder = LineFoldPlaceholder() - model.textView?.layoutManager.attachments.add(placeholder, for: fold.range.range) - attachments.append(placeholder) - fold.range.collapsed = true - } +// if let attachment = model.textView?.layoutManager.attachments.getAttachmentsStartingIn(fold.range.range).first { +// model.textView?.layoutManager.attachments.remove(atOffset: attachment.range.location) +// fold.range.collapsed = false +// attachments.removeAll(where: { $0 === attachment.attachment }) +// } else { +// let placeholder = LineFoldPlaceholder() +// model.textView?.layoutManager.attachments.add(placeholder, for: fold.range.range) +// attachments.append(placeholder) +// fold.range.collapsed = true +// } model.textView?.needsLayout = true } override func mouseMoved(with event: NSEvent) { - let pointInView = convert(event.locationInWindow, from: nil) - guard let lineNumber = model.textView?.layoutManager.textLineForPosition(pointInView.y)?.index, - let fold = model.getCachedFoldAt(lineNumber: lineNumber) else { - hoverAnimationProgress = 0.0 - hoveringFold = nil - return - } - - let newHoverRange = HoveringFold(range: fold.range.lineRange, depth: fold.depth) - guard newHoverRange != hoveringFold else { - return - } - hoverAnimationTimer?.invalidate() - // We only animate the first hovered fold. If the user moves the mouse vertically into other folds we just - // show it immediately. - if hoveringFold == nil { - hoverAnimationProgress = 0.0 - hoveringFold = newHoverRange - - let duration: TimeInterval = 0.2 - let startTime = CACurrentMediaTime() - hoverAnimationTimer = Timer.scheduledTimer(withTimeInterval: 1/60, repeats: true) { [weak self] timer in - guard let self = self else { return } - let now = CACurrentMediaTime() - let time = CGFloat((now - startTime) / duration) - self.hoverAnimationProgress = min(1.0, time) - if self.hoverAnimationProgress >= 1.0 { - timer.invalidate() - } - } - return - } - - // Don't animate these - hoverAnimationProgress = 1.0 - hoveringFold = newHoverRange +// let pointInView = convert(event.locationInWindow, from: nil) +// guard let lineNumber = model.textView?.layoutManager.textLineForPosition(pointInView.y)?.index, +// let fold = model.getCachedFoldAt(lineNumber: lineNumber) else { +// hoverAnimationProgress = 0.0 +// hoveringFold = nil +// return +// } +// +// let newHoverRange = HoveringFold(range: fold.range.lineRange, depth: fold.depth) +// guard newHoverRange != hoveringFold else { +// return +// } +// hoverAnimationTimer?.invalidate() +// // We only animate the first hovered fold. If the user moves the mouse vertically into other folds we just +// // show it immediately. +// if hoveringFold == nil { +// hoverAnimationProgress = 0.0 +// hoveringFold = newHoverRange +// +// let duration: TimeInterval = 0.2 +// let startTime = CACurrentMediaTime() +// hoverAnimationTimer = Timer.scheduledTimer(withTimeInterval: 1/60, repeats: true) { [weak self] timer in +// guard let self = self else { return } +// let now = CACurrentMediaTime() +// let time = CGFloat((now - startTime) / duration) +// self.hoverAnimationProgress = min(1.0, time) +// if self.hoverAnimationProgress >= 1.0 { +// timer.invalidate() +// } +// } +// return +// } +// +// // Don't animate these +// hoverAnimationProgress = 1.0 +// hoveringFold = newHoverRange } override func mouseExited(with event: NSEvent) { diff --git a/Sources/CodeEditSourceEditor/RangeStore/RangeStore+FindIndex.swift b/Sources/CodeEditSourceEditor/RangeStore/RangeStore+FindIndex.swift index 363768d2e..51092f457 100644 --- a/Sources/CodeEditSourceEditor/RangeStore/RangeStore+FindIndex.swift +++ b/Sources/CodeEditSourceEditor/RangeStore/RangeStore+FindIndex.swift @@ -12,4 +12,11 @@ extension RangeStore { func findIndex(at offset: Int) -> (index: Index, remaining: Int) { _guts.find(at: offset, in: OffsetMetric(), preferEnd: false) } + + /// Finds the value stored at a given string offset. + /// - Parameter offset: The offset to query for. + /// - Returns: The element stored, if any. + func findValue(at offset: Int) -> Element? { + _guts[findIndex(at: offset).index].value + } } diff --git a/Tests/CodeEditSourceEditorTests/LineFoldingTests/LineFoldStorageTests.swift b/Tests/CodeEditSourceEditorTests/LineFoldingTests/LineFoldStorageTests.swift new file mode 100644 index 000000000..fce1d62a8 --- /dev/null +++ b/Tests/CodeEditSourceEditorTests/LineFoldingTests/LineFoldStorageTests.swift @@ -0,0 +1,59 @@ +// +// LineFoldStorageTests.swift +// CodeEditSourceEditor +// +// Created by Khan Winter on 5/29/25. +// + +import Testing +@testable import CodeEditSourceEditor + +struct LineFoldStorageTests { + var storage = LineFoldStorage( + foldDepths: [ + (1..<9, 1), + (2..<8, 2), + (5..<6, 3) + ], + documentLength: 10 + ) + + @Test + func findDepthAtIndexes() { + #expect(storage.depth(at: 0) == nil) + #expect(storage.depth(at: 1) == 1) + #expect(storage.depth(at: 2) == 2) + #expect(storage.depth(at: 5) == 3) + #expect(storage.depth(at: 6) == 2) + #expect(storage.depth(at: 8) == 1) + #expect(storage.depth(at: 9) == nil) + } + + @Test + func getDijointRunsForDepth() { + #expect( + storage.collectRuns(forDeepestFoldAt: 5) + == LineFoldStorage.FoldRunInfo(depth: 3, collapsed: false, runs: [5..<6]) + ) + + #expect( + storage.collectRuns(forDeepestFoldAt: 2) + == LineFoldStorage.FoldRunInfo(depth: 2, collapsed: false, runs: [2..<5, 6..<9]) + ) + + #expect( + storage.collectRuns(forDeepestFoldAt: 1) + == LineFoldStorage.FoldRunInfo(depth: 1, collapsed: false, runs: [1..<2, 8..<9]) + ) + } + + @Test + mutating func toggleCollapse() { + storage.toggleCollapse(at: 1) + + #expect( + storage.collectRuns(forDeepestFoldAt: 1) + == LineFoldStorage.FoldRunInfo(depth: 1, collapsed: true, runs: [1..<2, 8..<9]) + ) + } +} diff --git a/Tests/CodeEditSourceEditorTests/LineFoldingTests/LineFoldingModelTests.swift b/Tests/CodeEditSourceEditorTests/LineFoldingTests/LineFoldingModelTests.swift index 4ba76f767..e5210bb97 100644 --- a/Tests/CodeEditSourceEditorTests/LineFoldingTests/LineFoldingModelTests.swift +++ b/Tests/CodeEditSourceEditorTests/LineFoldingTests/LineFoldingModelTests.swift @@ -10,46 +10,50 @@ import AppKit import CodeEditTextView @testable import CodeEditSourceEditor -@Suite @MainActor struct LineFoldingModelTests { - /// Makes a fold pattern that increases until halfway through the document then goes back to zero. - class HillPatternFoldProvider: LineFoldProvider { - func foldLevelAtLine(_ lineNumber: Int, layoutManager: TextLayoutManager, textStorage: NSTextStorage) -> Int? { - let halfLineCount = (layoutManager.lineCount / 2) - 1 - - return if lineNumber > halfLineCount { - layoutManager.lineCount - 2 - lineNumber - } else { - lineNumber - } - } - } - - let textView: TextView - let model: LineFoldingModel - - init() { - textView = TextView(string: "A\nB\nC\nD\nE\nF\n") - textView.frame = NSRect(x: 0, y: 0, width: 1000, height: 1000) - textView.updatedViewport(NSRect(x: 0, y: 0, width: 1000, height: 1000)) - model = LineFoldingModel(textView: textView, foldProvider: nil) - } - - /// A little unintuitive but we only expect two folds with this. Our provider goes 0-1-2-2-1-0, but we don't - /// make folds for indent level 0. We also expect folds to start on the lines *before* the indent increases and - /// after it decreases, so the fold covers the start/end of the region being folded. - @Test - func buildFoldsForDocument() throws { - let provider = HillPatternFoldProvider() - model.foldProvider = provider - - model.buildFoldsForDocument() - - let fold = try #require(model.getFolds(in: 0...5).first) - #expect(fold.lineRange == 0...5) - - let innerFold = try #require(fold.subFolds.first) - #expect(innerFold.lineRange == 1...4) - } +// /// Makes a fold pattern that increases until halfway through the document then goes back to zero. +// class HillPatternFoldProvider: LineFoldProvider { +// func foldLevelAtLine( +// lineNumber: Int, +// lineRange: NSRange, +// currentDepth: Int, +// text: NSTextStorage +// ) -> CodeEditSourceEditor.LineFoldProviderLineInfo? { +// let halfLineCount = (layoutManager.lineCount / 2) - 1 +// +// return if lineNumber > halfLineCount { +// layoutManager.lineCount - 2 - lineNumber +// } else { +// lineNumber +// } +// } +// } +// +// let textView: TextView +// let model: LineFoldingModel +// +// init() { +// textView = TextView(string: "A\nB\nC\nD\nE\nF\n") +// textView.frame = NSRect(x: 0, y: 0, width: 1000, height: 1000) +// textView.updatedViewport(NSRect(x: 0, y: 0, width: 1000, height: 1000)) +// model = LineFoldingModel(textView: textView, foldProvider: nil) +// } +// +// /// A little unintuitive but we only expect two folds with this. Our provider goes 0-1-2-2-1-0, but we don't +// /// make folds for indent level 0. We also expect folds to start on the lines *before* the indent increases and +// /// after it decreases, so the fold covers the start/end of the region being folded. +// @Test +// func buildFoldsForDocument() throws { +// let provider = HillPatternFoldProvider() +// model.foldProvider = provider +// +// model.buildFoldsForDocument() +// +// let fold = try #require(model.getFolds(in: 0...5).first) +// #expect(fold.lineRange == 0...5) +// +// let innerFold = try #require(fold.subFolds.first) +// #expect(innerFold.lineRange == 1...4) +// } } From 45ccd759e13d8738b291877952e6d00243501a35 Mon Sep 17 00:00:00 2001 From: Khan Winter <35942988+thecoolwinter@users.noreply.github.com> Date: Fri, 30 May 2025 16:52:59 -0500 Subject: [PATCH 22/30] Back to where we started! (working) --- .../xcshareddata/swiftpm/Package.resolved | 9 - Package.swift | 5 +- .../Highlighting/Highlighter.swift | 18 +- .../StyledRangeContainer.swift | 4 +- .../IndentationLineFoldProvider.swift | 22 +-- .../FoldProviders/LineFoldProvider.swift | 4 +- .../LineFolding/Model/FoldRange.swift | 113 ------------ .../Model/LineFoldCalculator.swift | 167 +++++++++--------- .../LineFolding/Model/LineFoldStorage.swift | 124 +++++++++++++ .../LineFolding/Model/LineFoldingModel.swift | 19 +- .../Placeholder/LineFoldPlaceholder.swift | 6 + .../View/FoldingRibbonView+Draw.swift | 65 +++---- .../LineFolding/View/FoldingRibbonView.swift | 99 +++++------ .../RangeStore/RangeStore.swift | 19 +- .../LineFoldStorageTests.swift | 93 +++++----- 15 files changed, 388 insertions(+), 379 deletions(-) delete mode 100644 Sources/CodeEditSourceEditor/LineFolding/Model/FoldRange.swift create mode 100644 Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldStorage.swift diff --git a/Example/CodeEditSourceEditorExample/CodeEditSourceEditorExample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Example/CodeEditSourceEditorExample/CodeEditSourceEditorExample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 243527a2a..c511a9f74 100644 --- a/Example/CodeEditSourceEditorExample/CodeEditSourceEditorExample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Example/CodeEditSourceEditorExample/CodeEditSourceEditorExample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -18,15 +18,6 @@ "version" : "0.2.3" } }, - { - "identity" : "codeedittextview", - "kind" : "remoteSourceControl", - "location" : "https://github.com/CodeEditApp/CodeEditTextView.git", - "state" : { - "revision" : "69282e2ea7ad8976b062b945d575da47b61ed208", - "version" : "0.11.1" - } - }, { "identity" : "rearrange", "kind" : "remoteSourceControl", diff --git a/Package.swift b/Package.swift index 69556c288..1129c9d35 100644 --- a/Package.swift +++ b/Package.swift @@ -16,8 +16,9 @@ let package = Package( dependencies: [ // A fast, efficient, text view for code. .package( - url: "https://github.com/CodeEditApp/CodeEditTextView.git", - from: "0.11.1" + path: "../CodeEditTextView" +// url: "https://github.com/CodeEditApp/CodeEditTextView.git", +// from: "0.11.1" ), // tree-sitter languages .package( diff --git a/Sources/CodeEditSourceEditor/Highlighting/Highlighter.swift b/Sources/CodeEditSourceEditor/Highlighting/Highlighter.swift index 678e2761f..50feee21f 100644 --- a/Sources/CodeEditSourceEditor/Highlighting/Highlighter.swift +++ b/Sources/CodeEditSourceEditor/Highlighting/Highlighter.swift @@ -223,23 +223,9 @@ extension Highlighter: NSTextStorageDelegate { ) { // This method is called whenever attributes are updated, so to avoid re-highlighting the entire document // each time an attribute is applied, we check to make sure this is in response to an edit. - guard editedMask.contains(.editedCharacters), let textView else { return } - - let styleContainerRange: Range - let newLength: Int - - if editedRange.length == 0 { // Deleting, editedRange is at beginning of the range that was deleted - styleContainerRange = editedRange.location..<(editedRange.location - delta) - newLength = 0 - } else { // Replacing or inserting - styleContainerRange = editedRange.location..<(editedRange.location + editedRange.length - delta) - newLength = editedRange.length - } + guard editedMask.contains(.editedCharacters) else { return } - styleContainer.storageUpdated( - replacedContentIn: styleContainerRange, - withCount: newLength - ) + styleContainer.storageUpdated(editedRange: editedRange, changeInLength: delta) if delta > 0 { visibleRangeProvider.visibleSet.insert(range: editedRange) diff --git a/Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeContainer.swift b/Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeContainer.swift index d61bfb009..95c81cb7e 100644 --- a/Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeContainer.swift +++ b/Sources/CodeEditSourceEditor/Highlighting/StyledRangeContainer/StyledRangeContainer.swift @@ -127,9 +127,9 @@ class StyledRangeContainer { return runs.reversed() } - func storageUpdated(replacedContentIn range: Range, withCount newLength: Int) { + func storageUpdated(editedRange: NSRange, changeInLength delta: Int) { for key in _storage.keys { - _storage[key]?.storageUpdated(replacedCharactersIn: range, withCount: newLength) + _storage[key]?.storageUpdated(editedRange: editedRange, changeInLength: delta) } } } diff --git a/Sources/CodeEditSourceEditor/LineFolding/FoldProviders/IndentationLineFoldProvider.swift b/Sources/CodeEditSourceEditor/LineFolding/FoldProviders/IndentationLineFoldProvider.swift index 9cd02bc5b..af1463d1e 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/FoldProviders/IndentationLineFoldProvider.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/FoldProviders/IndentationLineFoldProvider.swift @@ -22,30 +22,32 @@ final class IndentationLineFoldProvider: LineFoldProvider { func foldLevelAtLine( lineNumber: Int, lineRange: NSRange, - currentDepth: Int, + previousDepth: Int, text: NSTextStorage - ) -> LineFoldProviderLineInfo? { + ) -> [LineFoldProviderLineInfo] { guard let leadingIndent = text.leadingRange(in: lineRange, within: .whitespacesWithoutNewlines)?.length, - leadingIndent > 0 else { - return nil + leadingIndent != lineRange.length else { + return [] } - if leadingIndent < currentDepth { + var foldIndicators: [LineFoldProviderLineInfo] = [] + + if leadingIndent < previousDepth { // End the fold at the start of whitespace - return .endFold(rangeEnd: lineRange.location + leadingIndent, newDepth: leadingIndent) + foldIndicators.append(.endFold(rangeEnd: lineRange.location + leadingIndent, newDepth: leadingIndent)) } // Check if the next line has more indent let maxRange = NSRange(start: lineRange.max, end: text.length) guard let nextIndent = text.leadingRange(in: maxRange, within: .whitespacesWithoutNewlines)?.length, nextIndent > 0 else { - return nil + return foldIndicators } - if nextIndent > currentDepth, let trailingWhitespace = text.trailingWhitespaceRange(in: lineRange) { - return .startFold(rangeStart: trailingWhitespace.location, newDepth: nextIndent) + if nextIndent > leadingIndent, let trailingWhitespace = text.trailingWhitespaceRange(in: lineRange) { + foldIndicators.append(.startFold(rangeStart: trailingWhitespace.location, newDepth: nextIndent)) } - return nil + return foldIndicators } } diff --git a/Sources/CodeEditSourceEditor/LineFolding/FoldProviders/LineFoldProvider.swift b/Sources/CodeEditSourceEditor/LineFolding/FoldProviders/LineFoldProvider.swift index c155d4de0..077b71a3a 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/FoldProviders/LineFoldProvider.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/FoldProviders/LineFoldProvider.swift @@ -35,7 +35,7 @@ protocol LineFoldProvider: AnyObject { func foldLevelAtLine( lineNumber: Int, lineRange: NSRange, - currentDepth: Int, + previousDepth: Int, text: NSTextStorage - ) -> LineFoldProviderLineInfo? + ) -> [LineFoldProviderLineInfo] } diff --git a/Sources/CodeEditSourceEditor/LineFolding/Model/FoldRange.swift b/Sources/CodeEditSourceEditor/LineFolding/Model/FoldRange.swift deleted file mode 100644 index 8a84cc02e..000000000 --- a/Sources/CodeEditSourceEditor/LineFolding/Model/FoldRange.swift +++ /dev/null @@ -1,113 +0,0 @@ -// -// FoldRange.swift -// CodeEditSourceEditor -// -// Created by Khan Winter on 5/7/25. -// - -import Foundation - -/// Represents a folded range -class FoldRange { - var range: NSRange - var depth: Int - var collapsed: Bool - - init( - range: NSRange, - depth: Int, - collapsed: Bool - ) { - self.range = range - self.depth = depth - self.collapsed = collapsed - } -} - -struct LineFoldStorage: Sendable { - struct Fold: RangeStoreElement, Sendable { - var isEmpty: Bool { depth == nil } - - var depth: Int? - var collapsed: Bool - } - - struct FoldRunInfo: Equatable, Sendable { - let depth: Int - let collapsed: Bool - let runs: [Range] - } - - var storage: RangeStore - - init(foldDepths: [(range: Range, depth: Int)], documentLength: Int) { - storage = RangeStore(documentLength: documentLength) - - for foldDepth in foldDepths { - storage.set( - value: Fold(depth: foldDepth.depth, collapsed: false), - for: foldDepth.range - ) - } - } - - func depth(at offset: Int) -> Int? { - storage.findValue(at: offset)?.depth - } - - func foldMarkers(for range: ClosedRange) -> [FoldRange] { - [] - } - - func collectRuns(forDeepestFoldAt offset: Int) -> FoldRunInfo? { - let initialIndex = storage.findIndex(at: offset).index - guard let foldRange = storage.findValue(at: offset), - let foldDepth = foldRange.depth else { - return nil - } - - var runs: [Range] = [] - - func appendRun(_ index: RangeStore.Index) { - let location = storage._guts.offset(of: index, in: RangeStore.OffsetMetric()) - let length = storage._guts[initialIndex].length - runs.append(location..<(location + length)) - } - appendRun(initialIndex) - - // Collect up - if initialIndex != storage._guts.startIndex { - var index = storage._guts.index(before: initialIndex) - while index != storage._guts.startIndex, - let nextDepth = storage._guts[index].value?.depth, - nextDepth >= foldDepth { - if nextDepth == foldDepth { - appendRun(index) - } - index = storage._guts.index(before: index) - } - } - - // Collect down - if initialIndex != storage._guts.endIndex { - var index = storage._guts.index(after: initialIndex) - while index != storage._guts.endIndex, - let nextDepth = storage._guts[index].value?.depth, - nextDepth >= foldDepth { - if nextDepth == foldDepth { - appendRun(index) - } - index = storage._guts.index(after: index) - } - } - - return FoldRunInfo(depth: foldDepth, collapsed: foldRange.collapsed, runs: runs) - } - - mutating func toggleCollapse(at offset: Int) { - guard let foldInfo = collectRuns(forDeepestFoldAt: offset) else { return } - for run in foldInfo.runs { - storage.set(value: Fold(depth: foldInfo.depth, collapsed: !foldInfo.collapsed), for: run) - } - } -} diff --git a/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift b/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift index 9e6a7678e..b42ae1d53 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift @@ -15,16 +15,10 @@ import Combine /// Fold information is emitted via `rangesPublisher`. /// Notify the calculator it should re-calculate class LineFoldCalculator { - private struct LineInfo { - let lineNumber: Int - let providerInfo: LineFoldProviderLineInfo - let collapsed: Bool - } - weak var foldProvider: LineFoldProvider? weak var textView: TextView? - var rangesPublisher = CurrentValueSubject<[FoldRange], Never>([]) + var rangesPublisher = CurrentValueSubject(.init(documentLength: 0)) private let workQueue = DispatchQueue.global(qos: .default) @@ -47,99 +41,100 @@ class LineFoldCalculator { /// For each line in the document, find the indentation level using the ``levelProvider``. At each line, if the /// indent increases from the previous line, we start a new fold. If it decreases we end the fold we were in. private func buildFoldsForDocument(afterEditIn: NSRange, delta: Int) { -// workQueue.async { -// guard let textView = self.textView, let foldProvider = self.foldProvider else { return } -// var foldCache: [FoldRange] = [] -// var currentFold: FoldRange? -// var currentDepth: Int = 0 -// var iterator = textView.layoutManager.linesInRange(textView.documentRange) -// -// var lines = self.getMoreLines( -// textView: textView, -// iterator: &iterator, -// lastDepth: currentDepth, -// foldProvider: foldProvider -// ) -// while let lineChunk = lines { -// for lineInfo in lineChunk { -// // Start a new fold, going deeper to a new depth. -// if lineInfo.providerInfo.depth > currentDepth { -// let newFold = FoldRange( -// lineRange: lineInfo.lineNumber...lineInfo.lineNumber, -// range: NSRange(location: lineInfo.providerInfo.rangeIndice, length: 0), -// depth: lineInfo.providerInfo.depth, -// collapsed: lineInfo.collapsed, -// parent: currentFold, -// subFolds: [] -// ) -// -// if currentFold == nil { -// foldCache.append(newFold) -// } else { -// currentFold?.subFolds.append(newFold) -// } -// currentFold = newFold -// } else if lineInfo.providerInfo.depth < currentDepth { -// // End this fold, go shallower "popping" folds deeper than the new depth -// while let fold = currentFold, fold.depth > lineInfo.providerInfo.depth { -// // close this fold at the current line -// fold.lineRange = fold.lineRange.lowerBound...lineInfo.lineNumber -// fold.range = NSRange(start: fold.range.location, end: lineInfo.providerInfo.rangeIndice) -// // move up -// currentFold = fold.parent -// } -// } -// -// currentDepth = lineInfo.providerInfo.depth -// } -// lines = self.getMoreLines( -// textView: textView, -// iterator: &iterator, -// lastDepth: currentDepth, -// foldProvider: foldProvider -// ) -// } -// -// // Clean up any hanging folds. -// while let fold = currentFold { -// fold.lineRange = fold.lineRange.lowerBound...textView.layoutManager.lineCount - 1 -// fold.range = NSRange(start: fold.range.location, end: textView.documentRange.length) -// currentFold = fold.parent -// } -// -// self.rangesPublisher.send(foldCache) -// } + workQueue.async { + guard let textView = self.textView, let foldProvider = self.foldProvider else { return } + var foldCache: [LineFoldStorage.RawFold] = [] + // Depth: Open range + var openFolds: [Int: LineFoldStorage.RawFold] = [:] + var currentDepth: Int = 0 + var iterator = textView.layoutManager.linesInRange(textView.documentRange) + + var lines = self.getMoreLines( + textView: textView, + iterator: &iterator, + previousDepth: currentDepth, + foldProvider: foldProvider + ) + while let lineChunk = lines { + for lineInfo in lineChunk where lineInfo.depth > 0 { + // Start a new fold, going deeper to a new depth. + if lineInfo.depth > currentDepth { + let newFold = LineFoldStorage.RawFold( + depth: lineInfo.depth, + range: lineInfo.rangeIndice.. received depth + for openFold in openFolds.values.filter({ $0.depth > lineInfo.depth }) { + openFolds.removeValue(forKey: openFold.depth) + foldCache.append( + LineFoldStorage.RawFold( + depth: openFold.depth, + range: openFold.range.lowerBound.. [LineInfo]? { + ) -> [LineFoldProviderLineInfo]? { DispatchQueue.main.asyncAndWait { - var results: [LineInfo] = [] + var results: [LineFoldProviderLineInfo] = [] var count = 0 - var lastDepth = lastDepth + var previousDepth: Int = previousDepth while count < 50, let linePosition = iterator.next() { - guard let foldInfo = foldProvider.foldLevelAtLine( + let foldInfo = foldProvider.foldLevelAtLine( lineNumber: linePosition.index, lineRange: linePosition.range, - currentDepth: lastDepth, + previousDepth: previousDepth, text: textView.textStorage - ) else { - count += 1 - continue - } - results.append( - LineInfo( - lineNumber: linePosition.index, - providerInfo: foldInfo, - collapsed: false - ) ) + results.append(contentsOf: foldInfo) count += 1 - lastDepth = foldInfo.depth + previousDepth = foldInfo.max(by: { $0.depth < $1.depth })?.depth ?? previousDepth } if results.isEmpty && count == 0 { return nil diff --git a/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldStorage.swift b/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldStorage.swift new file mode 100644 index 000000000..b4528806d --- /dev/null +++ b/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldStorage.swift @@ -0,0 +1,124 @@ +// +// LineFoldStorage.swift +// CodeEditSourceEditor +// +// Created by Khan Winter on 5/7/25. +// +import _RopeModule +import Foundation + +/// Represents a single fold region with stable identifier and collapse state +struct FoldRange: Sendable { + typealias FoldIdentifier = UInt32 + + let id: FoldIdentifier + let depth: Int + let range: Range + var isCollapsed: Bool +} + +/// Sendable data model for code folding using RangeStore +struct LineFoldStorage: Sendable { + /// A temporary fold representation without stable ID + struct RawFold: Sendable { + let depth: Int + let range: Range + } + + struct DepthStartPair: Hashable { + let depth: Int + let start: Int + } + + /// Element stored in RangeStore: holds reference to a fold region + struct FoldStoreElement: RangeStoreElement, Sendable { + let id: FoldRange.FoldIdentifier + let depth: Int + + var isEmpty: Bool { false } + } + + private var idCounter = FoldRange.FoldIdentifier.zero + private var store: RangeStore + private var foldRanges: [FoldRange.FoldIdentifier: FoldRange] = [:] + + /// Initialize with the full document length + init(documentLength: Int, folds: [RawFold] = [], collapsedProvider: () -> Set = { [] }) { + self.store = RangeStore(documentLength: documentLength) + self.updateFolds(from: folds, collapsedProvider: collapsedProvider) + } + + private mutating func nextFoldId() -> FoldRange.FoldIdentifier { + idCounter += 1 + return idCounter + } + + /// Replace all fold data from raw folds, preserving collapse state via callback + /// - Parameter rawFolds: newly computed folds (depth + range) + /// - Parameter collapsedProvider: callback returning current collapsed ranges/depths + mutating func updateFolds(from rawFolds: [RawFold], collapsedProvider: () -> Set) { + // Build reuse map by start+depth, carry over collapse state + var reuseMap: [DepthStartPair: FoldRange] = [:] + for region in foldRanges.values { + reuseMap[DepthStartPair(depth: region.depth, start: region.range.lowerBound)] = region + } + + // Determine which ranges are currently collapsed + let collapsedSet = collapsedProvider() + + // Build new regions + foldRanges.removeAll(keepingCapacity: true) + store = RangeStore(documentLength: store.length) + + for raw in rawFolds { + let key = DepthStartPair(depth: raw.depth, start: raw.range.lowerBound) + // reuse id and collapse state if available + let prior = reuseMap[key] + let id = prior?.id ?? nextFoldId() + let wasCollapsed = prior?.isCollapsed ?? false + // override collapse if provider says so + let isCollapsed = collapsedSet.contains(key) || wasCollapsed + let fold = FoldRange(id: id, depth: raw.depth, range: raw.range, isCollapsed: isCollapsed) + + foldRanges[id] = fold + let elem = FoldStoreElement(id: id, depth: raw.depth) + store.set(value: elem, for: raw.range) + } + } + + /// Keep folding offsets in sync after text edits + mutating func storageUpdated(editedRange: NSRange, changeInLength delta: Int) { + store.storageUpdated(editedRange: editedRange, changeInLength: delta) + } + + /// Query a document subrange and return all folds as an ordered list by start position + func folds(in queryRange: Range) -> [FoldRange] { + let runs = store.runs(in: queryRange.clamped(to: 0.. = [] + var result: [FoldRange] = [] + + for run in runs { + if let elem = run.value, !alreadyReturnedIDs.contains(elem.id), let range = foldRanges[elem.id] { + result.append( + FoldRange( + id: elem.id, + depth: elem.depth, + range: range.range, + isCollapsed: range.isCollapsed + ) + ) + alreadyReturnedIDs.insert(elem.id) + } + } + + return result.sorted { $0.range.lowerBound < $1.range.lowerBound } + } + + /// Given a depth and a location, return the full original fold region + func fullFoldRegion(at location: Int, depth: Int) -> FoldRange? { + guard let elem = store.findValue(at: location), elem.depth == depth else { + return nil + } + return foldRanges[elem.id] + } +} diff --git a/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldingModel.swift b/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldingModel.swift index 3b409c2fd..d28985c6b 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldingModel.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldingModel.swift @@ -21,7 +21,7 @@ import Combine class LineFoldingModel: NSObject, NSTextStorageDelegate { /// An ordered tree of fold ranges in a document. Can be traversed using ``FoldRange/parent`` /// and ``FoldRange/subFolds``. - @Published var foldCache: Atomic<[FoldRange]> = Atomic([]) + @Published var foldCache: Atomic = Atomic(LineFoldStorage(documentLength: 0)) private var cacheLock = NSLock() private var calculator: LineFoldCalculator private var cancellable: AnyCancellable? @@ -39,9 +39,8 @@ class LineFoldingModel: NSObject, NSTextStorageDelegate { calculator.textChangedReceiver.send((.zero, 0)) } - func getFolds(in lineRange: ClosedRange) -> [FoldRange] { -// foldCache.withValue { $0.filter({ $0.lineRange.overlaps(lineRange) }) } - [] + func getFolds(in range: Range) -> [FoldRange] { + foldCache.withValue({ $0.folds(in: range) }) } func textStorage( @@ -53,6 +52,7 @@ class LineFoldingModel: NSObject, NSTextStorageDelegate { guard editedMask.contains(.editedCharacters) else { return } + foldCache.mutate({ $0.storageUpdated(editedRange: editedRange, changeInLength: delta) }) calculator.textChangedReceiver.send((editedRange, delta)) } @@ -67,9 +67,12 @@ class LineFoldingModel: NSObject, NSTextStorageDelegate { /// - Parameter lineNumber: The line number to query, zero-indexed. /// - Returns: The deepest cached fold and depth of the fold if it was found. func getCachedFoldAt(lineNumber: Int) -> (range: FoldRange, depth: Int)? { -// foldCache.withValue { foldCache in -// binarySearchFoldsArray(lineNumber: lineNumber, folds: foldCache, currentDepth: 0, findDeepest: true) -// } - nil + guard let lineRange = textView?.layoutManager.textLineForIndex(lineNumber)?.range else { return nil } + return foldCache.withValue { foldCache in + guard let deepestFold = foldCache.folds(in: lineRange.intRange).max(by: { $0.depth < $1.depth }) else { + return nil + } + return (deepestFold, deepestFold.depth) + } } } diff --git a/Sources/CodeEditSourceEditor/LineFolding/Placeholder/LineFoldPlaceholder.swift b/Sources/CodeEditSourceEditor/LineFolding/Placeholder/LineFoldPlaceholder.swift index d973a6483..40ecd262c 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/Placeholder/LineFoldPlaceholder.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/Placeholder/LineFoldPlaceholder.swift @@ -9,6 +9,12 @@ import AppKit import CodeEditTextView class LineFoldPlaceholder: TextAttachment { + let fold: FoldRange + + init(fold: FoldRange) { + self.fold = fold + } + var width: CGFloat { 17 } func draw(in context: CGContext, rect: NSRect) { diff --git a/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+Draw.swift b/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+Draw.swift index 8253f6ce3..b5bc0a253 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+Draw.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+Draw.swift @@ -37,14 +37,13 @@ extension FoldingRibbonView { let rangeEnd = layoutManager.textLineForPosition(dirtyRect.maxY) else { return } - let lineRange = rangeStart.index...rangeEnd.index + let textRange = rangeStart.range.location.. - let depth: Int - } - static let width: CGFloat = 7.0 var model: LineFoldingModel // Disabling this lint rule because this initial value is required for @Invalidating @Invalidating(.display) - var hoveringFold: HoveringFold? = nil // swiftlint:disable:this redundant_optional_initialization + var hoveringFold: FoldRange.FoldIdentifier? = nil // swiftlint:disable:this redundant_optional_initialization var hoverAnimationTimer: Timer? @Invalidating(.display) var hoverAnimationProgress: CGFloat = 0.0 @@ -141,57 +136,59 @@ class FoldingRibbonView: NSView { super.mouseDown(with: event) return } -// if let attachment = model.textView?.layoutManager.attachments.getAttachmentsStartingIn(fold.range.range).first { -// model.textView?.layoutManager.attachments.remove(atOffset: attachment.range.location) -// fold.range.collapsed = false -// attachments.removeAll(where: { $0 === attachment.attachment }) -// } else { -// let placeholder = LineFoldPlaceholder() -// model.textView?.layoutManager.attachments.add(placeholder, for: fold.range.range) -// attachments.append(placeholder) + if let attachment = model.textView?.layoutManager.attachments + .getAttachmentsStartingIn(NSRange(fold.range.range)) + .filter({ $0.attachment is LineFoldPlaceholder }) + .first { + model.textView?.layoutManager.attachments.remove(atOffset: attachment.range.location) +// fold.range.isCollapsed = false + attachments.removeAll(where: { $0 === attachment.attachment }) + } else { + let placeholder = LineFoldPlaceholder(fold: fold.range) + model.textView?.layoutManager.attachments.add(placeholder, for: NSRange(fold.range.range)) + attachments.append(placeholder) // fold.range.collapsed = true -// } + } model.textView?.needsLayout = true } override func mouseMoved(with event: NSEvent) { -// let pointInView = convert(event.locationInWindow, from: nil) -// guard let lineNumber = model.textView?.layoutManager.textLineForPosition(pointInView.y)?.index, -// let fold = model.getCachedFoldAt(lineNumber: lineNumber) else { -// hoverAnimationProgress = 0.0 -// hoveringFold = nil -// return -// } -// -// let newHoverRange = HoveringFold(range: fold.range.lineRange, depth: fold.depth) -// guard newHoverRange != hoveringFold else { -// return -// } -// hoverAnimationTimer?.invalidate() -// // We only animate the first hovered fold. If the user moves the mouse vertically into other folds we just -// // show it immediately. -// if hoveringFold == nil { -// hoverAnimationProgress = 0.0 -// hoveringFold = newHoverRange -// -// let duration: TimeInterval = 0.2 -// let startTime = CACurrentMediaTime() -// hoverAnimationTimer = Timer.scheduledTimer(withTimeInterval: 1/60, repeats: true) { [weak self] timer in -// guard let self = self else { return } -// let now = CACurrentMediaTime() -// let time = CGFloat((now - startTime) / duration) -// self.hoverAnimationProgress = min(1.0, time) -// if self.hoverAnimationProgress >= 1.0 { -// timer.invalidate() -// } -// } -// return -// } -// -// // Don't animate these -// hoverAnimationProgress = 1.0 -// hoveringFold = newHoverRange + let pointInView = convert(event.locationInWindow, from: nil) + guard let lineNumber = model.textView?.layoutManager.textLineForPosition(pointInView.y)?.index, + let fold = model.getCachedFoldAt(lineNumber: lineNumber) else { + hoverAnimationProgress = 0.0 + hoveringFold = nil + return + } + + guard fold.range.id != hoveringFold else { + return + } + hoverAnimationTimer?.invalidate() + // We only animate the first hovered fold. If the user moves the mouse vertically into other folds we just + // show it immediately. + if hoveringFold == nil { + hoverAnimationProgress = 0.0 + hoveringFold = fold.range.id + + let duration: TimeInterval = 0.2 + let startTime = CACurrentMediaTime() + hoverAnimationTimer = Timer.scheduledTimer(withTimeInterval: 1/60, repeats: true) { [weak self] timer in + guard let self = self else { return } + let now = CACurrentMediaTime() + let time = CGFloat((now - startTime) / duration) + self.hoverAnimationProgress = min(1.0, time) + if self.hoverAnimationProgress >= 1.0 { + timer.invalidate() + } + } + return + } + + // Don't animate these + hoverAnimationProgress = 1.0 + hoveringFold = fold.range.id } override func mouseExited(with event: NSEvent) { diff --git a/Sources/CodeEditSourceEditor/RangeStore/RangeStore.swift b/Sources/CodeEditSourceEditor/RangeStore/RangeStore.swift index 5e22fc5f8..164cf1ad2 100644 --- a/Sources/CodeEditSourceEditor/RangeStore/RangeStore.swift +++ b/Sources/CodeEditSourceEditor/RangeStore/RangeStore.swift @@ -6,6 +6,7 @@ // import _RopeModule +import Foundation /// RangeStore is a container type that allows for setting and querying values for relative ranges in text. The /// container reflects a text document in that its length needs to be kept up-to-date. It can efficiently remove and @@ -49,7 +50,7 @@ struct RangeStore: Sendable { var index = findIndex(at: range.lowerBound).index var offset: Int? = range.lowerBound - _guts.offset(of: index, in: OffsetMetric()) - while index < _guts.endIndex { + while index < _guts.endIndex, _guts.offset(of: index, in: OffsetMetric()) < range.upperBound { let run = _guts[index] runs.append(Run(length: run.length - (offset ?? 0), value: run.value)) @@ -96,6 +97,22 @@ struct RangeStore: Sendable { // MARK: - Storage Sync extension RangeStore { + /// Handles keeping the internal storage in sync with the document. + mutating func storageUpdated(editedRange: NSRange, changeInLength delta: Int) { + let storageRange: Range + let newLength: Int + + if editedRange.length == 0 { // Deleting, editedRange is at beginning of the range that was deleted + storageRange = editedRange.location..<(editedRange.location - delta) + newLength = 0 + } else { // Replacing or inserting + storageRange = editedRange.location..<(editedRange.location + editedRange.length - delta) + newLength = editedRange.length + } + + storageUpdated(replacedCharactersIn: storageRange, withCount: newLength) + } + /// Handles keeping the internal storage in sync with the document. mutating func storageUpdated(replacedCharactersIn range: Range, withCount newLength: Int) { assert(range.lowerBound >= 0, "Negative lowerBound") diff --git a/Tests/CodeEditSourceEditorTests/LineFoldingTests/LineFoldStorageTests.swift b/Tests/CodeEditSourceEditorTests/LineFoldingTests/LineFoldStorageTests.swift index fce1d62a8..b755979d1 100644 --- a/Tests/CodeEditSourceEditorTests/LineFoldingTests/LineFoldStorageTests.swift +++ b/Tests/CodeEditSourceEditorTests/LineFoldingTests/LineFoldStorageTests.swift @@ -9,51 +9,62 @@ import Testing @testable import CodeEditSourceEditor struct LineFoldStorageTests { - var storage = LineFoldStorage( - foldDepths: [ - (1..<9, 1), - (2..<8, 2), - (5..<6, 3) - ], - documentLength: 10 - ) - - @Test - func findDepthAtIndexes() { - #expect(storage.depth(at: 0) == nil) - #expect(storage.depth(at: 1) == 1) - #expect(storage.depth(at: 2) == 2) - #expect(storage.depth(at: 5) == 3) - #expect(storage.depth(at: 6) == 2) - #expect(storage.depth(at: 8) == 1) - #expect(storage.depth(at: 9) == nil) + // Helper to create a collapsed provider set + private func collapsedSet(_ items: (Int, Int)...) -> Set { + Set(items.map { (depth, start) in + LineFoldStorage.DepthStartPair(depth: depth, start: start) + }) } - @Test - func getDijointRunsForDepth() { - #expect( - storage.collectRuns(forDeepestFoldAt: 5) - == LineFoldStorage.FoldRunInfo(depth: 3, collapsed: false, runs: [5..<6]) - ) - - #expect( - storage.collectRuns(forDeepestFoldAt: 2) - == LineFoldStorage.FoldRunInfo(depth: 2, collapsed: false, runs: [2..<5, 6..<9]) - ) - - #expect( - storage.collectRuns(forDeepestFoldAt: 1) - == LineFoldStorage.FoldRunInfo(depth: 1, collapsed: false, runs: [1..<2, 8..<9]) - ) + @Test("Empty storage has no folds") + func emptyStorage() { + let storage = LineFoldStorage(documentLength: 50) + let folds = storage.folds(in: 0..<50) + #expect(folds.isEmpty) } - @Test - mutating func toggleCollapse() { - storage.toggleCollapse(at: 1) + @Test("updateFolds populates folds with correct depth and range") + func updateFoldsBasic() { + var storage = LineFoldStorage(documentLength: 20) + let raw: [LineFoldStorage.RawFold] = [ + LineFoldStorage.RawFold(depth: 1, range: 0..<5), + LineFoldStorage.RawFold(depth: 2, range: 5..<10) + ] + storage.updateFolds(from: raw) { [] } - #expect( - storage.collectRuns(forDeepestFoldAt: 1) - == LineFoldStorage.FoldRunInfo(depth: 1, collapsed: true, runs: [1..<2, 8..<9]) - ) + let folds = storage.folds(in: 0..<20) + #expect(folds.count == 2) + #expect(folds[0].depth == 1 && folds[0].range == 0..<5 && folds[0].collapsed == false) + #expect(folds[1].depth == 2 && folds[1].range == 5..<10 && folds[1].collapsed == false) + } + + @Test("updateFolds carries over collapse state via collapsedProvider") + func preserveCollapseState() { + var storage = LineFoldStorage(documentLength: 15) + let raw = [LineFoldStorage.RawFold(depth: 1, range: 0..<5)] + // First pass: no collapsed + storage.updateFolds(from: raw) { [] } + #expect(storage.folds(in: 0..<15).first?.collapsed == false) + + // Second pass: provider marks depth=1, start=0 as collapsed + storage.updateFolds(from: raw) { + collapsedSet((1, 0)) + } + #expect(storage.folds(in: 0..<15).first?.collapsed == true) + } + + @Test("FoldRegion IDs remain stable between identical updates") + func stableIDsBetweenUpdates() { + var storage = LineFoldStorage(documentLength: 30) + let raw = [LineFoldStorage.RawFold(depth: 2, range: 10..<20)] + + storage.updateFolds(from: raw) { [] } + let initial = storage.fullFoldRegion(at: 10, depth: 2)!.id + + // Perform update again with identical raw folds + storage.updateFolds(from: raw) { [] } + let subsequent = storage.fullFoldRegion(at: 10, depth: 2)!.id + + #expect(initial == subsequent) } } From 7f6b7b5652ac5990cbf0e9c95cdbb23655293297 Mon Sep 17 00:00:00 2001 From: Austin Condiff Date: Mon, 2 Jun 2025 11:04:48 -0500 Subject: [PATCH 23/30] Added product icons to example app (#329) --- .../CodeEditSourceEditor-Icon-1024.png | Bin 0 -> 676139 bytes .../CodeEditSourceEditor-Icon-128.png | Bin 0 -> 18503 bytes .../CodeEditSourceEditor-Icon-16.png | Bin 0 -> 1881 bytes .../CodeEditSourceEditor-Icon-256.png | Bin 0 -> 50956 bytes .../CodeEditSourceEditor-Icon-32.png | Bin 0 -> 3216 bytes .../CodeEditSourceEditor-Icon-512.png | Bin 0 -> 169681 bytes .../CodeEditSourceEditor-Icon-64.png | Bin 0 -> 7388 bytes .../AppIcon.appiconset/Contents.json | 56 +++++++++++------- 8 files changed, 33 insertions(+), 23 deletions(-) create mode 100644 Example/CodeEditSourceEditorExample/CodeEditSourceEditorExample/Assets.xcassets/AppIcon.appiconset/CodeEditSourceEditor-Icon-1024.png create mode 100644 Example/CodeEditSourceEditorExample/CodeEditSourceEditorExample/Assets.xcassets/AppIcon.appiconset/CodeEditSourceEditor-Icon-128.png create mode 100644 Example/CodeEditSourceEditorExample/CodeEditSourceEditorExample/Assets.xcassets/AppIcon.appiconset/CodeEditSourceEditor-Icon-16.png create mode 100644 Example/CodeEditSourceEditorExample/CodeEditSourceEditorExample/Assets.xcassets/AppIcon.appiconset/CodeEditSourceEditor-Icon-256.png create mode 100644 Example/CodeEditSourceEditorExample/CodeEditSourceEditorExample/Assets.xcassets/AppIcon.appiconset/CodeEditSourceEditor-Icon-32.png create mode 100644 Example/CodeEditSourceEditorExample/CodeEditSourceEditorExample/Assets.xcassets/AppIcon.appiconset/CodeEditSourceEditor-Icon-512.png create mode 100644 Example/CodeEditSourceEditorExample/CodeEditSourceEditorExample/Assets.xcassets/AppIcon.appiconset/CodeEditSourceEditor-Icon-64.png diff --git a/Example/CodeEditSourceEditorExample/CodeEditSourceEditorExample/Assets.xcassets/AppIcon.appiconset/CodeEditSourceEditor-Icon-1024.png b/Example/CodeEditSourceEditorExample/CodeEditSourceEditorExample/Assets.xcassets/AppIcon.appiconset/CodeEditSourceEditor-Icon-1024.png new file mode 100644 index 0000000000000000000000000000000000000000..ece0b3c0f7b045c7cebf7d687fba8559b28c9473 GIT binary patch literal 676139 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%0Dx)Z=6*eeG#*b9tJ4~HVhhu0@b>)+uu+Y;(Kih3 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 z≪=yeCLkyQ3V}MpvHOqVoszCg^-ukQ3KG%6BWAc}jZ4?~kfmH<+4JU<54R&?10e z_HP)Z{^T@iuqj>SF)e>XY!9C6@TUM0+6(grB~y_-s%1p!2^3MS9$YIh*=SYUgq1qT zPIZg{sI`!B{bQ5dlN^TBYUU8m0}j)%-}jUPmO9Wzf(&sX(YMUs2=n$bH@}U>C02au zz+r9iv15TEGz|uxDc;A^Uh-dfaq`7hn<5DLpw%UPmx%d)43^d2Zf-8s7!ZU*^AYdmZMpbBou0Pt&SQ<)I!*A^z(V5;Mqj(~KwQ z#aV1mCvGKmGG(bWPfzEyneklBP9bSGBMJ7}!@CZ%(w_YN`>*-0em%UeqYfb7as6!8 zNbuJwZ{j&jSeq~P8K?LPfPe|XB zYT@Zpq$7kn{ISA)mc)8TC0swuK!72m3&G`}Y>WJoWThrbeO^jUhX$_hupd>XuL1Gj zb3X!~cgLc3%*7W+=O(unh-IJBam90__b`w;y1a?lK-nz1(eSk=`#qEqvmpDcjXxPo zQ!D1!KB;jHwm+Ny+6AUN(ztsSVODKvD-U!hDAiB) z%E@CxSb5MY!%}O3%r(0@RMD1|=H@^y5}c~De^ABIqlk)S`(uI!;iqnTq$$p!CY~O< zkewiKU#4Miv}lgyR=zQ%1g78`xN#{oqaQ;;&dVM1r`bre!YNY@%vf_ zgy?P2``!~|HUD7s;)cI3w}x;@zy7u0V{k-DlJ(ntj{jOU{0H}y77Cg!4+BKbV7&^v z0`tizGe0J*P+9#!`fxVrtd_KGiV}UU9adxY=%RF-M}HK>WLT!x`q2>AFT1wzJ#whK zCO@lka{gi5r$cMpv!Lvu%dN*&;GX*t=hUd^MWw2`uxMq_3s^+n zRNpw33fT8P+Pg?Vg^|rUkGS&BzLod= z-PWt!u>K(R)1Img4&QmuS~BuUPIZ~!2kYxRiw6GmoYMr|yWg=PG+aHZ;@Zn)P@C$z zZ=3g`E~wKEB0mBr2#rmcr=z-o9<;KkFQgoqUp_HGUZY;AglD4kPbBvRMW&_68|q6u zjptTeKNRI7)n1>TzVkIjzVk^~Nv3vtB(G|;P-9fw-p&z_o)TaMujVZlauyyqo>01B zD$s*M|Dgp?-^kV%{-MoK;HYTX2sHE`4e=Mpcm%m$KrlXzsb=H)rBNo_sVoxrrI#mo zp6qxJ)>dTD5*X0Dq6FClS=|2%6aMNb``fJK9SI@jc9r1JI(jdXVC=a+;3TTPqb%fP z`j870x8gROLZacjK&4slUbl7dq@&C$Y<8gimnR`)ChW8-HsE0PKR*zk1>53iUY1PO z7=h(E+~%sb{73{P9ODTNApqxycdmy4bHlQya3&?ahyKD;xJc4sY1V@X9(=AR*ABd1 z4X5zg(=;|b5Q5x9QM~q2**)%KbY?n@NeF1R90&%Zj-Z$%zK6WNGZq?)$Jbmk7X@Cw z2PK){bO>Q!lspCJOZ_ex^B&UnRrAzHys-ik!Jv?bUlSh%q!?^U(RK^*M~il80# zFn$T9LE?zkJvj+BnAkb7p1h_HZgDK_n9@!HSAM7JMLhpn+$PbZ`ki&>V1fvc(tTqnzWCh!bjyocin3@KIxG$r6F&d8Ljx924KsD&th z5#vXuTY0z+B!AtQnoxvMWZ7&_qQ5CIDy~fFlECvW!SjFZ3mOUPFx#LR=N3EXN!==# zW(8(Erd||lfmw6(wDIE7Xs=7IS$sIP!bZdAE-|ARw2w7S1@y}dRM3j~uzt8j8jHUS z!(+H-KWuur3Y)WlEhPkAkXa;*$C=rR;4vl=j;8R5-J}Ds82!8*NW>cF7~qsr0i2Tn zt{17M#vpU$Vq-zKJ1?V}MG9tNL5A?eQD4HQd;Tw9Lv&r*X`cHn_UPASC-y9MFLtU_$&NLG-1uJ$L?fz9 z`b6WlW%0vv!!=%Q7+Ztl`F6$wSxYPFIf)UMj*l3%&+n5Ko^8sJ(vp7>d6n~^-GJ(} znp=2-cnxwv%-~`{S+GGXJYchnU)_jZ0<8gd1-GD0L1^|{g8}l41#EyqCE4Z7#Rqum zsJm2}Gi(9lZgehc8=!Rg0sg^=dXe%#>Czdc7WcKvCPJujg|+O!X%91fIkfE7f|*wG zP7RsGIJbF59?>=4q-6SQBRHk#e61gdt+W>1Ob{-^jr~T!H$1=@W`XI2HmrFA-5cnM z>SKj3uVTb-_xWd2A4&JEG^Xt?TQmk%)H=YgNPl^Ks=Un8t!1;Y0sBXr-#E2opNB#H zR}kmc_gf^S&W$irzokzt0H3xL0jKD+JNPz^1XYJf^&sXUbP+vI*|EVY+b&HQ^ku6# zUsYxM*S7KA_}J&*WgL7MT{7QX|(2 zG{M2zogdEQBU?GK-s&5C>tY{6O+9<9MoTao6d5Jut&ftJLD%2FsaB&umvraFEFD#$ zGD}xfM`c^C>?El0v&ro1YkUFT4c`{suFVXW^{F~a*^KCQpEF_tS0VQ7la@OUxInhq zaNKkeu~VY?Bq*1g`B`0Z9QD_i#H8GLB;q@ygvZs3@2r=)zjO}UB`lN-DRN~-MadX5 zJJ~9GKKGp;w3MV6E}+cIYLtig`c`v9LrORMVhN?z=DgeoTGrDFNc8-Ez*KEzW< z8f9e(gh#%GnZl+i$qF{`<r8MI!R;q>ec_GA=oSn*PIpH5Mi8r{duBF5&2 zqW^7;kNelOJ*tG78AHKyRyD(nv~U5oL1EBY(BB=+sCB$P<-P5PGYjM`M-BL9y~Rr1;wTndI;8muz{pgmjG{fZ7@C?38?26i;Bo`p=(^s=p&2lXg+gy#xdQ#|#A|e4 zCBRqjD7$k-Wz!S%TZiI13a>C7w6{^yUxP1H z_nX7s_Fg7c3w-PBZRt2Ij|2s&v?K(8WJ>9^2sd*ZDuhy;3H5kCt%-!Z+^=%6&2QMa zrF?6|7to7A;gFz$TcWVPlQHhhswQzf%=w*orret1KUbGvdeXNpyTK!ABj3tY7(E;r zT0hdxD~lJAubB+-e)@|mxLfSDmXJF2^E+%j)gvhxrerns(f4y_E}Lb58$AA=I<>Kg zg+sb=v-x)^4}0Z@6e~jM1=3xg_XU@HcO5@hltrm?h90MS6sn5bhS(^V7+V!Fe-Is9 zrf221B7$F9y@3!(U!*d!QT;BMC8TyBNy8-eDU=wQ!M}ecfk_)CG43AMV6}nv~-{6blTG) zkNc#CIonNEOP^mSA5KG~Shk0oQNo0W+O*(eQCx6{XK4M1MbVRR@_}WdClL3iw!dh7u7V zq|G^`4gXHcJ1+k;CRGE?dOU;OLxkf#eL{T)q)!}i<5yz&p?9bBIcQdoxlev=JH23! zcIGGEK2aPm5raDnmJWBp4HRKXo4|PE7j_orXA0teGCom>e8;U<5PNv@^7NK>EnXs; znnzcp#CxTL{#4zs#^8$Eu-sLgrn(G4zjE}L;82P#L?Qm>>IP4CwM$_)fq%-xxbvF; zJ%@26lhL}Zk>;_E!N!N!37ytn9r2&ssbj~J0hQlEd9oafYt%d0ll;5dO|qU-=xZ%X z7;rchx(6s|q^LKYYh~!)YFQ^=S*)f?2Xg~xqs=#{cdlM4YqenoGt<_fu0a^?!E?Rz zQ;9EkTC4-DTf@M7(HR(Yrj3_pb)qCnIB(=?I!SY?SazAXII6d0T;cXNa+_|%i73#- z=+Y4%|7)uJs~{_M07#x~vHFn1q_Cwi#A=~2kfSxJ#J=Yg#(e*IPpL-h{1Xt%g z>ue|L*xo)LZ$^tS4$^^Kby>z(%HFAw)OYi4ZM8pnD0uHSUZ5qav*OX5UwT%l+LQP> zQKEJbMTXUk-ln!ABr0lPjtvX^K@up*jx1ysGrYUuC1kn%cCV!WQspo!nL_+O;yE7x zG40MNcY5*XyI$@wMrV|hTkDflKEBPQ$bm7<#P5Hz8J$15FaY6q`ffIYAdXkbAfZ=t z)mFnnxEOJtZ{zp#*4FxXY4x4fef8+^)-znzfN`gmvO5vJR~@lHL7CwzAmv;a8-cn` zF>Nymag!j~0Dav1&@FYWWfb#i09gH2Z@v)B8Q@lN^!PkG_E23~?ODc;?ida=&ZYYG z`0OJ80xAwzI}cB)WwW%zh~VnQ?#I~bKsDagcm*%Jpg$Tfwttltci5#SDW@EB4kj!< z((?&mNia%D73VPa=g5@I!;&0s&wcqV-B%;b#98N_9v)4ZNhbO3zIL!n`y}i;Ue9}z zDy`x(po{sCCGx@*CEbz0l0QIB{nfLgY3IAtA5hd2JI*dz7LSm48m6>!Ej5X}$mudO zWievCME#*=&4HH04iMkXD-X{f3Ch(CW(^ZiO_KiamcP|nY3(8r5dyaOlmE~Vc$$L_ z3WJxaza35d5s9(mBDqjU?3r0HG=tR7M_DT{&UF=Ji`7={HMY~9SZ^<+k2N6^%09N* z9f;QdvhsGZjiM0cl<^^TIjjcYgqIj##HhJ`2UMs+DMk)ow5j8ZAVcFw2 z?L=CocQ>OKg^3!cDBO~7(whyAicE)M^@_o(Fev(>^WfkhNb~;XNrS?>Uk;Q(q3?Wd zWu^Daj{HZ5l3O58b?mgX15LBSYVn-iNng|Co78LdzcQOAw@_Yj`|>VHfmQkmJsgEj z6{`ruK7@W>-TM}UuVfCV53067mxnO5R|aAk9u`NRJ+faMt8%fqY-`GKo&acK6t=Y2 zl3N?_&4`>IsY3%7u?Uiv8v`gmQW<<>C#QGyK2<6)C8i50iPSb+XsAu~crh&U2f5EJ z(K9i5xT*5ai&e=#xIpi`H+TAtzFP;kZ-QQ0A(z!(RpoxX32})(Lo$hhD%p5PXS7-R zo;pmGr;^+ITp+8=hZTVaJIb~@FIwNr4u0TenvZGSd)}-}Wqw@k?{*ft!%bQ4gB$5l zE>@|Wr)hLb9cTavlyo@^lt@rF9?D7*a80Hmd&vgp+&5fkR|^%8tn;2%^zUR#x{*pG z|Es2l0wXcatbZJTn_!OyLu6IYsG~7brr`qAc51hs&v%m|9&!cuLEK%t>611Ndf_kn zbib9-Kc*r$fW4G5TA>0x&gwENx~D-ql=TyX(aA*tO!)k1D*K zE@9=jS_tQMFy>|)yAXuC8-`JYWSU0iZ2cme+x>;DoEJ1kva z17tv{A$}~i;=xBFV`UCem;sGEKljJAeNtKY3q0-J|4Maja_~#XDQ0%5r*|*TS#i7o z$74`31_ef80w&(BV)XO%T__(w@WxuKqqYn*rXM(%4n8@gt(donO${nAug>6>lKtoO z^ZM;e17||nPst~Dz$!Y@fP}6f?g#4zQF=hDQ%pY;)3tTGFZ#eyyI&f);yxY#_r5(+ zv62+ae)C*^mv@mm2ayt^u(2&gWivTeTm5A&cTB@fcqLLNw|B zCNoI4*ok@O@YZFOXY5Wjz^yq}iG=}2GA^clGFh`J#PYeOG(Al{joE5RIh)u)P=Vp; z^XYt^Pbxh8uJ2TTStf6WT-bJUV?W0X)-Q}(W_A^9m~AQBzyGyQ?C@TWGx#MB=g$<~ z#Fvd8ZiU1*kIFr4sZMBlhXI9O|CkVPL%+fd^4hDn3A-rf9DVE^rs#& zby;YSiA^c+Dr&sMl$$*D-Uk08RDIAnB&wgXl3rUL>(Z-(t(1He5q*qeqGDJ=LbcE2 zF9})%wwR>~$GvU)oP%pP!+Yxqv`J*3!hIsWE>drSDVw+NT(|YUGda^)H#$+F0H^Dr4KHrJUvPzQ*PZ%_0BTm3Kj)E(0rVGe${T5Ez zI0VFr-wwtoXnE*CNShrdRm4WN4g*7*)rY^cH`c~z zFTbsd%6i`nLE3FoAsY^Jx8fkaK}Y7s^$sxK#z^9hP!1MBle;qKF?YFPlz^v-LTmJW z4({u&*Y*|9mCZRZxrn(g9*IWN7p6bg14ZjjzxB(U6ezLy&g5(rXqtGrgGnSI?Y!WtDK2F4CDET+acFxXt!#UIRV2Y3j1$Q^hKM<(2GC~WA$JG@S=Z9?jx z2&p?l5MAG`lm8tsHG4xS`kYjp_gUFP^7CbAr++Et&>Om6C36B<>yV8shWMWTQ34&z zDc$4pA}r#`?4(Z`fFnvmtjNWcFUOw+EpsD)8aHotjWEiodtX;5zhv zE}U?C{u5Ztd45XXM2(&k?Qmvh0ly2cA7!<$;8Lggt*UW{~cvP(Vb?V+l?*w(e(W`LsjH$DOEy?q}q)Ib%?T>!ZP$cW|_v`bD{>#&Z zJpETaX1>Whx=p7E>?Zgtro7F_Rc+I~sZ^-UEpnG*nPWw{^8Hvgx4=zutx7k0tm77X zNQWw(vXpVz_IpRxLy-wYU*oz*Pig)C(9te=fZIs5m~TSr0fkZ|BvxY{{F2XeNIagy4_v~_-= zMBA;6qwa-7Pn?zZrL<|IIxQ8*^vkzq)x$V(OHe!@ zJJzHJx}P;dk~iThski?%tuK&meDGu|6RG98eLi2iOo{fZD~vkKtY(K6C+9ROkr8#^ z=_|okRucDRUtBHw;bxh;y;Wg!`8E|HrDCPa+1cl|Ppi}~}VrmVbxA7)7_zJ$V=)XtB>S)FH ztLHTp1}R~6bNQ$)nM$r)E!BU>!Un+z1b0(}Vf?#gy;yne;ZyC<^v= zu2|~t<2mOk=N=!8(aq!iE2+4uKfRZ{a1A}XTS?Fm{@KYt9k5qjs+KCP%3u=vXjZd3 zeBVeTrPs(6@@r&;KI@U0?IbtN-B?e)cB>4-F%gN$_H!iqr?)JDY9+to*agzm6!OaC zlzTc|C#A@(mt(B({IwhBsuM|A>jI|xbrDh(_1-WA|8nDh{aQo6HCti7`U>&4?p@r{LNfN#R5K-ES*GDTqQkKk7XZMo53 zpE&B8$$3HS51)__W@EIgcwKEd) zX&$>*$gPYX4BV}_E$T{j6B>d$*hVu@*dd-dr5xxYB39(+E1dBkav|^y_!Q;SjM1h( zot-A-N;sszt!lmZOaH_n-Cv9<%6Zp>>gg*40P8ES0`1Lilqzn|!sj=@U$GWW)Bb-V z!DDz>?sn+*#jJ*aN}UE$h0@+hqpxzPmH$ z4jMQgGZf?;;Ig={&(g>J!%qBMX0(+=uG)?Q2x(1yR^yI-1ftI%4a{hvX{^ox6^Dfb zXbS!`LUs*8Mo`zzv`u=-QyWk7&Kt+Gd`Bg3Wu(K5U*5rcZ$&ungg{h)2}s&Z^l*BezxvpF0A~xWu3~| ziI2M?(Ab;d(nx9%&v#^eU(C)GD)Voz&t!z>q36UuJmu=wWG`$xUh7%o5y>Y}2TK)% zl0w`L!~aseJwdJGnQB_xIdj;aY&7gR=2r$JCcbO8@#(z` zu9Ih(JUE32<;UymQ(EihK3j2$3s>ABh7GDg^!T^gTqm3bk~?>Y*I6ktsy7TQdM zZ*XO6pOR!R6rANKJq8SY;5T|fpm3|AxB6apEnYAEv$;>aU8JQDbkPj2fGKB3z^{qa zLK`JJTcuSSJ3Ho8Mm#qpfHRLrrD1C^LDc+Tj@@INQeQEUj0`8; zgZk$AfGe5INt^N}$M^uyaSN@P<+i4yQ{bw+5_PnA-vhG8q*R8FiS&ad1qO2wc!DqW zIu3uKg+cy~fYlY9gFq3yQ5O5dGc75|zR*hBwNYlA6}AcCHxF9pELc{)a8|_7!bmBV=|CxyE5nh$YR-D?(Y7^+N@%U<)h z-#nKZbc~$Z7ECF=Jr7xOf zp{PT@*13L8MprtfDf7;E8=(X*f#RW$s@-!Q+vAh}eAQhetAMK^|3ZyLAF`}#gdD`I zW!$;jjD+D**v}q<-wD-N(t0<$KG^hc`M4OOi+YUP4Sbs9L!NeAp!|;iXJU77q~>7D zxQ_4Yi?O?@LU~#NYPoIlpJqpZ6t_1NEQPDb4>H#2ejI%HHSDao6NJ_#bUCx^bN^CO zy`1RrwtQIBc+DnNp7#2N1hDf9e66`gXnZ$xTH5g9;Y)G1?>h8`jKI&w3HZ)F#IH{^-!51<)7iXX69XE~ALZs8>loYpgKA%AwN)r}vWQ zqHNq7UpJQ6@=64oU2Ee#0;n?cB^cZQe-w7;yxutPsu@6I3}SgH{P$>HP4~XkkKoB^ z)=lCj@o9IX;Jk{w_Dt#HCgW25u{odC$R-sV~Td(2P)WP#0%$@ecUhu&^<2Ur%;Gsp^VkFI^-R^MhFW$TpARp(EurObk_&XQbh!ahXto~l zhSV!#CUW4>(35EAD6C9;f!iN!ifhgVsJMScXzm0sZsuZ67fMqBzAYcJZ(Y}yTVILM zDKJc&#qlt2gB8f*(m{Z}2wc{k7TMDEX##?N7Qcf5azgrQAvz*%ydq{BVT8VR7e4*% zmr0o$tmwHNgy2{`#VH^@GMcUmXurvq@TOrt1PmkocS4;Nxn+Nr|YsC zKUrT2PpO`3`L>mj-oMs0W*j6`@-I4jE!in%Ip!=ju>m&0{0L@e-_P}rF^Q##HOBLJ zaY4)+S^*nPTz&T4sZXd5UK#2!2IKJg>3sY;!!javufTtX?R==Zo93q3GO#P$xi%tq zv*8j`i4S|;(7S+XbMyg6qd#13+E|>YFJP*44nylO-YD(!GIT}Xs*UU!is70x+s^&v zEJ3Qn{z#pfhU~BCl;f!EBSpkPwS%wwO6bv1`}Ai+q8$O89a9Av8TFM~uxcj#XcM;ATS1o1uqD(0$_zO z>5Uo%oF$AkC4h44s6p*~Ld%`-R5_XfX-@N-){C$u_b+*9$dv7b?Lm(w0gf4RnhR6j zxb}1P_F`X&*4U+UCX9@cK?AkDl(#vYstGR!gkw_$$Ir3g=ZMkD8I0AW*>YaNWrn_j zuF^k9rONUh=ZSyXq?|_jy*Hr<;aRubn=Gxn`cH|N-ir+g677eqfy$o1Mw3-2J*Z|z zg>w_Z0r{U&Cf?v0PP*#wtqxkA(FL2WoVZv0Z!dr;;=FIl8jBkWN`sW>Lh-$|)S-(P zzPIWt&K`j>(Z066TrWps$_8;9&l)k8M>fYa+6VQ z3$;F1*ez(h1RJcC_c#C2@|u=At$RMKvRKV`RRJs97ht+}EWw;_URb3xYyT3A(6IW+ zwVEWj``mx+5dr@vqg$yi9ND5#JIqQG3WFs%I|h0nKaP^YoQ-qq7Ev8s(uWbF+}5pv z{Kk7Ec~%S%U-J}Bh}@0S!SDb`a3qp+T} z2Ee)(nbZ$_I=u67M5k=<*rHkQdNxGBf0d;5O4hmpKq|p8Q%`#HHA#5dPo?d zc3&ZueKuv1a(IiN1ALY;Yo* z%wMXb4XQxL?XuIQMqrojlzO615!E&7Zs-pD{xbS+mzfO?IJC^R>Oa3_jHJ4(Es#Ka zmA(4+l9Xvu!XQrUB$J(7dwC^{iBDE}QUZr`C>HQKMLT?%WU(;iZKz>w6pq>HcTFnc zWwb!;Z#@XerLe)peX+mz**@e1XPJ-6lsnYJ;G_DMmEUzxft(@iao`Iavu0u_kHB?p zr6t2^ircqDs~5=@t4Xhf)Fi)T=Y9awkX>u1cHo-UgKhH55{H1=ARg&*63n+o)0}gNKXc1< z*YgVQyGM-9I#cScEvL_T%6)4?gOXd7Bl)|NhpJpu(&>MB5n@7qmAQ9x#9q?-AX1R5 zr8fKNgxvFLtxIEljK)3>$ej+sbr@`<&!Lnq#_Uy%YRyVBN@RbQxzWayB6SmnB@yGN1Ra6}LB)jP#YX09Q2JL*U1d&cEu-H-QK&lNi(f za%7OK3%;hfp=1s(%{$~*)Xu!W^$Up z(BRaYl2VDI>*E>7^j+EXSq!*a9!#Tormj_wh7)5(g9%y0dvSuw9*xbhu}y1&XU}44 zYXGK}t#seIx+|lK;aRxSgiJELk3-WZIoc*hhYdGhje8yAawQA=!Vc;NFN07lv%F^Q zk`jiWo-omdFv$s7?USw^4@f*keo?*tgp-w18CG7hPOl+Ljt-9es2Z*;xgp-jLm?oc zmq17$hz`{|PO(T8_j$Gu)LUUb#Q~GOCW2XoN8qVA7VgjeX}3Z}^y1A+3~-FsI^ERO zmN|a>)r)%?QfHa{#uoQqStugirK2O+@%#G427~t=15EoC-^>JFN+I0EeG@;1Wrxgh zS$g9|j9Banv}bpja-NMNbH4?bHxoz?NBhr6m|-4j)$2Xkc?OCX*mG7MYVx0Bd)>nk zz0;)|T-2N*9Gv>ZF_VZMNM^OhiPaM5JSM2&213BO={7loII@bpMC%->rAv4Ww%bW*S71^KA8yzeenJWqcMON`RTYCI4&ZRLPc_ zgDX4Psg%jUR4etT@4W50)4!S#+asBP!3Uidsiho?TN1D=ON=DueM5;nw_-*$2jdrvPu7)Wo78W*aPmAY=yA8vR zkGl`mggYLHh;x7s8W)|iZTSE>+W%dw{=~o2_6IdD|47sH2mh%R@8D1Ln#*F5T63mq;kau3>u_S@ zs}XVRse%tkewd0y9B1)i>4O{pGam zs$6v4rumQsfyFF)VVKS2kn3|{!nK&??CvPcUHeE0dM7~pMLh0JOL&d?(QW#+?{7`) z!?k`hcBN@{1|%9Hb(!qM|71Erqbz??ZW-shb<{TLzw9|nfq2~2hXn8T$*yIuB6q~k z!#&t>s2-rsgZo+C)if*SF-4=yF(ARE?_^I3(Tbt9PAY41_R zN0(l=Y8}8dSGsD|ub8!Ob%Baw0;;VM2&mtC`kI?9#@tQA1iZL7?sf$Vc0U!MOGu2w z37h`7vT5f@nz7jj#WHc^o7G?7@pm#8#7|g#o|11OxGVj;L|2DZZ$kK`Kw&brxmcd9 z$UbkL7H}|Jvr@4*MBXbQ<>ur;5U1oWKCpJ2GxTEkuAbZUc&U+)%2$hH^5m`Xn?f$y zT6~+OWK*+J;kOImc4q=7;~1*|{uC4U`|vj>NzPsC9NWu`CW@L`ZKNNwNy`yrH9{*2jb=mn=YRUvKNvLdE2)Q>^&Jp)P<)9;0xvb zF0-%-@A#?toi@`0yQBXrv2#}26Dsk*;Af(I2m`YJD2&Z#eEs?k9}jS$cWf_&o&jf_ zSuYEgkp`XBxC?TnmVek1B>5%GtiL2gjw3)%Gr+^gPEk@aD|fm-h9&sn&N;1eAL8iO z*{ECE;;PMeZsvF`*cbd4?1&#jjLoBUh-%|;B*Urx2XIK;!7adtk5QV3T>U$uZkSi$ z|3UdX8nEakLRjY4V-E*+zri`auiJ)rBLzo}a2g3Igt0dE`zGGYsoofG-(z3M&A_BJ zl)aqpygYrq5Y?C?{Q~!3%b?+m=`FucZ}8X zFRH2cYh!#`&8}1=9hM(kk`#N{P_bNyEh!L%@l5{Xq}2B!!sB}N*u;1lSy#Xvkjy-I zQN~hi_0H5!^(erk$iGKuS=wv;H?NX-OZnIv53_Gkc0BWMuW&fpIxGproiykBGOMge zqWruNc!A+-%R8)sK;qMsxFIs2uSMvV0Ku3?-0}ulWiwRRk;U5DaPGHrQ=EbA#ZYr$ zE0W=7e`DP8!!pwig+PXlmmHElm+Pb5(qIa=u!KZ$CKf(txpZX3}_0 zJW(o_c8L>nHvXS^d+EmXK1H278CLOdZ;?!_S?>|WP7{8A2d#< zQA<%qa|til}FE)%th zT$|A#_$v()tP!BHZ&h5#ps8a6=z~NvBakDW@mE0gw-?2^pA@vmRVd;qobG=Xv?!1j zh;|%&<5+_8V(zhXL2SD3YcY@!+7)j|MeF+AUV{U?D%%{#MZBAD`a~m-Ixfmc(#o&#NsQ3WK!|>0NYfMQVCYWKlMgJ)CP(W#!2pv;rzgB;86> z9uERPQ;S+tdGzlj3j3zcD%5|g%Tr*ftz{dMZ9b*)Y!q%;gEi2(5Dw9~$v{av)}@|^ z5zh-ewr>B&W1TCevo~wL74gHiFAQ?{+l!<;g)0zCE@5^v`P`W>Z=;^FN2ltSDGV3L z))vYv{3F{-INy?2h~LyEKPl)DqB-~q)|K398*un6=-b~1%)JKmQYR$F{ad{2#HM@M z)*d}Y9W>Ry^wy$A_h3{Ll%n-h+I}90#oZqgX$Z#4gcXw&Y2I8nR_ni2Q~Zai+bNz& zPNC6JTiAgnx5nPD)_nhYhN0Fj6`u{}7qX$=P^#^Gh{+%CqY}kPnDQ<-Zhq8R1Q)7GPd0`BHM-5$>s7R|C!XL>yATB) zXfUs&*fQ1ne@sV4a4r9!J^or`G{?S>)MQ0Ch6R5M4jCFrv(sG^!b_yqTD?w4-=An1 z2`y?|0IG-Jb}0&bE<>Su(X^tTpuc0Y?J=`+4jI}b9rx_xhnDgS?Jt)C&eL}2guzJ9Uc#p)pl^COj zj~aJ-mH}c$|9i8ZFsUtf$wK-^O=*Ma@kq9Ocfp;gD~DI*Ah`WuaOWvi&C8K@Zx-b>T#PQ(957bFa`2+WlQzj{E zAOx1FNp7KWBYq+@CMQ|Z&$yJdwkd|UMYXJD z1Z=65C=S(Mfx}HYjmecoE_7iuSLG;<`#~XV7BZHIz!V-HE7?oiC_jUfhi!{T+)){r zX0H$MtQD*zXe96cC2?j|{7*1ajxrynz0P2ga^GwpVQ0A%Jb0p+xviHWO6aAb{Ugl z8OOPJ;uH@;Tx(-)iS}@bSw$MVaiYAQ4Sc7-3EJa0CT>3!9t+&WlIVk;lzl_@KtduF z!v7B3q~KG8B~iR5HV z2y#H&g=KMHkuon26moKv<+Pkd{yuv}3r)n8bc##%?HiF4pifTw&MWX(lzXdtVdLCtrNC$43U0O9#8iw7H}za=_8iB_{cOT{l3v6 zRc$i2_MzzkcWc++U3Ark5WDAd&SaRm*pMjDtw<>GI1OLBS*+D&seJZndqh)({#nrrzS>^h9EL8p(!upEm^@<~`fomNL|3`odFe{Ks_30D zXzal{OG-V~_1k&?9;EkgGp$y|P?)%irk8riwWOUHBWDBseTcqbI0GKt_A;rLM=qLTIILkpaQ>3c&k=bV$He8SoYi+5kvm9U&Yb z1UbuC2LRaxNUYOZfE5|e$cui~?f{FPzZ)vS%G+_l4^3e) z-FVh92CU3_f<|P8bW&r<#qMWg$>96?sMW#$u*22siwZf9L#%6fl%)~t+7wv0$vecc z5+Hf0TqS*vg&IXvj~^N+&#qaB5HUwgeL;Hld@G=M+hJ%=>mTZ3l#!Sw!lCe;qX3x0}61VAi1Zo%F0i^IDXt)@lOhOKyMaTbuSJ9RR;#qrIP<=#ntYCb$dio%T&)lq*Oir@FRglOEPv7|{j76@{Yd)o z*!Yde>xW^~)F17%DxZ95iWQv{K}0Yq`xXb<-x8Sm&)BIwpV_qv`5TLqxAR- z718)F()b6Qk6TU{f33t>MStrz zx>%56JE%qA&-CID7XtYaoXt|4xQh7>NAX5a3->kFfb0=!d0S%gzO|0_wlm&jyr51i zgE}^8bw}n!*5EY)?vhswCNmKT^4d{p5 z99tZuc)NpHpq91z!X~mw#CeZHUC()A9D`|*Aj&zn!Vz&2y?e*?LX?0q=tTSG?yT#x zD-d|8Q*pTrK0?;r@Se1{!@Ayg+PLc^&M70mHD~ zgt_;faO+i!E(MYQ%O~%jtg??N43b^@l#}G6xxQ-PYqoh$jrUIvzNwKq!oGU;-;vf&{F`5U-+}0GN=T;9VAGyjo(m*_~o6QXb zVrpOiX=U9RZtiW`=bYX!297Ca-`73`I=G+V9HZtw9Q*nMDQ@r2DjR1#=ROSA+xw#i z1|=5YY6};O2cm4FJJSn(?+;YvUhB=OEaXVMP6UZqo&~xv`F;KM4$)G?v^hN69ffAT z$GxjL?iYbNZZ-~=K^H&Sv^LDo(MxDRe?QK?1J8hsl%@L6ot+)ds6)Tzk~zO$RM*^a z@8tw%glb+sb5{s;7jM<(3orx-I55r#LF922N zyf^AU6w$73O!84^XL;!(R0$mKtgZ4Y!`+?c2c%9h=PYG!|Lys7wv!L6^A;F%acOu0 zR`2|CL07G)2MoOYi_K3t8OIW*XKOgu*u0lsz+!vC#{6dLu-zM@Cf$G3cj83DBjhy& zk=bIRD1dFYh1l(p!R|Yaor(C?z{vzEjDfzd9GD|v>@Vq!}N6nPvJg~#>XX2X#v*7 za2xdTP1-+OKmi-3fpf@j=@c@8Mn-qaz9=3+sDOR`eP+6seoLJ#tT|k!`3pgS8##@f ze|b-8_;J75XM$t~cR5W`gI9gQ(oc(D1y{5YWbZFrR&uNzl`TSXd36^Vv~Qig;##GU zR>c1$vnzAd_1`zhV2@Ib|2179K{}UvS-hfL`|{x8u2CyJan73G;L?U$aGl)X?EP3k zT>o8?cLO_&z6%kD{Z0a&(!+1R>2aN%kX_`95G?pvRmz7g#Bf#{kpTF(UGgn{@tC6 zJV+(mk;Tstts4ac&6Bg7XA%XZaX}Y{ycTM#V|~dbb2kh5L0^ZbFo@qeFXY{uOB$!{ zW-bKF)vs?H71Od?@2(oZ5}P*B^ry}C^~G9K-rje3NSUO~LsheT4f;#-`btfm4mRyN zI4k>k+h$=fT&O&;C)Jqo9oIUlneTbX5h`aU%|A!ucGGPk?K^0(nPah0!U<|~lQAZ~ zR(Eum-m%mO`~ORM6@ckn?;G=kU=AB>fRZ(xqBk# z@+np#98vP~dg!hA6;zufrUcmehUFO=7RUBV_rka9PpW+3>H|$85-*q4j=;L>wp}^L z2R>gl@ed-ONc{R>&(D;VoiMK-o3Y_}98%kAbnT@zh`@EdVp?@a9ld;juUY5ul{9@*$Z(*1Scx`OXLp zANeeMW~m&W$P$bz)-Gz((g;v%y!W(+duD#YAqeV~H+K;kdrN7nc$QTrtX$Sz+b0^_ zBrGsH97ZoB|DW2eJmmHJ!O`0Y4f|9KUA`TJQUDdY}(=REh$ zq-5=9Trv9CMth@!qeXbUW67qj;!?mVEV5a1ZtRG-M+F{~fO@{2<5u7bEaqxrcI1Fnt7>xdS13~&d9DXVP#qQv4i{2x(|4s<37-}ps+o&EZ=z}-%h71Xq|fx~IG5u-4;yn>%_5_J=9 zH|U@lvUa*Y8?;XWKNkD0 zO}iL;7S^t`RKmO(1Wu%D2xo}`5<5Gbk~)hFa~e5}?#jn{FJ7CN`WD_irKlaL+^mTo zG2)g4H8d!OeN3p|uGfHuuiX6TSi$sh3BcNO1uGY{_rBL@Y!0$0I~sL0?GKl*Ri@Xw z+GTHB8{G9KTuQ&2)rYvo#VTvEEVO~1dMyN;2>b+DbE}Uzum&InU?)?X5=kFnKW1@T zhp%6|QVe1HGx*iyKf!n@&+D2?TuFKD>m#GRH4e0)FG69p=?FRL8; zRZ@zX^-}zY7zKF;3uHR_k6(d=eDB+CmrZF`uXodC>n%-YVE@+LJDt``ch}*VVZ@bv zT+>Pi^+_hY>Ubq!kmaTQ=(#?ewxkT~j%G8u!ii}WdTV7#3GDgIPUdQS!P?*oB?O$i zciwz3A<&;>Hc!r@Kk|{u$PPDD>?vM%_UUFxt0#V4(%yaZ5T}Yx_$3)yA6a*tF~gB2 z-wRY`&k({1VADxci=D_EErwL$S}|Prf&B_05g6n~jPOzOx#mRupWW{xa_?a+w->|= zI5&?5#!wuXU8u*tvv52MXND`24AD=eFk&)4!Naid5L=yRn#4Y4zxCKXK_R?pB%SwZ zlHQKNwRw2F;iwYGGH9W;A!}Qdag8+Uyk~q)Q?T7UMk8p4<$jD;yPuCMx9xr2CDU$m zL)EmaRNH#WnEm3wEdisO0Mr-8c+{L~ZuH%KMcmS7<6e~I*k_n{sd^@8vQK(hLuw88 z==F-s*WAX#w9$PDc36lJftY4l_a#Uln(p;WpvZ^^eAiza`J&leE>zhj)rbceN^Y<& z@EF!8|FQ-V(Rb0886NFkPrpbxNs=T8x0$UpahGGF=H&!E9c8!7brNBpD#Hn27O}YqB{Z!`dm5`1o5a@= zBqw5mqu=RSH!cbcq!pE6C6>4kySW_$qlb=>qsQd|H{Bej3xB+YA!wtG7wjwh6Lf9T zESS>~O$3Dq7<~?G1|P4WswlW!l}g+4@dMzqv zx3=Z`C4@g0d=l4$YbqH+`*$VK){8~52G)5f(Cf}r4UlXfw1|h=x4JsYbn}VW-xqkk zKG3gVVTQh-_nWt1i+BOWTzC>T&XR%7d>-_*_5kmi78ZmQ=rEGbLMUQP%YH zb^rdb>B=s`tut&^_DL@t`;n25{OlfCyq zD$Kh-oUNbRrZFqlNnKo0%I`4)DShu^va~VB@Ykg-u;vx|+qNj{h>U*M8HEkw5^cp6}jIu`JgSI>UE*%;e=DwGN zI=Ai@`zU41Ml`70aOSahY$d6t`Cv80@)o{y!5N;!=YDvSoGNh1akhc|YN!7_15G-0 zLn5&g{9-a$FFd5YZoTtvnm6OJ&-VZjgw*yUkiaKAZ0U9t{&0c zC4g@zpN5u7rnc~%ttsmBC;0_PfFTloP;hkO|B2W91%VIaiIPGkWe3_5u(FJ8*d^>o zHuaJ4x7Dtj#ns%7LS#=_lv|pY4$c@?c2r&+H=in}f^sZjQdex0C#BwuT+f71zk@{C zwDuxb0!Vc_1il#=ZhltPi9);>y{bQbavN#j+&Awf0Cm;4f;k<2%P&z`b7g0Sliv(f z309_O^DVxiG$rmf%5a@gXRTHJ)BogLfhD=%o0vBTaTWAwwI?^Lr5_}Gbdv8O(1XD> z(jc;d@d(Ly+_o>P@;9WRKJJtgT_a3EY~#}xXcX0l-S7SA3kJ(K z$Iu$hzY4RFX+$^weOWPj^?pD;^9~IA$-ce|mZu$vg!F^Ib&SR zPp^Ux=A1-EZ@u!_N-{69I#UtiqJ2JRQPWxr!3Z|E!*)dA>^%^cSfOWul!u|5|qFO6=1sw>FI2rrAs=m8JFjEzbF1cUtz0 z>sL^Y*V3f$h9n!Z@Rr*I2;h^AZ*N=Clq)Z(7f{UM<>}h2ceQN3Pu|Y%zu4h8Pjq(O ztcNrD@Gsh*H~EzG*XB>ZW==$yyu~lanl?Z-)qDg|lQW>H?kP-+H|6R(^^c3w*cYp$ zjw;emDD6pYjPv5u-7Adqymxj^rX&5dh)jqk8%{2i3Tbx|1H z-|~d#m}NU!QS&q{xga4A(|OV>j3T7Rw8F=1yVI|aS38Gog8iPG70*W4%BmojcI72| z+Oe9Cw_OVI(v>fjyF7mJx{X}>6ZUDGwqA63;F_7}LM;k>kl^rWC4k=65U-4lBf3Nn z=O^s<`KYIP{;SI=?Oh1^qGZ?a0-QN|JC=vp;NUkA7a~gI4^2ZfQ$7(`BRvtR?xE}T zq2o&?e|GsZWc)?V^NW-A`_A_EO}3KDhx*8K5=P!&uY8Z&YO$e@L!du@&mF>`t<=Ra zPc4xds{u10zy3(YSqB<_Az`=1D-y#W;|tdQZMGzY^4~@ zPM;H@|EJM(lLyuZ#@J6*>I#Vx*K1>{gnEV1OnWjej?G`5qvocP?Z4itqkxoxoB^Vj z;6GdzP3esQW{FEohwwX~;kcxcZKJqgPCe>XFd%dk!!o%h-z_H3v7v)U&nTbKpO) z41Zd$N1*pdkt@z)S1GvFg`|D^AFjX~J!6d%i>{4!jKd#qB>K3L{?9vVz*VOLey0Gt z{yHu#q^HY(KAxHmOtCjeU=s2MHtC!6%0@Ka@?6TfWh<7YyDKw@wVPJtppb7fqu-;; zNN&dZkC9AwMmUqk0xlzh&q{RUSc}JiL`?Khke0gpYohWm8L?L>O0PV9l|5~Pu>aP@ z1rOEadIR?EQ4#++@azvNk7CRgKhLTd$_ML?`O_9|X4@%K7 z*)XLo4}F2HsW1M^l^CtrrcuOSvOlkX;e$!41vH8-R~ary2!eFd*Jr}sb{{G_)Wr5R zF~}GO!Hm+*$Ll>BVLtr>yiyYJ=Y5HiPUQHucdq1`U3QX3R7yZq2N|;pcK8#XdJobG zty&7~3#=a@;7$)!`1Vp8Ce)8Eu4r)@Haf>%6038zM|u@ii}kXmf%eV5rxoU)Rh%O~ z(Vzp2kM&-9_}&f06sCp5Wk|-KZA}l|-Fe*M1|1Q&<9eH&GS>2kgVUnHtdI4m`QCoH zR+GWqJ;)E}tpr@Rc)(G=neBPvj|TS{*mmkd@Qi1&%ro^O8iF$FyfgCHO2`aKUr_VK!8Dp|94;KN%992K&W-LXH|NloT0_u&zKcwh8@;$uqq zFMN$0HE4c;2hn!o3Y7*SZZ2=+_;Bm$-3VrC*=Lg?!WqN`xEkXT$vMn?zlD>*+Y;hQ z-uPgghJFIqLGeaSL{lIqst+j`I3Se#YHe%8vRx3hK54n|J4Oov!4n~dHC3yn|I7MV z1N!0{+L&8S&sH5`B-oS=o78XIk6s)!DWjEtqq?~BgW}F2#=1#-hwvRqpgO8i1Wq(l zJUILDVAQ97t)eUymr#`@^b6EXF0~J(^x{X6=R%F|4@JoN+NR_s*qGMb7!bM1 z>r$Z^=5>H^Q)}eA?|aeVu$UFNKZpIk^=(^Yeuo20tTVO~kjQ@D1R}%%Ju}PU8uI;z zc+j?Qq+dLZql~-oTvKXN;htg!BWXu#m-k@XeH_kN&Cw-{`U8oT_E_k)karL|;5yJr z{c&zM+I!z>nFo>0TJ75a)aE4N)9&sNo?|K&<76=DD?Wp&H*XkOzB<58e3CNMdm1`2 zR{!(0z$d2kkkvtA$))Fx59UrE1q+cp3KW-&)!m+5tYMdxnXexB53^7*H2_v0w&$Jv zcEA0`VsqBfxzd|icMGW;9T}B@mn*h)cjw`>CiVZpr~*+3dYg4%07}f+XZ|d5TkfFv zREh@4Og^-i|NY9!a)O-!xA`BV9vzeZ7fhrQZ-RW4N1Uwtrw{4g=;+l76Lr8D0|$9t zgS<#Jq;0o;4gu-K`P=*WYRpS?|EE>)sg>~gp!0$RrE|~PcgV*{n65!E;tdfrukf2_ z5UU;@?@;)FN7}Y%*7xR(auzd7pixymNt)#?DJU*t)dybPneZBiYP9p+8}-mS*7MJW zw0jPYUd$b9Z1a{98#PX6Wr}!ZvNZJ)6nn~^vy%pm+fv7K^)H2j9^5_;TgMNy3TJ_m zFwajOh*HpY>88O#st{%a{>?H`4D!%w&}P8D7?*VJgQ9)yS_ejY-M-(ot-w!0Z^{nO!+CYBooSOKId!3|Mb%MBhCRUxnbw>Uq=fKr&QjyjoS8jaL^ zr~q6Pi%x8_El35{)_Y#Z9^7w8?w;;WVG4AnT?;SOErurKQ>jQBmPzwu1HpK^z)w{1 zYld>5)=xjH_Q>@M0DIX1+kDa39|L4&*%f#{JEjyIZ+a`ae2fA(SMvN0Sl>RO-JW8V zvt8Z~7~+7rjw}Y&Ja#(3rJCF-@pK4cS5sTiqE;TkXwG~0Ie3r@p(nv+b7^&L$IZoG5*Vx%V@aH9-mQyNi8Ler8x#+8{WO0Do>Y zB^%%jdnHL#w#jWWjjf3VyXt7@?dmpvC<(-&be-17_VMt8*s5sa49~Aw9^2a@eSE{; zTe!Xb`uFu@2A~IrmJE!$K?$Z5xv;*lg;cW1+C5eNx(6rcegdso6N9uknaJINCkIQs zvf~%%gDhENapT=ATLTg~HyO?97zyLjA13g|($s!>NlNr);2QwXQf~de(Bv0%rzgA?wV6EmX!0obI5BEB~U_pQwcmc~Wp_vL-UHbXLU|vLb`X)CSBMgC~tZ+PAf` zWtUnV&shRvHR{7FKWR)(3x`bn7%vfmt30iL5mF7tmE7;)1?7J-p$e8YV|`GY(u*ot zpj2}8>}y};5`NWxS56Xeuy48fggr$o!6FPADmcUD_L~Z}qvQtyA0R+%dmynSCK+bT z{B=(Ssy%8^NsELEmulIm-fD8y?EseISCDG&rQ} ziWD1_UD@XHSEjmUE72jF<-QE^o%U8rA6&#nW3{U0uly@Xoul5%$c9?{s!@FHP2))^ z7c`3PQg6X(u2{4%7F*rb|EsQVjE}d=_u0k3S6Z)H0?LI_jBV~`4u)BERHyy3E7E)| zZ>)tI>s!qPP|TH1#$O5h{8YVtyQZ*4ijXZ%Nh?WT7=NYIWI-@ex1WS9(EU6Ov>ctq zUzy%jf(!6pZZMC#ce~JfoK+x(u@U0nG$s35!==D2{Cw%j6BIGI#HhmO*SdH<*0y&9 zT`Q3LZ45khLD(_O&PJB7Yqz^0^Cl+-$M4}|(-$^XFDhQ8)zfF5U)0QS7TO|*n1dPR zN*@d6#KDLE2lVQ4R!ASodOZJIke)nai4pT!+hSw&{LBvJTwTUK`tDwEt66Yhqa}XL z5xTByH*ywrIM(jieRgIl!;K#;kHdU+=lyNyeU}NC9kHuN#OU~d$Be*Gy(p2j$TLNj zZOH6m(b*6XkB0c1bvWI}nV7ed4`&p>w!#lg;F*|NU3AJc zJ{2Ye(~q=f&a3}XGG#Epvm8DZMGjSwU!?JS9`EDO%78}!@^WN(l$H#t8Y6D9)_OO2 z$K7s8Aburd5||XALo5&4&X6Zphy&xUjYmDNBi7QZ#P?7`0Xz86p7-6t8j^WXt5bWc zHHUyhKlbx*feA{BuLSOL$rNoKtN!_;dc=!4u9}uUbKj5_?la&aS7yWXFrNdAf$(&c zo8DcNRN!HNPm+W}SAU@co1`a*c`v6D@$6PW+gMS$xT)IP}(UX_*qcZL$7df2JGqy0@g-bOFc*N&fEH0legm(xXX6Epv zTT5@?z;SmRt0+?${!5w_uPnN=ouax5Nl>K=e-HWS(MP+32^~4IM}yB++5uNRym{d7 zE12E7;Byw|HrEb^*~-i-Vtwh`tz_SakFRjnVl3N2hY4}=2)Z5}Ye!amu$*`_Q$t+* zz_34+maVx-*bB*9){oY!uUX9@!|~Iz4Z57x^9J9hgAL%HvQeJ@>HRrPamSazL3OZE zsdMF?-$AA8A*+ACmU+mOkH-)LJrNn-Q)2L=ewOL!f?hw-usQ5fIww93@V{P%&h!^x z`XSXNue`2Rru8+LUz}*0mPEwT;(XpNd`Mo1BEt}fQz`JaG01E$!SX)$@iH++-Au92 z#-=d$7Y_E~d95$ZRMt0iS*7p$-~LOzE0>TGHu&v3?eU^{j>C_7>+DrzoQHPMfMM=l zZ(p#1=2u~CihH_O3`6GlK7%zac!(>p@$!nZJ^UYSTWnyv>AqHVUOw6DL}7Nju#OWW z=e|K_{W)dnaTeU2B*!Ng1~#eMKB82(-%qXs%g;h;$YG>5ubxx}%zZ7FU|p&Fz#Rm| zf7d#rm|aD_w_ZXmVJ&KQ6UX7wJH5)I)kdN_v7>~>LpL6Ek6QG-<`J?(JTUqeX`wgA z*!T!Hzi13yzMqd<8VsT=L^*hdP|4Vl1(qhw^v_8S#P}uj2i`SoD|t*70{<#=*dKlX zJX-u6SKr;X&l1kS@-Jwc8+3qa{&A^yj5X={{C2-={gueZ--rTg&#zL0taqz!b?iyt z1I+sUNofub#M=KTcj1Z{nJG_a5BHyJF#V7v^BAWjNR{pW&4)E(vz={&D0BGwkM2{zr%T4`MJFLCR zAHvdjKbI`C69?xsMn%VagYQBBy2;S9USxKQlo(o+H+~R2+=)#n68d zJT%WSMf1o#@M$*ysc0xE0IyqzjyqVMa(6s0_9T>K)tj?D4C6qqeQ(F9XU_!et7sZ- z^cB9pt#B#$RP~$zKS3noaxcVD3qDb++^jAziNNzl8W-*|MN#(qOQi#Ye2od#mUI3a zp^Y}Zx(y&cK5|_6A~4MJ|GWU|?F(cO#SnBR1e1p%rbI?DinxiqpZLx^lAjnBedicb zkUnT}vG2w`AwiR!T5tEVxO`Z?N*RMez)j0yF-`<+#pc&Fyp=&YG0AV_d<8^=PrAzP z&!1vX!5IJK7u3*j&7g~6n&k+926~{KIM*}OEStDBMsAO#3l^NRI{s8Do{QzTV1!MM zvq21w(moeF+KtB!w*{Hs*`X7|0(%rJI29Gk{oNOrI36j}mD!Je5CpaV9&<)!p!JUq zg5zQE+oU*Nw0mkYDk-vai|b*9C!=h&de?976x|tXafekeD$6iZmdtKZad{C$C?oqD zBcK*_dardtUI-?cAL^JD%&9gU`7&U-qkCK@kEqko_LQ#I;WDHDRBk<=R5p4=vpw*7 z!+lOSVlr)s}5Ju3FvwL>O5eAO}6=L8tB`NLDyp=WD0I3I+*w)=jGf0^fL zuE|hPY$xXv%=03`^B`o>Rb1#YFiI2CexOrj_=)%Xgc<~{e}|n8qkXO+7AIeVB~J8r zmf1Y#iWZ$a13Px>wZY;sdz{|JYi+(9_(0hwPumRN$>G|4?4pn7a!Gb(i5GelF4qFb zEC{3LPdnxNrf=etBNTlK{u0U(@!NeHi>L|`ai+AR=bFrG#0w#86YyIntqEm7KWBKv z1g)XoWeKzgAMguNbp&U3oRkEltf*3RF!(LZB(|xyB(R;4egF3;P=SnDhtMWgr+6rV zA^E$C-+5sNJ43*FT|Ic1%-Z;~g42{v4Vjx+Etgfe+!^Hq!^H#&)q;X+^HQ;=C4N(U zQem>SWL9`W#rnX32KEhCYVy42b%`{03^mQN6>ZN}tJ!Nfk@%HGbW<{l&Ttl=XIViZ z4u>`5-Gfm9Z1*^p&K{~P8p4fl=X4ASz0zmnH#_;RZ3f9)G2^dN-xB> zB${!Eg&VKi+5?N!bb@HCnBs7g;{xnePr~*8l7UmnzNtZ-nR;S7>H#1upX$zS9DP!Q ze0d3GjtgD*d=u3;UC+gdoykcuU$>lSc}%$gZ{i)plNfKbNT4p{g8KuSD1b>6hl>w~ z#Q>RJS%fYJul)N{_tVP^hTnFx|CGxu3AS*OkMB=&-M>&htErOoHbBd=jNi?KR zKO+hn55n zWL~&bE%5kIiBDDU(Cle8Y85K?nzwi}Rzdi*$Fs{S4Vp^AgJTl_Fm-PyzR%j z%XL@gddQj-W>@W@FxFmY$V^G(nX04!XpY70@+e*xv9P~t_@SIIC|LZHUA|zhUgBC* z^OIi*xl;X)&SWiml<`SkbnTr;FQb4|f6({tU~^;tgc09boL`T)V`*`>?HFjcVpvj` z2?l?KhF0gxEoUnQ4H`x(n7GCpFGe?)AC7z3t~U= zlT%LJ9QA2Z`Zbr?19%_46AQdAe=yh-zPen--`K~S@)O~xS3>PhH+w% z%x46&xx9a*Y52|rB@g);ANTuil9j&{9un*_3pFMok4b(z@T`_j2Q~1t3qLl3R+*X6 z2i4Wo_^97dbDS75knbFJ6D$~NJDsYM1+O{K8E^H*v&LBQ$W2S}8b zlCH`kIpwG-=Y^lLpEi~buJ$wAL@2N1=&90Itr3+vY%0mszhwEC+pW^IH zXikX0`DATV3S1A-r5J{&@Xmjwz4nEdb();C>Nmhal2CONwo7#4nxOy5#z&{l$E>~@ ziFM=pKL8j(=f2&Rh?@}n&KEh%C7DyMhwyuEd9%#0(YkS`IlJfOIlXVJET8%d2*@Pp zC-jB%aPxom0{E%dzu~(zKF!%njD5%0SB$5O*=+oZE3R1LA^;l$vL4YIrDJ^pUK;?$ zUSnRrFvjT@HPTo(CD+&kvBAR{+c2pgc_1eQLm-#Y`0gfG*?#jke>3V$oo;sFg%{Ep zXSx7D=UU++fENFA$yj>*zyF07&z6_>h;`+lt`cgnD5GJ><`({-Lvm#?NMd6V4>BG% z#KQnmMvGkd>ms9s>M^1254G{%dU)^u#FO@Qo40Jm6;a4~VB#Q99pIzn0f;$9lJ|>d z>VSzxTNlY+B#M9QmMz`UJC4?s(H-5!4a+*=L=|**-f^dXcXT)1d~JLpGDg$G-x3a+lkFYDWE7n>hEYG~ zp(9;ofKPcB>^iM`=CKF5$80;k+p(TW(p$Zwo*?VUGwH-GKU?)p2w(!KwNtGoAo z>Eq#>Y**p@RfVM;5wb0n7KjV=M}2St5AOw8(iRrDy7|VVx}(m$pxb!h@!itiGeXwV z?h_)O4wDD&$pZ&({6cr=hR=6jyZ%$%ZI`{b``RsE7Wu>1{}~syZQa^E=CP0N&N}lz zcj8GW<+!V6edq0WcGp~cO?TB*pX{#s_*HT7xQ-)qfEZsQ5jN(S5*;P_SS_c=9|I~M zv{F>YqUB8+yOYm5yW4fv%{9fv1GnGsIL?9^L8Ztr=Y z>TPxTkubK|bkO)^aLRax<|8+MfT~yq*7-OF$!_^AdxTL1mQ5mxSxmoA^Z&i4obnRA@BcQ<@eiqevMJ!* z;-9Nu9MWsZD_jH+{A;XBSf6MM0TUM+}91vQ2B;sKiY6xNXk)LGPT zvf~hQB~4e+_~vHEj+@Va{`2Wbo$mTC^Y}j$iD##aG?>769l1nD&+(u4@*n)PMf0W>jJw2V7eIM z8am)#zUk)fOJDqAch}u_>jWb}*i>{u>wIg|I30E_q6LPKQE<5cmm*g>R2xP)Tm7vb zi?l5BSYH&u!n*FbjoZ8b_}K64&e?XNIUf-*7X)5$#ap`@{^{1@ONwp3+6CdPp|1-n zCL=<70-Intx%he0zB9WW-}58gTy1*_lLsEG2kv%9@jnRInQd^b52LyzCA{=!1|rv{r&D%Ev%}J7sp13!WRZ-Zz~ z*5dY`J@4DQ9Xqw)*UbYK^lk7$*06CNcnfRKzogyPlD}Cz7n1|uTu6v#s&ym7d~Tzy z{*Qd<^6o<){s{A|C}+@mkPe-ivpH|Z#$VZ#MTo!bC+JF^e)Db5ewH~ScDcxmZ35OW z^j+qhxv}VP{V*;Ueed0W_($DmKlk~n-*zB3(vi@iDZ`+9hA%m|zXl-k+q7Zb3tsU2 zxQOA2<=6(>_osjU-}MEn%Zr>=o z+_l|}x}dt2p>7DcV@E9FeKRgc+O!OqDz8lKHD7-K^M87T%aJmf2LOe z?!M!WJHEEOy!TM>`K!PBtAlz~Ic`?+DuAB=h`Dc? zHma1h^yH*F7LSt~){h5xX9jENJX|^BY8vS`z3EL$+H8ZJH|Ki)pT}#ukAC!{^Ur+d zGx3g&7Nkph=YM5ML09aSzV{WcIQR53&;Cgk7_+%LGUq|9Z4u7kz&My!3o}ixEx@`pL*NSDBEn`7#y<>{HzUYf!LWd;p2&8J6`#} zcC(|ljfke~q(%f8{-y@ac*DG zC_L&>kLq6X(ie7{^>haEa>kK3j=AXVp_!MKpcOvuZVN9&;8@7FQm_pZVL_nz3apET zzc>UBS+bc65J8))aD{Bc7?AgzvbQ_+)P3DQd`wTSXfl-w5L&2^2Y+QM8Gt2O+cZS> zm2ltkw2Qi@KfUyuQa+a<4a+iOuNP8W0MW#*FDE+6AAX_y5iE}kw&}M;bCPo&|G4hP zn{Lumn>Phn;NoC|6WoFdB;_PSf?RNwY1_8#-M{>Sf8HIl>zHC2#)ynxA63}?{n}(t zPf~vBQ~#K-Dl6$Z8dQY{-^FMU%sh(@`c|Lmiv~KOjK>_2BPNs+(*O{QQ8MM|CjHgXB>arNqgS$ z_TT-l8#ZiM(b__rB5qyL*T&*Y09tOa@Sm|!pe~NB=nG`Lf;`uzfxMchD{rEaU%C&Oi;_1v>`oJR9$IU zF$bJ~S)e{|dodfEMHgi%@*<65Av zq&(sxE&}}OW526AYDtq?e2ANf!=H|e5A7Y(;p^hoL~+vAj=tM>bz5KjN>fkqwU>^^ zDq^=0iH*fYtta8!Zh}Sx5d%*fc*OnL&w56-gSloGnwYfb$ynf)dT!65+|jOWM|@5@ zMtUnJW-zf7YT9Da#bV#G$8SsCK}V^&wnYTDEZZSN0o&w2JUwU}!z zE=PG#s-FXPlZ{`2M_IxFS(E^;bX!%wFaMsGber|KzXN(GgMWs%`E$>GLU-;H9$%Cc zilT~K5nm8Z6n+h3L{u0QB|S<@y3AFAQ)P_$b=^TsI+!fGWP(Ppph?`)@{;D7XLigv z*D_rC{`YpD_}Jgae4I)swJS^Y3IMPBVz!FKeEq@B|Me8{`9JcLKmE;Gm&|!$OACJX z0hs^eKmOzLDSCzH>Z`8~hxyB7Y*NmC0D3B5g(m>=Vq4ZzyS7>3gQK#a{+KkWs9XN1c<%@c>oGWhZ&Z(=?Grj-6ta$#S@BQ9= z$L!qsBFe;IkY&pb=yE1JFE+4vB`{bx#K2Jo7Td(&l7mW8LG#z;SQ+23&Q`Qw878`$gMrF+g@&4!<%ZGpmX;kbm6jC|Bq4^wvgx4y8OZ)qlHuuoy~ zz(eGLE#LZrZqq4emiDKHSej*sr%ev>YMO`X|Io9D;Ep0=VSm|}G<-S5sAr*afgr@G zo%0y@6V5#+^+|7t80+_#7=0z>t~wUnfp7cfZdr@hDLi-&@cP8Qi!`R;e=5fHP((+a zx}9XjC5GXQA0gnGx$uJXwK&YDGNP@Ng>{gbKA3dSswGw~;&)r|1%fuOI~l^~A~WoP zuiUyAUpPP>G@-ksQ5WZM-%Xdk$VZ$P2l{*$i}jOF)_xMUm-6v*h_nv0< zSr*LaKAwfIQ02lzjU@uUzD!VY@uT#oa{C6TL)b|eNiIBRanu&#y_t5zfxBx(`Cjd4+^Wx|HP;}fJ8331%3wSb#%Ed3;v2^q} zb@pu8X%m-YNp{`b1K{$Hd}z(@{_os*Y{vzF!Qh={_n;M= z3f*zXAD1WPbVX3uZ)AMJcI?jOVR)x600d`n^!kgUJ%d%wJc8NcESUDlb9EP-D@Ib@DG~<#lZMDZ2d6Iehfz!oI!32wAIgkNd;-ny3s0PH@Z|Y3} zScMPUxD_MjObf1Z#==?l8iuc0`rgilm&r-^EM?eHA&)ZaxBv80hj+7U-HO-Y9?t(J zVaz!9oW~F96kL=ee3|-8kG<_rca^)d&wiA|sNi-S#H8?B0E1x8s;yE$E1+KlzD|cg(?AGnCdq6OU^(F)!^W^2N6MHvd=ivtxn} zS=)};`K$wHpS??q{f%4z;4|aprXz11uUvfb#X)<~MHj97)KC3XtXbHO z$;E&moDS>40}O*xSO*@Ua}ad5KRSp8Law0A^;wPCyWaIKKJ^#h-2C*XKOJ;@hJ%i$ z-T#+vy6L8wc6goX0zvHlzir1c&!J-Dd=X-GQK7`~YEVdEq-Y=MPyHIEIsJ%&!6IJ; zfSduQZ!Edf=q11QOGVP!M7;NZ?D2b6E6<{M6zd0fJnKOpE__ZtP5|I?kOEZ$G=*;S z=Dd4>AJU(7PEk+HhFAV3v2EK{osWmxZiK1U4{hixakPYz2G`n3UbLmCVLPBfFu#Ei z14E9&J@N*H50$d=g5i<(Z?s+hUE&84^D4k`o0_}!joU(A@q5&P>&|slakFmYi3{5F z12JggnLKb09#}rBT)cA|JS=U~kljuj+A|NF5hojinBp-G##ApBUK%mWVuZ6uEVe}B z#ep6%?RM?T4OQ#-XFbTVV8v}Z!M*X@PCBlkoRSZP2Y3}=^U>RjC@M`!>c;0O0IsVV zLtg5o&>wpo^{ZI~i*{BRO+`jKD0lJUbf^n*)RiYk>MTTJqMad6i(CTqtbp2(`UDA@ z9*G>|i2FP;dYQ;dd@ptXzI|DKa0a{VwOkcrid8W;6rzt5Oq2(AVq1}u{fN%9+7A1q zu&3RSmJ1u{i*k_z|D~8!e%rg}8#Vb8&wS=H z5AEN-zvBr2J&rTu@qY!q<9~?nbS~2||IPpQ^DkOj-moVJ0zC~>2DTg?Tq+j%8r#Z% z=|Lk;I(e0lh5`PdY$+ECxJDiVudr$p8*u;9wF-HeuEWj+H70H66Ec~GH0w>1ISePBsMyXz8 zN`N~Cv3?;c4vnSmGmWiVb~ZAK9aHq+J+QQ;yzgvZJ4SSKJ{gQ}Escn_Z&w>(MG|*| zeGy1`>bH!CAujU5(@tVxp7zsb0uMj!iM-+nMQ*k+!AA>tpL;94nBtrqwxkI3r7d23 z+g8Ttq9;i^HbPq!2IU3Y6pFU%_S!I>cw#=i8Pp>k_6v*rEGssr9a$dI_5uD>*8WiW z!{#6_zQkYA*U(nVQ|MRCp_;PXm;O&tw{PD*@Kf4|E(PhixBd^=&SQ2EWhcjm@LNVX z2$XctfK+H~&9<1}RY&>XH4<^K8`8)b)Kh~Wz*9Q=0i1B+zE!G@B!JHX@)UrB`;uC( zKo5TYua?5bWNI-hvlC9-^8@TVhOQG%I3Zp;_LIlz6Knt&4&#de{B-kjh1ZwcQ0Lz* za7wS42Q(^7VLf<2i~Z<4bP!(*c-5<3we%^yPs0-cS6y}0(tF?g-spVV7hul&|2+P$ zNB)<^!|MTaU7cGxdCw^?@gTsd%pDF`!gW_)8vv?bH^q)k0L#NUy7-{MF$a)1#YDa* z&esOs@wVUVL2HoW(f?z1H4CM3KEM=`&Qi)nY3No32Kj+o;4BgfoKt5xeGb?SbKD|( z-xu*dnT&M#em-EQLry6`Ts`M?x?#7+i-1Vwu)^z%i9 z9ZG)0<+jc@4C}!jz-M-5Q*QwZe}Y%v68-#`+|<*oQ#^U#;qbuB8-P8){vQL2nyoHA zH;W5d8Vd^s2mQ*TBNi`!%8Y|^OutB&cbjw}SE8a1kcc#KlLlS;(AZ|7w(Kekh#;H} z50wWt=n0Kg!DCs2h&pTXkz}kB;%IHo7>hvFf6hacPINi($kvzCHg(CoKiu#AcBW=*NNl?qmOlbt5uLdkL|jFVvQUh-}b;{*R17u%8Ri z*${z(V*7x{av^H)o<|R8mD#%O=zIlrj5vaMKZ)yh(8jhKSij#PH*nKYoBhr83d`&ZU--i8AO7JVmh@V{{5|h^4^J(3+9Yu0jcl@kSnlyTf*T4fg!mWYgN#(!;>KEA`hH&>5pYTLi5{-PwYCoq4jIDE2@*mWrr#m@L({|+*3Sx;Gy@x%$rQo z+)9&c+i4vm57Ym#2>QHOoRfXurHnxk0)<>$X~DvRL}Wgvupo(0;xvIiQAfWpYuFox zIoq9rrsKomfeoVtqT5KsMIq@?%_OF2J6Z2OQwptQZ7-$41dZB>7sa)$u#nV`eBi`P zIv1Fkj`oEeUieC8pBBRHtjG_3H9^kRDKpzmvmlTV)AaKjBN*I$4Ak~ZU5(ZYYu=XJC> z$L8;R@pu1-M!lfp$f8~>^@`fTL;&QNZRyu&)25lsXn(2h2Pmw z?~IwTFJLBC=5T{%&<>s%uoR!yBR^IVz(x=FQPHZLMF`$`pTf`s+lo)Zk9MYFC!vls z)k#XR>jn5d*1=HKl$$*8;63ml`ajCEUF)cUuAWgmt0=I3aU}qY6D>Xrt2{0V9l+zU zVQoCdMgMURY6++GL*;?x(H-xs^P%)bupxzVrQTilY7B*>EC5-cLxZr=PNHEcTiXdV zWq})uSgO9|Qx^H5L!`vH@Kgp|F*INRWJ1uEIQ67mEW|@LbP)=?USKF-$vj*O47i=6 zwj0TkXYUIFHiZq5D;GZ^-5e+*p_JeDV=uqnXT?{dOZ&;E-2=asiy$eKV=icIY7Z}| z!yo{=?6r=HI*$o1TU_jUIQzf+Yg-2PFS5PNrB>080VQ8Wc>Hl)N)fLD9Dm{|1C>WQ z^WVyxoMJJzr#;YtTy5K2Ked;lM5kPAbo*N7@7Ksz+Myq_6P+oxwkWqi4`* zbP-_X^2;yh5z7@l>d(%bbFQ+f^F_UhXSTe&d{7qx^xSbbJ8H|;^XXT5Z@<06&m%k` zGy1kt3<3vN4#lHA&;$2L#0|m&g*&SA?|$do*Yw?g9{u0RqyJH&{wiz~qWYBaW)unt zwqRAEiB0Kv0Bl4+Yu~g(CnV&-X@DhL=^~>8J|2XUw@$}^>nY4kjuFtNM*_zxjBer9 zV_d|Rsd#`NWJHOe5zOTs$eS{y6%?Q0kG2xXkNntX+ccz8m^|>Xdf-9y|FBClPLGS8 z=*PsLyP7OAXwY@RmL-YB3o!jxo&|**bejbo!+2jfUm#)vJ(M0$UEAmPMQlqO=S2zsk)1W?s`b>kX;t_QI1F_u0K*nb(Rq>{9@mL<2MfCOZ$6#l&LW?eD(m& z|Dj54!lJ65qzWBX54IDEdBCGQP5;NQg(_)vY}-#&Qn5Y0?f$V+h`c(j)0{8>X%_&wp|Hn6;r%}b=@%00p|5NUN@rr--gSzX# z%#BGsg}kDD0pckDE(owUS$esP&zQ4!8GD(rZ&_1Mm4-Ep>8JR}dtlt>j=TkraE(o; zXy1*Q>oFPfQ9nF#qeuQ@$4xf=0pXhmj_hSIMyl8$r{^-6);Nln&f}s`qODoXsJPK8+&vV+%zrt9@7m2 za{a43tzia^V2jFY(noUKxOU(MyRT_p1H3bCbIwokNtb!0^Q&jfFDj*Jwj!dn$W=2)=8UQMON@ouArfi3MI-6K2xgD zgf3+VeQA&>Tnk}iU^?4Aa=BdZ)}I$E+KQ=|nrMqSG%iWn_EnjjkXgY$5YqDn64Sv4 zO({oHoQf(kN+fzuu>1Z1?)Ve-4nL`w>W3M~G_& zIi((BxxQ=Xu4ikGJpa;{zO+QFo0BGGbHL882w({}FnI+)w7d==wbhHPF~~O_hhqvy z(gU^Pj-=8_*U$rOiovgio_F4Pk=N(_=6dg+_q0~D*yjpc)EO55v^T&;#dN|AXFTdL zFDxS&R{?d}QV%X&i*)3hj*KpKY&x{4wB#6dLoe=7Ci#$S=YQ`0uid-dS z)jF+Bx5a7UgR};tHXnu50cg)(D0)B)s6L;LV`SLhmeBOSJA5g+wed}p67@>9?)LQJs90}q1- z-1iUH?%Y<#{U3PX;`~si5_K_>hQ>kw7=r~QO2@>M#R~Ak2DRnazEk>2;H1fRWS(OQ zEyA!Veh59#_`Wof*5#2FyoI5hd~H*Ql#8~Ji|KZO4Xqcxj%hd9PK2}ISm4r@XiT)1 z5?e`K^a>emEyzS);sp`1t+PefcH06;V}t%}(l~|$nBnBx(9W|CHJQ|BN-2oG(O-B7 z8wCrWKo)q#;S=KYQ_uke&#&!Z$`Oz;E*~zm8-u7hxGe6UWtBNBrai)p zFY5o)1O7HS z^(t~~_IKr#SI+nx;733D(fBkVdzkSW0ADlXiDvcyK-PG@18fRM-UFqZ9(l!+#`FN4 z%U=Kh^4;J4-E%!I6QBO0vz&S6nX&O7or=Z(($W%rxzl6+op$4lPWhbYJ#X*UZQGy4 z)iif{X!_1uJ8%vJ>fF$kPEMzeFbX+GbPO1wEXRWG&p+@!#I8w*jsMEvnx)Bc z8)KZ$bmlzPlk*QefqdXi6wrbwX;78U_!6g2z}EAe&v%7F@+BbYdYU-#Rf=MR@?$d~ z8N=F&P0dg#RR{ytRQ@V{$Q8!$g!ac?c9uUd(OAUm6LO=c=bTdZK>D!vH2Lb+;ybX0 zMJzzlHIr=%oZ`s?N5}(ilc=ldd+7hs%44uAqn%DVxu7a{AY;K)rWufw1xrjso5hPx zWEz|Dg6w#lNjnmkeWV}9`d)T~9P|iOLtVAw6)qU&MR0F4bLJS?4p37n>E*4}JOVr>Z~flZ`H;3nCCSL0`*&A4+);E}mM3qA&U(xDsqL z*_yt${@)VY$8w{1|aUe}VV ztLB5U5SFOgT5!i|j=I%fS26t&jNkf}H&<=6sGK*3Cn8N1Fw{ns<|6+-&;Rj|(}w*2V)-d26G3 z(n@E-3tSCjXH3%i#9wUw$14ClGIR6IH_tD;@WSrutFK<-(f{m#E3-4sID@Nib3GZb zbpH8IyAWP=?HG?Va7k8tyORN5Jyfszhb9kYK^x;SoiP^s;y}0u4K4~WNFWE;$3OOW z-6yZU3c#9#llGiOq2lLKI0o9|D0~>+*qI}pq3}go2V%p`5cyuX!F2!yz=_i*=St8d zd}8(KH)8IBC|Dn{(}5`Y0USH@n`r`N+As|m2m#3ltO#k-1r&JmQ|E^Zi+E$=A{Mxe zCp`@wi@k`C>?bIkKb+Ttwjjq7ip3fx=;VQi#{+G@i8y z-7NAVc;RP)W|3-|h}#oPn}!cj=2L9GSm3tpD|BcY=V*xr`|A(rj4Eqcy4cBcI zoaG?YWg#|;%M5-HDuJMqOSYX;9e4cR0r`>4@D#vb|K(p`k*WgA@)O@#R+kcs^3|>T zI{$~GRB!O^I_|g^=?P@kB86`>4$1fb_1TS;+i$;prl$awPCanOi|EjF=JHdg%6_FqeI(+95d#9MwIGfWp$-sX z59byA0+(^7LB8{CYq#@18~<(DvNcN7jutWSVs9xcc82pJ&J^_Rpx^UAoxw6aog~ls z!f?}Z6@?DNk2Ey+sSV^kP@2{-e4h5S9IMjbKSRG!?gKr z2Qe_`O+7BV;g9S%y~mNhxG0SMSZSbN%u-3F#N>g8+XHTbZl{Oq|E7z95Th0h2(cI` zaMH2ZA&xVRcr-``O^lkQ`CG6QXEH4@*xicJ)Ha4s7U&Q7ba==-(EB^jEI!{DP94>H zQX07P)d&`!UYr`(EPes??Zyjl0iiLSV>P;LKZ%b8txvoNB1l~>d@~z>u%RFofe)HO z(xzikO(AMqRl1!2$7Lh$G7}Hd#g}tNx4-At+rUgrJCespw58MBRXl=%Z zI{%UHGvAj7;k`_!5+B5)1F|gNvWS6sE>C{zwxic{L%=`yuWu_>Wz%Aj{b1++l*@se zgDUUQul}*0I$vv&C2a&a=aYcob;ELnwF<8+^ArGI1K7E9=gQNc{&b#hW@Gc9V{X*? z%(AEW$a)~&+c>f+CvC+8+;Fd*fF}Ux99${Wh8eMgrtbVNsRPBZsz?7$?wM_Q5r)xMPny*;Zp!q$x?1M&*dd8x#Y`DPey{qBS~8o)8z7oZ$o6y{lRg zk)}fGIUD|BLkn{{&xu@ZMPRRs^jJmO!O@sfRvTFOdn{5i^d#v4peZT!k~gNO1=?yG z+LtF!b6H*=52;huBmHRKhSy_~C`g%njO)#L*THl`e5ALYBVYa;Bl*06C(OBCZC{(EwphfL3qjFd>WQ*%Ah|%43b z+pXH9`=88y#Nv-$`M2FIU%k28e)Nv0+uq3D;xhkLbno+je3Qd-mX9?7;hZO)`=ZU8 zH~$6ekn66yj7|!;+7BRvu-*`zL_weo<6 zjJ4ALNY<-$>#WnlzxDv`_$%MN<~6Tb`MbaSyF=RXe}(UAsuOj5VuPz|JaWTR0NQke zJpneH^G)Ynki$@R%Ius~B>v^WHD7Nn{?AELL2#DN?4Lv*8lgXYxnN|?%gMJ z8#m?ma)+nbEOibbDo6|@IY19jx6q|;dao$Ypr*fsInHtieX<0=Np}{l>*N7Ab_vuw47kG(R6+rMMFDL;AOVe!C&>i@-}aU*UGZ3fG_7%)BtNR5sx zZesk-aSw6sKaN`!iO(_HY13Ks6hCwx=x-oUFTLMe4Ou@v|0Z3IWh@>t<-7OM4qE0s zab`Qvf;I74%$LXZ^F*pP(w{`d?FFuqg`YT|cPzq33+pPcpj$hl4I0jDsa!+|kkZBn zPm6;927q0$yRYW*Ov2n`y#6-HD=mY^74 z<{^Mte@fo3^MA13^C9#kiEXM3*rhrO-$EDX%Jfxw(cVn|nlF9bw?jN?dT3HYQo9Zk zK7?hxWXWs!lO*c1Bu7!Jskh5gEN6o@1mwxpwF+HGkp6Mb1 zoByr+*`NJcJk_ilozWtZD>!!^?Y7W69gds_n(lezlunv@5705_2zvB?#+5R?_dkE% z``*WU{~Jst`26UjkJdgL^A*MFxVmbm-T!q#VEMGu&eZPz!_ZbL9a?!hCF6i%`kDsJ z?Cz1~KxfZ6SoB}RBYyuM|Doa|AK3VB=dmY*@o9AyBEFmasiB){qxS>^VV26IN%VDExw#d|PIpUL!8D`%>6~DaHeMHGS^Z18f+`yYB5< zQ{eY8y>U}KdEg=Uz=P=jeLJPqYIJKCT;(LhqN^^vfO+sN`0?V0@}=Bfx>L2!#Mq^N zrkKE36yud;2Xs0-R32cikfRy?4o?rpDA!M7lA_c|n!v=Od6!-N;a;l?kH)J{a%-t6s>G`)Gdz zW6&Yr)XkZb_G?=qMz8$T})=wpsuDCc**s(b*ydUTP zaXAOJ6uI}g|5NtTpHprx-6{8XV!Y@)X?$-FyNp>M&LtjL(vr{Lm=2D>g+0~|l)(8t zHCaD)L)FSf!miyXuGwb+|MdOu4Qp|gR@kKP*ZjXU1K2`N9-@@7R-m+cg5~HZJn6}g z)7;WGCS#q#O-j9@Jo}V31LPF}y%G?ufmfYb@ask=`EWbypE5UHR1J;pDfw`CpmfuR zL-Zu`a30XWL1V8CzI2En=Y5&0uDWVPuK^r7>7$Ul#y&8vMUPP&K~ZmkFyleDXPr_H!UH+4 zNS|}eQ7hv-0_pSQ64J+7EhLQ=q_HSC!mdMu@3TFXFw>Eo~-*acJ}Atw`zT z`A0&?QcPCA3RkwjKvjsWtCc4^f~VlJe63IVmMD>fc1xb|9%}n9VXf|fq%W#|8Gvud zN1S$t9ptgE+LioiV=rr1wuJivLhA!+DlK%)0m+)ozPRZ8KP+?DSXAHd{!ba@oCnkY zJ!W7+THclgXx0}xN(zM_N?9Wrypal`q)eK`BgZH_;Q3asEh*;9%iS@%*5)aI+w}Uu zUw`B>8C>ntovFjm|5XONJ_=b~R6OO9OI~q^yd3P;!jb-*Zt50C!S zDc<$2cSQ%%r!?k#{!j1KbUaFTBkY}2$KC&9^&S;ggzW>X7}h9p6N>3& zG^r<&q!JQGc;Z;uI1%Ke(gRQtQz=|m05nyNbFO6;KQ=J5=R%)zGa)YuIGuK9&Qda$ zb{m#faB^uwN{2?NT9&lGm)vt@+4?dDO=)waLuV*Jk8_Sekapg2frp$H27C(C242Zp za9s#e{O+1f|Mze_H>~Z+my-vMlm{M6|EIO<$AV-O;;a%2mDM-~&0L(6g%u;E`iRHd zwlAQeKL@yHp$rV6wLc-#@uBrVdfMljUUn{pTo1q#(o-BJ#mv(S+m-|vKSF6Xb-`O< zLWm?5ve0-j3_fI%7zOBx*uaFIr0EyJMd5 z*o*3bx8+Gd9PN)Nqs!tr%2zUttduW!wY%sf4|&jHmFv(kDziMKdVERO^FQ?sU858d zh5Ob2u}5Y+nEvllv?D}XQmilag}F(qgyvCB6Su)710FcWr$S&Jva9)kCD-mV?{f8~o;N&y#^#u09@002M$NklNlOK@|6fX|#0^fiEp%eX&wW8kL4!|MSL9}lmV zN%|@eltv#D8zZ&JACJdyF`(nB8CTT!vH0iR8Xo`G1%bJC{^z}#*(v)@dm&5zw)3(m zMRpzQJYq>nUddO2Z}O_c!v{s5X)h(3W_T(LUmFz?ZF3JyE!faY z>Qm6QWx?i@0mgJdNSiX@#A!sr=c)ZlPPhchX($T zt5WGd%k9!9^DqZd3-P&IuyBlcJYfjA$S=PXm-x_KjHis|aSXmKyLhYp)t{m%B0@C0 zk$z3<=c+qZAVcQo~V%~+)C&i^6hmla1|Lgoh! zoV|O?QCpwF$vMYOE%eltNL4NBN1D#_(AJ@QgUIoVlHa3_80fg>qFWhxT|TJ$& z>5pPlk=;`WK4eSObS!?e|5_)dN2!~r-)Pramry08y*@c|^1#FIfoO-N9vBI#SdAkVw8|7%AUG%= zc;I7PB`S$lhtn;OWpQE#Z=Hp`USI%DfTr?O(y=$(B1`P^GCnGOh5nXUU?DXR))BTy zvNu4iBvCMfF58SxR6b`Ag-}-p1 zo&w-CfIoWIJHqf7HnCpD-`Dv+jM4Xd7Xr~w7Y-!Qt?|sqJnmV#QMs&}lgsk&On3cP z_*z+cdO1AB69BAfc+y!H17@su2*@EQ8S!*DvL0Y~n8F%(ptd zR=E4mg+ojaMYJb)30=_9hBk) zT;rcREim(wCb+ZnL;wwg_y5--?A&#N)J8#4y^PP{K}Q*#X%#WXj?4w2lBSFTH^v8P zoj{vMCHbaNF1J z$~uv+((74g*&Y*;HCUQ&Wlta1?39>1a0EQyHi|0J_ox4RoC;1(EM8!=Cm9c#C?K@B zgp{KQIY|-9_*XJv)4fd)?+u@_rsD(gz} zr{SWFMJhbwc2VTS0+LxuyVy0Z#PzZH7T&b0!Qy$W$BW@sRx4*wdZ8`-$1@-{Oj`5dpVL9!&qo=aQ46nD1mB9RVBENuHzY*kS!)P}0W&RU-6np^71_v!E6c zgej&!|Ie4_YxYHe%RllVEDw{pz|y)uToKqjjOYIWox7!l2PDT%iuFchckkZ)t zD|$M)+p}j+)H)jhiePrlHP_6pzWVB!)-5Y~{D1lK%P)^to?-DG0HG_qS5i}SL_EN^ z8>et&J)nNlcP2945JR8Sn0?>_ADC&Qzi!8l9b7T%ba6m^D0>~9NrCL_l+#X&PKW6d z7b6l>h}O1#x<;3UN>&Y40WYIg3}+hZ#UOdL^ze{7DEXiJ%(dMoufD3{j#PrX|68|i zm%3sMiaiDab0MoiS+*FKD2woU5=#-mu0!}C%9;35e9w(wbFEW^EU>OYKj%2&2X$MI!63X})CS)fGsqRaqMIn-KYI)Y-oRH|uWx%Ky*an+98U zUFTuv-uHSy&p>R=!GTMpXDFA5CWNWx1=wJo$`kAKwp&$bP} z+=Ms9&Wp}}_W@POqkbfv{``kb6N^IYo3dWmLd&`CWPiGwq5)J#J(;vVp-vEzzf<=9 z2Axv&nQA#M&N_TP?tg!{J9+XsgSI8-clald9qaZVJcusxaY1?v=QjHO@2QM7R)~Dg zP_ZoD%F60R*IoZh7k}oHAHNm%`=8=H|77xjpY@fM6+W|UfnWVQT;a@~Zb2Tm z+Z+K-(J5_X1hiMUzdh+8_cohz=TP`cEFnF$Sz+)}4C% zVOOSnioljdVC~`iLpR4DC$)xTjL*}V|ATdA**A&urTzsESb*cnZmr+&sLh95BjqI5 zGfp9{w^8VQ2aUd*c%;AIHJH^<@LlhI$}IQx5^;lQYS~>ozbc7c0N{ zU;oqB?O0j8kaIRCppHQ~p<{CTb#*aOO(UN6bMjMGlRTFJm3@%- znQ>yXy@9`41b2+vF+IkB&vB5 zidFU*6J-!%b>Y)b1#Q|+5!k{AoO*`i3bq& z_Maq%fa)y<87nRBBnIP&V|h}9y8W@eYTGpCrk4{LVw;Z2pj~3-#%*w(f=0wEQc5R1J9#^Eb5Dw?Rlq<$# zGw2QJ3TE}2x}rB^M0VpKzvXRe%6a?HC~}J@b>1gZf$jK`||I9_uCOywDfep z|EsBNcQhpBBU(Y@cwif1bMVkvzks-|@Rxo*{h!Y(!|}@;&oSeZ|JSa&?mB+-ma{K@ z@rx@w`2Wy{KD7AAM?SLPZ2+OrrtJzYSey`>*Y+u{8_!M)W_{1mXoCJLJ z9}fB#c;(;X)?06#^Zpr5CQPISt_+xC679sB0OpXNUwYYP*T#C!1uYWw;y(%45ywJ> z+38u@V`HLOlKT|O3a6Y;|9>Se|3CB0Blz`yw;ZE4@>uPPW^j?v4oI#>dsKJRNY8eJ zlBT7#k94;+4P=PO$PYoX1cGb^>-dxTg;{*Ch*$C#pNKn2?4O=5PF(s_P_4q4AYS)B@L-Ur z*PjN;!q}(g&zLb5MBP}kEaE)r$DYh90N~e4+5bzN{f^J^Cy(1oAIFiMILR?`s$lMa z5b>bCA94Oi?4dww1sbEVN4H!^n#VC&9IJvP1{I@89#kkt70o{a>NhMgNerDTaTELh zmDSa5|NaAwx?P1I-u#2^I9?&{ggzcLVf_6+nD{1wcB;t=h{iZX6|Ed63}4W9pRxPu z*Zt&A9>6949d2RXfs+6$kk=2G&pr3t3LXMD=ZCjBUwrY!YkU>phd=yb{`x=T525K0 zt9EnBw;=+f*|-fBU&SUkAw0mD^K-!k7cBT>OdRwt@Zi5WCX4z6^fjJ6A^37=I{1ulpOGCM*u8+lAR()i2uD|Pw*fkTJo zv>F26_}5m_*0%K3?z;(Yi-M3%Bb0$)?ho-1C=^JJevo*@5T_3|8O%o>e@rsm_>%tk zr5~O`R+msDkHS8e8JJo3=wpwDeDyJPi$Qxxne`R>%f2JG0%%u_1DyUdQKxcw5qQf0 zV|K$+KNES8sTw5ml5c9!^{wN18L@e<;{0O|e?LN%ajc<;dB?!v!uc}o?a%2Nb3Jpw1b{l(DvGUh+W@(*vh_4It>mwg|6m2V#3_~y5}=T4sNb#NMJ zTGWZe`4MzY6I5d@6i}=aPaN-#-EptV(`IubaQ|0t3Pp8|@(zSuqH^?;_CqX!HrP+0 zjxYXkrHI`s{cn=0-S@f)QoON{HztK3+R>&}gZ?9Dgd!Y@`@uH%c8 z$7bZQKkmn6)EPj2m@!CQ_wYkYPKwYsw@qNyT|jPsOml8Xts86JlKe5;AO7eg{$3)t z?4{7X??pJ9>v_nwJbUul?zTJbD4-=p`r|&VezLvz|Jv8S5kd@;!WVH0Vj5+Z{PFx3 zL*p^AAt+rOlhhfh6+kOxGFc^!Hn`E+s7f+PcAXewlT8*rBdswfp!cjJ=Tm6g)5kvg zC$f1u-~ZWw7}q?w?_Je*UeytKF(M}xSL_^k$2;HsdOn~WS1MDU$1E*S=bwLmho}Fq z@d4*}&e(~ z#CZAFlXC@^kg%RlBDr$;4AU;e?9zfAI^@-bu>+_W2L#AMKB79ehb^85e3D-H0J^n z4}$Dqe}r;lyTJIh4~wkxEccV$iKpW-Q}0`SX}{c{P9(;$|Mfo}8u;9^&vlPI{&)bq zC4T%#k|4CJl>TN_eMvg~wa*z8?XU|@2AUozQ`6jjQfwu-j7KPCJEDv_Nd_X99nk*g zAATytrfv6c?!Xgw87F>X(=x@5@guLqk;s-1Z;ed=j(_|Q8+j^B5!mbq@c#d&zVUgf z^>7Rup7R`vE^}OhYanvZf70%|@BZ$4-}}LO7hmYxg%?mr{nh8c0QG5ucG3{-M=_1l ze(|CCBpJ$e-7Wv=vr(9~n-YOr{`9X>kAt6mqAtnKU_UvDJ`zdTXFnI?P2AG|7Hzo? z5_Q1XsKbIWLuy~+LFL$n>&|=hu;g*e93S0|khI4hJJx;g`#;doqfqQ0Q7GZjxNRZ9 z_b#G2muj3Ka_@cj#k{dSDwJ;{2U$&D2vITw`G&Vk7(333y}$hI=h~DC7`+YWPj~+N zyVj>aIhuRL&e(-P-=HtQ_O)-tRRl5}1LjAW|FT0J_}DLhe@T>ovzx==Pjc?>t z&b;)W4+WG1wO^dDe>$|9jJ$-lSQ{Gh_VV@|hVf zhva)SJA7t%0N?_*11xw}4HIhdoB#NqyqS}ax*~c}j!6oRCZy+2BZf%nuE* zC4JUCiA#lEiOc^F^4EVQ_z|vfMFNG6C(C@0)B-lB@>mvwqFJC!Vj9UfFC&encsUGYo?dEzg+r@#M=?wLQ2v-adpX^OyRMPTij4Dpi%x$KmG}v;2d2V?SmBSU6TLBU;HJ09mcIy zvIje|i3;;H+r)^eX&ryjJ@~y_yW2kQgVqY3$}cqn-~WF;)tz{vKIcW9RMeDy!kX9b zw*Voueo(#r_S?HJeCf+Yeo1koZ=^b`DEN(VhP>Db0^`Ox^?KYg$49p#Ab$qWsrZ9G z_~Ve!K9@xdLbkKzEF*br5=TDj{nrZ+$VaAm^XO^J8~a4vqa^=GTXxdJ*cz|Y#lDD> z8R?+0teS-Ubml+X!`nRm^w0j>TKYKll%*wJh497C;{cTbQe0#-%2k3s)kJJf`kn&< z=!AMaYONwcbQG*7X<;apDQgOZjrFnUq|K^>WqeH9@Vge}pqjV3Zg;x>-g|L^h2xA3 zY@QZ3NY}c~LR;T?>_A55EV9lfN(o{M0#6dmx`SsPelvc+T;*E;@Eo%Re!yJdw&exh z0-zr?aaD77-F4UTYM>c@{g)!Y1;G0g=Alz&rp*>dpe_qrY-&>P2zapL?APq_%P(L1 z+~+-TDb$(NuyhbqqQR8Y9@StWVN~$pPeXWGr}} z#V^i(fzO6%qXS*iE3cL}RQ4i_W#4``(94rsfAH@=qN@O-{n>U^V25#P`(oO4Pb@$CKw9>7VJ zKkA;uEh0*ci<4vKI`c|HdEM|#jG_;|PF}FWPn9K(Nwied`j3Kngli0P=`3{?MQr-1 z49T%%*>+jZbkAZhSz7T;8K6R9)p+A z;0zi+E1X!r`o7=%XE@7tVXRLvXNGn(soT^X@;H5im6JE?u_$2jE&k}=|6j9v@DRZ5 zOnflPnTO9^Z_=$`p5?Ycu%7E}6EvQLT5f=(Q_g(raGiOjvEHwA>OUUT^9jDs<4S;C zJ9p_7FF+{?j?$@9Yr41Y?tAX(o;mSMZ;vSJw4FvvQ2=|v;J z2mT$q<*x3=-~Hq6p_^`vm?HlCa$lD#4u@8+ai;~>ZH@KO__+taM&5q=9o>Qb`#b)~ z@uG=`2qPUYDswu3)6jY1#IxP!@ay!)|MbsvkgB!0w#n^vUhR@rKjw*sP1>*X=HP(? zeD0HxFP@)98>*7qZo9Ml|33DgyYGDGyOlgFkLTRj2K{GhxeGzN=k9yEZ{fKf_zv5h zcixikb%60|iog2Y7rKvq?BhBKLUm1_D!Cc^QcN`w(oA>R^{UHd@-}J{=_#wM>Zx+3 zCth=;>UY_B!Ow7|#tE#)&*AM0+nM(6-P67K+IPuhh814*jl$S2t+!|4czh=r1kEin zF!EDtpZn(5ZoFeYpP#~k{sPYgSn!pAWL|jTg=@T;8CL~#cieHu;*v`)>G0e$UfDeV z%2&R!#@C|r76Bd~O=)`~u)Gtu$M&nr3eSjf65%9(V$K{-|L<d-p2pd;ibh|C5{62aYOq84k?&;&Y;cUh!>bUWujr-~QG= zz=7){g|hX<3og2>JH*SP2I~v#DpJU`ETPhz2ccr!Oy_htWqFXS#p^WjL%nH}`k1t8 zrlOMV#+wUvVrR#vywWkg&IWzeom%7*|3yugs*k3puVdT1w69%$2dvw~BC%{2+b25x zp?|D1jqC(*$yPdGN3v9lc-fG3tjmj?B`Qg}eDC3I?+Ok8uus{$va36=x@&;s4-)!b zN8L!=^>E}eC(lh`uHBMQ>o=CEoJw<(*hA&%T?Na`P#$#pM4yc`}2(u zOA_s57YzEqbmv91^<$w$7Xa-3BoD#Zan1$ZeAgZ!SI;~RWe5NWFl-Q2x<9fxqybJ@H2aRCilYANYVI9mzdMKiJyFC>< zE{AO0juExqEXf8rBgsZjDb%%gscI&3q*|q#K}t)&JpbrJ-P*Iybc+*D$3g!9mlecD z>rBRIFb>9cS{;QtE|=*A?eO8l9lii|2M)vm%|j18qF+#-#fgGJJScAhauw4=tV^V9 zknB@sS6Y_$orgEf?8X`dRlCnRfT4nRT5GbxNI z=QYIZ8SR)BXs>lxabc|5AdVfa^*zB}C%kS_U+4~b>vV2gRWHjmop_8_rs0;O$Din) zJ%%#vLT}3}_%zEFU#f!vl7T)ua`;HMbJq@OKX73G238zp=NrIAJkWd+ZQ_Xr&b>i`&s#PBX@@_M96oYZw-fp9-8=O<$Vc$Tk0lc=bGQxQ6mDledGzSf=kep_ z8h-TD@`J0LpXU|NxDA@O1gzoVfV1nbzkUr@1@Iurz2SVFwTZBK5%}BvGu`IJ>1Aum zfz9dP5+?x8j*)iiwXc2c{2Sl+1|OJ#6NK{xUi&xWnc(~Hzkh}=Qu9Y1d1U3k{~!Lx zw|KHL#{=xNjO7ZZ_0q~?qGG8+p@C4qJZ(Ne$KVUbefQk8?Faw#ckdqT^vBaZ7fQFM zZwP?K8sj>_ZXIbTv&HLD@|qq3209`x*oJ7TXb0q0N&SHEy})`mFzHoKNNbDBIU?4T z&;DQsRa%p&2V@}HCi#iim&0n4x|oEm4AYQTTf(Isi^8W!$gR&ZEq5WI;|!v=KJ@}8 zk!WJ9qSE980K|ZyahX*6U3nvY?l0zq z6FNxCWS7w>w2bZsZRATeXa{Ouomr;eeAr=pZO#o5jTOr}Z*nNuH`6j7ueBo606TVB zTBh5$Dl*0qLmD?#w`d@bWkJvyne;aPs=Q@d?gH&BN$C^zSz_V`-(doO-PgR7AuxQ1 zIYEb)#;$2Bf)d82x|ikS_m?NG-*Hcq9u$`Kht-dAswGLu1ru$*$gnF6vzYTR_@z8|gHidV!T1%Y=pqKpm5$17BYe zc<;UU1={*7D{K<2cZ^}(Ne-Y=bMu&wWe2=6|BXey(f+>|g)#d^Vky6r{XY-V@4XL` zCgl~AaocQkSv!QqrpCI;S6LX@s`*bd&*J1m>(gSlx#Jj-kmaqI|JH362C*@*&i}Dr z_7C|CU!lovZE(Rd*5@4jHh&Xy@ZgbcKLNlW_U^y;uI~H`FP3L*9a(qq&jyVfqgjmz zvF%=)Jx_F;p(q?Wc;;Ji(s$0w{BiuUz_0!~mcgygdcGNscTV9)&KXVy;K7eyo8d$O zUlDkUZ$pDW*u{q37y}OAly6l8c*<}}+YkW^Y~BLEcU~^=@IU?ff99EI&hgYty#e5+ zn{Jx%>Hl9cC3G#H{6I(>DD=dv})nEVk-b;-%~(+-h@Ym5teOi<7WhIRr~6k43(=B4IMnP zh{?Q)iq=F2oKOOus7qL6n5>;1^)y`}&bl$24<1V%kFC8$PSd8;rKu?i8-uu3?6^Fx zr(0v46;@3(cmM&GFH9%SSn12UX~x-(G2^`9MvO|g z&JmBJeEqJwd3ob4Dh&KqvTsPwU&5w!Zz zpsfI~eNVZ+jq`tHb*1BX-|bF+`RPAz;U9nh?|tbzz$L7y`mKtCh+Q4s#S@m2YQ2Z6 ztghizU%0hr1^uSu800+o=WWh2{=kXL|7XAVd%riskDlFw4?ei|sZV`s?RBqvosN&F zEss~Ec-m}j1f~-JTN~ej_I%sgCB&XV`rmAnG6DL{%{8KEjJr zX|_{o1dZzw?CGsLjYBR~*5}-E&W(4yZH@F5%el1YXliK0Zs^JF>0nh$f9oY^Czx z5k<^7W$Uy}8TAGa+*f8R```Pkzwr|ow|WI2Utx}4{H?m<2~CA9i$H$_xMe0L#f*RtT*nW%;2Qw&OaCbx;PXlV z9IUU+_V3?6=cM85GAN6)X>&eB{)`=at{JU+oQv9r#zDR(Htm6-iB1~t@g_18PXcf^ zn>1b82HHLM+-=0R<$Lzz18>w4m>sV!tXE#vO&Z|cM&}K*q&XY$EK3oWiDj9&kuC97=Qb%fpxVV2mg@erHFt;cyY@FIoOKNtrT zA-(EiJ+W@H+D$A|#aqs~VVZL5Gm&*9 z^|u95XPeo;O!HqsQmoo0W7p~|)EEvJBc6AP6ri4Eaz%eB_F&75?F_*^*Ld@to8BX1 zJdjTwKGXb192~E4z9fDvlpFD^gFu&wWtq9M0#!PVyN;Yy z`7)izU2uB*vZUd|aN$*R~J>S+Q97uaFFF_sm2b%mSGFw0_LisXK(bd{Ij2bc}`jqHMR3y=K- z-;lbq_Bf!J`ITmM$_b#}25iG<02^a0J9eq*F=M2ga>W$NQS&$$7`1OCTHmNFvK4NW z7p1mWNPQ8?tfDXUY?T@Swc0k&S(QJ?4RhWYQW6_u3rT_=SCX}YrQnn#hM&Z!jTK+Z z6tPa0m!zeAu>>a)bhVhChMk5@eYPc+s$WI#H2+($hP|K|1!{1_SHCsSpjp6Z#d&E&E(;^X3V-< zZ@qPntDP5be)F4o>3@eO|BH`b{~>bJ5Ed}) zauTA<37gL*=7ba@REW;WNg6*&toJ7iK$_kBeViHG=Co_~-l4_xFIJQxtM?uBL0hsu zf{&~I!b$pQZELX{*jNIjT=R`S6h+=?ImFJ15v&oYxKBkzGhdM+(z4OF?|7LW;N_UJG#C-PK;oU z0J)Niiq@nGb^jI-6=l!Bs$`?`NI`{-Sc9r?X~%7}?H1D)P-a%c4zweTZiDHl6FbfS z2#jLwATmZEvnnpj$*Z^ukMTF4IMRdh+Y?KPMye>vwOWvUQJ5ZB@$$JLQ5zCkT{2aW zG8N16xZdIqhV^#zHQ@>ApBq$+zOBBkWAut%|^O0${5myF@SFbD0BuhSy&R zfy?{XzV)qd>FNKtFJ^)IjIaO0)Bigh{Lk<}4ZW%1+#}~)9WxY@ga7#Svm<`xk4yf& z)W#&vD*&)&+zXwV?mA*l-m|&}ghwDM%(JL+# zEtR5pBd~NQILaddE2?DLtcfv4y^(>X5Ag>EWgD{yibimul_J^p&$-yCEBGS;RJBM} zodCM$3%V7nZkAJh+oQe|w%`kg0eC|GT+Yy1$}YT1~nn1%Y-6oy=J-T1p?c>J>x5%Wznq!b+v9#&o+}raN(gg&Hv#JKrzaZ!|<$2 z{pg9fF6)ymN_+`qlj`8%z3qiJ5eAG$xh;gGk+DAC|>~ z=#A*)wV~-rQ2ZU}Cm3nm)SwP+O!GgY!dNke3T=t2V>VdpM}Zy3zSg5W5@n(J^#)kl6kn8i& zkA8Ia{`bHC6knHt1O7RlhN-9j+lQk^kMeAorWk1RGY_Bj7V>oI4kw)|oS5vw{*oQ= zH5Ww#C$9_uExH=6K&>v_5ieHgweIHcZSNHTJ9g~o_U`Q;4x$C0{^G+1#3!k-7zI;p z;*KSoiMkVEvC~<`3ni4}-$-TKvzs1^V5?!B>&v#sRWbe`j4ASL>**-XP@z2o*#(zG#_JSMlnxS;lOt~0lbO_zniXf)t@T?SNI)tKc} ztPCQ|Lmw)=ilP@}v62aa0+Z5IIWQ)_gblPYwB@n|HqvLD+vwc%UVf~>oXBmFD9Xks zsTR$gU%ZX4TF9pT<-8CkkAEYTVNmj^5dhk8n&!VF(T}YfXGW@zR$$F%pOELe^IqeU z(s%$3Ak+M3I6T)>Mu1x#v0L94g8-@`ys&|G$k{(GTWTYH#@V)W(|h@`26G~}MWQGh zpQKte^J)GgK#oZUdfNZ@>r0HNG9OG(*dlNqZ-u3z!|HKt{z{EZ+2{H}T#Vo*i3YGVpbOeAwR%?@pfc^?$eDe)}5F zoI!2{VzWJa_gu|Mi_3GQ$V*8-2{pGkL1l_LC#fc^CTj3`@J~NN9^Efq*WG*1T_kT? z+P(V>+4ADZoPVD2rdNmDX470Zwlu8&@(yAw#{HLm%G*xU#RGg{8Jp0|gL;)opJ&+u zCAS|W(U$u<>H*XVf+$L->~m9vQKh_i4J)_8kEB%@+oDXBGqmbsTdMY29=Q?XAX+Ew z=u_-SCIQvHE%b?WjhwSB=OcDg?e*+Pp5r6Zj>vYmI|A#ST%%=H29663qo3CUiahm@TE3SQ>dyG?G zi+SmYI+m_02eHX=?oac75S~_XkW4__7;FA9Ip)qub(wtpO3rNC62I#|`NZR}*MI-l z!M~0z^1wci3*;2b*+w33jGIf0c9r>KBz2v8{`uG7?PjYu0kDEAnRNvKo^Lk4_10VU zjI$eWyivCS+;Yn;-5cNd#>EXc+%V&t(XhtNd8M@MPMa-{fG#iJax1T11H2Jt(0V=t z0QdjTaJfG}YhV8Im*>wt_uK*>y$W#OzJ0nx28#mUn!uNbPV6Mx=)^~;|paa+@#eFq2j>VindxE{0+;TIvUty(3x$!CRd z!PS8}VlE8fz=>X#ty=d=Lp=LxY?pP@&9i)y4Y&GjGNR{0r$+%<)-(2vdZSg5hZ>h{ ztv3@T(D82{$6WhLdb5jirH^H5U3wXBN^{s~JclpZX2YsJ+fjSKZ+%e|ix*mZU#Kwk zNk^C|Qp<~DSoMVx1Aj`r%0;t`liLG@fKP ziPQWajITbb?4Eu+)RM0ET>3HPX!UE7 zDJ^~`AfM)c2}Ua-D)_JCtFch1^Ss8i(kp&k?)wVT)BN9(`M($6g`a%#iE-$+w0-m8v z%3qX78S;ZNjFBuU1}YiSa@!|?{xu&*ZLHG9(8t;q3R55HPL7N1m`4O@mXG$PoQ#P( z&{fo0eao$v1Y0+4oLk6r*TZ7pQuBL#MY)Aa9(bdJL7M0w2OoKkPaz0T5%Y`6b;Z;+ zpp(WSMbG0CZCHk78=ZpR`^&mhl!5KxW))N;sbFc^kUR*c4UxkdO*Fq$(RT%bOt+ru zW79J7(ebqpX3MV{dnlk@+ps?2q6LHY2Yo%Ba<<9xSRZLjZiB~sZFiIbLV7|Qnuf2ALw*$=Z3;-RN@EHIcbErGe&bK@!uSNsY6#!e@ z>$w5`dS!y!N%Po$=tGF5tBoZN42lc5H>01#!ZFwYcz-ORmzSWCfoY zCfovN?l4buR*vh9=-@3)ZGwV}GEW%rEL~pp-raHAtxLtWlE{0X7@NTk1_rrEdm**` zS^mP;>ahnA)->i3gBC`y6hM?Bk3i9;>}a75{Lp6jKn#=eD9Sg<%3AV-;wF1RW>|K6 zY#(`$L#GhKjcpF8!&+}Y(7o@`O6y2(2Eu`egA6iW3=_K7+aX<4D0JC=xLyt0C)sQ} z$O!6y2SE6kd5)2a38`Lt&s*PbZl8TKcHkrZ(HE7T+LxBu*_b9d+%Cev(soVNHd|NQ z5!l#PdXrCO)Xzlep@xQ3e;7l&d>UBmtw&eX@epPEQ*Dg>vfi58uDu~IQfShgPhY0_ z?+UaVeKE{NcA5?-bUCnno%)^Z6YK2vNa5Xp z2S)gq`859{R2eeIm@%ty%YZ7Y7?$}r#=1Vu{}_XgS;TSuenf*3OvloA$1&t`HX*D0 zq=JSq%?)!ajB49%L~nqU4gG<(Ezcb5u-&0--v-iO46~6P(q(6w|24eocV30cz-CuB ze%~(<^%!}$1z^`+JqO_A$>$n&s|)o884Rk^#2DQc%b8l&j8rJf4}bk zPnj8B|EFgFoPG9rdH^8lO(7L{(v9e3)vE#x7_uO?SM7A&O-yaYE;{~$Jj>ksp;wQlnEb0e{ig$_j#<_ZLPhP zisWn6b3< z*$Ga+H74}+bk>=yn>f*e96-1go+XlPnC8FwOYxlMzs8BjQjU@sN2v5;2jeVb6#|N$ zigi4xTw?06E8qqjVwjAzFUn(KYm7p9MM<7~@(x7WU~&a&{FJE&I~ z*WCv4Op{DVYHLjB4vSF^4!2cz?^B>cpQ*hcVYA0TNuS^h{fPu5+wdxw|MS)Pwm%1e z-}xPD9;Vd!!sBoELd)Zrq3^DCC2=5h6>`e)%7WGTeE(a2=I>mDx0tQ)N@l#(Y<2J6 zy*#*=ZXEQl^2bk}1mME}sf7XrnHF>m`(s}Vlc<5xW!pMhX4RT z07*naRCwh_r?K#mixzL3@mkz{_uY%jFTZ?^ul>VGfEk{Yxw!Dc3ukzD<_uQ=@D+eF zoH6U>tE+ffXkM<9Mzk)nj7c}1A*f?U>x3HlnA}k&&NEvW-v5KN-46iVu@hG}USz3+ed*o#+}J!Vx%vHU9PyW5L@zHx1JPjevm&%GzpUFw!yme z>C1+DpqDh>6xK(Y&1xL$CZnQRCXek3`p}-`jH4alv2`-W^<}x`t1Qd*JLp46+X}zZ zZs{irH{Hpz4d%vF&DKYnFnv=p27$JowzDg^s*mN+$*o(|BS@33jB)6-Or2xI_3@Q& zsb-@x*`Y6-3lG8vttHYJN*JETFK$x4R0Uqv)apYOuzmBLQ&Get{mHucX^^q?UzKCI z(nF8+MVsxjc>}#Et;Xc0;#?++3ukuuuqy~How+oIp>%{WkY0M*kn*R|U#i|dKONyamPGZGHJY)RF zaF4Ow`fi&48oxDe)BKO2#ZjaAmxD!PY})@TCOdY!paV1>`N$P3ctFk_b$<0BlKEn^Mk=c7F?>bosvby|3c~ zFD|*{k~toF(cv{10^^>TIiHe=ga0`u3g4f}S7hLwnmchjz@Doy#oA=ZIo0a6CSx?n zi4Cp~{LQZdVngT6-}{c)+m`ReyHD$mfQJ1=&FhNz_%h)yh^+UxC>xWkrbCMp8;HN5 zTN zC#=}F@X`leQ5(zA1Nsx54DDEt^WN9>cC5jeK!lIBX+2?+epNjoX)KxCZG>-u4EbJ$ z^{DkYWBOc>wxRx-0!P}=A7UymEQRD)N61?5P!F;ElddwJLX)?lotQ|`XSUzdjW0RO z8b|T!8@1WCC3xWD`P67YF?oF1o^{oFU+#6A7W!aS&FIIc^hAi|Yv79CNwB>>l88g` z*LDIYBhhwX!e(iI+9P%-7k2G~ZMtqO>$Xiy)k7X}rUjSO<+`m??Q(ch-ZIodY3D&_ zdzi4rzxyXBeY;o>e}ZG*f*LwQd+#%mOhI36$9kL-zmXklFot=J59O?<_a#uh&f*_H z)BG>-V5pWQ#L00*K`}RsGsJyhn#Z*3%wxXaa5D7$!`O`bHDVc@KCUc9j3fN($5YUyew`i5I;Zw1ueW0j#snh9 zfPJ-|-j}K;B#l**b0~R?jBT?X8e+&b=g#he3okb=d-5z=mN%`MN|F=d&__KD};M#;RfAI6h!U6oeL z!H@O~@i|8l+-#xkEE{V&VYX#|To*6pQk}YVn*aS6a?BjZY5p@39Q)J!XC#&-&%HW! zD$a9sOmn^GPxD_f!Eoc!URPYNVT=|3_#exE#LRLUrWx4anD0Eadf(wbaNjv6U1ge@ z_Wz28*8#`Kxnsqg$@Iu66)_Jk`7f5Tj|y_AA>`eMwr8!>Pn&!2qu6$*Z{GOjH~}CZ z*0&YM5jkveA|NmCZ{Hbtg+N{npcuu$Kbwvw;?Cu@1>OX3_(~qr@b%_+*g3BNnBjOw z;ej4q@r*Z}t>T#H6kmCc1`fBoONd+(XHz*&&9$0QsGoMIXCsVrUm zCP-p__~aS-L8Yd-eCrQyA#~f)>W&@V?lbnLz5c);Jhp$OEzL9dk2V-b@^~?&6lsBr zHWN42*30F=qm(itOp#Yi&~r<+AR$XzOo3Oi*&|J0WD$3Ik}U|a5Wu#!ODOdrHAI`o zeAAl(7E))}4WGmh<5>(%w4pc^JCq1$!HC9s#!6Zurf!S#WI;#BhmUIK* z*tts&0_+>G^`!?MxL-zQvlZnYgC1|5rM%4;0I|6bR>hb6=XZyM_PO2kw;|k+;h+651^-TWq@?!WWbtl0l?MKIG{T&}H7Q!-)w+p*Z)HaA8?jQXYO*~h_tT0WsE^jPhAKdV@dfIL)TL`HBioW>_=#eEpz8HtAUB4- zge_|A?OIn7kp(3b4CToo-Tts%%hG|3XdDk5ADKcnv zJuJZI(hTC2qA9H$HYk)*94B@xP`xepr}ZM2d~0tqAWyoJ)rHSNHI21OmmGb7eDhhg zTDR`-nL23Bc;_VB4)d^M3S}TKTfM*RJNW>Z@ytoHj?imb=#xw^sF)?mo9EQ<-Kv3v+T)Gc0RAcV4TSZq(xwy$Ikd?$X23IC8R(I^Y5LW=K zJpTCOf?y2txo3Q}dB>}uzxmB?&T(bHj6Z~4eDTF=c;4CU!yo?e{JY=%?t;%tYu|(9 zRWUggH!T9wEdZMq%Aq0;UQ=;T%i<#+`AEm7T=FuPyY9Mc&R1aIUK~CkP?x^o82}Jl zbbL+5(@#Gw(R~N^ov(Xq+83H!K>B-bu-@>Z0-np^(&H(}D#|=~K&~A?(Loev<)e>0 zitY9#J^-+#wsP2;KIg)y7y_emX_wpBV@eyL+<4|rmLaK^GdCh9{J^K4AEjVg*A86G zaPZKf?%;v_-O7s3rOi8B(b1ha@pSj#gAa8lPd*=)<+*84M0wk?uHIGJAeaed^&2yLNV$yz8gB0~em#9Xxt|H{)F~?jjlLx;;nQ#WhKpvcD-2 zIQi6x?&LGiG&mhSO8?rHosUN}VX=e5NE@=51EQ^Q9!x4|6q zE;#>!?#Et#O?TdT=XSf6e2LqA#_sNnUAv?;473^C^gj0Z<0w;q&wKX7iSDt-pXhGB z`G?&-ci-JTiH9g{_57dj+THDY+s}8a7hT@%xac+M-!PjWId4e#TV7jxIDRRs&0IWv zygT*igWZX5eW82yj_-FTkL7;U-A6FG)8nj-8Pe3peO~p(5ab$9MLmXNbN}9b-PNzZ zs=NBiE6X@rbQ~x5-~Ui|vdscUK z?>Xn1?&|&Lbg$cYZg*(4?9&NGx@7mED7?V-&J!H-!$jH>&!6Z%@$fC(pWT0xVz`kn z_8*f%an^Sns573qll>>DmkTcE?-f_Prn~B@*BY+;aU7&P@Zf{p*S`AA?#ZW~1TFM6 zT?2H+s5jYsQhdv}aD1t*>1uK;M1RO$-S2_C)$?Ee*jMLE+Q}F?j*dHFtvyR*h2N(A zKh1BH_C8^Xk~w*DizqIsr;J6 zTPPpHpTUtf*}3YMf3~~)7vE08l>U}RV8`Cw9Y5p5lR8JPxlH~4`0e+0U;97)LwDlX zalteOJ&rM6YTae!WlU1g|d z?fJQ1mHuhdM_{899xInz(d~T0+q<=Aj(5-e`JZ&h{^I{_UCO>-8n3O^Iv8iA583^e zX*xiB*Sp@?z3r_(ZSi$E_eXDd!;f`e|N6JP&wu_4IAF!eBKshv5aHOPEhO7WNYIjL zIaWP}p-(RX(L`nJz@fA-+_)E19f zkLQ=W|KEknu7BYduE+ekGQDPSqTfj1oV@I^qlo)kx=(-RFE#fvd}ME!9EEbDjk2eLVQS|1M9``)nZ zT7Ni-TVuEPO#nP`s02TBV9%Vl6eHI0An`cHh&qt@y^u1B2k`y(F9pn#CvxDA96oCw z5A^XI03Q6$aM?fa{Xd1PoL6}1KOY2$s{nLjfDit|!M}bWMVTi9q~GRfcS@TZ0S10b zTND9L4j%lY%(nq(V({00KJ}7j@4fe4O$?kEnDYS{c=*K}R|U**>5S&s%F1j%3X&5+ z3t>(`Psq$+LXZ0+Sc?;Ld{_qy+nCVwi|Lhk0|4)Ja%zhty`+2mFw2Ee3v0LvR$$yN z0l}*}TvndCOcOpg(nUM?Gr#GlowQkHNOrp9;!C=-j~rH&@(Ma?d}eB`^97AK+0(t| zip#pymDOg;dZ?3jYnvo*8vU>@$j3Nh8y`^f)s|AHothe-4C_yTbfRobl{2r>#`0sH z^(dFS#URal43BK8EhE3j_E{IMsQj__{nB*sKj?&4Z{^U@3%a-cv-fwqafMDzbxe9p ziH7m!aa!>zm$68hBRKf~jsNO>dGK$h2cqlDO+&7+&U(_g&aF%2nT}l08LlAM*-PTgKkN?v?0cI4`@&oFR&6jY`}gnb z{?R}B%{=%|aO$d9mpS)-{nvgi&AO9%`()5ovj>R!7@R6mmz%v(9SzS-_?Ls`EJjIQZ8w6A6?NW7=$b1f~-Jn;z1kLSDv#`&nim_`nC|`0#*m z!TbAfx#gA_E+N-RfTKr`@~Qy74^tBa56hV03IJW5vFnUIS5YIUA}5r!YerxawwZxR z$0WE<)8IY-X!4j$|eD0q<1b1T+g^^wlB17F@RzT~2TE#cfAw7aH( z54KMmfSE^m+j2g3z14^6t0|SObIcgGso615?M4MTc>_K6TkKM?EONGIoles2xc#Pn zjMuOc3L2*1ueko&?&5d7F#ywciU1;T#yMwpZ~N!Ji81ncqZfBS^R9P9d{V}- zq)#mSJBa$Ys1^@=CSx7jWxl5RLBCAS6D7F2HeLEHvVRcj36pj)xYHKp7Wux%pb1O929%?AA9y|-b zUcW!lQ}%Kru=nr1zgyWkyp*@DRgAgE8g147iM3BeVR+9!e|hc`#y}fWr1oPX=uob` zKMqzeJKFKy_L{1#Huep$D%VGT{@XYF19M)H{6k0Iq465~!HA&Cj44CGy8kqfL2kJ~ z;ri8AU5zUxa8iY_QoG%FDjFrvMcJ6)N{lym7hHg6%HWS)D5el^eVVFlcc3lR3%kS= zvE)e>daN5HwT&W8uPUKkIO}sBtk98VX3ftcFP*5XP2B(H7&BJ-iw+ejuXaaX*-P<) zMa+nmtrV(w+UDOzsDvcJmN4`5qgno6Ie-=qWfnl1O81WT+aOv5slAk&yL zfvk3<-5|!c`WmXKEK+Uz9M6%$kAG%uOa9dH@*^PUPaL<%w#R`TVbjFV@xdxSXkNC5 zu_Tyv&KuSjvqN~ep8&W5KyLzoUcCa4$3DCQ`pA(ZGrlem&jDEA_((sP@+1KD^9NKU zYMs&+L|{4rumwS-N)B><_%zE8edt3Az6Ox=_q^vl9iMuMgZve~0pQkKZ|&~9^G?1F zgOi{4{jVN8cyI+10+*Q|*@uagvr9^)mnBUyPdqAyEoMx#%L%B-8l>0)Pi0p4P`(DF zLbkHZHvnicq~CS~xfj9kEMyQyOIHAdPZNy@{R{oL0XS5B!_b z6oHK*aQV;UnGmCKSm)h9&f^Vu6xgwC0n$4 z=b@wBk00U*4F)kXwSi^$oNlX)jZP>SZGXf%K0p3r*F=F8(v(`kgdtr9h?#X)y!JH^ z3%uj#{uCLkx_>vVIY}+rYrIT`vbb+%W#6I07eQPyo>;8JbZDxYO%=+-rOp8pydZ?OM<0H0 zz~1VL7B`xDPYf@J@sgU$gK4iA#s~?dj%ou7kjHQLD;DOu7&wOky1m$~SQoOixk7$4Zcc zPc-q(ZW9KPSk~PRls$G$2R9NhwzY-_QA!^-U=|DSE>B8=l>2o?SD#}8-X1cT&8ugt$kF_estHW z>W)o1svJJVF=Kb1cP>sixABuqDq&HH3R`7V?z+n^JBkxlyFf=GlpkdrEvRH&M5t+N zxd>?*n4da$VNzb%?6rIG%H-x79CL-fgD(HsCRS?OOrtEymtA&g0#F&vD?+3|ox$>0 zQP*8{r5_qdJ`y0_pS5z*#dn#0Ws6-BtiY`A?uhLYdXp_Y_e%5+jGCA6?M9Q6+eppAE^Szn80sxnpwrlu2 zBQPDX#y~e#3*gt;1tI3+Qcg@-EjHjk{q!@-P+LaZu_M2X&<(quE_o58@zyTz5Rb$r zkQwRGOu~CzEECSS5N8{tyKH*ZVIFZ#BO0q`;B{WhQe7fh=9^Im{uLp=E^yFw^eNMT zKJtMO={4RtaH12Rw6>qCI>=+)G|Pje#Cl>BcjKKCgtC3mt|DzVzlrrH@ywcD7HmId zMMBvzb1pe<3QjcYcgphK!!Q2YDT_?`t1|+tJb}mYlH;k3GuFpxL{k;A2lmJPi~S&m zpvE9JoCND80u_TUjEztmKS^Yf<$-MS8;zJunA|!UX`O(oEk)(&&i|FeudY}6IfPr8 z&-Uz-`nDf(KaGu=&YXS64-@Jnop=7Zst%ar{b3U#lmnqEU35El?T`+CtquoS0##g}ZWcAg@GX>ED%2K3@iia{N~#ybb@N1gxHtDO4yp+1if`j9kZ z?89HD{r@1|ax^!Np>vYePHswa8^sH{+J}16O|r$1OQmzGG9UFe4hzjN<)$;IGJJOM z)~;<#_uO@7Z;gJi-#G}IZ=)X(ldiV=e_sXpB0f4v#fSCE-J^R}U04xqX z;^%bG@g`@@cw!_i=ccumobpV_>E8qQ_3z0J#@23i->U4V9Xd>xxD)cRZTaq=&!a^Hip7T zt9!Ti-npQb1Bh+|@&W$4FDwz6RL4FZuT~b(d7CEvmI>WEIH1L(l5Aq>t_Srs; zbMRkq|F3Vn1X+*@`Ei|Xt9;V&@f_B70@i~(=ws4qV!f&^d=<@O&JU8@0@G_yP;+bf z#4goso&_mGTFuEL%~9EW-P(?^|KPc~Vxb>fj4j8UDdVMa#Ht0&PmG6< z`;27DdQ3PM-5cug$28}l@7S@uCjgE;{+QgM3u+$xZ)-(1Ty*;gn(I8y>E{s@fRk*6 zECY1Wg_j<{cmEaq@Hxj701N!sxq=@;_3Seq?DJUY(n~L0Ty)VzGu|T2#M`EE{KSU= z@`QnC(`NG{Fr5I{{Fv(Cng{<>&4YjDzN`iH1@Ctu4QIfV;~4;YUH}gMIVp7iKPJq4 z*WNQO^kl?bYLiVuRDk5k$TI2r=qdqE=z@k4;_+}z!aKeOWINMpy#j!az_qqW+Rbr; zP;c{p%u{1a3s^TsIW~iO@)K7N@P$i#{sN)clg8vcYHdsG2CRmu1!3uvKNhy1sI$H9 zceUL-DyniUTb^>2&oT-8qVK(K@iwn!pagi^HcI&nz6XMIYW8v$Nbp*5Tx#C~Zz zu(YF&>TR}l&2;vS`^lXwUUr(4THZ9*0W`__%u2o9w=^92W0_ia*?RsuMBqS6qF~h4_WP!;hLxY(Ag!t!Fw3z^k8e zMZgN*jD};OrtfvHd)*9IPxC~;zy;fy@|Pb0y=v~|tC=*6BY;86S6J`_%PBknaOF*J zdQ*4TU3Yc33}%kYUOGJN4|8D7vthFfF1UabfdhX5+9{kV<3ls}q|5^t`I?5D0d4l6 zh`J_)HpxRKB5=A&06eTM`B0CPCZ2Qj```Tz;oF*a?95vLY!!}b@pB`>IT9l|XRC7I zAy12|d6uDsX~MMgC8;d4VoN&*lC8t?mN3@!4f3(r1~8G`jMfGU+fL?HpUU>HDmKXS z$a@lZKoBx7n6P> z3zt0O3R`pPrOy9qYAV0%2zZ^RBJJaKEpD=XW7NcQBhW8MA(2g7y#s*lu~TN`4Blb;h2?qlbb za)w9=;>N!t=bpm{G%ffX0Q~4U!}HC$W5P2S50Mavb#QTr}=` zQH~P;ywqiZhjOeyeugtwkIu zN07F3%U1xd@Bw&igg?tHCQtj}TX-mK9kvXL)0(}J98o@E;@kVwVV~ORM@>nx2 zF*>EYlu20#5m#kcQN1#NlZ}##U9jXgIqF8@B-TVOx*9GZf~wtFXujlFU|nCR6J8W7FOJPD zM{NT&zOKq0`d<8RZA|(L?*A1#$^&d2lH-QjO?Mq6%Sga{(n}(IoE$sxP+^XbyJ!G6 z*17eK>l8ANx%sJ#v)^p-z< zq)Q(PW4#2D<~d;2@~Pn;Z>fAE7JT;c7~JoqPH^O=PyZE6H!Mcq`DlQKrY0~R}4 z-T!~_#TT#f@|G*FymE~X0KEI|yZOq$IS%w!aQVyZ!3Q6t44;;%Irzr6yire^%6Uba z66TyvZF|0PcC@LciHVvf>bfN;aH;8m`|eAP+mrDXfJ%1QPFM4d2j9(4e+R8GuE^>O z4eOO>9VAns_698jv;qKfl&yogX((=#%2}4Bkp8UzMOi6UH<|+S?T3l!&pN-&FFITN zz+L~u27NH5D!=G_N%OzR*#^xi*$>xk&v~Vj<`3z$Y+TF1B%k`Lee!LSd?w`} z8c&*KM03Sh0+7J-lu+GzYc57^WQSrXq{>08jZK^}Cdw;c76}B>$28Cm} zfi517gHGLk`|TZW1z5ZO`s>$jxZwu9MxAo0m&GY%cQy6djf6D@Js zzn*}}D**V=3ts-uTLF$AKfZ%IpUw>zNOBYr%+sc~m!+FQEL0Di@qB$+E zi+96Po;nk+odTHaz6e=Y21{;KT2ojH22|Rx%(nuxls>fjsNh95+OQ!l4#qhw#jE*a@51R^*LB#zJ!hCtBCE0mxf3)o!D{R^44dpbJLBR@+krvM8Io+ zhxCs&|8wBwmm3XOE0kRhNPGxm(c_f7Ml&%7FLjyZLemKbVF@ijAe&I()6g(gRT4?D zf&5Tps=eF@WQ^C1G3q7Heb7254T^`2^FhC-kj4WxZ44%;VXZ6i{orYKs}CwmXUaA4 zIN;91?jiFPsg1s_Dn@oTa*gS698mY%Z_fZA+%ZlSA}D0oD7FxE|Fl>)aK=&sJ+a17 z`qQ=%Npp3aPy2sFWE4`x$bD*_^D&)Z)5bYvNONAXrQF5}aD(|<K;jL`*s{kLwE6E2+~C#B8I?nj+g>IpEbsCuddGa)42eMb8=B5a%H&Wzb4)Sz?ldxbK~8=$y=vG{sPRr=rc}vp;r@A zd5XX|0vSmq(WWJD0 zm4C&`gP@>^aG0d(_quw@5L07BA<1zAjN_<0m9Q*KHh3T(V(a=T)ulva>4GXnUmXua zLj&m)oA&>MSUZl{RqDdn^ucr7nY(PRbDo&CH-y~@~L;ss*vMAb+Ej0TrF7^(i4Qeb`$^riXW!L0rlBHV{@YQ>+5Z2C08aSzxSRnb)haXJJ_GInhCUj3u6uWj=qyTU!iRY0PTq^>DHgl1w3ut4r zP<2*&wM^W&K9;R|$a~3&21dy?t(&=MF1TLg3ct2{(0+(3ZcZBQrg0!PC84AFZw&eJ%fh`a*=)F;Kb58kEQVWJX%$jf^xraMa7C*?2>lHyp~s)toZ;&#yy+c?VXTKh#qbbyC-q zwkHA^Yxjq8^)=0tsZI`GvTp``8Jvx`|37>0_H4^_o%i+L`y2oSaiPE~Adm!UQI^Qq zicCF7aTLo{&ZQK~NhOh9T&cXI=*nN-H+%Nl`vAl_2OFfg<~iMS%rU-knWN|IwP&yH zUh}cEso`)n?epto;*^eL3B@v^M16{F)|pJbHe}WS3hHV<|CzrWhcOvsYxEIf>N}m> z#k!4PDls?gw9Nb+dx&=NaXWt=1`{`K7jXaiUpYPX`9I~~InuE@{Ws(U;#j)bc~v9t zz%Ne8Px+aTp^s0Y>rjavb}?UnqrQ^)fANO%{V71ck*_gXvD0fP`r{#)^N9N8JBZ!C zljXAH`8aI26h1Fo!qXsym(e89>%W2YT<>q1q>U8Q_uV%c9v1b&=q*+9&)J zAitU>Icq2$pdYS0?y1U2 zs!({Ae_t%XT$i>1hL6!_pM5TpbE$a=pbH^&pgt+i3r))k;FInqGIzK+)vpzUB~nxT za?o^{o16x-G2V^Y$0Q#%Cf*q&&-!m}_df$;R`U4BMmn;<0rb* z-WuT760gmV%_v>irrmJKZ(xQ5Yji*mUY-+yD1;c zxp54{#BJK~5q-(#g}F_{UNB~2BLsCoGq2e*Yn%(F<7e14&VSs`@wkuds^oJy?QpB6 z)01RXYrcf%_4z-?p^(Pk7w%7lG^QZK7I)jvb!54BwlQJ4y~-w=*q`iP&HVSvvTgi) zc8`AJkxk6XMRmx3uc@D+hBC{3w+HM4R-xr=7AQ>x7Nh#v9C#JYBU4K zOD+0po_OwgheSLHr39zB+|~2M8?h|?@O z&GZSYX;%T44ga}tmWypfvR40McG&L_cB`xVL#YFCh;tvx`Wox$fRUMtZn|h5hrAi5 z)Wk4eyP>n&6SZ59ysj|>*TP+W+pSovgOP@sK(4l9OMEuz50Mz}x{PmKs153K?Kro*vHuk3nU|z>YyE4ku6AXHk<$eS=Mbj~K zEH$=-8+sy;QIX?$PPiWf*fy&}wT~OM0!wX!k?+(f+W_EJ7Moh%wFA+yx+=r>(%7wn4)L7%& z{#-DSR(C_l0)sm`IK1@--}_!(YR;O+?*d>w#3Ens0MKwaInbKtP%j4b7o?cs=K)pu zR%+FUyazx9(Y{>A4D2reT*qYYn$oxb&hJM*`qAb0e((1f2@9bMArcW!9d(zpRWlT2DH&jhnRwo|d<5RC}X_mh5{PTr5 zr@dzP6+O9E<0Lu7Zw=bT8zx?aW1lP@KTMv%&x@)!C@qcD4XR6H1UBBgC33I>jAN$3TE-J2C zx6RE~+sdd$KWsN_X}pwDVEcNXft?I6o;;?e@w1N88SFo93fseV9l#mL3`z{mgL8n( z7~=R!9XIIqxyhi&cTCvFI6t<#@yWdd?mv>oy!kfff5O?<*DnK=|2m*KtPB&6g>lFr zMx&iiZ4{%-arAg;UdBV@X#3bV12d5N=qHxlbG$|NE#Pcp+rX;I22iZmV1MX8V_qtj z&YdAifCB9~Mh<+7cjOIs_hNQZTaQhE*lK&=H(0ePhQ`=ji}wHG?H-R(KAq{^b5(F_ zJ;es|D(3&0u_W|3a(ia(`fZ@t&a)ChU8OuEU+cLk(uSQ;4Xo`3AiFW$tkstogtjA( zX7O7%VYn#4zx2u%DNw?1=9-m*C|TJX)(25>mxJLZaSam?qtUtt%MBNA8g|Zu$XbAF z+qIsMSKmQQ8u=X5o&N+2L)-~HXRVogax4rHAZ`I$^Ui_oW zOaD|(o_OMk1HBBL`h=IG^NuvuM<4sx#}2gU&!XX2j{x9cq*C<0T!##dKO?S#t-XoP zK%X%D^MCr;zXRRYa`>M2yoYE1{YwD41K^mqU-A=xPe1+iqK%*b^D{EKNPv}-8*jS# zE(i{gZknkxQ-;4LP`%8*=AKVBocML3D!zdILBLfy70$+(6eLPU{_h5l}_r8ZakvAspEKk>Ka zS8J;Sw)$E%ez$!Q-v76H*ecu>@8gcJ!{6FMKtUKi5J7GG99zj%P-P+5)NmBrp__bN4clWYmoN7$Y@onPR)!VoC88|Bg8E>y}{^!~I8iXE{Wj*$2 zL8l#>K?_Zt(&y|nM{UdmoX<~fmpD8hP-@1G;UzpM%#rxx^TYBGS&i)QSoW5p*4io5#4<%H7h#S9o?f<-hc0P-;TzYjRIRu zsxt6>^;Q3&);Gucvhz@nJ&S#Ez#{;6+;Io*Ks(^)(eJ+d?nTh!cf8{ry!oH^rujku z?*NeN+$rrS_PcA(!2TTo*Pg?T1qO8({M3c6Zt)&~!yov8A2|4tANi5Xy3%!c@4fe4 z(4g1L`j3x!5ys6o-+ZEX0WdL+q<_RC0i1}KWK2j5GR^#qxh50ErwGy1^9Nk z0E|(-`qeKF`n-s|1Te{|IxWttq7`y_Ynqd>`>WI9kb$Yb`NY{B*xFMIhGBzf+oeFx z%9rG2ZcW9ivhr+jYBtGj|5twYe=7q^%$Ro>eIkJBmAkA~j_GbFBR{rMfhRY~;V?d7 zqE~exLPu8FpFLJwg^tzATlFK@(W8d8UWGUMT%LP4iz9&f}BGYD%s8Uvs+#Zv_EO@f6XHZ!yDzunFqeD)_(*c^j$8UXLO)=vwE0 zd)!yAY6duvYstBnphg#!J|WT<<^slNRbaI@!OH&;OBKSrM)Oeaf88Tjt|6{#@_zKxJv$!Gw4%?J-q| z+Gi|;*LpNJWy`PQe%dblgTwP*mVNCjUtaFI`|XaHH3Vx9zDz8-))`)p7|}_Bc5eED z0f|<+ShFbUN}JlAFw64&?|S#0l6_L!k$&-vm;FgpLR|zn)GwhO^FA~#1n{V|?wY>* zfe(D(koA*Z{&(yz%gR1J_T@Td!0W~9WNU9m8R#+XT=CwdX!qL*15a|Zy0y8v{h ziz{A-8u+~FlDh&d)5JL8MHzY|K(_(ic$a^HLxbLnLDfE3%$c54R$`ZPi)vq)%N+v} z4IR;*)T$qT-~sK=ukhQSFJE#}NzFL~n$D$zkyYC#OHPb8qSK#!j`s zp2p8nl@(zcmWvkf=YE|ko9+MrKmbWZK~x2|^-`GFE6lntlgg9E0Q73FS}Sr-?KAMo zGq4?Zj4nneMU=-}4{Ei+mOPjYd9`6RyEMAdl}(Nz8=x35ZvZ>V=JR^wvz<6HFM4dHLARlMVFT8;9-~Zr9j|uUgf^?)|7nkWR-i&~n<%BhO?0!7Hoi z52~T?D3z-nW{Fx_pIsFpR`#F&BbS|_9KDgYCJOfoKL4e#j@{5YHu}Hy(Z@^p;^+9~ z9A5#%R{jQ^;|39VSwXjW^WQ*rZpmu1^vYUnR0N5mtbcodGnd`#vH#{X`YAxd>hlfj zhCCABbx60tFCee7+vC{$brC+R4z%0Z(`= zfSMNp>I>6D)=zp&x=hLkYb$MYq9)IK@@g_Ll6y7Ed!5r6m`(sE-2Shhuo%y>eC=yr zyTENO3}T*n;c6E&6M~7LD_SKC5l=|t%+}76 zN-yc?@QfEW2RkR8)6u^=oWsLhCvNEOwUvT&!ynurW(?@k zu=!T5<5LZ6l$`_xzwBTaY^%{6g@rw(>b&`XMsm^%f2cK4{lp8US}jtwji>TZxH-o7 z3J*l_(xd8U^#zifBEdo?n!o~Lq*>OvC7!^cR+I>)9E>$!d$;5wvr z4)j4KQV~0!|8>Ai1j56rG1$f*zM$ii@li3NL8*4h%W-j_(+2}zyWRA+|0Z_Nlj>nb zPKZ#|a`Y{5#jX-lkTK6BFrbAr-NxQjBu*aTCTHPQ-ogigkwjd!gH0HqD20McS;s{1 zu@!mM>?_dt{&wd-cJp~J(*Dzqjq(x`~FpZh%F(MuGiVPTOv4(R8v9&AwRo3UtIPh77Ia10nP zYpHh5VRdfJ`HbUVSmZ;mhsChbZ6i6p5ZbCeP$v4+y=8VxjzP9!zWmj=nd9h@R8Dp* zy%x>90|4K|RwW6T^41x2UdYZo7r2NJRT(hGiA+O0+7?)KxG@3W;(6Y|jM3t!ReX*; zRJiL{AU6JuV{Rwg-6|`pLSRps<0v1tIQQA8!eb#(SiMXXseU`g&c}Dt=l}XQfO?nI zbl==3_bhpKhDP_-W7lcuoQ99N%9*m~+_Vq-DO-h+{q_xaJ#N^ocI97EPteY{t(PKl z{^d)vis;qfkGq1q1H5;P#i8E`pt?S8D#p#CQK?}4aXLc2s1(=sPEIb|c#)q1tTYzb zcRsV;(M$h$0ifRjpvR`&e*gR5zv%Ai%UVNS(wC?wtf{27e+R(nL|+r<{2w;Crf|RG zl|2#k%*vU8zWwcQUq1i&&mU^xfAZpsFD|+u!0rD0Jm4|6{OIb}4SFQt@cZBS&Rbag z=L%dF?wlv!X#(;(O?-$$4chHuO}a=V(;WoJ-B@%b4(7R)1Kk0@39(}2^hPAru82xf zbe$+mUJ)0*`iFL8YX@SnYWQWV+sajR$~*qb-quF764NR>i&}l1C4DL0#&?H-&+w@e zZ`FX-cq79{qJYPT)8<2arz5Lfs9k$$m&FyUT-pvXC5pn9`88JkE{qfJSlWK+u9`VA zYae2(j(a?m?Vu~#*ezN0mmD}S6Z_ph1K(Z-=J8(|H4dRO_I53;V^)|3tyt;T|CS+X zo2%(ENn2v;avp~;ynrp1Ix-1V2WDBEw}(={`uSf$?f2I=136!==SPlHAL!v~9)}rU zGj9N`Tw}q9Ujw4-F+`vkD^*#CfkM$2aXD{#I0`e`5_8rytZQs#G3DA$yff}K-6>RZ zlRT}l(1+?(B_aFbGkG>T)n$W5&%(nJ%vN1}G}W@`r9Op|$13yDETc20({6P5a~~^i z^wt39z9dZdo_;!bp>x8R0$c4u?b=JbEUwtjhw$C?5li)O&FyRX`CqZ657p^4cZqz? z+?1G+i|SEHDi6@kZDTsUv$E*qMmjc8aU`aAE$hXNfz!tUYbW}0@O*y?kchL+;0s2r zFDhKdk%|}n>O6nq?c(%hm+w&CTo_OyX#2u}(!;Ns@e61gpU3(_@Uo3+r*X=Q01x!- z|G@(fJaG7@|MZ_eVO^x#{}1>j0C0K%AUJ*rfbm@c#lXJ4rVQ*a09;f0PAfB@ISDgZ zKl7Q-9DMPMUp(YFf8EyNm;7;?ix&JBxYdOhV`{J;Xz|Z2F3cCtA>AEt8)t!9ylW<{ zX9-V;c`;7}eK9~3bAw5mITE_&va!NE^3a2j=T^9yxptw?krRjL*udmu8QNWO`0Hsn zwyIaPFT77EHdglNqH^JM$hMBlup%C9Bl2O{yx5OTFclYuN@uOhXKaB@nI8k#y(0ij zEET>YPJHFN4t;naDvr|7m}w&w7coRH#?y`slF?`zp;eeplYNx^6%LaW`fVilZy4cTf#BQJ&GH9h{s@%f3M8s_)})x3ZF$)~12^2^xO z%>Qz{-(SxRTz>Sy&7sCNW30wo9jlC`I^=cUP7Lsn`}D2`HN}7Xmaqmy^9v}zXd7NT z-~1N?sFi`#NOImaPmJLL-;&qg8ze9w zbk(xl#%edWLzlA^%V%v4j4({q#DEd#l*;v1jw~h%=jg?&u~4>(4i7|Zp)<}~_9e;p z@aKQ>ot#$o*JF@&^&EjhCEs8oj~t^TXsdRS|MEZ{ZY z)x|8}yT>~D9G@KXf0#U|3!=c6TT4D zO8|Lc`sIrkFD_ay`3q6qJ-z(g&;1;C0#LI?^2-2YY+qk{26D`=-O}E|$N-c5&;7YS zclf^dz3<>>e&%O*7rpIl+mxh1IoJpjvhwqq&|X?E^=F*K0wRUdhUvUncgY!oq82>Jo3j=)mu!pWLbp$ zWmH?=7dDE9Vx?Gt7MB7A+9JW-inchVxD#AUaSfE>R-nZpSaEj`?(PuWwYZ1mIUVCNDIUnh~AcXA5^HUzS%P<=aQk}-U=JmB#Td-m+JM>_v#Jo4; zDxtlL`0HY$|FKWX>@&MpzxJf&t2A+Zk%77Rdedst#7wT6nNwd7lajmICj}cGO!Nqfdv0Jmsphwz;(f&^CxUCbA%-)d> zMom7We1V|b+k!2f&_;6oLPK+3T^Kf)21(pH?MvW*ulZBe*t`AN1Hr<$P{|z$ zPiGO?_1fh-opD*=Pl#(P(vvB6QerZY%wMdTtK_7~-kA@id~6YNTF5N1`Px`r&)-wO zzV_XRVqL$j9sBk9>-U?hT(%q{#D0yZoo}?j*j#k~X~cW|DxIp|_{T|xc{GrsoZ$v@ z+r)y+x41SNLgya~N?V7}jE2BAa?sXkg=JQ3{n~1Qq7_O9-y{{iH|xKlGrf`cht)N5 zl#9i^ewKWjTP04sd*%Xp zTt>F9f#(#b$ zJBY_qsL)%IjWbx133nA17 z!AyxV|EZTBa=&u+UZ&;l1=gJXfq1 zY78owVr%`K#NBjz4|lq4D|*Ned-uL+J_fDVpJcV<^J7+XT0}Fi1S79XDedd&`=g@M z+19)_^ey|Dqbaq*39LWQ$7b8Iv=;zRqWJVhkt^Detxec+Lec4{%KS9hxK(iKL+}{( zchU}!9-b^Q?=`+2ch7D~8D_-RyJRNP*P6|LTJ&%_tyq2gdQGB&eQj=xUJOFr3UpZC zHfj*@+$7}MMgntU+&4n={bYdk3f@C~Va#{cF@}5fTQ&7hfhAxjRRRUz<4o{arj7z? z$ym7(Yt8V?SQR5ZI|3s}t0V9}{Ec~C_C~SbI8C08>AI1tn9UogZl6>2(Asvz0PfZF&~oJ#l^A@VGoHpvL}$Nm(tl+$0_RJW8i`p;vY34Ke_fXr@fOO8A%FQBuy zL~Hp5oWrW!-wgQn4W;nRhO)L4X+rNH|E4N_pNB2#{qPxYU)qpKr0J<1=JfGjI7p_b zGHj$xV8G}5fnVT`KmuPv17~V;oAAym&5+CZ>^OlO!gk*KxO0!N)y1qd;oYNfN^>M* zScJ3V9L_v*o;s6FCl>Ql;A;KH()OWMZ>bpZRJRP# za2pGV`$QjCbruEzU3TFD=VUP^>&+xApjQt;wr+-kI9v5O92v?+`IT>`$g zA9qtplSMv2>wmU^kamr*sJ=cKLy|!stS~>gu z>y%{ChqwE&`Ld7WVD6oCSF?D?nT@teLcasPqu8^_KFd9=?~PR&Ak!UL@+iBLj*l7< zV@6TbM)TLVQ(;_z4Mu#hR6M!YExA3D+f@t(iMhF##;LOp*$jqB`!Z?!IOM_(=C-p- z?FW+F$w0(ls|) zMy2N)`7SGnSN+#<8?dKq;6R7~kpKE%_<)F?=Dg?&hU?JXy2EVOA71XOLqf{5_;1ym zi`_q;>dtd;^>^!>Bzl(e?DXz@;O8uY;ufFzyjBgj8@wcBUkj5x&zyA7vIez?N|$Id zV>|8hmG}N-fll&uuT$c^cAGxIFoG+mmP8LyTpX_bF8Rq)pu^29d?IpV<$nI*OF?Py z*{}*1JT%S0!$@xLLx|AsqWJzm{YN|{3eR;C2+bCzdvpe+ebndJb_P-L zv{x%zb^SZjs(vnBXMv%m^o$%wQfBpf+z>%?jKU3zZ)UtPwg4^eOOR9wyo(H~L(*4P z0zr<0ca8t0t~OL~p^t-aNc_Iqz8Zz73XwgOM(OmYcdwe`2Rec;jKO`rRG__cb+=;- zPW+4?!|O@^kkw!H-ZwjhSn8NmCgG#UsETer%xoF!XTk|Q@z!z2#jE?2&R)bU?7_?1 z;?u>8a=!YPT>C%}UvZe}%~Q3qR-(ADEignNh}tnGVupO>BKPywSjobB1{2p!RNUjwC}-QR3JD@J^6d1OI9ug$d?ZVg&mp4?p97+$KX)nZ|C{t50T=gFd3woa zg8=ZtxHNU)v|JzSP{&xn#YfsaAg~xxE;zxCWD$MVu?ex#yBdiE-^8*Sw&JNZv>T9) zON4f6a`CS)xOjF)3#{~+8M_SZk#Jy`G%)L)E7Ygt^>L$JOO0lPOKGfqncwTV>*(3_ z`ki}FME|If=f+T`VXpFfVE?DcRP;oUs&=smD}lXT^VX8=c+Nn#K%uHrj?F{RI9++f z2;Yb`S?A|N{k7(=bFNzBn-Gv@B)pyxqq;dqkH7KyjNTAl)VS|_O=*k>*bkt=cJ0Ts zQEz}rQaGeI=meK)m2%s)R?%phuQz{#cDYwr-&qQdj zSmtRFB{bXf6J{$!L#6`#?_7)*px9YoYStief#XlP#+Q;qjn6in|I*a$W$d-dB^&{; zssp&sfZzsF&p8NoVOITGF~z)KfKy6_smllTAH8q)&4^b9S`gY0_|-+U{E;J;&OA2~ zav!AnZw>v|Pvg)B6d0&v7?%({oA{k0KdyUhuV;h~J>T!~CGJQS^pxwWNr}ii4?G_y!HBbtsMwqLK#l)PvaO?XrRxq;-Ubf@px6^=)sC$E0LWzg% z#O*yc3>{#fJ3h;v1+RZ<|AY3b;2r{hQe_{%=SPThj5ZL|*G)P#ECy?hf+(nyW&_p7 zU=#g@WJQJ6#xf=6gZ&clV+kaMOJ2WFg{xL(k88}QY=uZAo=`RyTal(jjD`#DHM0`e zVaj)fwl?r@qLtH!TY{bM)WT;l(!lTDSES;HHHaXAMvX*uF0A7c{fxh_0-*Zu zHRMx`BYjpvD){6`;W>Ds6RFZixPKIg@jKsY7@41)?QfPnOkK(V?}ljrEZ%uHU8s55 z2r&CT&U%Ht&02Yz@BI-|SuQ*VP0-rqMNd0&5QvpXo5nhHqp9U!}5(c>632d9*dCe zGg}2^?ahZAN%?Gz81rDO&7v|!YCPX1RZ+wOg*w!mO{_6@S`wneBH;E+6a0N@wkc>a zgTkmF-t3zhADtzxwe%Md1k7QkHz(+M197(vgomoz*ceA37z>rv@%4$p_lm|B4)DuO zak6KeJTP3kV{~J%$wmQP2^~!t{&2gk)OVfLzk$6M#$C4KK1yGUB;Lsl3u%{}$i8S_ z!D=qj_URqNe&f#XTtAn3tyvR;BD{SFxC;d}nFj}H{1vB;j5)Ne8>M%&1#Xo8tkHG)hC3O6e z2@r1J-ro@UQFk$8J(i1Yv*~*D^xv+GLGyUWV)?-<{RP1*5gArG*TdEI6z@grEnyqE z;771Q3F?GolIJjoeFuN2koD zStYwK1k;`sJ&hw5o!C{y#OO3|te#@9(ZgdGD)**zthb?evupa|PcwFx$+Jliuw|_1P@~5h@pxtTCw5 ztJZ9hQ%Y*NGtYHoO=G@8R?Da0K=P_``eRqAKj|NeRdzS`xkz5;KIQEBHn+L_<@)?r z+$xqUhd3`vEO#(4?}B5HQVQ$Hl9;$~-RQ!xu#W;nc+FbYNoV1Irv4NT$(xNk=Nk57 zluqCe=-?3Or#<6XsCO_PjRd>K3rt_2nJ>_A^eR^}5PI3)P!C^@OYAw_)a-^Gd6l85 zt|3^PeLD+{3h{R@cA7Ps+V3l94^NFie$MOr>so#-;E#}ogTJ)0{{ND%W9va>!31~J zzeVyi5W8#ew9qq6x-$mJW%>Gw3RSEdGC;X1EhsqdwCi;V^ghht*q3g1*n-}zTAe=gqm zt9?;l;IgY(6npxg?u#Ha2g|yXz-Y|DCfs!>Vg~hX9#uVdizPiYWHy5Df&RCrcktEh za{t#(9u_;wUmpT#G40Q8S3K4(6p?pHbFp5D4}#WA z;3k@2jmIZJw6^4lI@1{u9(aXni z(!cW0!p7+6c&X?5HHemb@-Gd5=m_Q_#_zKlZ1Ds7b~{pfju2Fq71kP3sE377Rau%KGkUwVy^iO@eTa)GqPFL6n4~G6GnqrPf5n659nT;tI(L zvvqfq9?E0%|Wn>8cLajcSw4N_UUL|c|CK!}kV z?>#A4M>^>13GrHjuOOCEICADp5BT!v>LW)p=Okw6gIwZ`0lH1)kuEcO5H^JS*~^SO z%T*=)Y**jpsns%2KN^|8q`4C)Ue2=^`uA2}^y=}J{edZZXIEfl!+ReEeoevi-KqiC z!VzotXBQpNhtkJmt^{Yye!SUHMV|GfROCLVKNS8K2#ghfShxs*IT<^)^`1J^H7oa- z%%|m3W)_Q>W~JZ178NCZ4|O|j8?HbcN*HEdm!$$qaM7`y@h_1VJgCb9_+e{!vX?3` zSD?*7NUaSBgrNOP_uSP+c3$)V5l+K@tsWRob!~;zig-w8IkYg!sGCx$UH&n&7J|M% zQaKu5^`D;wX!XIMO-RLIAfg*w``-vVc9Ls^$EcKC`y|LxC&*e(yu{jH5o&T7O9vmh zxZk7IUwwRNU~4e;%@}Q?YynCjdoJdYqZ0avr9H5Nm%9Hr8^&L8&#?(IKBK`sBnsQS zf3Y}@KpSTUdaT}S!Kx^9yO^nPk!ufRw;WLTFw)r2GtDn?Sb^48Vcv#R<56fnWjk8H zJw6HF8I)&HWtzrL(6eBdjOF8HWy*=tWl&wqZ)fY#4EfN?8Ihsdx0CVGlCHIvhUi^j zL_7Ei4Bo(nfTb>#J&?xYb6aC9-Wcn|cJ%BIv9c~n$5p$_gDtDq9CL~+dhknU|b=0zrtNE3 z45_F82<=Z-N5qzVS6YR_A#nLU?`80Q+o|@i?*e=vU0d^p&j z0{YmpU)E=q`S#K*M0kzr*5$@8)2~JI2`L-Y0>vK7c7()uo?6@4{m$_}iqiAc0 z`{8JV-aq?AERc(wt%HKP%Ji+|Ybz9=yLEz{mFJ?)GMktItvb2!Zmz}c{Mc=HlEx_} z*sd6KyA#z){cmS`0W35!JZQ`zx1B@>HgCGx&K-_a-KRp{FZ6gG@GftRj`W(yd zv9+)~+|8W*q?SMW>94*r zyb$@oi0oP|ynmD%U4uDJ?_spRTF_7xYZ84}$bGoZ6i@1LqWa_r0@rI_>UKQe@{Jfa zhw-xASSdX&olN6VT%064s@E=SK6+V8^waV0VJA9QWVIR5`y@G;p4gwV9mkwJiff#v zrhGNlygiuEo0Hs_qxrdai@2;u;OI8gi_hSim*1Bkv| zWox|Ntw+WF9SU8-D@}^8nCmh+EybgTACDuB2VtvtVGO|9*BTfh($- z!S(w--V5-59YBU@MCun;@<`^?x-sYNpU61I()>&p}w-vId>%sR|Kekw{eBa!nHlOV*sJiF74(b;5p0i|bG zN%e>ZQoJjmof@w%67`3cI8ZM{mL(OdJJ_2zI20DN6}?ux26r2RzJZB=Y zsF1(mPyC!gz9%}{N<^YGbPVbXCDgiFE)8nx#+cAiDiFF1q5Y1w%ZcS!9Y~V|fbCB> zAodwAiZ}_*%@)iV-_~h%SwC_Swe)=^P2N$@v<;!eD!OlTTRG8GBj?hhowrQ?n}~Rx zdp+kK)RmQqiwOVzwlMfC7yZ5W2$OWF&brC$cW`0wUKJn-2yVC6v}UW^b+-A(+!IE!bY6^{AG1+81(WPDfbBGh^t<*{Dm-R8+4}ClnDMZ>Q zg7S<%UA(EZpa86|ubSh~f;cduwJ*a}i+5j6Fo{3NI*X$HocGW4JJ%mB zfWT9oW0+n{OWs_LW zhj;Rs-F@&y%yT7vp|daPaq6@MeoT|r&>u5f!FUb0Hn3L}p&qXv9$D92ZpKXO=p1r< z;Og6Z4cCKJa|@4y(?~?>4=+`hf0R#lKf{(6nV(p1juWi3u$LsUT!?-OsABT9$D>=v zsy8$h;2$sCB28elr2NowVhVFFcSa;dy1;6(D!#t^XQW>mTT@&SZ&gLe1w<$lng$z? zJwGf09j|!pq0WN_1a@=Qs2CEvc?bE%1M6rfAk<)A>ya3W)vg$^P03iK-PTdSbFtVsA78ij4z&;?zC9s{X(o1khkTuV zE9p1hD3ouR!u`NGiY!H|EHr+xKHqNUQA%}ZHmMj*5P<2sgy8sbE%(EYvK>f0liK}d zj^<1^srBErQ{x{9+Kd1q>dnf6$M-@q0PUd_3KxQ_UrTs}S;X;bxoH`UeDXgI7byf^ z3V^5UJzG;@NL^s>b$fgL|8ODt2>vBJ6RZLwfae)5^bD6}8M8y5?HWF`0b4`3XF55f z2r=x%tyj-V+r`A!7s>oTsGXv5s_tnjM>|ti5k9?@e1iA!Ho-I6#qs%?1YaNZR7f~C zeP_X2yYtEE>MwaS(ckusN8i>KQn^WID+(l};^@*w(1gTOu)jObewt9(XhD z#Q6upE$C`(Ta)>^8DH8r7d`Xif?aFx@g1F#t*PEu@pXAFKDNnqEXC+2xVBWhJTZx$ z`FF7zlUVaKOP1cZufOdV)kizJP=~w|o$2byd*vGw)X*)T&h2^(`1`3@PP^6Aj0ezx z_Zcl$0?$cV<0eQp$$_MH{%G zNV{7e2Q#q>v2bM%(&T)`8@8}i5QiQy{<G8l13ptI% zEQStV=It510)+}0cvLLwPo_V9Q5yH0#!pu6G{e=pE@u5$V(&W=L%IHnfX?A3KeHtj z#wVYpcz+qDeTC%Y+UNx?4f4Yjt!ay-P@3~fE??#55KzlW%V;^QB!Qa_!kGWAk(Bv* z!b!iDQE??%QakNB`j2UumG=}+;;$}68d?WeeX#4h*7aR}Q3cPL?ki@bkXm6?`V>j&mi@?9M z4_~652EGU|Pt5N6BOX8fD%j?@S8Yp>uIWc3_~aIkTVhiZe>_lVb3?lHVWXFBr*{z3`1T0BIJO=srj{~Mwy7cV*R0+YeZoFxhVtd z(*Ghn*)N^=Qk4e7WYPQi1XR%K{GoWmorsmQuH8d#-ZGQ!l zsGf<&ajk2DAXVOZDg28^&WH%{`iLa|5QXZMe0-|d>1rLZEX!7Y1`Un6mTfn9D_FOZ z)=agS`>}*Fls)dZ?}o{wkD}vbq+--whPAihBu=bk?r`e9&iK=%VD0I%3C1aGZ^#&q z1pd4GI8p?*9~z*|oY3X*J3hsNF`zMI`=r>`B(+xniPA%c`sf0mUGbtQICp_0nI7tX zy4r0RC1|C+A}_F0@!A>k8;ofWNKrtNC~MROQ0T~8zR8G0O6J;LE3?jQ;ERD; zM<|i*8eE@al?Qm8ze(N{b3GZ{9$oY$HyM;J?%G`tusMg_HY(1m(FR_6Lqas1` zSinx~ePmTtL48%P#9x6&%mT9{DyZ3#+;A$t;EOU5VPd}vwCLs5=MfD;b78eY!QGiE zQ)X5IwItF<01Bq86-q$s0_}@Y4-ti$${pg-^IbJUbJ$9<>edU(G7(VJG)F7BM9GOK zMi^V2&L3&6^(xc(dU>Wkir!=_1*d6wn2og6LS3D1_UJ3)$9+jDjnpL1QHU9Nqtv{A zb&XJF4U~dV>`}4B>vi?-T!`>Ry)0X=t>m{Nu3rdr`=?^;!ZLa%fGul7A*yGwetWql z#6+`gm5^IR<8RB2o3SM&VqtAf|&0jz)Ec{CdYZNvPCgy+L zM>#4KO3|p0cqyAo~U;qHJMPxJK78wu;Nrf*!$ zg2W2R!fl@ILh?igq(jMjC~U31o+Qv!&hw(!cfBn!9%<6&e5}wNEij)X|%O^YrL@B35YZ@G*(#|cY_PGG?pl2=i(9xN&(}7=_a0r*zbrS@;o9C{4@2_FRCJA0y z;8dUvISa+ZvfL^Y5&s0}*JgG6${?+ZNzr>9voa8Jl8C+Q4Qf5^h~PLMd+Ev$G*{21 z%9uR!!$IMd88)5C`?G~*0+K+5v)NS6=*Shr;~0vPAex&clxKN>r3;dYj@!;7s%2!F znMy2L`alMsySBe~CWgUHGTLonBU*gqg|bJ(vQ(18dRo>CAi2GC$%1mf7PU)c`n|Nk z?#(4MVf&|Gh63uSV`XgtB{|P*je_FNb#O{vSwfssZ#rtfA2UFzs%XS)E77M3uvIX4 zsj5cLvlXj`)ZQ7@tXL-yl|rN)sL;%nt_&zo-cinHm2--{T1oCC5$g}&fOQCbd~L*u zfmXKZDO|sqtiL@%*UZ%bL1w&V={fkyeS2xFJNRb2F>Oz~55!dZCE4%HhA=98mg9l~ zwprN391<9)=ChufuWaw)%VqW_`{lp)3Gk6CJN4G;dA;tVNCK1epz5)gkiAEZYAt7& z-OFK}p#5Lrq$tXCH%M&PegK6F$ul1EPJ~EFY|sGo7}-%~B2-ri4dXObTAML8tLPn@ z65^{U4!!M*yB;pjxRaxj;SR*Jj@g|PHg@CLDHDnH-q)`T0gWSRY|w|f=%98!u*V&*$^Y^W&@iKVW% zqGt|LOcTDZ5<4lB#%>slOs>hei;o#JabT3RhPD8`<*zo(%eFSyzEsC(@w`2RNVr3HwfJ|zR7eK88DUK9C(v8iQ`0| zeoP;#f|KYD$MGx%ZZ10bLZ(Q9)Y2eJjz4IW0&pbxT$ieybUcd!$9WwTP)Y5H|1Ny? zg8f}cP>@(lOG0ZVOaSD_^k zEf3#6;<}b9`T19pQil#ZVSn^UaffMX`Y2QHm**B#Ulja@0-A`*qQko|&llEY2t+nz zvCyJbJYB-f2!&h~Dr>h?JBS_>zTTbtDX8K}Ir!VQ;J9<5F#~2N{(EH`f3d`;Yu``0 zlw~}s<-B-Tn?+7QaMQs|JG&9Bqi!vfcU>flQL@X-FEhX(&+;U-&ad#BV!>g%TSAmv z<1>%@vZEChWXk!?e*Ic94u`|xcK=OnE&ee`wYyMIZC?UzV- z(YvE@B+RHJKc}&tU}62@zk5G7?P$WFrd(N%R&j8L&-PHOOc=}=a_}eYLTIj(=I&YC zANr%JRB~ zThb7-m!*TNP`I!6tAX58pNeJ#?TKH(zFwfA*~!=1wbud$C(kq$r0aSu6r(3YOwttW z)gDP)<0(FTykh?XnkHCXj}K?lc)8%9Bt4RR&{KO($8^O)sUa=k$_4MA`-a7d*<`<< zWFKzDf3hoE8&vlg=#WW@snPwT=bMKOf7M~e0OAv73VGg%pyOeE6JD{l>E~xt3nqYlPz;js|MO)Npc~`1trw7PuSD8HQhBxKmBPlqk*Y<5Puk7=PgIGX(o=VBs%xNjl-{?8!=#KWw zCAbU2>^~~yigie%!mKo#XgC>smzPHTvrRuXASZS$gZsE6Hn8uQmo)|B2Ow?2UW2Ow zCX!=#8T{<6Pq+4a{8`c@Dn2=?9}XX?KDG&+*;1iiL0NuZK8-$Bl9GAKj}Au=rCFa6 zOMW!+UADwzGG%jiWEBMIefHFaZ@#}g)J^E$=4-RE4!3&ZoS)F}@%=o=VEp$~oRo`Z zuW!vAcH(h(S}@!^OtFCzD_(MU4{nFc7)zk-C;h!#;B{b!^O?gfKE$GZHJFk`b)Pc- z+rW0?8-33jiuM^gHVi#h+%CdZea$ws0ju|89+~hSRd`RhKmNLm2O4$jd9>5j=u8@5YV`-P)eKA!&%c5~I4Pjyc07$|qUr(ld&Fj~c zw0S;VWDBr%X~P~S3@!Dm@PWluv)|s-XJ=@RT30^uPIpaF`v$=zrw65F;_HKoH&_x) z>RfL`#`X<_N0)`5zjt}OmzX+SKHh_3kBT~aj~G;$ zC3C-ZDZkMX#TAQ6oKRp8BWDq<#G4rSQh`nxTK4nuvqbcUOb}eLK4)ot zm$8TRDow5XlX2`Z&yN0x3z%pBgNqAxe6*6IyPSS)02tt56P>>Jk9Hy%`;7X~A*mI6 z{ihT19!Js;!-TaQL+@BDq}QZH|88UmRyQ|=^(;NDwLp+ug$|c+i_Va z>QLuW_WTPAImGML^OG~FJDDF+KZ{3?I=cI;P1wKhw999?c8rA6U=H_UZkowlrrG#j zcIvQPM^yzbVLEcP^qtJDn~hHf^3-gl#8XdvDvsO!7&(^Jk>faIMNy zEJ_y2NrPoar8{1jj7~W|s9==W01X=|^G%F@uRTrZBxKEW|F?2U5RXjHL^ut`2IJ3s z(ludr0h)Bm@L^wjS+Z1O5e97LTJl|-1WLCT?%6f3r+tR|;C6t!1v+5|$c@1ikZNrl z>9G0x-Nk;on~Jgr2a7JjQ?UdKg-F1A^)J!vFgyO7Fj;~WE*`b3!%CZNluNk9T;L*k zLQa9@K{(M95zvHd)G3(D@+JL5h&6|!zRk{*JqfGEZ`0%26uA%U>)6ulyUQL~E)@Qu z*&6(11Y<9Wq*+2<{)~N@s^@!DyX^YS_ASR{)oVj*h2t>lFRPGhm1U2it z4X=rtPQOUs%UJHCj=UAotAhNet}sLxnb`k-tf4E8LI1ZF!2d(sdpbImx6L`;%XYYz zG8#3>EO}Ms$(;R3ZR_Mm3H5&+&(WW;gtnqfo_=hROcMdPmLRK)Zu(Jrljqjyu_7V~ zX*lurjEeJ`8c!6$?`nq!92A^kSo1vRqf$Qnva}u!b4eH$FnF76VMcG2X)R(Z)urII zn^w^|4$x|xRUGrSAzAdTR{kZ2dvYd!mrG| z`aWXQr3#Z{bDO^W95TfDo?&ZBbo=FRLy=y?+l2BH74Po82#z5Y8LhVBUajFWI%JK? zF+B;Cm84*O(#|8mRJ~MSFp{d%I)(gWADRJ`^|E<`klpLh;)K08U$q3snCL&_5e{{F zh&uTdj!mlwR+kmW^^%_gzI>3IUqQK(tv!*9TTAnmXj)A4UrS(RL3l2GJ!BnP-)FP9 z+&AgchbEj1T;zw4JweR+FPU|9|5<;c zgVvv{M)HQKb))2-N=UGSU9pv#WQ&ch`SS!LhQO2~&9`J8@hX5ldO0O;p9(xkgW@4N z@?TiZ$CgHSF5g8Ry!=Up!Qo1@NsC5&BDCwDJU(3u(CtBEnKXa7we<|O(5`K(-SCX9 zLqW6Qz&C7NA9^O)OnQDf3vIuwP&RcQOYMrheUH~L{xH<|DApcu-2RQc$xe4AHwl}} z%_G3bwS6Ck97fHx)QtTPQzZkh?|71fKCPKwsaiSum zj%C&AZXZiVI&?!XKPaEf4gea8zR^q8fnTUK)Tf_4?;u316MDaKL6wUF+MNSWftg-H zyB6dRH{kzWIarWA>`k`2dRw9i7>{u$Q&x4c*Zj(NDarfdC6E=t@f?^}`SBPFnbgmH z9+c*p$cMB96vVeZ$X+CY9o;>e!NXQB!~N(uqRVO9M$AUfP22h6fY81!aKw*-x6i>m zo=UW}+#jYQZm#EWqH;AQv9!-Sp*h_xtW%#NahbJ8Y+ySm9TEmzsKb%0ifmiJhx*~^ zcXlN6!xH~h3cdeHHXUA|?DV0;R2~*4ATIEU&y2I~x1WI(H5Oy2sy@{pTy6(PX~xJ( zyP9k&ySC#W888Q{g$Sd{+JYZYq6YH^h^tB=^Q42wq;vU8)f?sN>5!_cK{ySvFdt9o zCzbZT`|$2^$ZP%F)hY{dt`X;eMTdq?L-kF{8;|R$6~o@a0+#~*U)z>%#Y48BN6+L7 zh5cbMuxys|3EcLr2;;Qa*ktTs{!1$(drZ3jBa<>zCMSgdubJ?$V7&^8>&`=YF=D3h zH)O}jF4QefMAsR)caELZ^VrJ*b(S_M)9mn;s_40Sl_>V2#2mi`9x2Kyls6Kt?A*Sm- zUvmp&{7M6L=s%fA@Z85-bMCDe?Ux@3vPiq<0oMN@Uc$&)=+!z7S-S}> zGci$0b5QhHNPpE8dC)VRFYsr!GS{Jp3PP1f$(5`(ltO|Y(K%o`H7B?8Ln#e5F~D%V zWWOJ@!-RCNZ#!!7+1>~pdSho-HmoZ!LM0Wt_ebet4K0NoUX`B}fM2JDmvj|hVC6fD z@we|jU>l$>j&~N{R1WM3c-hDcefI5OifQ<|1knHAaDt4sAb%{W-`%{8qhuF7D6pvr*^|A7-{!u?t9CcihymeSe) zW5Ar{9~wya@30O5p~X6$6q-g8Gs)yQr~MTa@_5EXs-X?dWj)?Q>~1oJqO&V)pNLiX zgLq%($O9?mre`Tx`hp`!yEU244|CpPz&fTGsSUq9kBL9b0s=xT1sX<2CKT@80wAl5388$h6wuOjsUw7kQOA=+ z%<3mu5`p!rp9H`-|>Z~XF%{($dOS87!gg_mK_jESkkchB!Bk(5IFYvpW#->;|v4GaDpN2SN zQq(DqPq);QF05=fe8(kcute`0q)d?Sx+XL4bh1$t*^Q-z*{~-RzTOHHM zihP>=ZY9FmLQRW|Z~ZY_d89}KJV71c+ljC~uQ|K)6%C{@~(h$-{K=L{T55EE!iIhoAB>0oBBb{9sa~bTPSTxVr2( zZS@clMVaxwKALVj-ubmpPYaG?=-M5T@v$7s$)b_9Yxesh{R)-$B*quiRO7+>tv~5n z;+CHx{buR8KBBjz+i_Z$+D~OF-eDmQ3Zeahr!PY8%)82 zN%zO`8rFg7OWS0$e_@aJ6|b1$2ICH&;1#CTiwO`LwixHcR`*}9eBpgV670$bhnSf2JKBd}g z2c?!d*vPPnhP+0t^ca~g~EZr5W%-u=NbXc=q9f5bqW7cjqdKRfW8~J{SRNR z!ysSh`#y@!DWbV_gpOr4HsdLU-XG!}*VR)@oFG|RYk!ad4ru_b_eizz8%XPcvXgM* z<(P;n3X&X@AyG$G?t9LF#~kE{l$iQc5u^y*zajJ6_v+##dJ1iNZdcmwc?H2m@9X@> z=#{lL&Z}@rZbB;sk<0}TpbI6oySK1n{UULFcD%&0kzYnd%?B?ZOn{AkadVH0$)0>2 z;eMikIca%rAvbu8&D}a!K{Q%GNp39?xIhYvEOpy!CwBnl>>R4yesiLT)+xadC|JTHc~9`P}XwZ60D6^!|wX-1buSC$tQ8VMVC&P z|A&pfZZ z-$V^Cq7M`28~ai9<#Zk2swT@Xc(xgY2$7g?skhchjZMp5yJ3TPxUj9n>Qd|PjxH>E z+!dkquZ`fY^|^Dl2rexoM|uvPzr;)uzI)%kFY}uV)#&*{^hF@{Go3I`uSc$(NejH@ zf`euzgv0eJtH8`BuCC&~k=*uw>tz4`yG~0esC?`+PrQuT*!t;^RTO?L3JT0~#IWWd zzc*WUG%@cT$k(l7yv~1wKSyj7z$tp=XK|;OS2?GqUxLUW`;)-AaTSfUuxW7-eJJgP zevKi#ChnLtZNpvjFX5noSbv)_+}XGe$bTC_pW9k3RA+w$H5` zDvm0SMkIBeX14t1jSnlN(J5r@!DWjr)$<=Y(6%${LAQ^ArHyXmtb;D>mbIvu;srZm z3nTSVz(_Z!BM+}dK5WRsR~@K{G$Kb2Ived2c*4_<^d+LzXmh|)x*j=!H~VaxmNyM# zQ-X&Xy8)b~6FhbBGaX&kBd+KmLnqtJN0uT!x)#Sr>It*yYiv=62AlTG+qDr)<4;{c z3jRve#~HWE1*S|50zuz_yL3S_fTBw+uCx_7&`I+_4?_(1A#tp)IW4 ze*SkdcJm!}5}q2q4^Y=Lzja)R&vCXGJSBCtN*Mk57{Lo4Y}zw#*G4dn-_QRkZ{#Go zpYuHPJGcA!KMlQkOeKHG8SR-DzI4c8&SkJ&I=^WS-L^5#i2#C)54A0)9oaCn!)tp( ze3njZPzOKLL%IFZjt(?B*=9bn6!E{y=l`L9LOcC=_3LkFZJ?|waV$Jkx^fMz&#GR3 zkn}om;=`Mdg6NWo?KKR#`V~NZ^Ur(E7Oj80!0BHAI6OK!x~zAjaUtM9&;1|pWhw6g z(BlBy{=fXp&-_fxpYZKJYb9CSm+O#$9OCO>>U-Nn2Bm)fkHPP}^74wi@4owx=l>bh zWQdml@{MZ0vvAm$yj2cI({$iAzg*_%!#2a++ zxIkx2U#a5)0qyfHn%wO&b2fD%*=hTOX6EHwBD_D;qBqwwzWJLEGgY_Y zQ+iR`obt}HkC7O%L+zs6HGd?A1$Ojr)(c?fL1&8`AC2(`U+}6!4rk~LCW@!a_yYo5 zd_;$Kc(dwkH`vsuwBG0^x|4iE$A0U~ZlEoW?iDcB0TWzm3wCzM;&T>-mwJ|6$)2#A zF>XFE+NFB{!6aHBu5JI4;K?bJL9?@IP!YezopVE5Z7j=f{pKz;KZD#;POm@spJG!c)GqFzTMQt2|_!xp_U?hfiF^%2N|D7Do`AR;iLnn`6 z1%CyM;q!3_ezG%2WM}vpyt8CivM20j4xgnv9Ir&i_eOUWuT=cT?i@R`wo~&cyw%D| z&H5|X)UX5Q+bH|_-$^20yE)78>Uux_cXBl6YtB{ZY5bWLJdHCjhR??#_{q*7k)35D zywpQM#Fgv`yP3mh>CSeV-kJYL=X?QxD7EG|=mr0Y7yN|AvcYSIT0el{oBu8*q}vRw zKLl&Jv%n7uunf6)bn!O6z1JPlR@EBFixutwfDcn^qhr1-ZQH&}I<&q_J(~Q6y|1q! z1M7nq*I;C?S{dlU$wc6}l|$XOa`+QJ@e`N1)t{?b;(NgBD%XjwhMnk2*aZfDUkQW0 z{MI|~yqU$m@0Y=>rh?l{KrQn1&Ay)NzpUr_xk!Ml>YAWZw1?;+(=P$=&RU}Hz^b{&ap$1q{c+-<{*a{L678c1X| z(*28G^N8DjC``3Q!R^?HTI$_DGGZ(8-MmD;$@Q*}ZU?)Grwwmp;Zb)#nswzWK2y&~ zY^1F`K-Wi&h#?37Ve?ZXO8%guV?$FLSxPWzr=D$ww~L+IyZEWS$$4y12a|f2NBgCG zAg4rs#+GEOA71dYZe(ZKh%EJ4nAzqoZWm7*JeBHG`I+&tJM&7l_PhMucCfL7&+w*t zKmV1C&fR8??<8v@>-m5vveXus)$7#4y z`_$hz2s?)0u2{!s>KTZQv>6wo|5(re^!0pdj-*q{Iwb23e<`Uno41L>7Yu}x8jBCs z?$qeI((*$CMRtyExOf}CbfyLVk=8($`W*oNMqiIVpXep&C;C;iL++sFC4f8zpf6B; zr1iz>p|;CE^;18E(S%qI_WP^O!2SZjRj2N>B98!Y5rD@4KK$ViAL=mxgIN6MYL|Wj z@I<$_9PzuCdOrXIdAZ|`J7P@pNLRzWu&+~`E(GXKfSyUJPL}#|;~j5YZhGBK+Fm!p)`gwr`RAWozVYaz%ZuN7QA%yoADFT63hI2g5td8h8;l5c zYRRoTv3J`;)Ha7aJ_cYScCm<(D`YCePBm*EOzK(o67(1gZF~4aN4CuFn9ekFmcO%j zZEs`aN;q80C!ckJZ2llxjr^%M+`atNoBqUd_f2nD-hR{V%Nvd~R$i)Lv#0z^!LC*I z#O3Ffr(S$v`OGs9F84kC@bbwgzqUO5{8N+JbPU!^Pmotk>MV5Q&CBcm%%5E@-g(b* z^rp8h7vA``S8Qdku+PAEa|TYH{pND{xoO<*jdfE58k{w}datb1yunc=5#-kG1xpb0@5O^f&a0)<)bJeZV6C z;vI9hw0I=KU!H2=f1-B*9P18%1J+jPYTK9Vkb(ULfa{RNHsRZ1e(vXf?m%y=)Q6~l z1z`D|-}#+GUiznt03+92?b7Z3hx+}?%Nq3j+{F^^^0)L7Kz(tqMSD-I%r@#w ztnkv_cEXP%^er{(l{sOewuPThYqL1onZp|y;YdEF_#niG-q8iVDZ-2oTJX_N9sRU7 z%2Ok_i8Yb@q~lxP`W8-Lry{!HhKtKBx4eGQiEMe~k#Bgrd`XWzowX=F)pz1*-a~~y-`XFZcDTBorG0+S?^{f;BXUS&VmFVcta(F7kE#_ae_tGYN7e6G-r#ut-8=4a{pIH$U;f4y z|M~JyADaH~zN(1lJhp+(*R4PP7nWQ8;(xguzV4Q*vbAx_Uku!}`BLrKdgG?pZ@u-l<){C{zp%XXUH5E^p!Ei2;!a%< z_~9S=!R04^^50p0`Impie@hkc<<8%rgt4!t$A?GqgBR$u!JSotJ4^QM@S;zxg1i0a zzf*DcF8P|JQ|`=usbew_THgxvtzUmdKMz#$Tr<2jr1@tyl28u`pWYYc2+ zm<`VK2K4GS#F#HJ*QXZ->bZU{0Pqd~{T#a2M)%xvkN%Fng(MvD?f-B5#&7WDDo$Rb#Nhgm zSK-L*%k{|sgVKwCT>$U^{Ydb6bmc(++N9_!J7BfS;#kXvDR6hQ663wjA4 z-`4w?|Gw(xxA*(Rp~(_nPc-aR@vN0UU9G#UX~$L5QEIj_iJ#Rs4zGQ2TGlYeNfG|M zt&o-4(Y0WQXL~z5aGbPX^4u}!Y}TLo%kur-|NYBdcirj5zs<5siCW)6_vSahNq<<~ zvm9Qy!c-f5j{$0o$md2j3{SxDqBDyUb82BXd6{)*{Rt0y=&pQR7) zEdH+UPCH%jVjmfdW}ay-3bVg6fvcmatemDw@85sx4=;c3&-~@@*v0>;u*G=CP2act zjrabg<-dC8kDnzjp6Ae&#Wlx}lZS1R?)c9?u-x{u|IL2!{}Soji~fK1-Yw|1th(>p z`#XK7p@HVs;wnP0kV`}|Wh*hUffRA9vT;(Xgp$iDr~G17k*B08Zt$B8T`PiORuN6a%ppEK3+6T*3k@?!rye+);PaeZHOlZ;bJubF8)Zce?vrzNVWs z&)I8^ImUln=2&a4_04tt;myFkfAO#G7$X;!*cbOP)#(ehVkrKppZ=4(KlkVU-I)A? zT<_`nX#L5beDm(-e(pcoF;PD%H!%LOb^rY@+5NTu_~(x%|HvE@HRVM*De?1v<>z$A z!W)wjOG_JTeT*2#td0?VlaBu@tIMYIv$$hHF-J^GXtYl9>7&-|Lgs$EM*AWfk+%)k z!Y=aCb-S&Ghdp%Gc!a$?nY?39(Wms`o#LO;Z#;Kl9DiUG^Q1W|bblv-(}`6kr>L$c zda({KR64SfjHipgz|3{AnKS68IRlgUoKM6YBY4P&P7{s9H6L|Xa=ZXgZ#`EMtfxDW z?zn?_k0v<#C-fD7_@h`CL*oR1uKHiqh0??C|Nifv>-PU0SNt)n$EnY`sH%&rJHE2k zTy5kHX5fNZ$qicl;Z$d1<#QDW?gHR5fR8@<=>AP_dK2HW+;bZXX?f9$Uc~n;W5Ta5 z0Px()j?ZD}tQWVx?5^tVmz*k#GiEVv7=$sahwf(z%vscqA(*FdHbjkGV~Vf# z%U=32J+jfR=vu{&tl|?elHaXI1YV_+22ZcpuC-Y;}6t zSW`dtrZ?{1{%8Npntjy9nmsc4<|F`*3@plZj(?6voKX1LpZ)h2cOWcmU(onV@A`{6 z;r=5RNEPu&1JSz&C*Tpg`KNF;RGC;GPe!}x4qn-{k2wCz&RTBwPg?g_o)mlxa2z8! zE#_l%E^*=tfBt=|4lx(;G!k81?Qc2O ze5EC3&m91J{g{t%NA%&Id+v$JzaEV~i^rdZ=hJ`OL5-ZnTi)`Pu<`!)zdt?$2yZJl zCj(w{H^$d(w-NLfd%K&56&TTHbBY@le7llhv+N2;0JSKBpw=sfWzJDeooj)EVgPiM3p#N1@a-OS(Q z7uEM87MeHI*k8mx!-#9t7vW?KyNI!CA0ltR;|@Kq__Ar!n8`V&Dz^LXd%^CWd!BbJ zADjY?_H_~wJGT70PCM6H7bi{j_?4Kxj#~~-tFG3?h4>Y&$B4h~^Q5C)%#0t6ql?DbvFb_ApZPQY_TYOj?Rp4`=zBLF3;3yj!1G9#~|lrbcVQk4~|tP=OUbpVHa@(I*eyK43sXo3y(R4 zxlleMNvio-i=Iw9V#k($Pe-|9pKd%IufF$wdp&jYo$grp7vd|YL$~?F#@f!nt%#AM z75}Jt%HNt-N*Az0y6(?WoV_1q?+9}g+%010%D(3hOhA}l)N~{-BV3=3T`APK@ zT`Bp+<=|$~mjG_RU3UT9PlvI(*B#LDrhmN`fQzGt{sjQ;oaQcS=2Cy_Z~d(^-3hSQ z9RSnZM%{1*wi5t1oWf}!28){7kRz{p2_U!i?|Gx8K5r3^{OJ~#oz8Z#;qwVV#tM%B z!~|U@0CxAi;Ql#Fi~)A86AKzdx{5E;F`9f*O}F}MU#aJ3kfnSEv!dilz8H65VkN!A z=6c6Ac8-ecTA_tr+ffp7@Geqn*x{r4xo-FFV-CBv9d!a;_Oh3Bq%hUIC>9#)Y#9^OxIbQeJQe+oTW=V;yTL11niAJn*3A1%Ac z9{iIs_e#D(PP_M`$$M<4=(T;v9_F+d@@~Hw8uH?eHh9N>fi5cGL&umCu{%%Y;z_Hg zjF(TleNv+h;2e#utI0ZVJV7uK;+wUdSvFbb}j5_8Xc|~7OChO5+ zB4N%!iFpU}_)>{EM#}byjX6tTnV;No*PRdO1i%&U0MLZzT(|z~#aObZiHY8e#=Pjj zd$TBSe)F66Z+OES4mvS#MR!&2-}SC{ad$QIq>yimo09>r?VDq5vl1D2=R4mS=gc^x z1w&W(c;f1#K97NjqV@uYFfW00S;1Ph(J-h3U=Lb=vDsH!t3VPP9i}^7)8Gqbn zW0?mhHcU&V;~1|6cm{SZPc~kO$veYNXA;^HLr)=o+d73EvNF4F!@ej-!t$ubq7V+h zi$a6nWcS>2SE;vtgum8~m|D9uF03w!*L>Igz}Af+$ES0#XiGNqyHcZ(FEC{fh{#2; zj|EeW?%%TDxp9q}{Pwgxz?HehmXj*iY25S$X&qdgK3drTnpbeZtB; z>bW!TL`^Q7ABk^!)$31yHrAGbEdv*2;Ep%8EAQ9Z53OZw++q8T|N6gnk&Bc3w)YD; zkFRlcF3a_ee{^4>M;$3^`@z(rTkaUs$Y1@cr|=lv=)X1XLG_RoZ{3Ey&SybWcV!cO zeyjbRReVf1^4qfz{+iv0skMi(3y6#2HQ)6j!_5|Q_XGB#E!og-I-Nwmz?3~OA{Qn4 zw%}x=`?olFZd{{|4JQ`U)-~V?wn^6kB5J%vznWUW%1-o2^g0h0_0_s-+jcwjbYXAh z@|HIvhM2m@6}5i-E@Lh>D(-yl-}8=eZ(U-!wn$ zc?SUVq5JN;FTf8z_#nJ<9*fpv(&u`7`b>`m?0@{nfBc|#0gSoMEzidffrIS?z)f7q zoSo9fx_|F`-@E5M0RQkG{=>6ReBu*lANarruJCCKTnQ5cfDND9UsMhn3mxf3ZrxD60z0Mfu^FUL-;9IxAbXV~cx zCvh)xaC}fLu=TqS^De4~pGI_j*wW>Xp+zAqr_}WVP>quD#emyS-B#VZ<`_@edAdCM zFn;Bv`@$Y_e0IO?$X92@T!y+@zb;nz7 znd^=Tf79l@S616d$3DyGSKpmq2^e9|ZVuLkgx7-rx8481g|JPqWnjy|aR!b)jd^O{ zgW7sbdfXNM&bwA8tyiwDwO6(I`|GOQk*}4lMbmMF5xqNSefQh~eB6zdI9$I#k0gw8 zQ9kUq%gwu}9!49{^*ifw?PvI@M%yl!Fd0W{;?l?Nu zv}LwOO&FN5OpOy(ZQ+*HHMg++J$D&Xa!yebjhb+1CT^ToQ(UA}&CDe4OpY@FsT*H5 z1FT1#0i54?=bfRS z6KriJG){O?g*MozfBxrx{wlYzaO>LFzVNfGQA1iJJQ>j7WKky8z~ZwT)X|<8tiOo`yH?979D$ z7VT@;G49EH8h4SYC)K}5QGD+hPoz7{;@dyWTyuYRP2n<#b)RtNehf2%NL|YpmR1;K zux#J;Lg#|U)4^hbc)HGruaeni7q|@e&}*R1vmNtXH+YhjL+~8~Z5sfKe&yZmkJKYu z&o0J&x35lSxXu|(#P2oTV zvGzwF+>c>q5UFeV!qN(Z43_P?Ug%uVcsf{25Kq?`@l{g0>;jj;9(oPbdA4Jo>jqD< zatOX-plt(Sr%$!Rm~2!xvRMt=J(2dnUG_rr2IdQtx?VYI<|O0iiMZw}G1sUw0-m=7 zkGwEH;nf1#h#cZ+zn$&-K#3y(anRuX)XD_L}gYb1RG{ z{4rza9RNH6px@d4{GjIqG<#=odF=#>L7684@RegNKheQJ3m!9lP8P63(V(QMI+$TE zVVA#Tyw|?&n$Bat&=8@=zCy)2$!ul2<88m=y4-qeT*q{}feQX47C2!4;cbzWl^x96Bt!ctK zBv(EJPO+bsU*hbCB^vH8 zek|*tE+4TJVO+;_y5r$n=Gyw;?AtmQWfWcX{0rS?d+0af$hKrX9z$*0?Oyj-JKZt% z6a90e0lIx`1a2j7%@N~8{)}DQG5=IeSf_l0#ZLdN_3g))Q}R*#&x=R6aA#v=f_{r~)lC!UBGqw9A6xaFTmr@!!pFL2v`yeoh&tnnhiFtjah zN(OSx-4s)sk@`mEflvPN-AZk+yN4cnD4t~@JDlO_Sz-Wa<3I2f06k}y8}=12b@g8Z z%oF+;Kw4XQ@+|pdq}CY#24LJd5GN1flN?O`<&qNxY5uWCF84ElXJ`7_N9+vyxLu@S zrljvQp?iC=!<8+!hpEQHqUFk&TZ=w$Ekwczb<#I*s+a;`~ri<+CMt*+_v0x$O~iKLblRH<{!zo4t89+ zK7Q@na_Y|Ov~63Dy4&kEpx1cX`XA+j6qWSZTU{$3?v?Y>v7I(x@#5MsIYyAC*Kw7V>-KA3;iHWC*x;spyFF^}tc%fO>$LTO z2Vc>`>zK7o$7PIb<7gWLugiNf?AvDYhR6W;~D_H7<@=XKiltw-JC={BI(c-nT~`(?e56O$QL z_ZU_pgX3@KBiXHEeCwOvV3NXJ{0dl;4X*50Vg7J9#5{b-*M-f+Ndx-JtTI%SU|s@< zg(PQs;U5AndIk@EeFkvPTnLvhfBDOIdUQH2p#IV?{ZhO@T_*;v@EAbZ0k)MJ%m6E5 zD>o?v+E8QT)u$`Y_-w^n-}=^r&T0jZ&;IcVKwLrd(hD|Z@pvod6VQ)8{I`L`8#&$biICz=mOwYZK9X*cw4%30Sf1_v5?Bww zTHbkK07q4565!(fUQ@^0UHhJ}3_G;>ui{9GV2X87thtFy?Avl;Uu4l%7yZQ5AZ zmR%$_&NjPG>skgDp2Kx*8^+T{W}kucN;LRcUi}zH7IGYw5%Z$1o&=`!iWPdO*f*GUT(kjTo?=Y4W*mVlxnpYR8`!o7 zreyG4f_A`Wu4>y^v7>33>*1^0EPu$1vn})BQ>;&IIwf;y*+p_AZL|Bdu4Q21Ib7Ga zVLWYQ_8B~_a@+vfMW`)IMn-_9L(3G_h|dQJ3sW?zN5L^{o>M$Ii^j#0tX)&Fs_ zU`{mzhzpPIUD_2>7dzt}0D7r*Sm!o>rak=hh;*D3-~@m^oxc02pZci-^C*?^*N6aQSHPJuQ z#?Kou_Y4A^5V&0%_!+myT-6DKIMa4uByk%*FUrh4NS*o0XZy9I5nK1x1x$-J@;pF2 zIAavoH$87wXP>T}^-j<`y5MUc!ES=S3>-W$);m=5%y*l3%%kpnWG?ujbbrhS&Je)-l~J2UNO|O9?R3 zZJ9>LX2Ccf_!Rr7Fh(1`ZA9IT6dgWgBVtg4y4$yH-~)@(D#I>9m9Cqdxm?RiWf~TA z_!~m;hzZ-6s<j~ z1Fvx2N5%f=CI@;0U|P5IqLf0+;$CbU3zE0MUg?1 zw6CR~3b{1ScDn6>bI^k^3F8-b8h&B7@!2_B$Mm!+8I8&zv~v~g(uJl3Ry7#M1D|3a z&W+pD{ES%`DT9c^clpD1w?AwNH?Uzb7hyjPWV`D&SdeR3g*FWfHT(^sc*G=Gu!yr6 zHXhp%OUb$~V-OjGjbXENE}@F+RGu?%5z+GqkvzYjMSm196_4qOh;z*=&T<+OVatf- zD*-+1C8(0T_=AGE&=t*jzAsU{2%VRq>v3rP`J9R2bJ;uwaMxXTopVP3CkTGw7k**) zsZV{1`ISv>^-ajY`cJ%@VDg94geU2I1%S!FUS_f99RQ#C%xBo(bz<%6o;v_|%cXw1 zuYUEbnP29ekrjLi4rT!7YEofFXhkinK}d}|}fXhPQyi_p(h ziE*tssreByi?Q=l7w4`bF^&~X-!Yo+I_#kzMiUF!+kq`R_z4+=Y1Q^&J!Pg-nW;4{S3A-m!I@dFU8U++p9qvK{>bRD9z@7yGs$ z8pwbmgC_=c*bXHYvseztnD7Y$gDTb^HN4_OK)axFWT)}KhR>>1%@{@72YeUDLtP=w zx}1ki2?HaZV;J@#u%=&n_VHY+d;g4uDgThvDW#0 ze+B>K@H@p!-i3QF$FQ!wlXfh<4s7|dUXS&3a0|p!YGB*_MgbbP_UV|2HE@p^v9oMgzCd5=hlZ-eCpfMjKIb3R0Uj*?r3;<95Q+hMeBdhpO!#>R0FOxX<1>J|1K@C* zUWl#}0|&h$t)4yD?YPLQQbxDxMl%qr^+t_s`k4W3_&YvR!Igj2=RE((qq~dWG?Y}f!awO(UHW-Zc2tf?2aG3)y2AtMp zerqFM{wL|#IHNX(i~MJ#&(M+`X_O0glo4HFyz^y0;hkcrwJw-MZaN47hc7wowkm?C z;QI%|Hq0A-OTZoyGWL`mkFrX@2+}ll(^boVRVFx`G*V!sPn57(Kfv^KRY>NjSJkcG8En}chmeT36ayfLd zVf)7Qw)X?qoHsf-xVj~KC27*v9U*Yu&m8fLs>2R!hl=PLBVKyrdCaKvld z;$h!?=r}Zo9U7;K6w2(7I$rBi+rB})jhu2VeAp-qx)j%R!1in_N8R+| zPeMWppAy=)eYnHcx4p}#$3&kIJEn&-60>qXG9pSq3ggaXB<%zNbC-D+fjhX{aThdm zAKn3=7yiXXQdITH?85^OJh0c})Cavpea{6|YCmQTW-B+I0k6&*xAa49fl0VZoS}N# z+up`4Ec>^={q4J#zVxMW?EA`Bz7l&Ooz*($4gj4D2)@pMp%-tz)O!KW^j=Kiv|2R4 z^j!?HT6?d)s!V4s{doBwYPnxwPjar03C7zzl7}UqK!AQG3SmW|Hf>*t+d)X2mm zCF8fk+Z5_xs<*lksoJoLModA+vGm$(g@3w36RYzQ@C@FDK86esu zydK9oo}mNIjxa_8yTuGU$Y~o`a$`aS4;-b4wNG#%Vo|@YYy9vjO!NV`fY75Z6QP4G z+QL8@7tC4|Bw9U=uwQnK#||ZILm;nq_lJlAd|*XeA6fV%u5xOeG36?a1Q@O7R-w=R z=WbG0S}IYq-{i+Rn%s@rGO%Ufsb(O?T!CXhGj=x9LX1HV$YMv+gL6W2u=e)Tpl|y4 zU&Z_sLWw_^tQPwg_Ayd)SIraS)*b&Hfc%n^a9+VjyXan-Kk#0U(hn1EOUWdC0l&~~ zM#sJtocS1|f!$(;9ptnPEV(fuf(MRLgncJ-m`*tu{kpF4!zc2>1W)v+%T4HrPeBF= z54x9v1Pf8LwFvtwymiAi8pu@{o5~2XxDReypEi1QGI(m(rZFST3d(ZStQQz!NIOFX z2t0I#y>O^@ssp*K!ifpJlq@FhxUUP4Id6!;C#LHWRL(&(SCI-AAL)!POd>B^c_JVf z67LVX&>3?cUD@Ah&J!>7ga4{my=wR37r&Uve|!e;BOm$5?k#V5OWgX;mjK@PzV{t@ zA7O07b!EUa$?H=fUs)ORZn+E@>q1W-FJ>2viTG<6P=-A>QG?Df4%CjXkN zAI|tRAecCp0Kw+YAd2Ezjj`5hpcMja4ZPULu<*_%PbLgSYg|Gd5oIKhv7@V~ywh_O zu_FZ9bVBAfGX1PKZ~;=^g@Y%IFVeFc8+i1r8zy6c!Q_u7xaP-n>><-v$RTkAJY)f+ zfpXRkq*$pq@gyw9W& zyyAy}+UI~n*7waJKeY((DZvFi@Ku7ukBF))%3Ayr<3IoMXm-W{V5xnrR@exiEL38@ zoFvOzfBeTu`F2fHarlrQd5Lb42W0wDz*{E-;#uZ);0g;(!AAVhFB*O?VHe@5nDvzW z5=;d|WuG=VY#3KH{E$(jr`qcUh+~LtSna66l;NRku<0svS7M%^sYbm8 zu;w57S|5`UU67=XE)$Zk@b5IY;o>54E=D3^5(822nDgih=di%=*>e@Hn(`??zJeBW zBj!WAB%Md5c?saJ{o1cx`Ot?xwCB_6Z-4vS_j&{Xy{+7&3_KGv!kZNO51yG{{Ka47 z^MB{>fB*Xr{66~8kM1~g#iXAX1Ntifs?T__1rvYn0H`_UIG?B6k-x>2G6> z5ta8E%o74RAahmLT>~RIISSQ`6A4pi0B$j%KGqIXj9$66_y*dnKo zn(3!_*s_=yA~$BBi;@aB3hmK1H7pOJK+zX;tt1_jfmegJ<>6Cpih0?}cm~f#5Q>Ix z|IJ3ASeWP9Hp6+-5Bp^(lnV%r4E+&9@qiB=a@zV$qWlLl!kwb-#5$_+(_<~w%pDEO zEudc8!rrsIMBdd0>c~C)seX>`s_)T#=K@TX6D*6iddt9;fhWnp$#La@*T!KVXJcP@ zk!`?TVU5GCeIOGySgJ#<`3=?L_x)w?Q+1jOWlOHF#yQ8Vs=k|ygOU29HL^jrfZ>+R~$skxwhA-ALR=+qs}&c@P)_gI@iTGh+(8WI%1FuS4^O9zFn5 zTo)ZaLQruh9ViyI>$;$6M*!=G{p!fdMPSe$G04b552MJlYDD>Ob_b?ADSayZ^jJ$Z zyIsm5w}4uyGxvj~%6WKqv!Rps)$k0s{*iZ1ac#J`4XK zB{u}0JqB?05q&WbJ1WuCV)Rq=;3Xtv#fudQjUVc;O)M(WhNyP%phKBfBgH?86FJvG znhs>g(RP6!rnMM+5vE5CNR7x1$_UV%zjWd-M4|@m!4z8TwukI_-+3Z>$pa!NqfcYo_RjOBp;rO<{jhQ*OITP zzvd~)%Parl3^mOQxHCG;*W=Iu{rcCxzSl2kJu0yO^rt_)d)K?(Mf-{_riQ*x8raxY zUw;O+69CtryCY4m0`rziK3Bm@0J$50cL4C53t;X9;HNiRp6MlkXS&@bHgxG-WkBd| zfGY=4U|H}R`;L9xJ`=2*+}C7(@3V5_wjB&`wr<$qtQ~jSAb18!bYezB7cv&}9FqcE z>{uJ09U`*Djxh`iwCeI!MFj1(g=$9$ zBcfavdr_@rtM>Jdf5kPgCpt(RLsML5E0?EulDO{yGG-O$=%e@pzsA@X{I#swHg9Ou zmZ?S__WPb+e0V+94R9BLo?E8Li_SF>InyHmI0}<$Q}6Z3KV1NQ z;Z86A3r)Q@P3&E~PmMdNc?^J;tQS6H+v3JDaNCWkZ`#g)H)7oZz>EJ5Jh!6X+0XpU z&+sP8Gd^u0EYJM!Uir#b^87!y|DW*HjxyOkP_0E~G3X}|lsBCy| zgJG+Hp%HB>1T*<&5yQy3M8WSo8^m6fzzYLb3m@;(nSDw`-@$bIs2r8@5!e!Tw?Q|d z+wO1Fmb=DI8Hq}Z(pyZby?!K{8wtQ}CuwuT&}>A&Ac7xIEk;bm$DZR2+o6z?`^b|F zjyh#5BPM)Nx_;0Sgg?o8JR{%59C{d0??Vkm70beo@#5Qt?GHzx1OVkx*WGLgpJPRR zj9j>{bdSDM;8D7)^HRDkw+w6rC8QO&hbe{rCz1cU8nT zujf^EAN$zHc0B*D&j6n3rGN*00pP$3F!TsOoG6gaxdw!0{f9m80JwVf@%#>8I`H9x zQQ}>WM_)LJ(V&I?a|lz#m=YyCC3r*w@EIvMcK}sW1+Ue?Bgh~|1!7q&7uGxO0T8br z$P2pcyqO(qo@$fWBpk}vF^i6?{(w@*I!{VVh@syaBPQP#U9y2KBG^q&=0@r4p(m;7 z9wSN}ZzJ$1BWCCVF7S@W##0BQ(Sx4%2Ep_!5`=68D1Y$>2;kwj;X`E=S2VR)nG1g% z@BTQD&@0=vAtR7kN=BpG9yC7PAZmpic2YZ)iV?oee=gSQeRQ=aATrWAyOuT4Ms69{ zGVs(h;N1=yo$eN5xSbG+g=iKq9-Gul>BOz6Zo7;w_OZ5WJ^P^Db?t9mTW@X0`o=5b zFjqE-p&y6BjCf;T-Q72{C%rGcrtp;DMY(Ru8pN<%<9#SVbSHmlt6a?T+w{zalv#m^cfTXtIVBv z^FMPSZ1D*|Cja{EAD>d+@%cYKtM zVq?~)E%u-P{O9+Y{Ga(HfNb!uc*QF;N)Fr+;0gc!jyvwqb2E9Eive@|*}mKZ;h=uy zn?V`=a*=~HXbl#|Y|sWj6Loe=agv_Z0FI0i)QVrboeWp9g}67M*FEfQXfavgGc0+9-K>(0 z$TkAju;ORj1wa%(+WZ<;t!tOkDN~^z+d$d~_ERzGE!Xw1Cp(y;9X!W2Gw=9@#~_SD zdI4SA>e6mni$kI9^jPfdxm1s%L(dZ(%=Y9$xmESZ&2uRsTVJ*eTwVrpB-KFb<0{iB@9BUfjb2iRe!)eDCbiykcCM@X=Y9#G=05@D&Hs8=T6_|axe^}q zDD|0M{uh&fUIM7ctFP)&fWV)QVB{<+rW$f(6AY1|1~h- zJ@(k6NH49Z-|4F+aDDWSSn1Sk&`T8-W?E}iTO1x}GzPmO!;zaVh?}9>7egQdI`Fn@ zA-19Q8@czY$(^T>-8A^*UnIp{{!6{-cj%eb4J)^kT~t)b&%LpIs-EDm5=|ERC5nde zb`+>=4APjYqte21tpn1N%|Y0p1lFIdq~KdC>ujH}fr25ayo_A3^aAK2f2HUu>bp8a+Id)vKfUF<2bc+?FycpI^0V9UT$&Oq*3Y9RIT6ttw&-v2=R zxA4H9cpYTn8cf>-yxSZ@OgFa3uxis*b=_3VnsLBEvHLOVltJ_S=W4YVK4>(?EkFJf zui_XkeQdw>@jrX%{$$HbxZClcY-A>&=C)VscjOysl@)K1UCFWyXd$uoaUJ%Ab&X!A zmVQ+sHyu_&L6mElMR!(U*9!p*rG8TUTK~q|-)C;1KNh*DHQe*ZBY(u{(SVxPXS>{u z?vKBNQxN(V#ybI`OWftmCjgoMoM|q!)2;sTR|azLauYVXJN+1Ky+FfQe0&3^18z?*8LH{^NYB@|+h|=+^)JM?UhAD_r^a)qh?9 z2$s(P@`Zp$9(e>k*25W(0POWW0CqOxIe!Kq#hbl+=;oQ4S+RT6qXDuvW?JAFj2^gd zV?#WhWPrM~a(3pYOx%I#+WUvuIb_j!RmOwzVW4_*W>$J$SqA3>< z)1bj-98kgb!s}W%4iybqdk_4^;s(#QdXUwGS37`7>ZFr$+a( z^yijw1SA@^MT4;S!cvWOlRUb6q$XIF(i5Pl#!tnWu3;rH(bR!Tic_~RD`**2HIb8- zRF@>JrR?OECpwrcipB@O;HQn}>T-0^d39YK9`X|jxR&e$d}D1H*fQV@jB$2q6cz83 zDD;Q2S_X9Y~F;8A~P`EF$KIYAJA zcsZDwZ$#WZk;v6XmkKT20T6dO%f>mM{L_2ScorZ|0(|aspF6wnzWc^piBAAx;-`Q5 zr?2uDwdPjLmDV1BY~?yLu$=(7&cvNkrV!7&AH*TMf zC#AJquY+LcVdg?B^#{-FMIptQI*RIo(LD7g<-GQYQ#vtF5pL|di9jMqGO}?PL^tulMr+OXFg7_rf{RS3~U*=I0Ivloq$|4um-;?4`vy%jG7;E^9mBY zA*xMIqRd#m>ggHEEz{JtWSI?^?>2QE;7*A;40>U1t*{W5X2)D05BB=_zxGw; zT9wwyW_JT7*xT`+G~}N~l_$0fay9Y=VOjBiAdmkUa4uWC5xd%>KPC&47ru}CD9&Y< z2rP zUzIss7ka7LT18%@x3=?aZm-sKb>+C{gVWN~GkgBEfAwrm!xsCNflJT8`S-qCK5KME zHAdQc2NlCDhM&h^gC-b(f0#DVv=urZ*}51v`Gd1i9o+CVzaD;34Ab7EY{NQ72b2k2 zP|}l1hGQEExUu6uHXMtOisGcB7D4)NjM6h_JN`Qp)Lui+rQ<(+np+6H^mYTC#oJeN*h7-qAUBU@qf=J_L*ZVosQ; zzgvW)$r9)iaUvVXd+X-CkAffihB^~VkW8_L+yof!vs(L!{i1RUO;Aj8^y=hPt?yB>et1GY_+=i(hJ==$>($<5G(bO4N@M9DVM&E=`z|dIqgiaIL{!1 z)VEE&(JB(ehp`WL#1f=M`_+eDQT=@hHYlXeaul2w?E3gdXhYSQ!fYXlI=_<+amDsEWFP!St1t{UB772ERpAL0ij^s+kVZ;z-Zf@NHGd@~G}$vW^rgTP+fKvjhH}%Vsp4jR@ z&*#uvlBYuK@XQyD6Kt9SKBkcNivw56a8-X*F5})5Ru~}dS&%_F6t#&J$JEzP`R#*` z(kb=&wd)QZA+zf%<{>KXyb4dq3%t3F4Y{#qqbJMb7X9o|pG1cWv^3pm#J?*!Qb8e= zp!dzbCLz00gNcn2<;)YqF~W{EB5n#TFx=2vTZ^0qo2BdKCoe}1rlbc>ZNxBkS%LiW zmYP(e%H8YFSp{+YuLq@8VX4>*^WSDtLhgjq6}N$?Y(E{(ENz0c7&ae`vo%jSc{Z^& z!e4ecE2*b?OU* zP&js+J8>TmEY4jib|#SpCzFb-hmTP(as*rYRJs;2BmK=g-Gv?r(=gIbt?}c|#YO+Z z54@OnnX{PF7%QYv;3--Qy83yIfI1y9UZi6H8{f>&7|nQHq?Ws)*Xdm!e%(=PwQdzl zxJuN3{{8q55F)YNN-Mh39QI;{a3If5U)=GytML8NtzN$NvlTZgm4!b0$_8WYk>Xim zq)-5E?g%$>c$kj4w)5bJ%r)FIb|lI5l{)%)!gwZ+cQDmJas8la#%%7H;EQQeABCHO zstS~$3-$$vuVLZVNY4k7^S_C~0{AS{DoR=pY62%lI^uV3#+AvqX;O~2Zd_u7Mp9n) zG9kKdh}>4z$T#7VP^~HxF>Z~_b>v*XQu0hUuT66$pY6>;0&XCO=FC~<7G}nLcM;as zM(GRMHZ1n=0BL`#SY;CUhW)i-m9W}GbsVnY`LiGn0Ba%4{gT^5ssh{qKgwc9(+Y*V zTm0ykJyKdvvX{HtI%_q7CglkHE{Qv<3@Q7A>%|*6Z}IrB;L7T^`PZs#smRfg+1U%D zx#tg=Rx|)jo$cFxsfj`71v0!iJX6JJ4V~UXc8t&aL4{K005kJanBHYGu55;6Q;)d` z`VijxYtiCs^?g{BkwNy!!)J9Q-$)(q^;#UeN6&|zH;@I4{}b9}%X9NKQmJwpTalh= zu@a(rC@{aUQIumGgf?2fr~ErjA3a4SnBw6eQ&aAh&xWvmepjQHy3F=oHe>v3-w4%$ zM8_P&FM|RxLdF4+LaGyUo)0Nu`?^0orcLqJh)Z~>e){2>=@q>0gmb?fZgLNLi=6L9+bv@z=7OSSZuY3k-cM`t4M!;B)L%vDJ_ zY<0j8Fz`&|VN=cnd1tqo=BWpvN6pC9KI`|a*6NTFDhJZD#M?$gVS~`sIETa_Ykqy zYm{^IA5#f(wO3OZ8g6l?!no5V0n*M^YUB*# z@34ywJn5SPGvK^F$b?hS%wXBwWz0;&1#E2H=1%vNL@H^;Q&C(@nVuK@<0|txSRC)k zF*dBW*9KQ?Gq{$5C-F)!i3Kq0P36lM3q@l2ULb;$I0RK=sui(5{dUF;Pr z;jagDB(GJPAM4&O8xBa+>JVk$wCr4!4n1H+R=73P3~%^r z-gOXBPwL9ZM5hJSr$1z!)_r$Mlzc|F;IXD~adr1q##F@E4v87T*eodu566Lj;=NtQ z*vh}|M~@%2oQ)9Sa~)ro3Y8z8f4vwRmv_rqSaFRl$qNNn=C$n=yFDTz&HXS=fqO2G zvI}fKUFX30$|9@a=&JulUDiso{k2`DcC8thvto@G)Owz?06Q2J{#VdvvIa+X^Iy~0 zYZ&e8FCCwK5q%OFe^=~_$C2lwbE9rUeXEd=fePIct?b2|z5@v<~naL=~-nUKv%S0T6DdqT(8aIIcoFZrh zH_+NauJDLN(OWyoN~~Ip2DgL@GvJNd9TWkfeQy@tsehSC_&ir{((pIT<>osk(s{1t zv)IppS9ieSlt#Um{uAfb`wWUUO9R#bL3Fd(&D^0!qVf4YkO@mr8I5%fz6s-AJ|Dz- z9UR-q1ZdCjYCi#wa)3N9kArb$hBp5bOE;>Jw0*YXx!h#egC6B?a`5W>e6c>FaP}{7 zt+^#sbL1(Zb~^@Me{kA93hNR6n4H3V+A0rxcTzC->*ESWpXLSJCix2>Xw3q?j!`p8m#5xcdm9?Vs@E7+dx7dKi#*3AL}TO z3QEs*aw2ahs7&p^%l*(h-#U6D)3UftVd{YXjM(m~&Q-8g{h42|^)Y$du%6?H4)Y0B zNZC*B6Gl(Z%zgzAZorMe%IY(G%3xdT`2Q@W+!1AJ@Zl^q5@(YM6h(j2#amL{Pc%=gDuda$J>fUgdgk6Z}DE?$jk6_%#8X{Yx8rzOX`+ zfXtwVSumG}=n`W?Qc3$pU5b&{6(K>|LLJ^_3Rmqu?U((*T%NaCK?oV{$xgkt)0M-c zCn#9^Q92oK@Gg1|9c@c|4t{hKuBo78%uV6fbk~3GSuS`wg%V4#l~V3ilLPzdvMgb2 zMfz-V!r6yiqKVoXtG^lNy;!I#?ipDX_ii}CbpfFb0m^~Xtb`LHdcL&$Qw4v6ca$TW ztbWCV1CcFj=>(4rj{i#<@uBh@x$su>PVS_A{?h3&0| zN~m7lPls~ygF4jNP8Ykpl)2jY;&V&hXR&+GXNGQ}g4gRU!rgdp{g38>KhI$@8^p%u-oz&nJXUD<0VMb%9|vD-`TfIona(Fa*dW z+^9(9KiS7c$)D#-66<%zC}gh4S6P3&Pc+r%N;{@lDrWYG@^a>bonU`e}- z#uf2&iEA)UN<()Nqk9VrEV-h9*y2N9PodgskJw+IU|Jty|L7@(yzDeAnf}A%wBXgi z;`uU?3SPnH@Cgnvwu+sA&qR$PnDcJV+o$;0E=WIZN*y>a(s{UO-Dt2v zAxXV{^+6naf!7}(HS}6}mKudO#R)rDL#*O}D8}l`Pp$XxF0KtwGj5Ms{=8i3K}P^Z z^aY~*LV+KZT{tS}mnpN|SAVvP89VGbRk(S`u?)I!#g#Ox2CX0YoT#`mUFDAeXmP5z zd4&P+37R9(*mr2moOLVXr`|6#;~>c3(5}@?b(C@MXa{wTdqcaMh#i4>(ZJ0v0f-kU zf8!O8X54P@Z7RYQyX6{Xw*S5*4=J%axn<|q`_(#4C|GkDfSbmh;TEt*xb5Xh@)%c2 ztOJkWaa#y=&=tqg?FjD1hugb+Uefc@Bk8Ck{l4^?{Q*+$c753#cgHiRJTTTU36G7|qip+fi zH}D?jnHR|=nYS~86u{ca=0t`qP33^}IdE)$t#;e+rwS~BQL4LAlTV>7MOzepqG01* zR^{g}&hCAky2s`?H9kgoFQS>SW~4bSZ00Lo8Sv)5910Wu(^GUQ!uzQ8(*42nrXe;! zlezy0V)DPC-rCna4YQkx>Z?PacDRrT6mLK25U-C%n9nI>?D=c;SlPe?pDADW2nU^L z`Ve+&+?wJ;z4CUiapLb#u9FCW9rK+A2PK8c0)lMHW)qfMIb2ULb_sWQ7;prlp!G$0 z-;)~o-7{bNVU!?}x)KvmLp?*JZ^!B#Kv`^05mnKS;<)AcC{%%&%eqy*vOG7f0~;`K zx4ilMRO+uC+e&`Pn`Lq%cJyC&XI$ER>P2%wY+#kwd_KbK(nLnCDStT?G0j(bcs0er zM_xI@f~#0pvS+7uKue`t&J4ys$3}Y{((-MQo zoff3__@1FiNBlkiz+c;Diy|b%&JTJDgt-LtcH$~|G0T3kRi&V<0O|vI zw28|_eMF|Pr*jF?hZ*gn1pkH{2`kP<_{|Y$&-OOy1jbVlWyw+keDl&^vn}4Fv5uog~SSRE5SKBho~tgc95r zG-AMYKO`o8)*jCFo9L8?z*=HK=D;=DZ3yz*7sxXBr>1^NAwqv4&>d6fcH4L99i@tU z!nlm<8a=8ELarjFVeBT(+A8Z2UqRnmZyIfb`W{=GZHZM|K1Us*WDe(AH+b;(05y@m zf7tl!Qfc{i#>d<2b|T$-`TFqkHCy0plmp9FS6Hz=2@s0E#KX-{4!;n|uScd|me0c8 zvC47`nRv)WRuZ*BDA%o*S;j;qK4%oQiu~Dn(>B{=@oOr-nYy839qWXDit;1|Q8&LW zW%>?|9tmKMKZGRYxd|R*1P>Gg-*DXZo#J?ED1XCKzMG)1S#Y*boqN$zISA^A7mr-% zY3!C2hXuQu$qB7lncUo2HjKoW1)k=8FfqL5xIM&inaQ@dXIn`DM%&hvLo)gHI;M>a zV{ystHy*BjYcYK6(`Q)i9S|VVVdSjwFi;-v)-oG0AxK0%18fH$lLmjOtO6Ks9y*x3 zlEYlI-_DLMTO!5zBd zs{r;^3ECKwR)4Rmc!l0bmw;7Z`gS&5NLAPpJqWdiiRqg5P3yHAJN62adMM0$4NjCo zssaEvPJn{I0A2sk7+S)G^*v3K1)|G)^hepVGHZ)PcJF)d2Tm-#5ZXL^?ODT|Ul76P zQ7xDlru7m+4gbadH|6!*ZfCUhwGOv_5Fxp&@QYPdFpkO3P?gJ5e+PHWWN7&>*@T0$ zM1GFx;cX3N>iHjy<%906e>~$WlVXg%TSieoC$9T5+r&b?-TkGuU4SI{eeX@t8;5v* z3!~TDp@6q9_PASVbhru_k0h?AdWCN-n-mPWgnPKrYgrHF7wrROxBNAicd5gswRHZ} zT|kfITF~V|F6mMWW8UM)l^KckTP6*lQL7fT!Z?m#mV)`$0Utc38e}->K43YY;UtG_ zgjAFz%GCsHP~{?t&@husV@gAc7zwZiPr!n+y^J6hS$*#J zjH=3~rL+6P@}OF8gQA3HbQJ#XBRe8^Y3%-33SoJI7u4G-3g7wCHMW+cBb?1U!_j(Q zb$0wGC+nPZoiyy%SEjCnKa?NU=h{r6*dPLbPPCJM1hgyn`iIY3Hh|!a5Hku1o znY=UbHw_j!rX^cnj%+uW+W%G+HRQa$mq|8R5cz%=?&p0Rzeh)HZuXp<7Iqr7l6e!ku2R4CNNh@#tIE0aMC`(&<3!VY zbcxL9&>{!GjwIbE?Wf^X6j%=Vu5bFscZNW!1Fd|JBb%JuE{L;oMUOv=7i)}GbDS~E zNgfEViEB#diW+O2cywE^6ByDk{OTh&zu;S^sgYXg(K=ce6c|HMvg2zqRNACibnE?zre&qi%1)72Zm1V76?**PgPU=Xob$ z9sl_RNafl)eFR6L7aaK`{wKqOzPE3-0p2YKH1fhE)+E7!-h!m2`&<#R$&}2Vp!a)k zaW2A$Ht}9wqO?%7COy<=&T3opIn-(7kJNi|dYJ$zliVL0T(QcEADMs;JZX*e-v&+m zi&}ji?VZaj0W5Jf(vBF>;7GHR(?oaZ-$ntM$XGs2zJ~eBsjjf@?8hdh6$+_6{-EOq zVG$P|+cDiTYcF|zmE(9) ze{7ovCoT6vTx^y6>fZRW`GUSiQngX0CgBsxZd6pn?J}#>#{2Bn+;gHC#=%RPt?aTc z@g>FKEi<7uA_kJr>`c z8k8?i@@3sdeYB!ebWZ$F+vK~_BlXcVkTo{jVRhZqTv%VK-GtR!_O^M2#(oP+r@c2# z9^tW)wK|vQ4e<^a6LOJMc$FR0Y7Z=@Z)gqfxYq&J%FQ`Of}D; z*yS*KX9dNMjv~-*#N3xsVv{d-&U-!gIqb_f{t%Beg=Pj9KH?xYPg(dt46(mba*;j& z4AR^UJLe!1nITmQ)8VEp$vNN7Xr)$Va2K379B81^Q4q9?RjN6t51LEMFYU?`Fn@9H zI?+Ldte__TG+wFySTW{Z0R()1p04Jm=)igM0UN_(x47eJDi4R`Vh<6|&=f}Jojdtz z{#o+Tu78r;8&{Z?Vwb5r&v{_ zOLY$#)mub)E@F&SmljIn)^P1ia}SpV{9UzuZ5x~Mk59qsU(p%xwn>Y!&W_xu;H3@7 zB$7?gUn}7p5aW;sp_4+A^nRc!QP=;6At;TsH(y*L(U(7=M>#I_M1|i#d>Qr49;9=LQdceOCVh z!cZ4!7=Pi(gWh>MM%4ZMckB?`+T##Mv-jr#y|Nr!n)b_-E7eZyG(H6OuW@&TW%S0+ zH{;-V!WkZc^d{^2ej;E;HzZ(7^FMu)kN>?D%?6x8CB>hB*8AV-*p_g&mlVvwcjkLO zo7s`*>lr~`GD#hO{pPP?qmSw4lmEw5IVXHfAL6@oKrFm6lU}y4$BpxU*a3CHEh7;C zG`uPs5iqU{>Q4mUAH@Yob^|3|GIp6zT8fUkSD%MU6SmxWbjisKz1h}z(4@YR?4ste z4xo>&W=P|$GN^ssX-Udfc-6yKlp~_?sJVCYdrjS_l9y=mbZiW6XM-4 z=9>(lsjIqHuu|cFqRCOj>*V;$MBIr2dtPbvN`)&3xk`!0JSo~WJtsl6%!^gtaLp{(;K$hQ(xS`Zd=8eRS6j1rxtf#!5QPv$@EHYX!%h zFH98Ur4>mInhN>vg6@(M^wY?mPn{`yg-}>{4fYi4Lwjf-N+z+T%~zWzKl92{zUuPs__rbNsGTS6u|VVH@LDo3AYx=U-kd#tcu>xWb7Hd`1-5k zf#QIb`YU=yiQiAP{M7GG(^wNLDP(40*F*b+}tUw#MUt7^kfKp#u*VTwEp)1G626 z#4eQhlG3a#NaD*2{KL$E^?u0Di8<1U75x$Rx9FlDkoD-x6aC1U_8Q_ev$y+$5@Nk8 zHDkigu-A2a-__}gw2q_xTQeI^R15Jba6Dg0kDZso^Y`MN|W4o)a7C&d{l?)33LY59xC(s@!2OdYI|bSGqZ?*@l7o-!_r zVog-$o~*#>d4+mbUH&Fc^Z9)e1UM|7F#*`gqN~bqfv?%{W0cqb^eQ3`~u$xiy0HF433|A>EY@zv@g5&nWm&=!`Z_dv%pW;iEgL0kZ{U zP9-&d3S4C&Nhat#*k(hXRNtaY#c2EyABWoFs4VmH(Wh!l-~!P*C1R+C<**V3N6eVm zM_O99VUXB^dA0Ybohw~_BCq$b&kHI)6s#ucT4XaQyJ(cjdep+}xOATKtiR$R2>Oat zD3+<(e~|pjf>$s_#VOi&P}NBJNWt(*6Kci2V;gn5yG%!Eu%-R=p1jkz%TG~wT9E== zS!?-8QH3nUB8O5SFe@26CS@C z!4x70m6tlr?tBL^V#`)koGpwsr^C{>DAaAfJJbtzB+7@sb&>f#?kT7`;(RmodEzj( zguaz_2B@Y@1&Eu*l3uyH!e$LJPejd>?Hz9+1%}Y=ZBo?XODQf4^gFmH8&Zqm>?VPttZW2RC zGjXmhQ!yglqx&^yM^|@5UlEm2o}8OxE%Xbc#OF55s!4CLqdV`JS~Jn9NzMu6-s|%M z6k8L#(z~XA9H{@<-Z!2{8l5zF${!*(7tkGQNv3knm5VCh{CT12Cg>%4Y@@8!^=jc> z5L4mZn)-iTL%zEjsQNjuQ1$BV$`gl_-=cx(1|RA5d*~pwSx>b&o>=&#)eDX#5GU5r zhK($$uu{)V5Vf@;NP$7oV1myI{DQv?KR8gtq&UiIvHK&}?tQvP6NR!L(7x7qM@|>j z1Ha;MYOFA#VNln7S8UrR7A3&5+>7g@VLF*(oG*)y#s||+#1ppT zd+1jFk@q}$i+yl=m-Y4|2X$tktItxW?MTaoj;`8<#H~1smopEyWp@V8n@>USVeRY9 zrvzEwML`3bxjUCps;K|5E;{E7;( z!$F^|>_(0bQI8b zdr`HFlu5H|8C&xSzVx|l!6e2T<9+_bjKjUAK7eYsJcq#PW5qo;hKm((fO`j2WhC(* zY@6_t!<^_bWB9Sb9dfVvH(YTm+BYh1vp+=}S-TH&V80hqg#y9{f((dE=~22KX7oa1 znn1fD^J%dMrlk@>*Sf-lwXyGGU;U5^9BBmd1&mSmNtG%Ec1*M1I7~J@VETf67C-h* ztCu~ay6aK&H?duZXY;iPaM8qbQX%tRoh*rrD^+FPpC%8Ukk|1N%KOPlhI zE90leFpm|@cU&oE4e@3(bsKs2LsW}wfRYL2Xv$n-`UsFzsWZj%FW>8!vR|)0xf`xn z4@_}Y`ff`V`N{3EAYeMBkaAnVv#SL}#@Yj%J}fg>tzho^a{t{nqwB8h9%riwZ+o^i z&x}ax{l?I`-M{2~&@J7r{Ew~$e{V^;nPZ}PzzSJ0`8$1U<&!ZWh;b)fI!ho4FaNK`D$ z5Z1*9C&Cy%r*;ljUhPZKl4wKbB}KLyb!5o3c~8S%slYZA7U-pXwK#{`y}V^|akH{y z%~4Iw zsz2*)$}^`2^{js*n%|VeR2+*XZ&!+ePJP(2uz2MJ%})BI;B$Sx`hSW=5p`^X#uZ#y^8Xlk z6{kNd*@n?$PdPsH>d6p@e6kI;)MIP`SaXok7Jv&O!;$J-gP&Q+q_!n?hvMzG_N z_n+O%EFzKKl>-)Xk3a8{?^aIXw6MyAUfz_|)8A+WN>felathurv7*v?^jh*p#EQ(c zA}p>97U{XSpuKEc0}D?Be*_prRL&aVvwqHXJIJgSI+A76ozSuRrLK4)bKRRb%e%=8 z)k6HQ#Y<+P5N970Yn)-~!}sR4tOc_%UGGxr(sLdt-8lSp>dco)C?wSj-wp8-Jx!Ac zYu(XPp;l;pc?5}ERB$fjR*f_@l#p-u_cxhN>QCMGIsJqSg>^M&3!29a;Xz-C%Qk)2 zp3Rc0d0#6#vEWjF=;x)vhHQ)8_p`w%%GIoAz`6DTaxs-&-&;1c<6pdh5u}YPS|uRt ztKX|DKuxAmQfoChWfD(kr5*J$;{X;)8FOoV*Z%ecZ_vg((vJlP1=_H?bDv72yetC> z@mmn-z>SZ8u-`1%TA||#DK`Dz89oDszhoV=&Z2s>PVxCJjYL`;SlP(VGWo52uZWG! zuiicp$v`qD&?{~^a~!D$W^_k5%yMEx{>|BsEg|NU-qW7})}2II*6gvC!F1o+#6zy7 zld)=&ObkVr0OM(HfJL4R;JeeUM{m!EEw$`BD-ZB^-rFHN`Py|ZOVyD*yBFBkS#{+3jEeg8cr6Q>qZ^z!jpvo1^{OJgjq|ds2KlC2I)Y zHUSI{UZD+Hyd9w6pDh zGQ!r5y>wf2=ubyfzb=d56aM$FMq^@^!Zew94mkTY{HfD>BF(|64TZN;e#fV)l(&Ue zq#1L^&2^K6R6}DF&AX$O&XT9o?nw-M62Oq$s3{S7skFzEAAAk`2j+$}(6?4I#_-{( z4&wBQ#TMm<8Kr&i#o44#%kqz&vkJF#AN#y87st=(j|3$4($*rPF@X$Ne3W@`dQ0Gldpqp#jx$?JUYSupED;R6oc| zI>0K|J}Fz zGQB*8oa7nk{>U!v({OK94+$Z(yw^oYh2n>nmLHJd&&e5Gn+=6l_0)_ z83H~%m4s9{Z`OEf#p9@&d+N4XFihRD;WWBb2i_~9m*!MDdY3&@eIIrnKpd-g?kJqs znwdYjz4L1c)H{9qtVu@t@qad_4Xwndc#N~GScNtqxBbwoYMlaL$AR5ZrT!1oNd?yf zh$TuoLGhwngG>RL|0LEymCH;lf=7U>%)IN&t}tr(#(DonU$s};HklU_;nmNr4IJbQv;`8pJg&eS03?- ztS*CT`8<2Go`>96m6%Vn+#&iwdT7lisHAPU5B=@Q!Dd25q5-UZ9T5@K6?ZCA9r-A{ zJw>0#DXmXWAC(&>EPdHVq0y(yLOn?ef3+o^Zk5FdO51(YuO`OF1fxqAU_>RE%E-UB zXt$(qgFT-Hb9r`=jHt#|(q|OmoWc8`5!TuJYUm_t7|W7gY+aI{SxmLy^y2- zGJ2nmff8HJAHYzM_Pi6~a$n6dwcOyVsRdBs>Id!7KooF%d1)JnktqSie@C0f<(odV z(JfV4J6Nm+A9PeFD#QHAu8sNLLqTx6S*7LnwWuTJd^wNj-Kb*{IU4oi*CSrsXKBwCCsf|zdn~lOJ`yIPa^Rl z__ir(eawiuLx5NM7t>&Ng0i3gYUaq7Rp+z%FC<6Nc?bHBxZJ&J_j%b`kcN^}jRb6W5Q=%fqxN zbvD=wkFTaf;s|UOr&^s$y~)5~EG9<8T$+c}UpZvv7oL)u$iUQ;Go)-tbNAJRxppPl z6feEq(PG{$tGWvmXGMA^`g~jn+k>&Jk~jOS!7&XLU!t+c1ib|1xW*@xtIjfxFouh% z9Ms@ZwKhEHZ82&{vENy8Z0#>wYj?yuI0TP~V{}Qq*Vk+Pi2=X)Hv& z6R&lSz7tz$kaT^Pr0c$Gwkbe|FK2#(K>MvHP>;Xa(-3GpZs0Cj zQR45DFnxT>cO5SCK_a%zPX zY22%4a%wsxL7~WBaaAz|UQLX61=Qm<`?5pldXK$ka|ZTv{@xePeeubAor>Gs1sQrL z(aEhJjgZf7*{;cZAb-f`kEiK>ou$J|vH5M?tIsrU;^SpkOiDPrhf#HN#czc|JMUEd`md{C1H)&V`+<%z-=s<+3Qm@rs?R^V zB?hIW58wrhN`^JRa*+Q98Eqfij81p_`}1q2P02Hf*r#xi&oxtA=3wr(5i9;$$SAWR z!!tkr9}6J(!T0#h1?QXd^}_gkFzqgsHdG&t(POvL|f)vhCd zPZCfRSj_ZFWlLU9E#YCL5r=gX1#cuL?aj*$v4a_p16m>{ z-YZ#WOk@&K|vX~yZ`RO)r z^u5YTzu{o(QQIc!o)%be#cwA^?N6s*W`E*bF#$(V+I4cvrk7=t;&z```fBM}Nqe*) zmHqK&j74Yg)La740Ontj;ERx858G1Aay6YUsOpF(2>z{R<4kKFb@|X_`k)LU%X6ri0rRgND-;x+HOG|W8CkKUhy<>;+Y}`U z&c?(0heV||-3e6JFop$RToMd1`U;aBQwI`{UEvqq_mm#R`5PA9N@YL-#w@-;}mJ^J}eBVBbdG~ivA?W2SWh|_E2A=2yZ!L%x z=S_adS)(yOot%-l)!Q|F5kU3K70AMfl&*6;2ya1pC66eaLa2ypT#SzJ_sJOwDe)&z ztw|v6_!%X5!i{n;-}7$S05<1lFpbtNU;J#@{KE8QVW}54^r@0^^TW$LXf86^%Udz6 zB+2OQr|=g9t4A@}x>EeJf?EZ?Q&Axf-gMPn3C-DFWx<*nzKTtE^e$v(1MRDt3)Uw? zT1Z140^Co|UsU-~UQ|14gn=JOriA*6A}9^!Qn-m;thU`i8d?v&X%T+e46ZWL!wbw? zsX0&aTy;-$@X&aDQl3MB0^YNh&Dzm>izhKR{@fi>B-SHREpA1Rs$jkH#`GP35sT3G z8iYlL3?&mi+v0hi=c!kmW4>?RE0lN}Ksrgd0q9YTe2cT(7Nc@msj$LJGOuiF)t(#s zxA=|Ku)$wU)bqWRi;Rmzpm!&{w7A8JW6x)$X=m5-UaHIf+0nhPk+Z1YoH#<35n~iE z4Do7u&RShsC}^nc(hI4dF;I~cEXuLT`n-^h+34{O-T#xJcd?e3%6%`m- z@6@*(5LMi|8ofzD4}IVWmph!lHm95&47$v0YmtVqAphp^Z)Npb=e4`Sy{?xRxZ2Ag zFvMosZ(Dwwp?i+k=I)<0*G7^BQLXTGa~9f$$?xAk+mrvLEvk@myIBt7zOFBVoNjCs z6}6mm3uC{3p4$6d-DLKD&@qOgSAr`+hFayDsAvLZ3gxHwo4-34;a;PMC+Oa*Emo(4 z`cY`GR?gSb)Tv$27NN69TZ>A`nZlAu%p>*Q(N|eXL6ev zW6~ADKdOf)pit+mos2Ba(LkdUYwzu*mN>9ytWb z{UqeN=#kY3L&2U^V)hf}-6@_(BE|-2xdQtMO!C&4pyLGN*Fsn`OAk01R?t&B$_u)2 zpwbiay|{I3N)7K-h|n6`{-TxT}OS4_3I|? zLRs93)xQN+X|b_xITg8a%>lzVtKpwr)t-4r`1{EJ=mrT5Ox}zt$DJ&wU2J89$yDH= z>{`e?<2Wzbtw}`1utmcQtb|R;MV`Y;(5cNqLA9W1Eb^jY5`h|>E5qBWq)IV=kr8r%t~DrK?@ z!UYmnHcEkPwV^BoS6$9zAN$$86Ds6=K$qj22r8(R$2>N&?E>mlvjqJo({!@gFm z;P?x;>K-FCBWAcc9>hefQKjlJgi8&KXCcU*2`*kM74_=O)=Qs*QsDzWU>QznB^L@F zZY^7jxih$-aYxhEKePDkC$AX{Jb3weobW@wVENzKFGj!=JXf+yef4=>R99IB`=onU zJ8@R5mHt#(@66dFs2;+Ujc+($8t5yra|U_n*PmiR=ur(Xm%5;ZN@1cBJliT=W90n- z1|7^!Oy(81UKIe4Ma@~E?Q;EWIV79rU}91bmon@;o&4 zgnJ;eKzfaRy^hd$-Wb;EEL`x*rWGkCX*9yz)px)^WzdzDcMidv3AiP!lg)l=lej=6 zTDiq2pgp0REIB~Pxrxf*DIU<}1?sPHW=h_)IT>R5p?}tBEC#Kg`WgHb!5pPr?iM4P zvcSS)h^ZD5QvI3>XNJQQniKm{-cg;~NN)A~u!GnFM@Td9|0}T`fv=5=jgXO~+J#vj z{V#eO0dWOTz0Kk_w3~p?iCvzMUbf@!+TpaeK`mskZI_k5A?{_sp$k4M#4`rDmH>y31H8hIHk%#YW@nkF@{0 z4pc?+Z9t0Thi&sfpIpBKGocX$Vt-SUqccwT%&l9rh3trILO|iF5w4LGpeL^YO9osy zcm|#Y{}a{8=8QHYUwj!`Qj*gX4}kjJFm_Az@^5AJb;mBlcKHCaQoZfR6zyLa(r=Fx zP~gOabuc}3D-L_Kd{zsnB&*J99J0BL3ciYJmV)E1?HXa1&^YIMlTn!8tbMbcNwA_WE5+CQOCjfK3 zJikoSKeTx5=Q|hHlpic?PRK(W1D^`nd}EvU**8UuCo}vA`yIWK>4?@8QI$@(b7WBoE%p4B!^6AY|7rlX|eJsvK!zw}x1{ z`em{cZ{*H?GicwB5_5q$)`!u-LLtkm{0d^=h5>ar3X+sRQoyp+kxIgs_ z+ypn%U`|{?1Zr(J*TRQws4Lp$lH2w5W>@($XXUYgh9OD8IxC~{qh>Q)Rd5&52iFf@ zh6L<;B?@irq+8}`IefQns$x3TxE*fWLHQ;Z8(@JOdFmSIk){Q^l z@-m3JU!q^U@m`uYt&9Tc_X{c7u4S5A+4E(p$(tZ2aS2#GYjc-WT5?|yTFNV{KUf&K ztbh4XSmdQj`k?H5)nMGPU%lKxTq!JV?%?u;%X}_)t_fKi6s;~`2rFr;dl7> zJ(C%<^2;G}1j#$k4kxdJ>uzW4d$OnLds3FDpDf&+Px5I+?zj(HQNleGU+rD}5U=!~ zDZ;r`kMiLv?3ZI`37Vy-n&|QRW_1UjMrKZzpFs~2DHq$(h@+*m9)9$rpu6TAC8z(y zzep1tue_vF()=<5!9AWaC~Lg?3Yn8-_(kPe(0XuhXs|3v*tVHvL!!84!xp*hap>_`Qqg>uBW?qAF)L#{F2+=k!+yt%m z;o1Y<(cB0wT=);+%^wfk#Fz1=FaL zMBKpP?Cn8SvtMEPD~US$G(SU2v+JhW!=RNTYz4w8cm>EZ!#6HXB&VHs+kU%@I0`&B z6Xuj#mOC=ZCDE(G>9yY^A(pSQju4=u1Gts?1@v;}JFcDsJ&yNM-iZHamJ>c|LtRK2 zJcr1Sv{J1UL2p$ZRf@KYW@*37D=O^N{`2tK6l?LLIXk$x&XXHm9G15YKs|#S8A#*% z51UP~%-KrOL1QCnZ$_H(GuH%H*eGtkYr8h>Ol;=rsz5@l^!c6`);<1}f=$BT|KsW{ z!=mcHu+c#jR1l;aL_iv(n-M7irMo4iyHioRk&YpxyBWHM?(PAG?qTSfGtd9L?{%H) ze4h_{*53QK*Sgmo70pjc-NESZu4Y|meu;B13C;@vk}xpO@q;V%oYn&v{jbLp0Zg%o zZ6>AXO*dPNKrqbWK>ul+X!d8vy22dODB44v*e8soYjNC8XKoFQn+DJjF7gZ)dgp;W zfx=w^;UdIaq8J~?yfY!=XagcK$cO|ZM0-HH=m(2N;@G)&rE(E$z;`{^B@1<$b?Y;# zJm#v5I3>+VfJ{3ACxTNC*d*x-pKlVW(|%(kU#*(=Z8dkn zs_vGX)EX*F)%LMCo5PlPYMTawS=nzvD!4nujJ?xMFDc*QV;J;)4Ycq$kKCg1) zYEhq-7diGY*$jd%=aI8C3#e4tjSeBI2dJJr<{eeQwZqBNG!otc6}#AVZPz_dJw+=W z@-~a1l^VC(r zPvpVFWzz>XgCXkZ?ImpGT0_?4E|vFNb`5{irXLTulv);tnGfp+r}7WIb5C$=mZx_+ zc$^xy6&?{td&Grt)5Al|W#vAl5bjTNiyaqAr#c~{?5J>#z!w=MInN28J_p#JaxeXf zmC%&8CuM22L;Yz4WKq(kQlr&==+IsF1o?tC3ltR>_D(e8TXH66u`PyM}*_Zeb*A@MMo zVaQu{mN0RDW!tAeD)&4C-Z)Q2B+!Q#{k$KrnXmHgs028D!-u>14tu#aK!y5jol+W? zWrGBTHhT3Q<$zV;QS7PmFKK8r-JE}w3C@nBnQ%Yx)Ez@doDR2p68#!`vPDjYO`Za0 zr2~AyL?(#|(ehmOksHTl)H%$s;ln`{e_m?6Bw>8O8SYc*>b2;Dn5s3+r#E?y76I{E zrp7WNEZb&L6rf9GV#W(Uis`wZGGUP*V-0E; zygTlrLyW*ayGoBFEy;fKtQ-;`buIICANvlc>*x-I0H!VLeOZW)4ifIWw;J%&xHb;U z;T=nJ*p|3-o;rjhnpdHZBFOv-XR5N0olkS`Kt)m;0juckB#ZsUQd+B<};f0FY#QV8{y7-)$e1`m+2z2joF81OD3~5{Q z?Q%_TwBPQoBRL=Q zI|x5`jr_G&JjIRwIsGaSb8u}ai51|fX#Q|zgn5o~@B+5Sq(5Xr7}jz94%9$XQZeX{ z@LDV-fBVob;tmfLAtaLp`&Jl_naj`W23M-cv(}t+(()1AK#k`X=Qy<#MHj#iNhcO& zthX!U*wQC5xk9cAHXs!vc`hS)jB#V}GB$SAm{mzmpT%g0i^abRzZI-l=xuQRuni>b@_7%sdDYplF$Z!!+Ior9r7+!X zjjDj9*6wX@>#7`hRt&%p(_v~{?tpV}uYjA&!r1oG+PNWhEguHWV*i?&O)^91DKa9! z>AGa8P}_zEJL+(cR~F^P&6-b%~SsGEQ2Ol=-D&Juv+_{c z=G|+>Y!q@$onyWy>9vozWORkH4bF2N=_-nt>t)UF<%7s>b=z0R>f`(yTB&ruse{m? zhZx-3#*>t6c7pOl45Q_2C%qz%;qQ3G#0RbZ2>Zs^#JRUOJs2<2^& zWLgq&qk0($LhBU+d{`{L>O@8L0X)|UKcFR~P^kBgBHiKaa55m;O*cuq<5(>ltR_k1 z)OS}zs0A|0$>9laakNJn4?ewbhfh4w3Gz~di+W2T5^qw6r*>0+7DR0G5?g3jQJYH2 z4Dz!qw*I_+eczcNtUtw9@GO~l_4BymPGFQjWUOcllOOYj`6EBs)V#35j^8MqQ*ki` zzm##Rm9%m<(|JvF<_Q^~_kqLC9mrtl-7efOTvoAMp%kH`u+`kw&=KA4s(9y0#(3xU zm8xSdb=f&N$w=dh(qVB^g!nK!wf?UIWSOhSQDdLf_d@*Hv3L4=^y@s}9Y=(E^y4SM zlDLfUl7Ry-Pr?1Soi-_F`fFQbNe2!y8}KrfWM^Hun)3E8YP6|rW{#D#`W#C~67Ikv zdz={4cICQ=9O%1LZ@+fv^qe4|2{tvuIh!$e^Kb>6F}5?+mluWPSc7!w=O- zoj~0Xs2~76C9l0x`?_iCxv8;7_r=ANdK`~&twy8!N6`;`py5_eHJa@~udR_1+^Q3QbIXX}zQcN0&jp!r?b6->W}=j#tB^Rf3z=<5O;ElrD1 zq2zc351``hOC7e9S`i}ovaGV|w?#3t>VbbXOb1*)d=sI)F!U@-ZZNa=g{x~Nb;;N; z1F4AxO`~#;z46DB;0+SM`da%`_`0oWrX4$y!~RHXxl`&7P>chhk?D->Kk!IDds+q+ zO@$c_Z`4B87dWO@OKHw_>W`c4ZXarg<5OYGgK4J!j@)2uF83wpo?orNkdQa$rVZM< zmOjaQt#*TV!hD#XTUX!)k-4i~{oU$Q!`ylDN_?uCEIzn!clm>(}Gm;yH4F`bYemlic_2wjAadKJGrzaPV>I zRyv(e`Z?bUE63D#;Z0&0X7-_)(SvG=@&!`giwE!)_!)CW@*_eSs~wGq8~7T3Uj_@^ z@r{y8-g8qQ61&^QxjvDYJo+H3i3;y`{I1ETO)(GMPeaTjp0x51b{oQ$X|54tDea@* z3GL?Rul63e)%u%HYD|l3b#|M#Rp*wU5fDrqm$y1BdQ`NOFNeVEM*UL9ZhV+WZPMMA z&lg=3l5W$dm>D(u5ApRYJz7jJVO;qTVjBK|m_-w-%wvOGL<575xH$6obZ6*@?0!Z% zAcOE(u`sEjZCHP>19hSA2|mK(-YGT)BA%619~1N>LW%B#|BmC9L~VehsZe2s)DgMj zGCoLviFCsa%sj3AP*~WAIo7%Vyc50f<13TuBN$$wrD(-_`o<=Gh7(&bviM&5F)y5KTr|yk9XUnQphD$+V7qSTK*1c$tJj)dcwbe1@nXC2VNIA3 ze*X?C@@*-D@Jw437?Y0Cr!yYE=lnUbn+TBFH8gs}of5U$3 zeN?sIKKgUSIr$8X6MdJ2>$+A}=(;MLe0KB4HmY{K-ZzRbdP;j}Eb2}Ar|aKL~e9^;s2JX!&N;Sqvd?J&3b<)kz9rN>f*0Q!o;Mh>vCRV5FxDn?toVop=5 zbzA+HR_e4`AnEoyS*xl2XVqg_8o%;`g&T&I@jo)TwX((I&G$Rp`5xD6c9bFPnOR$^n?q)SKpc63~Df4*sR8( zyFLvB7!aTy&|>w~_{x49<7+z{v!s^a<8F>KjlS6k3$gseIq>g(PBWVfzlv>}GN-?N zs_yo-3uWVTzR-BOma$7$?-j!3aoIjIK`O8JBCVKpn{{*!)}Tj`iP3<)%N*~_|p%)4fhM1 zjcZq4!GzA)Ry%7U3u7n@+3?RQ-+m4)kU0{|>MxC!Pv`Spunwe1TiHeAFA zaaJX!fkK2i@1wn*b;6v8L|_mbEa>j%%1X>cp*bVW!Ubuhxby&uT)9+Tu$!>M2|cipJrDf#WD6)qBtA z?WdOZ!xoOFBVfgI!59$w-hm@AS^_Z3%WDkAx!Fg0FZf*Zt@6%-zNi}72@J)F%KG`9eKDjQCGk7e+p)f*Nri{BV+h&}&4$h% zk9}!tjDl~GgJT3kXBY517FwdqjcnG|Fb~2g)@JzoR0Z`Lqicq}S5r9h#v=TS486Ez znkzU(A9tbE;+VF0n8(BXw>X^_>3ofL%gbYY!o!xS^{GBKBXw*d^Y2(g3$#;w4%EYg zrzbx|CsH7~X$|&@BM6?lOAXdvNGFto?L9OpJ9%A4W?=aHN5i~m51 z;l5^pP6J1bE&YFz4yo0UX4WIcyo1*OE{9I{wi{T~C9NNmTHpPJ1go8bgTcB{-680C zZ<1eOGT7XL#gZZKOkBooNxg0~jbX>x#~` z#qTDYadR7*QOMCeb%c8|1^5DsVEiiXbaVe$Trp{Us-C+w$3)z@`9Ul8D>&m< zT;-1$!VyJTTYFg@HEN%0+CQTEY=1vG(*TaItooJEnoRCQqeHf$3iBbaeqpssZ4b{h zHS0!sQ|qz4{IKUmd3I=@_*IwR{@DN#Kz|9p!*s)gy>at*r%uLO z<0%(lAP+~##%sXPiZvW-Yf6WnIf^_B7(^m9yBH-{Z(<_hIsd+i0%y5S0+*&Gu@gzCoj-^nFx zVSTi;)`G})=!nM;7F{;p z5EdecYBEYsppjkTtH349M_irj?KxG8V$#bU{iy2FrYQ9jpVnz!8=}T@m8KBnLl1b4 zK2p21H+x?CQy|X!p{(fWWP|VXlnwCg6xD}Ts+UI}T`Q=KgD=Z|n|AeVv{fLT=Im=S zt>^!u_5BXpzTBW~TfRJXct3}b-v|>e986&ykUw$z#jY0mijByH;UGS2;LGPx?Jgk; z_Q-C!<*N-|fpQQQr|@UT!Cjg#!p*H)|VeG#-9b6o3cGYcZeb+&(=e@{=6cMg(W*dS4~ui>d$aj$TO92(Nx#s&;0~VY%0q@J zP5V0ykw{PVI}Uq7PZX;VEFWm!uQt`xe0St`>H{UyLVG^88{xpl%Bd;)wBlENb=r4F z#FJSF7%&o@G8sorq<^4M ziu(2QT!pu$xF3f2I(~=0F@va7PidA(HGVIG-l2zoJIEg3`l1tH8IVT(bz3vH>Xf4> z$T78u4--(Ml7#26TZL(YKhJ`RRd$#0wV{X62OgbQUQV>m=M`eV)-PKbhG~P;g?q)56H6V$7{cqUq=OvELkEx@rU` z5tNksy(amId2H769ihX3W#q+dmR9~i3tb<_(x3j5iMgTfrPe01X)~<*kM+Ys^hv+t zN}IAP`2C6nLoFQ{wQD~B$dMB{jY42ReeCyB;Ey6ugUxUtLVVXyxt|pEEtOk^eHIgd zaUj+HjVtNdCz|?kq3xOx5GqL;^$DeW=jE0QnbE8hKPGIR0p|RUT_z~^P?ts(bc4l4 z=GPhA_*VISNKZr2KXiqW$=wslJMW%8VMp7iGW^QtRvqiO4s)vO+Rh_JQ9YJpU?EgZfT!UM z&8T(99aVZnNg15v(q`5{II5)^S{!U|N9FIkFK9_#e7WQa5)ylORRq|hBdgY zcDP;TJ)lK?t06D_yD}qU>Z#)8{5z68VBZ^IMP$zV`3;ea^2@n@X^y?uCgw>@6|U_> z&hA&1l=r>K*%=Ii5fo_7L9VmM+xvx}b|TaYTrheHEnr3ITg>z44kN|BRoMDZ#rMW5 zoXm&XtHC1Epk`?JW^qmG!_IfCW+Wo ze0Y+Mc*l6{?LTcn>xHQqA%8rxZaP=@a(74}KiQ<-zQM8g>fmb63c9GVN_uTm*YkzO zvQJvbv-_twA=9BbXy8w+0n><8*>Xe9j3OK1-UUmnpEDiC6NASl0i(kH`k=uNGFggN zM-7=cN_A^Vpks8)&=Rbq^a0J%(7ugLy-g?4 z%2;qzURbBp&syRDjGqQpr?R-u>#$Nio&2o1vU(lJ7gV<6Y1SWV zsrn{e8UJWwjK5dtiQK3RFErKqWSe#<&t2Nxt`doAdzX~3~{zz5D6t#zh)&a2> z%zrpkzYkHzIbAKzXS*aQ+Pgmz6dFn`z@!yd81m@dA*b!QzI|+&KNdKf3R7L07Dhri zo%cuY+dK(Hz>*$IhdD*C{;`O+{xbg=FY(;N#WtF*zfi5Gvm*6%`A8RK^MY zhuflSq1aTpR1i2L=)SucHU_kuD@{Uk*s|5*iJ!Cm%6{!6_Z z6Fl2x1YFVw2EL*GsX{FrP?}3DLoV-Vvcr9 z3)cI0F70z}-CyW_CBiqSW+5iHn^o(n%Gfdm?r0k^l$h}tcs-Lz<6H7l*KniUm}$ny z4Hrz*6@k-oBRjamt@kIfJB=+J19Q6SQlOt6*%bJ>S}GO(73}u6%2E+az>JJBMQTeh zT5wOREh(^BOr9EUfh;xZ`c7#M4aHjgeDWlZ=g@PzMIgI=q4e~b`$!arKZ82w zB7;=*wwU-sohhqBUU0W0yZJ^eZ0W>Y-vN_*QC+{MU1z~VLKPj%^-7tNjx+?D$tVkS zQmUYRJn-fSF{4NR}9T+IUhJQ4W=~VK& zzg2CV-zHWJxJbp1za1XonRl!a9?NC=>?LocQXi$z6s5Ek$*R*+dQajffw9KFPByuC(t^@*@!lOh|`edr|82We)aP z*={@K!wt4^FH_`}rdj*Pd`4+5`5&0CX7ME7N4)rUfbo;{H;%*3Yf}CnL`G*qhKEe~ z^FABFY_R9(^2qfss3^o?ye7iu^=#9|d%bZ^xnwYTu^gCzpU!Y5NoTL|W_*me%rX~l zH$|x+)8;bBKwpYJI=x7rvGWGHE9pA46iQ5eHbKwv+!9U*;MnNs*?wFBWZvgN5+_LD z#~oSEI=Q9_#V?Byf?V0AYN+-*+`4&u8wtEk0D=|yN~YaG|6$`z=JKqLGA!u z@|io&Gep+q%3{!Hrqa$A5rgkrHDzYa>&k>j;ImRHxAP#^Q4#Sf>U49;?b^QQBK?Yf zt=7ql2tsSSv;2+;eA(6!2`cvENZPOAr6U^IN;oqrtRlCS{Mgf4DKCQAp~dFn8~ut; zx#Ab)98$NP+&%}ocjGDC?l(J0)jRqxi(x^PzCjv(H(x1sySTu>i*LvhrG?ki^7l$K zcq&gyPCXlv6cUvsC$e{$l+5D~CJ|)tB8Qha4HH93!m(nHxcW;bA8(tzcK8@-`o28( z9u^L__RgpdwI3@dKRHpio$YpXl!3SnwRdsqc+8;bBp+f7Dm!CKL~<2nOoU`4E|!<= zlCsiB1nO=39(|jh-+xTwRu&5WcI#lu&A2?XEoxASbbq3t-uaY{siPz@7M7+cXdWT4 z6GNudq8}o3k|xHNY9xOckSTs`V9FbxLWX{L`B~V7YWwX=JkMp;;RalKcjNQz=4%}Y zji>csTnbk~&ZjKw3fXDBz2Qx?`2YxhYdGXV#r~4yt>5rq%6cTv_E?B{o2z)xr&ZT< zXLyNdbHGj~1=mlF)36{>HTl2yV!MV-TpwP^Y2Ouc*h3Op?O{H5uZ?e+l(bolw$OkB z)l_$yB)PuNvCW7}q{Uo&u{nlwqUHO9oj(Ocaze8wm5^32QNa&4JeuCg;&!Z&rhT$@ zn-CUcVco`A4tp4hM(sc7VBGl;C&tIOxZssFN}Jmy46*U4k;>etkCb8WHG^~wgU6Li zfZa-#=)+PWf( zSiGVvsc?Gv(yTMcQOuUpE~ys!FbbVvL;1&xHgC=cJkF2bjs{Sk@#G|CYQMdoZ#!{o zzW9?4=#vBZ!@3tMMVx{nue9C{vm_JWzqSTf)!nRz=ciz4oI_YfAsGLzc&5mm6MFt- zvWTdhiVh1oI~*`{{lPA-%EuJAHxzqWA#D`SV&0li8ui8>&g_ELX*Bd{*dwuyC*V>7 z6?!U2eW6{uh58QJ+B`xz)wdhjyi`tu4mF=CwOc-cWz%ef zm{Rn*mnQ5!su+!xQTlXW6x^x_!gcVrkIY|hcl&WN{Bg?KjUIF^t4_?4*?tLKR2uK1 zG^%1I@r>5P$o9{foXfmuzN~S|lYcR7)+eoc$c1Iaid^q z&8=E94bJcl&_wIp$hf|$?|C|x(vAb{lIAf7sVh)#*a}qPTy^;FIqWw)5JRw~&;53x z7r3qA7R+o;ZF=!wnt<$M{oY0f5^T!D;16$Cg6lJX(+zQe#Ig$)vzxaPO!w_*e@^sm z?e93q^Hs21&Y<9794z6Fb!3p+mT^*uelMnMp}#MCc`m!EKbVlA97;yJ5bRO5mv}!l z_*>ALz-Uk3JvvToy`i!4ZL0Kpcz*9AL1`cGUY%n&SqL7Fv=|vY=1MfUY3!J^e;jy= zKK=g|zQ<4Za4+Wk8>k$cdQmdMuk^<`@ZD6r%uvkefXYA!hxa%MXyxTc#b-0sWA^>1PW?s+ zh_?PA5U$QkmF&FDs|9eJ7}o&!c9CCZ4=3REj21gX|98lr&QOtBKRz9eKOJSg8czJ* z%ByWx?DYHj$tFkA%7!ZN#X8%(X^a?gZ!0ii%(jlTI(MZaE+!o+DL-^>bPYsrq;uoiDf(2 z|5kRZGVX?>v2KLar`AegYU_PxwG8Lm%8T@Nma+2vKHCc$x6g#OZq}G=3MR;!k%G>yk%Pw4+KUe;+&Q0vo=9iwoOUdB)FTzn0dm6$2id8L^ zLzVIty_B>7f`{|E)^z&t~CO2)uC~f+{C6@_@Z%UVNH5JwH#jPn!Z6#RS zEHt=jtQF1Jc1YtOyrIGyHlOL^Y^n4@ZU4+Qe@^m~{Hx@}B#@SPK-aV{=khXlLg*x@ zy$i4UUr3Dxha?80+v^`iUwGZP`!NL2}mdt#(ZK9xxO!a0jB;|=vw-oHWJ zhaZeeCR7Cc-LFCIW@@cudV?FLHsZakUI)GTp4$eFX6Le{=h>~A2HBhcPBL1?r;UpJFR%wT@>RigCYwtZAtxe zjI{wPE4oi9&xug$vyWE$JtJ}pw6cMvae{W1gX_n%#}|`;eP-p8jh&$g5LLcQ>f@3d z-xOeJX~JJWD)c`nbZ&c2Z*SrR?X_6F*BUd{b~9x}(o%eJozd?*@52kK*18aWbnn5 z?~I2@YXU630(2p;r^01bO@LfZibi?+lA`f8$2|kcc#n}mX0$IezG5r9oUrG^h-$Q0 z6x+5y$xCmfYPZi7ig~(47dvECD?!1%CDnfR;+yS(!*??s${I<%20bp;*Dr@;^url= zRV+mJd#c|Q=Fo5zXLW_DX;d@F3OPS;)cX9CRH8}Cbk?p`PL5had+l2-8|3aSUEr@< ziT_kYFLkCtXI8^TC0$dPJ^#%lRbkmI-PL>8UrM1n&0$9%vkS-hf(H;~6Ks|9xJ`-o zZQ*>J!s`$`%*H5FG);o3I9s12^vn#Uw?%M^sw=d2?&ZT#l7HbZf9;=zzWLS>Y(A9V zqmV|J_etm^ex{W*avo$t=+HXIxgO3UzoGm`@NniwZ|P3zZW37ib^O9iVcfwUrEOqH z`@^-b`55$9#D);+&$qqr(DD1KF*tOpID8g~prQ7;!5!Ij$hr_>9+Noi zz9W#yt5(|=a!;@2oSV2mr{h28s;y*5LC4@FOo?0{CP3zVEIjxwHm(a z49t^Q&VI4>|RaTg#Z3?d8Nqf2DLA%izBnIU2?>{~8CB7ZR!S+OD-9n#S zR*Hij1aCTeG|(FDS6>f_#VG7r1MD$8$NXkCv#fW0bA}p`E5>36cg3F;Q0Uyie+zCt z`f8>+>Xb53oY;PVvlkMT-7skI)r{&W;PKF?!{z?!*zfNO?mCVV+ImT#AZ<1uVMowl z=JSYAR++6uvlp}$)4%c}-5AK4RiiUa>r9hX?+XD;pHrbLdPmq>N$b|hKV44WS&Di1 z9~p*JoGn!s^(;z!bQxAeb*z+sIl}Ammdjy|C4-7A)l= zGU{@;g!#z8RR=VIq3;Z>jJ&aLjhu?msPPYfn7y>>^{K-%$B7_7OMftTyNQSX-OqG~ z50hBH9k$Sr3_T%+@e}jmjA)BV6>Bm^d%?mr-Gs8Y6a_>HE*si1G{5G3d(-@sY?jSl zZ?>6y;?Tduth-OWtfM*oNx_e=$YHvLB^%C|zbfP1ySL05cYCr>OAn%sdCj|o_v4Dh zs9FejA8M*9->JU(_YZ|5b-QCVckJvrJ1oq;uH2I$FY9>A<|9OXp$InsQcs!u_I-X&sqNR1zXU4hZEa!{oY0b*yU)WxTF&wO| zC@r0op5p~eYTZmC4`S}q^#@a(M!W)%b$Jofl_tuy=ivbtV~IIeMET%p5H`M%AHCtn z?!?DfBFg2lJn^D{RFVzZDT|}&g7Xk1lj#7ny6=_jOQGB$cqBvNa()yY9a%;gtGD8NNMfiU+xu7qFAw*g8oy3zpmR( z{W1udI4y(||1bH`u-2Tm*Zj${RS>On^ijD3^^;W>Nvwm1h8JG?ud<=t|LqG1gB481 zHqQeF*T0*B7=PIod}URcwVqEyH>I?Rg6N1o3m%Jb)`jXvO*mVoOVs4eYI4Z~%`|6e z-hWzFc$6ncR{&+K{Vb??M|cyir3&#G#?7daOzpy!+#(aPm)R<={CDlhO~}l+~Ks>We<5Edw@%FU!ftIAmvTqP|$E z(D&%vF>%bAhYGKifOR?`*~%H6e8>TQ&W~aAhv!>QKh?6>7^P|dwhj08D6`RiNo}h6 zlWqMz>aIrJ5W|AB`14D!hIt*kK;v>P7BjP75ICY?fIkqUDWMw1VK&Jllkxsr)AVULUvV z=Ohr9GCe0LgwF6L@AJp2AVY2}6+%YZm!!{bR2h6V{z&g?(*uU*j!W5ZH%Aw?lvgA; z+W#qw`Dpsv8cCRef(jo@mj6Em_ZVXMJeh=f!>YgGus16CVHYobdbwXRhw$S)(5VmO zN^t4_dI98V&i6`i)CTwtlBMf@_vt!C-g5u_-!SZ47jU; z%4is~zi`w+oq;3s%7L_W%ovi# zarH39p!ocUm5XVoAXeXRnT{BOXQmeYpUE$ki^rm6TtJ$w&eaSfHt+R{uRm9x{2`+} zo^@uF1B8pXJ3l`)&J$lsdZEtEy-jkpM$T~=IMhd)oXT_@xItLyreWQv@P!_W<)%1^ z{bNX6#k7(C4;}OphcG$2x$miuEM($m%YMO3PUuer?j9#t{B zEiSk`>s9cB9y^uN%lir63{K)X*jgu_*3;m7y+&_-Wr5f@eFmpsL0sc?!fMPydGeNJSGV`V^b3aj&Cad2P?U zz1JR~7@Hh&f$Ud*BR$PwTI(v5sE09A@onJd#tIkyvCI3~_3@2mdAmk=N^~*t4)1G+ zX09(NfNxaCg1BpQNg$YILP^;pSXl6VxRI}+JCU^lBs`Hn=8?T#RB^n_L9 zIvYt($kEq$L9nTASz)la*N+u|sOkr5U22UAyiNpdEjfH(e(M0!ni4sr|J2x$(KBglAQgb4wQV{?W#V ztqnzcuWvddYj3&{I8!(0h{)1xkng#i*t4@J2VYZB_cIg91m{cFhm157)8Juc{Bh;Q zH6RpL`i0J{@K~7pW4s@g8K-%4%3t66j$Q6VT>rBmZ^C!C|51WF{{eSZlLeWpVB93T z%wzt?C|!dn1tLeA(1%#kuKVM78)8cFCtsMwN99qOim)GinLi~PCKhKAdNr^-+$Ay? zi-~e3PB|=xsuJ={t6#FcyN6Y$NZ)=b#}eyiBAtit*037;D`bk6>?4_MD!o<12Uk56 zj5*J(Ifhz1Yd26Z__s8=4h_AP{|%1CRtp*Clg)i69_`PvEFcIAZZT-<(Na2z1H~dKY*4;zHBilejkVua| z>HDzEezP0Liv?eo6V+Gkw(9k5UJ}xo1sd^x%Vr2qL@x1?$Y;k8MM)V$heMwzl3$o7 z#Bj;F+djrfpwC2F)e9YMH=J!_3~_7VIn)@Cd9Aik+H6VJKHd9A(yPm7$})uftFB_P zobm$l00Qfx{BX)uV^%bMjE8V~#3 z<`8Z{mLwe1D(Yts&`Q2d`4k|a$1><{oJG~-t`0bE|)11>hwMClhQ?VRS zM<+TipZo*!JTPz38B}|tI&%$Nb|P{Ween$#v9rL$@z~Mx2=H{hL*b2JqfWAzZy~=} z0Z)s-d&||rRHbb{i~n{?;slNS5z=KZI_bCN1OE%H+;u{9h&cEo(l5Ub3ko@Qt+K=7 zlU)2yyYty8&rC^@k$FC$khc+xa~(+4Kk-_tvUDZ7`b(uzFY74PsBMCfY;m1K&Yju& zQR&6CJc!{ZE7m5rmtyTl6Z{-U>l0(?Pids$f>rqlTRqVn1db?|H)z2+O%qP+cz3W^ z&+}#h5?%RTzH%(tQMgl>I>4!x0vg7ZAP%-B?$YXXbL z&kbNUq=TbxV!eZ!#gB3jSP$0d$$r6>_}}h{kVA&wM!J&%&SQXK;guJ?EJmZ_?>+y- z^7jO&+I47A|2DX#yfR*3A=Fs4BrjU!U^3w!{~0M{o>@pQpnCDw9I6}Qy^?tN^&69R zG*t;#l^M$>X-JSCHAPhnNRso8@Tuw5`eI&;cr)xnAQLJ@J;0krKz$c4aOI`4r!7fv zVV|Gne~)Innul=_^oedeI&tOs$M#3y?lSVG02x^bID3hG!3Ox?qyNmMbO;MIB6`mm zvGeQ*TB27?d_!X>WXCh1*Y!L)!~4h0MKJLG4RG}B(Hpy2iq?7{5%E|(OfpyeUrA~{ zAk(9UnaocW8ar6zm6I7JXFvzR=s36Q=pzm=Ws&o{8HgJs)E4URKIhgUx;uNFDt|jm z23ow+TQX-w#uG}4=}1 zvX?cfr?G~{e+7fg9ZM@(T3F33h(itY9rFg;ZbsFJdmH`9T68lLo-j*tUk+lpS#h&@ z_}BGq@XP)O4?r$C-R$Pes#U4WIx$?bP$%UbmoNN?OxTOF1!HaM6x2MGz5J_s%sk9Q zd`s8*94Dm2A-b@uCGC~Cg~l0*>oY0ZD`A_NH?J@%JU@dOZnQ|}JYpi`%j$Fc`LN+2 zxeN)2{x5INki0*Z?*#mWN4=PFsJwe4sSC2YVFhW&2>z(EyRm}v)=GuDGi!{{(o`#~ zwoX{sE))s4*q*UMuWZV&`8VzS40bxO9XG(gzi=g2_zKPm;VOcVL$NNW)kSse;iSMQ zoi}C_`>#s5w6bENAX1j2P5eOOw>#mCO1+Ki903tt7O=5hxTUJPfs6E2XoWU%$9HY` zC5OrTEJUrKzKXrf*+$zzILwx$@dR{;t8?kq(E-pYH;11mcVvJ>jYLt_@^|>W=ggfw zxWJV`50v0y2OhBU-0}3jbfeqzpzyfsKf>vm@h!#N5#eUO!&AVHrGJ6NgFOlK97q!L zAmY2;^<16!*$wjr*B0I7|o)Ux##`SEV) zI1#o++coTGZgk6B$tOyGx9r>4&H9M#;k3)xv%Bq*2X!+(=@$L`)LJB5+JZxhf?#XCqe~~$Yr93`tR;G8U#W1hQ}BDp&Q!9XU6^>w=4dF!8{8d1cO=!Z zZFw{Nq@M*1@8TyK-@bk0s62if=l_+WK?C={hY5lqBxUBY%SpoL6_Uj1?*{JsXja-*DKZHn z-87b}c9tojV<8&r=sbNT(^q#>M>EaQ*i4skTTFb`TY8Ca&dK|^6fxgYcu(kKD9`fU zsseXq6JT^{Q{}y!Lzky~(=IJ19`h<5OQqs{g~KgT+Zs5&QI*;KzWmGI=bK2lO=(;o zD^0rkyOj`1m)xtbh10MUAyf|00om`a^~u^A2KnmFI?0UMkb)m)g3`Z!P;?HCFg?C7? zp&ymA;3(Dh(p74ue|`1{u3nV<>zSi2mDAo%z#rRqLX6cUcISo))-Wjp!xdGLhKfS! za}DUcU%glIwUES-wIylc^)4McIZGeQfSA^u@>=b<{SjD#853fGect<@-Ab@u-cGBU zI@uv)+ooFxH)0)7x-!>1r_0kgtf=V6aC+#nM{a=^v#Q1)`9td--3*+b^2y1Ix?&#a zj2ONdSY9=5_-ZFB*n3dLX0-fHz@psdSlXZMTCk;!W3r|8Y6HI`deD54W@&+G_ZfU> zMM&n`Dud|sKkd`%sy35S06SJm^2{z$tl*@5V~7)6@R_XghFi6Va#oNz@MFUS;_)T7 zuIaY|T}-M?eC@BFHU)PTTLqhThgG7(es5Y%z5}B;kMkW*mn$^KzZe0nC@+Qf9wGqn z3?10{4Ulkl;m`iR%~%rehrtlw!$w4t4Fka~F%Zo-;vS%XM%vj=?PE&=e9^QnLjvFA zB4JBI2%=-y(nS1{MKdYQ=XLL_Z)b9bZ$Il{(llnvdZ_%vqB5`0k{iE)b-i<@-|%He z@%I|xr5U5${maA0IE3)n+m#ogZ0Q@Y-E(?3>^fpPMkFnYmA5oJUaPQ^>vubBQH z60DUWHtXdaB$&>Jl`L=@D97;5ui6gThLg&9o=Vd4fsyIH{#+@{r%*+~J<%kqw`Zh3 z*N{{9G0zs^nxv_2(P%~TAiB59V~TU0cu5o5rYP<5p*o5}x5#vf(p6l0j%?%G?$>_m zdWDyuESE|zX)pE@VNF^pHMQMl--70z-*hyaMZoHwcr06epk>Z<*K>_I6aIY5rsl=3lICyp zPh>P`h&LYgQoO$y@MlqvpYeR5s6rJ){xEMVD~9O)V}dVTAX*@+VNfgckS)S^rHWnT zFl~7fI()Y9ouKlkkrUNGc}GcarC$qMI!fxmkULr&{x$Vv3iNwmeS_Q zypR1#$Yycu)M376|89~d>TP@EHwFBqa39Gp0#4Skgv;F4K!`LT)B8vq+v(3)IPbbs z5`*a9(BAAoj2LTQ>MSoLTvj=8qj5iIgV_lpuh3q5V#4ValgQumsbpHBO5UXghU#=N z;;ms4q&5qW-Yt5gQAXD7T4Ph4mH#EH#I8-HN8hmW-sOVp+;UU*8^@QVz?wJi)okU` ztkEQM{V^kYZ*9GXDh-F8OFY?1uQX1eLwl>TCc2jHBXq`p!TEp6mpK~8ETTxME+q zjob9;bSah`FAXP17Ox6xKAaJNRUcUTag~EYQXYiOG&Av_!*ISaxMQZfNEwHRlwaR} zX``g}Q24@q%T@e>=f3$>8S1K{|K(9k!NZ&Khc=!ug)ya8;!Z*e+BNz~K*K5*#M;UW zTUAMiZV=e2r#i}2+8`tDI;Ii-Y_a-7Z+4T(l0^9oqrm*~-7&RGSz7{YS_$_-!^pKE zKIks;E~tG9Ouyx*kfokdtn4N9nd-0*GPl#`CuCyV!~N#n#pEv$%sTZpHuURsb`>JH zo!WiihA6}Esy%ejb3yzOZL@-mOu*AXu2|~+j417d$bC=A7iV6l{XZ!wL;>gO02xG> zdV1U4q5X=p(oo|=qf76OOYfV;@q6HVQzmP_01;wzlxd6)sIBG0pHYTWl7$B=d>P_E zt4`of61X@rRNE?zL-{b)SnkNQ}!>aWNK z9vG?azGky5dP`KU`f1O@LS{)CWKH7%r`FbB{wGURrhIOTPC*GY_8v<3``P)h>vn(;%i(iBYhLzvZy?$QnsjV5MLDCY)Y!qxLMQ$>V*RLqx(Z{Y=5+V9my2u3;u zJ1%cjej!oZbwl6i_SiFhSX>z0jXpFLQYr2gYa%w{4As!C#2F&wXKj^y^+;KX#?hds zgNDLU#u3t5F2BWMHPDZ>57^fT59X4}4!_-W9eqDBGL+H>zjM^1>4=8iM13x5j3Cgz zi=6#%RN~hI?H|9t`!{dfIY`CXC90z3sE%?dIX|Vy8TZUT zFg}J)Wx#!SsYcB65dlvV+EpGGLLZS0J6=aYAn7+KHw=p(rh+__0_WP(<(Ra(F~^Ha zwqzOdbovH#t&ZX3y(+4;k+}HM(LwCNe+0cYoffPF4>W^s06XNAxA^{onpl=VX@JL! zSvsK+&W=;k+1XjR7@k{S2EQk<(IdyF04`28af)(2sA5F0EvSd?D$0@w75C8nVLDEu%@_G%g8<@;`sSn&Lp{>owy#2L;ZZ;D%+jq778tTV z+Caqq`jv%RQz+a6K6xu$Mnc*+F2y!>Vfc-Wl4 z@M9DwdH99cEZF#SCg*QEP@j_3!=1k1b~uUh4SOc)v!WTIGJG&mb^UX)h^hMR&B|_K z!L_jIYDw13gno@)JsPw>ne`x(HLz*-Stao9*j-)rETpB;bL#Pc3!ZaQEs%s)yZVJY z7t2UlJT@)0nA4~#;?wQf0ejiXWfiqbc3l}%GmMyslDKP}l5rsL5*wZjtOs-CyLl5$ zntfuD;a{wl^O0}QN&P@)(<||5XyH09!1j2&VMLy>9@x&^roY^*lodGa#v8J}{E{|K zLFq60)u^!B;V9fOg7v`gGZwvEu7KDtC9t+|xEZCOB<; zVMKp?(4lk5@vG$brDGFDZta*m3cQ}Ya!EaRxO|$}aL`05q-q=LbT}Qc`uvaq!XnqUZ@J>IK6lOcDlk3iB7S|{FIS}?{9p1Mgiar zM^H*CXRJ#|RtV~+ULc=QXIHHdiA#Px)XIJNSBKW@adS`dP0&kL+3q^`S8~yBqPB9J z=0A7Hi?&Pq9}wC-vx}tJWr=O%-c3PK%C>h=84Es&s5h+NXMi1_lS~UZrF|?fYB|E$ z6IPEBT#Q^%;m_!pJ^TnaxLcW^D|jr+qlvd-O4Ldx-QLN&6(Eq5u++YXVnnythAa4< zu^T~3uZ^d*$d;G}`>YPCPMQDo1szdzTvzZt>xm($|4~bN%&;%=LU&f&BWcSuEtcwZ zlUEEcD5sU-61U+Z^>kl=u&UdW2dGARYEWqw~7`#fpws`x*MSo1JTuLB=kXv zI-0KUs`_fpv&a8B;h^Ibp>CQF4fE&Qdc(pCI>z#D^XcBvXoygEJe|cci{#OjebU`(r2Q}lV$w+%m1<+;oe!a!>y_GR1S0JWU46(f zOXa<%Z%Z+ZgRZm40#&5CLL>o1T-C}H@eA(>=vj&;!J`m#{ews1VYf;OD`tB}!Acnf zKfM7QEhpH@O;qgpk2qX1>GSCFUr{BwSK^%tK8{|Dq90}9+tZHVI(>S>7wl1LFuZ@$ zK>-@c_^Rj0d8%WA?RS_}0@+5);R^b2XzG$%->{rR>CQ(X0l7D8D5?8@q>PRVI3ZE+D~Q-qUt`o@B6%- zb{RV}3_V*9%_FewSN=oBxnDoXc%8^NPxa?gQ7DL(Dcsi>%k_ zu9|!Cip71IJCL7C!3t*fU-x{X;!khIU78`-{`4y4K5!S|@_^{Reuxd0-bl9U zrVQ$E?~RSMhw?GH4Hh!paCWU(pee5ChMem^J#FZpG#Sy48tssam=ArgM|axmk$6X) z^GUncY2ezOFn;-R&>g;KOn(UMb{{RfKG6W#+Zc1}LQJj_%*Ym26Ap?UR|e~f6q}}x zPbaUuedp?botL0euZ5+6wMP#1>n=cC02P*7rNe*uq}HoCtJJyDiOj2y5(jBR)yPR z+y#C&;jGeV5*Sfi{5^l}kNsvBaH@*&3n{Ea5do2I!84k4L8{0DwU14&y4m)$OJpPPwu;ZgS_0ebPMNkr%6d5d>(FdJP_+LXM1yEx0J)+v9d_~S8Z^YPKO;)$KY@N&257#r@!TG zHnmG+Nx?R~CJdXQB}5g4?xU3*F5KS`5omYPpcsp8M5*}fxvyW@PB~$15uIV&%L_v^ zs-jP{WIqnD1gKc5agDcba`kZZ)i*G!*$OHV;Yp`~LS)cfErvG@n5??oTFA3dWhl_4 zwPcGr_?ae-&nXC7%uGD{YArk@4RiIE}D>+g9vLa6s5IYzT_U?la$6QLfMOy`J!ID=qD!_GRm|=rnPxvmHGMDlqMb4+Q!<#2x-A*h z&2TwWvd>@UrnU^XN7*CHIKVg&RHE{;cVquhs2|9=hwv%EIj!865mD}oS7ewq*>vah zo-SEYO)z`0qu$f$Nw@_Y-}Mhnb#RC625R`vXSb^SZ_3H}DDI;N7H5d(&<1Qk=R} z6FjfWtK@fFGUA*-wkpbFs1P_S1z8AZxFBb|vJ!6^1dGx69eNLK(>j+Os+iFDnUGl0 zERwiUFBzJhgEp=EKfunvgh8E+-fq3eGqrAWd`V}RiN%fV>`J3_j<}C(prHGxH(KkyKeNZY=ze)X2Z=Q65klu!wj$7F~z807) zqI?O4xd3A&?e!}fH3yTp(L)$?O$+pPrK9zxdu8+aj+12awhB_e4rOzjgxSZ`dtZX@ zc8)4;6WossenU3Aj*{1HE+H$o@FfU*W5)iruYh}zxBH7=iTZ%;2A+x%MzcM5kuf#% z`^C{I63x7CXvYxtpQV8dtRyim9=bchK_%Vpm;?fYvEO278hVW z7NbvpP(s384(J?5UmU`4Re;m{6S zEp4I1vrdzsI>jK16FPJag>zHJxiVQa@M4Q$)Ulbtqcg0U?$y4*rG(nUPOytm-dqTC_Ul!Vx=C-5t_Cpdi-%Y@rGFJuW*SXy+u)1|{fxIuYf$qPK$ zS0*|RB}_;1u`j6E+~r?LZ^plnc{EMqqU*{XWeb%#t3!nii^7#tDt2NqDrcaGybX83 z4i{N})cutU#E?S1bhNW(M&J%%SBO)%Viy(Ow$eAVu2Nt zew<9Vf90k9tDKgp9Dg-$x+9EBa~ahqdSF1ut}~zP?c;oojljmCx~;X~k%Y->``nLN z9~NAvw*w)=W^yHatvT+#k)G`fWb4PpSJS{gG7MzfO!M2F7Wd`4#fSYn8K>^{k@j&6JD6o6Z_ zY@Ss8`i%GTS>{>t4%I)rVo><=&Lh6tpbm#F91|?cOVZE;!X)f?Mf4)6yJvl3&t$h! zOK8(ow^K^oA75+L;r@lUGdaIQ+psjr1TWU1Qzj;aOV{$Fh2<@~A%Tpt|{0 zVedEYU!wN|C~#WWtMhX&E{nBpBopa|BAN2Z(A|h@xv}K3za;?2+pCb~T9#pX6+C+2^sj@?^ZQ@S^! zYsh{%PTc-3Rg>iFTeA0DC&~lv|;h^Q$5o4`Zmis zy~<(Kt8GZiV01I_C`bnrb?C`cN4cK-R*Bz}g;~CeD%AeQmH89<{qH04nI^xM!q)Yy zMQGLZot{T&e7H7XHks9cnnWJK3jhrsPmJi9GGwu+ZwstyDHn8IY^SO5^f+Cq=*$^# zJxEpTXwz#AO)5n=0|v5YrCR0t)v-qqR@o^i)xAbC|35zTx8W&DT0Qfnx{gf#y4dqB zneg`@$|Q{S(|?XLq-dkr0Xth%=^U%tsa3Hiz0+|1bGme$=qkcXJtvCEtf%?NP^vZC z5N37ao}9?*omj;r%B*oMm-bv+|s&D7`W3CTTf=DAH|)MIjn zNn6eX1u>s60-twgoW}*|>q=x74u|p&y~M?4_A4%)8aU(4Mjlr!!}(XD%kBsoT;p%u zxvd+p4q2W^NassC!qxzUwcjBRxlISVkq?{^A=$2{ngu z;q$IrOi~$M4Qh_Ai(BZIHvGL78-IU1a7-ZoS81 z+Te6G{davEP~|?PQ1qF1l|rUVgRPh7e8$~J8sE)tLIFKPeN4@H2a%-~N!n6|+1Tz% zkXoO)HXUw-fUX^3TD`eFy6dli&imD$)01%WTD)aedlZ$=IeDsE8!63xA;bHX{${X*_OAY=E{> z`EcxU(a~hv@`URmmPXzuHp#U;ol6<~CaG!p@UbYw+t!*fX-lhN?VuH_#jxMBZMDUI zCJjsZTJcoJI^)bP16g0il+;JJT|YE=?as!Lbk<=#i(0z==Z|)U!+}>0l(Jki1ODeFUi5Je^sx{Y zN1vPy!#&hn9wuvfntE|MF~y?pVGcMTE6Wi<;ooRAZwFBatf%>95_f*B_0b-@n;1pi z$$Dkx^^IV#R0!Zh>`-66sZBTaSHn`&uDaao^es5*j1Kd>sFA&?xdEY}n5(OnWn{VU z;u?qwTD1s?M32HB`k#4>Zp!f5uCY<4qWFJC#o<#`G4tO3ek8yC7CPXgTt5a$sTCuC z6t3~N{xwnqK$&W~qb<8g2k_zUGwQ)2z1*KN)~q~okHk?Qy~H9YBWwf$0Gy2Sm*--H5{s=8oe*8~pR`ZGx~8c9`in8#Un zLw=>g^G5>A;(b7C$GW4-_C`_>Pm5OTW!ILo%Va&MKonNuuWqDSXvWET?8p__%e>EG z3fZcDQ=IDjLvcITmd?3A=FF&6WsLuP#F@kj@<~?2BAtaIsBZBBt9`T?hhA{peA3%+ zJxF?aI(f}B`R%HrX-jg245A_YI_8JrjiIP6e3usRs25;^-(u1a;@!}$D+tu_ZkoW$Q zD-@#7qxjwi-bM^zE^FHmsB_fk_%z&1#7}>e337eN5dG?--rk0PRlzA*(BVw!=OxpA zL#-M2x22+3i?1`%05O#8wj$-?TI@=V)a^;P1y;L7ne9&ID0G0#a&%oDCrIq@LZjS%JgON)VNFdq z$fhk_vS(2|2X45)Mp;r-6EV6+7PnV7cKwAk;)1T8)9^Rk5UoBxtmVX6_=|5GTb^)0 zSLDmQe;3&8aTSgwYPTJDUNIN>VR1NZgJiO4LtWpwV@$+w+TFn#(-!&Rn95cJSlD7e zH9uBncB)ZDI|&(ll~5w{?Cie#W#l5lcGo5Z)cZwzm;P5-@1pB~RpLP!GAiq0HS6Pa zXQf$6$@sXW`$fLdW82*H9TKR?oWsTU$ZsYNK@vsijv1c@Fjn9S&RmX=T&H7)h!z41;7kF z_0GHL97?@FrhYHXs_?SkaG;$En`f_`&AR#WbNl4c7oc#z-?r`a&d3po8>h7D%Wx6h zzF5~w9^E3{Axo$a+aK`PZK3j;oki;=_i&ecl;eDLQj1@6xl?|Wg>R5-!Ow`lXD-IraHNC%3Hs4%P1LggafT&DbjZb;? zj?B~oV&AltV^FFo4kzSE@DH*Hlhrl6k%ISc)OEoMyZs+}HUzrVP=hIFMx?u3-}G3Z zwr;~ff~rG33HD!Y9tU{Z$4sq#FtF$UbENFY`D#a!faUGl7KU~j7k=aBLt52G?PgrA z)-;DH(4Ofg`x)J~c;ca4W|()TwbLOVY1m7VCi!R~(*7GK|d+js|2qG#=mn@qO95i^$v&%#abr7E}q`)sgUUFO551>Spmk7+ZZ=8u&KK!CFeZv0dnz1bD+%&8XgdIlX-D_Cpv@_xkPr zB6P07=dobgp`v$x*#Pw_KNvXZv?c#@oj!HIur8$}f)7aOGo-(r)Nb-vA>UuCRotz? zOi-%e3u-U+=FP4IM?(=gUK-G`4So**NBvZ%gX@#3{v;v5teG!*uXL%*xERe#vCvFT zKrztemR_BtukL={$7hZLAMY18YOejI-l4`%{L#XbD$mO;VI`~ec9#$t$dn`X1j}#h z5r!|7)2j3CWKsEfx>{(ZJnT2#FH`bfmVO1g=Ak@}qd#^}zTmiCjV@nd`jRo?5FLxG zioKiB--S6_QWh2B+te7x6ku7?OsexzaYxu_{_daY!{OHPqu|)zC!eM(X~JD{>Sb?_ z_Ic{^?%M~}U?9I3jUyW+jw0!`_4yK?9T-JkN)$QqLS8C=(EqzX*i^N#%*ZplZ>w8B z(y0tAU#c=Vq&ihuDS@sEYG*aL4mV2wF0ogVYajfX$e(!4tuoTi&YqMg%yTkAGk7wf ze}7xz#ZcU=Q?IUj9XRY40R^p&UcSUZv>dqIV1ZP|GKe5?YLTp|E~9QFp1Qr!U^c-_ zv4u`~@OR8#bM9&b7}I|BO{UK0?m4we3;lWq#7^1!2Z>?UZfVQ>OP;yXQJ?w;?sLKf z5AsWWv?1+vJU?3>&G}J&9;0X9v6IuP(%)}b6^wyQ-wMg^!GkLX{@Nf<&+q=x`yJ6; zxt@tU`m=mO3Sh%Ik9FNWx2=cDzxHdh9e&`iqSx_{5;f{EpyBFFe`tr*=kNMa%keV8 zglK828ZJ)N?pjKPMv$oTyZqdFB*hfhLQlTy!t*Iujet1+Q}Db5i^2=I(`Ufj=sHVx zqH`L_$*cjX4DDlLgg=Av1Ra~((SeXElOG$YR|1_+A>?yink0-dy%Nj=Au4sh-g&6K zdYz(V=VcVqoXeQk?(C!CJxlLHeD{hD!Fm0GY-OPf_ugs_Lw{|cQvK77>=Y$~E2GlU z3)>;joh~hvwKS=blYl|lvjL46fe{I}XtS^~ZaT?4t9sA)^u_yobqw>2+Aead`xQSc ziu@C&&c%jih$5Z(l{Fpe-WdkBS5BH_(WYMa-_PIsz|-yLEZ3ay=o3yGg6h!HD;r|? z_pdy6YSy##FAcJX3t$sx!pqM!jiF0~K#y6TY*~{@4jL?zo`j;f%KOef2@+`%R%2yU zd!MM<>1J0dQxMN}1fr%C zxsyCBFKFgz)hA>6>kFBuS6eg0kA0YH9TPNVq+nIPFek=SYHLoPxB?oPk5?8lo`Vv9 zv>~L`+*Ju?zz`v0VQ_35>}^IhET)OO`Pm6l^P9Q`4o}gpV`3QPqx&+p&8(tIt(CFH-nw!c-7Ol90bC>cyDGr8&9)JQ9WMKrCF(t3G`+KN7L zw(h%)XW6PP#aq)l{b3`e+ZQ?)iulRd>!rU&$9`4q`E6x_3|8D2F>=D1lSJpx*=6pX zDyx-CJ#Xp0^Mt4JL|0<#&7Nf6fNR~B$6fB@d0J?V?Sqf2t#=ZaZjZbyS;u1k*T(9N zC+*~XF`Zah+0%GeRk~5f@OmCkm3hh)X3CZ_l4zi$Rg{Id={QLMI5N5-yz1~v76YAS zyx_$=Zv00JE3AQeaFK||9am|osRq_om6i-t!NWo|>W6vYMcH#n9`9f_LZKZdY=PA0 zE|dkYp;z$I+yEtk7hFP!jCgfj-G32>g6{RN*SF!YpzybOw9@WlGy-KT0nIVNqvaOr;2`l17nlnDkU{;+}@sIS)6KJu)Is?qR16i{DGm{?hEKsW*x9 z?V@V(ZT$CCh66L}5Vz;nZ)Gf5(&An{wtJ#X!>+7MlI+Hl(C(rCg5RnS_Dx4s9Kxj2 z6CM1M#xb7nJj_gc|L^F@?6(08P%TM>W^~%?#d9j3@f;hS@b?SBaYZ+uZ#yGg{U2VY z`P(Woww^yo@n;U_fl+kVkC}-N3g=gROqEHXbeekjEG<*ZCn$(?XNS;NUvoXyFdjfM zz;PagOnH67>N@_LiQ85|l+*b^59stql@>Af2u$MdmEH66V3wHDj^cn|LZ{m`B20Y7 z_f{*&D)k#)MQ+{Y8HVN&ftC8V{t8Bw+@}88d0!y-`4d)Lg}-M#5Sd*f;w-4SAgF}v@3ZJH8u&Xj1;Zg~#} z_LGTCCNsQZh}sY2wIwn_E-Fc0Xk6x_0%-ODL4<$aRY@yIKlm!c(LX`zcL=R-_OaCA zolvs;JT~!`6ioDw%?F)tm9FO(7F}QPUMakv)1Iw4OrU*+2Mdz})qVoFu>VYF&dX%X zTJ?HX^yi7Vi+|J{DJuzU<`ysb_0E>u4;ISCP7cLv2L&B5ME!<+V&Ypc zO60rG$(Fl>!rY$?<>a?S*hZSUc zP6Yn#fKI?4PfCfc^&jNP6aXq>qo)?pP)$JlNf00RdT{_cu?4R-z+R}OZZZSVdJEph zxG!{yw&MBQ8}C63f-rM~(}?RnMh1R~Pp2jN?y8pI83t33?2h%~TfUlu4BHjX@^m98 z4miW|c!5N2#*>I$!B%qaiOPKCQ$ej69oK8_@@(B3HeAr>7A6w6yA0V9?N zfc9|~+jTKfn-!0hF@aCW>#(m(O?R*V?2$6;T55H7*cg5nmG!BUWm#Zs5BX#^9%Xqs zFG4KM`9@lLI54wF$(DkZJ`O+3r1qI*&P#)fkgq^le+@E&ZZ;mIi*DhT=Hpk-QXa}# zc)Zrh`NSE&8PzXO=hn{OeceuP*5qG1h-&|@fo31FB?-!IRZk|PAL5l>W{+h zNstqQy>h}{f|fJ4f`{X0JIC|fef#O)=u89UjQ%f6Q*<2F{7(;w)Ob(Cjkrma+|faX z0mf-TS+FAk$;8)W0=tees$)^}b_k~%gn*02M-y00rZLlfsp|2IJOzH32p9eL&j}Ax zq8|)=;Sd4ssLZ#k$rIbeLU-QiUZ*zhsT9Ua`J5{*zSZRt)!lgq;)p5Stw3bJjpEbP zu3LsYo)yCo}rjkIc?F=FPwS$W}NLRZTeL<$o+!eM8~k z0)ssH6KuI^-=iXeW>GwSm#u)QkxfB@Y>Mbqs z`NTg7t$yS^e~l%9w!2{q8D|s4F$V_t5QI!2wklu{?@|AX9hKJhBG`%qJ1<9-1Ja_Ks=iNW( zy!u&tqjb-|1qE}1X6#e`WDkYt4CM2C+)>k)>l2Z4-l?^ppD|{)B{Q6nSdGhWcw5VJ zYiUb-GeGjZ_qWoEu!}z|x$?Td&FSd`^2*KF@BZ*yK)l{66E#pE*YE_U4b?~DXT{T} z-pG9Cq#M>_-w8(s<6bSD2lLq~EY!~$Z$CBs5uEV{OdpB=7yY*$$^d=`z)P3O#&ejO zU~lM^!DrG#sYPXe*|^YBLKbn_juy?><}wqT==n+=rq0}v+yj2HMb5qN_Y2kwhgVK- znDLqBkN|yk*g5vYTCbE^nq|wDGFD)5)#S1Dq<>%9TAz-D7s9aWzOUW&?&BqCEHWe6_{PMUcWl${7um~@!lOz&H zfsDkm32xUm#h?N!NAkja9!RRHmGhN4xnJB14TkbO$OnsiQts;8{^DW?s z9nB6|Sz?NRl2sVI=fLavCNOy`Q1%9NKhQ(6T-vUb_RgfuOZst7r()u>>BsYPf3)5x zC;sl~nAOm-M#|S6G8=V=#4BmoWnGN;dEF5Hj2Eftwfi2T{_Bu~s0!T;wrTbWJdV%b zlWmq{qRC%Wo4ou;{Uwh!R&|b_oG2m8xThQ$mcyP`>mW%^%=BePqAGwle=5$e3F?m@ zy|qF2`h3hkvB1xxXjbN4{A&*J`iziLbo2vStXd1z+|e zB7gKw`$h(c(2`X}k$O=reAC2;Hox}Dc@Ut%cyCM}(DDzvuGl8IKbz*4-=2TM<&D$; zde6PM=0#9sdl~M_12q`Lt!$097klU0?-0fX#8ZIp#c?MU?p&wvj>UG}WG;Z+iYn;g>qZ!Ul>Va$lRbBj6YYG2}u!%O!yBPq6*Aq!1hM4PF zxS)UG%>8zY&I%~5V)?O7b=5I8;BL=gBS7K4_ULrxec5wg4HUMGX=_U2x*9Lp(fU)g zbA|Kdir1ex_4lFzzu*YrFt#ne!*BP4fjZ_}ceda;6<6>PcY`}Ly!Cy?{|s6(xrdul zC!TxjaDbdl5jpD>eSA-HdtFYFalTFBHOeeP#bdnbK1O%h`wthI_}sP4$$P8-AV&v& zFUXs7I_lo;Tv1Wj`xFEAJpiWh`60snu-xm;jtIgX^hgRXE3TgF_Kdd-reH-84_zj* z=Ye3l7Cw>vRNrw}4|7Z1mDtP&jiubn#dFvvYUn$UX+9qZd32b^7xM2E$Tb7aEaX&J z!;KA6mnfJu7S4Ou-wq!M+73k0rawv2_0;?Z9e&=&LSgzA`TH4_fHrf^>A_d)*IlFQ5uN`uVV0APgd~GNm=>S!jRug-MA7Jf z+N$=`0D7fbN8G^Rcj6bJ`2-m8?6JliX|}QZm><@)F}1BPX`FFi23KDco$(w4LY4Ad z-OvB{GTyx|hvd08(_Nnj5HO1E5COdVK3!KYWI~E%QC(!gK?f=`o5KBEZGtOL{^!WcYwzvEc^n=laB$7U7cmUa~z%o{yW&1+ot_Ap~B|; zRe18!1Qkzxh3}zt(|X4=5ueFKkcFYp>a4FIL1xICr8oB75h}=urwlKZu3Rb(p8FfU z`||*%C90BFnEeCpG(+99v|oBT~*;&Z%>DiZNSQ#dq?9%FW*0lP0{?62rUit(u3( z3eerRK+rNlcEO_qy22FR#{r%MoeDXcrt=Q^)2h>N8p>?YC@{vOU|Y*1a0UoyrC=6u z!e-~z%&7lneb4RqQM!y%IWEdCT=$|Heb$V2`lwzY&q1uf{*lTlro zr~gkQvcUq>nmr$XKJce^t;LB7rWv{f^f1dpSn;FZs6;4JgMX?TRDoIGjFImf@pNY8 zF4_a7K3HL*#oKYFyYX*XxQqMN-*;BN z`v}Y4d-t68*$CDh60*Fcw%m71D6`WPU-aD0SZsGf_44^uwcTC7nhs^XqD2nc?qk@! zwm=1vIHbgAChr4*Oz(MvCMUB3b)%j}>HCMzs*ojO6GJn_y2bxNut7ud|{GTUZqI-#%YmRC)(^?HwjhlU*#F3v zW@3BvY-1>5Ff7WpAYJlo61DvWEO(6j+d(ad`0Ucg?_1J^;RJH(f84|-Y{{C-v>QF} zx3p(_fsJF?e1P%;&X*jLS@3J~!@Uy}5PTMtGJ;1Y^QEvx>|gKxuZI^WKS}Odpca)+ z!M>$-1zLAWx(b2&-SK+GfcrWd;s93907GG^XrJ7LaB4bNOYob*>B6ReYx z`gcm(VT|`yd-p;vOpsIaJYj;9BuYl@c&ov3?uz_y9j8b<(B+saLw#t|-H z#3+jjr+U0&OSmE|z1qB2NXut^*p_GfY>G2JL`tIbEO$}DlwXpW8b~gY%-sLpzbiSP zE~*ndKZ{59S5BIp2{7Mo|56!@Kkq8JdiC?YU>3QDBI^kjS>|%Kf-WITmqb;JwyrPIZ|$~J*6|iG>@dM+`^nsKzQW7Gh{GyO8>*91cq3C>PN zO#K2Xfbxm0)hq{nWs?(VHri`~%iixwQ80Cu^;MN1Zqnlb%yowsX3Mq0d&G73nhz6x zsdxQ4t_y=jrg`c6sh-ReE_%V}L{g<>hLYp|+i;oymC)A_5_u5umq7Xz7r}KS`UwJ- za`qsEib3-5d%VsMPR^?rXptSV)T2-tOQ|QdAxwU#>?DAbriq5BNRzeU95M?U1D&Hd70YqFyrT4Muhz@Q%mO zZh2_qW}>c#fz-0Y`+|qQv_0W8zTA`}vpS^ca_I(OyTr;jA@<#0>)FYIXZvCPY?kHT zC-!$0UdWNOr1tX{<=ACmHHi@?^K$zFP4^yiYKRV}BbR*H%>$}PqcBneIh&FWdQi$zozpo#cLBHP2tc8J(|6bII^sNGN^Cm znP24G8x5+6dO1IOs*l4puI-yjzIwG8{`|v3eR-e3Q9?aUeDswp#$q<8!ibRobtt-I z@Lp8UFQ3sd6$@B)K#dY&-E$5c(we)YYQ$#zU+c{3Tk=puU!w_=J8Q#(0K`cLH-BXz zJX|Q%9({QmK)^KW$teN`FdwyK(NH`qAA!l?eUIkBt`|P0?_(Q#=QJI5!2|KrEXxE z$YoLy=?k^si?8>4!2Hzf=a;^p0g_~R*Mbigv?Y#g)Pw?HQbRc4sWXBl{(m(sbJKrE#d~#E9^#$KuaoG)?IY&OP!t-6Z@^4e*LZ(U9#iB$A0SV0m9{hnhlQZ1yRp zu^BriUc^Q>S5S~&L3qA^-__j;=FY>K{}|AjRqUK-FNJ&dby$?KCFnVWJf5G-J&!@v zr>Y5LSRM0AH=E&RqSb5?UA`#EdBZlZ1b5tnX&kjF9JTYuop=qcJNZ;x8AA{1GYC%h ze54E?xlU5Xw&DFMKB6|dR&`r{>hdki9G_Rhf4e4tZwv;-l56cv)`}Sm;)+rRq}g4M z&{1%IPC}M8wL9q4j;@=@ufDjBSXceOtaG$D_b-PWgYMJQy6peCtDJ;T2;>l&kX}QH zhoyH4@h+%;?ojya?QTn36%5udJ}q;c$PB0Svhg}wr|L*n$K1PMWx9GNr50(cF0c39 zI}0+nl`{XL%*RgU3abI`=Yh4cVKR+Nj;ls9b@x|fvNjL@hR@k&cS8As)h4QdD_d7@ zVg?@5z^NhHZlxwfVnz+(QH_lTdCIVh&tb?@!J&U1wL^{E)ZFN+3C1xQ^c7Bbq(UbjY^`xiKL>0NBU6-z=@XDJAm|YK$26DJuwkfXBIFp zDzHyM_sGv&HBSkLdet5q=d4Lvd4172=51ce`nck=PLUPr_|gz(tasX@i}{yDGj`F& zI$+?OaO*z>zkaB0Ci5-j6~7Ky^Rjd8&W!R4h%-;~M8~E!$N;}Eh1G0u2^b(Vt4W;~;c z08nF@#V|xJaaMv+_Fd#i>vITd+R@iqY zG5~ZQpv8}&%=m~JP7|K?{@!Ya)$i2)Poe>puV_>!`MtjOc*1T_HndJ}|Ih5A&-T`* ziUF7H6Fs&H*QB`AA>lrx@Qlm$7E_7b8MIzcw0%auTte8JK1aAf4+MC*;tG8GraQU5 zPq(iLi*>7Z2F^5Hjn39bh-RgmrVm*!rgrp|A*^MPsS)m^P_t7V_xYx)^4Z(gQ=Kg> zhE&kbvnD?tpWf+Hof%hPdK%irX-G_|Zm^XXQthEkmVjt0P-(ktK_p^v^1|1cEN6*~=(Kmd1^$3TA&j*mx^vPU4 zrvSdp!Fq(z4CH?C9_m6vt|jB*M?;%cATj4yZM;YBPl4U^3~IJJjfrx*8{RC;3h}QX zc`oW- zFsrIA3Nz-V{3qtlY$ELO{NZM`kY%OW$9H7%oxN~sp}Z6^dK&b|UUc+>$8&*=ix2i3 zk=0Pc3DV|w2lrz7ol{?s-KZ*_B*Q0?O4<1Y<~aS*bD>_*1Ex!Inm`wf^sI`F*c!`M z*>S5jNrd<^s!>i&XY%C=yIS8*f6BzV*4;ksBkIxQx{P1?`;rxQH~r;E?LMzrnI;3r zKVMVM&RH})r=N7V zYcZ(W`bsMX1aJ2HSG4NX^8#(~BH{$5B1?qe=IDLefd50&S^qWt{b7HAfPN?u=~8K= zr5jO@mhO;|(lI(kL20BLq$Ean3=pL|Hehta7>pPl_xRrT{lor%J>KX2KIgoy>v~?z zbq2tgMztNlb47KcPc$R=Y&`0$V8+5@gFeys9d)?ByE7qP32(l)&d7wbO8%FJb$?f! z=^PoA@Apppc?Sm0KexxT+aV1O8o!=Vr@A>QYDnkd#r9S3^u5Y~Wi+d8I=T46^_oim z0s*ao)+Z@V?VEW-QftHeDPG0K9q8bpnPBI@3A~_jt1h$L-r1c-%6}Sgh&Vy^Yl$>< z>>0J%oK^IT&TOo5GUayyPG4TQSAF04RCY@2)I0ot=P5xyNKrqEmg$p6xRS^zbid!uk3K0 zy?P>coTvbGPQpd8CzjV?IcMd(Lq03zw23X8Xk&za(w#bMm?Dd!+qR=^4 z)p)3<$}8I2IeWA`r-26u^?JQ{Jbn|Vhom;IIU}XHi7YX>v`{SwFssc55kvM$AdO15 zX(mO65u4mVLeEJWd?G?mV0NaW`WNRVam6JWVEO3BanEML<$^1a7eRF6 zYot~tgK`me$mX4}-;a@RFc=Znaomse#FsDTgU;t+5WN$C1S^);0#TPOz&ALf_oJ~i zxbjIzVB4(>16lJ;ij0iV=#!8k=xtQ=$@DO=~;znG9e(;H`R!uHLG8&+2+NVG>`WW23IEXu+8SyoG_4Gp(F`4&P7dJ zJy~A38DjV(wjSpX2a+jM;K$Ga7H}57B&V=&ctxxBE`JQir%A};l+UhjX}sm^^(}P( zO5I`+a!QaXjmZg4kSQDLWi5@5W zB_0U=`%?E)`nr~sa?#Yd0bQBTb5~`AH<500VglqY^bQdIQEq)Vm^@At*HxK1!h<+= zL)>8SjzuK3H%qaO8^K2`HWjQZRn|k$tlC5;(Fh1no4VPMt|EHuH2r?>RXolgFUM)Q za>BE~>KKUxYHgo@e8~fju@ZKqFl_AHVqH+HBXE+EvDmF6;T?uQ z^av~aX=yvbi_MPu95K?B@52w1s*uOku-V$qQhzEW__WwOyMA+5Hcm&PJGS*`^ySra zx%cW9qAkX(U4$0Y!&`ui(0!_qFqjKBg@B#%6B>bzqa?7d6kdk)=z03B1uFAaM z3lXSfZd#SELl&rF7b@>exG7Y5yppKu;hYip%WP-`>epS7$e#kfikld2qPtQpZ*}TC z23HO0r2{vCtz(JiQ>JWHK?d96GB%x)WztPmTTuK_gALf(>#98wsNe9LC9zYX-dTsE zvi74syRAh#GvJpyP?@l4CDLt9as%AgUN$8PT+ub*rgg~hKzL*?7@SlDj~K646kL5W zM7TqsAXVsWS=FS?r9N3GmEYf2an@&l)(IX4%Smg1-I{M6aqlIevNL(#Ot|Wi`=ISQ zR$?!IsVll(9~m0nd$Pm4BTb)t#p0%OjNExA&v-RHAhC2r>?+5YVYB=HZYoR4DRUfV zdiis&F+;jr@bVQHiK%Cf2@^(vo!!K4FvZ;q4$mz5xVabp>j|&y!|}P6i36ZMgd9W| za_9iG)b6#no#mfCYLk2E^X9TSAPAq7R z)om8a)7IonP`Bm(jg!(Wk63A*|7P9~>*j3ZB)JPEG1DEEr51bY;79yt)s^_?Ne+~H zoB2IkT4ag(ps*GV&WYxz2W>M$;mKWS5yLgIJ819JLi(1WTmd24)DDpj%wZp~N z&FNfWk6(Z?V9j4Yda@SKWn{ z8@M`jq=0?@nM64+lDlMVLP1jlBjv}*B#WXzQ#SJQ5Wq29O#w+A8pAuInJ10COc=teu~*lxhLDwZa{5~!19^9SFc=c7V^SC#8+<= zjbk-?aTT5TZ?OxZkG*k{#4pB>t#k-&agnDeT?RFzUaNYWzFkv z7|^D~W?Iwjurk&LXv}ybv6G$#7QSMT9m{)f``?~BisVP^%(3k6Yag#lkXHZrw6CtX zaLf23TVc$H97PuwawgY-8$l(z?e?>~5Whmm+pz8X2ZkHiHUiA&siI*KkzR4_N@yyh z{^v%;mjF=DOHqqU(rD_Uox+fh@5_x-v!~+}Dk8)7{Ox=5LJj^Z&iUP4{>6D)g?*ph zTzI@7EJEyt@$A=gMJz|ep1s6mG2~Rtv}Wnka;rUUiKIii<9b&~P7U*!5PyGF>2b%% zG;;;#GnSEAXzteMrn4h=lu|0^x)P z*T$RqEoR7c8`>>7k+G|2u@qW@F&~5gGA+xVoWN%jLf{W=p1sHd(X&_hChfm{e^gjs3eK_KH7Un4}EEr&t0r zQ0==O>teUpbs=dbxJqg(6ykX5iFcpz==+U(P$Ik-SX{03 znD9M*mLQSiQOz`Qsld(Wgy({>GXC$~eukC%LaZuC-edCa@4x=iH}U&n0h*>>OSpxs zcZ(=npZ2389%i64yp&p`el%JXUw<=?_HaQE25SK&RDr;V{z`nglqNGojbjl^ zKopkEq>YxZlDw$YU*b0%&*EAa7xRLOa|R>t`RU0I-Tz4?6JPWiD>?YalnI+ZUIT)Ua`23O zv$kd_voaYt)Xehkx4$Y*D1ThCQT9WNPOo2ARb2i0pt}m8Wt%zQItjRvhisp>sz(>iBhqZZHXA0dZHu~ z$}u|RjP&*$V)tU3>{WHEO~=zuvWKsScra)kHc%?eKdMZ^XDL&(&xl*wG<(G#V2t0+ zz#QR27|BwSh{wlpqt|}^4Fegw?8TgN1*Fh>dpZPa4Ok;#ms}-T4_hsY1=NsTk#<(J z_qKQ7v|>H@D$!35>vRZ)Beog zscx^#AawvScA+d^g3i<+E}kzqunH(LEb&b-MTDC9LY16z?5EY5g0`Wb_G{=W5;slQ z%%?b)8eta>GcfV;AVlNRV7Zf6oEa!guGd}H2AS*I=pfab4(Xl469t->op3owi^V~{ajrON=rH6ZWv8T-%8MA1&3S^=XXua@r!NWl9d=9C#-~RO%n-g8wl-?e$qU{3&}f!HbIi33QJ_}j^cco^F+m>Qb|KM4cDyg0&@0Hz1NWQ4wsVc zdl6Oa2j!~$k?W8IR@%hm_PuA&$O&J2|76qQ;qGGzY2R*ttdt+b3VrbLBcHp@qD?vG zAANS>GBY$=Y;$flc0w2hA&vAR`Ta_JBI#5^+~eg+-3a{H1<|jk(|-Ma@r?DwV_^Z? zIZs`)vs&cUsK3Vk`*mQ$UUkkH9b#;BJ-w@yiL+Gb)1?+u>npa?sI#^7q?r10)}%t5 ziy!Z>SX95_Ef4<6N9|loj&qNAX`hr|HM@yn0K9-fL)*28fSGjhKffrb+b2e+$L4AM zv`Ns8OpQ)5+`fiQl&K>pt-s;@er<+BFN}|%n{+uK1E|kQG|R(wEs7}jnd+j^FmuXq zo;S)7mpmB&_tf^LIn$?Lp8l5c=q3M+5phN0QKh~_QZ`g{Pq(Uu+!k}QLL>*}KsdEQ zOvb(qCg@gGXIgTVIX{j}TN-x<8cBq}Jyj5xmTSPPOx1l-aj;RYWeq0KJ4Yc_x@ICw z5;U{h>Naia<$PNiRyyFh&NB(R5Cur#dChpC|JVKMwGqYoKnh}yGQJ_c#Y#!2;^c{iqXii86+9fo9$EL4bFj$H(k|lz{B6i%_iqPs=aFXEBC0jP~2Z zO_Df{Ctv@&wxbpNTzJYq6qb9v{F&^pSsaBUItk`gLhl86nzw6n8(OW=nCK%~DzO_O z6+r~l(VD3F?>EKl;Hi{=BElHnTf_n~E{ViM2QKO%Rl5)E>;X+W@vF2;2>xZz355 z!>JJ7Tqb=vHKXOKR~}G`w5vKZyM8O_Gqnc#q$y|@E4O9~9b(|h5okf5T93bs?7r*L zRL=2$lYBHJ6svlTXdE-Fs&UVpFb(d_TiPt^oYd-@CC2PjCi|_bb?UHza+4HA$=5lx zh|#erpkHzg_f%P|@|*01IQ29=(8o&8J#`0hWEs-rgnPT)GM~B=3T!{&j2Pw*DAH{Q zN#=SiG1V*6Y(4^m1O!Z3Mc+i43^vq6eUI>Y^5U&>0Io%WL;+3(Ws%D%yc8lOCidx> zMS-+gU?}dXZ`bj<78?&)?)UPh>CGrsBFCQYPvq`k#KQ&~VL*-^h<0X1o zf;>m}EAp*)9_DjFo20JG=qE(PGspb+-0KTen3&8c6M%3p5I@8mWg9ROM|3yR1VO1> zjjAD&0Fc1l7Cblu7cBJLDAl(&yi!;!-T>~+V{H8*n6Pe3TLvCoGZyVd(O1SBmURXc zcooSp_JZ{g55@eh_Z9M!J{buIO<6Vh1-Y75Pm=P^V(yt?$cG_%~uI( zw~aW9*4yKgtSlv`M7Jx|*0j?CHl+lr#<;HH(B>pX*7c^pUj~!JW0bPxy)4*6g-9}! zZdD|x@BdoOopozBw%;mUm%_y}XV(0$@N<)HW1fLLp?4|LpN1M8eEXq|A5=uGBzDZy zc{apjlP8hzO3=I+G@>$k!jO?$AN^5Ss@)E)Y(7tYRGkG^Sv2s}tc=4-S2(bupYCph z@L&qJSa^;?k`#SMj;zdC>O`re-Q zgZ|}8{90crjw(o42Ej}vOl21#m?`0pnLPMC&h>ys(9f(I?eXokwf~7=ai3tQiMSxa z#$k-2jDSD1K8vBKyP7(XPX5mKFuabb@OIyg1jV#Rvpah-v$J_Z7cvuLb--5+5sLRa z4s5J=?&TyjmKJ~NQ-btmryD-@IjO3#=CLJ=5@udLhzPvg*jb*_jNv9F?b7ir2Xut? z-16D=y}B8USRoW+XHAg9Cs;eMM8`K)vzZt8p#l*HdE6Rbr}|DQ**U73VdbdDKfBx} zNt5*slV3nX`IexhEa($mfSv*8jUnABZ64z`fbtrrLO7JAe8_ zZ@vQY=2ig8uhzg3H9BttS5iI3V+HZTKl=+EB1sl?rP+AHk&YzjQ=vfqWnaHU2#eQ+ zh>zoX@j6pucvY#x&RD88F@)vY_qFPEaRbZ85}WMTA{(a4?MNC$DG>9hCmcCRWb5mG z&$&fK1lf!pxyx2k~Yo;oO{V>BGHB4}(O z01l)@1CLa1XBz?+P0513p5=-B8)^DmY2Sc+Y41IMW)W~4uF+^77$&^N$DCh8pX7~$ zGpl$}GZ~G4B$DQf!U|ay+4GW|XV%iqwI{6o5Mg`MW{Eq&YVH@oc zVqxOFME)BPlZzKB=XEQ|l?QBp$`d6N?uSmT4W^K&f)vxNll%%NPJHp2J==%s(* z1YS>tdXVM8^(KFZX$+y-2Y3)v*3texmWsrtZlM zRh9AfR>`4l>P{W+h7cz9e58`S@&>Pz$UITuKn}+mmEJSP2y$fZL4Iv5W*ZqoTi`6h zKGR+~vB5V$DQ=Cx(WzMY&)P;c=^Idsd#ZKcQ|cfUnMno9_R4`&dqeZO*9;73aL!ns zQ)|LNc^4mQjP#t(AEiha6$DOkoGYXZD1ble`y>BDw`bvGnMC8CZT5aS6C4 zsE*fg**(zMe2Ym>Hy9n~m1%o@a9>;!2oE!ws&)e-g#s%fHvV+a;p!u^%KIpnze2b8 z+V(Rg#Vi8AXC(I2nX6NNPmx!(rgKXrXS5v_9l>t?;V#gG=E6Ald4ABwPMz7dYyP#j zD%4%K*C@uDINKde+cr93tespFtBhle=+&X`JlK>zL)}ezXjz-@A>01GEyy)tLw!)> z`_+3TYFFVgz74o!Zq?Hy+**&d>tKqJkUwqq2x6s|D(t+7>J)XomO0cfN3gYc_$E9y zY59&yq9?VGXRS$i&^o1299^*XEups8`jvEoLk&~W(3~dY&rC8C;Co}K`)9NrHXZ8C zZ)Cjzj^A`k#z(aRl`^PL>%M2(E<`Fzd40yNCzVcj^Nij9=(#S}l!~&=csMX`z6*iO zU9GIW`vV>JzHPsu8m&LMszx$Q`Er~6>vJwazN%KN-S_pnp6!jCmuCIfcZVlXpU;b{ zb$HZVRJN+PKlSB1CJIdbow1pO)KqCm5?T1I6~oY7$VsB7n!>kES_zf0JO1^}me1dQ zcBhb?Yj{+B&6I@5m8WBq+{a~^kFeH9Y+UF?oJAq3jh%4QhPCQF>Nb&}J{P)Cs1G@}md! zy>;Yp2u>A4EQxL&YjAgQ-0la|fGz9Go4RZ5zyie*5gMPx=_C5pD1>J*XtMqY(>y2t zf{`VSFi(L|&~|LXB~!{QP-r&gypO|PqSreu3*4HgxNIL}$kVVKA(2mgf zreeRAgmk|(aK0vY$T*sD{+E7_NP0u(f{clA{VNU=T1V65HgbO-9`qiD!4qNfj^+{v zUeKuf7st3E;9ey+IUW7G^YbPDL%BFy$NAK$#s|t4$^Xi2#+kdq-I94~!+)BWq}_AE z1=s*Q99MgS@VMZcb=r=a<2?8c5Ot41d0E_(+@nY&r0u(%xZ5AazrJlHV#T|c#KXAd zaCm#{$Z&I93SR$PS(cy^H=-*EfS2y^U)b8JX#4`&7{59x49TSQ+qz{S?!yRWJW|*P z<)h`He&d3RqKsCi-o&Hs$$Fb3O~gLETcun$sg1VP76UjAjl=^`{On~-L*m60j@DYL zKG49g*TLbkOhv)IKj+vNouPdKXZ}Cyq_=c!A~q?r2XIMh~z#USte{D+?9En2Uunt<`}{fzL?(=e_1hK{`G zZ*V)43%f?NP0olNQr6VPyNA~bT(B97tD9QH)b74`oZr^3Dd?ifbN7vSCyYIEjhMW0rT^Y48b=w zFB#`EE6sQyf*I!?N5o{87T4qSW%Zv}#JoS78N|O{|7>`yP12;}Un#T+CJ-0reRqlr^T!nTg*^{2YyP4KtPi|~JQb)CFP$=XqJ=0{qQ=F{$`pwxJ1ESk4g% zIe3X}$~C{#;y!lowD0dUMJ>TUqSv1ed$fhFf74ADsWv9mW^M!j^PNTDr+l(Nx#BON zBE)4TGY)`XmMHtwJL+{>CcLwRp#)zkFONIQU|}+CvJR_DSV;tFLc5X zq#c>Ib@8e(`7wT)@P-}H^i}eb0>P${;uoj%M=P2kF}+G`)0tfgxi@WBZJpO`5uLa2 z&do)8V<~Lci}46)&sQx}IMgC1QSTojLtH@w_JQTcT~3@2Q_6FU?R5_$PGrAtYH<`S zCm(B;yxJ*ff5aE$I2J%gHcw!N!WP#-NVXId)jcUN-{>CpL%c?2@tviE=@!2W4Uri2 zo!*fLjr>EuUpW=5IyTLnes|xhC>to8@xg59bjqO!7%*h6GTI*5z%x=DL82jfX4O@{ zy~C!I!XyHjntr5C2T}~&2oPFX&ArjtcXNlofB_%=xoA%>6OClA@+3X zP=iH2cqp54_NFKv|DTwvb2!rw{Sp-yQv?IaD84X~mZSs8p6q=oZeLbgHUH;4q*F}T zD*T7uPw9E{jZcKM^#c-)Q%Fi*bsn8`wsWISX}8#LD-#OAi(XO1C#6F#O3YCMVd;XA z<8MBOQBtKTqbk}a6RC#`y6Q%{gp5;gtt5D0e*e1T{EjFqf>DdCb{1^`JyxR_*|Badfjj3 z?FUIRvQ`5zdhza5;y)fYRLDkt^$#%~MMYjcb$kCVDj-z|PEUcNXe?~*e< z>WJk!pj(7aAO$nfo|(TQvhnJ(+-x1WqVqg2Y=RRuZD~irwA#rOo5lK@{~7DOjsK># zhOdVpdJl7hcM8z4@71-jBX}jhjLjq_UN_kN=RaQ~--rzJ~}8 za(e?XX%oyX0rCj-FhWfSbDLwWTm}m}3cE_3cW#fQ`VogWed=8VG%dIjjP>l$n|fyM zbFJ!`%5xH^l^C6dOv~90EkUm%T2mw}#5&u*LZxMNCC{Szc&A-ipXOlfiQha`S8eql zEo`I87`dueUtMsnx7s7Z;H}OJzN{-uCt-|tFOD~J-d^Jn@6$v>Qy2QW%=Pc6PyIv6 zUm~_jWG||+ganz+oP4fCiMG!HtTWm76cYHYtwIt!; zT-$OtNq^!R*GstC*`DsN^9J2T?~H=X;O}~`Vp%=;n$k6HQnf@B$KvwoHO5u{-y_{mE^AQemRx4 zh4EF)f`~htz+q7mrSU-dKUB@M5pbPnILngTFA#1l83o_sJd#D~i-$98)62+)X%w@6 z9H0C=+9{X8G^$P+BWbQphJM^PXvOhI3`K+SHjH{|IAX){eB3zRkd&6yQ18SS!*Ap} z9!o6Yi&sdho@r4Pw-D+4ZBnhsfG<+t$Lz!`=WBtrs)=vuVDD zxU`5>4~%78&l{WWp40&{^*nTn?Fjneu-ba_qxvM{0CqO}?{d4o6G@2^ zME|tREjTel3l>45NWMM>!zYIXCdf;1Be22n~35G9Nye4hozA+!>Ab2_1! zUbJoU=&IXg)7P`#t5!DM%7|P3jf^bO_AyOV$BAR5bs3jHoXp+dEs5p3gRLg#U?A~T zL*I|kATp~EUSwcboO#eWPu-=e;1VW}Qcj)RkU6jg-T}96krG@Ucj1sYJGWdW6aB4> zOXMZlFSU)t5|ZE=VE?G(=->ETJC;84##x{yjCPxz1IG6Qm%7b(GYL#1xf^ugFD1wlnp}NzP<{9btTV8oFMYF4ogB zPf#!NMa3(t43ll#?8L{!`Zdb+L4tS_z%k>PU>`;rUd83l&t6zLx9%2q;N41|2bY}# zvX(HTzf8Du8#f*1qns{2vm&z>iyrJT>Znn9ek3o)#bA#jWn^GL zshv^Qr74=YZ~&8h;f}*9Q?OK+brzPGq77>!VE6@YY*r)l=xHQc$v`9ykGn> zl=#0lix!U<{C4_=RhRNk6%Iq2@58N2R;r}2PZ{q~#VK*V`j<&n$;0Q}BVqzuy1ocj zk(334GZOQ=&ih=t)4F>LnOf!RDgL}V$NnhHYLRSjIbS;b`qdijUu2`x^GNZg2&~BH zE6CucY`qlrj>}v`bYUaK9MoB$Vx9AVk&~5tsmbKfB1>%X@5vmTXyqQfC%^bLpAXmn6&qF3$cCD-B)Zspw$SHk*&2N? z+u?Rn`fByci)d=IeF^LV<~@2MGlX#3X{F7nxS-bM7Kf0QDfD5bz;Ty1zpK>~yju(^ zJ8Z~aNs1)hkAURqiounPuIv$|dB2r9CLqOCaMHogw4eK}E3_>?VoH5@ljwTnQyu@p z(`?wu8_qDkn53vhRNb^Z+fyrAXgy!i`{_?#o_yRw7fx+{e5qPh(s{PnM{H3~KFgmx zpkZ8*s-w6lqnejlxMQUB>=*HJn$R*%@Q#C-oyo4lXQnrhEgt;^?Oj7)ZUfrO&T79yBNH$tMjAhmVhD6mj#5sf^*Hz!W@6Lg zGbjOwU$6YU_~hv!fhh0UicKrzagwfA;1{xvXaFt$SP7~_*;)JYMCSga!=}2?4{;wm z$K^EsAdG(>1BAbb!{xg!qOQR?1gx}B1u+Y|p6=4Qw#}7Ry;Ce4`>0pkuyw1uQB?4f zv2>LtXW-F>!l6@jy43AszKi?2^B~kI?tjM+#>HiqV9pK00OEIDY~%8wtL+?j+GOnSnvRHoa$5nPDB=r4GwMg@X1v+IIcxd4iX#@MH#4BfpJsy zTfh8YmKV8qQ!@Q;d&vnmD>73q4KsE>BxuFzSv`S(y2j>bEjh;w@c4evo#C+v&3&_JIAqj8O0w<663~QIA^FhpCG@Za z75dWdTBvQ=k;Sd8(Y*OpO;S@ZN4l`;n`fUtS6szYF%$QCey7mZ1V(s(dE>?fx#-vkqZ}&()NomrspE3)S24yoVA|6=Jjo8<-%*A2V zJ_dVNTo=KB*VS|ZjwOKwQ=HRWn`cRz`z}1ZFzcz$O(_2Rh!%D%yF5F5-4JBcTN3<# zO$8}c1_%Ks-9wySb^X_Wn0-^q?f$gN)x8ZLylPGp*P@g>Q9D1Xot(f~7TgoUSbnTe zOhp)_m=R%jCaO90-56p}1dzVcj@YSWM~!8khHFpmEf-dgfU6nO{(g;eBf z>OF_!?V}KHT$EDRg?I+ueZ<37e=X9!O5}z{w$Q+qc5F5Cv+bp#B>iIB{zw4+=jOQI zAG_nKyqn58Z{Lbza{{C8)|J~TZK4SezFE;Mf;vr0LGk!mK_=SGRhq_f3$ZQzQ5$m=6ILIAIeeOO-m zpq0uXF4S#2M34)uD#p&(CiNS`Es6hD=g@kzo9u#F5JstMB}#@t7L$tC@wF*6PI#yu z%A5ME-;-~A&R+6QuY6j663DT2(00E%{O(ms1o~{5yXCkLy6rs=do%vy}b|9;v?q-Y!nKn>JPW-=jG#`v9A$&K#zx3l-EWOCiOCUwoL;OSy?wQ`bUnXPDO{U537FQK!D#AW{p!VohKJXtFg2mdh}+ZU`{VoHk(b`56gJgIb!JezuB=>#1M;PsZw> z^;i@@i8pXph#E`nFbSFI}OnCnmzH}z+jEoaKc?=)}1RTE|>)c0!LUuk~Jz9~A1B^fM8CI~} z16?y%qs7E?4*p}8{s^68p%>ZpG%p3GVdwsfQVi+7S)>`hxv`b$EUsnCX>M&fH(t&O zyLV97of|uyhzj$S%7Y1j4Pa_@H?2j*i6?cKJEj9Q43{K2Pq`(I%6gAa;9jQlBG^g# zUO!mZnO2c?3iYY;a@4!C?K1anyK`3ZbiC)8S~hfXT+jX}0f&T|{H@^Qr~cXL_n4eM zBGcbfq-$*2d#_7uNNjwhe9=%HXD2eeSbA4A8a}Ju6Zq>_z)`c`^a(SrAMp}d;-+i! zu6h*0I{8hUe%XeDu7YuDD^gMYc_DGuv_0!b2|&&; z>NE9qfYo*G5Hv~bCVDA86zJzC!#7Yya;H^A&MvAj{bz%y-VdvsP4|&j zoAl7IHE76t5_CdJLm?ZtQ-+4w=D4-zyn`_;^1z2Es^BXmzb<81seFLiT0>w~-a(aw zn}A#y{U)K9`BmVDc`bRP`kacn)M=}CS}}Aq6Q6%fOYu1n?VigPowuki)n>IuY}RjZ zvmgtJQo(S6^a9&@X@0KPkpfA7i=c(pzFcF2>!iU@d||XPVq9nU$B#7sV!n_pyEB;9pPDwwL_wRuaVBk@B=hQsAjy`mVlll8__>yc09 zZj)eh@KKccUqYLJrHu_{TT=%A{iBP&Pr|a&bJ|D^7{_<@g<1~UkJ*`m8LBLu@GFK; z<(MCO`N|#5M%`)0~+{JW?Ol;xuPH$^yvsW+L?S%6; z7jU_6i>$s6j}92RkA8je^Y?@fUjo$HU=0k8Fd>t}3UH1PB-YcNi}`LRp4R36Uh~Pn zQWoj#-*5tTG{@hmsgq7REi@4_OnF!-9sYre^ORj!H6TBYUGX_kLkU`xAcQPV7C zpKMyS#{t2@He+36?Jscbi}LUO{^l_Pk5P0uX#!7@vXY`HXloSjn(uB8Mw&`|7>UQ z{*KQQmu$b>?3d;Eg@apGs!?w#10qcv*098Bo8fUXZcFcw!#`FO;7H;F22J6gI&Jd3 z%+t7cx}{i!Hg9?f8x2bUo~P1#1K9Nza62Y!C%s#d_ey3LB{yB`;}2Y(M(+i;J_T|3BO~AHQ`8|XUBul0!CZofpY9$_;q~N)EQWC4xoDg4?51KwcyB(-R16# z0+s?=)};WFnHV?VDMLsYEB;w4?aDjaTlHN0h0P-FGf&^Aza>5=x15sGV}j-)cKF-d z{_uCQu$O)dzY1bG?ZwAbQ=f;@?Ze<1yh=wpC$D2dNY=c*U?$90D`vYWZvXuimwEm` zXjp6pU*`7v0z~oa=@Zc%vKJe*`|InqL-!xA8G;hDN|Tv>oTM9bxpRLd>Uf#BHWE+7 zs+mZ%ANApkr^AceS6a+x?MEL-H}fu$tw>(@Jh;?0sgySn{T93#`Lq4Txx7jsHl-lj zPNlB^L-%?5(yko{vV$p`N?ZEtEgM07wpD_9$ucfSV>|*K{ofh8Uv}D+SifaNFwfi5 z{`~w;&U-i!Uuu6fE@**8d|w~Q1o>2sXplag4N9)#9f$}cDk%z965^hxyEr9vHm%xq z9jsREETTpK>y_nF`B7EBs;>n*a?p9AkOrKv$}oH?Rh*pr%i7S1NFs%|%S<&m?wqLU zAHrh#hz&+suiBDRoAa)3#(gC=l`OY?wFw@*U<8|2pCJgU=sQ^XbGCvnPASU-*=76N zu=t1v9?I`LD+o=qmc9vroQl9D8$ZotR;vgJt4JtR2YU{JrfA7FHi+x_ea0G7i9}>h z7Pd1Ieb+Rp1r~odbCQ_q#IyUhNzxt2vI%|Ao39miC1v-20alYdRnccq(GEiW#u-LR ze2&>&cXWo!^HTl1G&JT}HH^)&YDc8-RYFaJ8n=M-&pK+H3Okwf%s@5td@uP7!1f%* zp6mwrOFw!`#?LXRFtf2U{1oqe`)4aUVL>%sB>_B(M-v2CBpHuZM)!~yQ)1u+CO+LS zTJD0?J95+eijNK8%;l_DRR77Hc1Zn=t{aCzo!)|1Ti`nF@^2@eph|nur8; z{`BJr9~Dh^xTc#n#`Buyh!z~h`xxKa+%RxD>n#*}`5}|RNqIe?U8R+}t4vmv_}J>N5DbT-DQx>_3NCtU$E z6_tGuhfdEaOjpf&>YV2E9;d^hMD1@%=S;@ig1KYgM+@h}kH(A|c|D)c{l#mqA~A8j z#%6Tf5ZlLp(|^{`B=VcOyHa29#P=#L$=y&r@L2HQWF@CmWsKS83o)o%s!F3=_J+_8 zhR=b^I`b)#HJhnu>*0@7_bsxx%-3(#zc56tRoTheP$N3Q_%m-C-`!j1U80G$%_{g&_A)Fsj$RXemNgJG!%6d2RU z(Cm0=s|{JeGivXnX!R6=$#bz#QnGP8;S2%Q7vDW@=x1w6s9qe1L7!Th8 zD+&n;XnU2~nK4`+7yKq`R8>@|+opN0;W9^%|39~uFDW@A^O&%D7QiPX)GwntTX-D2 zgxiJZ_lFYeA@BTVeETeAit%H6Tx+_?!6A2ZRiz#vhxT#Ax-_}06l|^>S&HhjYv$Pa2!Z;Xn^<NZ zch-p8RF(L&%I~e;PD9Z30({vuLD$@fy0s>~Wb|NJ=;lD2<3ld`UFL!`f5q!hb7mRo z(oJ_vI;xG68mnSFJ48Rn!3%IZzZEjYI@Diqo-nK1s-DYFd?NG7+94*&*V>UxNl*Iz zBt7O4(X;AV-H5QbO8KHi-a0S*H2L(^%xrw};5h{&JCnkXuH`VNLI zP^?d%jCVWtv-b*!X3tqzs*($=bYfRF`ulnEZBp+Pjm|y3{uQRzrQk;^>PbxcB=`U@ zd%^(t_a(W=)ro{=$K|x~zN1$;Ksvjsutr~OXJU6zQTjMxp*xaqYV&_+M|HXmQWxpd ze3BZszI+tMamN{UJxiA0F+>oDYgg>h=MUIZm#wp0z(W1n4-tRm-t9=4%_**VFvYHL zUr@5Ct|5lkK1Og^okm}^OVHBtKuT!#dK55T$!^Dd<$$a!#?>YmqLFtt^pw7D0(hlNb{{W5e#< zX84@n_U(C5&%c9Z*M`Jj+&*1TY;tspD+n#MW&5NqChq=*Au5xU<61Vc8fr~@&64DK zC|AQ2yW-0vXKW-4-YVt^o|{Z9xDgO$+1uVny;{KDw=$&WGI;9gf@Yky3^lOc~-8I@wAwK zX>dv{EvIwe67tTwB>wV3h#LOg3%4i@~V~N!2fNRq&wRorAd|KR2F=+fv;CO(Ra~X zQ4H_iXCiXPy=bBu#X`d6u5nl7(5HJEXtytx`uk&C5Jf9h|c^`~8A62*U2B>LYyOYtpNpkhD2(0uZ3gt#noDc;4pN&<-c zxitg%*d?VrKy>2&0Ny|$zj)zvvlVm}@QS^lHY-^0=sCWN@+x%#_@VVM) zJ|Iu(`Wl{k*Ij%|oSkcO#h++Plf`%I2pdI@w_oSo4`ISra{jHuI%z{IkM=ek0;FhL zphDg>+oEoJLr40G3M4Z%nkrQ`^$$P5+E16sjf-Mz#7S$Rhn%UI3y({CyF9UQa+x?7 z+h}eR&@4-?8H+X{<3HV#6fdiG&SO!<^gy?MtGEA6-#rgbUQ7?NWaK*N=czWbvvAc>D+gx zG%q~$U$Z7W=b^+jbIK%^sh^Uil3OuRwj&8eTuBwyd0X$Xj)LB3EuOhfVWhv57V8Vo zB$9B-;4p-08y+&LFZsq*Y?U$HIOouxvq??w>xVFKM=~)}F~Ua3GCYnRQ-wqs++lk{ zDO1p*xaDQp2OfdeI{*|WO%dpkX$|mqjENWpG&TOT{|@qL{aMQl#U+g&cH}v6M{P`^K=QF&G(DnKf30I}gL>cq6rW5dhaP{0AK0i5 z`K~8aW&2s$rpva2Nm7@?j%~o8-0D3q_^ubZfR7k;J(fqGl4YVyy~T`r_k)U3=x9Dv zp4VT{nttq`O@nHGj0rznQEtDwM6+vpKt=0(5wPF&G(W)ES9p|b{g^)M3E94HZS5D) zdThJvz@KIVS(ouLFc3-IH)}{TakPKn6DprgU-f^3jqMF<4eZfDm46hQpVsestVa>U z3*i~~(|qXN#v*2>OTcyWQy z4%B4((AD%&D*Ai-B~;6!?Z%HB2jGLRGSFS8>||ZeO@B7zeS1;N*anCyZO~i(Gfsrf zp;i%mi)0jfEgoMMuzfNRA@ig!PL|Yu#-Ci(k7xQ-=LLbh9G%<$58wXwx3_=&*MEI- z&pr1X?!5C(z6h}A9RQM<>5?KagLz4Tlp1EKcFa`q(hAL1F|g0-Buc? z`3EDo6lR(cm=SOU)Ni6lPTyN6=*E~&ZW{Pnrf!^h)^_F)7 zJovfIZTEi>@%$m8a#(3bV$bGVb>S-!5C5XxtVvL%5ogD($|Rm8Nyb<&D)9@QEr;%8 zTUB2ZC5z;oO59$bzbE-$4%Sv!Vh`%t!GgMPD*ok-TsDsVCOEI zqm|w7+T@E5aIN!vLH{tx1#s113=c}j*EQ-jFX>N$cGD7S_7T@wxW-6j-3Hu0PbR{h zzv2MDmiB8IPP#1Zr8)A`+sX!pA%A^h|{n(AY5}`$nZe#Uv z)@5l9TkG2E4v^fHt94wR%cgA|ecBYAtlHikEmoT~H?2Rc;aOjY`tM7h^ypP7aR`j1 z$J{F~?;I*Z;kD*$ve@NAO8q<_sLlt^0MMuZS9C6f+~+{jaZYq3IUl5quTAq1Ky3Mm zKz?3bF&ydcYAzU9j_$I&xC~rA1K`EwZ&C{RqCezPd@djPaW$CmVCm0g(v*q zamO83^dJjg;nFQF8*M!tkP8Ib=K1=|=_yag>>bR+Vq`~yTZKyk-Z|MptL>djSl8fa zc^YMsI^0bfJ)*vBTxQ^vodNbMiuRpxkXvP~GpH8c7lp^>g_O2GYYQK53aHZ_E-Fsj z3?cB^saKgnz33P@iD!CA9j#{yrVN#|YbsHH;<@FMLfkh#ec$$DfAc?WfAi-5X4`K1 zdA$qz!EJl`o7)e5>tAd?a__%1&P+1#I2lKWU@b&xtoiGlcs(?($JG8Mw~e`rc3{GL z=n6INJUgq6zEh@ViiO=#eb^uI1~crzQP3Br`}Vuo*=FUH4$O!TiiHC?Wf2+MvgRMS z_SH7+s|lz}*0yjBdpZW_A7SfMZV(jvl{~hi%)bEi;OL2 zlI@@X3cHSX*q5Gt1DS2B-D5r6Z+3AJL^*U-ZDel3Pic92b6Ge9?a#`#Q)lO|Vq5W! zZ;jamb8%*@QVn12=P+p2=5j)tWAa6Z4Y6@N=@LovI!0+zcQ41P zSOo93n_9RQ7C7xL#Nsi92eHRf_#Q6D8w_`$OOk$Uv9m2CDt(NKZFsvKM3#-CmmFy9 z<+yd-U+w;5Xpi)fim{-{nJAJY1HSCJo?B(+U*$&0c1G)Q2ImzX%A+P=-wP= z4;IE8IHoQ<@!9_NynAfeJ!c8leC@OA=+UOk2pX~0@z*x1=B#WV8#(CM?aS|Q$X|P2 z+0t&@SfAeH;(w-FAsf{p90Zq-w`!Fnz?Np_NU#AG$s2p~NKcF|bpek9+*rqB{emNgxjpM^cV%0C ziAXYgLZkvdT*$L86+&7gjoY`|4|+=R7g2k&2AK*m>pEqIwmr1HA z=({wo`(3wu)KWA(G74v&zR6MTmL0_9RRngm#jYq&jo3O5?Gs(gx=q~$&c=4#I_mRc zvP_0+JZEB-Q|IoWHm4SCOP|s)b`11;fIA+EJ7yZq^IT$raxLu(+3KJEI-bULOs#95 z#Jswf_&Falt(Aawe~52Qb2uDkpS}sW};*cFQ#0I_kMn8kDRDX z7N}a2)W8Q*vnAGnL4IIAv9KMKCEbJLK(>xK7%dCqNVHhT0w%bO1&_|m!i#Kh(NVEo z&C8B?!S`s}Z!B1%2~%VPneMX8+CXp?V;1?&Sf{?%F9*GNF;X1UXE3Ez%=9~F6Ey>A z_U4WT>C6}H;IzcKO5e@S-WFS7q*_yk&at(PEy2hpgpM38Sj|)Wt=A!Zmb0YDhn!^n zM#f1$COP>BgPuCaLFc*65t{=5c}YKBXtxACKP%EQezLcEg4A&EWCTkN*m)%${3eb@ zl^yG&u&W)uIq~PKfY|jq!v*+R;A@UZqh14B+CU6Qd?AnCaqy-aJ$?wN>i$aNbS(^2 z`f~x>rQ6irFu=fRL3jsI*{kYp02=d-eT*I(MZK44egiR#g&P$+al25nF@$mYRxAzy zTjJ6`&3;9Rz~og|yT*Yo{lJy@=k;;tY3e2d8z)6*XYSNA8w5V9KgVe1jf%+|2yU!H5HGk11`# zn_vyj{)(-)1CoS%)%nYSC2O9L24`FG*v5+4ZalTa>Fo`0+gKr+l>pf+o*nU{R}Vp> zEI(xrd?;5Lc2+t+ZRZ-XLlMB3;8%&+Ry;C!5x zk!5AnChPIv#8yDm2r=7fjiR>$g3y0r3D%F&X^{iEz6&Ds@z_}`-^92KCGke*Z7G`x zW7LRiFDQJ@XJC~;JUYj@;yazy>t6!U)BYh-8jrYR`jnqb=ecP-4}h;w_gAX*41i51 z|8he>m*u6%z~vnPFGUs?4*gUGUjw+Jt5>JG1K{}6pZ+vY_cwwKoM!-h{p(-%cU?4@ zUDJ1AZr~08e)>WnrY~>Z-eK5@dRy-uP&JnYyq9LT}Hkc03iiOA%8XEdj}h%=KV5+t41#A4QA zA3f0zTVRf}$3zrWDi7TyCVM-RpYS%0V@P7=;M4qQGZx1*Fl_~UO6S0=l|yVs%oTs* zuqC6&S2;3D=Ow)!>t4Rv zpVwZw&eOx)@{6$T|FB;1hq~@JH~q%b?y;?U{j|AG}^>v)i( zr4;%%UVeP6kUE*f+Dh5yc-JXzJvA8kJ6q0*7QrM2FF9uFn9Q-6k{DxW7C0Om`b0P4 z;dq=k3em}7j@#|Wgu|yB9S9w_h3Ue0{QiMsqkQ$<0Ie^4-UqbsI@a>Zo_BVlUq?IU)_Kf20pY z`MGpHB(;t12sr(n-}xQ4xd4#7HDh=$moF>>mlptDSl-UH(#FZ|%QFB@Kl|CwUeSi_ zt@O@2@8p*NHeJa&)^}Wv_!$gc{ql)B&j-*OWX+?mI^oWMg*aQd_d953LE#CD-BBH% zxD=WlPM_|{fT=Ns3lG^5TXOyCK0(8yN1^#($ZBG((1p;fQTiI1tulw~b1?X9MKAnt z8Lt{YluSx)rr$ACmPVpHdBtKu4;wd%vqm%KzUe)dle09tv4Tl#iBV{EbC6;Jou$Ws z#CcotGsZPyGRoUVWBcG`Z?dIsPPQQqusDxwZ3DE`SSPkctk+t4opn6Dz8cs1)h6T5 zwy>8U_Qbl3+2axf?&j|rOWMKDHshFb@oCH%TE^#uVXV?)v^B>clH_mSbR3ek+-fnq zua2Fh!oiF?yyn(e=#h4}yd%>>N}L@*Vzyi&q?90MpVqjLV1$q+4u%OLw(MI5Xc3zM zL}DGbG9I`n@+K@oPVS$6`boc@dHSjC34M?6>8GA(;>-Fn1D6@N%)n&^USS#FE3H?q z+_1gs2VS$i=GCv=UVY>1oBq0l5*1)!*{1U(yzVL;UU;WizJ=F)R++Drt!&Tn} zaGkUApR7AJ-OKV4Wk7F~U7)-9=9^FX4NIP6$pbC8twrTjpZN1EfFu0`p!a-T?YaV< zuL|(10PG|zJn6B6X}|G~nAt)|-n`fB!an8M$wsI=t+YO5=CU<@z8?kW{pyoSPn;S? z%{3Jk1850xmpExKHlhrtIY|d{`mVtj&nhoAk~DD0@B_{~m0J31!6vH%FDYj+Em<() zqt}{I6La~pw#L}p)GM~-8CMwFOUIo&WbCvPFXMtN{gHo(!i6$S-d?KR{;aKBGLrT+ z^v#Q)#?yWq6F=$onCPwY#;$r~Jr3&8cPopQGltPtyz90z;FkCLnBzuosa(WMEk$BZ z&ypx*BN;c~bnzIpCnNF`luOsKSPopTu%?cjbpliP%4<`rZi`@SBW%`_;xIBC$h;Rw zm^mRfhQQCi2-;e6QB+-34UWN>!+1X3zqUQ{@Ppg8@A=yH^}qen_RVj6WxM~rZ*31h z{Ltmef3kSFyv)F51}-!3ip>Cbu|E3fBin-y+^Y||zOsG!OP}5D{nppE#~%HT?)uUl zusVL{__I&Z?)cZopguMUiVepqACGL>$32dY7|dhmJi5h>{y2sj*2gs;Db3aknCAPI z3Pd($a2Ffw;m&Kk-$4LUHGllqV#s;VP^_s%2%qd=zQu}4*|69a`Dn-;PMWDmnfH<+_Q6Vg^K3@=;tbqKK$VipZ>|8{K@tc zKk*ZMr-iFsR~~%uK|cvocK}=w-nYSU%L~5>pdI20dzL3Q??gH40Vkm(Oi@fEs=VuX ziP#flCPeRhX>wv>zU+*pe~Cu?+-MxSVqm`W$&v$NdZ>QU1Q+?*7D|7S+s1fhp?F9` z(m@WaOakWAv{*+^Hr6tZH;avV1)8z6P1i)0GBM5SsZYj2m~)PyZJZ0kTQYf@r8Pax zddyNzTae-&akoX+VaoWzkA~JBvHDJX9aGxaX|uCo)`+*K;rlSIHFt@F<=*d<4}T+P z2Ym7~Fw@LqZ#l7LY-)f%@HgU>f;grt@J%`zw)S`OykXh8KpH`8=%CKk{I~J zpkri?Se!{--PtHxsyJ}o3DC6O|E&r8WHVYk?Hx`0K_#sf(N4LWXD)qm-hF; znYdR$yEO4(9M9jI8J2xyFlfKXI&U9C^ZXjm*?a;yM)ZEthXrd3((?p?u&f_EXxQ$lYB}KJ_GDQ^i6TgCEw3eIEJx(03l% zp3rgPyz=t~%-n3EBIT{be*gu-9 z-xJj+CC*Va1Fq-cjO{{fBazdB0QEEWbzF3~O;70NM4ID0$IS&(`W*M&iPGEW;zRx3 zKC+U9)ke|J(JRaAS|zLGm_lyUvJi)+3|w9Sc##P_Fy|?iM_j4W z#(M3Y?|kPC+HjA!13=FKIMR1tyg{>pbJ9;y&D{XV*&+1d{oK2l1bWBGEW@|LWqX%U9Eg}c%2tataC(+GQF0My}5AiFBrnbA|sEjCtP8MtufM- zpyipEB`!X=D4CSQ6-kzn8&N)|ZDLq)8do3DC0;oPw)|!tPK@m;{?>KO@i3QbOwQTj z6I9#p{U;YAj!8Gx#j2ytSwr)C4p)55*>VzWyJcK9)#5PzwrxMztc9v^V>e5D)9-cF zcF3Bmx1H9t-0@*sulChkaO_GQ&@zlf-rvicBas*5@V4YxZCl6*{?Rmye%1%JR;lWJ z5WHlqph>%M@KCT%847ii_fixFeM*H86{uAO7KYY;U^r&h0I4dFyubEjMqkeVu*|@WL`<#rJb5XL08kcEAvx zqn>^mcnD$+$vSI-My{0Pli%IG_04bi_U^y^+Sha!!2SG;+b+;Y zbhj8UE(F}93jtU3+yF*@Sn6xvneU|Jv?xsjb@2&>0(AGbaA*yLjk+ zTHaQsn3lgr*VY!uCi^5(?8Ct_@5_Ti-utc*97mm?*zMkf7|?w2HctMb3xR@>PXEt3 z-*pHtWo_4XK3O|11(lpK=De@y8nAU*SCVPX^bCZt_*58=o&n%C=RbL_M7~hLgZ{WP z`qo=-wf>Pu9=XDE0Jwu%KdFw)cLJzB!RKXpX)F_rYMyMVFUp*raN7$z1W&`{He3DXrFSgInB3TJ_&z_k^s{qi zhTsir?QCv=Hoo^V?`Ymh>e$#5N!PKseoF_I=oF|Lnjq)2kT_aRk2dc9bB@Sc6@3Q(`jf;2n zO^mY;S9~W{N0pR1cJ&)SVl7PN2)i!c#4wS--%CSb{oL9b>smTvD|eQapJr`+`$->U ztt%Vt7ahkcwVkb2DPyOfeV{dm>$Y<<*2TyL#$q;!>KU9amT8xjJVRqUNDkry8%!C$ zjl84}&iiU4wSItRydAH3jGx<_tds62YuRHYKSK z8fYPW7Z{2StREz+YqC)=ZXKsqglg3)0P9(ps}I0<_xkG&ssmbWjXB$P>ddb z86L*`tPYpb5wHQ|%=?T%kD+S-?ZS;!Ve8hOQS7+MlS3S^ z^-iALv9vQd=*+NB{QmW>cl?Nl@&5OJz(e5|ufF=_ySLAM_Ahz%)v)dh0k_DjZ$)pZMl(4Wn0Q2edc=4BIp={_=Ruo3{NzHw>6_m4CT{!RzM`)H@T&lP zX!`#5zyI1F{J|ga$v@{!*Vv|1AiiL4vG2>p^T@#E1%T&~tY?98g$l@(_rCYNd==nW zw@e*<@rz&FbQi#;TU?Iy01U2P9qV}jr?=mJJ9`8ee*TX`z%h3QsH|@4pc_*Al_QNbgp-TH2;b{^M#ZE2flvBBTEZQ?5r-ovMKL~390 zUEZDBT0^!+4mU4s*6m6nm7t?B>mrGsr7j4H4{Lm@h%i1QqvJ6wV*=KmQCeS1dOXnY zzWeUcZJzrF`f=j_pZ)!hY(M(0cZK3$$vop&s-Eh2NS}5hocib1I?Q`V9=?TlX`Xe} zv2@+BOrx3k8CUY#d2XAL#R*ianc4$NELu*V()!6Z<%hCpN-sm}8&t$A|KL_*w96-X zbS~Qfo(8RsE)(HI%J%+CfUxJ4}wt;9Cy%p=K#oy;CQ9Y@rf3x=U5JPPWZuqil4TL6zXcp zDfX>TD}Gt;?VtB2Y?Ux3ZfPB`Fy0@+V4Mhp6{d9V+a=z3btHJaJ|!bayk6H%ntU_N zF66v&IwDlVxp0EBmTZ-QkW1Uw1OM~^!&Uzjx_G$jnF|AcKH6P(-L>h{|6`pKUDYqB zUD4M7PP8rYfWTv2065Xz)k@b4r9--`Uswh%F95u-yq&SC$$~BO8g~HjeHDEj;0kY` z`5COc@4ov)8#lML9O(&{NBZ<%+wswfZiTtR^8sXcqVK)Ds)@BDW^R!HrHJ*P-OUqD zq}p||W3?T1P?0#U@8kZ`^8vME>%ojZlch$)a1ZJ=>>ktPnOWf7kLATV-YJm_(jz%s zgWr*4W~y*vU-Cm=h+B5p>bU(5tj16@g4Vc9kT@V($I!9GM{*GRcyta%ZWzO~H;(aD zIWxXB9<`m9&XsJOo2ok|sCrDRjIksl5QU*$+LmiEF2Zzdjsu(6*-B*1*JGllbX@6W z*)qpwP>oyMw5(^0_$--WjYWo@(seo`r)W{RRvXSf)}+n)iI!}1Yt0vGG;E#CgPV-a zk^0RCC-Ia>Qg^SJg8)@ybhB=IlsyN+(8MBs0X1LR1xg2p466JieB_Y_w}&5kVE3v2 zvz_>dEK727@jL5L&Vogaf1%T9RLR?RHVtTbS5)2y$x^g2X#xGwj& zu(oyAVA@N!saxN=jt=?S2D_G#vo>rZKxNpXhP3^VH|`M7z^d0+5FPeI)2xl4MpI7c z?#e}SKwJmk?=?4Ne zlniEVn^KFny!kELoBzpwt*@0mxcy)M;{Vj~CSNV%V)NgA^$Xjrx80$y2I$srIq}a0 zDhoNLNTfeUh)#C}aLd1sot=o97>Un^1D)OXF@o7Wuq=BHHLf&_*(jW-j4?4*n?;d0 z9EmMkI<^HRq~BkR*yFa=sp2m_o-3615qQ^M;pj2qylBUZ8rQAt@{L!8K#ZM9+Wb?9 zRJqnrc*j>;Mi0|k)CL(AT;z+KS3Gg@~5_#%L?-iY+8X(#%S^oqVheHA~H z-~R32cAIl6>{Le9g1B71kPKX20C*u;yTC>pCz@m30dVw3fAmK@2jEmc1$g@T&wt)~ z0Y8C3;k*9262>R~eHVZy1ojdGv=}>72^N)iMo$~rGlTHnXv49CvXiVl>KEJft2l9D zhI1{q?6)3d%@;&sS@l8-`{)=q@{EOp8$A_bCx#kNd2%0YmyQXu9K6(6 z?b_bssGPL1ZD#%vo2TUTyErWIj+~-6&ky3lWh^t=UBBY;xV6BhORp=&KBUzcx&f{{ zb-#EVXUkM$?lDj=z9ys*?J?-^%$=#V%^y_d(D9bUl|CcWplvOmY~AtF<7%Ho5!t+` z4nd=5l*sr5B>U^C??^C1PKk_GODrWOVVF18{oeCPyA|-k2fyu;e{3i`%-9Lnol?jUws5002M$NklvSEtIRtO!&8Sm1n2Qg<+>MVd{Z|q zamM@A{;q$V=j4gD;$O^|jyxqvMtpse#dghn@LbBu2mahCZbt-h;v$|N3%=?1`KNBS zw&bEkw6P!Cxt$j`l|fnrJgE-*OE}#G46OU1TP5gP+vutTp7t`csQu1~Lrzc@Pj4j9 zoC(^(-C~U<)Y(3J?$}Xus2u}LtYkiR&R3qZ=^*b7LCrSn8ueNRT{jxoeS_(spx!CG zy*LGEr1EjW5N`ROWo;vMzkIO`vg&(V%(gTw`a-~D1D`lnpHV^(>h?WR_zV_TyL;CrA*ZAb2$@sBV?o5Mz5!rlx?Wm91%P z%Se`;$*AJWdl3QJcUdFPaU2%51-`N{`4i$AP-1Aljvyf|I6T#)K-I@qBDfwU+q1WA z4IxSKdSGZOYuo)3VM^B!$*U=RCO2KX$%O)avVTPn0(?f};-~-oenagezW%IF{O&18p&jRuc08ae*S#_OP&5ex!F3XF`z~u#i7nQzg%mz(CqTBzEc&fje$9$)S zpRmyD6qzmp9O;vO^n3>fBQ|t)iaFtp-3PWzSLKZ@!F+g4=NUGtnD`mWQ#e#RKFA4J`i^fTqEcl(d;(y*SMyy_@QsL z^d2T0T_p21(K%rZ$f^wA>bG=_4Osfp!jJtqrDJccw>Q73P;5G!c>98)*B`ukfrr!L zii^JA(AZbDO^-oulXw%*+0Cd4CXu&qB<7X8u}0ZHEegDqH{*~be~wjc{!^M6L6}=Z zZAouvtsqyrE9rszzqNbN-y3hgefyPP`DfcLw`t>jj)gcM)l;D#)_nHpBady*=-B~J zJo%(A(H~G$#2&#JJ-J|1inj-Zc@Ju(@)}^Jcs&YT^@1Hu8Zbg0;mST)%Rq?{mQ`&- zuuP&Vsw5(I70ZEuk}NpdH4mdQmt?_|2_3tjUW>vTx>zh)3HTQWG~cr{Zq~I0%Q7A? z@3HjQno?GF<#p7;wFW>sNQ>IWSr)r}eEcAkZWYeZ1?JgS+&U~vefiC_9*;ivN#0;` zY}mA!abp2T6{DSAgFQOdGhumYM#Kk38S*q%`9ZG+qE08=+yAXtz2?W0*RQu`?(FuQA z-tOa~#2Jf?4i{vCJP-#lbUe7~*qw9rVXI|e)8L#O)wVhqZNA4%7DX{56Ugr4ZYa9Z zquFygGDCWA?E%f~><8(T&I4=&5jGe1pb`Z4=XKV!E z(!;A>y1j0CpPDgEc+0vjK2_d!dJGY>VG(y$OLnI#H{8Iptd3rL<7@bOt3Jig!`mj& zZ27G!Bvn52p`Y7+?8o1|yBpv;x&w`$3%upFJL|)gq=-+;NvXForPNtvBeR%(0*he! zV9RkHja}pd_U$N3zlsG??fKo%id|OF^&q& z1~ZMkO9Tvx!xOq2g86+rY5BBBc@$;$dwrltE9S6z(oMv0dS)2 z<(j?%;9msb0qAV<`URmQJzUt?s0T1WhWbi(gv0O$_tV_gW~P61=^bXi_}1}-lE zy!adr2A%<+4fa?Mu{izB-~7!}ehyII@xQ|NTkg5%9)1PjL>sxE4S*59oyvnScnBaH zw%R_9v-2^n)HI{rPuu*NosKgXuH9>g(4k@7D?~NtEA5E+G?AG!@4807*Rj#_#Hcf> z%pZ;sjf&(x1TusgRVMkU4bdXwEgSlUpK`UBdy2!H7$ehbpRehA<*{Gl#HI@E+i!p4 zcE_7;PwXZ4M44Hgxtq1(ivw?a>sz)PUvuMj&pqD?65kcmB#;3z{`Kl{W1wzI$8221 zU$L!tz#VVb;a+{r@f7>8asEq)eRB{8R@5ykSSl$5zp&Uw@$MiP^tjQ~cpO8w#fYuf zUpuf(#ill#%})^aVSB=HuQ2I5UzJ$ao29NwSXMnw*2ye2(BT)&+}#w3a}>!m>{h&m zEy%KFOcg5}lwcdBz9G%rjBKCMEyR6{?Al~-+MW}JYukO_{<`O%=(g=W?|JX`kN)vL z&IA6Muznu7bNbk$k7-`h0|VCp7Cg}sq4K;$C^X%({E{}zgR+re zi5!*1aZtk<-k3F)f|_D0ElA&?33|(lI^HX`Qs`aGv>U_7MyVkzW3z1MvgnZw4rui% zCl#L@*G?@h!Ipt4q1}sUCde8ske^o~&#}P=6vknpI7q$9G8}sP?_E@FV=!R+vavdL z*t*1|n>EJ5V`ItL7-3BjA7Ob|a!z83C4L=Jk}WOX6A^O2#iVv~HpT!?2Q3k%jfeYX z{c#b|Q3wV!gjE@T>LnP*$;|;?S zy!8B&D@GL!%q}^?B&UR$ZIr4JqmGTCYs4OneI))iEEnzyQ!5T1#h6H{gHY5n0OwDG z^Jzin7jVo&S8c>%b81<;8KfK?#L~usmWIG2t)ASR*?!=5DclI98#X2oGNbt2ib*d` z-$S#Iag8L7Fuj3D-yD!Zk3DU#Lxt|`8J>!JG9k=xnj?}LCaXUo0+YQ6MBFs?BTb|h zcWUSqOa?{n6toeJiXBmB81XE!y>jJM`k?Ek)7#&4$I+c{x^N*@yt7zvF4T|-whM~ z_R=+wDtvd!QRA@XrL(AIsFyYq=^8%mo=hv9@v(4O?miQ>EUJwk zb(UASntwTF7zR(jZoT!E?T$P032Cp6W)jHEyM<)8>FW5Mck1@G;z95D7ho(oK+JJ> z%TU`RM!ISLW0G6*xTJ7>kDLyN^G<{q^TQxBb8W`d@FK{j0y)c%BKL_&b*gXh9=Qe6Bmh zLWm#9THMd*5X)8)<5-P7RFl!6(L&Q`wG?O9CUJ6lOWGOODj1rYc(bN$E{A}V1~lqd z5Un4%6-Y8~m^6zwGLOO%(fJ=*kqLG%fY?dxajOTD_!5=PSj^I%7N1h)ohvBq4+El2 z!y?3Lbv|kHLfl}wH4bES4KEy63bC}P8LY5o;fwHK84Iy^PfPBAl-#LFe%PyRtlEvP zL3aSLbT1gMkYbahHvrM&p}n(CLoVTZ@~>`BEyBuUS!A^#a022Bu)A6=0ihh^AX0{i z6QlLy-)F^*njsF7g&Gtmj3Q9{iA}t2z~8fCCusN_^n(?ql6IXgWR|p8ck@;j0+457 zSchC8G^_v+Rq&lh0t3~rX5k~gBC!)-_;C!TP0t&Q!;>ZfX3~m*yYK${w$J|MUvB^E zU;XjvU;M?VcgL9hwmk#;=s*0W?E^pk(?jrtJ`}tE-fx(Cq}(ASZZB&n=xGj|S;lxW zLW2NGscPBX8$Em{gV~)tDl=d-A&CM3enJ~8m}pscT*;vDUW?d-Y@uW$RSBm#6m#Ry zd|!%hjhvntqd!QTBK0+x4tp7pzg(15Ea)^j$DySUJAFGccK~o6r1ipP%(Kxf*K^U1 z_z6Hgi|86(0pRxkzxu1cI^wGUXGkvvFE|62cL2QL)a?zKL{&H=XID7-#3w#+q@MuX z*og1G`|cw>^?y_UnBThm#y7s_{OHa^>?Uv@IQ_}hoLZMkJN z4fPI)Zf&c3eM<+YAV#wrGZGHbo=^ISDb=B@hvB*=QW%(=T$o8)PO}}_UF$dk;|mKZ zuz`WO%h(o00=B6!ipt* zz$(Pi<4~8_x@0?OJ@)9a@qgL_jIgm1nkQhEvrODhE?a5L8F`lRiDs5wSCI&}#5_^7 zI`{B4N3px=_FNyk9Lb~*HQ<$J-?le=)HvqRDmXuIX!u;W0fey&hk8CJ56=|?+7X6x zMUPSCAV@0(sXSPlyGL1fdU%pnp0~Rg3EVjB%AZ$ocv#_lua0%ldbc}d#Dhysedp9Z z;E=xu^_~C6AAb~-%LjGx|BD~}hxRn14Mk&~(N|f%@TD*6flXg$04TiyCk9Y(OVI;t z!?0FlwsYHllF)&athUq;MPX-#uPM;GYIrCk1PQ#RE!0AN+tF9C->OmI%LNc^@H>OJ z2&Z#b$O7_i1p>I%n%>a)-KMv9pTvN(v((s^x!jOD3h$KDa#w;pCRxLic#P5bY-+GL zhO7e{n*+}{D2dsN)cdsBsBGIfV*_$N)VD~Z<!&q5)P=sAQuc@urS@YDF3u@+Lm4xkl1SMwcM`)>N7tA&}!zuH(j@ zkh;vMF>h($Fpe68W2w-3XU!lblrpiFLm6Y=va$ceHlj4v z+gY%X$D0~+d(2p2gU-y&JA9O&<-q}l5mWsG=2b;~RGvd<4Xy-11n~$y)43oL>-+pi zy5m)MJ>H`aKJMJ!^{#hrue-5-I(ELN&D-T|`^ZQB0Sx-3fIovu$EU}(2k!gUcIzAO zgifEdD?MC&>PU?Si9k;s=)gUGBm3tsMe`OwfO{?#8*(a3;ZGir^(QlFQ! zu2WNZ-b3@Dr%wE@=otV$*;k(rLy!4tfMi$Hzp4kNZ+v*l!-)0iKWscyebdVq3tsNw zzf$=7O!Jj8-j{Wp>(wd!e8u*@_r345?*Pzb=-d0XBXd=YhX5YwyDoh1MWUknF}O+_W&6sZ!xG72)||afTh1^%6b?DT2VF~#XMn<`?v4v0;doO)K{xem zm*HxD`kX|M!uqLBKhtSS;(PW9mp|V4By{s@k(2)-GJWCjC4F)tPs6ojb@I>qPrnE4 zx@p{xF9__TqW#W8_w63|$0z?E)yY4l$J(yC{_>Z_!cOuWp&E7eN~Wl`esyGfCBn18EfrbPlBeLuccu8Z5ShNQEuFnkAT_ zv>d#cK}ytysWn{>-Xb7~$YPSD1Q#lRqH6w0DkpZ|nueP&d&%%e2&;+Qp*L?TRl7g#)GX5IhQLn(an zn>Oa5fLog05)wJWQ7|`!4b);d2xL?T&X8MH+ZoEm!M5G=&3m>#{nJ0&zWTRcGj4vk zH5|F|k)QtuyE_3MdE}w(k%u4fT4Y*F5+N52eOFK->%Yt)U=pdcq|ErZCsCjw?&&gI z6^~&VLN3aMJL}k%2KFE?JpSXtpy@aHBxJ=P9e(@$Pha&>eh1eNPy<>P~U9@hyV!L8H72CE` zaVmCFv2EL`*tTs{Y-`1~ee#{N_jB*x`FD;vX76M4)?Uj*iAG%mTxF&2{w^aD{6W9I z;N9ZvnYx$1Gqp?IRu5fS`=M}oATmi;VPiqo$8&J-!hNHGOKP`hDvdN<|i6O=>M#*;-)pXhyb7TPD@Mf8K~0xFKe! z-x0>$JgGww!{HT7&D)CSW*^b=0La2qcPi&5{Gb3ie;*XIk3>K;%-w`)ecoW8(S|eY z_#h22+er%gz^ojh8hN&(CkOYW{kvzD$HW7Pfno?##YNGNsJ-}C0)s}UIoRKoL5cgwg^B%=1tM~>=+Ge=(!AqS~1 z#1*MsNva)ccucoxn%Th0l_OjF2!Wjn41j^S+Tva$&_Zy~Ws8fN&vS}FByHZv)O6Ba zemRiP>U!5jHLBjWJ6|W{_&o1&Cm#;86c|Xx14hBJf#Hg~tQy97s(+O$n@> zDJ_KAJCXPmD9QgO@5C40#qpUsDmi`sWhmJ`;TRL1TQl-Ur;KJI_Z3F7 z>0m@GD2@`q_(Pbk&LG%2{gI3b2MVC=AVMpe`U0yr$N5}GuR&S4#B78C>s>t7g#U{U zzqJuW&@bckkGjE=A1v;^DdxNST!t?p8?|0DHO1978AE{Ss2YCSxi354R zo;NfB|8Te-#OwXU?ZtT!vGclASHwYdDWfbx*L@8}ak(4)EYN+nSZYD>Wh}eRm{8ip zLmML@iW4(CNxT$tzT(0Fria$Sn9!X9Vdb9A(Y70L6c&ad&id%?J>=s9S^~0{nfAJI z_se*2WUbK|PsWKt`m%mS5=cZ^z28d^fc=s0Z<}rXqAWXp7$0CGQ=OMhaB>z*$qNQp zLh`u|EP1tazIKlkvHz{>1WDfmdY!M#2_571`sKNGN6=m3P?!UHKRm7uaKZ%eT-R0G z-Hd)A@cy_KRoJ=Ahl0430kOI_DmnX(Nk;i6`WGLSX7#iVgn#x)KFQ@UQom~eCbcaV z&Svi~$i-v(qO6UqDIc**)}GQN3HTLE$>SY_UPMI85r~wxwo(4~Wmai+7S6UePaVR_ zM1^eaCBj`7uOYz-=W?H+2;g9twUJnGOH4-xd`-7V55Y~GQa#jUA3XRXP_X-O%DT+s ze83)PUcT6U;)<*KfE!Zk;5{6BX9<8y-o-w%i2v=|dhB26@`th~^tp(Eu$h1q)e?(CH>@@O}WP(=<7YwXw@)fwPfy;uRi_);P#y34=(?ygMiu z_OJ;^X*ol?R16VO_meEdx>s|C{dGvqG{w&azQgur@cSFPqK z=%3-CYF=8y!bSb|T9nS4vLiXL)rJNW9O$lTiNqzJlc&-Ex87m*;RFv$3C~AKa54 z>l{5Vaudx^gsrZg^I0BLz~bqNS8F?j+J58n;oaaLoSyK%5Gq(1*DUSZX~B-36S^Um zDtG9jIBuR#7Q}vaTP@HW705COk;buET01&IW#E zBLVP{lzYZ%NjFtiGo{+>Q6HHod){Gt4G~Q2ek_n60AT(ooI0 z{w28C@6ay>(BHV6rlZ%s*j>WZZGSij!xzScsJ;Q8;4Yh?s33S7Mufdad$IEq_bGS+oV;E3TR zvUndXTznjtvrWnLq zw{(I_1qxHt85y>WxT)5t>0qLHQ)0myG*2#Xsp5S|VN~s7Ed)vu$^4n=Ut461kK?-j zGmL{yzL`~c)yVN@7_JxPjUVPDVyZK=**+wvl_$<#RcmgDk^^t63hidrx@t25EmZRw z-s=EW_N_mk(mAFr8|qdrqfM8WrNFwnM*N@p-i@J8i@=kM;6k_w95E`;Rox?93F5?l8MVyV4Du$ONr1{q;E%E$Mbm zoGz;nQ5-4{!I%MQw0UY=4j!(AS6XuKy>T&A{$0AVa#$w^q}f4MXqbggZtz9cyd4vQ zV0Mds?bmt;iY^qJd3AbPajaB&fLh_jCF>QsDeqWnH2B=TDz zJLbJ{$xjmX`9pCxef$n^;yDV^kicaN&dqsLrS~*>_nTpJ6iSwh;!N7t2*CuR9Yl3O zS~Hr-`;yLkG;Z4d)w)G#yB5y$2w9b>;e}Dr+8-WUV~e?T^9Fp)j*QlU9sL+yoY8c% zRZRZUgUq<@e)38mq3)bbyz3Ecq`IWFVS%DqI}p$&sd1)vwtpf0x%#Ol%>NR>goJ#S z8-FL$g-M7)din=zm*Xrs>;w?SSQHW)U`MW&Ks2t1<9mwhuCN;?B`97*24h%4zh2P> zN^=&Y222iIP`F8tB!5@lzAb#8Ix!MnapXz5{7dUz>-?{J$IIq66IDBSEd)#IATF|# z-M?5;DK7Gjnt0k4;#~CP+PM^xTXB-9QGtqd-hJaTtS5B1$N=;XlzJ#0!}w~nb)zUD zLlLtsVX29Eg>HXiCt2RKRo~y5@X42ALcAL2(Ma;E`AN?kNT(&bV=@QgKki$ zF9-M+Qo@&ib=A5ACr5zqX0J()XZGnM_LU3Z)j$0`l<5qRQ{sK-@db^e(UaKt6qe;b zF>_E--~q0bOj*68i}XH01XRC?_E^Z(Y)>!BhKX*mp}5*VFaBPy=spaVgU@8)4!1#$h7joCE5cs2n*L$f7)C^;s@g=Dg)4TIg@;1kC^v;5taz*e(Qk9N>pI7^fC^@0k7M1yM1O%08y8Y85PGO z&Oce=1YR(LwE%)CLuU!Ug;$P{?K4b3u+@5>k!k}4rGA23dQZW2sl;x}!`%PAob4{| z7_%j)`m&nyR_kN=8>zn1$ZfoAI{O`s*z)_TS|idgb*72YM_LwzKr;Yyel+Yg_$uqX}Bhpez!9s?@7?W1?qoLkjxiPp+ zuq#Vm zVLa0^OZuU(ZG#t@I8xc^$CizXdfs^?Ra}lJd3%+LoYPMlt&@zekmm`QSd)bZ)BY1^ zO3|gXBXNL2w>G8%Z!lPE!qXH6MQSZjuHiu;r$~!pfto}f!7~`y5(O8_xLIHN#*WwT zVFA3Pm{~k^**4&yl(pgW);Uv5XSv`iK3R#uN71?$N+Wv5;)uMMD z2(qa7G9`j^Y|MmNOFEly9hSg(ulu*-C@c(vwd^D0UX5 z6^?e+x5_Mq0*kh~^&|N9P=X55FQNiG`Ri+=h2w}r z#zRuxhZ)tTlH@h`Ts%&ug)BV#tRC)~Z{Eqh)U7+0jAWC#$kAxHo&@K4@;N_^B_w)7WEe^>(`}h&ge7RRjKI>iH z_WOT8Izu<=E-qp-ANtS{Zk^ZtN8L?6pfgHu^rK(tXb@^|b6N;)LQAa;C%MBBoOk1g zr^?1-(#$>jT;E^De zm__;n_ilja3^21w4mDz8t=m@ACgB@44UX!RrKm>8bi z8MgF}PE+HaLeBf}h^#eh*VdwAd&+*Y;v0hQX9o%dpQe2&MnFjJ?f2O-7Ho6XK!EZ2 z*EhWk19Ij2Vb@!7568mKju{#4T>r9nfvpnh(;cqvgobe8x)Dp8gvPWFLOjDdkNF}W2od0?J;w4-?VmF!j`6*a z>>nnaem)Ud(pV(!e>b7wn#KG`%i+9H5IREfl-3({-GM#1sTL#r2wyh^I~p-|XV`*ilp~

qY^x!fU0#^aX;N9SyE&Ng= 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�qzf33|3V$nrmJK3;HSX1wV5S)=;Zqp zEI)j|YOg2;e(dDeCFJ);K`9py zl7#mfnjE5P(pOu^$R&mNoPNnXzMSAV2hZn91c$N89}ltVa4(^BER6c>)&0|xQu+}c z{#hHiD^(GN^+p_^{xXC1iCs@dFWU&taqNgU;l#3-3!n5(!Wy^F;%uK(+;7HHDpAH+ zrl8v}%r>bx0=H=9K4Un`x$sj4>}@cjQ9%W<(l|Bfyy_W|>fkkU6B;Hclk#mJQVYhT z+!vJfUwfW~x66%3!CMK0qy%=Gv1t3+FU`iLcOj*s`f>v6f8~$A742kO?(Rp#(-Z(c zM_SvD-M#n;f8fj=-&Wmm?6QC zKs1)qyD<_s1wBT@qWOHoO*;iY>O>+HqP^NC6q}1bCZfCY@UtfY$U}`wMNFkTP})EM z5tey&(+`Cf8P3Z1+hnD$1{uxQq)aju;VmiiG2=p~R#?v9tPJ&jm}%yWPxyVQhkqFU z8Zaj`z6%KBqe2Tnm=DC!o~EkD=S+)1Z?K8%~r?_s?(G zKc2bsp&|`F#vsv6ZXUW!5^EXE1m@aftVTHeYKtmcn@2GAHQyo6I^BwKg&M#6a-

lbj9>M+Syux-T>hB>gdV_-lnt!+MeoyO^W6Xv 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

8}Sp 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ΩKo;9AyoJt(|1m6;%DZburh2AWtdXx?f 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 cUwvkquhF#SE0C`nf7ytkO literal 0 HcmV?d00001 diff --git a/Example/CodeEditSourceEditorExample/CodeEditSourceEditorExample/Assets.xcassets/AppIcon.appiconset/CodeEditSourceEditor-Icon-128.png b/Example/CodeEditSourceEditorExample/CodeEditSourceEditorExample/Assets.xcassets/AppIcon.appiconset/CodeEditSourceEditor-Icon-128.png new file mode 100644 index 0000000000000000000000000000000000000000..39637189586c0885254767761d075a6af9429157 GIT binary patch literal 18503 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 literal 0 HcmV?d00001 diff --git a/Example/CodeEditSourceEditorExample/CodeEditSourceEditorExample/Assets.xcassets/AppIcon.appiconset/CodeEditSourceEditor-Icon-16.png b/Example/CodeEditSourceEditorExample/CodeEditSourceEditorExample/Assets.xcassets/AppIcon.appiconset/CodeEditSourceEditor-Icon-16.png new file mode 100644 index 0000000000000000000000000000000000000000..82db99949541c52baeaffd0d2cb7e20889cf4846 GIT binary patch literal 1881 zcmV-f2d4OmP)BE1ZQLxAY_vg;$?V;oX(lt{{G@3qJ`_O^!KmPq;Qw2}Cn0L9?Tam?khm;cmfj@-EE=vY<#k5o0f^m&*sM6pBI0EL{uRZtU4R5Z z`^X8`V)zNfJ8YaF;u6EP09P2E5Ad?jnUOMxUqvh^s*L``+lU9}BlcPZ2XpY-jyyG} zttleQMaed+noc9ry@UIIwng1*#M^^UkFzj+6yF25_LnMhmf?pGpH<}CbcnAmX|u%; z|7E#p3GpKUUAw%6atiT2#A8)^yd3Cssj4^8z$>TJnP(8+gLrkpJj%xIMEtceUz`ec zeo~wa<_{hK;NmJRuzL3+9o0iVC08s$)vACv7|KExH6jmbd4gn8^0FkllzkRT6fd|P0n zrwSVAXrbt(XrcJk;OyVRDf#{Yw^VBW$m{6QFhZvPBk<6w!tZERBfJcLd1$M3&)TehHS09YRtkN(Z(GDi^F2;vKBX;HY+Q*UEnTqUvgh@A9J5aYSek}G;8j! zqp=F+X_rylpF&#LEj%b>g+0Q~5^H*5N-?MwSLAe5T{?GXqX;9WfX;*4pXw6&V*io?m|<6;W0GAb4f<-njQ>$>Q>9MPr@ zwU=n+0I+*9IKpp9{{0u*d8K7@p9VPmCp-6AwmA>rtOL;dXv;Q$XXCx^0IWWyc=l3w zC&Xgk0yx!!!@*Zi8qcdA>-AfBZYACT*nGWS|NH%Vee(m<-vGFv{{#Oecnig2*2@3@ z061k>NoGw=04e|g00;m9hiL!=000010000Q0000000N)_00aO40096101%)900aO4 z0096101yBG000-AQ^)`S0>Vi|K~y*qrBh2!Q$ZB|?z5MBDbRwEM|qd9(*=+iH>3;H zkg)O>xN(E7+__@s55TBD!JlAoVb~aXNRR-UKyASm3$(q3mi97p=Z-VC24&^KlibXl zne%<;oNvwr{?nAd@$2i{NQ@(PRw)_s-1EHf-m)w%{q~MdnrnqSsVG$X()8v6y!-Gm z`SQ*DV&)(_!6-2`7Jx%hxT*r2%PllRCqu&{8%xWdp5B|jvv)e_uuFJBAJSw&HZpa-hknOG*1nKU#L8D2%p ztzIM(4sO~y_|yY9Y77H`h0}5wM35Y0vlDB(*|@}p1c!yAi0@Mo&2e&GL4A1>E!heh zgG1109fe{E8^;-(SI*%3K72~GfQJ^QhHpFjNByA)tm2iMb+hU03$TdB71c2HUn_ z{CJPT#v!`Z05g#y3T^>HX!wB+-|T?INNc`At;QMkg@!@cO5EvzZni-)Eu1wdvW2o( z8JKE84vUpQvEPVz<5AdEu6-X zV0L<{Xxq-0OQCGUG;mxhpnO)MJG)=${@xz_nac}_D0OU`ge^Mu*38}Kr&k)JQYn9K z?%@+c$g5(xcv}P;!=oc)WH6yM>J2W=p{W{Ar}vqd!0$KWUGu4w;!A>SKhwg(g1)-C z)mJFxy9`x*W|>yI0JHXvHmz2@VEKGbaU6SbdwY9Hg8yZ5$i&qA`I5<`^sm`3#M^jL Tk$13P00000NkvXXu0mjf0FQu% literal 0 HcmV?d00001 diff --git a/Example/CodeEditSourceEditorExample/CodeEditSourceEditorExample/Assets.xcassets/AppIcon.appiconset/CodeEditSourceEditor-Icon-256.png b/Example/CodeEditSourceEditorExample/CodeEditSourceEditorExample/Assets.xcassets/AppIcon.appiconset/CodeEditSourceEditor-Icon-256.png new file mode 100644 index 0000000000000000000000000000000000000000..9bb2899d887676d48a3630d8152f07c6f35195b5 GIT binary patch literal 50956 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 Z|36QLznNMn>_h+n002ovPDHLkV1nfX$Y%fm literal 0 HcmV?d00001 diff --git a/Example/CodeEditSourceEditorExample/CodeEditSourceEditorExample/Assets.xcassets/AppIcon.appiconset/CodeEditSourceEditor-Icon-32.png b/Example/CodeEditSourceEditorExample/CodeEditSourceEditorExample/Assets.xcassets/AppIcon.appiconset/CodeEditSourceEditor-Icon-32.png new file mode 100644 index 0000000000000000000000000000000000000000..df4e783a6c7834ea4914c20cdf6ba6d06f334590 GIT binary patch literal 3216 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≥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

AOcuUm{06X1Q8#sHsqDJp@-T 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 O0000 Date: Tue, 3 Jun 2025 09:23:43 -0500 Subject: [PATCH 24/30] Move to Swift Concurrency with Async Streams --- .../TextViewController+Lifecycle.swift | 2 +- .../Gutter/GutterView.swift | 6 +- .../IndentationLineFoldProvider.swift | 32 ++- .../FoldProviders/LineFoldProvider.swift | 2 +- .../Model/LineFoldCalculator.swift | 200 +++++++++--------- .../LineFolding/Model/LineFoldStorage.swift | 24 ++- .../LineFolding/Model/LineFoldingModel.swift | 49 +++-- .../View/FoldingRibbonView+Draw.swift | 45 +++- .../LineFolding/View/FoldingRibbonView.swift | 56 +++-- .../LineFoldStorageTests.swift | 16 +- 10 files changed, 260 insertions(+), 172 deletions(-) diff --git a/Sources/CodeEditSourceEditor/Controller/TextViewController+Lifecycle.swift b/Sources/CodeEditSourceEditor/Controller/TextViewController+Lifecycle.swift index 8d19f0662..37497a49e 100644 --- a/Sources/CodeEditSourceEditor/Controller/TextViewController+Lifecycle.swift +++ b/Sources/CodeEditSourceEditor/Controller/TextViewController+Lifecycle.swift @@ -26,7 +26,7 @@ extension TextViewController { font: font.rulerFont, textColor: theme.text.color.withAlphaComponent(0.35), selectedTextColor: theme.text.color, - textView: textView, + controller: self, delegate: self ) gutterView.updateWidthIfNeeded() diff --git a/Sources/CodeEditSourceEditor/Gutter/GutterView.swift b/Sources/CodeEditSourceEditor/Gutter/GutterView.swift index 4bdf0a2e7..76d9152ee 100644 --- a/Sources/CodeEditSourceEditor/Gutter/GutterView.swift +++ b/Sources/CodeEditSourceEditor/Gutter/GutterView.swift @@ -137,16 +137,16 @@ public class GutterView: NSView { font: NSFont, textColor: NSColor, selectedTextColor: NSColor?, - textView: TextView, + controller: TextViewController, delegate: GutterViewDelegate? = nil ) { self.font = font self.textColor = textColor self.selectedLineTextColor = selectedTextColor ?? .secondaryLabelColor - self.textView = textView + self.textView = controller.textView self.delegate = delegate - foldingRibbon = FoldingRibbonView(textView: textView, foldProvider: nil) + foldingRibbon = FoldingRibbonView(controller: controller, foldProvider: nil) super.init(frame: .zero) clipsToBounds = true diff --git a/Sources/CodeEditSourceEditor/LineFolding/FoldProviders/IndentationLineFoldProvider.swift b/Sources/CodeEditSourceEditor/LineFolding/FoldProviders/IndentationLineFoldProvider.swift index af1463d1e..d200666ac 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/FoldProviders/IndentationLineFoldProvider.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/FoldProviders/IndentationLineFoldProvider.swift @@ -6,8 +6,19 @@ // import AppKit +import TextStory import CodeEditTextView +extension NSString: @retroactive TextStoring { + public func substring(from range: NSRange) -> String? { + self.substring(with: range) + } + + public func applyMutation(_ mutation: TextMutation) { + self.replacingCharacters(in: mutation.range, with: mutation.string) + } +} + final class IndentationLineFoldProvider: LineFoldProvider { func indentLevelAtLine(substring: NSString) -> Int? { for idx in 0.. [LineFoldProviderLineInfo] { + let text = controller.textView.textStorage.string as NSString guard let leadingIndent = text.leadingRange(in: lineRange, within: .whitespacesWithoutNewlines)?.length, leadingIndent != lineRange.length else { return [] } - var foldIndicators: [LineFoldProviderLineInfo] = [] - if leadingIndent < previousDepth { + let leadingDepth = leadingIndent / controller.indentOption.charCount + if leadingDepth < previousDepth { // End the fold at the start of whitespace - foldIndicators.append(.endFold(rangeEnd: lineRange.location + leadingIndent, newDepth: leadingIndent)) + foldIndicators.append( + .endFold( + rangeEnd: lineRange.location + leadingIndent, + newDepth: leadingDepth + ) + ) } // Check if the next line has more indent @@ -45,7 +62,12 @@ final class IndentationLineFoldProvider: LineFoldProvider { } if nextIndent > leadingIndent, let trailingWhitespace = text.trailingWhitespaceRange(in: lineRange) { - foldIndicators.append(.startFold(rangeStart: trailingWhitespace.location, newDepth: nextIndent)) + foldIndicators.append( + .startFold( + rangeStart: trailingWhitespace.location, + newDepth: nextIndent / controller.indentOption.charCount + ) + ) } return foldIndicators diff --git a/Sources/CodeEditSourceEditor/LineFolding/FoldProviders/LineFoldProvider.swift b/Sources/CodeEditSourceEditor/LineFolding/FoldProviders/LineFoldProvider.swift index 077b71a3a..e8b803ccd 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/FoldProviders/LineFoldProvider.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/FoldProviders/LineFoldProvider.swift @@ -36,6 +36,6 @@ protocol LineFoldProvider: AnyObject { lineNumber: Int, lineRange: NSRange, previousDepth: Int, - text: NSTextStorage + controller: TextViewController ) -> [LineFoldProviderLineInfo] } diff --git a/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift b/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift index b42ae1d53..550a78717 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift @@ -14,132 +14,140 @@ import Combine /// `LineFoldCalculator` observes text edits and rebuilds fold regions asynchronously. /// Fold information is emitted via `rangesPublisher`. /// Notify the calculator it should re-calculate -class LineFoldCalculator { +actor LineFoldCalculator { weak var foldProvider: LineFoldProvider? - weak var textView: TextView? + weak var controller: TextViewController? - var rangesPublisher = CurrentValueSubject(.init(documentLength: 0)) + var valueStream: AsyncStream - private let workQueue = DispatchQueue.global(qos: .default) + private var valueStreamContinuation: AsyncStream.Continuation + private var textChangedTask: Task? - var textChangedReceiver = PassthroughSubject<(NSRange, Int), Never>() - private var textChangedCancellable: AnyCancellable? - - init(foldProvider: LineFoldProvider?, textView: TextView) { + init( + foldProvider: LineFoldProvider?, + controller: TextViewController, + textChangedStream: AsyncStream<(NSRange, Int)> + ) { self.foldProvider = foldProvider - self.textView = textView + self.controller = controller + (valueStream, valueStreamContinuation) = AsyncStream.makeStream() + Task { await listenToTextChanges(textChangedStream: textChangedStream) } + } + + deinit { + textChangedTask?.cancel() + } - textChangedCancellable = textChangedReceiver - .throttle(for: 0.1, scheduler: RunLoop.main, latest: true) - .sink { edit in - self.buildFoldsForDocument(afterEditIn: edit.0, delta: edit.1) + private func listenToTextChanges(textChangedStream: AsyncStream<(NSRange, Int)>) { + textChangedTask = Task { + for await edit in textChangedStream { + await buildFoldsForDocument(afterEditIn: edit.0, delta: edit.1) } + } } /// Build out the folds for the entire document. /// /// For each line in the document, find the indentation level using the ``levelProvider``. At each line, if the /// indent increases from the previous line, we start a new fold. If it decreases we end the fold we were in. - private func buildFoldsForDocument(afterEditIn: NSRange, delta: Int) { - workQueue.async { - guard let textView = self.textView, let foldProvider = self.foldProvider else { return } - var foldCache: [LineFoldStorage.RawFold] = [] - // Depth: Open range - var openFolds: [Int: LineFoldStorage.RawFold] = [:] - var currentDepth: Int = 0 - var iterator = textView.layoutManager.linesInRange(textView.documentRange) + private func buildFoldsForDocument(afterEditIn: NSRange, delta: Int) async { + guard let controller = self.controller, let foldProvider = self.foldProvider else { return } + let documentRange = await controller.textView.documentRange + var foldCache: [LineFoldStorage.RawFold] = [] + // Depth: Open range + var openFolds: [Int: LineFoldStorage.RawFold] = [:] + var currentDepth: Int = 0 + var iterator = await controller.textView.layoutManager.linesInRange(documentRange) + + var lines = await self.getMoreLines( + controller: controller, + iterator: &iterator, + previousDepth: currentDepth, + foldProvider: foldProvider + ) + while let lineChunk = lines { + for lineInfo in lineChunk where lineInfo.depth > 0 { + // Start a new fold, going deeper to a new depth. + if lineInfo.depth > currentDepth { + let newFold = LineFoldStorage.RawFold( + depth: lineInfo.depth, + range: lineInfo.rangeIndice.. received depth + for openFold in openFolds.values.filter({ $0.depth > lineInfo.depth }) { + openFolds.removeValue(forKey: openFold.depth) + foldCache.append( + LineFoldStorage.RawFold( + depth: openFold.depth, + range: openFold.range.lowerBound.. 0 { - // Start a new fold, going deeper to a new depth. - if lineInfo.depth > currentDepth { - let newFold = LineFoldStorage.RawFold( - depth: lineInfo.depth, - range: lineInfo.rangeIndice.. received depth - for openFold in openFolds.values.filter({ $0.depth > lineInfo.depth }) { - openFolds.removeValue(forKey: openFold.depth) - foldCache.append( - LineFoldStorage.RawFold( - depth: openFold.depth, - range: openFold.range.lowerBound.. [LineFoldProviderLineInfo]? { - DispatchQueue.main.asyncAndWait { - var results: [LineFoldProviderLineInfo] = [] - var count = 0 - var previousDepth: Int = previousDepth - while count < 50, let linePosition = iterator.next() { - let foldInfo = foldProvider.foldLevelAtLine( - lineNumber: linePosition.index, - lineRange: linePosition.range, - previousDepth: previousDepth, - text: textView.textStorage - ) - results.append(contentsOf: foldInfo) - count += 1 - previousDepth = foldInfo.max(by: { $0.depth < $1.depth })?.depth ?? previousDepth - } - if results.isEmpty && count == 0 { - return nil - } - return results + var results: [LineFoldProviderLineInfo] = [] + var count = 0 + var previousDepth: Int = previousDepth + while count < 50, let linePosition = iterator.next() { + let foldInfo = foldProvider.foldLevelAtLine( + lineNumber: linePosition.index, + lineRange: linePosition.range, + previousDepth: previousDepth, + controller: controller + ) + results.append(contentsOf: foldInfo) + count += 1 + previousDepth = foldInfo.max(by: { $0.depth < $1.depth })?.depth ?? previousDepth + } + if results.isEmpty && count == 0 { + return nil } + return results } } diff --git a/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldStorage.swift b/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldStorage.swift index b4528806d..7877e9de2 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldStorage.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldStorage.swift @@ -8,7 +8,7 @@ import _RopeModule import Foundation /// Represents a single fold region with stable identifier and collapse state -struct FoldRange: Sendable { +struct FoldRange: Sendable, Equatable { typealias FoldIdentifier = UInt32 let id: FoldIdentifier @@ -17,6 +17,14 @@ struct FoldRange: Sendable { var isCollapsed: Bool } +/// Represents a single fold run with stable identifier and collapse state +struct FoldRun: Sendable { + let id: FoldRange.FoldIdentifier + let depth: Int + let range: Range + let isCollapsed: Bool +} + /// Sendable data model for code folding using RangeStore struct LineFoldStorage: Sendable { /// A temporary fold representation without stable ID @@ -112,6 +120,20 @@ struct LineFoldStorage: Sendable { } return result.sorted { $0.range.lowerBound < $1.range.lowerBound } +// let runs = store.runs(in: queryRange.clamped(to: 0.. = Atomic(LineFoldStorage(documentLength: 0)) - private var cacheLock = NSLock() + var foldCache: LineFoldStorage = LineFoldStorage(documentLength: 0) private var calculator: LineFoldCalculator - private var cancellable: AnyCancellable? - weak var textView: TextView? + private var textChangedStream: AsyncStream<(NSRange, Int)> + private var textChangedStreamContinuation: AsyncStream<(NSRange, Int)>.Continuation + private var cacheListenTask: Task? - init(textView: TextView, foldProvider: LineFoldProvider?) { - self.textView = textView - self.calculator = LineFoldCalculator(foldProvider: foldProvider, textView: textView) + weak var controller: TextViewController? + + init(controller: TextViewController, foldView: FoldingRibbonView, foldProvider: LineFoldProvider?) { + self.controller = controller + (textChangedStream, textChangedStreamContinuation) = AsyncStream<(NSRange, Int)>.makeStream() + self.calculator = LineFoldCalculator( + foldProvider: foldProvider, + controller: controller, + textChangedStream: textChangedStream + ) super.init() - textView.addStorageDelegate(self) - cancellable = self.calculator.rangesPublisher.receive(on: RunLoop.main).sink { newFolds in - self.foldCache.mutate { $0 = newFolds } + controller.textView.addStorageDelegate(self) + + cacheListenTask = Task { @MainActor [weak foldView] in + for await newFolds in await calculator.valueStream { + foldCache = newFolds + foldView?.needsDisplay = true + } } - calculator.textChangedReceiver.send((.zero, 0)) + textChangedStreamContinuation.yield((.zero, 0)) } func getFolds(in range: Range) -> [FoldRange] { - foldCache.withValue({ $0.folds(in: range) }) + foldCache.folds(in: range) } func textStorage( @@ -52,8 +63,8 @@ class LineFoldingModel: NSObject, NSTextStorageDelegate { guard editedMask.contains(.editedCharacters) else { return } - foldCache.mutate({ $0.storageUpdated(editedRange: editedRange, changeInLength: delta) }) - calculator.textChangedReceiver.send((editedRange, delta)) + foldCache.storageUpdated(editedRange: editedRange, changeInLength: delta) + textChangedStreamContinuation.yield((editedRange, delta)) } /// Finds the deepest cached depth of the fold for a line number. @@ -67,12 +78,10 @@ class LineFoldingModel: NSObject, NSTextStorageDelegate { /// - Parameter lineNumber: The line number to query, zero-indexed. /// - Returns: The deepest cached fold and depth of the fold if it was found. func getCachedFoldAt(lineNumber: Int) -> (range: FoldRange, depth: Int)? { - guard let lineRange = textView?.layoutManager.textLineForIndex(lineNumber)?.range else { return nil } - return foldCache.withValue { foldCache in - guard let deepestFold = foldCache.folds(in: lineRange.intRange).max(by: { $0.depth < $1.depth }) else { - return nil - } - return (deepestFold, deepestFold.depth) + guard let lineRange = controller?.textView.layoutManager.textLineForIndex(lineNumber)?.range else { return nil } + guard let deepestFold = foldCache.folds(in: lineRange.intRange).max(by: { $0.depth < $1.depth }) else { + return nil } + return (deepestFold, deepestFold.depth) } } diff --git a/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+Draw.swift b/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+Draw.swift index b5bc0a253..ed06a968c 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+Draw.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+Draw.swift @@ -25,7 +25,7 @@ extension FoldingRibbonView { override func draw(_ dirtyRect: NSRect) { guard let context = NSGraphicsContext.current?.cgContext, - let layoutManager = model.textView?.layoutManager else { + let layoutManager = model?.controller?.textView.layoutManager else { return } @@ -39,11 +39,24 @@ extension FoldingRibbonView { } let textRange = rangeStart.range.location.. Date: Tue, 3 Jun 2025 10:06:49 -0500 Subject: [PATCH 25/30] Remove some comments --- .../IndentationLineFoldProvider.swift | 4 +- .../Model/LineFoldCalculator.swift | 2 +- .../View/FoldingRibbonView+Draw.swift | 44 +++++++++---------- 3 files changed, 24 insertions(+), 26 deletions(-) diff --git a/Sources/CodeEditSourceEditor/LineFolding/FoldProviders/IndentationLineFoldProvider.swift b/Sources/CodeEditSourceEditor/LineFolding/FoldProviders/IndentationLineFoldProvider.swift index d200666ac..e039e922c 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/FoldProviders/IndentationLineFoldProvider.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/FoldProviders/IndentationLineFoldProvider.swift @@ -13,7 +13,7 @@ extension NSString: @retroactive TextStoring { public func substring(from range: NSRange) -> String? { self.substring(with: range) } - + public func applyMutation(_ mutation: TextMutation) { self.replacingCharacters(in: mutation.range, with: mutation.string) } @@ -37,7 +37,7 @@ final class IndentationLineFoldProvider: LineFoldProvider { controller: TextViewController ) -> [LineFoldProviderLineInfo] { let text = controller.textView.textStorage.string as NSString - guard let leadingIndent = text.leadingRange(in: lineRange, within: .whitespacesWithoutNewlines)?.length, + guard let leadingIndent = text.leadingRange(in: lineRange, within: .whitespacesAndNewlines)?.length, leadingIndent != lineRange.length else { return [] } diff --git a/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift b/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift index 550a78717..7e80a9b64 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift @@ -66,7 +66,7 @@ actor LineFoldCalculator { foldProvider: foldProvider ) while let lineChunk = lines { - for lineInfo in lineChunk where lineInfo.depth > 0 { + for lineInfo in lineChunk { // Start a new fold, going deeper to a new depth. if lineInfo.depth > currentDepth { let newFold = LineFoldStorage.RawFold( diff --git a/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+Draw.swift b/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+Draw.swift index ed06a968c..ea55e02a6 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+Draw.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+Draw.swift @@ -39,7 +39,23 @@ extension FoldingRibbonView { } let textRange = rangeStart.range.location..) -> [FoldRange] { var folds = model?.getFolds(in: textRange) ?? [] + + // Add in some fake depths, we can draw these underneath the rest of the folds to make it look like it's + // continuous if let minimumDepth = folds.min(by: { $0.depth < $1.depth })?.depth { for depth in (1.. Date: Tue, 3 Jun 2025 10:57:37 -0500 Subject: [PATCH 26/30] Fix Drawing Ordering, Use Attachment Ranges --- .../Model/LineFoldCalculator.swift | 14 ++++--- .../LineFolding/Model/LineFoldStorage.swift | 41 +++++-------------- .../LineFolding/Model/LineFoldingModel.swift | 14 +++++-- .../View/FoldingRibbonView+Draw.swift | 11 ++++- .../LineFolding/View/FoldingRibbonView.swift | 25 ++++++----- 5 files changed, 54 insertions(+), 51 deletions(-) diff --git a/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift b/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift index 7e80a9b64..d9a2b242a 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift @@ -57,7 +57,7 @@ actor LineFoldCalculator { // Depth: Open range var openFolds: [Int: LineFoldStorage.RawFold] = [:] var currentDepth: Int = 0 - var iterator = await controller.textView.layoutManager.linesInRange(documentRange) + var iterator = await controller.textView.layoutManager.lineStorage.makeIterator() var lines = await self.getMoreLines( controller: controller, @@ -109,9 +109,11 @@ actor LineFoldCalculator { let attachments = await controller.textView.layoutManager.attachments .getAttachmentsOverlapping(documentRange) - .compactMap { $0.attachment as? LineFoldPlaceholder } - .map { - LineFoldStorage.DepthStartPair(depth: $0.fold.depth, start: $0.fold.range.lowerBound) + .compactMap { attachmentBox -> LineFoldStorage.DepthStartPair? in + guard let attachment = attachmentBox.attachment as? LineFoldPlaceholder else { + return nil + } + return LineFoldStorage.DepthStartPair(depth: attachment.fold.depth, start: attachmentBox.range.location) } let storage = LineFoldStorage( @@ -119,7 +121,7 @@ actor LineFoldCalculator { by: { $0.range.upperBound < $1.range.upperBound } )?.range.upperBound ?? documentRange.length, folds: foldCache.sorted(by: { $0.range.lowerBound < $1.range.lowerBound }), - collapsedProvider: { Set(attachments) } + collapsedRanges: Set(attachments) ) valueStreamContinuation.yield(storage) } @@ -127,7 +129,7 @@ actor LineFoldCalculator { @MainActor private func getMoreLines( controller: TextViewController, - iterator: inout TextLayoutManager.RangeIterator, + iterator: inout TextLineStorage.TextLineStorageIterator, previousDepth: Int, foldProvider: LineFoldProvider ) -> [LineFoldProviderLineInfo]? { diff --git a/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldStorage.swift b/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldStorage.swift index 7877e9de2..25a674673 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldStorage.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldStorage.swift @@ -17,14 +17,6 @@ struct FoldRange: Sendable, Equatable { var isCollapsed: Bool } -/// Represents a single fold run with stable identifier and collapse state -struct FoldRun: Sendable { - let id: FoldRange.FoldIdentifier - let depth: Int - let range: Range - let isCollapsed: Bool -} - /// Sendable data model for code folding using RangeStore struct LineFoldStorage: Sendable { /// A temporary fold representation without stable ID @@ -51,9 +43,9 @@ struct LineFoldStorage: Sendable { private var foldRanges: [FoldRange.FoldIdentifier: FoldRange] = [:] /// Initialize with the full document length - init(documentLength: Int, folds: [RawFold] = [], collapsedProvider: () -> Set = { [] }) { + init(documentLength: Int, folds: [RawFold] = [], collapsedRanges: Set = []) { self.store = RangeStore(documentLength: documentLength) - self.updateFolds(from: folds, collapsedProvider: collapsedProvider) + self.updateFolds(from: folds, collapsedRanges: collapsedRanges) } private mutating func nextFoldId() -> FoldRange.FoldIdentifier { @@ -63,17 +55,14 @@ struct LineFoldStorage: Sendable { /// Replace all fold data from raw folds, preserving collapse state via callback /// - Parameter rawFolds: newly computed folds (depth + range) - /// - Parameter collapsedProvider: callback returning current collapsed ranges/depths - mutating func updateFolds(from rawFolds: [RawFold], collapsedProvider: () -> Set) { + /// - Parameter collapsedRanges: Current collapsed ranges/depths + mutating func updateFolds(from rawFolds: [RawFold], collapsedRanges: Set) { // Build reuse map by start+depth, carry over collapse state var reuseMap: [DepthStartPair: FoldRange] = [:] for region in foldRanges.values { reuseMap[DepthStartPair(depth: region.depth, start: region.range.lowerBound)] = region } - // Determine which ranges are currently collapsed - let collapsedSet = collapsedProvider() - // Build new regions foldRanges.removeAll(keepingCapacity: true) store = RangeStore(documentLength: store.length) @@ -85,7 +74,7 @@ struct LineFoldStorage: Sendable { let id = prior?.id ?? nextFoldId() let wasCollapsed = prior?.isCollapsed ?? false // override collapse if provider says so - let isCollapsed = collapsedSet.contains(key) || wasCollapsed + let isCollapsed = collapsedRanges.contains(key) || wasCollapsed let fold = FoldRange(id: id, depth: raw.depth, range: raw.range, isCollapsed: isCollapsed) foldRanges[id] = fold @@ -99,6 +88,12 @@ struct LineFoldStorage: Sendable { store.storageUpdated(editedRange: editedRange, changeInLength: delta) } + mutating func toggleCollapse(forFold fold: FoldRange) { + guard var existingRange = foldRanges[fold.id] else { return } + existingRange.isCollapsed.toggle() + foldRanges[fold.id] = existingRange + } + /// Query a document subrange and return all folds as an ordered list by start position func folds(in queryRange: Range) -> [FoldRange] { let runs = store.runs(in: queryRange.clamped(to: 0.. (range: FoldRange, depth: Int)? { + func getCachedFoldAt(lineNumber: Int) -> FoldRange? { guard let lineRange = controller?.textView.layoutManager.textLineForIndex(lineNumber)?.range else { return nil } - guard let deepestFold = foldCache.folds(in: lineRange.intRange).max(by: { $0.depth < $1.depth }) else { + guard let deepestFold = foldCache.folds(in: lineRange.intRange).max(by: { + if $0.isCollapsed != $1.isCollapsed { + $1.isCollapsed // Collapsed folds take precedence. + } else if $0.isCollapsed { + $0.depth > $1.depth + } else { + $0.depth < $1.depth + } + }) else { return nil } - return (deepestFold, deepestFold.depth) + return deepestFold } } diff --git a/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+Draw.swift b/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+Draw.swift index ea55e02a6..07a8a8bc2 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+Draw.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+Draw.swift @@ -40,7 +40,15 @@ extension FoldingRibbonView { let textRange = rangeStart.range.location.. Date: Tue, 3 Jun 2025 13:39:21 -0500 Subject: [PATCH 27/30] Add Straight Line When Adjacent --- Package.resolved | 9 -- .../NSBezierPath+RoundedCorners.swift | 111 ++++++++++++++ .../NSEdgeInsets+Equatable.swift | 0 .../NSEdgeInsets+Helpers.swift | 0 .../{ => NSFont}/NSFont+LineHeight.swift | 0 .../{ => NSFont}/NSFont+RulerFont.swift | 0 .../LineFolding/Model/LineFoldStorage.swift | 4 + .../View/FoldingRibbonView+Draw.swift | 141 +++++++++++++----- .../LineFolding/View/FoldingRibbonView.swift | 14 +- 9 files changed, 228 insertions(+), 51 deletions(-) create mode 100644 Sources/CodeEditSourceEditor/Extensions/NSBezierPath+RoundedCorners.swift rename Sources/CodeEditSourceEditor/Extensions/{ => NSEdgeInsets}/NSEdgeInsets+Equatable.swift (100%) rename Sources/CodeEditSourceEditor/Extensions/{ => NSEdgeInsets}/NSEdgeInsets+Helpers.swift (100%) rename Sources/CodeEditSourceEditor/Extensions/{ => NSFont}/NSFont+LineHeight.swift (100%) rename Sources/CodeEditSourceEditor/Extensions/{ => NSFont}/NSFont+RulerFont.swift (100%) diff --git a/Package.resolved b/Package.resolved index 7296d78dd..db462e1ec 100644 --- a/Package.resolved +++ b/Package.resolved @@ -18,15 +18,6 @@ "version" : "0.2.3" } }, - { - "identity" : "codeedittextview", - "kind" : "remoteSourceControl", - "location" : "https://github.com/CodeEditApp/CodeEditTextView.git", - "state" : { - "revision" : "69282e2ea7ad8976b062b945d575da47b61ed208", - "version" : "0.11.1" - } - }, { "identity" : "rearrange", "kind" : "remoteSourceControl", diff --git a/Sources/CodeEditSourceEditor/Extensions/NSBezierPath+RoundedCorners.swift b/Sources/CodeEditSourceEditor/Extensions/NSBezierPath+RoundedCorners.swift new file mode 100644 index 000000000..f8d57c5c4 --- /dev/null +++ b/Sources/CodeEditSourceEditor/Extensions/NSBezierPath+RoundedCorners.swift @@ -0,0 +1,111 @@ +// +// NSBezierPath+RoundedCorners.swift +// CodeEditSourceEditor +// +// Created by Khan Winter on 6/3/25. +// + +import AppKit + +// Wonderful NSBezierPath extension taken with modification from the playground code at: +// https://github.com/janheiermann/BezierPath-Corners + +extension NSBezierPath { + struct Corners: OptionSet { + public let rawValue: Int + + public init(rawValue: Corners.RawValue) { + self.rawValue = rawValue + } + + public static let topLeft = Corners(rawValue: 1 << 0) + public static let bottomLeft = Corners(rawValue: 1 << 1) + public static let topRight = Corners(rawValue: 1 << 2) + public static let bottomRight = Corners(rawValue: 1 << 3) + } + + convenience init(rect: CGRect, roundedCorners corners: Corners, cornerRadius: CGFloat) { + self.init() + + let maxX = rect.maxX + let minX = rect.minX + let maxY = rect.maxY + let minY = rect.minY + let radius = min(cornerRadius, min(rect.width, rect.height) / 2) + + // Start at bottom-left corner + move(to: CGPoint(x: minX + (corners.contains(.bottomLeft) ? radius : 0), y: minY)) + + // Bottom edge + if corners.contains(.bottomRight) { + line(to: CGPoint(x: maxX - radius, y: minY)) + appendArc( + withCenter: CGPoint(x: maxX - radius, y: minY + radius), + radius: radius, + startAngle: 270, + endAngle: 0, + clockwise: false + ) + } else { + line(to: CGPoint(x: maxX, y: minY)) + } + + // Right edge + if corners.contains(.topRight) { + line(to: CGPoint(x: maxX, y: maxY - radius)) + appendArc( + withCenter: CGPoint(x: maxX - radius, y: maxY - radius), + radius: radius, + startAngle: 0, + endAngle: 90, + clockwise: false + ) + } else { + line(to: CGPoint(x: maxX, y: maxY)) + } + + // Top edge + if corners.contains(.topLeft) { + line(to: CGPoint(x: minX + radius, y: maxY)) + appendArc( + withCenter: CGPoint(x: minX + radius, y: maxY - radius), + radius: radius, + startAngle: 90, + endAngle: 180, + clockwise: false + ) + } else { + line(to: CGPoint(x: minX, y: maxY)) + } + + // Left edge + if corners.contains(.bottomLeft) { + line(to: CGPoint(x: minX, y: minY + radius)) + appendArc( + withCenter: CGPoint(x: minX + radius, y: minY + radius), + radius: radius, + startAngle: 180, + endAngle: 270, + clockwise: false + ) + } else { + line(to: CGPoint(x: minX, y: minY)) + } + + close() + } + + + convenience init(roundingRect: CGRect, capTop: Bool, capBottom: Bool, cornerRadius radius: CGFloat) { + switch (capTop, capBottom) { + case (true, true): + self.init(rect: roundingRect) + case (false, true): + self.init(rect: roundingRect, roundedCorners: [.bottomLeft, .bottomRight], cornerRadius: radius) + case (true, false): + self.init(rect: roundingRect, roundedCorners: [.topLeft, .topRight], cornerRadius: radius) + case (false, false): + self.init(roundedRect: roundingRect, xRadius: radius, yRadius: radius) + } + } +} diff --git a/Sources/CodeEditSourceEditor/Extensions/NSEdgeInsets+Equatable.swift b/Sources/CodeEditSourceEditor/Extensions/NSEdgeInsets/NSEdgeInsets+Equatable.swift similarity index 100% rename from Sources/CodeEditSourceEditor/Extensions/NSEdgeInsets+Equatable.swift rename to Sources/CodeEditSourceEditor/Extensions/NSEdgeInsets/NSEdgeInsets+Equatable.swift diff --git a/Sources/CodeEditSourceEditor/Extensions/NSEdgeInsets+Helpers.swift b/Sources/CodeEditSourceEditor/Extensions/NSEdgeInsets/NSEdgeInsets+Helpers.swift similarity index 100% rename from Sources/CodeEditSourceEditor/Extensions/NSEdgeInsets+Helpers.swift rename to Sources/CodeEditSourceEditor/Extensions/NSEdgeInsets/NSEdgeInsets+Helpers.swift diff --git a/Sources/CodeEditSourceEditor/Extensions/NSFont+LineHeight.swift b/Sources/CodeEditSourceEditor/Extensions/NSFont/NSFont+LineHeight.swift similarity index 100% rename from Sources/CodeEditSourceEditor/Extensions/NSFont+LineHeight.swift rename to Sources/CodeEditSourceEditor/Extensions/NSFont/NSFont+LineHeight.swift diff --git a/Sources/CodeEditSourceEditor/Extensions/NSFont+RulerFont.swift b/Sources/CodeEditSourceEditor/Extensions/NSFont/NSFont+RulerFont.swift similarity index 100% rename from Sources/CodeEditSourceEditor/Extensions/NSFont+RulerFont.swift rename to Sources/CodeEditSourceEditor/Extensions/NSFont/NSFont+RulerFont.swift diff --git a/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldStorage.swift b/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldStorage.swift index 25a674673..33ae02e68 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldStorage.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldStorage.swift @@ -15,6 +15,10 @@ struct FoldRange: Sendable, Equatable { let depth: Int let range: Range var isCollapsed: Bool + + func isHoveringEqual(_ other: FoldRange) -> Bool { + depth == other.depth && range.contains(other.range) + } } /// Sendable data model for code folding using RangeStore diff --git a/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+Draw.swift b/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+Draw.swift index 07a8a8bc2..9863d83a7 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+Draw.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+Draw.swift @@ -9,20 +9,52 @@ import AppKit import CodeEditTextView extension FoldingRibbonView { - /// The context in which the fold is being drawn, including the depth and fold range. - struct FoldMarkerDrawingContext { - let range: ClosedRange - let depth: UInt - - /// Increment the depth - func incrementDepth() -> FoldMarkerDrawingContext { - FoldMarkerDrawingContext( - range: range, - depth: depth + 1 + struct FoldCapInfo { + let startIndices: Set + let endIndices: Set + + init(_ folds: [DrawingFoldInfo]) { + self.startIndices = folds.reduce(into: Set(), { $0.insert($1.startLine.index) }) + self.endIndices = folds.reduce(into: Set(), { $0.insert($1.endLine.index) }) + } + + func foldNeedsTopCap(_ fold: DrawingFoldInfo) -> Bool { + endIndices.contains(fold.startLine.index) + } + + func foldNeedsBottomCap(_ fold: DrawingFoldInfo) -> Bool { + startIndices.contains(fold.endLine.index) + } + + func adjustFoldRect( + using fold: DrawingFoldInfo, + rect: NSRect + ) -> NSRect { + let capTop = foldNeedsTopCap(fold) + let capBottom = foldNeedsBottomCap(fold) + let yDelta = capTop ? fold.startLine.height / 2.0 : 0.0 + let heightDelta: CGFloat = if capTop && capBottom { + -fold.startLine.height + } else if capTop || capBottom { + -(fold.startLine.height / 2.0) + } else { + 0.0 + } + return NSRect( + x: rect.origin.x, + y: rect.origin.y + yDelta, + width: rect.size.width, + height: rect.size.height + heightDelta ) } } + struct DrawingFoldInfo { + let fold: FoldRange + let startLine: TextLineStorage.TextLinePosition + let endLine: TextLineStorage.TextLinePosition + } + override func draw(_ dirtyRect: NSRect) { guard let context = NSGraphicsContext.current?.cgContext, let layoutManager = model?.controller?.textView.layoutManager else { @@ -38,19 +70,21 @@ extension FoldingRibbonView { return } let textRange = rangeStart.range.location..) -> [FoldRange] { + private func getDrawingFolds( + forTextRange textRange: Range, + layoutManager: TextLayoutManager + ) -> [DrawingFoldInfo] { var folds = model?.getFolds(in: textRange) ?? [] // Add in some fake depths, we can draw these underneath the rest of the folds to make it look like it's @@ -78,7 +115,14 @@ extension FoldingRibbonView { } } - return folds + return folds.compactMap { fold in + guard let startLine = layoutManager.textLineForOffset(fold.range.lowerBound), + let endLine = layoutManager.textLineForOffset(fold.range.upperBound) else { + return nil + } + + return DrawingFoldInfo(fold: fold, startLine: startLine, endLine: endLine) + } } /// Draw a single fold marker for a fold. @@ -86,28 +130,23 @@ extension FoldingRibbonView { /// Ensure the correct fill color is set on the drawing context before calling. /// /// - Parameters: - /// - fold: The fold to draw. + /// - foldInfo: The fold to draw. /// - markerContext: The context in which the fold is being drawn, including the depth and if a line is /// being hovered. /// - context: The drawing context to use. /// - layoutManager: A layout manager used to retrieve position information for lines. private func drawFoldMarker( - _ fold: FoldRange, + _ foldInfo: DrawingFoldInfo, + foldCaps: FoldCapInfo, in context: CGContext, using layoutManager: TextLayoutManager ) { - guard let minYPosition = layoutManager.textLineForOffset(fold.range.lowerBound)?.yPos, - let maxPosition = layoutManager.textLineForOffset(fold.range.upperBound) else { - return - } - - let maxYPosition = maxPosition.yPos + maxPosition.height + let minYPosition = foldInfo.startLine.yPos + let maxYPosition = foldInfo.endLine.yPos + foldInfo.endLine.height - if fold.isCollapsed { + if foldInfo.fold.isCollapsed { drawCollapsedFold(minYPosition: minYPosition, maxYPosition: maxYPosition, in: context) - } else if let hoveringFold, - hoveringFold.depth == fold.depth, - NSRange(hoveringFold.range).intersection(NSRange(fold.range)) == NSRange(hoveringFold.range) { + } else if let hoveringFold, hoveringFold.isHoveringEqual(foldInfo.fold) { drawHoveredFold( minYPosition: minYPosition, maxYPosition: maxYPosition, @@ -115,7 +154,8 @@ extension FoldingRibbonView { ) } else { drawNestedFold( - fold: fold, + foldInfo: foldInfo, + foldCaps: foldCaps, minYPosition: minYPosition, maxYPosition: maxYPosition, in: context @@ -204,26 +244,37 @@ extension FoldingRibbonView { } private func drawNestedFold( - fold: FoldRange, + foldInfo: DrawingFoldInfo, + foldCaps: FoldCapInfo, minYPosition: CGFloat, maxYPosition: CGFloat, in context: CGContext ) { context.saveGState() - let plainRect = NSRect(x: 0, y: minYPosition + 1, width: 7, height: maxYPosition - minYPosition - 2) - // TODO: Draw a single horizontal line when folds are adjacent - let roundedRect = NSBezierPath(roundedRect: plainRect, xRadius: 3.5, yRadius: 3.5) + let plainRect = foldCaps.adjustFoldRect( + using: foldInfo, + rect: NSRect(x: 0, y: minYPosition + 1, width: 7, height: maxYPosition - minYPosition - 2) + ) + let radius = plainRect.width / 2.0 + let roundedRect = NSBezierPath( + roundingRect: plainRect, + capTop: foldCaps.foldNeedsTopCap(foldInfo), + capBottom: foldCaps.foldNeedsBottomCap(foldInfo), + cornerRadius: radius + ) context.setFillColor(markerColor) context.addPath(roundedRect.cgPathFallback) context.drawPath(using: .fill) // Add small white line if we're overlapping with other markers - if fold.depth != 0 { + if foldInfo.fold.depth != 0 { drawOutline( + foldInfo: foldInfo, + foldCaps: foldCaps, + originalPath: roundedRect.cgPathFallback, minYPosition: minYPosition, maxYPosition: maxYPosition, - originalPath: roundedRect, in: context ) } @@ -241,19 +292,31 @@ extension FoldingRibbonView { /// - originalPath: The original bezier path for the rounded rectangle. /// - context: The context to draw in. private func drawOutline( + foldInfo: DrawingFoldInfo, + foldCaps: FoldCapInfo, + originalPath: CGPath, minYPosition: CGFloat, maxYPosition: CGFloat, - originalPath: NSBezierPath, in context: CGContext ) { context.saveGState() - let plainRect = NSRect(x: -0.5, y: minYPosition, width: 8, height: maxYPosition - minYPosition) - let roundedRect = NSBezierPath(roundedRect: plainRect, xRadius: 4, yRadius: 4) + let plainRect = foldCaps.adjustFoldRect( + using: foldInfo, + rect: NSRect(x: -0.5, y: minYPosition, width: frame.width + 1.0, height: maxYPosition - minYPosition) + ) + let radius = plainRect.width / 2.0 + let roundedRect = NSBezierPath( + roundingRect: plainRect, + capTop: foldCaps.foldNeedsTopCap(foldInfo), + capBottom: foldCaps.foldNeedsBottomCap(foldInfo), + cornerRadius: radius + ) + roundedRect.transform(using: .init(translationByX: -0.5, byY: 0.0)) let combined = CGMutablePath() combined.addPath(roundedRect.cgPathFallback) - combined.addPath(originalPath.cgPathFallback) + combined.addPath(originalPath) context.clip(to: CGRect(x: 0, y: minYPosition, width: 7, height: maxYPosition - minYPosition)) context.addPath(combined) diff --git a/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView.swift b/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView.swift index 7e202cafe..4cb60c4d8 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView.swift @@ -135,9 +135,8 @@ class FoldingRibbonView: NSView { super.mouseDown(with: event) return } - if let attachment = model?.controller?.textView?.layoutManager.attachments - .getAttachmentsStartingIn(NSRange(fold.range)) - .filter({ $0.attachment is LineFoldPlaceholder && firstLineInFold.range.contains($0.range.location) }).first { + + if let attachment = findAttachmentFor(fold: fold, firstLineRange: firstLineInFold.range) { layoutManager.attachments.remove(atOffset: attachment.range.location) attachments.removeAll(where: { $0 === attachment.attachment }) } else { @@ -150,6 +149,14 @@ class FoldingRibbonView: NSView { model?.controller?.textView.needsLayout = true } + private func findAttachmentFor(fold: FoldRange, firstLineRange: NSRange) -> AnyTextAttachment? { + model?.controller?.textView?.layoutManager.attachments + .getAttachmentsStartingIn(NSRange(fold.range)) + .filter({ + $0.attachment is LineFoldPlaceholder && firstLineRange.contains($0.range.location) + }).first + } + override func mouseMoved(with event: NSEvent) { defer { super.mouseMoved(with: event) @@ -193,6 +200,7 @@ class FoldingRibbonView: NSView { } override func mouseExited(with event: NSEvent) { + super.mouseExited(with: event) hoverAnimationProgress = 0.0 hoveringFold = nil } From aa89ce22cfee151dd804d10168846141d92c627f Mon Sep 17 00:00:00 2001 From: Khan Winter <35942988+thecoolwinter@users.noreply.github.com> Date: Tue, 3 Jun 2025 14:23:36 -0500 Subject: [PATCH 28/30] Clean Up, Add Tests --- .../Extensions/NSString+TextStory.swift | 19 ++ .../LineFolding/FoldingRibbonView+Draw.swift | 205 ------------------ .../IndentationLineFoldProvider.swift | 11 - .../FoldProviders/LineFoldProvider.swift | 1 + .../Model/LineFoldCalculator.swift | 1 - .../LineFolding/Model/LineFoldingModel.swift | 6 +- .../LineFolding/View/FoldingRibbonView.swift | 9 +- .../LineFoldStorageTests.swift | 12 +- .../LineFoldingModelTests.swift | 98 +++++---- 9 files changed, 87 insertions(+), 275 deletions(-) create mode 100644 Sources/CodeEditSourceEditor/Extensions/NSString+TextStory.swift delete mode 100644 Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView+Draw.swift diff --git a/Sources/CodeEditSourceEditor/Extensions/NSString+TextStory.swift b/Sources/CodeEditSourceEditor/Extensions/NSString+TextStory.swift new file mode 100644 index 000000000..870e11545 --- /dev/null +++ b/Sources/CodeEditSourceEditor/Extensions/NSString+TextStory.swift @@ -0,0 +1,19 @@ +// +// NSString+TextStory.swift +// CodeEditSourceEditor +// +// Created by Khan Winter on 6/3/25. +// + +import AppKit +import TextStory + +extension NSString: @retroactive TextStoring { + public func substring(from range: NSRange) -> String? { + self.substring(with: range) + } + + public func applyMutation(_ mutation: TextMutation) { + self.replacingCharacters(in: mutation.range, with: mutation.string) + } +} diff --git a/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView+Draw.swift b/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView+Draw.swift deleted file mode 100644 index d85a25916..000000000 --- a/Sources/CodeEditSourceEditor/Gutter/LineFolding/FoldingRibbonView+Draw.swift +++ /dev/null @@ -1,205 +0,0 @@ -// -// FoldingRibbonView.swift -// CodeEditSourceEditor -// -// Created by Khan Winter on 5/8/25. -// - -import AppKit -import CodeEditTextView - -extension FoldingRibbonView { - /// The context in which the fold is being drawn, including the depth and fold range. - struct FoldMarkerDrawingContext { - let range: ClosedRange - let depth: UInt - - /// Increment the depth - func incrementDepth() -> FoldMarkerDrawingContext { - FoldMarkerDrawingContext( - range: range, - depth: depth + 1 - ) - } - } - - override func draw(_ dirtyRect: NSRect) { - guard let context = NSGraphicsContext.current?.cgContext, - let layoutManager = model.textView?.layoutManager else { - return - } - - context.saveGState() - context.clip(to: dirtyRect) - - // Find the visible lines in the rect AppKit is asking us to draw. - guard let rangeStart = layoutManager.textLineForPosition(dirtyRect.minY), - let rangeEnd = layoutManager.textLineForPosition(dirtyRect.maxY) else { - return - } - let lineRange = rangeStart.index...rangeEnd.index - - context.setFillColor(markerColor) - let folds = model.getFolds(in: lineRange) - for fold in folds { - drawFoldMarker( - fold, - markerContext: FoldMarkerDrawingContext(range: lineRange, depth: 0), - in: context, - using: layoutManager - ) - } - - context.restoreGState() - } - - /// Draw a single fold marker for a fold. - /// - /// Ensure the correct fill color is set on the drawing context before calling. - /// - /// - Parameters: - /// - fold: The fold to draw. - /// - markerContext: The context in which the fold is being drawn, including the depth and if a line is - /// being hovered. - /// - context: The drawing context to use. - /// - layoutManager: A layout manager used to retrieve position information for lines. - private func drawFoldMarker( - _ fold: FoldRange, - markerContext: FoldMarkerDrawingContext, - in context: CGContext, - using layoutManager: TextLayoutManager - ) { - guard let minYPosition = layoutManager.textLineForIndex(fold.lineRange.lowerBound)?.yPos, - let maxPosition = layoutManager.textLineForIndex(fold.lineRange.upperBound) else { - return - } - - let maxYPosition = maxPosition.yPos + maxPosition.height - - if let hoveringFold, - hoveringFold.depth == markerContext.depth, - fold.lineRange == hoveringFold.range { - drawHoveredFold( - markerContext: markerContext, - minYPosition: minYPosition, - maxYPosition: maxYPosition, - in: context - ) - } else { - drawNestedFold( - markerContext: markerContext, - minYPosition: minYPosition, - maxYPosition: maxYPosition, - in: context - ) - } - - // Draw subfolds - for subFold in fold.subFolds.filter({ $0.lineRange.overlaps(markerContext.range) }) { - drawFoldMarker(subFold, markerContext: markerContext.incrementDepth(), in: context, using: layoutManager) - } - } - - private func drawHoveredFold( - markerContext: FoldMarkerDrawingContext, - minYPosition: CGFloat, - maxYPosition: CGFloat, - in context: CGContext - ) { - context.saveGState() - let plainRect = NSRect(x: -2, y: minYPosition, width: 11.0, height: maxYPosition - minYPosition) - let roundedRect = NSBezierPath(roundedRect: plainRect, xRadius: 11.0 / 2, yRadius: 11.0 / 2) - - context.setFillColor(hoverFillColor.copy(alpha: hoverAnimationProgress) ?? hoverFillColor) - context.setStrokeColor(hoverBorderColor.copy(alpha: hoverAnimationProgress) ?? hoverBorderColor) - context.addPath(roundedRect.cgPathFallback) - context.drawPath(using: .fillStroke) - - // Add the little arrows - drawChevron(in: context, yPosition: minYPosition + 8, pointingUp: false) - drawChevron(in: context, yPosition: maxYPosition - 8, pointingUp: true) - - context.restoreGState() - } - - private func drawChevron(in context: CGContext, yPosition: CGFloat, pointingUp: Bool) { - context.saveGState() - let path = CGMutablePath() - let chevronSize = CGSize(width: 4.0, height: 2.5) - - let center = (Self.width / 2) - let minX = center - (chevronSize.width / 2) - let maxX = center + (chevronSize.width / 2) - - let startY = pointingUp ? yPosition + chevronSize.height : yPosition - chevronSize.height - - context.setStrokeColor(NSColor.secondaryLabelColor.withAlphaComponent(hoverAnimationProgress).cgColor) - context.setLineCap(.round) - context.setLineJoin(.round) - context.setLineWidth(1.3) - - path.move(to: CGPoint(x: minX, y: startY)) - path.addLine(to: CGPoint(x: center, y: yPosition)) - path.addLine(to: CGPoint(x: maxX, y: startY)) - - context.addPath(path) - context.strokePath() - context.restoreGState() - } - - private func drawNestedFold( - markerContext: FoldMarkerDrawingContext, - minYPosition: CGFloat, - maxYPosition: CGFloat, - in context: CGContext - ) { - let plainRect = NSRect(x: 0, y: minYPosition + 1, width: 7, height: maxYPosition - minYPosition - 2) - // TODO: Draw a single horizontal line when folds are adjacent - let roundedRect = NSBezierPath(roundedRect: plainRect, xRadius: 3.5, yRadius: 3.5) - - context.addPath(roundedRect.cgPathFallback) - context.drawPath(using: .fill) - - // Add small white line if we're overlapping with other markers - if markerContext.depth != 0 { - drawOutline( - minYPosition: minYPosition, - maxYPosition: maxYPosition, - originalPath: roundedRect, - in: context - ) - } - } - - /// Draws a rounded outline for a rectangle, creating the small, light, outline around each fold indicator. - /// - /// This function does not change fill colors for the given context. - /// - /// - Parameters: - /// - minYPosition: The minimum y position of the rectangle to outline. - /// - maxYPosition: The maximum y position of the rectangle to outline. - /// - originalPath: The original bezier path for the rounded rectangle. - /// - context: The context to draw in. - private func drawOutline( - minYPosition: CGFloat, - maxYPosition: CGFloat, - originalPath: NSBezierPath, - in context: CGContext - ) { - context.saveGState() - - let plainRect = NSRect(x: -0.5, y: minYPosition, width: 8, height: maxYPosition - minYPosition) - let roundedRect = NSBezierPath(roundedRect: plainRect, xRadius: 4, yRadius: 4) - - let combined = CGMutablePath() - combined.addPath(roundedRect.cgPathFallback) - combined.addPath(originalPath.cgPathFallback) - - context.clip(to: CGRect(x: 0, y: minYPosition, width: 7, height: maxYPosition - minYPosition)) - context.addPath(combined) - context.setFillColor(markerBorderColor) - context.drawPath(using: .eoFill) - - context.restoreGState() - } -} diff --git a/Sources/CodeEditSourceEditor/LineFolding/FoldProviders/IndentationLineFoldProvider.swift b/Sources/CodeEditSourceEditor/LineFolding/FoldProviders/IndentationLineFoldProvider.swift index e039e922c..84626c971 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/FoldProviders/IndentationLineFoldProvider.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/FoldProviders/IndentationLineFoldProvider.swift @@ -6,19 +6,8 @@ // import AppKit -import TextStory import CodeEditTextView -extension NSString: @retroactive TextStoring { - public func substring(from range: NSRange) -> String? { - self.substring(with: range) - } - - public func applyMutation(_ mutation: TextMutation) { - self.replacingCharacters(in: mutation.range, with: mutation.string) - } -} - final class IndentationLineFoldProvider: LineFoldProvider { func indentLevelAtLine(substring: NSString) -> Int? { for idx in 0.. @@ -30,7 +30,7 @@ class LineFoldingModel: NSObject, NSTextStorageDelegate { weak var controller: TextViewController? - init(controller: TextViewController, foldView: FoldingRibbonView, foldProvider: LineFoldProvider?) { + init(controller: TextViewController, foldView: NSView, foldProvider: LineFoldProvider?) { self.controller = controller (textChangedStream, textChangedStreamContinuation) = AsyncStream<(NSRange, Int)>.makeStream() self.calculator = LineFoldCalculator( diff --git a/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView.swift b/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView.swift index 4cb60c4d8..e83790d68 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView.swift @@ -10,13 +10,14 @@ import AppKit import CodeEditTextView import Combine -#warning("Replace before release") -private let demoFoldProvider = IndentationLineFoldProvider() - /// Displays the code folding ribbon in the ``GutterView``. /// /// This view draws its contents class FoldingRibbonView: NSView { + +#warning("Replace before release") + private static let demoFoldProvider = IndentationLineFoldProvider() + static let width: CGFloat = 7.0 var model: LineFoldingModel? @@ -92,7 +93,7 @@ class FoldingRibbonView: NSView { self.model = LineFoldingModel( controller: controller, foldView: self, - foldProvider: foldProvider ?? demoFoldProvider + foldProvider: foldProvider ?? Self.demoFoldProvider ) } diff --git a/Tests/CodeEditSourceEditorTests/LineFoldingTests/LineFoldStorageTests.swift b/Tests/CodeEditSourceEditorTests/LineFoldingTests/LineFoldStorageTests.swift index 3356b2735..5ef4d8e0d 100644 --- a/Tests/CodeEditSourceEditorTests/LineFoldingTests/LineFoldStorageTests.swift +++ b/Tests/CodeEditSourceEditorTests/LineFoldingTests/LineFoldStorageTests.swift @@ -30,7 +30,7 @@ struct LineFoldStorageTests { LineFoldStorage.RawFold(depth: 1, range: 0..<5), LineFoldStorage.RawFold(depth: 2, range: 5..<10) ] - storage.updateFolds(from: raw) { [] } + storage.updateFolds(from: raw, collapsedRanges: []) let folds = storage.folds(in: 0..<20) #expect(folds.count == 2) @@ -43,13 +43,11 @@ struct LineFoldStorageTests { var storage = LineFoldStorage(documentLength: 15) let raw = [LineFoldStorage.RawFold(depth: 1, range: 0..<5)] // First pass: no collapsed - storage.updateFolds(from: raw) { [] } + storage.updateFolds(from: raw, collapsedRanges: []) #expect(storage.folds(in: 0..<15).first?.isCollapsed == false) // Second pass: provider marks depth=1, start=0 as collapsed - storage.updateFolds(from: raw) { - collapsedSet((1, 0)) - } + storage.updateFolds(from: raw, collapsedRanges: collapsedSet((1, 0))) #expect(storage.folds(in: 0..<15).first?.isCollapsed == true) } @@ -58,11 +56,11 @@ struct LineFoldStorageTests { var storage = LineFoldStorage(documentLength: 30) let raw = [LineFoldStorage.RawFold(depth: 2, range: 10..<20)] - storage.updateFolds(from: raw) { [] } + storage.updateFolds(from: raw, collapsedRanges: []) let initial = storage.fullFoldRegion(at: 10, depth: 2)!.id // Perform update again with identical raw folds - storage.updateFolds(from: raw) { [] } + storage.updateFolds(from: raw, collapsedRanges: []) let subsequent = storage.fullFoldRegion(at: 10, depth: 2)!.id #expect(initial == subsequent) diff --git a/Tests/CodeEditSourceEditorTests/LineFoldingTests/LineFoldingModelTests.swift b/Tests/CodeEditSourceEditorTests/LineFoldingTests/LineFoldingModelTests.swift index e5210bb97..168feab50 100644 --- a/Tests/CodeEditSourceEditorTests/LineFoldingTests/LineFoldingModelTests.swift +++ b/Tests/CodeEditSourceEditorTests/LineFoldingTests/LineFoldingModelTests.swift @@ -12,48 +12,58 @@ import CodeEditTextView @MainActor struct LineFoldingModelTests { -// /// Makes a fold pattern that increases until halfway through the document then goes back to zero. -// class HillPatternFoldProvider: LineFoldProvider { -// func foldLevelAtLine( -// lineNumber: Int, -// lineRange: NSRange, -// currentDepth: Int, -// text: NSTextStorage -// ) -> CodeEditSourceEditor.LineFoldProviderLineInfo? { -// let halfLineCount = (layoutManager.lineCount / 2) - 1 -// -// return if lineNumber > halfLineCount { -// layoutManager.lineCount - 2 - lineNumber -// } else { -// lineNumber -// } -// } -// } -// -// let textView: TextView -// let model: LineFoldingModel -// -// init() { -// textView = TextView(string: "A\nB\nC\nD\nE\nF\n") -// textView.frame = NSRect(x: 0, y: 0, width: 1000, height: 1000) -// textView.updatedViewport(NSRect(x: 0, y: 0, width: 1000, height: 1000)) -// model = LineFoldingModel(textView: textView, foldProvider: nil) -// } -// -// /// A little unintuitive but we only expect two folds with this. Our provider goes 0-1-2-2-1-0, but we don't -// /// make folds for indent level 0. We also expect folds to start on the lines *before* the indent increases and -// /// after it decreases, so the fold covers the start/end of the region being folded. -// @Test -// func buildFoldsForDocument() throws { -// let provider = HillPatternFoldProvider() -// model.foldProvider = provider -// -// model.buildFoldsForDocument() -// -// let fold = try #require(model.getFolds(in: 0...5).first) -// #expect(fold.lineRange == 0...5) -// -// let innerFold = try #require(fold.subFolds.first) -// #expect(innerFold.lineRange == 1...4) -// } + /// Makes a fold pattern that increases until halfway through the document then goes back to zero. + @MainActor + class HillPatternFoldProvider: LineFoldProvider { + func foldLevelAtLine( + lineNumber: Int, + lineRange: NSRange, + previousDepth: Int, + controller: TextViewController + ) -> [LineFoldProviderLineInfo] { + let halfLineCount = (controller.textView.layoutManager.lineCount / 2) - 1 + + return if lineNumber > halfLineCount { + [ + .startFold( + rangeStart: lineRange.location, + newDepth: controller.textView.layoutManager.lineCount - 2 - lineNumber + ) + ] + } else { + [ + .endFold(rangeEnd: lineRange.location, newDepth: lineNumber) + ] + } + } + } + + let controller: TextViewController + let textView: TextView + + init() { + controller = Mock.textViewController(theme: Mock.theme()) + textView = controller.textView + textView.string = "A\nB\nC\nD\nE\nF\n" + textView.frame = NSRect(x: 0, y: 0, width: 1000, height: 1000) + textView.updatedViewport(NSRect(x: 0, y: 0, width: 1000, height: 1000)) + } + + /// A little unintuitive but we only expect two folds with this. Our provider goes 0-1-2-2-1-0, but we don't + /// make folds for indent level 0. We also expect folds to start on the lines *before* the indent increases and + /// after it decreases, so the fold covers the start/end of the region being folded. + @Test + func buildFoldsForDocument() async throws { + let provider = HillPatternFoldProvider() + let model = LineFoldingModel(controller: controller, foldView: NSView(), foldProvider: provider) + + var cacheUpdated = model.$foldCache.values.makeAsyncIterator() + _ = await cacheUpdated.next() + _ = await cacheUpdated.next() + + let fold = try #require(model.getFolds(in: 0..<6).first) + #expect(fold.range == 2..<10) + #expect(fold.depth == 1) + #expect(fold.isCollapsed == false) + } } From fb70a5821227b3ac7bf83cbf621e3c5fa2adfd45 Mon Sep 17 00:00:00 2001 From: Khan Winter <35942988+thecoolwinter@users.noreply.github.com> Date: Tue, 3 Jun 2025 14:33:53 -0500 Subject: [PATCH 29/30] Fix Lint Errors, Clean Up Calculator --- .../NSBezierPath+RoundedCorners.swift | 2 +- .../Model/LineFoldCalculator.swift | 90 +++++++++++-------- .../View/FoldingRibbonView+Draw.swift | 62 ++++--------- .../View/FoldingRibbonView+FoldCapInfo.swift | 50 +++++++++++ .../RangeStore/RangeStore+FindIndex.swift | 2 +- 5 files changed, 121 insertions(+), 85 deletions(-) create mode 100644 Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+FoldCapInfo.swift diff --git a/Sources/CodeEditSourceEditor/Extensions/NSBezierPath+RoundedCorners.swift b/Sources/CodeEditSourceEditor/Extensions/NSBezierPath+RoundedCorners.swift index f8d57c5c4..09156caea 100644 --- a/Sources/CodeEditSourceEditor/Extensions/NSBezierPath+RoundedCorners.swift +++ b/Sources/CodeEditSourceEditor/Extensions/NSBezierPath+RoundedCorners.swift @@ -24,6 +24,7 @@ extension NSBezierPath { public static let bottomRight = Corners(rawValue: 1 << 3) } + // swiftlint:disable:next function_body_length convenience init(rect: CGRect, roundedCorners corners: Corners, cornerRadius: CGFloat) { self.init() @@ -95,7 +96,6 @@ extension NSBezierPath { close() } - convenience init(roundingRect: CGRect, capTop: Bool, capBottom: Bool, cornerRadius radius: CGFloat) { switch (capTop, capBottom) { case (true, true): diff --git a/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift b/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift index 27ba8e521..275f0fe7d 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift @@ -56,15 +56,13 @@ actor LineFoldCalculator { // Depth: Open range var openFolds: [Int: LineFoldStorage.RawFold] = [:] var currentDepth: Int = 0 - var iterator = await controller.textView.layoutManager.lineStorage.makeIterator() - - var lines = await self.getMoreLines( + var lineIterator = await ChunkedLineIterator( controller: controller, - iterator: &iterator, - previousDepth: currentDepth, - foldProvider: foldProvider + foldProvider: foldProvider, + textIterator: await controller.textView.layoutManager.lineStorage.makeIterator() ) - while let lineChunk = lines { + + for await lineChunk in lineIterator { for lineInfo in lineChunk { // Start a new fold, going deeper to a new depth. if lineInfo.depth > currentDepth { @@ -88,12 +86,6 @@ actor LineFoldCalculator { currentDepth = lineInfo.depth } - lines = await self.getMoreLines( - controller: controller, - iterator: &iterator, - previousDepth: currentDepth, - foldProvider: foldProvider - ) } // Clean up any hanging folds. @@ -106,6 +98,14 @@ actor LineFoldCalculator { ) } + await yieldNewStorage(newFolds: foldCache, controller: controller, documentRange: documentRange) + } + + private func yieldNewStorage( + newFolds: [LineFoldStorage.RawFold], + controller: TextViewController, + documentRange: NSRange + ) async { let attachments = await controller.textView.layoutManager.attachments .getAttachmentsOverlapping(documentRange) .compactMap { attachmentBox -> LineFoldStorage.DepthStartPair? in @@ -116,39 +116,55 @@ actor LineFoldCalculator { } let storage = LineFoldStorage( - documentLength: foldCache.max( + documentLength: newFolds.max( by: { $0.range.upperBound < $1.range.upperBound } )?.range.upperBound ?? documentRange.length, - folds: foldCache.sorted(by: { $0.range.lowerBound < $1.range.lowerBound }), + folds: newFolds.sorted(by: { $0.range.lowerBound < $1.range.lowerBound }), collapsedRanges: Set(attachments) ) valueStreamContinuation.yield(storage) } @MainActor - private func getMoreLines( - controller: TextViewController, - iterator: inout TextLineStorage.TextLineStorageIterator, - previousDepth: Int, - foldProvider: LineFoldProvider - ) -> [LineFoldProviderLineInfo]? { - var results: [LineFoldProviderLineInfo] = [] - var count = 0 - var previousDepth: Int = previousDepth - while count < 50, let linePosition = iterator.next() { - let foldInfo = foldProvider.foldLevelAtLine( - lineNumber: linePosition.index, - lineRange: linePosition.range, - previousDepth: previousDepth, - controller: controller - ) - results.append(contentsOf: foldInfo) - count += 1 - previousDepth = foldInfo.max(by: { $0.depth < $1.depth })?.depth ?? previousDepth + struct ChunkedLineIterator: AsyncSequence, AsyncIteratorProtocol { + var controller: TextViewController + var foldProvider: LineFoldProvider + private var previousDepth: Int = 0 + var textIterator: TextLineStorage.TextLineStorageIterator + + init( + controller: TextViewController, + foldProvider: LineFoldProvider, + textIterator: TextLineStorage.TextLineStorageIterator + ) { + self.controller = controller + self.foldProvider = foldProvider + self.textIterator = textIterator + } + + nonisolated func makeAsyncIterator() -> ChunkedLineIterator { + self } - if results.isEmpty && count == 0 { - return nil + + mutating func next() async -> [LineFoldProviderLineInfo]? { + var results: [LineFoldProviderLineInfo] = [] + var count = 0 + var previousDepth: Int = previousDepth + while count < 50, let linePosition = textIterator.next() { + let foldInfo = foldProvider.foldLevelAtLine( + lineNumber: linePosition.index, + lineRange: linePosition.range, + previousDepth: previousDepth, + controller: controller + ) + results.append(contentsOf: foldInfo) + count += 1 + previousDepth = foldInfo.max(by: { $0.depth < $1.depth })?.depth ?? previousDepth + } + if results.isEmpty && count == 0 { + return nil + } + return results } - return results } } diff --git a/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+Draw.swift b/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+Draw.swift index 9863d83a7..1a0650291 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+Draw.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+Draw.swift @@ -9,46 +9,6 @@ import AppKit import CodeEditTextView extension FoldingRibbonView { - struct FoldCapInfo { - let startIndices: Set - let endIndices: Set - - init(_ folds: [DrawingFoldInfo]) { - self.startIndices = folds.reduce(into: Set(), { $0.insert($1.startLine.index) }) - self.endIndices = folds.reduce(into: Set(), { $0.insert($1.endLine.index) }) - } - - func foldNeedsTopCap(_ fold: DrawingFoldInfo) -> Bool { - endIndices.contains(fold.startLine.index) - } - - func foldNeedsBottomCap(_ fold: DrawingFoldInfo) -> Bool { - startIndices.contains(fold.endLine.index) - } - - func adjustFoldRect( - using fold: DrawingFoldInfo, - rect: NSRect - ) -> NSRect { - let capTop = foldNeedsTopCap(fold) - let capBottom = foldNeedsBottomCap(fold) - let yDelta = capTop ? fold.startLine.height / 2.0 : 0.0 - let heightDelta: CGFloat = if capTop && capBottom { - -fold.startLine.height - } else if capTop || capBottom { - -(fold.startLine.height / 2.0) - } else { - 0.0 - } - return NSRect( - x: rect.origin.x, - y: rect.origin.y + yDelta, - width: rect.size.width, - height: rect.size.height + heightDelta - ) - } - } - struct DrawingFoldInfo { let fold: FoldRange let startLine: TextLineStorage.TextLinePosition @@ -273,8 +233,7 @@ extension FoldingRibbonView { foldInfo: foldInfo, foldCaps: foldCaps, originalPath: roundedRect.cgPathFallback, - minYPosition: minYPosition, - maxYPosition: maxYPosition, + yPosition: minYPosition...maxYPosition, in: context ) } @@ -295,15 +254,19 @@ extension FoldingRibbonView { foldInfo: DrawingFoldInfo, foldCaps: FoldCapInfo, originalPath: CGPath, - minYPosition: CGFloat, - maxYPosition: CGFloat, + yPosition: ClosedRange, in context: CGContext ) { context.saveGState() let plainRect = foldCaps.adjustFoldRect( using: foldInfo, - rect: NSRect(x: -0.5, y: minYPosition, width: frame.width + 1.0, height: maxYPosition - minYPosition) + rect: NSRect( + x: -0.5, + y: yPosition.lowerBound, + width: frame.width + 1.0, + height: yPosition.upperBound - yPosition.lowerBound + ) ) let radius = plainRect.width / 2.0 let roundedRect = NSBezierPath( @@ -318,7 +281,14 @@ extension FoldingRibbonView { combined.addPath(roundedRect.cgPathFallback) combined.addPath(originalPath) - context.clip(to: CGRect(x: 0, y: minYPosition, width: 7, height: maxYPosition - minYPosition)) + context.clip( + to: CGRect( + x: 0, + y: yPosition.lowerBound, + width: 7, + height: yPosition.upperBound - yPosition.lowerBound + ) + ) context.addPath(combined) context.setFillColor(markerBorderColor) context.drawPath(using: .eoFill) diff --git a/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+FoldCapInfo.swift b/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+FoldCapInfo.swift new file mode 100644 index 000000000..1c766027a --- /dev/null +++ b/Sources/CodeEditSourceEditor/LineFolding/View/FoldingRibbonView+FoldCapInfo.swift @@ -0,0 +1,50 @@ +// +// FoldCapInfo.swift +// CodeEditSourceEditor +// +// Created by Khan Winter on 6/3/25. +// + +import AppKit + +extension FoldingRibbonView { + struct FoldCapInfo { + let startIndices: Set + let endIndices: Set + + init(_ folds: [DrawingFoldInfo]) { + self.startIndices = folds.reduce(into: Set(), { $0.insert($1.startLine.index) }) + self.endIndices = folds.reduce(into: Set(), { $0.insert($1.endLine.index) }) + } + + func foldNeedsTopCap(_ fold: DrawingFoldInfo) -> Bool { + endIndices.contains(fold.startLine.index) + } + + func foldNeedsBottomCap(_ fold: DrawingFoldInfo) -> Bool { + startIndices.contains(fold.endLine.index) + } + + func adjustFoldRect( + using fold: DrawingFoldInfo, + rect: NSRect + ) -> NSRect { + let capTop = foldNeedsTopCap(fold) + let capBottom = foldNeedsBottomCap(fold) + let yDelta = capTop ? fold.startLine.height / 2.0 : 0.0 + let heightDelta: CGFloat = if capTop && capBottom { + -fold.startLine.height + } else if capTop || capBottom { + -(fold.startLine.height / 2.0) + } else { + 0.0 + } + return NSRect( + x: rect.origin.x, + y: rect.origin.y + yDelta, + width: rect.size.width, + height: rect.size.height + heightDelta + ) + } + } +} diff --git a/Sources/CodeEditSourceEditor/RangeStore/RangeStore+FindIndex.swift b/Sources/CodeEditSourceEditor/RangeStore/RangeStore+FindIndex.swift index 51092f457..0c3438e09 100644 --- a/Sources/CodeEditSourceEditor/RangeStore/RangeStore+FindIndex.swift +++ b/Sources/CodeEditSourceEditor/RangeStore/RangeStore+FindIndex.swift @@ -12,7 +12,7 @@ extension RangeStore { func findIndex(at offset: Int) -> (index: Index, remaining: Int) { _guts.find(at: offset, in: OffsetMetric(), preferEnd: false) } - + /// Finds the value stored at a given string offset. /// - Parameter offset: The offset to query for. /// - Returns: The element stored, if any. From 78cb70ab7a8e824120db1449331dfafdaee66c10 Mon Sep 17 00:00:00 2001 From: Khan Winter <35942988+thecoolwinter@users.noreply.github.com> Date: Tue, 3 Jun 2025 14:38:36 -0500 Subject: [PATCH 30/30] Document the async calculator --- .../Model/LineFoldCalculator.swift | 26 ++++++++++++++----- .../LineFolding/Model/LineFoldStorage.swift | 8 ------ .../LineFoldStorageTests.swift | 15 ----------- 3 files changed, 20 insertions(+), 29 deletions(-) diff --git a/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift b/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift index 275f0fe7d..3a12022d0 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldCalculator.swift @@ -11,8 +11,6 @@ import CodeEditTextView /// A utility that calculates foldable line ranges in a text document based on indentation depth. /// /// `LineFoldCalculator` observes text edits and rebuilds fold regions asynchronously. -/// Fold information is emitted via `rangesPublisher`. -/// Notify the calculator it should re-calculate actor LineFoldCalculator { weak var foldProvider: LineFoldProvider? weak var controller: TextViewController? @@ -21,7 +19,12 @@ actor LineFoldCalculator { private var valueStreamContinuation: AsyncStream.Continuation private var textChangedTask: Task? - + + /// Create a new calculator object that listens to a given stream for text changes. + /// - Parameters: + /// - foldProvider: The object to use to calculate fold regions. + /// - controller: The text controller to use for text and attachment fetching. + /// - textChangedStream: A stream of text changes, received as the document is edited. init( foldProvider: LineFoldProvider?, controller: TextViewController, @@ -36,7 +39,9 @@ actor LineFoldCalculator { deinit { textChangedTask?.cancel() } - + + /// Sets up an attached task to listen to values on a stream of text changes. + /// - Parameter textChangedStream: A stream of text changes. private func listenToTextChanges(textChangedStream: AsyncStream<(NSRange, Int)>) { textChangedTask = Task { for await edit in textChangedStream { @@ -100,7 +105,12 @@ actor LineFoldCalculator { await yieldNewStorage(newFolds: foldCache, controller: controller, documentRange: documentRange) } - + + /// Yield a new storage value on the value stream using a new set of folds. + /// - Parameters: + /// - newFolds: The new folds to yield with the storage value. + /// - controller: The text controller used for range and attachment fetching. + /// - documentRange: The total range of the current document. private func yieldNewStorage( newFolds: [LineFoldStorage.RawFold], controller: TextViewController, @@ -125,6 +135,10 @@ actor LineFoldCalculator { valueStreamContinuation.yield(storage) } + /// Asynchronously gets more line information from the fold provider. + /// Runs on the main thread so all text-related calculations are safe with the main text storage. + /// + /// Has to be an `AsyncSequence` so it can be main actor isolated. @MainActor struct ChunkedLineIterator: AsyncSequence, AsyncIteratorProtocol { var controller: TextViewController @@ -146,7 +160,7 @@ actor LineFoldCalculator { self } - mutating func next() async -> [LineFoldProviderLineInfo]? { + mutating func next() -> [LineFoldProviderLineInfo]? { var results: [LineFoldProviderLineInfo] = [] var count = 0 var previousDepth: Int = previousDepth diff --git a/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldStorage.swift b/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldStorage.swift index 33ae02e68..52b5d78dd 100644 --- a/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldStorage.swift +++ b/Sources/CodeEditSourceEditor/LineFolding/Model/LineFoldStorage.swift @@ -120,12 +120,4 @@ struct LineFoldStorage: Sendable { return result.sorted { $0.range.lowerBound < $1.range.lowerBound } } - - /// Given a depth and a location, return the full original fold region - func fullFoldRegion(at location: Int, depth: Int) -> FoldRange? { - guard let elem = store.findValue(at: location), elem.depth == depth else { - return nil - } - return foldRanges[elem.id] - } } diff --git a/Tests/CodeEditSourceEditorTests/LineFoldingTests/LineFoldStorageTests.swift b/Tests/CodeEditSourceEditorTests/LineFoldingTests/LineFoldStorageTests.swift index 5ef4d8e0d..44467bde2 100644 --- a/Tests/CodeEditSourceEditorTests/LineFoldingTests/LineFoldStorageTests.swift +++ b/Tests/CodeEditSourceEditorTests/LineFoldingTests/LineFoldStorageTests.swift @@ -50,19 +50,4 @@ struct LineFoldStorageTests { storage.updateFolds(from: raw, collapsedRanges: collapsedSet((1, 0))) #expect(storage.folds(in: 0..<15).first?.isCollapsed == true) } - - @Test - func stableIDsBetweenUpdates() { - var storage = LineFoldStorage(documentLength: 30) - let raw = [LineFoldStorage.RawFold(depth: 2, range: 10..<20)] - - storage.updateFolds(from: raw, collapsedRanges: []) - let initial = storage.fullFoldRegion(at: 10, depth: 2)!.id - - // Perform update again with identical raw folds - storage.updateFolds(from: raw, collapsedRanges: []) - let subsequent = storage.fullFoldRegion(at: 10, depth: 2)!.id - - #expect(initial == subsequent) - } }

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 krC^^b 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