From 246efb4f39d8d41de271513a10332d0e4fd838e0 Mon Sep 17 00:00:00 2001 From: Shawn Schantz Date: Wed, 23 Oct 2024 19:14:26 +0700 Subject: [PATCH 01/18] add resizeKeyboard logging --- .../KeymanEngine/Classes/Keyboard/KeymanWebViewController.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/KeymanWebViewController.swift b/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/KeymanWebViewController.swift index 50a22e6fe45..5f81d25e6f9 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/KeymanWebViewController.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/KeymanWebViewController.swift @@ -768,6 +768,7 @@ extension KeymanWebViewController { // the first time. setOskWidth(Int(kbSize.width)) setOskHeight(Int(kbSize.height)) + os_log("KeymanWebViewController resizeKeyboard to kbSize %{public}d", log:KeymanEngineLogger.ui, type: .default, NSCoder.string(for:kbSize)) } func resetKeyboardState() { From 751c853bb1add22b95a0c8b11ae8453b0bc91acc Mon Sep 17 00:00:00 2001 From: Shawn Schantz Date: Wed, 23 Oct 2024 21:37:02 +0700 Subject: [PATCH 02/18] correct resizeKeyboard logging --- .../KeymanEngine/Classes/Keyboard/KeymanWebViewController.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/KeymanWebViewController.swift b/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/KeymanWebViewController.swift index 5f81d25e6f9..d135fd770c4 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/KeymanWebViewController.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/KeymanWebViewController.swift @@ -768,7 +768,7 @@ extension KeymanWebViewController { // the first time. setOskWidth(Int(kbSize.width)) setOskHeight(Int(kbSize.height)) - os_log("KeymanWebViewController resizeKeyboard to kbSize %{public}d", log:KeymanEngineLogger.ui, type: .default, NSCoder.string(for:kbSize)) + os_log("KeymanWebViewController resizeKeyboard to kbSize %{public}s", log:KeymanEngineLogger.ui, type: .debug, NSCoder.string(for:kbSize)) } func resetKeyboardState() { From 0fbf12346db53632bccdbb2d2bbf79430482fd99 Mon Sep 17 00:00:00 2001 From: sgschantz Date: Thu, 24 Oct 2024 13:59:40 +0700 Subject: [PATCH 03/18] fix(ios): add Adjust Keyboard Height control to Keyman Settings --- .../Classes/SettingsViewController.swift | 20 +++++++++++++++++-- .../KeymanEngine/en.lproj/Localizable.strings | 3 +++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/ios/engine/KMEI/KeymanEngine/Classes/SettingsViewController.swift b/ios/engine/KMEI/KeymanEngine/Classes/SettingsViewController.swift index 543453bb0c1..5378019369f 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/SettingsViewController.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/SettingsViewController.swift @@ -53,7 +53,8 @@ open class SettingsViewController: UITableViewController { public init(/*storage: Storage*/) { // self.storage = storage super.init(nibName: nil, bundle: nil) - + os_log("init settings", log:KeymanEngineLogger.settings, type: .default) + itemsArray = [[String: String]]() itemsArray.append([ "title": NSLocalizedString("menu-installed-languages-title", bundle: engineBundle, comment: ""), @@ -79,6 +80,12 @@ open class SettingsViewController: UITableViewController { "reuseid": "spacebartext" ]) + itemsArray.append([ + "title": NSLocalizedString("menu-settings-adjust-keyboard-height", bundle: engineBundle, comment: ""), + "subtitle": "", + "reuseid": "adjustkeyboardheight" + ]) + if let _ = URL(string: UIApplication.openSettingsURLString) { itemsArray.append([ "title": NSLocalizedString("menu-settings-system-keyboard-menu", bundle: engineBundle, comment: ""), @@ -176,7 +183,7 @@ open class SettingsViewController: UITableViewController { enableReportingSwitch.rightAnchor.constraint(equalTo: cell.layoutMarginsGuide.rightAnchor).isActive = true enableReportingSwitch.centerYAnchor.constraint(equalTo: cell.layoutMarginsGuide.centerYAnchor).isActive = true - case "systemkeyboardsettings", "installfile", "forcederror", "spacebartext": + case "systemkeyboardsettings", "installfile", "forcederror", "spacebartext", "adjustkeyboardheight": break default: let message = "unknown cellIdentifier(\"\(cellIdentifier ?? "EMPTY")\")" @@ -233,6 +240,10 @@ open class SettingsViewController: UITableViewController { cell.detailTextLabel?.text = NSLocalizedString("menu-settings-spacebar-hint-"+Manager.shared.spacebarText.rawValue, bundle: engineBundle, comment: "") cell.detailTextLabel?.isEnabled = true break + case "adjustkeyboardheight": + cell.accessoryType = .disclosureIndicator + cell.detailTextLabel?.isEnabled = false + break case "showbanner", "showgetstarted": cell.detailTextLabel?.isEnabled = false default: @@ -280,6 +291,8 @@ open class SettingsViewController: UITableViewController { SentryManager.forceError() case "spacebartext": showSpacebarText() + case "adjustkeyboardheight": + showAdjustKeyboardHeight() default: break } @@ -429,4 +442,7 @@ open class SettingsViewController: UITableViewController { } } + func showAdjustKeyboardHeight() { + os_log("selected Adjust Keyboard Height", log:KeymanEngineLogger.settings, type: .default) + } } diff --git a/ios/engine/KMEI/KeymanEngine/en.lproj/Localizable.strings b/ios/engine/KMEI/KeymanEngine/en.lproj/Localizable.strings index db0966351ea..917c868bb3d 100644 --- a/ios/engine/KMEI/KeymanEngine/en.lproj/Localizable.strings +++ b/ios/engine/KMEI/KeymanEngine/en.lproj/Localizable.strings @@ -226,6 +226,9 @@ /* Text showing name of spacebar caption - language + keyboard */ "menu-settings-spacebar-item-languageKeyboard" = "Language and keyboard"; +/* Label for the "Adjust Keyboard Height" item on the main settings screen */ +"menu-settings-adjust-keyboard-height" = "Adjust Keyboard Height"; + /* Short text for notification: download failure for keyboard */ "notification-download-failure-keyboard" = "Keyboard download failed"; From 7b69bed2cf1f22ba3f42a3617aec006edd271fc9 Mon Sep 17 00:00:00 2001 From: sgschantz Date: Fri, 25 Oct 2024 14:41:25 +0700 Subject: [PATCH 04/18] feat(ios): add KeyboardHeightViewController --- .../KeymanEngine.xcodeproj/project.pbxproj | 4 ++ .../Classes/Keyboard/KeyboardScaleMap.swift | 5 ++ .../Keyboard/KeymanWebViewController.swift | 15 +++++- .../KeyboardHeightViewController.swift | 52 +++++++++++++++++++ .../Classes/SettingsViewController.swift | 9 ++++ 5 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift diff --git a/ios/engine/KMEI/KeymanEngine.xcodeproj/project.pbxproj b/ios/engine/KMEI/KeymanEngine.xcodeproj/project.pbxproj index d1c711368f1..331b6780f89 100644 --- a/ios/engine/KMEI/KeymanEngine.xcodeproj/project.pbxproj +++ b/ios/engine/KMEI/KeymanEngine.xcodeproj/project.pbxproj @@ -27,6 +27,7 @@ 165EB3A12098993900040A69 /* KeyboardError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 165EB3A02098993900040A69 /* KeyboardError.swift */; }; 296EF2C72AFA26C700E3E384 /* ZIPFoundation.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 296EF2C62AFA26C700E3E384 /* ZIPFoundation.xcframework */; }; 29B30C232B564F9900C342A4 /* KeymanEngineLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B30C222B564F9900C342A4 /* KeymanEngineLogger.swift */; }; + 29E202BD2CCB7541008B4740 /* KeyboardHeightViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29E202BC2CCB7541008B4740 /* KeyboardHeightViewController.swift */; }; 377D10DE26846B8900467431 /* SpacebarTextViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 377D10DD26846B8900467431 /* SpacebarTextViewController.swift */; }; 6CD5DFAA150F6DC8007A5DDE /* icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 6CD5DFA8150F6DC8007A5DDE /* icon.png */; }; 6CD5DFAB150F6DC8007A5DDE /* icon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 6CD5DFA9150F6DC8007A5DDE /* icon@2x.png */; }; @@ -333,6 +334,7 @@ 29C1E17128001F7600759EDE /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/ResourceInfoView.strings"; sourceTree = ""; }; 29C1E17228001F8800759EDE /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/Localizable.strings"; sourceTree = ""; }; 29C1E17328001FA200759EDE /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = "pt-PT"; path = "pt-PT.lproj/Localizable.stringsdict"; sourceTree = ""; }; + 29E202BC2CCB7541008B4740 /* KeyboardHeightViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyboardHeightViewController.swift; sourceTree = ""; }; 377D10DD26846B8900467431 /* SpacebarTextViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SpacebarTextViewController.swift; sourceTree = ""; }; 6C0A140E151EA930007FA4AD /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; 6C0A140F151EA930007FA4AD /* Keyman.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; lineEnding = 0; path = Keyman.xcconfig; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.xcconfig; }; @@ -705,6 +707,7 @@ 9A60763C22892485003BCFBA /* Settings.storyboard */, 9A60764322893A4E003BCFBA /* SettingsViewController.swift */, 377D10DD26846B8900467431 /* SpacebarTextViewController.swift */, + 29E202BC2CCB7541008B4740 /* KeyboardHeightViewController.swift */, ); name = Settings; sourceTree = ""; @@ -1447,6 +1450,7 @@ CE67D961228A6F190029F2B5 /* KeyboardCommandStructs.swift in Sources */, CE87751E24C68DA500B1475A /* KeyboardSearchViewController.swift in Sources */, CE8B0BBF248764ED0045EB2E /* KMPResource.swift in Sources */, + 29E202BD2CCB7541008B4740 /* KeyboardHeightViewController.swift in Sources */, 9AD4F53C229F85AC007992D3 /* LanguageSettingsViewController.swift in Sources */, CE969BE8251AD8B500376D6A /* PackageWebViewController.swift in Sources */, CE7A26DB23CEEF640005955C /* Colors.swift in Sources */, diff --git a/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/KeyboardScaleMap.swift b/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/KeyboardScaleMap.swift index c18fb8c7ad8..0335a1035c7 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/KeyboardScaleMap.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/KeyboardScaleMap.swift @@ -217,6 +217,8 @@ class KeyboardScaleMap { screenSize: CGSize = UIScreen.main.bounds.size, asPhone: Bool? = nil) -> KeyboardSize? { if let scaling = shared.scalings[KeyboardScaleMap.hashKey(for: device)] { + let kbHeight = (forPortrait ? scaling.portrait : scaling.landscape).keyboardHeight + os_log("KeyboardScaleMap getDeviceDefaultKeyboardScale keyboard height: %f", log:KeymanEngineLogger.ui, type: .debug, kbHeight) return forPortrait ? scaling.portrait : scaling.landscape } @@ -240,6 +242,9 @@ class KeyboardScaleMap { // keyboard dimensions. It's not a perfect rule, but should suffice for a stop-gap solution. let scaling = shared.scalings[KeyboardScaleMap.hashKey(for: mappedDevice)]! + let kbHeight = (forPortrait ? scaling.portrait : scaling.landscape).keyboardHeight + os_log("KeyboardScaleMap getDeviceDefaultKeyboardScale keyboard height for missing device: %f", log:KeymanEngineLogger.ui, type: .debug, kbHeight) + return forPortrait ? scaling.portrait : scaling.landscape } } diff --git a/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/KeymanWebViewController.swift b/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/KeymanWebViewController.swift index d135fd770c4..42ec5495ace 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/KeymanWebViewController.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/KeymanWebViewController.swift @@ -102,6 +102,7 @@ class KeymanWebViewController: UIViewController { // after it has been replaced by KMW's OSK resizing operation.) keyboardSize = view.bounds.size + os_log("KeymanWebViewController viewWillLayoutSubviews to keyboardSize %{public}s", log:KeymanEngineLogger.ui, type: .debug, NSCoder.string(for:keyboardSize)) } open override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { @@ -704,7 +705,18 @@ extension KeymanWebViewController { } func constraintTargetHeight(isPortrait: Bool) -> CGFloat { - return KeyboardScaleMap.getDeviceDefaultKeyboardScale(forPortrait: isPortrait)?.keyboardHeight ?? 216 // default for ancient devices + var kbHeight = KeyboardScaleMap.getDeviceDefaultKeyboardScale(forPortrait: isPortrait)?.keyboardHeight ?? 216 // default for ancient devices + os_log("constraintTargetHeight, keyboard height before: %f", log:KeymanEngineLogger.ui, type: .default, kbHeight) + + if (isPortrait) { + kbHeight+=100; + } else { + kbHeight-=50; + } + + os_log("constraintTargetHeight, keyboard height after: %f", log:KeymanEngineLogger.ui, type: .default, kbHeight) + + return kbHeight; } var keyboardWidth: CGFloat { @@ -723,6 +735,7 @@ extension KeymanWebViewController { } keyboardSize = CGSize(width: width, height: height) + os_log("KeymanWebViewController initKeyboardSize %{public}s", log:KeymanEngineLogger.ui, type: .default, NSCoder.string(for:keyboardSize)) } var keyboardSize: CGSize { diff --git a/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift b/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift new file mode 100644 index 00000000000..2cf64c65ec6 --- /dev/null +++ b/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift @@ -0,0 +1,52 @@ +/* + * Keyman is copyright (C) SIL International. MIT License. + * + * Created by Shawn Schantz on 2024-10-25. + * + * View controller for adjusting the height of the keyboard + */ + +import Foundation +import UIKit +import os.log + +class KeyboardHeightViewController: UIViewController { + var label: UILabel = UILabel() + + public init() { + super.init(nibName: nil, bundle: nil) + _ = view + } + + override func viewDidLoad() { + super.viewDidLoad() + + //title = NSLocalizedString("menu-settings-spacebar-title", bundle: engineBundle, comment: "") + title = "Adjust Keyboard Height" + navigationItem.setHidesBackButton(false, animated: true) + navigationItem.leftBarButtonItem?.isEnabled = true + + navigationController?.toolbar?.barTintColor = Colors.statusToolbar + + let firstFrame = CGRect(x: 160, y: 240, width: 200, height: 150) + let firstView = UIView(frame: firstFrame) + firstView.backgroundColor = UIColor.blue + view.addSubview(firstView) + + label.frame = CGRectMake(10, 10, 180, 100) + label.backgroundColor=UIColor.white + label.textAlignment = NSTextAlignment.center + label.text = "adjust keyboard height" + //label.isHidden=true + firstView.addSubview(label) + } + + override open func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + } + + required public init?(coder aDecoder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } +} + diff --git a/ios/engine/KMEI/KeymanEngine/Classes/SettingsViewController.swift b/ios/engine/KMEI/KeymanEngine/Classes/SettingsViewController.swift index 5378019369f..a2a85590871 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/SettingsViewController.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/SettingsViewController.swift @@ -444,5 +444,14 @@ open class SettingsViewController: UITableViewController { func showAdjustKeyboardHeight() { os_log("selected Adjust Keyboard Height", log:KeymanEngineLogger.settings, type: .default) + let vc = KeyboardHeightViewController() + if let nc = navigationController { + nc.pushViewController(vc, animated: true) + setIsDoneButtonEnabled(nc, true) + } else { + let message = ("No navigation controller for showing keyboard height view") + os_log("%{public}s", log:KeymanEngineLogger.settings, type: .error, message) + SentryManager.capture(message) + } } } From 8695112c82739a13f5c508d5ab16f90d27216ac5 Mon Sep 17 00:00:00 2001 From: sgschantz Date: Fri, 1 Nov 2024 11:22:09 +0700 Subject: [PATCH 05/18] fix(ios): add subviews for keyboard height adjustment --- .../KeymanEngine.xcodeproj/project.pbxproj | 4 ++ .../KeyboardHeightViewController.swift | 37 ++++++++++++------ .../Images.xcassets/Contents.json | 6 +++ .../landscape-osk.imageset/Contents.json | 21 ++++++++++ .../landscape-osk.imageset/blank_osk.png | Bin 0 -> 9284 bytes .../portrait-osk.imageset/Contents.json | 21 ++++++++++ .../portrait-osk.imageset/blank_osk.png | Bin 0 -> 8813 bytes 7 files changed, 78 insertions(+), 11 deletions(-) create mode 100644 ios/engine/KMEI/KeymanEngine/Images.xcassets/Contents.json create mode 100644 ios/engine/KMEI/KeymanEngine/Images.xcassets/landscape-osk.imageset/Contents.json create mode 100644 ios/engine/KMEI/KeymanEngine/Images.xcassets/landscape-osk.imageset/blank_osk.png create mode 100644 ios/engine/KMEI/KeymanEngine/Images.xcassets/portrait-osk.imageset/Contents.json create mode 100644 ios/engine/KMEI/KeymanEngine/Images.xcassets/portrait-osk.imageset/blank_osk.png diff --git a/ios/engine/KMEI/KeymanEngine.xcodeproj/project.pbxproj b/ios/engine/KMEI/KeymanEngine.xcodeproj/project.pbxproj index 331b6780f89..045506b9af4 100644 --- a/ios/engine/KMEI/KeymanEngine.xcodeproj/project.pbxproj +++ b/ios/engine/KMEI/KeymanEngine.xcodeproj/project.pbxproj @@ -25,6 +25,7 @@ 1645D5952036C6FF0076C51B /* KeymanPackage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1645D5942036C6FF0076C51B /* KeymanPackage.swift */; }; 1645D5972036C9F80076C51B /* KMPKeyboard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1645D5962036C9F80076C51B /* KMPKeyboard.swift */; }; 165EB3A12098993900040A69 /* KeyboardError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 165EB3A02098993900040A69 /* KeyboardError.swift */; }; + 29084CAB2CD48B5D004070E7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 29084CAA2CD48B5D004070E7 /* Images.xcassets */; }; 296EF2C72AFA26C700E3E384 /* ZIPFoundation.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 296EF2C62AFA26C700E3E384 /* ZIPFoundation.xcframework */; }; 29B30C232B564F9900C342A4 /* KeymanEngineLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29B30C222B564F9900C342A4 /* KeymanEngineLogger.swift */; }; 29E202BD2CCB7541008B4740 /* KeyboardHeightViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29E202BC2CCB7541008B4740 /* KeyboardHeightViewController.swift */; }; @@ -299,6 +300,7 @@ 1645D5942036C6FF0076C51B /* KeymanPackage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeymanPackage.swift; sourceTree = ""; }; 1645D5962036C9F80076C51B /* KMPKeyboard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KMPKeyboard.swift; sourceTree = ""; }; 165EB3A02098993900040A69 /* KeyboardError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyboardError.swift; sourceTree = ""; }; + 29084CAA2CD48B5D004070E7 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 293EA3DB2705955300545EED /* ha */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ha; path = ha.lproj/ResourceInfoView.strings; sourceTree = ""; }; 293EA3DC2705964200545EED /* ha */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ha; path = ha.lproj/Localizable.strings; sourceTree = ""; }; 293EA3DD270596B700545EED /* ha */ = {isa = PBXFileReference; lastKnownFileType = text.plist.stringsdict; name = ha; path = ha.lproj/Localizable.stringsdict; sourceTree = ""; }; @@ -763,6 +765,7 @@ CEA1486F2407808F00C6ECD2 /* Localizable.strings */, CE96E42D24D1229A005B8E5A /* Localizable.stringsdict */, CE7A26D023CEE5790005955C /* Keyboard Colors.xcassets */, + 29084CAA2CD48B5D004070E7 /* Images.xcassets */, C06D372E1F81F4E100F61AE0 /* Info.plist */, F273AB9615641D9300A47CEE /* Classes */, ); @@ -1263,6 +1266,7 @@ buildActionMask = 2147483647; files = ( C06D37601F82095200F61AE0 /* Keyman.bundle in Resources */, + 29084CAB2CD48B5D004070E7 /* Images.xcassets in Resources */, CEA1486C2407808F00C6ECD2 /* Localizable.strings in Resources */, 9ADC459F22E1895D004C78C6 /* LanguageLMDetailViewController.xib in Resources */, CEA14870240780E100C6ECD2 /* ResourceInfoView.xib in Resources */, diff --git a/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift b/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift index 2cf64c65ec6..f880d2da77f 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift @@ -12,6 +12,7 @@ import os.log class KeyboardHeightViewController: UIViewController { var label: UILabel = UILabel() + var keyboardImage: UIImageView = UIImageView() public init() { super.init(nibName: nil, bundle: nil) @@ -21,6 +22,18 @@ class KeyboardHeightViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() + let deviceOrientation = UIDevice.current.orientation + let isPortrait = deviceOrientation.isPortrait + + let keyboardScale = KeyboardScaleMap.getDeviceDefaultKeyboardScale(forPortrait: isPortrait) + let scalemessage = "KeyboardHeightViewController viewDidLoad, isPortrait: \(isPortrait) keyboardScale: \(String(describing: keyboardScale))" + os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, scalemessage) + + let kbHeight = keyboardScale?.keyboardHeight ?? 216 // default for ancient devices + + let message = "KeyboardHeightViewController viewDidLoad, boundsRect: \(self.view.bounds) keyboardHeight from scale: \(kbHeight)" + os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, message) + //title = NSLocalizedString("menu-settings-spacebar-title", bundle: engineBundle, comment: "") title = "Adjust Keyboard Height" navigationItem.setHidesBackButton(false, animated: true) @@ -28,21 +41,23 @@ class KeyboardHeightViewController: UIViewController { navigationController?.toolbar?.barTintColor = Colors.statusToolbar - let firstFrame = CGRect(x: 160, y: 240, width: 200, height: 150) - let firstView = UIView(frame: firstFrame) - firstView.backgroundColor = UIColor.blue - view.addSubview(firstView) + let contentView = UIView(frame: self.view.bounds) + contentView.backgroundColor = UIColor.systemBlue + view.addSubview(contentView) - label.frame = CGRectMake(10, 10, 180, 100) + label.frame = CGRectMake(10, 50, 180, 100) label.backgroundColor=UIColor.white label.textAlignment = NSTextAlignment.center - label.text = "adjust keyboard height" + label.text = "Drag the top edge of the keyboard to adjust its height./nSeparate values are saved for portrait and landscape keyboard height." //label.isHidden=true - firstView.addSubview(label) - } - - override open func viewWillAppear(_ animated: Bool) { - super.viewWillAppear(animated) + contentView.addSubview(label) + + // calculate frame for keyboard image + let keyboardFrame = CGRectMake(0, self.view.frame.height-kbHeight, self.view.frame.width, kbHeight) + keyboardImage.frame = keyboardFrame + keyboardImage.contentMode = UIView.ContentMode.scaleToFill + keyboardImage.image = UIImage(named:"portrait-osk") + contentView.addSubview(keyboardImage) } required public init?(coder aDecoder: NSCoder) { diff --git a/ios/engine/KMEI/KeymanEngine/Images.xcassets/Contents.json b/ios/engine/KMEI/KeymanEngine/Images.xcassets/Contents.json new file mode 100644 index 00000000000..73c00596a7f --- /dev/null +++ b/ios/engine/KMEI/KeymanEngine/Images.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/engine/KMEI/KeymanEngine/Images.xcassets/landscape-osk.imageset/Contents.json b/ios/engine/KMEI/KeymanEngine/Images.xcassets/landscape-osk.imageset/Contents.json new file mode 100644 index 00000000000..3fe56890608 --- /dev/null +++ b/ios/engine/KMEI/KeymanEngine/Images.xcassets/landscape-osk.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "blank_osk.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/engine/KMEI/KeymanEngine/Images.xcassets/landscape-osk.imageset/blank_osk.png b/ios/engine/KMEI/KeymanEngine/Images.xcassets/landscape-osk.imageset/blank_osk.png new file mode 100644 index 0000000000000000000000000000000000000000..a457358155a4eb49f21f2648aba20ba9bbdc62c7 GIT binary patch literal 9284 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 Bx8eW* literal 0 HcmV?d00001 From 048b3172c4c85d897fff8d68a12107c5df10d4a8 Mon Sep 17 00:00:00 2001 From: sgschantz Date: Fri, 1 Nov 2024 13:10:42 +0700 Subject: [PATCH 06/18] fix(ios): add debug logs --- .../Classes/KeyboardHeightViewController.swift | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift b/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift index f880d2da77f..51e09f26ba5 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift @@ -31,7 +31,7 @@ class KeyboardHeightViewController: UIViewController { let kbHeight = keyboardScale?.keyboardHeight ?? 216 // default for ancient devices - let message = "KeyboardHeightViewController viewDidLoad, boundsRect: \(self.view.bounds) keyboardHeight from scale: \(kbHeight)" + let message = " viewDidLoad, boundsRect: \(self.view.bounds) keyboardHeight from scale: \(kbHeight)" os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, message) //title = NSLocalizedString("menu-settings-spacebar-title", bundle: engineBundle, comment: "") @@ -42,20 +42,25 @@ class KeyboardHeightViewController: UIViewController { navigationController?.toolbar?.barTintColor = Colors.statusToolbar let contentView = UIView(frame: self.view.bounds) - contentView.backgroundColor = UIColor.systemBlue + contentView.backgroundColor = UIColor.lightGray + contentView.alpha = 0.5 view.addSubview(contentView) - label.frame = CGRectMake(10, 50, 180, 100) + label.frame = CGRectMake(10, 50, contentView.bounds.width-20, 100) label.backgroundColor=UIColor.white label.textAlignment = NSTextAlignment.center label.text = "Drag the top edge of the keyboard to adjust its height./nSeparate values are saved for portrait and landscape keyboard height." + label.numberOfLines = 0 //label.isHidden=true contentView.addSubview(label) // calculate frame for keyboard image let keyboardFrame = CGRectMake(0, self.view.frame.height-kbHeight, self.view.frame.width, kbHeight) + let kbFrameMessage = " viewDidLoad, keyboardFrame: \(keyboardFrame)" + os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, kbFrameMessage) keyboardImage.frame = keyboardFrame keyboardImage.contentMode = UIView.ContentMode.scaleToFill + keyboardImage.backgroundColor=UIColor.white keyboardImage.image = UIImage(named:"portrait-osk") contentView.addSubview(keyboardImage) } From 6decb5d16055ba793069b03789e6c1c01521d48f Mon Sep 17 00:00:00 2001 From: sgschantz Date: Fri, 1 Nov 2024 15:21:24 +0700 Subject: [PATCH 07/18] fix(ios): more image layout debugging and experimenting --- .../KeyboardHeightViewController.swift | 39 +++++++++++++------ .../Classes/SettingsViewController.swift | 3 +- 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift b/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift index 51e09f26ba5..733301bf306 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift @@ -13,7 +13,8 @@ import os.log class KeyboardHeightViewController: UIViewController { var label: UILabel = UILabel() var keyboardImage: UIImageView = UIImageView() - + var contentView: UIView = UIView() + public init() { super.init(nibName: nil, bundle: nil) _ = view @@ -41,27 +42,43 @@ class KeyboardHeightViewController: UIViewController { navigationController?.toolbar?.barTintColor = Colors.statusToolbar - let contentView = UIView(frame: self.view.bounds) - contentView.backgroundColor = UIColor.lightGray - contentView.alpha = 0.5 + contentView.frame = self.view.bounds + contentView.translatesAutoresizingMaskIntoConstraints = false + contentView.backgroundColor = .green + //contentView.alpha = 0.5 view.addSubview(contentView) - + + let margins = view.layoutMarginsGuide + NSLayoutConstraint.activate([ + contentView.leadingAnchor.constraint(equalTo: margins.leadingAnchor), + contentView.trailingAnchor.constraint(equalTo: margins.trailingAnchor) + ]) + + let safeAreaGuide = view.safeAreaLayoutGuide + NSLayoutConstraint.activate([ + contentView.topAnchor.constraint(equalToSystemSpacingBelow: safeAreaGuide.topAnchor, multiplier: 1.0), + safeAreaGuide.bottomAnchor.constraint(equalToSystemSpacingBelow: contentView.bottomAnchor, multiplier: 1.0) + ]) + label.frame = CGRectMake(10, 50, contentView.bounds.width-20, 100) label.backgroundColor=UIColor.white - label.textAlignment = NSTextAlignment.center + label.textAlignment = NSTextAlignment.left label.text = "Drag the top edge of the keyboard to adjust its height./nSeparate values are saved for portrait and landscape keyboard height." label.numberOfLines = 0 //label.isHidden=true contentView.addSubview(label) // calculate frame for keyboard image - let keyboardFrame = CGRectMake(0, self.view.frame.height-kbHeight, self.view.frame.width, kbHeight) - let kbFrameMessage = " viewDidLoad, keyboardFrame: \(keyboardFrame)" - os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, kbFrameMessage) + let keyboardFrame = CGRectMake(0, contentView.frame.height-kbHeight, contentView.frame.width, kbHeight) keyboardImage.frame = keyboardFrame keyboardImage.contentMode = UIView.ContentMode.scaleToFill - keyboardImage.backgroundColor=UIColor.white - keyboardImage.image = UIImage(named:"portrait-osk") + keyboardImage.backgroundColor=UIColor.cyan + + let kbImage = UIImage(named:"portrait-osk") + let kbImageMessage = " viewDidLoad, keyboardFrame: \(keyboardFrame) kbImage: \(kbImage)" + os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, kbImageMessage) + + keyboardImage.image = kbImage contentView.addSubview(keyboardImage) } diff --git a/ios/engine/KMEI/KeymanEngine/Classes/SettingsViewController.swift b/ios/engine/KMEI/KeymanEngine/Classes/SettingsViewController.swift index a2a85590871..d84e0fd04a8 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/SettingsViewController.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/SettingsViewController.swift @@ -446,7 +446,8 @@ open class SettingsViewController: UITableViewController { os_log("selected Adjust Keyboard Height", log:KeymanEngineLogger.settings, type: .default) let vc = KeyboardHeightViewController() if let nc = navigationController { - nc.pushViewController(vc, animated: true) + //nc.pushViewController(vc, animated: true) + nc.present(vc, animated: true) setIsDoneButtonEnabled(nc, true) } else { let message = ("No navigation controller for showing keyboard height view") From 9ff6d70ac16ba288a71670a7f34f6846c0b0a066 Mon Sep 17 00:00:00 2001 From: sgschantz Date: Mon, 4 Nov 2024 16:25:10 +0700 Subject: [PATCH 08/18] fix(ios): fix keyboard height layout for portrait --- .../KeyboardHeightViewController.swift | 83 ++++++++++++------- .../Classes/SettingsViewController.swift | 3 +- 2 files changed, 55 insertions(+), 31 deletions(-) diff --git a/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift b/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift index 733301bf306..b22a889f07c 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift @@ -24,10 +24,10 @@ class KeyboardHeightViewController: UIViewController { super.viewDidLoad() let deviceOrientation = UIDevice.current.orientation - let isPortrait = deviceOrientation.isPortrait + let portrait = deviceOrientation.isPortrait - let keyboardScale = KeyboardScaleMap.getDeviceDefaultKeyboardScale(forPortrait: isPortrait) - let scalemessage = "KeyboardHeightViewController viewDidLoad, isPortrait: \(isPortrait) keyboardScale: \(String(describing: keyboardScale))" + let keyboardScale = KeyboardScaleMap.getDeviceDefaultKeyboardScale(forPortrait: portrait) + let scalemessage = "KeyboardHeightViewController viewDidLoad, isPortrait: \(portrait) keyboardScale: \(String(describing: keyboardScale))" os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, scalemessage) let kbHeight = keyboardScale?.keyboardHeight ?? 216 // default for ancient devices @@ -42,46 +42,71 @@ class KeyboardHeightViewController: UIViewController { navigationController?.toolbar?.barTintColor = Colors.statusToolbar - contentView.frame = self.view.bounds - contentView.translatesAutoresizingMaskIntoConstraints = false - contentView.backgroundColor = .green - //contentView.alpha = 0.5 + self.configureContentView() + self.configureLabel(isPortrait: portrait) + self.configureKeyboardImage(keyboardHeight: kbHeight) + } + + func configureContentView() { + //contentView.backgroundColor = .green + contentView.backgroundColor = .white view.addSubview(contentView) - let margins = view.layoutMarginsGuide + contentView.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ - contentView.leadingAnchor.constraint(equalTo: margins.leadingAnchor), - contentView.trailingAnchor.constraint(equalTo: margins.trailingAnchor) + contentView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor), + contentView.leftAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leftAnchor), + contentView.rightAnchor.constraint(equalTo: view.safeAreaLayoutGuide.rightAnchor), + contentView.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor) ]) - - let safeAreaGuide = view.safeAreaLayoutGuide - NSLayoutConstraint.activate([ - contentView.topAnchor.constraint(equalToSystemSpacingBelow: safeAreaGuide.topAnchor, multiplier: 1.0), - safeAreaGuide.bottomAnchor.constraint(equalToSystemSpacingBelow: contentView.bottomAnchor, multiplier: 1.0) - ]) - - label.frame = CGRectMake(10, 50, contentView.bounds.width-20, 100) + } + + func configureLabel(isPortrait: Bool) { label.backgroundColor=UIColor.white label.textAlignment = NSTextAlignment.left - label.text = "Drag the top edge of the keyboard to adjust its height./nSeparate values are saved for portrait and landscape keyboard height." + let portraitText = "portrait" + let landscapeText = "landscape" + let otherOrientationText = (isPortrait) ? landscapeText : portraitText + label.text = "Instructions: \ndrag the top edge of the keyboard to adjust height.\nRotate device to set for \(otherOrientationText)." + label.numberOfLines = 0 - //label.isHidden=true contentView.addSubview(label) - - // calculate frame for keyboard image - let keyboardFrame = CGRectMake(0, contentView.frame.height-kbHeight, contentView.frame.width, kbHeight) - keyboardImage.frame = keyboardFrame + + label.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + label.topAnchor.constraint(equalTo: contentView.topAnchor, constant:50.0), + label.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant:25.0), + label.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant:-25.0), + label.heightAnchor.constraint(greaterThanOrEqualToConstant: 50.0) + ]) + } + + func configureKeyboardImage(keyboardHeight: CGFloat) { keyboardImage.contentMode = UIView.ContentMode.scaleToFill keyboardImage.backgroundColor=UIColor.cyan - let kbImage = UIImage(named:"portrait-osk") - let kbImageMessage = " viewDidLoad, keyboardFrame: \(keyboardFrame) kbImage: \(kbImage)" - os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, kbImageMessage) - keyboardImage.image = kbImage contentView.addSubview(keyboardImage) + + let kbImageMessage = " viewDidLoad, kbImage: \(String(describing: kbImage))" + os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, kbImageMessage) + + keyboardImage.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + keyboardImage.topAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -keyboardHeight), + keyboardImage.leftAnchor.constraint(equalTo: contentView.leftAnchor), + keyboardImage.rightAnchor.constraint(equalTo: contentView.rightAnchor), + keyboardImage.heightAnchor.constraint(equalToConstant: keyboardHeight) + ]) } - + + override func viewDidAppear(_ animated: Bool) { + super.viewWillAppear(animated) + let kbImageMessage = "viewDidAppear, kbImage: \(String(describing: self.keyboardImage.image)) kbFrame: \(self.keyboardImage.frame)" + os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, kbImageMessage) + + } + required public init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } diff --git a/ios/engine/KMEI/KeymanEngine/Classes/SettingsViewController.swift b/ios/engine/KMEI/KeymanEngine/Classes/SettingsViewController.swift index d84e0fd04a8..a2a85590871 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/SettingsViewController.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/SettingsViewController.swift @@ -446,8 +446,7 @@ open class SettingsViewController: UITableViewController { os_log("selected Adjust Keyboard Height", log:KeymanEngineLogger.settings, type: .default) let vc = KeyboardHeightViewController() if let nc = navigationController { - //nc.pushViewController(vc, animated: true) - nc.present(vc, animated: true) + nc.pushViewController(vc, animated: true) setIsDoneButtonEnabled(nc, true) } else { let message = ("No navigation controller for showing keyboard height view") From 90354147095fdd4467c63c0605b808e2169aed56 Mon Sep 17 00:00:00 2001 From: sgschantz Date: Thu, 14 Nov 2024 22:18:09 +0700 Subject: [PATCH 09/18] fix(ios): fully functional UI for keyboard height change need to handle persistance to UserDefaults --- .../KeyboardHeightViewController.swift | 381 ++++++++++++++++-- .../Classes/SettingsViewController.swift | 2 +- .../arrow.up.and.down.imageset/Contents.json | 21 + .../arrow.up.and.down.png | Bin 0 -> 1568 bytes 4 files changed, 360 insertions(+), 44 deletions(-) create mode 100644 ios/engine/KMEI/KeymanEngine/Images.xcassets/arrow.up.and.down.imageset/Contents.json create mode 100644 ios/engine/KMEI/KeymanEngine/Images.xcassets/arrow.up.and.down.imageset/arrow.up.and.down.png diff --git a/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift b/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift index b22a889f07c..32fdf81a43a 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift @@ -11,10 +11,20 @@ import UIKit import os.log class KeyboardHeightViewController: UIViewController { - var label: UILabel = UILabel() - var keyboardImage: UIImageView = UIImageView() - var contentView: UIView = UIView() - + let contentView: UIView = UIView() + let defaultButton = UIButton(type: .roundedRect) + let label: UILabel = UILabel() + let keyboardImage: UIImageView = UIImageView() + let keyboardResizer: UIImageView = UIImageView() + var keyboardConstraintsArray: [NSLayoutConstraint] = [] + var resizerConstraintsArray: [NSLayoutConstraint] = [] + var isPortrait = true + var keyboardHeight = 0.0 + var defaultPortraitHeight = 0.0 + var defaultLandscapeHeight = 0.0 + var minKeyboardHeight = 10.0 + var maxKeyboardHeight = 10.0 + public init() { super.init(nibName: nil, bundle: nil) _ = view @@ -23,32 +33,223 @@ class KeyboardHeightViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() - let deviceOrientation = UIDevice.current.orientation - let portrait = deviceOrientation.isPortrait - - let keyboardScale = KeyboardScaleMap.getDeviceDefaultKeyboardScale(forPortrait: portrait) - let scalemessage = "KeyboardHeightViewController viewDidLoad, isPortrait: \(portrait) keyboardScale: \(String(describing: keyboardScale))" - os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, scalemessage) - - let kbHeight = keyboardScale?.keyboardHeight ?? 216 // default for ancient devices - - let message = " viewDidLoad, boundsRect: \(self.view.bounds) keyboardHeight from scale: \(kbHeight)" - os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, message) + os_log("KeyboardHeightViewController viewDidLoad", log:KeymanEngineLogger.ui, type: .info) + self.determineOrientation(screenSize: UIScreen.main.bounds.size) + self.applyKeyboardHeight() + self.calculateKeyboardHeightLimits() + //title = NSLocalizedString("menu-settings-spacebar-title", bundle: engineBundle, comment: "") - title = "Adjust Keyboard Height" + title = "Adjust Height" navigationItem.setHidesBackButton(false, animated: true) navigationItem.leftBarButtonItem?.isEnabled = true - navigationController?.toolbar?.barTintColor = Colors.statusToolbar + navigationController?.toolbar?.barTintColor = UIColor.orange self.configureContentView() - self.configureLabel(isPortrait: portrait) - self.configureKeyboardImage(keyboardHeight: kbHeight) + self.configureDefaultHeightButton() + self.configureLabel() + self.configureKeyboardImage() + self.updateKeyboardImage() + self.configureKeyboardConstraints() + self.configureKeyboardResizer() + } + + override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + + } + + private func determineOrientation(screenSize: CGSize) { + self.isPortrait = UIScreen.main.bounds.height > UIScreen.main.bounds.width + let message = "determineOrientation, isPortrait: \(self.isPortrait)" + os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, message) + } + + private func applyKeyboardHeight() { + let portraitKeyboardScale = KeyboardScaleMap.getDeviceDefaultKeyboardScale(forPortrait: true) + let landscapeKeyboardScale = KeyboardScaleMap.getDeviceDefaultKeyboardScale(forPortrait: false) + + /* + self.portraitKeyboardHeight = KeyboardScaleMap.getDeviceDefaultKeyboardScale(forPortrait: isPortrait)?.keyboardHeight ?? 216 // default for ancient devices + */ + + self.defaultPortraitHeight = Double(portraitKeyboardScale!.keyboardHeight) + self.defaultLandscapeHeight = Double(landscapeKeyboardScale!.keyboardHeight) + + // TODO: first attempt read from UserDefaults + if (self.isPortrait) { + self.keyboardHeight = self.defaultPortraitHeight + } else { + self.keyboardHeight = self.defaultLandscapeHeight + } + } + + private func calculateKeyboardHeightLimits() { + var defaultHeight = 0.0 + + if (self.isPortrait) { + defaultHeight = self.defaultPortraitHeight + } else { + defaultHeight = self.defaultLandscapeHeight + } + + self.minKeyboardHeight = defaultHeight/1.85 + self.maxKeyboardHeight = defaultHeight*1.9 + let messageBegan = "minKeyboardHeight: \(minKeyboardHeight) maxKeyboardHeight: \(maxKeyboardHeight)" + os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, messageBegan) + } + + /** + * Given a vertical translation in points based on the user dragging the keyboard resizer view, + * return the amount that the user is allowed to grow or shrink the keyboard. + * If the attemptedTranslation amount does cause the keyboard to exceed its size limits, + * then the same value will be returned. + */ + private func applyKeyboardSizeLimits(attemptedTranslation: Double) -> Double { + guard attemptedTranslation != 0 else { + return 0 + } + + // Are we trying to reduce or enlarge the keyboard? + // An increase in keyboardResizer .y translation moves it down and reduces the keyboard height. + let reducingKeyboardHeight = attemptedTranslation > 0 + + // by default, unless we exceed keyboard height limitations, we will approve all of the translation + var approvedTranslation = attemptedTranslation + + // Calculate new proposed height by subtracting the translation. + let proposedKeyboardHeight = self.keyboardHeight - attemptedTranslation + + // calculations vary depending on reducing or enlarging the keyboard + if (reducingKeyboardHeight) { + // if we are reducing too much, then calculate how much translation is allowed + if (proposedKeyboardHeight < self.minKeyboardHeight) { + // if we are already at the minimum size, return 0 + if(self.keyboardHeight <= self.minKeyboardHeight) { + approvedTranslation = 0; + } else { + // how much space to translate the resizer downward, a positive number + let availableToReduce = self.keyboardHeight - self.minKeyboardHeight + approvedTranslation = availableToReduce + } + } + } else { // enlarging the keyboard height + if (proposedKeyboardHeight > self.maxKeyboardHeight) { + // if we are already at the maximum size, return 0 + if(self.keyboardHeight >= self.maxKeyboardHeight) { + approvedTranslation = 0; + } else { + // how much space to translate the resizer upward, a negative number + let availableToEnlarge = self.keyboardHeight - self.maxKeyboardHeight + approvedTranslation = availableToEnlarge + } + } + } + + let messageBegan = "approvedTranslation: \(approvedTranslation)" + os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, messageBegan) + return approvedTranslation + } + + @objc func handleDrag(_ dragRecognizer: UIPanGestureRecognizer) { + switch dragRecognizer.state { + case .began: + os_log("keyboardResizer handleDrag began", log:KeymanEngineLogger.ui, type: .info) + + case .changed: + self.provideResizeFeedback(drag: dragRecognizer) + + case .ended: + // reset transforms before actual keyboard height change + self.keyboardResizer.transform = .identity + self.keyboardImage.transform = .identity + + let verticalTranslation = dragRecognizer.translation(in: self.contentView).y + let approvedTranslation = self.applyKeyboardSizeLimits(attemptedTranslation: verticalTranslation) + if (approvedTranslation != 0) { + let newKeyboardHeight = keyboardHeight - approvedTranslation; + self.changeKeyboardHeight(newHeight: newKeyboardHeight) + } else { + os_log("handleDrag .ended with no resizing", log:KeymanEngineLogger.ui, type: .info) + } + default: break + } + } + + private func provideResizeFeedback(drag: UIPanGestureRecognizer) { + // how much did we drag vertically + let verticalTranslation = drag.translation(in: self.contentView).y + + let messageBegan = "verticalTranslation: \(verticalTranslation)" + os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, messageBegan) + + // enforce keyboard size limits on translation + let approvedTranslation = self.applyKeyboardSizeLimits(attemptedTranslation: verticalTranslation) + + if (approvedTranslation == 0) { + os_log("reached keyboard size limit", log:KeymanEngineLogger.ui, type: .info) + } else if (approvedTranslation != 0) { + let keyboardTranslation = CGAffineTransform(translationX: 0, y: approvedTranslation) + self.keyboardResizer.transform = keyboardTranslation + + let newKeyboardHeight = self.keyboardHeight - approvedTranslation; + let yScaleFactor = newKeyboardHeight/self.keyboardHeight + + let keyboardScale = CGAffineTransform(scaleX: 1, y: yScaleFactor) + + // concatenate both the translate and the scale for the keyboard image + let keyboardHeightTranslation = CGAffineTransform(translationX: 0, y: approvedTranslation/2) + let keyboardImageTransform = keyboardScale.concatenating(keyboardHeightTranslation) + self.keyboardImage.transform = keyboardImageTransform + } + } + + private func changeKeyboardHeight (newHeight: Double) { + let messageOne = "changeKeyboardHeight, newHeight :\(newHeight) isPortrait: \(isPortrait)" + os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, messageOne) + + keyboardHeight = newHeight + self.updateKeyboardConstraints() + //self.view.setNeedsLayout() + + // TODO: persist + let messageTwo = "changeKeyboardHeight, persist newHeight :\(newHeight) isPortrait: \(self.isPortrait)" + os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, messageTwo) + if (isPortrait) { + } else { + } + } + + private func configureKeyboardConstraints() { + // create constraints for each orientation and apply when device is rotated + self.keyboardConstraintsArray = [ + keyboardImage.leftAnchor.constraint(equalTo: contentView.leftAnchor), + keyboardImage.rightAnchor.constraint(equalTo: contentView.rightAnchor), + keyboardImage.topAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -keyboardHeight), + keyboardImage.heightAnchor.constraint(equalToConstant: keyboardHeight) + ] + NSLayoutConstraint.activate(self.keyboardConstraintsArray) + } + + // recalculate constraints for new portrait keyboard height + private func updateKeyboardConstraints() { + if (!self.keyboardConstraintsArray.isEmpty) { + NSLayoutConstraint.deactivate(self.keyboardConstraintsArray) + } + self.keyboardConstraintsArray = [ + keyboardImage.leftAnchor.constraint(equalTo: contentView.leftAnchor), + keyboardImage.rightAnchor.constraint(equalTo: contentView.rightAnchor), + keyboardImage.topAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -keyboardHeight), + keyboardImage.heightAnchor.constraint(equalToConstant: keyboardHeight) + ] + NSLayoutConstraint.activate(self.keyboardConstraintsArray) + + self.updateKeyboardResizerConstraints() } func configureContentView() { - //contentView.backgroundColor = .green + contentView.isUserInteractionEnabled = true contentView.backgroundColor = .white view.addSubview(contentView) @@ -61,50 +262,144 @@ class KeyboardHeightViewController: UIViewController { ]) } - func configureLabel(isPortrait: Bool) { + func configureDefaultHeightButton() { + defaultButton.titleLabel?.font = UIFont.boldSystemFont(ofSize: 16) + defaultButton.setTitle("Reset to Default Keyboard Height", for: .normal) + defaultButton.sizeToFit() + defaultButton.layer.cornerRadius = 8.0 + //defaultButton.backgroundColor=UIColor.systemBlue + //defaultButton.titleLabel?.textColor = UIColor.white + defaultButton.addTarget(self, action: #selector(self.restoreDefaultKeyboardHeight), for: .touchUpInside) + //defaultButton.sizeToFit() + contentView.addSubview(defaultButton) + + defaultButton.translatesAutoresizingMaskIntoConstraints = false + NSLayoutConstraint.activate([ + defaultButton.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 10.0), + defaultButton.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 10.0) + ]) + } + + @objc func restoreDefaultKeyboardHeight() { + os_log("restored to default", log:KeymanEngineLogger.ui, type: .info) + let animationOptions: UIView.AnimationOptions = [.curveEaseInOut] + if (self.isPortrait) { + UIView.animate(withDuration: 0.7, delay: 0.0, options:animationOptions, animations: { + self.changeKeyboardHeight(newHeight: self.defaultPortraitHeight) + self.view.layoutIfNeeded() + }, completion: nil) + } else { + UIView.animate(withDuration: 0.7, delay: 0.0, options:animationOptions, animations: { + self.changeKeyboardHeight(newHeight: self.defaultLandscapeHeight) + self.view.layoutIfNeeded() + }, completion: nil) + } + } + + func configureLabel() { label.backgroundColor=UIColor.white label.textAlignment = NSTextAlignment.left - let portraitText = "portrait" - let landscapeText = "landscape" - let otherOrientationText = (isPortrait) ? landscapeText : portraitText - label.text = "Instructions: \ndrag the top edge of the keyboard to adjust height.\nRotate device to set for \(otherOrientationText)." - + label.font = UIFont.systemFont(ofSize: 16.0) + self.setLabelTextForOrientation() label.numberOfLines = 0 contentView.addSubview(label) label.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ - label.topAnchor.constraint(equalTo: contentView.topAnchor, constant:50.0), - label.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant:25.0), + label.topAnchor.constraint(equalTo: self.defaultButton.bottomAnchor, constant: 5.0), + label.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 10.0), label.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant:-25.0), label.heightAnchor.constraint(greaterThanOrEqualToConstant: 50.0) ]) } - func configureKeyboardImage(keyboardHeight: CGFloat) { + func setLabelTextForOrientation() { + let portraitText = "portrait" + let landscapeText = "landscape" + let otherOrientationText = (self.isPortrait) ? landscapeText : portraitText + label.text = "Drag arrow control to adjust keyboard height.\nRotate device to adjust for \(otherOrientationText)." + } + + func configureKeyboardImage() { + keyboardImage.isUserInteractionEnabled = true keyboardImage.contentMode = UIView.ContentMode.scaleToFill keyboardImage.backgroundColor=UIColor.cyan - let kbImage = UIImage(named:"portrait-osk") - keyboardImage.image = kbImage contentView.addSubview(keyboardImage) - let kbImageMessage = " viewDidLoad, kbImage: \(String(describing: kbImage))" - os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, kbImageMessage) - keyboardImage.translatesAutoresizingMaskIntoConstraints = false - NSLayoutConstraint.activate([ - keyboardImage.topAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -keyboardHeight), - keyboardImage.leftAnchor.constraint(equalTo: contentView.leftAnchor), - keyboardImage.rightAnchor.constraint(equalTo: contentView.rightAnchor), - keyboardImage.heightAnchor.constraint(equalToConstant: keyboardHeight) - ]) } - override func viewDidAppear(_ animated: Bool) { - super.viewWillAppear(animated) - let kbImageMessage = "viewDidAppear, kbImage: \(String(describing: self.keyboardImage.image)) kbFrame: \(self.keyboardImage.frame)" + func configureKeyboardResizer() { + var arrowSymbolImage: UIImage? = nil + keyboardResizer.isUserInteractionEnabled = true + //let arrowSymbolImage = UIImage(systemName: "arrow.up.and.down.square.fill") + //let arrowConfiguration = UIImage.SymbolConfiguration(scale: .large) + if #available(iOSApplicationExtension 13.0, *) { + arrowSymbolImage = UIImage(systemName: "arrow.up.and.down.square.fill") + } else { + arrowSymbolImage = UIImage(named: "arrow.up.and.down") + } + keyboardResizer.image = arrowSymbolImage + keyboardResizer.backgroundColor = UIColor.systemGray + keyboardResizer.layer.cornerRadius = 5 + contentView.addSubview(keyboardResizer) + keyboardResizer.translatesAutoresizingMaskIntoConstraints = false + + self.updateKeyboardResizerConstraints() + + let drag = UIPanGestureRecognizer(target: self, action: #selector(handleDrag)) + drag.maximumNumberOfTouches = 1 + drag.minimumNumberOfTouches = 1 + keyboardResizer.addGestureRecognizer(drag) + } + + func updateKeyboardResizerConstraints() { + // first, clear existing constraints + if (!resizerConstraintsArray.isEmpty) { + NSLayoutConstraint.deactivate(resizerConstraintsArray) + } + + // add new restraints using the current value of the keyboard height + resizerConstraintsArray = [ + keyboardResizer.centerXAnchor.constraint(equalTo: contentView.centerXAnchor), + keyboardResizer.topAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -keyboardHeight-22), + keyboardResizer.heightAnchor.constraint(equalToConstant: 44), + keyboardResizer.widthAnchor.constraint(equalToConstant: 44) + ] + NSLayoutConstraint.activate(resizerConstraintsArray) + } + + func updateKeyboardImage() { + var kbImage: UIImage? = nil + if (self.isPortrait) { + kbImage = UIImage(named:"portrait-osk") + } else { + kbImage = UIImage(named:"landscape-osk") + } + keyboardImage.image = kbImage + + let kbImageMessage = " viewDidLoad, kbImage: \(String(describing: kbImage))" os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, kbImageMessage) + } + override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { + super.viewWillTransition(to: size, with: coordinator) + let rotateMessage = "viewWillTransition called" + os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, rotateMessage) + + /** + using the specified size, determine which orientation the device is moving to and adjust content as necessary + */ + self.determineOrientation(screenSize: size) + + coordinator.animate(alongsideTransition: nil) { _ in + self.applyKeyboardHeight() + self.calculateKeyboardHeightLimits() + self.setLabelTextForOrientation() + self.updateKeyboardImage() + self.updateKeyboardConstraints() + } + self.view.setNeedsLayout() } required public init?(coder aDecoder: NSCoder) { diff --git a/ios/engine/KMEI/KeymanEngine/Classes/SettingsViewController.swift b/ios/engine/KMEI/KeymanEngine/Classes/SettingsViewController.swift index a2a85590871..0d3ca6a2754 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/SettingsViewController.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/SettingsViewController.swift @@ -447,7 +447,7 @@ open class SettingsViewController: UITableViewController { let vc = KeyboardHeightViewController() if let nc = navigationController { nc.pushViewController(vc, animated: true) - setIsDoneButtonEnabled(nc, true) + setIsDoneButtonEnabled(nc, true) } else { let message = ("No navigation controller for showing keyboard height view") os_log("%{public}s", log:KeymanEngineLogger.settings, type: .error, message) diff --git a/ios/engine/KMEI/KeymanEngine/Images.xcassets/arrow.up.and.down.imageset/Contents.json b/ios/engine/KMEI/KeymanEngine/Images.xcassets/arrow.up.and.down.imageset/Contents.json new file mode 100644 index 00000000000..1dc6b4c7677 --- /dev/null +++ b/ios/engine/KMEI/KeymanEngine/Images.xcassets/arrow.up.and.down.imageset/Contents.json @@ -0,0 +1,21 @@ +{ + "images" : [ + { + "filename" : "arrow.up.and.down.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "idiom" : "universal", + "scale" : "2x" + }, + { + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/engine/KMEI/KeymanEngine/Images.xcassets/arrow.up.and.down.imageset/arrow.up.and.down.png b/ios/engine/KMEI/KeymanEngine/Images.xcassets/arrow.up.and.down.imageset/arrow.up.and.down.png new file mode 100644 index 0000000000000000000000000000000000000000..3b903f6facc8c76f6f7ca9ac93ada3e245e19541 GIT binary patch literal 1568 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU1|)m_?Z^dEEa{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC=rkv;hE;^%b*2hb1*P5 z3NbJPS&Tr)(4NV_0%kKX08Ih{<^_xh*#%5+S&aqE2sTJzhPB5g1_maB%#etZ2wxwo zh+i#(Mch>H3D2 zmX`VkM*2oZx=P7{9O-#x!EwNQn0$BtH z5O=0lWFlKQE)+Ga;lvn)Gj0;B-J2STlp7drUC;L z6l@^n7-CTMHu|72MG9j`1cF6@F=)qSqYqCFc3hU6|CNDBP1w`LF(iWX?ab5Op@Aap zo0W8&HQxN?6XKHMa1>xM45GrLPOn`zbql`038 z#;_%a4PF>tSfR3J-~4yHryqYT`erM=yLtD6-PvzTzs3E2Zr5M?Zfn-9iq#8ua=uz9 zmUbxQ2EW=*ru7f!&fRdz^a;PS@tM+{|DRUP_+jzIt3kYC(hko~qm79rZ`$QJ@9?l{ zm{)f%IQFvUjjnmB-}$OPY@9h7!HtuyDm0c(WZ?^Z&SldT;-C8Ji^NRXg%85BWLo&w zU6Za^-Tiq-*4l))$vc=I99?;j_eH>j>z}x;91eZ-E2!m;O1YM*{FGD50gpq^+I1J8t`0Yv{Nx5Wk+EX63l&+Lq{!?K8gRJ~I1}T{QDh zK;x||rDr1xv)(t)fAH4)plifq;UBvTu5B@HUC1;)_-fZ}&)+jX+|)J#nSA zUitYWAZ^ksU&+4_D(6evF>{T>+ATSfA_=WhH@+E8{~Ih`-l4nTv+xfdZDHopsJ%BM z9?2bMP&xkN-{fBbjap0Qs+TN^?Achp^Hs{G3&C?%W}NX8ZLAF6ys2rbsLz^)ZrnDT0t&$8V2S~;Q2tL2J?AC(!E-`N;f^NGK>{nFgO z-j}O;&g(6Dx!vronEQjNuaov$ohjUDT%qr`@~GbYo2^_i?oatXJZ|gkKjglFY3r=- zj{4m9rU}G+>Rn^^MPzl}V(oif|C#SEU=?dJug#p~kYBZUC+q22rPbHbVE1CX+}fDD!YdLNV{JG-E3ALJ zprIqPIqKlP8KTP9Urj&o?u2Xd)XU=QrwgrE-!wldv^Qe; Date: Fri, 15 Nov 2024 14:36:55 +0700 Subject: [PATCH 10/18] fix(ios): save keyboard height in UserDefaults --- .../KMEI/KeymanEngine/Classes/Constants.swift | 2 + .../Extension/UserDefaults+Types.swift | 22 ++++++- .../Keyboard/KeymanWebViewController.swift | 29 ++++++--- .../KeyboardHeightViewController.swift | 55 ++++++++++++------ .../Contents.json | 2 + .../blank_osk 1.png} | Bin .../osk.landscape.imageset/blank_osk 2.png | Bin 0 -> 9284 bytes .../osk.landscape.imageset/blank_osk.png | Bin 0 -> 9284 bytes .../Contents.json | 2 + .../blank_osk 1.png} | Bin .../osk.portrait.imageset/blank_osk 2.png | Bin 0 -> 8813 bytes .../osk.portrait.imageset/blank_osk.png | Bin 0 -> 8813 bytes 12 files changed, 86 insertions(+), 26 deletions(-) rename ios/engine/KMEI/KeymanEngine/Images.xcassets/{landscape-osk.imageset => osk.landscape.imageset}/Contents.json (80%) rename ios/engine/KMEI/KeymanEngine/Images.xcassets/{landscape-osk.imageset/blank_osk.png => osk.landscape.imageset/blank_osk 1.png} (100%) create mode 100644 ios/engine/KMEI/KeymanEngine/Images.xcassets/osk.landscape.imageset/blank_osk 2.png create mode 100644 ios/engine/KMEI/KeymanEngine/Images.xcassets/osk.landscape.imageset/blank_osk.png rename ios/engine/KMEI/KeymanEngine/Images.xcassets/{portrait-osk.imageset => osk.portrait.imageset}/Contents.json (80%) rename ios/engine/KMEI/KeymanEngine/Images.xcassets/{portrait-osk.imageset/blank_osk.png => osk.portrait.imageset/blank_osk 1.png} (100%) create mode 100644 ios/engine/KMEI/KeymanEngine/Images.xcassets/osk.portrait.imageset/blank_osk 2.png create mode 100644 ios/engine/KMEI/KeymanEngine/Images.xcassets/osk.portrait.imageset/blank_osk.png diff --git a/ios/engine/KMEI/KeymanEngine/Classes/Constants.swift b/ios/engine/KMEI/KeymanEngine/Classes/Constants.swift index 3b4ed5a1d62..efdce417c9f 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/Constants.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/Constants.swift @@ -41,6 +41,8 @@ public enum Key { static let synchronizeSWLexicalModel = "KeymanSynchronizeSWLexicalModel" static let migrationLevel = "KeymanEngineMigrationLevel" + static let portraitKeyboardHeight = "PortraitKeyboardHeight" + static let landscapeKeyboardHeight = "LandscapeKeyboardHeight" // JSON keys for language REST calls static let options = "options" diff --git a/ios/engine/KMEI/KeymanEngine/Classes/Extension/UserDefaults+Types.swift b/ios/engine/KMEI/KeymanEngine/Classes/Extension/UserDefaults+Types.swift index 5cfed55ea29..8991660dae3 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/Extension/UserDefaults+Types.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/Extension/UserDefaults+Types.swift @@ -331,7 +331,27 @@ public extension UserDefaults { set(prefs, forKey: Key.userCorrectSettings) } } - + + var portraitKeyboardHeight: Double { + get { + return double(forKey: Key.portraitKeyboardHeight) + } + + set(height) { + set(height, forKey: Key.portraitKeyboardHeight) + } + } + + var landscapeKeyboardHeight: Double { + get { + return double(forKey: Key.landscapeKeyboardHeight) + } + + set(height) { + set(height, forKey: Key.landscapeKeyboardHeight) + } + } + func predictSettingForLanguage(languageID: String) -> Bool { if let dict = predictionEnablements { return dict[languageID] ?? true diff --git a/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/KeymanWebViewController.swift b/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/KeymanWebViewController.swift index 42ec5495ace..57697c2cb48 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/KeymanWebViewController.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/KeymanWebViewController.swift @@ -705,18 +705,33 @@ extension KeymanWebViewController { } func constraintTargetHeight(isPortrait: Bool) -> CGFloat { - var kbHeight = KeyboardScaleMap.getDeviceDefaultKeyboardScale(forPortrait: isPortrait)?.keyboardHeight ?? 216 // default for ancient devices - os_log("constraintTargetHeight, keyboard height before: %f", log:KeymanEngineLogger.ui, type: .default, kbHeight) + var keyboardHeight = 0.0 + + var defaultHeight = KeyboardScaleMap.getDeviceDefaultKeyboardScale(forPortrait: isPortrait)?.keyboardHeight ?? 216 // default for ancient devices if (isPortrait) { - kbHeight+=100; + if let portraitHeight = Storage.active.userDefaults.portraitKeyboardHeight as Double? { + keyboardHeight = portraitHeight + let message = "constraintTargetHeight, from UserDefaults loaded portrait value \(portraitHeight)" + os_log("%{public}s", log:KeymanEngineLogger.migration, type: .info, message) + } else { + let message = "constraintTargetHeight, portraitHeight not found in UserDefaults, using default value \(defaultHeight)" + os_log("%{public}s", log:KeymanEngineLogger.migration, type: .info, message) + keyboardHeight = defaultHeight + } } else { - kbHeight-=50; + if let landscapeHeight = Storage.active.userDefaults.landscapeKeyboardHeight as Double? { + keyboardHeight = landscapeHeight + let message = "constraintTargetHeight, from UserDefaults loaded landscape value \(landscapeHeight)" + os_log("%{public}s", log:KeymanEngineLogger.migration, type: .info, message) + } else { + let message = "constraintTargetHeight, landscapeHeight not found in UserDefaults, using default value \(defaultHeight)" + os_log("%{public}s", log:KeymanEngineLogger.migration, type: .info, message) + keyboardHeight = defaultHeight + } } - os_log("constraintTargetHeight, keyboard height after: %f", log:KeymanEngineLogger.ui, type: .default, kbHeight) - - return kbHeight; + return keyboardHeight; } var keyboardWidth: CGFloat { diff --git a/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift b/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift index 32fdf81a43a..3202c2ec777 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift @@ -36,8 +36,8 @@ class KeyboardHeightViewController: UIViewController { os_log("KeyboardHeightViewController viewDidLoad", log:KeymanEngineLogger.ui, type: .info) self.determineOrientation(screenSize: UIScreen.main.bounds.size) + self.loadDefaultKeyboardHeights() self.applyKeyboardHeight() - self.calculateKeyboardHeightLimits() //title = NSLocalizedString("menu-settings-spacebar-title", bundle: engineBundle, comment: "") title = "Adjust Height" @@ -58,6 +58,7 @@ class KeyboardHeightViewController: UIViewController { override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) + self.calculateKeyboardHeightLimits() } private func determineOrientation(screenSize: CGSize) { @@ -66,22 +67,36 @@ class KeyboardHeightViewController: UIViewController { os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, message) } - private func applyKeyboardHeight() { + private func loadDefaultKeyboardHeights() { + // if no KeyboardScaleMap found for device, then default to 216.0 let portraitKeyboardScale = KeyboardScaleMap.getDeviceDefaultKeyboardScale(forPortrait: true) - let landscapeKeyboardScale = KeyboardScaleMap.getDeviceDefaultKeyboardScale(forPortrait: false) + self.defaultPortraitHeight = Double(portraitKeyboardScale?.keyboardHeight ?? 216.0) - /* - self.portraitKeyboardHeight = KeyboardScaleMap.getDeviceDefaultKeyboardScale(forPortrait: isPortrait)?.keyboardHeight ?? 216 // default for ancient devices - */ - - self.defaultPortraitHeight = Double(portraitKeyboardScale!.keyboardHeight) - self.defaultLandscapeHeight = Double(landscapeKeyboardScale!.keyboardHeight) - - // TODO: first attempt read from UserDefaults + let landscapeKeyboardScale = KeyboardScaleMap.getDeviceDefaultKeyboardScale(forPortrait: false) + self.defaultLandscapeHeight = Double(landscapeKeyboardScale?.keyboardHeight ?? 216.0) + } + + private func applyKeyboardHeight() { if (self.isPortrait) { - self.keyboardHeight = self.defaultPortraitHeight + if let portraitHeight = Storage.active.userDefaults.portraitKeyboardHeight as Double? { + self.keyboardHeight = portraitHeight + let message = "applyKeyboardHeight, from UserDefaults loaded portrait value \(portraitHeight)" + os_log("%{public}s", log:KeymanEngineLogger.migration, type: .info, message) + } else { + self.keyboardHeight = self.defaultPortraitHeight + let message = "applyKeyboardHeight, portraitHeight not found in UserDefaults, using default value \(self.keyboardHeight)" + os_log("%{public}s", log:KeymanEngineLogger.migration, type: .info, message) + } } else { - self.keyboardHeight = self.defaultLandscapeHeight + if let landscapeHeight = Storage.active.userDefaults.landscapeKeyboardHeight as Double? { + self.keyboardHeight = landscapeHeight + let message = "applyKeyboardHeight, from UserDefaults loaded landscape value \(landscapeHeight)" + os_log("%{public}s", log:KeymanEngineLogger.migration, type: .info, message) + } else { + self.keyboardHeight = self.defaultLandscapeHeight + let message = "applyKeyboardHeight, landscapeHeight not found in UserDefaults, using default value \(self.keyboardHeight)" + os_log("%{public}s", log:KeymanEngineLogger.migration, type: .info, message) + } } } @@ -94,8 +109,12 @@ class KeyboardHeightViewController: UIViewController { defaultHeight = self.defaultLandscapeHeight } - self.minKeyboardHeight = defaultHeight/1.85 - self.maxKeyboardHeight = defaultHeight*1.9 + // absolute minimum height is half of the default height + self.minKeyboardHeight = defaultHeight/2 + + // absolute maximum height is the lesser of double the default height and contentview height - 50 + self.maxKeyboardHeight = min(defaultHeight*2, contentView.frame.height - 50.0) + let messageBegan = "minKeyboardHeight: \(minKeyboardHeight) maxKeyboardHeight: \(maxKeyboardHeight)" os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, messageBegan) } @@ -263,7 +282,7 @@ class KeyboardHeightViewController: UIViewController { } func configureDefaultHeightButton() { - defaultButton.titleLabel?.font = UIFont.boldSystemFont(ofSize: 16) + defaultButton.titleLabel?.font = .systemFont(ofSize: 20, weight: .bold) defaultButton.setTitle("Reset to Default Keyboard Height", for: .normal) defaultButton.sizeToFit() defaultButton.layer.cornerRadius = 8.0 @@ -372,9 +391,9 @@ class KeyboardHeightViewController: UIViewController { func updateKeyboardImage() { var kbImage: UIImage? = nil if (self.isPortrait) { - kbImage = UIImage(named:"portrait-osk") + kbImage = UIImage(named:"osk.portrait") } else { - kbImage = UIImage(named:"landscape-osk") + kbImage = UIImage(named:"osk.landscape") } keyboardImage.image = kbImage diff --git a/ios/engine/KMEI/KeymanEngine/Images.xcassets/landscape-osk.imageset/Contents.json b/ios/engine/KMEI/KeymanEngine/Images.xcassets/osk.landscape.imageset/Contents.json similarity index 80% rename from ios/engine/KMEI/KeymanEngine/Images.xcassets/landscape-osk.imageset/Contents.json rename to ios/engine/KMEI/KeymanEngine/Images.xcassets/osk.landscape.imageset/Contents.json index 3fe56890608..e4be112f379 100644 --- a/ios/engine/KMEI/KeymanEngine/Images.xcassets/landscape-osk.imageset/Contents.json +++ b/ios/engine/KMEI/KeymanEngine/Images.xcassets/osk.landscape.imageset/Contents.json @@ -6,10 +6,12 @@ "scale" : "1x" }, { + "filename" : "blank_osk 1.png", "idiom" : "universal", "scale" : "2x" }, { + "filename" : "blank_osk 2.png", "idiom" : "universal", "scale" : "3x" } diff --git a/ios/engine/KMEI/KeymanEngine/Images.xcassets/landscape-osk.imageset/blank_osk.png b/ios/engine/KMEI/KeymanEngine/Images.xcassets/osk.landscape.imageset/blank_osk 1.png similarity index 100% rename from ios/engine/KMEI/KeymanEngine/Images.xcassets/landscape-osk.imageset/blank_osk.png rename to ios/engine/KMEI/KeymanEngine/Images.xcassets/osk.landscape.imageset/blank_osk 1.png diff --git a/ios/engine/KMEI/KeymanEngine/Images.xcassets/osk.landscape.imageset/blank_osk 2.png b/ios/engine/KMEI/KeymanEngine/Images.xcassets/osk.landscape.imageset/blank_osk 2.png new file mode 100644 index 0000000000000000000000000000000000000000..a457358155a4eb49f21f2648aba20ba9bbdc62c7 GIT binary patch literal 9284 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 Bx8eW* literal 0 HcmV?d00001 diff --git a/ios/engine/KMEI/KeymanEngine/Images.xcassets/osk.portrait.imageset/blank_osk.png b/ios/engine/KMEI/KeymanEngine/Images.xcassets/osk.portrait.imageset/blank_osk.png new file mode 100644 index 0000000000000000000000000000000000000000..86d40f9e4150af15ad4fc6196d8dfcbf0d8df81e GIT binary patch literal 8813 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 Bx8eW* literal 0 HcmV?d00001 From a8949ef0a4c267239c2250cdb7af25ed3830d0b4 Mon Sep 17 00:00:00 2001 From: sgschantz Date: Fri, 15 Nov 2024 15:36:14 +0700 Subject: [PATCH 11/18] fix(ios): check for existence of UserDefault setting before read --- .../Classes/Keyboard/KeymanWebViewController.swift | 8 ++++---- .../Classes/KeyboardHeightViewController.swift | 12 ++++++------ 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/KeymanWebViewController.swift b/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/KeymanWebViewController.swift index 57697c2cb48..d00214df4a1 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/KeymanWebViewController.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/KeymanWebViewController.swift @@ -710,8 +710,8 @@ extension KeymanWebViewController { var defaultHeight = KeyboardScaleMap.getDeviceDefaultKeyboardScale(forPortrait: isPortrait)?.keyboardHeight ?? 216 // default for ancient devices if (isPortrait) { - if let portraitHeight = Storage.active.userDefaults.portraitKeyboardHeight as Double? { - keyboardHeight = portraitHeight + if (Storage.active.userDefaults.object(forKey: Key.portraitKeyboardHeight) != nil) { + let portraitHeight = Storage.active.userDefaults.portraitKeyboardHeight let message = "constraintTargetHeight, from UserDefaults loaded portrait value \(portraitHeight)" os_log("%{public}s", log:KeymanEngineLogger.migration, type: .info, message) } else { @@ -720,8 +720,8 @@ extension KeymanWebViewController { keyboardHeight = defaultHeight } } else { - if let landscapeHeight = Storage.active.userDefaults.landscapeKeyboardHeight as Double? { - keyboardHeight = landscapeHeight + if (Storage.active.userDefaults.object(forKey: Key.portraitKeyboardHeight) != nil) { + let landscapeHeight = Storage.active.userDefaults.landscapeKeyboardHeight let message = "constraintTargetHeight, from UserDefaults loaded landscape value \(landscapeHeight)" os_log("%{public}s", log:KeymanEngineLogger.migration, type: .info, message) } else { diff --git a/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift b/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift index 3202c2ec777..21ae1bc72ad 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift @@ -78,9 +78,9 @@ class KeyboardHeightViewController: UIViewController { private func applyKeyboardHeight() { if (self.isPortrait) { - if let portraitHeight = Storage.active.userDefaults.portraitKeyboardHeight as Double? { - self.keyboardHeight = portraitHeight - let message = "applyKeyboardHeight, from UserDefaults loaded portrait value \(portraitHeight)" + if (Storage.active.userDefaults.object(forKey: Key.portraitKeyboardHeight) != nil) { + self.keyboardHeight = Storage.active.userDefaults.portraitKeyboardHeight + let message = "applyKeyboardHeight, from UserDefaults loaded portrait value \(self.keyboardHeight)" os_log("%{public}s", log:KeymanEngineLogger.migration, type: .info, message) } else { self.keyboardHeight = self.defaultPortraitHeight @@ -88,9 +88,9 @@ class KeyboardHeightViewController: UIViewController { os_log("%{public}s", log:KeymanEngineLogger.migration, type: .info, message) } } else { - if let landscapeHeight = Storage.active.userDefaults.landscapeKeyboardHeight as Double? { - self.keyboardHeight = landscapeHeight - let message = "applyKeyboardHeight, from UserDefaults loaded landscape value \(landscapeHeight)" + if (Storage.active.userDefaults.object(forKey: Key.portraitKeyboardHeight) != nil) { + self.keyboardHeight = Storage.active.userDefaults.landscapeKeyboardHeight + let message = "applyKeyboardHeight, from UserDefaults loaded landscape value \(self.keyboardHeight)" os_log("%{public}s", log:KeymanEngineLogger.migration, type: .info, message) } else { self.keyboardHeight = self.defaultLandscapeHeight From 8caf106312486a85a7d3c3bc095f60109d2d583d Mon Sep 17 00:00:00 2001 From: sgschantz Date: Fri, 15 Nov 2024 16:57:39 +0700 Subject: [PATCH 12/18] fix(ios): write new height values to UserDefaults --- .../Keyboard/KeymanWebViewController.swift | 8 ++++---- .../Classes/KeyboardHeightViewController.swift | 15 ++++++++------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/KeymanWebViewController.swift b/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/KeymanWebViewController.swift index d00214df4a1..73370acb280 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/KeymanWebViewController.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/KeymanWebViewController.swift @@ -713,20 +713,20 @@ extension KeymanWebViewController { if (Storage.active.userDefaults.object(forKey: Key.portraitKeyboardHeight) != nil) { let portraitHeight = Storage.active.userDefaults.portraitKeyboardHeight let message = "constraintTargetHeight, from UserDefaults loaded portrait value \(portraitHeight)" - os_log("%{public}s", log:KeymanEngineLogger.migration, type: .info, message) + os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, message) } else { let message = "constraintTargetHeight, portraitHeight not found in UserDefaults, using default value \(defaultHeight)" - os_log("%{public}s", log:KeymanEngineLogger.migration, type: .info, message) + os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, message) keyboardHeight = defaultHeight } } else { if (Storage.active.userDefaults.object(forKey: Key.portraitKeyboardHeight) != nil) { let landscapeHeight = Storage.active.userDefaults.landscapeKeyboardHeight let message = "constraintTargetHeight, from UserDefaults loaded landscape value \(landscapeHeight)" - os_log("%{public}s", log:KeymanEngineLogger.migration, type: .info, message) + os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, message) } else { let message = "constraintTargetHeight, landscapeHeight not found in UserDefaults, using default value \(defaultHeight)" - os_log("%{public}s", log:KeymanEngineLogger.migration, type: .info, message) + os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, message) keyboardHeight = defaultHeight } } diff --git a/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift b/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift index 21ae1bc72ad..814fa4f51c4 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift @@ -81,21 +81,21 @@ class KeyboardHeightViewController: UIViewController { if (Storage.active.userDefaults.object(forKey: Key.portraitKeyboardHeight) != nil) { self.keyboardHeight = Storage.active.userDefaults.portraitKeyboardHeight let message = "applyKeyboardHeight, from UserDefaults loaded portrait value \(self.keyboardHeight)" - os_log("%{public}s", log:KeymanEngineLogger.migration, type: .info, message) + os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, message) } else { self.keyboardHeight = self.defaultPortraitHeight let message = "applyKeyboardHeight, portraitHeight not found in UserDefaults, using default value \(self.keyboardHeight)" - os_log("%{public}s", log:KeymanEngineLogger.migration, type: .info, message) + os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, message) } } else { if (Storage.active.userDefaults.object(forKey: Key.portraitKeyboardHeight) != nil) { self.keyboardHeight = Storage.active.userDefaults.landscapeKeyboardHeight let message = "applyKeyboardHeight, from UserDefaults loaded landscape value \(self.keyboardHeight)" - os_log("%{public}s", log:KeymanEngineLogger.migration, type: .info, message) + os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, message) } else { self.keyboardHeight = self.defaultLandscapeHeight let message = "applyKeyboardHeight, landscapeHeight not found in UserDefaults, using default value \(self.keyboardHeight)" - os_log("%{public}s", log:KeymanEngineLogger.migration, type: .info, message) + os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, message) } } } @@ -232,11 +232,12 @@ class KeyboardHeightViewController: UIViewController { self.updateKeyboardConstraints() //self.view.setNeedsLayout() - // TODO: persist - let messageTwo = "changeKeyboardHeight, persist newHeight :\(newHeight) isPortrait: \(self.isPortrait)" - os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, messageTwo) if (isPortrait) { + Storage.active.userDefaults.portraitKeyboardHeight = newHeight } else { + Storage.active.userDefaults.landscapeKeyboardHeight = newHeight + let messageTwo = "changeKeyboardHeight, persist newHeight :\(newHeight) isPortrait: \(self.isPortrait)" + os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, messageTwo) } } From fe6c818b7ca2bae3859ed279fdd68c05eb20a452 Mon Sep 17 00:00:00 2001 From: sgschantz Date: Fri, 15 Nov 2024 17:34:39 +0700 Subject: [PATCH 13/18] fix(ios): return persisted height from constraintTargetHeight --- .../Classes/Keyboard/KeymanWebViewController.swift | 8 ++++---- .../Classes/KeyboardHeightViewController.swift | 6 ++++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/KeymanWebViewController.swift b/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/KeymanWebViewController.swift index 73370acb280..9f46a4654d3 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/KeymanWebViewController.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/Keyboard/KeymanWebViewController.swift @@ -711,8 +711,8 @@ extension KeymanWebViewController { if (isPortrait) { if (Storage.active.userDefaults.object(forKey: Key.portraitKeyboardHeight) != nil) { - let portraitHeight = Storage.active.userDefaults.portraitKeyboardHeight - let message = "constraintTargetHeight, from UserDefaults loaded portrait value \(portraitHeight)" + keyboardHeight = Storage.active.userDefaults.portraitKeyboardHeight + let message = "constraintTargetHeight, from UserDefaults loaded portrait value \(keyboardHeight)" os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, message) } else { let message = "constraintTargetHeight, portraitHeight not found in UserDefaults, using default value \(defaultHeight)" @@ -721,8 +721,8 @@ extension KeymanWebViewController { } } else { if (Storage.active.userDefaults.object(forKey: Key.portraitKeyboardHeight) != nil) { - let landscapeHeight = Storage.active.userDefaults.landscapeKeyboardHeight - let message = "constraintTargetHeight, from UserDefaults loaded landscape value \(landscapeHeight)" + keyboardHeight = Storage.active.userDefaults.landscapeKeyboardHeight + let message = "constraintTargetHeight, from UserDefaults loaded landscape value \(keyboardHeight)" os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, message) } else { let message = "constraintTargetHeight, landscapeHeight not found in UserDefaults, using default value \(defaultHeight)" diff --git a/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift b/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift index 814fa4f51c4..4dc9d917880 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift @@ -234,10 +234,12 @@ class KeyboardHeightViewController: UIViewController { if (isPortrait) { Storage.active.userDefaults.portraitKeyboardHeight = newHeight + let persistMessage = "changeKeyboardHeight, persist portraitKeyboardHeight :\(newHeight)" + os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, persistMessage) } else { Storage.active.userDefaults.landscapeKeyboardHeight = newHeight - let messageTwo = "changeKeyboardHeight, persist newHeight :\(newHeight) isPortrait: \(self.isPortrait)" - os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, messageTwo) + let persistMessage = "changeKeyboardHeight, persist landscapeKeyboardHeight :\(newHeight)" + os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, persistMessage) } } From e989c57270603c4942465e465512ef703955d653 Mon Sep 17 00:00:00 2001 From: sgschantz Date: Thu, 21 Nov 2024 17:28:28 +0700 Subject: [PATCH 14/18] fix(ios): try alternate image loading method --- .../KeyboardHeightViewController.swift | 33 ++++++++++-------- .../Resources/landscape-dark-keyboard.png | Bin 0 -> 9284 bytes 2 files changed, 18 insertions(+), 15 deletions(-) create mode 100644 ios/engine/KMEI/KeymanEngine/resources/Keyman.bundle/Contents/Resources/landscape-dark-keyboard.png diff --git a/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift b/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift index 4dc9d917880..c28ceab67bb 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift @@ -101,19 +101,19 @@ class KeyboardHeightViewController: UIViewController { } private func calculateKeyboardHeightLimits() { - var defaultHeight = 0.0 +// var defaultHeight = 0.0 +// +// if (self.isPortrait) { +// defaultHeight = self.defaultPortraitHeight +// } else { +// defaultHeight = self.defaultLandscapeHeight +// } - if (self.isPortrait) { - defaultHeight = self.defaultPortraitHeight - } else { - defaultHeight = self.defaultLandscapeHeight - } - - // absolute minimum height is half of the default height - self.minKeyboardHeight = defaultHeight/2 + // minimum height + self.minKeyboardHeight = 70.0 - // absolute maximum height is the lesser of double the default height and contentview height - 50 - self.maxKeyboardHeight = min(defaultHeight*2, contentView.frame.height - 50.0) + // keyboard height must be 70 pts smaller than the contentView height + self.maxKeyboardHeight = contentView.frame.height - 70.0 let messageBegan = "minKeyboardHeight: \(minKeyboardHeight) maxKeyboardHeight: \(maxKeyboardHeight)" os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, messageBegan) @@ -384,9 +384,9 @@ class KeyboardHeightViewController: UIViewController { // add new restraints using the current value of the keyboard height resizerConstraintsArray = [ keyboardResizer.centerXAnchor.constraint(equalTo: contentView.centerXAnchor), - keyboardResizer.topAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -keyboardHeight-22), - keyboardResizer.heightAnchor.constraint(equalToConstant: 44), - keyboardResizer.widthAnchor.constraint(equalToConstant: 44) + keyboardResizer.topAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -keyboardHeight-30), + keyboardResizer.heightAnchor.constraint(equalToConstant: 60), + keyboardResizer.widthAnchor.constraint(equalToConstant: 60) ] NSLayoutConstraint.activate(resizerConstraintsArray) } @@ -396,7 +396,10 @@ class KeyboardHeightViewController: UIViewController { if (self.isPortrait) { kbImage = UIImage(named:"osk.portrait") } else { - kbImage = UIImage(named:"osk.landscape") + kbImage = UIImage(named: "landscape-dark-keyboard.png", + in: Bundle.main, + compatibleWith: nil) + //kbImage = UIImage(named:"osk.landscape") } keyboardImage.image = kbImage diff --git a/ios/engine/KMEI/KeymanEngine/resources/Keyman.bundle/Contents/Resources/landscape-dark-keyboard.png b/ios/engine/KMEI/KeymanEngine/resources/Keyman.bundle/Contents/Resources/landscape-dark-keyboard.png new file mode 100644 index 0000000000000000000000000000000000000000..a457358155a4eb49f21f2648aba20ba9bbdc62c7 GIT binary patch literal 9284 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 Date: Fri, 22 Nov 2024 10:34:18 +0700 Subject: [PATCH 15/18] fix(ios): use engine bundle to find image --- .../KeymanEngine/Classes/KeyboardHeightViewController.swift | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift b/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift index c28ceab67bb..88a2cb8ad73 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift @@ -396,10 +396,15 @@ class KeyboardHeightViewController: UIViewController { if (self.isPortrait) { kbImage = UIImage(named:"osk.portrait") } else { + kbImage = UIImage(named: "landscape-dark-keyboard.png", + in: Resources.bundle, + compatibleWith: nil) + /* kbImage = UIImage(named: "landscape-dark-keyboard.png", in: Bundle.main, compatibleWith: nil) //kbImage = UIImage(named:"osk.landscape") + */ } keyboardImage.image = kbImage From 607c5cc4b501cf6c27bd7767c5e0b661710c14e8 Mon Sep 17 00:00:00 2001 From: sgschantz Date: Tue, 26 Nov 2024 10:08:55 +0700 Subject: [PATCH 16/18] fix(ios): added new blank keyboard assets to keyman engine --- .../KeyboardHeightViewController.swift | 23 +++---- .../keyboard.compact.imageset/Contents.json | 56 ++++++++++++++++++ .../keyboard.compact.dark@1x.png | Bin 0 -> 11040 bytes .../keyboard.compact.dark@2x.png | Bin 0 -> 28825 bytes .../keyboard.compact.dark@3x.png | Bin 0 -> 22645 bytes .../keyboard.compact.light@1x.png | Bin 0 -> 10027 bytes .../keyboard.compact.light@2x.png | Bin 0 -> 26382 bytes .../keyboard.compact.light@3x.png | Bin 0 -> 20449 bytes .../keyboard.regular.imageset/Contents.json | 56 ++++++++++++++++++ .../keyboard.regular.dark@1x.png | Bin 0 -> 12414 bytes .../keyboard.regular.dark@2x.png | Bin 0 -> 30086 bytes .../keyboard.regular.dark@3x.png | Bin 0 -> 38960 bytes .../keyboard.regular.light@1x.png | Bin 0 -> 11721 bytes .../keyboard.regular.light@2x.png | Bin 0 -> 28747 bytes .../keyboard.regular.light@3x.png | Bin 0 -> 55679 bytes .../osk.landscape.imageset/Contents.json | 23 ------- .../osk.landscape.imageset/blank_osk 1.png | Bin 9284 -> 0 bytes .../osk.landscape.imageset/blank_osk 2.png | Bin 9284 -> 0 bytes .../osk.landscape.imageset/blank_osk.png | Bin 9284 -> 0 bytes .../osk.portrait.imageset/Contents.json | 23 ------- .../osk.portrait.imageset/blank_osk 1.png | Bin 8813 -> 0 bytes .../osk.portrait.imageset/blank_osk 2.png | Bin 8813 -> 0 bytes .../osk.portrait.imageset/blank_osk.png | Bin 8813 -> 0 bytes 23 files changed, 124 insertions(+), 57 deletions(-) create mode 100644 ios/engine/KMEI/KeymanEngine/Images.xcassets/keyboard.compact.imageset/Contents.json create mode 100644 ios/engine/KMEI/KeymanEngine/Images.xcassets/keyboard.compact.imageset/keyboard.compact.dark@1x.png create mode 100644 ios/engine/KMEI/KeymanEngine/Images.xcassets/keyboard.compact.imageset/keyboard.compact.dark@2x.png create mode 100644 ios/engine/KMEI/KeymanEngine/Images.xcassets/keyboard.compact.imageset/keyboard.compact.dark@3x.png create mode 100644 ios/engine/KMEI/KeymanEngine/Images.xcassets/keyboard.compact.imageset/keyboard.compact.light@1x.png create mode 100644 ios/engine/KMEI/KeymanEngine/Images.xcassets/keyboard.compact.imageset/keyboard.compact.light@2x.png create mode 100644 ios/engine/KMEI/KeymanEngine/Images.xcassets/keyboard.compact.imageset/keyboard.compact.light@3x.png create mode 100644 ios/engine/KMEI/KeymanEngine/Images.xcassets/keyboard.regular.imageset/Contents.json create mode 100644 ios/engine/KMEI/KeymanEngine/Images.xcassets/keyboard.regular.imageset/keyboard.regular.dark@1x.png create mode 100644 ios/engine/KMEI/KeymanEngine/Images.xcassets/keyboard.regular.imageset/keyboard.regular.dark@2x.png create mode 100644 ios/engine/KMEI/KeymanEngine/Images.xcassets/keyboard.regular.imageset/keyboard.regular.dark@3x.png create mode 100644 ios/engine/KMEI/KeymanEngine/Images.xcassets/keyboard.regular.imageset/keyboard.regular.light@1x.png create mode 100644 ios/engine/KMEI/KeymanEngine/Images.xcassets/keyboard.regular.imageset/keyboard.regular.light@2x.png create mode 100644 ios/engine/KMEI/KeymanEngine/Images.xcassets/keyboard.regular.imageset/keyboard.regular.light@3x.png delete mode 100644 ios/engine/KMEI/KeymanEngine/Images.xcassets/osk.landscape.imageset/Contents.json delete mode 100644 ios/engine/KMEI/KeymanEngine/Images.xcassets/osk.landscape.imageset/blank_osk 1.png delete mode 100644 ios/engine/KMEI/KeymanEngine/Images.xcassets/osk.landscape.imageset/blank_osk 2.png delete mode 100644 ios/engine/KMEI/KeymanEngine/Images.xcassets/osk.landscape.imageset/blank_osk.png delete mode 100644 ios/engine/KMEI/KeymanEngine/Images.xcassets/osk.portrait.imageset/Contents.json delete mode 100644 ios/engine/KMEI/KeymanEngine/Images.xcassets/osk.portrait.imageset/blank_osk 1.png delete mode 100644 ios/engine/KMEI/KeymanEngine/Images.xcassets/osk.portrait.imageset/blank_osk 2.png delete mode 100644 ios/engine/KMEI/KeymanEngine/Images.xcassets/osk.portrait.imageset/blank_osk.png diff --git a/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift b/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift index 88a2cb8ad73..a5aa5ecd35b 100644 --- a/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift +++ b/ios/engine/KMEI/KeymanEngine/Classes/KeyboardHeightViewController.swift @@ -394,21 +394,13 @@ class KeyboardHeightViewController: UIViewController { func updateKeyboardImage() { var kbImage: UIImage? = nil if (self.isPortrait) { - kbImage = UIImage(named:"osk.portrait") + kbImage = UIImage(named:"keyboard.compact", in:Resources.bundle, compatibleWith:nil) } else { - kbImage = UIImage(named: "landscape-dark-keyboard.png", - in: Resources.bundle, - compatibleWith: nil) - /* - kbImage = UIImage(named: "landscape-dark-keyboard.png", - in: Bundle.main, - compatibleWith: nil) - //kbImage = UIImage(named:"osk.landscape") - */ + kbImage = UIImage(named:"keyboard.regular", in:Resources.bundle, compatibleWith:nil) } keyboardImage.image = kbImage - let kbImageMessage = " viewDidLoad, kbImage: \(String(describing: kbImage))" + let kbImageMessage = "updateKeyboardImage, kbImage: \(String(describing: kbImage))" os_log("%{public}s", log:KeymanEngineLogger.ui, type: .info, kbImageMessage) } @@ -432,6 +424,15 @@ class KeyboardHeightViewController: UIViewController { self.view.setNeedsLayout() } + override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { + super.traitCollectionDidChange(previousTraitCollection) + if (traitCollection.userInterfaceStyle == .dark) { + os_log("keyboardHeight traitCollectionDidChange to .dark", log:KeymanEngineLogger.ui, type: .info) + } else { + os_log("keyboardHeight traitCollectionDidChange to .light", log:KeymanEngineLogger.ui, type: .info) + } + } + required public init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } diff --git a/ios/engine/KMEI/KeymanEngine/Images.xcassets/keyboard.compact.imageset/Contents.json b/ios/engine/KMEI/KeymanEngine/Images.xcassets/keyboard.compact.imageset/Contents.json new file mode 100644 index 00000000000..ad0b164d5d6 --- /dev/null +++ b/ios/engine/KMEI/KeymanEngine/Images.xcassets/keyboard.compact.imageset/Contents.json @@ -0,0 +1,56 @@ +{ + "images" : [ + { + "filename" : "keyboard.compact.light@1x.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "keyboard.compact.dark@1x.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "keyboard.compact.light@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "keyboard.compact.dark@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "keyboard.compact.light@3x.png", + "idiom" : "universal", + "scale" : "3x" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "keyboard.compact.dark@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/engine/KMEI/KeymanEngine/Images.xcassets/keyboard.compact.imageset/keyboard.compact.dark@1x.png b/ios/engine/KMEI/KeymanEngine/Images.xcassets/keyboard.compact.imageset/keyboard.compact.dark@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..ecf0a7b564c2a6d68a530dfcaa8e7bcb1e66f0eb GIT binary patch literal 11040 zcmb`NXIK+$w5|aK5u^ziI?|*l2^}I;5RtAlDZxnZEp!N=^bXQO37|+35k!g*!5}>l zsz{R#2}OGEaH8LLuD$o!=hwdW{FqFAXEO7?Ydz1sCgzEb8WjZ#1rZSumHOj{dPGFT z-h}0TauUKk0yQE-_#yVxQ&T3Y=wn+UA`<$g{_uf;->>ytUq49u_`$w(hqjT4w*#LG z!l$ zD3K?gVhlIm(9aR*-6vIE$ZYb3a|hBLaJV+P+tafvEADA)YjsCglbeT!XTd_$;HtH? zwN)=d{d27Pk!(Pm;los#6drJj)g6HBbDZ*)&AdT-T0Kri^;b>XPlxO8s@n_-#r;ji ze#GM}oPX3jw1r{Ll3^Y(H@<1c-ivCA$6H3FSef{~HvQdJZ3+|>hKki0AajNjTm;UGj(|QF8E z+VfWW!!%99Y)Vydr#;@eq)`*wLnRm`q@|;8N}+k%&IWJpVIqVpj!eZyBCmK$2Y_>? z=G;wVHT1<`$|MYfiAfZ38tht)yNty}?|H%UvW09KGK{eHA}xxcI~Z_p1fRM?cZ@|g z#RtYBVT{RmSCLR_t(JsoJ~A!>c?CwAVR`kL3~I=tuSXWcS8Pp&X}>Bl07+=Z@5tl= zC0L9WVPBJN6Eze)94%j_3a*R`JV9W4pY*MyVvSZp@dHZiIvp_JoMN4rbT}J}01dbV zo10#KJvnFD>5WbaD?lW}^Q(B(FtI3&cVm}2b>da5&7%FRj1yS;;_3{??UJ71d3{7` zEwYtV;98epm0^H{=^~6AxOLwcsMgEXWA2(Wb^W;}-m-A}mV7-^ zTRXF2%h%u_&`tbSqV{9q>R;m-D-KW3y!m)(TFltCOB0@XEs6(v#1hK#@>aZj{|;8sNsP&loq+e_9nVub&#EYbcFC|A(h#kEWe zAs4-xZ9r{-5$t(znWA?$(wysv6)a_^gU#h(eg@1Dzte8Xn!`D~N) z!O~NG6t_tXyC8l3U-{$G1{sQA_U|F9)UWQOi{k+9>6-Lk^JBPmg(hgV9~w zNlL<=$e7?*?<_kBO+3utJ_js#^9C$n(QyxgCs{5XSwxw$;cEhz`)UH-#pSTEy^MeW4iZs^XZ_`pf_VI%hFaTUuyYqU`NV8q|;wExj6EN_SOls~fJb=1FmCZ7f) zPX4`ShuVL-_J2C*&#n9~tZI&Zif*!g_-|uBL;hD9{lAZj78=B^X zu{*Go$JV;1BSaZPD*F8o27K6C}KCWYSP7q-y zlon9(V==JtxekmYsWVyev2K0oAgeqF5cZf}a22=LrikipW3_;v=>4Y~5PI)EVemYyfCm^QN=ZPgVEf+t3H2D;YH|JjqDYC?ut#4; zW<0VP$}%%DjZDm!JOV!&v9@Lem{xGfYs!oIJOL^QzWY$j!FTuh_W{|)m%gQ0s8n9q z^{%Yp+Wqff6>!M#&k@NxB}xyUf~b`YuY7aY2!#M2xZQJJU3Rp0-lcDuoi#7*Wxt1b_GEH; z&~Rp8c{@$~_ZL4Wr&X?J28%Z`#7#6vQ2`i#ldj?6>#z($K!AciebtsX>elp_44{`LLBzOk@t&H_fR{;o?rrJ1 z>&+3gl!>xY4J4d~)s&u?UYG3AU(=;OsHi8d9CLFQ|J*RCb!}ZNpE$kdv*$MP*=F^i z_xwuG`NWpxz?Wm~`a7XqxfPPDapl0$4>i`q_w_Z+?4Xw~{p5cz;J!FdG}}RRc%gKpt;K@{FRsvcA4GU`ZB}0Ui4a+g~I?3G*P#P>#8!7#5wr7ecO^ z5PE@8MG;F>VnuE9;0B^qtzOAqh^{dXUAjk8<69w>8Qapu$Y3&up3N<^aoyl#`V4XE zbTmivA(2IGiQVY|qtarVa8$eR;1+z4Lz#N;)uXs#*4xsSn_E+hQe3}UyVA!di7lq3 zt3&|bCaPTgozyC%6qSH?j00P6etYg|LSa(<@$*ksDGlyhRg6Rf3LIWU5{aK`-<2+; zXU!M0fRXc`Gsa9CJo-YmVjsb9+is^Tiws|26h8SgoC~)F;E~*pV`-M9XG`;!z5zZr z@RPP7NA<8}O-6rfCGv5E??k-D&!>ocdc8Z;;lZpFw^4CLQMzaOeY;=iJ6B7BOI}~b z?al8iY{ox{ud*TQayVyX(4kH*lM|MnRANe_pMOuJ4Xi?fHuMGx3Sm6^)G(It;U_R2 znq8vJAL#{yK@k4sPRQ$oyFMYu~r{$e)(0Q^}^zW_P-_GvZ>3 ziC+_@gzwQHf<9^kh>3~KQ!+C%kCPvVg1I84zQC-0PcZ@Rbme}7sR$LUBzjEd5~E+d zol85y6-wCXIc9M4d8TC`GZJhf=xkA3Q6*t(xHKz%L^kQ>)|T62FixXcNoT8%za&}! zk=@fHn-6j31w+1L2n+CssL~$X69xM#@3RGPRgCc@Tsp6Bm2MQ@(b2RPLNKXs^lXv# z5M+?BV6}z(esoBxzza@>kgG%i9mT0c7)wQ$~(ZYsOU_aOJKYyKhv;hXF2RE#7ZwrAD_%qXQf^WFn?R`;l zayW^TvlrkRb7~k6Q_9D>#5-5wjY47Yjyoi-+Vnx&vx_{4umsPYmhgazU*FY%OmEOZ zh5mB50gh1O-xDQ$4|FCuog}W^n0rgT;hr+Il+*d*4FkP)Kk2szv}xt3VM^YCdg9iy zS45LPk0X1`dK`iSQ--RGU>>nv7SD21u@xTm2;LcHru;Nl-+Clms`Sd+WmRmQiLDG< zW8b8b$DM9pvOC4r1^a|ZjN;?9d5oX^nA-pJiq3;RX8!SLfwkXS`a81YM65yLy!@<6 zKt6fa-t-xNvSo>fsPGgXX!4c4JDF=?6vu&|ny=N)qMPBD_2D4bpx{?$w*}Zs)_-%+ zI6m-2n5rkvH-F! z%TJ!Kij1oUnM?HCv;Zl3OO9OVB}j;!2258>(zl~U zyrh$$K+<|HR=0UufEj9lq{-ID9v95{Z!mNVKcjcwNPEo>odm*s{q$xonY7Eoi#aWaW<&L&dYwo)s7vU^mONP?zpG8H$-<``)_qvxZ1%a}= z@K>$d>dc-(PP0wDwsy;Jr#33boehU;$A!Y0ZgC-!ktQaF3tlqgSQ8gR$yyWe{Zfdf zqmhlF@Uo?yhD5%v55`77QV&Ilf;Qg53V7~k=7@}285*!l{~v=HmxUG_KTAy7!}HW z7iZgFVJ-Mf^a^a6*)tSRp}DSr0$XZ}zb<>9`MJ?Qq5*EC#Hd^`_S@0HB}dXpN(IF% zZYxz+b6<`TK<59<_ORxoeGb_3mI}CVq_Lp)_dOZ`t+Szx?CHrLk!K?5IaB}*7uR~8 zU025ftSmhq(rn;5vNmo{qiWNqgc6K-KY$l5zkydO+u2#s%m9{saJj*8KdnErx)DX{ z5|itDu(QIbiID8C_>j|7Zv42U{(QhV$m~_1tv3PG6;!U3qv=8+i)4 z?QHfDX?LpwM=NG9eGL~IdD;~_Cd334Q4KEnG%~;K(2dltZ#= zt&bX+4REPRwXADhE-Y^$haER_WRb`cZsa6+jz)iRZ+fk#6}=uwcI;9A4zr>C*Bf}L zJ=Z*Qb45M{o106`gCa*HIU-;}`pRcEjf#NinM&cf8SX^BDsIt- zNi`vZc&D@CT$p@R)8cfsx|BbO6e5E%VUN{bXOjZBF&5UZSW}=CTFIU&efLRF%6G*$ zO{j|!l*xIXiQWSnP<*hphVj@7E%O!Gl)9@>jf?TOQ^1%Q3se)(BJK69Oj5|nEL=#R1d?lW4s0%637!QiZFQ_hEPxgQi+^IX1=vtF!1&|fU|^$cDW z?g6m8r)L$)$}4=;@-W*Z6v_SOm94-q=DHcUkW5wP<~;;{!muAgog)$EMuV3BrU2$Q z1J_&yuvk>GWtU;`9#t7C?p$poINC@uebHSJXyeE7w+>vlHr35+%3E#VY04M64%=I?9AI@(C#I2c+q`l zo7$J(OXD2o_X;RV1AaPa8wUAmKz(kJGxY}-Y3+J%7Rfr(2|458%U&_C_xDy3hz(b0 zarMqAk9ck*tEiAJ67-KcPaCcM4-qw{z6JV4qLH-^Wbr%7TdHH^OIsw$J%*|(-Fzd> z=MM8!$*Y6JrYhe*8?scuh}Evml3`S+-M0g<5n<1~{E17(X5GmWmmWLZs8SJ@Agham zS`?g?rgA#I?tCZWL2?D6(yeg})_bo}p-rm&)F(3X)h06wxkM8i39SVN)B^yzKGjH6 zN#1TZdn%Y{g|60BV4D^9Fo7U(})@0 z+0E3sGbY4d7nX}`VFD%Rk>y>JMMYSZ?d|A0_w4=*{kvES;1wJA^lqTK%%(AKkcuCNjSw z>%*xSe72MyGJV<{^^`mEFBggrLBD{6>OzC@wfRven~P?y*C?2F@eC03VhmG&`!{*t?(57oH54@@E*U_+#!C{OM+s;t3uxC7j^wGSO;t_`X3(Cl0H*vABWP;3ftYi(Z;b<1wQ_^9M_uU>EIv!jJ1PWaZ-iEhcc zJb}Lm4&i}Ckj7;+ZPg({uRXXt-wfdlT2tR5P4Z${0$sFwOS36n$XlU_xHYpU24$6h zGyogEe)Du$`n@j$)%6SUKm8ynzl@sn>Eyh9JX(^ks_^%XVollr(A#xyS7~8+q^Vr& zxvR9JOu2IVd({_*COb9`o}F{8E%mFNoVrN4WBSO)z2)XiY{b%+$Ne-+oO40&lb-5+ z`ahinQC)Ev+6CwdhM!LP61#)FmNCEfbAIRCIyi8lZ`$wi1XXf!TKueb!1~CEgvuYb z#4Te!+MAK0As)lE{5r^^p)i`Mp#Jl^$$+Kq3fDifJQ`%Ta0WE$r6LlY>8ACZoqd~L z_VrWa$=8s})0rg2?PoXA^5DOjfx8X2*C5MTOAUB7xAru!KsJk>K_ zXu)9pWB%YotW1c))NG&<+sn*P==)^#(Vu8I?&Cr(-$rp-HC>P)@dvs3wXr#&~% zrDtHBL;VUgBQ-TXy-j}L^1o=X?_l3sspHFf1NwMzf@`!%?r14$e3w+7AwGV3q8cy+ z^pm2lls{Wu7+h24{>vxr+AoNnSgjstDqdL6e71r{RqHBDMRg7{4OPx?5@pX;C02M> z9;7?9Uw`ozvBLV++^))q3|GP1yWJyoKWoQ~UOXZqO`}UV(4~j=*`aSpTiIccZ$xin z9xXNf<7eLP7X7!;`9Gtk%$@LUBLf)YKk=^%OtKrl_&HulB~M)lQ8wb4KGd~RI>JI= zlZ`yI8;|i`NFLgBzH}ACL_Yb!C#Y^gzP*P;+&7LRz|`Brizdpu?Q?mb{g~A(%BmsV z2z*DsU20}w8%AJjawl+R`QZQ_esEz-nzuh` z)yw|7vqIN=t$mN+;*iCsDWS;GxNd^MD5YiWR_|LC?0@Y`maxd32%Cmo%}xVJEqMi7 zP{Z){WR#xCAmu3KA~%QCSeT;M-ksu+$zNGn@|ZzFNy#C`A${1Jqps7jR@AA~CyFX& zoSgtSS2Xt9j3b~xo!3td^`l}LKrakK9#erFS6TJNJ^9sfH&etuII+4P&hjFVc|7Tw zT3sJXUB0^!i6T_8CB3O)C5jBFFWYj?{vb;rn5X1R1>L9!LWR_DbcCPR?lE3Z+)%)R z17;s=D7o*Uz7hR%%EhQw-}A5vv&vBQ=9UZZi4Q% zzD+Wyr1(X*oy+n%bP&yQ`YG!@H#_noL1KM_B4i0)11acuGB7eYEK_$q&1N|1eMPAY zbewPf?(w%FR!UOTBOe%to3;x(PQ!WQ1*$RB68>{wVA+B%`n}MXT54?&-<3lWRWC>|^6iE}eha=NISI)tN8MZmtur4&T+3Uup4e z81bT@M{0lV!xU0f&&16;?zB=!Em@F58Zcad)n?&M$?X}9;%cM>lS&JY|{SE15 zBUu#XbGRGD1z-9kA7`cevYR`-DtCt+XXrs*VwwD<2fn~0A>{nmI_DH{k2Z5}k1D<- z8p4~kbY*F-y`OwCO%<<1J)_*(N+nsyHcw5oZd(0((Yy)jdPf=3 z_+^lGCR>Yoh^o%buhA?I(F6qg>7@+n7yKnHNaBPX;q zl4r69v}UYAh?B$g=ToE7RIV9gAL&T*xsrn+M5w{QD2C*|v?1WbWEC#^af|~$4PVrs z7b`_;LY;66X8+y(*;`ys>+8FiCyum6ba>iD!5`3z2GhmkI!Y#!O|9;Aez8emb3}iSqQviX-A=q>H~V+;CK}ZWXIxmdJZ83H~CSUmimf8Z}D^)ab>u zQwy9?J2QU#;-FRT%Hg$ML2*xqs!OJkx#Tej=xI38SI!Z15SbG9WXK~{BIx-8^{n#x z!kYJ)@%K#c3Rg24$Ljy6=BK_UY7f(=*Q1Pe_WZzF)~O)E!?L4qB3@V7_9~)<*n^=y z7|=hlJ)~ir5ET(**Zn3D`nK1InZ!Qf<6XUU_eht6WYdMlcH>16(XTmSZlb}qS%$`| z3GHjv)~%Ax8txPm)ZS00hvA3Sds*q;c2Xiy@jR6vF0lTuxR~qF&(9=y%lKN~O&Sgi z)QH^vR2e&7>mC*bnVO87PZcXzsVxXGgXl#{wK%li9rw4?DUlU4WY$h?l>~0y;}Fh2 z=CDOJ(`JLv!WXR2*hljCUflbK?y08mWfQ#nbp%G`uOzzjBa^=Wmw$gR=jmKSF;Xl;V>Arv7k{Oefm}B}?`# z3sRAbdCBR2cf6aYlnKp!$Zoz`@pbWpAg(T7DJt$o1#UFVe{h;Gs%S<>VbcCR)}mV4 z_u}T+$8Me^1&^)Sx%`j||Nhg!CPMc1otX+7Jw4<++f_-DsPma)na47bCSlh>d=|3# zsb8Gvpnaz39`j1;h2rx3O~tL{1>N)Qi))7)=kD6Ro9LkYa>(%cU}yf>Hu@Stg{%bS z2cd%(Zb8)H%wf5K;WAW2 z#4OQoAYYB#WW1KQd}r7@Uy>`0dvxJ7b0!Wq6Tdg;kC&&e>`jv&>19<;v6#9VG#J=a@z;W3ZvLO}i3xA`wlK7|B@NkaqI6Y_&k zRyN%lBjn^xj#5G2&K&jM18;0ctjWz$azBkXx>Rfkl;V^>;hV?1fza`p>{OPpJXjjv&qy4m~T!UPKFR7yHp?#p%37aSIGJQN+I(B$iT z#m_HKb2`x%C)NE2VbMpb6W=)DV~qvXAAF_>79n`%oJQgJr+Co0tZiTEOtszSrrWnG zG#;6|qz==ECD-!(5Bz7X27fRzvF-02JR6aatn&%JI1c_v@%){D;;|Peu%Z;Ybw&xY zyie9&9z(b{M(EZ09y6~_^TRj!JD=RpsFlOI;eK-gbPPCLSK)jOFgo>8i9-!;f-czo z4L#fW;1nEFs&7phZ8B1&w-yw1a2z~K8`V-<<2@C;G!;e7NgU+22UUVruFa`&sBvyq z-3{4p2dE8NjE~i=@92N})aJx6GYD#Gc}z7bchIKKBu|=}c%6=!t@R>{P1WPX!QA|;zBgYve=0g_{)2I_)Scvu$If4+t1-EjB*?u z5Utim)l7+i?V@Ki>%bNFOv51Pv?B_|p(4CHAPsWh`uqu(j5Zlc{kA z?}^@VD(DaRx$v(2JG0Rcaerp>RLJa$rQcMvrnO(Lg>`*Nl-vaX&Az$vP<;O8SuT?K z_40w1rG*2bM)0RUlh7N3{daH&nn3!_hfbqzzrI+Fe(#&|o3U#c@i~0%(=KT&D8+Fc z8o?ijsO7fHv}?AvG10vCgV<@nV+`#neMgofWL{9N`Fh=fb=oedZaR3B)eTL`7>`x@ z%#L`TIHR>p7-+N2D&^~C+brORAsTDk=<@?bx0CaA2?cK1kfYEE;k+ddg3BE2%xgR6 zs7D=V$X*=$z!J<3%Ob_YR!>7O3x%^StE+=Y^Vp(>Pc0vXcD&jRN9WW{*!~nnt_$Q7;7=qX|LS=ORAodz$yEbkH&WnXcTi#75g@W5d#VNMl&c z(~p4N2|`yQIJxiS86URIp>D@^<9FwB+3a1Tj&^A>P)SE zYKkd;q7zSB)8xB9e%nEHm;=UGy5Lnym!WIM?3XA;-V4y50U zaCIpB{^dNrCM0{Uafb7ymDVkfljbj;XK+EKtGVAZMu7L0R%d*=A`{Fi^O!azsP>m* z2?}XRoEBQpJq@4HqRqT{{*&gPJo$Flx9i_j`d@SDzp3;;EDFac2q}$e#vRtqwBlvlJ24( zU*Q0G9Y@Ht#O5Q1HxeR2LN4geg`%z7tVMIu!f_fORdz_Vfo3)`aYqFsS<1VrRs!Fd zfoM)8aHGe&Oj`W*#1! zj|El59#fGDY}femev2I}o{py;c*_TgFa9KZC`)cH_?aj0<(qno>~x5)?#!Oa@Zisy z%!C3lJ58t4wQmYBQ`HCR(i&rd7UV-uq@Lk*~sI=A{S7Cg@S zmF1hS_8(cyr{_rRIa6dM_MbdT78RQwnW!tW8_M|o_0FC~fg8;J*uQw*&`J7goxAAG zD=n!`;bg4gwA7@kBQKdFGiNU@!@I5vGNYCS$IORZ3cy$_+q7Oo$=L7E^syJNXG6cY zew~e0iU?%Kxpb|J)8FZgx*K2(QV`^sfrLWFgZ$~mjV!&do4_(?G(8@p+#{WNdF_~l zZG3#&MS2V^Qqw-{*Sz&p4Wq2Q$=bti-EvwamE_m!uzS)(S$$uJ&tBG?TA*MKpB!H@ z_gdh7(~5@VynDSiHIz8zMhAD<*v@%5xgn^A`LJ}WCXb@OYA&i3V|mLTb623FQo!#- z?9SvlGna33p-fEs0(+@BtsgOK+?}5u#B$7M84}OfaNO2bp%SdEUydH+uo*YyN($kj6DaC_>0@B7!<=U;1|i*wGpIX7L;tSMEaYR;;6yyG1muBt4HhfRt7=+PrQc{wTdM~|ND zJbLsv3+oB0rpOkn0aZM9SC^G|1RteBopI5SmlD_Xp5KRHno!O7lzY`(Vw>RjnmWHK zS$e4jiWlTOkWRK7a2pv?%v@)vTx+No5k6=&0Ju89bQJTNq~nPFqz`q^sy;5IQ9ODg zzi0B8y`SR5|Ff-2rS53jL$dpWfy_}z9)<)KT`&Q}WS!$xFo6VCD-P=DKZ(;S`fbV(OMA!zZ(#AA3Ku2%x9;abK%2z#XPUBLX;mhys)lL}NZD{h zH`@#7xH|0hpcf^>WW&133qqkTy)pn3Yi%mhqgdI#^}2J4WF3^~Il1BSMdES7K&m_x zYME`S#F#MWpln_B@&0%~O8sjRXQ?wmE*mj+69_+Sq(D87e@fhlF(JASvyX`>rC`*7 z{h0)WCuPK{Dy<~uXt-}QUIBW0gZW~Bp=Z?WZOCVF=p?|(eMd>3h+&d_N3oFm{^wS_Y4xeJYUpfkj=dDMS*U_FZ<Pw$KYZw zZ8qZQn3z7yFW71V?OuT&TpKeQ{$NX}K&t+}G2qP;vkR2WI&$^@O3g)0*|bIjLsC2tQX zo@X0=eWl|0(D|!h*ILJmJI$~dC>J4NB>(-*BCB|!EYUn`8b;TzBO6(3FV-aeufQIa zzPuIHv4>J%dG}~>%~SG}Ud+(uCcnv@vnPm+v61&6u3tgi`6g59d&FS%!GcdF#nmub z)_j~DrlSBD3G(&h_CA}`a0rGzi7B?BDZlk!=X(b`Arm2`)pHIcm0>@2`3Fh#1_2vV zA9?^8M1D7Gi=rQkIdQbC>lcRdRkz|DfM!f2?rMsaM3Zw4Du?f#jk8SygI*WA1IIH$ z-^TPDQq)dnteF)Y$TyAbc+^2F+MxpQt7vIoGR=mGiTD#air2-2){sv%7Nb@@(=qVC zj@&0*&%oNS+N#%-N50%?HN|+6$g;h7;F0}+QI(P~)N5(bj%V#31*IuSlCS;&au5xW69qs8qj3wuANFa9C0 z(_4S$H0=aliy4PV7FacIY;=8{C!+@Hdh{p1OHZ(REA>WTFR3UT54RN)%TcIR*Ot_Z($F$n5Qkls zIiLoxY)4aJtY6{t9lFY3#(R*Wfxn515tzA%wAyDQ0_gD^sLB+T+iZ&qGV%hqhg{*VEE+` zeQQp|s&z=^D3zG62 zyUEnPxQ<5xr(R9vr>93qu-A4SyvLIkMMO7g&Rg;6=p_H}t5ppxB(wol`=UAvRFV|l z(>^mhIh&O2y#@y)sY4PQ5%L zj6s_<3GIF^3ct6Osh9^_6&f%y@#qOXRy!t)77zH%vcjmY$AUFhW~-IXvXHKQhNEQi zIXSdbAz8KyNrL@Ox@vOG(@v8+m71lrMIwr503lk5U5N0>%4(WsvoL+As{0q0*j^=z)a-!GVyU=eJV~MZP`*`mzO6C?b>pegj|q__wNzpFmwkn zTS7l8Oi1gK6<_mf01`UGCEFbI&o@^!&aV6fJ6cM_SG&C!rdF+K#)ME9*-EfV|Ijd;#!tjSH!oSwn?7=Du>EQy zuqg*K@XH*L|8~z24XWm5HV(aD5C&&SEg`amlSJ1k{rg@@0umA3k?E&5S#YJKVnJ3%4ryVEBHC0op|o zI@iBtxG`r?*q|fIE|5VZV4LiTcR>()2uS)N}S6Qs*4V0TVrDj(bGG({!%pF_?PiCfAKX>P$$55-)f94ih+Uz}o z8)^Ywog;3ZLvpe3Tj$5kG#5)LJTO$UV_(5){#t>C_tOoBtTG zqogoZ59C{BDPJ3}Xi}1KWT-Of-xeaGlXe1t{YmNnfVMNVf56-}=x+@7PvNHgb_-7F zOZErQjWrXfM@`6M(XCVU*>Gpgi=!$~^-{2&9mK@Qa_H79MvmgKJ&c6z`U;L}9Y|pcK&SA6s)t?Sac&vf0 zQl0)rs8Y1Qh)3h%;yi#O2I5$`UUb3RPvNNFf6VwV#Zt&0+k*eC_}hSg+CiQB=jhL4 zP*?tY@o%X3Ul{q{hE?KUNB@}kFTDJ(;vXabu~q5^*5~gT?+^3Nxd+V@u;?r>)QIQ! z#+q$fqtcZalhsh&sBXsS={V9x)g>x125}GGzDG^a8_X`$U4IPt4>10JeQNOk-9Y{~ zi~nW+|0lyo84u04)6O_>XE-Q~4m@^}dh z?oF+*hydy^B@N#pkDAUj#Oo_1YhMJnFlg|;s`~7N7?=U9lcCljYA;NU4|&DY%R3Dg zrKBPy7D%9{J8Wp-(}Dv($dBy$W(!b~$DCJ?&Oz#*uL0K1_^>fQ!gvSOL17eCYl72W z{6NXGGZ;RD#<0DSRAf)-@)wNqsGf8kYNPsDhj{QL3`mrhP;WsgC8Z5rl6HEbR(T>o znP-Ej1@chhDgG9a<0w^*-0(=S8C-r7!4HD*7(}^Ssz=%7<1Sh;t{243_e92P@$J;G z4oU`JBX$HmPm3pA)m81xH2b`Kb*%f1OV(%5A$@>Pek?Q1)mo4V`fVM^PnrnpLZDC* zTP^G9wgAO>sdCfF=TiXI$*-}nh5gYDw#qws&q=YSaNa7Joc|- z0`tqb@ya{V&jhsO@0&|Cz}rJ(`5T;Ro!`HIogo{80N;QdJcT2+y1Um)DtR_vqK5gx z$NzDCUp{9?gMRi8>$=&Sn;WgAWTm2;wV*f~rABd}`qm{TTDA1S!-;Q-1vdpPRUq&! z6sr6>WduVqH`9iaoLo~);H{95hzMnP@-EE6s(MaU-WJG)kBtg|1h2%!Nxcs7LMl_g<_3y|Zx^3^LTza;v6Eg;`)cTjiHPu9KYt5* zcsU&2Yr>T{v?EVF|Gpa_CK#oyCQWTvYf_a1MyL&F`T~k~4{3veNnRJ{eIwc#Iy%!t zNL6U(ik!1ZmNFD)r1@3ykt;{JBW$KjtEKKj*xQf}&O?q1*R8!d8aEG@lCV6o|vTA*?d>!BU$_(l5ic7tX1rNc;2UOQl)1zRi5b?Mw zzCmAuVm_yhPSp8zpQo%(q6*T849i(6+3L#K{*_Cggy0+3Wrxy&i)H1$Pz(7geaxe% zeNici$H9iPD^2~|LASEgqLSL#PW#7Hp0sqUn zwL${7kWe_kdk>QD_oLx7{Hff(=#1F3%jFBWIXE1*D{#&M3J>)U-#dyn>&mx`|0<2_ zCLV-iM3$8iktNsaJJz1#MH~E(L=WOj^HQcuQV>1;d1~~@W$2ph>MkId{7LO}7OR@( z6oRj8w#IUI=^oQSe_;!BB$y`m9#qWR;IzAA&ISEb7~-D(5b#l3cftsaGTT$ zfq;-mVskw3_7eferPX6^UKl{QaJ16xJYCCvroF}8%h`Fk1^Knf`{0_a)DFq-Fu(5B zXgy_HzQl6gv*Q8RtA_{ll%{yLP{sBk5GzpcABvp&WyY1h=kwqzP>GAZGDOh*2gvF2 z%ZF$!zSiKz%=?3eRUNo$WN_B0zJhzH#D)&_TLAu!9(Oxzsl)nyc$}n%x zXfST*^=j}OeS?7I^_gMnGvA9wvaytshu6McMMazRvKe&_qU}X>OLnz(-vo4k!g`Rm z1h^2dju8A5Ob%1VgtX?8vyeR2?2z!zAkB3+*vUZf zT6KyGq|~izfA56vbMDUu4gpj_($YO21eOS}(QkbHnwpz?Wn`F`n7BH}B;t~$gt(U6 zllqZSGN)^??<(DA;GH0uBAwj?fiT&{+fs`n>w3hd!Q`a;+z zzSH}+k3mJt$%zLmVs4J+FjgfhmOi8c9sKn#M<)%W*;}QSi?cJ4qhDPh&|*lp^3peR z8J&RZjg(hL5bFKykv`tZ48;Y-a_!K`onvqFjg9TGg?V9G-zzm-j1%~p+A$!)#DDwC z`7WUGY;_|31w(zZ7Uh@@PLN5e9ws|+6}}3)l~#AW0gPm3a(wRmr~40DK^Ik@*6%7` zb-rE!n)fEa_A`Qe7fSpI%GS!6W1`{^arSj&B%SI!`y22JZ5Vn2E(8SnA$I$-BPf)# zKw00M5ZlQ0dV~C8!BJc8DYP`>`d#IBHa5FGg3lKhqtI-h&F#4S!4BaN7#kZ~>uSW1 z4&2bRR`-o#+F3YJlQoy83=hBM;9ACXT^%$#;Nt3-(UcC!^+^2CZG%K-YDQ7-M-){{ zW~%JsP7H)_KPNuY(az3iGtC;cypq-UQks^Qz$IYnItG!(N<+wkxtgAOR%wmU{P)A8 z^0aW|cI6s5ey$(0;o_8(5@_Et#YkUEEBu~X16f0e`e5F0CMnYj`L7Q^>*&cERKaZ8 zyoR203?v)mZsg-5*6X;LjAqu|#p18i6sSd9Ty8I{Z`O{{OS-aQIu%W4@sZ}0%&hjT zNy#6eg0g$qj_MI5%J>i;H}1+$4;|1tXWG$rZxLhXwt&U?NI(iU1S;GRJm_nekoy2!37>={93b|LC2J`tC<2c~J~s{)Sw%UM!bV?2N~_WhnZGTT zEK*q7Lapb}0y#tQt-P3f2qAegFAEDmkjSaQ- zA^RTi-YzHCnt37_=@1qG>kUG)T z`Fe$Wcy!iby5!(JuhNG#l^K!7F>EN4XR!@)8Z|YwuJ_a&B2C_!luTF;gr{I-Ys-RB zudwl=XU@?|`2b((WGlO9HrL{!?^bwTn6UZafQEdvr{vUE^!yy$zn7du=Sj0+NGs$S zA@Vk3h!waIWU8D1>_!b&Yb!N!jFWjJecqa66=XH9Q1j{}famlqRQXoTvJ!TeqUXnq zO=&hNKtM7D;$97%52F+Wo9(Rj4!HFn?MA$xJp1D2I;hjm`dmkN_X_}&gPeHxHf6vf zvJfAyplq~Evrca%;kO8b=TNzF3<$_!%a#YM_Sq!PpOe-IUk-;XpY-CV6eKF$HA;bP zevfEWRuB7+$|KRPMT#cLnln?gwCfYQERtq(MFW9%Lgh|YiNe-<*!T6xFN722ixZ-I zRuL?YMR_QgEhxX}k?&^K-u4q&kZVPV$W>BURq{c|_xYO_cr=+|swuRxWdUIdpSx3Num9pDu|FTW6`|koNg8}-LBRXU>!!q6 z(Fbdb3W+98)RC#q)W2G+9Ex1;W5|w1N?q%dK8Wn=W%Gt;rze`hB)1dY0z69-vT@-I zVCh{#UW#V33$LvRFY#Bd?FtH?jbdNY^#l!!XJy%zVt^1xFeE97gx8g z`}OST|u9_=nPPv+p*c&E|9Jff%lsoIeOoqeDYP#)0 znmqV3_-yDrtx)ips3whK=L=_%n%a~Ql_!fQKU+F+bT|IQ*mQ^6+4=LR=;#$78MUxH z$Ts`~(zw7E8p4#Xh-6Q8U?ig@C#QaCoY~~w-^?5s^`*ttr z+S-+OUTd|zgTKG{+B1f`ak+-FH(|>}>nU#Y-lt=8f<^@#960L!g z#^W987li$|vY5ZIO5kJQX_0J*#j+*H+v;W(05V7xfK6*bK`3hfsXplMXhQ`6GE!TY z&x%h1AKh`$)JbZl;*Va}pPI6C8*!wjr_V=S8(&uXdh?rNkiH|V`b~Vv^aTojRic6n zA_wWEZW$idyyc^2bxLp4IUK3U`HA79ho@RvQe{>e`Y-3g{Hf{81o-3r0^+_T%^5u` zhllCqC@-AjTT%K%z?XiH!m~PWn@zqOYf*GDi{`J)QmmJW$l!xS??Ixi*0KjZx@Si- zGupSU2Ohu@%e5z}Q(Q?}8We0C&q%nl(fJswOLFUacRl-&xRg59Tox#rT(aYR-79cj zkC|;T%u~1=s2Zx)EM8Vo@;={KZm&SC88NSFykBE5>85QwloQ_fy&|`6aQB?J7{7?9 zvU*{7r{)4t=%CG`|17EpM-y{xLe;>LADd+a)AJY^n<9aO{kI^PwX`ng-m z!l!_jl12D*SD9CpxD11~!9ePb++%2K+kTGOd z6A}Ib3?5v4!<+L&f6PI9EC{#*#G9KhjqquH&k!4Fm?J(6@F-oyEe#?pDJgw#xT(ct z4K&~8-FU{gU(c$JSCtx^UOMOlz01J@6FD;83}^OYO7hG^(a7D-M%J(0_J|T2EL$OrD}R%g1LEQDQ86k*Wd$7-}QW1*_9(UqX15tMo@U#`{~! zIWW|nppr3=tf|IK&$5UN9gq*NLw!1m>vzoQ+mA|28eM?pp6Rn&we|pl;YQFZqWZ3>dt)8W;T^67DH91AE{Bb+kBpy&R zr8C|I3}&upZl!1~NvP(uts$SSD}j%0fp_U+{i?h=s=V@-4>c%=nhcdWwMCKe5lswf z(u5zomP?kb$+L8u97QXoiVo&AdPOI zVcTV>(xHrDx8(AELVBoK&N^~fpxy5VG^C`Kai1^r34P0y9QPVYSNGf`zeR6NR7&hL zaC+IazQnNk52f#jJq}M!`)&)^M0fO^(wEFHRi3H^I=ty^N!4HKu`;-cv$4kR?%`Hh z>M2_O{d5%9QpJ(izItcel`%p7+Jd@7Ry7=7U-SOrM&0Ag|6ck6aMEDRrik97mwA&f z1W+eNcqI?6RskJtTyP2sX+Ed#5Q1xCwhG=`Xq`-acI$Ug&d@QEQ`27Td}ZOT$5Fwg zIs@aSWOaUTaW2fpX)S>u{c7n^JA7J@I+#0DlBC44llKnHL;tW-V|8R);^Tz-=TfE6XO9azudV0o8ncD95>pljy@Ai z-%3J}<*hj5emc%vnc(My4F6ET<7iK!8UNwB`*)5Zg4hb}w@uIf(AMl2@bGc)UYYhw z9_znJ@GvKG8k*^u)9}Ap?XT{XMI-;4-xiu7NQA!0lrBuRr+fB?AJ1G2*+!hJ1@zyv}xkmnIr!Qz438+BItTMr<; z94JQ(ibSm;NpGcCA<0eesqyJ^My;x0#a+7tnv_9)kkab;{en9sr?N z9PM%-)s=g8E-o%gdz`$zXH9r_;kj{}LF}X% zU5LpAXr7ae&8$To3T!WyR4?pX!9KdU$Vr1xLKnp5d)Yi$uuQ(CjkoRxkaKp|PUmps z!ITh0S&a)1Rw~&jz1VG|9s99>lOXIlu2r=j2})7%qxeTb&JWt{UD_NkpW65Jb+sXb zo!>aGCEy(jSgbI6nO;UsWbVmmU0sY^8C8M_NkdKja%f?Y99QV=%=|PV ztXL`tMz+gRLKK{yKL0zgfotac}ff#QZ<&fv~=9;mmeRPhzJ!QNlyp*SCD}llz9(VU^3%$J@9VT)B_`DVqWkE(PIL3au+^a$4_JUfq0;D>FK!g-|PHvWqWvi^! zsMy(})!O4k+8OwYQfw!mB*>jw7220yckKE9%Yc@V+`CJf8#H)s!^) zn7DXPZgM!)3o{K(HUObRwUw@?WBs$oYadQag?-nV<1hbs6k{Pk3u^&Br=8g6H8nM( zu!FIcu2cj4cGm>6GCnx|tGREsL(}lAwwM_F^RlN){=dG{Rgbgp1GBQp5m&a&3C z^FSal?*mv@mNX_Gp8{{I#ieSd+=CqxqS|7e}}0 zG1R*U2MP=cc|U)k`m&ig#1`jLBI>c-FZujkUOZPuIs6T=@8Yh}+NnANUk=tK3Wd3nNv);;xe`a8Gq+auT9YC>5>8D^0yQ zt*D@Yq|`Q1FKGLlT`KU@=M2jo(X&N)LAoY94u^-)!*E=oQhx4X7iHPg)(Oh zC8J3$z}xYAecjw%FEN!UzG2*$gY;0g4 zDkjF5GCW>D++0RFuOtsyj7fg%jxLr>3+totIjhWJ;eBob*iKEkfF z=;q{=rZ%%Ud5ZcVzmf;r8;;p=TM|CYs{;>h&d*a$*_D?_CWP`%z(LKIdyB$v-!|sV zvgl2sA|4J)6S^RfWBpv>@iaR)Z{pXmoQU}32`uQt-X3zk*8OtnqnsWS8L_Y>zQ+hs zD>~yP4903&Rq5q$L7Jt9l*5>(Ogv}?qxJa(# zsj#L@+*QQHe4YCiK*{WNB940KWj=#myVL$=Z?6seXTiK2Y;>5xw5Z3|~=rD@}~W@R%rE zYH-LrS9R=TUQ?OjB7@^e>C#T-n->)mgn~sIdg(Er&?$yGa#s!xoYoUe9>~g-_1Vm8 zd(G6k;Wcl9wZY0@A$f@AsfEuI<*>Ku$!gR$=idI0>dNp=_11_6*-=~^-D9GjZY6d~ zTy#kF)J9@FOV5XR>#vtN193d*MZXOI;O%P+49w=Hf>}D_yy1HeeN-e(sMN?-{#hFt zG-}oX9RGg9I8}|wZ^}}0W@aXKR-F2TVQ_DD6$#t|LdlMuwA94zO@|BYF8 z8`apZCO`I95(%4d;I}_=P4srL215Azf0TmGm>wkrtND8GWIq2Qc3(+|d-YuBvuxVh z=OgB^!eYt2BX+g%9BQz-e7bt*?6V#TfoKgN}bv;9auf^#-?cL*`%eKc8cC$e(v$Js}Ciz zU+pU|%<6f;LWJ$Wa%G}bE3;76&{9;z{QgLxHbVl-ddJMEA6cO@*42HS+#AYB;2!=4 z3CFhP@Zi;zx2(0bm)GU?_V(*NoF}%Gx=#X(nYX=~smzp>pz3)m!#GkIPIbDIX~VyM zx%j)-I5?OQUZ5jp?f5aDw5h&&1a|A_x1sZo7mQ>`Q+|$%i-(IB8>_<3=$U6zt^YK@ znVH-LxYy_)<63D=Rf98@qEv{95sHBkiehpL0ZjAz+U-AdUSJFE*Ws3RQp7B3`aR*0 zNnnAD;^If+<2{f4poE2CN_alH;)3?{x5;Ow-^_%AaCa9Ch6KVrxc#;OYxjCKw;GTQIEYS^=+l1@#AoBs*jymtiQ~r zHr&LrIZ4q8p_AdS!*x(O0l21P0=W~l^|j}HYc>Oj-9?cl^d!8VkBHJFFkh|q)O$S5 z_C~gXfkZhans-Yc>)Ye#coiF9m%ZQ_2b1#V&S zX`}177riFsV0-o}rhsQ&lPN7#iu+?rA@$k?Iv>l`A_<%J z)b!M>LtPo8pS#CK!-V%I|H~{<#2h?PWDF?G6VazU zGyewv2xd-mv7$yr;`yaMt7>Txp83_#3g`1C*MHaY0$-9Y)uIS?6qn6@SCg1YS_8u; z?X|Ew+}q#ZY1r9HdZsrN@#ZHNKqo@ zSuefZo12_m$WVc(wJtf$exsv`$vK>C(6l7RXJuoXfrAYC5wHDe>S0aX=}9kMq#w)^ zK4Ts%P#3GOE-h{00t>Y-KQ%~Jv^Rn{RDTtG<_$_Bsg!_|8sW}eMc4>tC~xo@b0?ka zGKf2~lLF*G{GsxBat&|t2Rw#KkS2OuUXN(?`Vm&{dbswcLtn9`LVyJ!ujArXnN`Dh zB>jhm@);gi0L+-m`xKyGX(fJFeT@&l{O*C_Pa_Zc$z|IrD+h%Q(u-A~(0!N=*m4-f z-iNx$IrHTKYfO$}NIve?=bXsF9J(E|Hs9%Lff%EPJ zJmRkz4vthJv{tO(k0mhpS2B`ebB|IKbYf%0$&4Ed6YAnl`tVXf9=TcS)$1SV(KIHi zY5S>PEXAfP;)^e_cG4FNcd2o?G=#%M+f%LY1y3bxzIts)broL0ZoY%`u|GkX4QGE0y`a!1-Wc;nMt?j@dYBPs*=1vwg1^c0o{{=le9$Q%e?ft5jH> z`eA!W(=7BdN5H|xW(?#UgM)G*QWev90^{p*!-MH{N9mF9%Y+xXx=#-QY-}1n&!>+~ zI^|?p3ZtUb2}T$n^DtgZ1kF(6znmV}g(svj9 z#VQ0+j3GliEWc%_(0z%eyMbrLy(;_sk;Pqvgs(q0yaKW!{lz#}VWBMgWpl); zj7ckB^YFpg#Z$s>hQB?qLWgE8$7q0iC{@0V+Bh6p*)F*^mSW18G3eL1!ksc%C=0G4 zdG@0OP~jEcW7ee9q?97P_gKT$l4=&|SdWB-rp5&g^=4To`G%cUe8?6J_P=jb{XOT^ zJ-X(mf0n@21vcaS%WXdR*1+ztn~+Ukk+NDgl7LK# z$#@`f3f&(ALaayy%HO+Bt_LgOEsu9>MM8L=;NNU)z<>_wTvp%oxDs+EtS}0b*7QV6 z6OzBomT!-1%1DjhwdP(RuI~f-49&l^lox0r`fOl0K(xfQv#ZF)V` zN^n5~L9S`Gq#@V%5`_(Q4|pAa z&U`$*_&GdnBCLPF{gXr+BY(!g`kB!0j6#6(NW#<(e?~?^?A@?&IokD9U*@QO{LW(| zWhcIq*ibak9?p<)dDY1koii+cpx`{mJVuYBB~>e?e)Pf57w;!aVa=<ryT7U24izA* zGAvZzdE-s*@lq^rg%AXYlUo&hsCqKmFGyzc0M*zvBS7QlLn+kZf5{L0{v7~A6isq` zKLbd)aq=#qssVU^mrPuup zGq(LtEhX9iLrwSk&kMlo*cv7jem(m#@sSh%qaRsjltrz6i_xKwo74*wo^>PrIw03t z*R|sUpt>Uk-YYR`B(f3u=Wb{AA_v*vN8TdRm!vx$z9?VO*>~;bPp8WZX!gfn9kMyy zHtba)otV9t7+C?E6qAP8xN1%*?$RKJ(Wq(jowwMXN87WNn-@ZdFQu+q4sO!1Ay##- z>`ZJL8f$rCn+&;r!OEj7!7w-~39ztrC{Y$9&#Vff87~2bA$MqPcK6aWsHL=eJ6Ga! z0uZ$x9+!QX(LPgJI#Pupxn*h1mGgi|Mn(puo~umpI_L~y z!9HjHd^B~jPft(JR3cpNli~rKoNYL!r){#|Pe*7akvM-mU2fU<@X3)sL+FzfYKCnD z*5XHue0nTtuYZA1>{kV>T<@pOS`nVt;&oQj{CuI;4fIFztF2ZOT&Jre z0*gnz?bmGcf08VuGIDO)?&2ez{Vs*6@NZwd!xnn^#yMH6&|CyG$b(WB2K@S1?2^Aq5j5YEb`rzy{`H=VVk3Uj_G2LJY-mt81-vW7Nlrz(ApZX^Mrh|4h%Tc7@ z?TVfK7Jl-WWo?2s_R~gt+xgCqfSok!Y@H>S(+@K|x2O(~Mp}+);RI(A7DNpdlC^Iw z9@Z>4_S_8TmF4pR+E0czKfGN2G_y}LXV=l-fB$kBB|yev{LyxMPb*q`ueaf-ez7q! z+(sZVYCHDG?UG>}OV7d(-ath`mSNYs(LavL`?!2`K`;{FYU6$7)!uIH?QM|;cl2qE zjCYNjZeXTJ39vA1YxG(U@Fr%TS9ue^e7h2BJks{Fe-DRl{pSIP^4=pXAq~_Z;Zme5 zEahgo+S=Luo}XzyO~}4KIWT^3vf4fP_3M{F+jVR9@4Ex%PnVeH=4-%Hz#wJHix%VmHdxdmP&;f?+B)#xawxl(NN2WRWu;^Bk0zrTdQlBITUk8|p1!`@u|vf110 zqaQD$2P{tfmfx}5o?!evyX$B4mWF_4i=`+WuC%D_GQ2zwY@C=hpY0Xd70tGbk;A>Y zW@CBvUto_LcN$o}^dWbWtIx7u>m)@=1^t@a6(VYA;DUj{(m2bP50zAt(Rdn$@Cm#@f^bS#1MzaRMRlVtyKkSLvlcg?_2a$q zZEyW^Dv^SQuR_sbCqQ1N_<=+J!%!8`^Qe;>d#A?ZFS`{RgM6qrZ=LrqOMq5V(g8Zn zwXvGoab0~2p-*}mfQBVXm-pnNzLg^Ot$vXr2P$kXG8aOYsiUnQaabvYynS~iujme2 zKJ;ofygF%EWGYlQ(aRaxPY#GM-#wZ%{(V!=dHA#Z?kr*m(7{Wj!HN1z`rXXA)0&%_ zP?}`2GlQo=L6<+hKCvdH3#DVtrDQF&`5pSXTsIxQ_9HWdBJ8x<`poH3y>4zl$Gs0OX3d3>YB9l zjd0XF={bFaUyQBLx8E<)e*MCHr1Q1lJO1js_8N`1fc^%PI<)1rjOB-wrR@7v9lfdch<_{oUP7rYK8hXUdZX1L>@to`xtLSQyY^ntxNzN*#x5U9;>$GRjErz3 zBs|OFMkQ#WW^IgR+5Pb8yW8suZglopRZoKUD(h@+$tN>zI}BvydaW;}WxqBa{tgWY zxO7f7-^6WPD#&-fC{*VuQqau1!mm7SM7vK=Fp5hdWK~7kS%C9HD<; zVBq6DoQDzT2j~%#<)7Rv3l`>GM_TXgxaLpS86I|7dpH-XHT7Q1*XZPlL!8ZMvEc#B z)Q7gk6&iauRh)ep=`txR-oQ0C=Jtoc(Bp$32bg zyEC$)HnG#5ihzBCR4((0KUrBqBNrR7m!hbt{RvTn9E(S61kpASRkICP*e!r{*2E{} zz6W<%(%$@nz_iOVQ&V-Tt8ui*TF#DmdWYyx95oIal~SIfG&<3&xa8X z4vz9GJ15)y?d@RWj5#}L)F^(Pv^A#j-yS#qd2eq?C@02WW_-JJ`7`2U$D#K^2KA&c zEI+RQ_R#;w2LYpp-H^hc9Y=!{$zc`kx*!8sAj@qw_0!%c9tH0l-x&B$6M{_=Q z7}1F&W0jyKd1cjuPs7$eDdMXt}@vs zay4fD?x9CyE+r(OOsoY5K-^rQZYwXut(bki-Y53k`5~%8#sBUh;7ana4?y3NrBIk= z{ii`*OJgoVx5KB;@7JO2N-!&9Y-|4(EJZJs1g{R7yt-*me`A_Rr}>)4JQi1-`A@Yg z^aBe;!=8%#kJRUZ7VqDBkgk9Jrviou*^JEZ`i5T1ICp*S@h3 zytAKY7UJjs(mK|cp1$d?{&zy*=(mq=GY&o-)clH(!f<+>TgUx(=fK?eP#O zsi>lb)uwtjrBjKqfdUub9h3>l@=ZAQ;c$YEbR=Ahr&oJqV6=@8%?J7 z5Cr39EOj@<2gcTEf&6j1+D(qMyf9yD-W{-1AY1*qPUy_B1}fnWCEUpi>wn$WbmOHIbhTa)wR;!11qZvAu%5Ft0k~EtJUNE67z*r9c%tU$sk_xgJ z(E+D;kLhmiK5C|mM+yCynGw+9;+1c622PPS2 zl9~IyuIoIH<98nS&q4!;Rh_OT$mj(0I^OSt;1Y9SG~nLd6jSn_XLmjreho*F?~l2ee!{BqmBdO*izSl#uBiGg82XZ*;E zGhJ3bw?~$8V%GM&SK)15e%_dMBt;bXS40(fUg3EWCEP;5ZVDn;{M-JM`g^12DOKxg z64r){WBycBy*_uz%hw9j`#uzuhEIlU7yc%TRrEm@s@6?RDF~G21AszPB;y07Ir*A! z&K%jALJ>H~Jk(f)PuA%5OZVG>UI&9Ky_8`u#I(}*P2K}>5dYpDK|Z~|(tdPrboVpr zL)gY&E+HN5(TsgikUeyOMxUJ*6+WS-A6&naG|#f>j8zYPu<7dUtu^_OoIGa%oDM=3 z$xpR!I?AQD*EndQu`I)dGF1njg+y1t9xZcC$j8!%SeL2H9;xACOC@=d;%vrQWA9U3p?{9C@J!aBo z{vldl7n;Lg-xEJ*<(3U1R;)#%13S%ga=xG`Fj;wdJlY?3oZ;wfP*Q)^#N^Z@ri-|z zr$=kT(xq|ge5m-xWB7OxiyPgmi78=M%sCt7eQLK9mHg7?>ZW|M%lnK)fjlK;C8+J) zSS4jn@oEbQRPDXd?ZwRTF!X?B^;bnVJ0k-n+U%S}!FMkxmgcZTfW)->p&LLJN^JD? zC8}oA!od@7C*DtdC?c7N0oV9f_7x{iiR3~56p-=kE-!z!GfH3Z+f_6o!s&=n27(jn z->fxftwawE#l=zB|7+}Znr2bNZ_39c6_Ta3t=H}+woRUhXcTa(+kfrGca8iG5k&_E&s)Wz_*Cz0F zOos`*dj3U%pSYT*YR6@KF= zOj2Uv@3muZRC6o5U|ML&ooF`XNjYM5>~v^;ZXP)~Hx|(Qm4Qfa_Sfq>oMSigQ&>jn zy6<$d0Nu{j4Z~>!`os5W78AG01cS$-?(VKNwYAaFuZ&a!cSp!x=T!cfYrxqb+?3x~dyo~%1fV%w3hDC)EdWMQQp`E8|6_iB zo|TQwWlke>H*inkq^h_WI})2iE`6aakixEzKE2nxk(l}^*72PSRq^8bx`OI!iCvW{ z$(WwoPWP68F-#`kvr0`)qpwY`{xT5@kv=}B$7@FEjLO2+s_AdWwvMqMK;|2j=@KTF z<5X(d*a5g48RtkK;#|1iquIU?peIyV<9=vDPA*@%ttg)j^B#EY78Pizzpb8B%o&|t zaHaykRUu?O8#8u@_F~hLE*STJ6x+YyaX!11>3QCWm=&N#W#4iQ^$FDt*}+>Ep6N2x)*q2KIF z_f#Hf3T8&8lw`V4bsh!EgNROhC2b0G7C6##|Kd25*)O+M#(0_1+|s`b=r>@;FKP97 z68$|0e~#|ykGX>Lf>*=e-kV-^_YTNrxJ^C2e z^pBnqXKCq#Ld&m+P;Udeu3&sw7bR8IP%z^iQrA)gib)l-N0)WsQ?xOdmvTrideT{kM9@eV@ z&Itodug_BdNJP$!4mH=9_l&E_ln9JNi@}-0p&~AWKePbt<|z~NlPB+0RG)X22hXGo zeh3ZbTKrIW$9I~97jd!R!dp0SHfU{9X9stm?4#y$nHlq+rO``g-4q>VHMOMNH|Ns~ z=xW@)HugCl{wlY!Yx?(J%Ua4nvB`8_$s=Q;UQ+(}P+-fe$ke_jzc07_72qreq8TN$ zHu=@GbZ9{EW31ieq}KND0`Jor8ZVdYcQacdWeY16IigDDC+iyXP}E}1C-BxW=F?zZIpp_3U`RdryVS>XOeWB5qM0TIe5k=C!1|BT-(oBS=ru`%u40v z2Cob}ej;j?93d%^IM@564`Q9_xAca_13SDi7WzEc`92FUY#BU3um0ont0)r9P??YF z^|toE%FCgRX^w&w3LU>PhZcgwCwWZvf0FrkekSkTHG)G?GLC#H$|))&8f-i_ic4n~ zW^{FQBJf1JD&rE*PJ8U%j$3~S1!Xlin{SmNmFw2ZNy5{sZWLx^`MIpIehx}#Utt%t zG$7gi@OXZ14vIjW{)x?DFC@_lHI+ps@}vUZ!OtP?NjTNy`+kYR-H}yUvMO0Rk}NH8 zul?j?D%!JQj$Q3?3xAbHD^9dTYmqzhE*;N80P`0+22Ea7`m*_jU~6NdKWSr}6I3LIH0f{He7+ zRlg@0w||R@iDDLaUf)QE$2uB+{^)PuCZ4`GT|VDn=1bSyI2q0np(o+Ixjh&>i)`dW zcQ|j$KL)(hLmH~`Lg+T_#N;5#$OaIywj z1CF<*HxHd$ZkB3hOg9Sa4Kg*11aDwRT|+G0ls^n=vn8l}OdFRUaQcd>=zo_SC^S>=?C(0<%sM}|^$+0`4_n;qeZRH=61DCVQ38b1{gXuHt5xO&R>Fc*+TQ4aUkgaMh zv;l_bgMf2SB=@Pik&#g{jX!uid&nYHd+Qq(UN!dblFazh#`lJ|FI`?EHRCy^#TzX^ zse+w<7%G7|Z{Qfz!2VJMg2fEq?jxkjHx%5exHn?bxc6NPJ6nOt=TYXEoUVPql*}%B ziV}c}aE`;+G9SekTnv+vCGo~u390gM>o&~~4*ro47f!@fCwW$V+okyl;u1}H{IP&; z@Dt!{oIEO472-x&9F*+lyLh~_uC@x_=-oZ3aT^1t5wUw0@{mCIZ7VUTO_ z!vX>m2l*SWF{F7@;O3=66ol4O)Iklr~G z(sYX63Qw;syGxGjh<9E)zA5=pTerid_&CD_mA- zQrFkj)z;Cm;u{~ZdX91(8WKaWSjQLpu3{8KomDbsy6+adOqC19si@W%)6?I-A9Um+ z@d_zW4`7K^HnJ;S+Nz$jtstD_NYrM7;)f#N?SiA39RkMkWU@4I_RGU@ANUNlKh^$x z!_QHdT>FEfN@XzZjXgwQcHu%HJEsH!%o*w#i06%;UEv-+M8C|Ugd?M2(Vf+|1VHM; zUn_wH+IF0upOImVzVGjeAUX8lqg!Y&3mo3++RCWj;T4a02^2?2xCuQyV<+aW`(&X= zg)f)(uUDj-9_on12{ig|@kLw*P3e9)VlR@~pL4|1uEIK~$@y&Em27h4@fN9^jlovi z@<bwpQ3#_OFm zs<7YDNl?=V*2Y`W&uxTK9*f%j`c*h!AprgW5l~fC0rUw#%Bt92qwMM~Ei8AFurL2@0q8hn?#FKU$pa%g+BZhp`eQYIIB-c-Zqdy5p6B+V569Jo zKtbOGZ_U-Za?(FcVi&xxhONvm01WP`l~pjlKj$dtL?pN2EdT0(Mk>D1N1I4q;RQX=rHK z*XoDQz*lk@$cVfB`kRwC86L#5ml@QHEMtbPO->dqGXZ>t)KWliu|5736TmZUX7o&k zO=@ZNHCZ7Wk$vG0UL=NJRa)k;zXN_U#d}g&JDTd@J)Sb?{m@SPq}1_8iikXs)aI%x z=OMlgG)Onk%+y|nobP2q0`+B|R9{)o+QVQuFYezI!5ibwMg(U#I!wJf>^_;Q#-n-5#Kc6f(U6AsJYw-~XslzM^4->5oRio-S%F4@ z=m&6kH;Q+)i$yd-OM_c5h~j{BEKOCZa%zzymEG5mS?RMP2Bg~%@G`jo&t4AYaC~wk zP77T2B>i1ruBH7SY?P&BKV zfL>>4))FwOsF`9yb1oYhGe>8pmk9gS!#`B=HDKWkZ>+5WiP$9a`yX{Yb*|x7}!FLiCoAN4ia!%`8 zuR4LqisPIlW3NlVHgb1#ytf3!xDv3UglfpJv`;H^$$trl&j7UU2;Qb;6Z|Eryj8V| zFyQj7n!I3~{@xwcDqi-3zE$2>lGeYPS^+aR!mTk4y5P4r4~)&*vR+-uEMkD@hqFcB zE1fdi?Ss9mOI}!%aMRn)sQc+*y}g;&*M}=B|5$uB_OwK``t8SKWR57TeC*-q1C-a6 z!GZe~C0pse(GMDyLfOhWGchqSnY;Zv`hUL+LL}6pU9w?>^5~~dG6_c!uAs1sV>KAR zi1cwtt5@^jmu5iQpPQ4gDwl2llAM@01vnZbUuy9iCJ1*AkFzV8YmUVbZKk3mDB|Ef zO+?Bpt@G5sZhJX7IbjL`^#R{3cLS|{LZ6Ya3;p$ZL9P3776M^H7d)a%j`Q%vmV>#H zsZzZt@f@~{g=l(QydQ}}=N{0C?@g7>x+5p+k=SUPvKDpgjpM;R6K@g+ZgGh}y+_i( z$zzd+d}dWZn#g2MnYftuGed%nS;KjEFZp$EUm7+fB~Weiy6CWP@a~pF^G=A}+8PxB zUF$$NZ-vGD>iugMN!2$~d44zVN!@oRR#>&A&AZ!^`F1w0{;pffVE(*=H=FkUr@ZG= z?LG%jmeP}xFG^Z{7_|o+QGas)&}40cN=gMnD zz|6BL-wYC&!vM)fM7PZDp@TYCs;b7qj*kyB7V&s7W6kp$YxPI(J-PKiek9u)TU?A5 z9k_P&WHhP7D6dINFr3E__GGlQwD3ngGOZ{)@v)jhPOROu@x!ZZ1jO<4JxoDSV_sGZ z(6wV_P#&J9rWN_c4^kr?u@NU3f4v_Wsbfuuj%eA-=k@M(cS5CuGfb)Pu<<@juPYr;;>-XRGEi6J3I)KE=^4Ktkl@{ z*oe}i(-m9>9R@2cDNX6s$TGE?tHEc=U|~ntP#MQ98Q(Kh%SEGF%axG>3DNC~*ooQs z1F^J&@yzR)P-(}lCBKWZVc5Bhz3q$KhApuFowD2~xi~KO!z~?O zv;kWWx~#tSZfn4eYxEQRYWI_}&ip_E9?1+l?l-}lqfMX(S`OE#qNe8xChAGsVlm6E}bUyLp75x~9>BZHphy(~zcblEF*h7_oC4W8%M_I~)Kn_lb+F5lCHx@$X$Z*nHEfD{X>9R7!J2_JuuC-VS%R1}aMTz4>2Ny65${P54n{z5Ih zw3Knr-1I$oP9iiUQ?k1j1!{ejr|!K9Ag^%8#P`n1l~4b$d6pi;at&TOf%GQpu3;uPERg;b32hhME_JHu6>Y`ga(beNZAnE^?$q~lAbnHarVn-S!%Bn= zB^kUPh|7-mZN9p4_aA!NK+0!~{sCG#22l<_e&}1BPpzel_T7%mMfab)&Wd+m%skUc zma+J}taI&WV!zuy_IwKR3=)_*HKnK&gf7_EyF5_hrs<66WMOenwZkg1 zsUo!o7*tC-F@npqD@I3P$+Y3ERP4Rb+Yrwc#iah=$VUZHfT?fD2NEkiD|PT=iR{k- zP=roq0(blylGhw&nQ!x`D0`_|DaABZOc;NsEU=X35|6l;?~SzL`egvDR~k3Vd$3qN z?bUbRHd#^*eDi7u;11TTdrb)4&bBCnLJVRV zO+Eq}@_5A?PMRoF@qUZvMFWDX@)fs;qVGWJBO{}SGCo8Ebv8ViX%Z2VloaF&lh`4@ z=*-KLmuG4AZ5HJ1XxG&K&f<$M8ut0;Zp}A6mBU!ppfq$^f_E-N02J=zxqr;&cNTBb zmh_YB@^=rRF&l9mgIQc!SnyIG4mOcfJD!H2Y3YveTRJUH+efj(uuZCq1YY0E5(#Ll z`uAv44s-9pgIH}E$AK%6eZ`J9Y%^YDYh$Cc!3m9FdXToH1;g+)%Q6}QZh!-B)oGSzJl z$grgj_|%dz1Ot=(xyCKNzz~i751_vQmdt`nraJx`)51c-iZ2ua0o-EXX5NAv(wzbg z%BIm!6@p}L#-_aSWD45CXtZt)^Ev^RnD~^wGFyzYT3_`lee+CkF{eD(npCODe7|lw@1&6z-^!vC!_j?Lz^cjaB`k2GnOp`-7oe%3K~0vl z%Z?7XB`PTy>F@!2<>=}NV=y_!``4YjBfbIw6oK-65f{6A5nK|e%E4lQ$J#_ME=m{3 z_w|_aQzT+Ic|T3Zb#WtKE--A+zpsK;@Fnj0JzjgHwOxJ3S z`;qm9%Xx$doKZuS=yLQXaH}tB^<~Z?k?+?4kORU`*92LYg}?9Me5r1QyC?PUQ@1By zOty_}-MQR72hIe}KqR*#Ttw}4F=fz}hxZc*KqcV^pk(whJ(XH?9K=5DQ>G!?s}Ud% zoQ*?wtVA-%Kk%Pi4a@pfoCieBVaeK~_~S9+ojYm~$8J!fQ`#n(E>It^*OO?y-7(55 zSg`s$<%LY*^OA+v4?K@%L`#MPJGQ(=Rrt?Zch+vAGbeeqK%1Q+Ibavzr2B zrT*Xx!H@c{HLCn@`WBy#h`8Sv!>!!dpGqO`Zrn zU0fns&Z7XXMvp?Q@NB0b6Sp&rdJXfBy*{X43O5({PJI1_9FrgtpiqgD$C1Q{c57=} z7-sk$1}7$pr1=$(`f0G(xS3&Y-IQ?`LwQ+}-}+#p6A{Y2d6giu=)!#NYd2GISSGO; zSjN~GYRejtoA~5rDJ5oc;o}6_$+J& zCEx(%1M)@3U-RWSbyIH`lz4A8N1Q2q4qX$jUsy(apqf!P)50U(ar4GJ3yVYPWWZKl zrj?YWxjJ83CYhR4e$U(9pKJ6UUg;b={WtN-ofZjaC!Sose}Cp5+#~_peGbX&Twr0k z=ZJHgM(jj6By+@iyms|5rD&n+rsJRw5`6Svr93>fJw0g6Z~wReu*{C64hM)AF~){l zY|@vFEglOhe>0XLa47#Dt_MdySL>TMqI9_~uSt0Q)(n=ELQjea7qlKpYJQs$ysZeE z#X3f?)s*%ayznj)qadEc_LWYP*_q49^Myu-v|d{QHK_`|&~>`HToUIRQ$e-i;^=H| z+O8i9KBwsVmNh#uCQOM5!AgiS*jt`R?UJKTo+UF#-kF#cXup3_ zXYt&g<0@b_^Dlr#xWK?74xVOSUIQ@fg0EG*6m1urPT1M0A~bm?8K=x*nRk|EBFJ$E z@o-PqX-=w5w8=O+JOZ}bTVUd`GMp@X7210Bhp~R?F^J0>2w64L`@p}P1W2gdxD@ev zqB*naqy5hopZJpQkcTSSwO(v7ddPJ!qI^X&Jjm8g*3S#fyj(R^fP@ilM%~07piKbw zMlC>duQOD6HoKwpCR5lEmv8mlOo){=ehJqegE^d!$?Hr0eBC>Y>bAdv!_WpQYM%g6 zs7ZXMO-fdpleXNv{G!E|*v}K=;K;s&Y{ffxJ|1cT+!|*5_7J}B*-WC>T21}PK8O>LY4M&5b_VDu`C61w785{h;Q1OAfPD_xH??e)Zw5$p7y9e<3jP#Ev6AFt8G~Nr0UavoG;4 z0WxrQ@iT;zZ4g2mwfyz=gm-MFMqJB;jox6jto8qxYG41~Y$6GI!3 zd_VU;!S6t7`YhbBIl_K{lAFX`+8o*7?8y8DKomXh!kpg&;q>2J3f0zmMsmotmVrR| z{|Zz8KL@t|*GTDqkA(SO@BZJyYxL|<&+pwrML&RG4mj-3?k2LzeVx)5X9+z7A4Z-K z4O@sDmu;XTA6mtWFR3XmXy=Stj5&4j(F$X&BD!qrDrNvGJP>KmyZZA1v!zu*Bk4~z z;RgY_4NyQrWZ*9OuCc&O4T(<}EgycLH`av}`gp03^YM`)4TId**ZShJ?D>RoO@2KjU`}4r=vz_8m64bAZR;zzZZy_`CMZbAYt#4qK7Ek555xIDB3= zH;D6a^kSx=>yv1T7&~wudOA0zb*?a^Dlez5Mq$)%-*y6YeCg`1%YHzxgPMv8-GejG zw!_@~{4q=F8Q^`1ySXg&$bmZbwiA53Fh&{9L1gxEQS$R!;ZTEIXS~m3*K=Pz7r-hb+@L^jf z9%in#HDzT}8_pcsVXRhJv2iYU&gbU7SX2OW9J9dm3nclD343vdRl^DvQ1=WZzye?( z`c;@=N2q&!*5w7$$(YlAT;;NKklf9M5gCGKPrRC4&wKXV5f)OQ{TE$yY@R;=0^H>Y zQC)@rqfru76i@G_TEId_YC4JgiyWK@4nOVauUsXCngeaT=t9NAmsQm{&GiLPAig0* zStXTD?jDB#T}W1#{Mx1~yuY98dF*Emm;T%2(n3N)wuT{6W1lzPzI|)oxX~Sc;(SfD z4dl#dvIeRO_Bj0jE0>wd7k7O^Up4!`dMZr;+iq9-=GsfkDvZjWp>=gIsJCqa1QVQ} z%&ov^yP=`Y-$Sa&xK$1mHN>~&yqUzl@UGl9av$IT11eS$8(oj-XzDS`l`)`c@llk& zEzQOfNW0bK(7{pv&Tz^gC>`SL6zk3lXh~96`={QRL#{*J^@(uCu%Pmm-99W9{QZw6 z=Y7E>iM1zHL66viFgG>&81K zQz4Jpyd?XDhV~6-)%wd>af1_$IsKK~>C+lQ(~dmJ;g^?5VOc_8!x#EwjNt3v@$>ve z1*^OOL=m!+Qtpz%#@`g;KzaF|Xr?9DvZ*9fW@1GJ*^{!?mNNIjAHpk+DLrfLUS+cwo+OPE z3-#kfo?z$x$g27_9sy81c%rbfl0T9(nn}Waxh<=!$RNm9ma?R!%>H0*($dn>xSW{k zOP7uC=JpnZb|OV|z;A2di7M7@1FZqu2nyg$`(kq^fjNCnbHn6Fss|&ul#Y$^-+DtS zpc5FlbG5Rv06BD(?l09jx2KJ2dPl?AYvW$o#YShHJ zHYdA%z1~EMm9SA*MdtEd$#hM8o`Tc8AOugeS;)yr=UBwPH0EcoAZ*u-Y7Ngx@MKtA zS)pb74TSDC2AJW_$0m7J?SG2t@l$PmKMd*BTu5JEH4NGOF8Z~43A;;(I3>0D9Z$Gx zW@eps-Tp|G-g6Kg@D1vttxOd5&E-MkLt6f>m_}8SN5kr!&{ zv_p0XPV}^IAIv*|hnXd&h`;;N{B`|1B`axhRQKiS<6y6(+1><~vRjXOUk#kQLNc4G z*X$|eWE%w(5isxlPEFDfb{(L1+pJoF!5o1%V{P931~=+5w` zS8l>|-I5W0=VKvhSFXIIx??)te{<~qX*<4>Pe&PBwT+IPX8gv_e%JIMKlFD9&;;uY6HYO*Z%_?cHD~?%tRlnwWbNzN zJ&tW#+DbNIV{iOu(`4tXgJ>ze`$ql+4Q?Gp(gICrBc+rcIj<*`RsFLm(81#CE~Z^Mf+HUv*OdOV344=!_WeVSll9qQxJ4Q1 zLA#H|{&3LM(wV)zFXQ7MW=!vRZZ>8JilnV?lZEMc?G&@|Z*xmp3Ou=xi!0 zF}+H~AG9-B>2Kbme|GkO%et#^A7_6?lHMM?PCmR%|L)Rh$--_e>lg5=QRrWeZi(1| zP7yxQT58ToH?-*!chjCrtmK(9*6X7h1|=8r#KHu$tWN7Cx86!_JCC`Z7Gl@&uA*Vg zTIsHZyYCgr*X-J9CiH~1Q=jTiUa@9vref98{P`9YuGeFGkU zKIQECK6lu)5E#SxG|tXG-Ae6hF3F>;w&;@dICpAuxlLOc8E?*wLEAk3zj_@ZyItZA z#sW4xf;^(1(;qii5{;5ND_)@mCDJJIqZJYx3%~Fs1xn^BNF0jt)ZcD#rWaF zL7$&wo8y^%^s`rd7VXSOup2M2IvU1tR(TV)yqgamNl@<`q{PSDNa#3c@=E3gq#}H^p)3#h&-aO6wh~$q_6rSw}pMgQFw8X>czuCq`arD`CV`v`MAB@Fzv*H+3r(f<_oIP7?7n zpK^1rN<_yh5V+#L+43T)$A)YV%-_qVy!a}~A&6wq#yl<3)z!U`ig=nQla<|CjjC#B z*#Gh6MOavvz$w1oHZ3vOx29e^_Ox>iq!Nd z(19S+;^5dE;qKs{DUKSYrKPHL`S+4}aqqPc|GqOCp6dMN8%Ja}5BueY>3(+T) zmlUrK@vDLw`;@-4s!H!9Umcqd6OT*G=O_UxvACr1Dxs9D(_O~mi$@NtG0Sk+4idS# z>gutO@A&r4;bCvbqB^5l2Zo39*fJt5yeHr2gCzRFcqKxeb6;;t&n&rb9UyyUyJXL>2n;3YR{?z#oDysK~Uno!quMfNVKfU$2 zAlMlFjSbXwqR8pP&7t2gAYi{ef}yIaO6>?Z=K4WVY3URK3f0t%;y>I%Zd>;D_PV*b zJvrP|E|&WE`kp@Wf7oLn=9aH2o6a4c>J46AUjF6(sW<7KQ>9n!s5vYx|hMEsP&Fau+{I4_8#x={lJR0g>4~*Q}EmTLVS{$a>JIEIiw+= zRm(j2&+S6scipsS3zvKEJlH4D{SY%CfF2Cv`LmG!YnkO;Ne7iQ^;k`=-9rDWp_8%k z&-lT6v>YYE!om#ZDprY!YM{9MwIomC1`khH9nh0F7kB;{zPSFQD=xA0&Xg?lFjmp^*_jpJMpI z!7=I;6a*)91b^Y#Eg_%oSH{d%!)K}xVk)@%ODZ(iGpS#>^6JdJa*Qol$a_0O%I_gEJ4 znL$nnVYl3(%6Gl#c-11(r+!=9rt=mpj#6 z$GohJd^SUbU3GBI3gTKjNqCMlCXNhh6U$ZLF?l}>T*I~EGuB@{9>i zgHpMp<3LLi}gd=J~Yv1tNIJKAfj2a&qQBgmblkZm_elhm-XpBO^0Ce|2mgxic55 zE8VzNQd(ME>;{9R(Z!^)#xTrxLgza>aNfZj8=r#bKDLj{tG-ns|03Jc+4WI0Ki7LE znVq-FO!7}IDlT>|Dz<^J=d{YmRM*sWFl*e1t8lJ&kvMbO2GYn|CH3yAL6WE?8I1ng zcZ)m!hFZT@?SPj=e3|;GMPc(w|IO@g-y)->s$6#0nFI}#x4uRW`hLQpR=#;{eZ1qu zgvo3UGAuJ=vZ}4C%U=)U^%|?R6VGJe%Nt3l$FEILmLe1AREUo?mQmkb{|T^C4C3X! zIx~Lj>0uU1R`Elv3h43XtF}}u4!??tEj6txD=Ip$orJct1fWtRgRJ+LpiHlG0$sj;=sbg8+S|UA?|oM{gS>0ovF6Nkuci!pAWzQ5O;hv8VHPY# zu!Jc}qc+hunkUVci(sk|C0$$U<`%Tu{^155JK5lc!w3tEJzw98jN-ep6>ZNg_(!9j zd`XUAZ#$H8>IN@aA>G+Ejj(+^kfIrz;GhCsP1`uNr8w=E#S6Q_E%-R+3l<)&C7|eJ@9zvSZ@;S^mIG(dwZ3 zTkCToGCF!VF%gfi#pCh1=Qfi?#^f3rGFVv;d08!1@$ruz-Q*8;xmOdI^iH4QL85AF zYcZb+kvF`Q``8B-~5$G(5B_8M6)`UgevdZ>+g2{@(xzc}UVD>f1e3JMxsw!XP3 z84U9BlFMvtwXRbZmNSnZK&^FkXOXM}olF<(?d+>T12r`;Sof+)DjJFGVP}8V={-0k z>pIi0^5cui)kUc?_03mOZq91<4jOuT^94GJDv0-zk}d?8`Q`;5Fz1#BBMX`IBqZfi z*#<5mpFc-MmvA=vVn-`_{$!TmHgHJC%h_#xbWFCXlwf0Lljy&G4ufA zo>$K|eHT4eOm-Cx_k?{w6f~FJsVXdJSl;`?yHLFX6+%w0Vq;(KmmxiG^<-O2AJO@wv~6?9dQh4HD3N zlln*6UV1iw&ZLSgIM~C4`OT`_0m-&GaV-7w?7}TzI>GRTZT}&tVVK#7|(w^v61EAeM>%MS*@|9 z-?|(w{0W^WPTh)&3k7EpmOHy`=Vl~RU|PA94y(2QMX^-vMVVGO$Na@Cwa{WVl+ob2`nG$) z=@xH1-#sn-D^CV1JiC2#3ctFwbgFXAWtv!qC&Bc$+b{oxeFnslP6;%vt2`1Z;vvqJ zb&+W&t7gP(kUz!digY($o-#JJ#$w-oT|Uj%E!LH9n(X?8lUqK{681s6yI*=_pxTc{?6DD~ZN{-zjxzYxzQydSeyRcl7cN zzFOJp=Xk1xJWXNSiFkWu^YVi%av~DR^ z(2lda@;eL~Ki{;;$F7b0pvnuevywSerKznAii99Q>$aKCle&(C_S;G{+rzF`^uF%q zIMwDPK{MfG5W`_lhOF_AJ${+e`uL>)a-Kz!R}cmRBEX>n;q`J+Kx;qUe(0oE_w8YO zy_aMuY0l;5Sp~qNzWi!$c@@}bbjW&6c=-w(>S~A3|9;FPsYD(?tpL$FyVB#5$ZT}@ z-mOn7iq};ttE$eNIkNyh`@s4|fc1J;jZJ&Yu7h0+yWtgTs-f4_R)#zec_5vSYwP^J z9s%U)Y4z~A@S$N%59 z$lswNs>!Np{7)(bgo`qaRu42z)xIOdU)Q_3VE z(&%#f$2K7bd#F_+&9%RzF`&fg*z5N`tE_y|$7uuUDR!Z~BAG&cH!R?+xV?V&%R;t{ z(-XCB+?Hn6e4lc-UzL=+zS??c*}#+sdFpCPYcL$>c4MjkE^5EmxE5x3ZJw9$OjS7` zMA2FI(;sG<$IE?yxbru+w6WS;Xyc81s~@wxyy8MT+$%q?^=D_RpY|T~L!iHTTw5A@Bc|NpA@OiWfq_m;Xue z9C|b3F)MTPzjfIEZ$rlV`Ze~w@CF<+GDSfYAf(=;dp2J6U#&vVF2Z;8^@qB{jX7nb z)4DQ7D@8g5p1kghJQ5{75Ufq~&b)6RE~K(IW~j1~9VIea>(c}1S}`80*|ya4jZZsE z+y-z~I>n9eSPuk`w3YkV1N|Bm&Nd;zEM+hINT3}48!+h1+A6OUIaoaD?wGLgODQ!4 zoFFapOdbQ@y-2Zq?X=LD5W30DaE0)5n1m#=Cw;KnlC6_zWmekhQf{3{CxDI!*u6G$ zXY}hb_2b8n8(IW(^k0oiOHK6!uo*Bqk`wOQePz%7clYH0B%t&$31XXY>z$pQA11A= ztY#C?O~Ku99pSW`;|(^1O!G#3elI}}NK)NQObL4VF`Np%YA*vulvF2S!++zq#O`S7 ztA|VmXJTSsi56e?W8aQvLu3mPGw+T$dpba*>8$L)bICYSOK{{YQ8G(Okzjs5)1}QT`o#p zUVcGMCnF;z^%qxbujsp3(i=S>*~R*rPb>NU0~3=6CKoJMS673VK7?bTKc0FSGmN5+#$6Jfmfz~U5W_C347;KC;5_%p z)!KRgjV}vOIF|fw)za~=LO|PN+u6nx&+5r5vsVK6S7D*DVoEriS2A>RDH%CBSSpD2 zzjmQh#Kb&+mzJ9QSp3(jiVCOKD%tNZs)(mVxG@$t@>Ssn8`{R|C8|iZr+aq-s1^{ynSi{f4@>-Pu>8m~}EtQrtCj75vr$xBC(* zlqGYmL@eOmo_1<#@URA(E)4^n>|1-9$fj}Z*aB7iVXPi}4XLCN(bLa~f{uNnKsq6$|cIY-hMBr$)73#7yJx%T5Q2l&Q+fIYR>?C0TrvVgolEgt1=gLPqQ) zZz@-NP{cWJC%`!_fGY(UQZQx`0Ls09t7338zchGa$ zkEGmjroEM^;JY4eu5Xh@^B1}XB+4EzqwQYu?#9(`Eqqv5}=&sPQKNC z-fGFOs}#`gZ|#Vp3ZdMW&V+i>W{;*^gWDNq>bSYPI?ETTlmRe4%vxnFk<+G=Zp3A} zwUb$la$gJ2`pFq_WgbfZ*bv5}jC?`u;zB#PI+o#|=b^c5dq4X7p_VLWR(T76k$>Wg z|8i1#{jQyF&o_CZ;0+!bv)X|nq0ITPh!y2jLg4R`dV!MiHoL}si~<@X$-6z zi9&TB8kF=HJZEE(ixyyw^mYP*F399n@f6mSUg1&#usDY}fM1G*q#W-Cv#yCFor5c+&h)YXj7e&%z3Q~aZzdCCBAvZS{o@d{K5e7_BZfMByVEY#igAx!Da&_ZW zs^HSl*7j9ZZ9AZ0_gfwH1XOl>@LM5Myrcx6vg{fm$@|BTZ>D~-8OdBz@Xd@SWSPj> znb@g0I1oPM<>_)`Mu|iuQhdU1eZ0b}4gdq5CG%^1e1cv`^73*y`mml2To7Yj?AJoe)U{jiBO-f8k$h{*VUvyDl zUw?|wrIK5V5s`Pe;f_!4?0i*yy6XM=Pr0QbL#aCg#P64tUl>;|t){P*c>C+fFOv#u zN^LrdY6OTvy`a5^P4*aXZ+q9#ZCfud&7xO_{N(q5@$Se6cXu!+y<^OucoHO3Ju=8q zk0lepebBL%W>X0zUS+mqoY1oUSOFvoYOY|hs}mzkIxH&C>DA5ycr{Jcd&fzjNO41q z6t){9^GQu|4tW8|?6OM6dH_OUzQzGHvUaTzzgEt5kk$;w#X|B>0;sR-?>{5bbP*O8 zUu)GlT~4R8cYl>l^1DgqU~^Jpq8UC~bD)Vi44@UW!0rz415DJfUZC{+BL1Y?M8}@H z9QmOo?gBG9D=1Nn=jHiB8kd}?8g8#u9NjEB_ml?Ag}`30&*BEPFu-6DZQ0BAURN{M z=aUq?`I=w*t~C4y@r<>a-U)LFQTRsdrRk2zF$bx^p-2hv@hhoa;}jewQvi7@nZDy3 z^L5Z=tp<$hJ;{7S4Cd$Ah40hX2Fw-G-({WBVGz&G> z?Sru53(CtI37J7UlW1yxKgm3u*ixnrpt9Q@Y&*TEw*sE+Xv6)d&1ygf2ecchE2RDU zoQ4!vdn6A~>JL4LW3pZtWL(_&KQ(xPVs)>@-g|BHeHr&{B|N5^ZcK{7zGne<_E*)* zchbJAqtDCcL%DwQajjE_75jN~)vB)=IOdy8r4cveKq8Ogw;NYXmaxkj)3#OlHs z981rU3{HAjx0V4%sNdGlI}Dl1;pSFghW>ID6;BZePEA7|L7As>A8d$0yuClV9NDS`VVXC+V5hzgivPT;z#g5&W7{8qL(On|M#7-|BtwxJ5+#%a| z=N@_&`KPO(^qMbiB;uLQ==k{TXmHxV1-0T+E_)VjMGC~njpw0kxv);|67hY*!(0v? z9`5ci$+sLeC%Rn@l`1Tz$^q@}QZ+e^6}&#N${<`#SHPAq+OxE`f2Bd%!Ro^`X!^}8 zKIFqYG8|UC%Yh}x=ng-t%=Y~K(WZ|@Z^e{)^#oBABSS-GcAqog626J8*-5>7eBxou z6R#&~0ZqYA;(NMg(XoxT<8KE;Pqu1VL0VUxG(uE780;g%CH0asF>L}By1TkezzXv6 ze(BT@!asZVG3(%sKAle&69#v{LVf8gwDf*GZp<#$ptK?ipQ?Q%s+ z2d9VAVg>`iX=UQheHU`9M19=hiKZ?e%jS)Yb+HijTEa$=ajVvsD5uIZ?++d8z*N4S zB4ASiW)D;Ll-h@c-LbOza%#6(ONOIoP4!e)VGWBXJW@BY6lNu*iD$U_v~PrK{!xUd z*uErMQ4%H~`sQsVm4ij)y!;bu1kowB2-{3!%rhzHqehzzq2Q z0AK72K`|(_9y0y6_@Ue4M}aSUd8(#vB9#`%6R)cmFP=SgS>KF~+?G4~bl^JJMhp@c z?)(-kE;a{rsY^ePFPJ)IdE`fRq55=^}$Q!2sI@XP9twS!u;3p=X1G=+fNk{w^bpa(F&{g3)#rvm~`P(o&L67+)RL9K3WT2H2ml2;a z-stA;K3!pBNDTdUVO%HQ`Ju7+g4+nfX}r47v!Sr?my0E3Sha^+H>N51uGViM>vt}} z%P4U|Q&ZDoe=Et%|4U`OHzgw@qi)7?gbunrpek_fc9*52iknP9nzUDExXL#9mgwpI z{e9i|OrIg9Okpaj$IA%`iJ?n*yXj39j1rQPSs^;4$g&vh z>+2gIFXB8xbzOctTP$?4-n(2qBuEz^^+gZDqF)Ok4^T@N4S>y-gZcy{pA_pNnwQR4 z62G;@mW(10%Q;!~Y6?f6((|J##O;wRa!)NjvSpN53=R(`E~!PRIBQUeNz_zVx96uk zp=#!z-{`BuDxzF&t_pZ{ajzT1#I2~+h5Ra3YQBAV62a-3FseY^Y~~Q0=?n=|hhTPr z9E8}tw%ATVhy1cc?0C#jW_2FseAzv`5cNDGmh(rK)XbZgCT5!FQDxFME3Q!XCt&Ux z6|eS((V?C@sWq(T4%VbKy3lRCA;*owR({7IT6Qw9JJS!=0XbA5?2Fdba=B~t_Vz`& zn^yUnqnSeYiz%c&ozOfs&T{6RX~gft=%=Gvo1sluyu!Nta+IK9DS34f!NT4rEh{^- zH6~hOUN>7HNSuR)lD_5$9u9W)k-Qu*u%B-)sm)e8m_6xOKraz?^ovJ2)xEP?cFwGf zc&rkpT(W|C12mcQgQVH4Mf+jEo_V>Q-Tq{6#d3Go(8AMr#-l^sn_WhE*h4h1qsLOQ ziLyLft}gIPZ5(KVA8!ez(2;PGa!z zwEPz2euQRsfVqtvv8Fs=sH#ly%ac8y5#>cD(V)%Sd*O5rhv;XLFik+UH1oqO#osk5 z87P=EEt$Ol%f8ERy}==WxeT7zX6e;b!`K&<9TD>ey7$;1hnc))87p}0uA8X5wnE^J zpr!NoBUC^3Oj1oB_%Y}>}RE2x8tc)mhbu?3@h4O-XtSMlnd#{eTJc8ibOJEjGpBM1s zC?0k@|5qlU)%KiKo^3-2GFe=Gvf@B@dN9M3_ZsX1U39_6)_*twII_1V>gYiV3i>(TiW zV3vv+TnonIEG;UYyjd#%k*P#Li5%>W+GJkTY0@}MFQU-3_!H`EN zA)mknkydd*XEsx|c09n6qhfjOD3C>HO)@Mol72m*47VNvXrB;DD$k@iKzFkd5vu(p zW9XV=$2YP^!Ud4<$(heW9K@Ka1Wizg%d&n`q^=f(GcCvMWm=#xd}u+eH|*-n9N>4A zx8LflPFUKtAECM!;p;u2LYK{H9^7}lJg}orBb>Z~IEZ3y-Z&o7BO2xFJ>?Yym8Iq9 zq^5^}N)*01qmUkM1^EDBUzKwZ{kmk5GlDM~X=<5SXe9zUshU5!qtVy;g5r3(G8eoL&TPy=cT*4GZu^%_&8?L zz7JZ#N>twNFoX5ukF~>sx2VBo{x(=4aJb8Z{HR1iewfMPAdWe7m4}<< ztmVAMm^S{EL%O)jYr{kJ{we(kEK!BH?cWpxDjZ0^qH)Ye3f=)h4^;y70 zV^?M4yTG0?f+_5=gV-|eD3+NKc1@ksxZ7E-cP+kNW z>o(6^CSsSw4P9(hfk;!b4^3UZrv7e7vHSToVL=xlI4msKkwWV#Dg^G@YHIduXm@Vv zlms#62P-QtqW=zHo)tmPnz)M!2_buX@2rK$$kqXQEAv|ze&ENCDNasK(^~f^n}S_} z3+Yu%+jJBa)x`{HDXGChj@xVH?{>2po>=fuJss%Rbr3%SZq3tbv*@16i_}H*>DQFs z9DCH>((@Da!@(hn9+)0XbM+fHsUF$3^t5NPctR}2pZ_P~YX9YO!~aFi;3;IYv$wx{ zEo}empWfHMld2p}Rv@am@bl;Et@?diJ|E!3-u#ezjpH8x1>jVjJCI{$E?2rA*5W27 z75~?t7pceGyO*tHrM#AraZ~d@Nc63%eW3E4oIP8>wl>~S_36{~R8pj^@7j36VTh_g zP(*;<+!9cUe}t~Of3!v~^gln^vqpMtq+S1A`Oi4jXh!F9LyNT@{I)$vKirveo~T{B zdeyFfMes03dd7=@k9%N+XSR1T2E632TmrH>6=@{W+gsD9t8zJ!LFABW3=I#1WKLC6 zlUbgIfT(Dct+R_uJbVabmtXAARG}0#e>1?IFSc!pMnRv-W`R;~4x&o8Ab_6!nJ)vx zwXS=z!DX>Mq6jl^>mq&6DL$|Fi_#_tE7cO|Yl4CauCZlO5|YE^Gh!fcWr?V$|LA>y z{3~#E-^!iE(o7=cm00XcIUD;w{+8-fk<}SU5YFsbYi1tjdGkyQbG^84x|v{5YN2Ng z4E~=H#>T%|oXlM{nB{$!Evf5x&d{3Xf_*yb(TmRVHQW?O@B&4N>lh87XW^V`V&YHJVhEz4fB3Srs7 z+`I4i(2%sgzVyz{&M(%@dQUZw%iUagM$H8$!Bo6y@yXY8EwV_f4(5-^m8GUK9ux3f zc+oYQHX&ibC^|KJWctqct#BxXpa4RYC;U_ZN^dw=E{45qsDV2}OU@1}o+Z6OVT$&r`p@$NEU$z&WwDj6!h0X4IhCX3n zLH~V8Q}8zs>nhai!Yr1X)EuB1*9(h_*}riDzHA<_z!b%tF)=vG()Dn%%3*|jqx8E1 zXM#>TB;bjfnw?!J2y30hp&G;Yy2JkAVQKW*)>c<@K_0&kYEUvi{Q&5nFHco`x8Ml3 zxa}+vU#!kL72e$VGcHO5zVW<0a{hIFh4|^#58ubffsZQhED^JIqN=hJRGrRpA~CuD z`E9utuAPwmt#B-Y^5x*+Ha2cFWeIyqYSRiLN6Si;raYBJol>sFOc*-fWEFHZ0mftl1MtKIh?Asq1rc9~&Hk4^EuvE- z6`pgF(8LgetXrTWZ4iq-&UTXWvpfERh|!^1?+uaBbX9HgoVQsSF6W-iO#R1I0u2l# zo%k=woXQXnFU#UrvmIb_m$q-Uq-Id zKe_c~)S@;I^BKh6{MJWV`9!1cS?J((I8=Ts`}5bIFEI4*-AiXNRl~Dm-ty1y*6tzp z0@1dxQ861e|0@m9nL`P`!*)2&`q+toEUZ+dR2K4s0e~P+buVfHS_dM||6TjjHjmd$ z*4nDy5@J|Nvio;nTlS+ z$o{yv$;n9+N_S_^9$;a6^<-iC`NUpRU+kC{oY>2!#iC+kVrOM_!(Lt8#YHm+q||~M z`A$-`HEE@!q$DND@+#y@^5nF%crKPr4M|gLCn17CM0~XhbxlA3)g5s>69p`>y(yc( zRFM&2bl9OEC9RyWjIl>0i#x2Rw?2P9Y~bU_^7E&ytdtb6Zsu#>5V%Kitrj#n5zE-xEZe^41> zE;W6qBiBx8&WI@}a0PCBC|X{Ai!+QAUb=wHm>RwBFn9!_bf&-Fhh1i9IOe@<<F!NW*X#slgF8PbzK8Ftzy+75v__W7HbAMd3@WXM{J5%2os$%7VY__iSg= z6Y4GfzZ_R>in8lL;UxNoBorF6SuR0Sj4VGgA9)Oq+O6F8Lb08K#*e~8hMA3j+$mpx z<4(ZMl5R=EiIonvV=(tWqBQupa&F8JLB_YrWS`QCL`GhJMJlH!Fpt4#pY~mv?wbp7 z8>O%%Da}7Pqxh@tjpFwO_%rRp#~bEPPQ`J~&WWdrha6mVX9;%@5D=h$U3iD>9E z2$wmB-U8k$hkfgXzs!+2G`{R8+@ddO6!^fb2WJ zxduG6!-K&SV4Sg_`76^Sc{-&Woruq7XR4i=&HU!VegdJeY}?A2H^X1>7aGZZ&zA6R zoFC^Mw>oc^GeOUyZS^6xhKeQQ)ru18C>>w=GtjfibTi#d^|+8G#TFhhj;^oNkE+?q zb|GgJ(;uHW;m>lSD^#WQN=Qj)EcW%8{F)lIZK~+IZFsIlTlI9u2KVcL7PhVb$d9+> z7LCQ8Jexn&`JF2ILE8@3i2JjyCsPsjkDdDvW3>|x0vNn)A$&p$5s|E&D|eIVr3zqpFeh=pL`Ku>unY2}$^01NjFSQBcC znMwiuA5SrK`jOaFS{%)EZEW<`zKkEMso4zD*WXF?Spl`g6aF&g+Mz<&Nfm7XqyzaK zmBFLJd}d{OF%NU}NPG77_J;;?_naEYi7U7{FI;zjU~b-Qy^xwvY*21ilb4&T2CjVQ zw)EwN9v_*4`F8+H*kzI1HQWPdVxYcLUa`w+8B^zzfcO~%Ev~NKHa0Zh#IsKaPb{j0 ztl`SKdwbtrp`t3xW%G;_GOt`>;3j>aD1#1EJLwTzHV`4CH22X)Kg+q;5kQ0MLh-dZ zrysl)Ubon+WQLNfvI0@k=x-=g;I$= zRrbAF!3&Sv)}SOJ^Mv237I8CzFY{nFmeSnP@?nuzH!|MIjAh zgdq!4+j7`k;cKQz={`|?|5#w!RW8>xJ)g-@T(Ln<;$H$}t z`rFe~f(O)?Gqd*QGnIl6_#KbtomcF@N6Z*~U)IpDaHv4=tAuzEqAbbw^EPScHHEz# zvU~=pJzDl{vS3QE^D`MH#`_hq!H>oQG+&-Qs|JD{02|1|ITxKb&0|hpmwtXDG6x;9 zilNh1sXRV~b*Hoic^qs^?GnX7sBl4)(Adt5ptNygr>ho?&Rn)6jmy$;$`AS&Mxi1? zYpmvN4h1?(!htNvmCQu}Jr?UfVM@k(knawDzSutOS&?Gq%IWvx^Os{Fq>W%Z0`hwo zf%-It4IP=7n;(rXQ$-F1Zw+J-@O~}aX*uoO6e2p4If$ks45VTwL%Yno8seJ?coN}l z@3O^~AC$c~cCHol?w1mll3(wpzPq_@v0(_^TsCZZ_~UxN$1`K&O*u_fRn_1>7|OK` zP9Fj4dmxBZc9PX1cp03XX}!I<$PgL4O$%ns@Tv%9sY^v+)||Ay3mvu8XJQ743V#43 zd0SXw9A{dJGFKEAQ;UJ{IAl#7*FQe)JaY-e`?Rw`7~Va2ap(B)eI-k|l@dw!Kx`xV z*DW9kMrgPDZpc)Tf_HaRo?CmHwAbdD%j+yC^Byj zfyG;ev`gXm5i%Wu&GKEJWMZECJd;IP)r9iB0 zlZ9@v&k#}TN-LbfTbI?(W*F+m?og+-Z-%?5z;u>T(hW&krCF z&RwvKn5iy#g+wB;!t>1%cpRdu3=W9(>zt$M7j*xnY3l9mb*i3Ag9FIcxxh{O>44bF zq7Yne<;p?F`bSzY3G3j@>trMIZi`II#T+nXZn&rJRb?~S9d5Gt?tTKIFkFB5n_SbSkd+A z=EXx{iNNh&fPN6Vj-wFAA&DktOEu>#ar0T^E+De&NG}_%o_RNFA%e1GEcS-UpLc(l zR1V##g%nzEBY{GN&QJ*YQS3N>`)oxXzq7L$EI~JfyPTP{X4&OjP=C(l&D`1B0+WR% zhlSU1Fo+T~LN;Aus@OlsS0&0%Xp2M)GC56YM-+8g%b16ZigT{`3Z>4oYI5u^?~c=t2n1ZLc~z zA#Z`taKMcXpoEt}CmNx|cnai!Cwe7l!6v)b%n<@w3 z7L{?`hvMqkn9T|Q;>psQA9-s*iRSj~jybdg*L?)4@CgrN;ZmMA03)nJKOqE#?wR>J?(=L0nVU~#_|35EG}TRRl#Mj4 z_j2!j*Kh%vvDvI-7GVx7GW*KC#nOWe>4)fx%Zfgo9Q84rJTiCGP%0Nc5LAuHI~ zOVbZ`Di+i}phe}B4fOZJ1MiK{pU7QN+8$!b? zcMa!k`I=>;tp^Qq{FAeQsaFAi{Dm0Mg}^j5c%5GyjmXe%*)PS`)YR;f-CgBVAY$H9 z1)~=PbAmEdtzXHw1{P(OMt?Ge#K=UdLWOyCC( zSwx-zc*DubiFHyZVDD{0xXb8Uru)rn6P7i0E4A&a4Wn`}s;Ay-YMUQ$Z?9HQjxOAQ z-ApCWx+mmIdtM+@myuna)4+Vh8Qfy;&U-2*H!1UHf`nh|P*%s-~ruqg3!P{-JS83%)z&9dp8Ip6c zK8L0T8Q32y`!=Sg6ZtB*uo{<<*q>6`Bmqkm+^<-DU%v#%JIfhPcy@tV$dKgxO&1pz z4welgzw;VuI*J!IFVJ5zb z1+*#%iDbTskB`R;@rTfPaTP<9w`O;;Vk@3~P z>ssP7d%Q<^>%(prRe;kww$D=_5La7)j-`;&4C(q z&%592%qe*gb652dUJJKF(1~rNe0fF$doXVcj&npO&4e{+#AB4@g}?lTx%kb!&}9bh zl)jMFmU8I)L|PqJGpniV{oOt~=tWr6x%|X~uU*PMB?xp?GAwxs`f)cfH-I#61{G4I+R6k!@N`E-_Rr9VOE8W6cG-CONia z??sx6bj{ZE%l)0^u6z0T_+*iYNd%>X){1l=46Ene-1Y^!8Dhjdhm>MzQD4vu3Dz!P z3EVr6NkSKaU@;q&g~)Ac5)vWKvzM2bdo1m0D^pT*wAU?ScVEdO){G_uL-$m%X$tu( zjCW*1HZUz+I^1bVyQNUl-MOv9Ohsp>I!J>&%+b}0DGQmFF83dcik*p)fTOoTPL7#& z-KZJZMw&v_WAEL!qpTv&CoHLfIY<5;u9Eps^fU+;K4dIvUyy`%g+1Q*@ufWs#E5r; z!ZLYAuF~quI>z&HPM>(P_*QjDX{~Xp_gW5t|2c5isi=6myfR584EXH!=ikl!W`Y*q zhvwo66$T2}fWu@-NtC@cq)il;2`A*o1~<)+qC_B+rbRPci5FUqVC1JC@>A+=Ktn)g z_9?=yA*YjaSAn_)%1>&6#gOGSWZP`+_R8kXa}$`I=9>V^Jh@6GcF?~3zCG*(wKF@c zf|a(YFG5WezL$OGeA2w@?JVN}#SY*Fs~~&g>1tttU`QDq;m>iQ z>5sSPw;Ecmi8!;E-Yh1u8Wg4!L~EFnxqV_b+E|i-xt808FFW(*1lIjFh=|mLC#s~^ zi#ec-u??GRB#{y>i@8)8pM&j7q~$`ZUp(e`X*j-Nq-ky;ysoEdp3V;n5MzvRCCtaL zoDgnk?z6z;IjfH2jyfR*&z>C;u4#FVrgfFj?sy5 zr!+en-TK(W9U$eopM53~+?dszgwZ8;XFI#OpPycw+vgJzg6{RT%w$LsN^XfpW_*!x zpZs~_2$g!uXaqm}zEpNQcMeZ8p|fsb$K3B-N@bQm*hiQI4fF3bIqAk&E9tB{zN zo{}c&T6{|^p_>lqsFf1q#`Vmg##B#^(%CiHrhO&Z7UA{T26V$gvuq0~!vpFv_Z}-P zO??MVFW~Tmls~4t2v=APYd-D3u|)tOldU;sQm;ZRM}xxT#;|P5 z7L#bhfiXH=)=%3PpWMzYI8Q}8)p*`*q9tc0qkYcmuGwqJ`yKL1u_q7bp9W5&F2`?Y z1olcuc@Kt8J&eY1uGD|Y(J=w_r9*V`{34v~YX%Vmh3-yaDUci&J3AC%hEUdiBbzV| z_nANh&rk5|Z*b;^zJN!sPgT3`4{GFmZeOsZVEkqXUt(k7H_l1q^)<_x-Aq3-+-kA*XcRni-=@m~1iTKD zDCe8`72($UGsPW+k8+qh!h$INSsK(p{DPVIRX-v(vCjmAAgHxpTRb#0RC#UbRKNIj z$=HRlSjd`HUiT4fJo#G7G**1zfVEP&u6Id!c^B*jb1UGXVmY$*-F(eU%7wAmd)T0n zu`|r=VSq+&g7JixmMY~Cs7_VDmeA!v7996-cN2CE^-E1^@ZEe_MMY&16!+jRnuvi` zbFX~zS8DG*l3{y%Ct^Qa`#J&xne zvTW4Jav3$NNh2>RW*O#Mno@bw%v}*pC(F@93c?L>a>le&S~O=Svne&VfKf!$L`+4? zb`Cyd7OLh{cp~>|J=jh@56atIPdRyzTeOH`{w${=DqY4mIv^ocK=j_ z4PF^JRY;+jsA}wmYTE|J^+;BDYKafF|5Npjq|~S0*wh$}o1r{ixhiJhJ>hrevI6B* zgjV+>Gu3l5U^Zj8RrxHIt&{>PzFwl~Gr;y+o{=Ta^B&u+kuh}#ym!ln&H61^YlS3P zAvbEhjJ-BDIDaJZg81jGrG7X#)4pH)7JwL^i}A>vS{-cZ6GVaF6w|}dMX|tJoVqXz z&Z5oZWwf}7O|nC;_4(vIoSPkE8Hiu!Q0R)KVFlh5Abf*Wcn(AlhbyV zGaWp74=fiue^oRHw)t=(WwNdeJ28x4OYyc)>y@GVju?B{iEh{2f(1+T+H);~%-0e& zo5d=hk{nQ^5oat&^3ohb)7J9EP~v+YakW_$RNt`J)z|xUxbKUd(~~AApE>SZ9iwc5 zDC(p-5LObsL}~@bBs$BU$wc!W*k`}(m*eGV^Jvkr03(B2iYcZMmSUIjZV zrhhHnx2G*a6l+%V>^FKl zpQbjo8gBUd9Wm@*PFQ(}U{+Qc)PHHqVOLgG7R;*1r3_LKX!goYv9uxSQLI&&>Pifk zNR(Fh98Lb25JJd5Jp}+-8_C2!_yLv73?_xh6TaY)1J#k{_>`3(Is%aT7o)45$M-XXCRXOUVX_6b7 zuAoivrf_keNX1+IU8_+=Iwj6cb4wHB<4^hNCJIVmwtUv2! zUn!Vhs_AQHpl|9z#^z@msG*5Kxx4G(4kT)5XmFPAhWI=`>?Gx$u^cV{m`>@gso(EK z1|3WZ%2hP-zYqy$#&y;L)ghYG)>rOw(F@OLl5BxQxBY$Z)c?yU{kv~;q&WjO^MO@{ z!D>uw0y5ZAe-EUN8HX9))7=2-kU)0)u-n1SCyVBbtc8t6hmH5xLGs^4vsw*bC7sqW z9Z-p;+&4ga9avn-T#E)pA3v%!6dyy)V*7Qljk~ljSbQJ(z4~}~fzjL6vbQ4ZFOA`| zAOEw0->BfnqhKH&&3f{zU}ZFs=bE9 zo-Of`L(-{Rvq9*#5a^KFkDk`Y-rbsq3!-wbKOe6JMic1G0T#MzuCHnDE^1v}LTlIF zzg9|SFo4A^3OLlj1D!_W!PAn23Jo>k549_PS8}I*0E$4WjFF6AU^LD1;v~V-T~9P) z-o?~JO{M{_Hx8Y@@EH*ncKK2EP~(-cJ4k5%k(WX2OJ6fHS`jcGS}+M$Pa zOAEG)&TF_7O3}wjf}sd-RHGAS%{I<2iicjki1?xCTi$0|({TDdy>`6EwrW(4h2&M@ zk^s3ccC4qw0|v&gx93;^?4Xmodk^q0h1l4!`x;V+%1WZJ3g%7y)rw)R&u_%pmbk7p z{X5p{xZ|joJ`u;cqfw@rcVk9aIGLU8c5E7wd$X;rUCYEzXZAA8hpKNhOM&^c#1oC} z{C+#1JYHK8*p7#Jt41%HL$kaL7Pe3mCdOSJ8An~aW*t3xGP1(Y#|JJGm`4p)14~Q; zkU70RPL!Itu2;Icy0>F)OP5UjaZw;UAe2&Qm@|)4{46guE(wLgK_^UKX&-@ycLPe` zn;35`)N%(*c$QFH5DJd&0DJ@l1{XZ+XeGN$=o-%}|@6~Nr7qz$@ zHZ?M`uV6JLtC_Mv#0>drDaoV%g&!b;_%i_>Wq z;$0JOB6Zq@eoP!ztP&uP`JM%A6FBF5ob#z2j7|us8s0u ziKphMlNULOAnM6sDz(F^e226=Ni0B*939_}V%tm@EWE|b&?z>i`Jsj}Sz zd7jkQ81;KFudW8&te`Cr_Ht)r{TcDd#harK51qFHF^d?C3GBuNOgrAO*m*~J8?I$O zJlg}7zdw7AR_lkip@H=Lh|ce1a&4Dv3!C9v z=$@jDX5PqSZ5$@-kD+ybFME)_)qzHvpX18cOZa8;D=a=-UnI*%^YS(Vx^s@k6Ib7G zI?{_s(y5>+d{RS45wT2OW;^|52V8IYhEV==krTSEYG%%{vo5Dy*Hbdq^aP@*Cdnpn zW1{?|bwqy$(D<6;Bg8e)x0sE-Nu6hmTlM>Uu=5vZ?$hx4vFomN5qju`PRoicZoW(y zbcyq$^E&5eP*>3y25^ zNRueN_uk<~|K~jCIWO$WtFlXV#irh zawEUKD@ZasSzC*OmosTW0I-VY($)PTp~GDQ zR*{}Jh=?$EPB0*ttfL;O3b?~x7>kFVfZQk@**0j=UI{1gCi8C|VMa&$M@J6{VQw&Q z{c;JK-cP@x#{kaxJ?y<%^d{x|y)R->CpTm7)I9whv|`ly<5eA3o2l#^ach_XTPjc$ zQ95QFp?4k^5HfZeTKl};su_s;8fHt`uRQ(?$3dyV3#QuR89Xe!Jk8#H-;pIpt@ z@Z*oWy9=Zc4i;caetR8Is4v+V3?f6c@TZh4zvhE(_PI9Rj>&$ZGMBIJHlx1yidPg* za#T?(%g)8cWgB;GZQ<_R6fIxm=C0Vh5cU@L=2KG*b>~ii?nuk?BqD&+SS8cU4)Hu? z91DphW!DocwN)7W_&W?e^d^M7qS7TFGb;lCU8;r0kXQf4s>U?;E$k6M2k-!QBqbXX z=7%S1AA#j#+8cD|cV@)hKv4Vad{LSrsaTDyB_F8X92;%qedoqXnO=euP0+O4Qt(d- zM5`~K@kFeK{lHFr1dKO=^QR05^;~)?#O=HTtSZ{UrDqDJb7Tu-TC)k2Q7go3v#LLP zo|S4i9tGV^9ARVm+E(hw4Q{a$kEdbx3KPAxW)sqkbT<@%=H0YE)p*hTXsnbRvA(;RN&=B;Q2kxfrwLHv5qqR)E)eJ|AAJ}Ce-^n3Rx zX%3$fweT{ zSk)x;Y6|HjP(Gpq(4A~i^Z4EKU{x&fy;!~*LrGsHJi!Og(7Xh@xsY-(OoZ4isuGE}HLb0!)b<>XMg%+q3eEiA zE%+SsL#NoOr)qn3$5dTXfmk&!1R}3&m&m)FFRQRUd&4F=HB8YW;YL6;*e~5F`B5a@Jf^cOyWjn zw?)5=n*j9Chu}5!{D!O$JjFhqbkvyAh+A7awA&)c{l(0KwR%)Vg+Trx!sU>AEhS zN3$2}k%Ebnk)iQq;|?IXhw{=b?Q?7GvtK?58Kw)?zpCSAt{8InZCS6;`Y`$nv46w9 zZqkzdBW?ypR*!N$F2VUyo;CeKM(_4fZ#!4<2W*Z3`{eLkJYP%i`H|)H!I4^X`z6!~ zNK#Hl{_-^&6`PeE_C!?f{5W-WwK42oR)M+D<1a}vfq|z-r|S(sv05sW%Ra}$xo++` zdO~b<0I##P+xa$7>@&&**a0igNKZHa!Q?~$1Hti(+Gh)cGBW6T>YSIRF5Zthz`clP zAwd$2YdqSKW3yqcz{9>LD-XV$CR5tFtaGnD5Ob4HIbR%Z7p!!-x@?5o2V@a8R1E_e zZy++wjrIKIj3xQi)*t$3XPdv+96SOz!}NdWz=4jx?5{qbw|=s#q3njeY^`bE{$}*? zcQbq6x?M&QiR9>@a)||y#X;-5hqx=K+pAcF6>5o<-=gaLBD|)l`c^0K9(zynXUh!; zY4JXggf;Um>wp0D!0vs(HW$>l1MOfIBZD^}%ckwP)dI&~w*_;K=5%-i>Zr;y@=IsT z!I_e>x9w|g*x&x%v^-D2P~=7@^rKyENSam&gnt|d2Q?^_-=RW?kE@PIfAA1?enr?y z3pS1n^fQQB5$X(&xfu@Z6nUK$_ujPJI))tWyx!FGwa1y&E%R6(RyN}ID$^-HH#gVo zQJgt1FYgy1j$alS$;ike8PAB0CFZ4979OD*+K5P1Q1CTI%X48p0=-|{6oI@kFHKP& z+K=c4?$O7fgF3ECP;E@8l?AY-QU^;)wJ~EHJ|i9U=_f$q+m@hl$E;t1)Iv;ds2+zb zB~*_RloDfP&Ug$8m@OjbdNA5_->nSRY2NG~luj+=;*hKN8ta~?q^}DBrNU#{o;-b3 z_x3qhle2Gutm>Nri;w1uR}g96x3Vl_O{xMB%n`b?#><-{-_k=W(ZqA_cWq3KA=38j zK^pnOCaiEljW8SoDBs72rn&GL4Yr_U`IE5NsGjz1Qvujdhx!VxSFB6yO9PQ3h z-(Cb%OEt2&xw+lDv`Mta`xKoPEcnJ4(<3Dw$*eZOjKao$09 zKCZ|8o(&`6z0I3PwiF6lVp! z!96b6Vc+b! za=qC{SbSIrzh?0?@hTli8bM12ScON&KuyiHicNO5=&jUKD=Qc_WS$z@r}H%mT-=dE05J z1L?pc@vrT)G)l=gTp zHl@$L_z8KWU{m_?>y)DnGf7(Ji7W8BovXb~QDcm`@J9r$dYdH+ z^dL-Xj~oXFu7j#Ve+c4q5xz^Fy3_FdUrZq_fA@dr;x9v-Rt4PnH(C_`FZB3-4lw$B z_cW@X+peWT1^A9M8g-lP(`oWnBEYl!qtbd1g`^-aopOn^!cch@MjpSc0=c052+>L)9d)84~&vWJ{5U=cs{%qbcM5`RozU9~eWZ8N{ zx*Xe`7zOp3+~2SNe1}mZe_}Qc50q*ih0MvU>6Ca^&W2Tc(EkS{oCbs-YvO$X!}2jq zj|p-l@Lg|pr~U&8NBFwvq?l&})Wc)*AaZ{or+;yBRtQ*`na!cs7`4cV;3<}z9AU1Q zR&~_7BHGS$&Y9ezpMBhBdn&2x%F-$WF{|x7o={+ed#2cjG}p<evJ|H#SyF zVNJo32!4h>0qFSnI73EhQQKIC)1qrK(bn49S0}fl*^SXx(L`H&d&5p1;f`EW1Qi4L z2w;x9Lyh-N%B6ruW0p~+B-5MJa=f`!9a1?Y0ow`E4DL{v8K1ZCZ5NEzR zn)S>SYWRfmYptq#Y3GPQ-hYqqPBf|J{K}TzeKWYILgCndSSKGjI9F!^54^l=i=!1k&YuQ&ZY@t{R7u& z*_W_l2`Y?WndV?XDsjWv8<}Av;yDV2R8mPx!}#*|_Cf-AIi;Qek|WK}lM=_)={;J% z^=|7LVGym+C34frU zq36RhF%-ojD)Tx&DZ2S`BJ?)5VuL~eJ7@B+X4=`9=r&53`fI1Gf=Z8b;ClMhxiO1N zwo}$zwFm8?=0euwLviZg!@w+A_tU#sP@j9+L$UKcU_n2V%zc8nyP>|ZsGKNv&y34!RO)J>Ru75`x za)#R(dt-yidp|q*JR@$3(cAmvLmFvFuZxh2*C*Tjc9>FBx0}HFd8bt1lgwjE=)609 zkz^=3P#@b>?iLf221V<}HT<=~gZ8avdGbdI8H6%qmOY$gU_EwW z4`Wd3@8Kb)W&!#+dPr%PTTtsAa196`7kRW*rt^*k(RN^N;ZJ#B|d~wi2J| zszTY{6T|9E>kpzK$L#?#(}!KuWgw&JZX zBX0m)s-X4_pTJBu96~f2W~Lg^&CQ6I^Jrp-czp0k0cO^BtL*!<)~skaJ$wuI5+`TW zKPpG&TwZ-fSOnUD2?*^Nkzh%QFq0FSe8*>$T(tY?ja{Osz zkrE~r#q>>~XP|$HOb!Ez>U6jS%;>H{27kyjP_4tOI=G(JTCr%Z?Yg-^nP#(Ub&r8R@ky5^9)JsXFZu_>>W|v&Xqx>Gm zJz2onl4nTW8C#=2Dm{{%(zUKyZFWGF9AD(i%2$ZIf`J2-WG#A}lLfZEz`etsy~uF5 zq-7CgnuF#ZhGC==Yc<`#U83KCENKN3GmKf2f=3z!Up-mBsS4O$=B``(J}eKJv}gg? z<=V4;GsxhpaAehl-?DCEw`2XbzHU-22Wt<97F!4QT#8E=p#8q#$N3Gz6fq4E*(tA zDBxPKPjR#qbNz_m6dY)7KWghRr zfZ0W>?RbsaQIHJ&p&ioPW98dsY@X}vIBVihU<*VW+-S2W`kT?u;eS492r#;HpV7}7 zzd9`1|AOqMklwm*O~!Jne*6TmDuja(Oc9%xFtG2%BGXG68RYy|(dnyPWL#J}%Cnt$ zIkY%hH_3KOh~Yy?IQMYJT88c!QRRD)MpUvnlHLh%)>igYj0~;2#k_m(u5WjFdqIO2 z!t@jO-*wp@0e&%x9+Gp)c%|rMA!3 zPE8?_opwlwOR1hF{Lz?F&DSqTS68XH&K6x=eYz{vi#qv+*OrC`;)z%@dQXtOTRpZf zpK`<~X)Tiln`>*ktxRGI_P$48n7cf`pHkx{Y>z)?+q2@gJ3X*hAmO$xp;?c^{_D+* zSBDIxyQZYJYM$YoY3}t^yfO-Hz;wvXr>;%R-ZH>{&$Q8YYhC$17oEV#oV@wQ?WlCbn`giv~H_1M6{*73w(@bVa^;r54(dDX*Ss;Z{a6x zp;azzaFdGoYdIHd`vlOt!RL_MQ9Uv00}r;{$Xj{FxEBV|E10S z9n^oMy8qkaUd$yfTG_r5)I&RHRj8oB1Q=cVTH(pVXE0)`hLo=ogHsdOE6J$StV#i`TI=1Tds91Mjv zh>#XY>&^#r9pz%?6ly4`rYI_4QioN9z}j|3vAlO^m;A_ugT)$0zLPkC%j1mAWSK1V zF6@skI~3-2);UBd1F17;kZyv;Pu!G&6zHzEV`%w2QM!#*)UyKGfp@*X0t|Ume4)M1 z-?459m~V8S>J}M!qOeAfqH3EiMBl!w2vZ~;2NsV!mr)^Kmr0Z4OB{wuPu8>XuM4_3 zO+sQV!j&CAsaR9-YpE`}1Z>Wp_w{Lfm=yY5E<3>R^uE!|&rR}>Uhd!J_*)D2G5GL+ z-(wkNpTQwoU&wl4%FYyD5A* zeuz1l1WuZW*Sybre2^m}$V7g4jKrB$wL2FPfQPRwtYe5WjHY}&$u0|DtG=;(lsU3M z6iUl&Ny7M72P^izrClz@q)`z0yxb9Fa-{$@t@x4d11l!Mfe!J9Mo7hsyK=(Vjpcok zF`EpZ+FHitgG&B-O*?WLVw4FV^j3P$x_KfWC4(Uqfa_Zm#I}ASm*Ar@BKYU#(R&Z& z(q_ixog4PmlLZ}?RP7nssdviPdo1k-1S|a0O;aB9@80$L2z2AGl{dhU9GammWOmjI z^e5Q^ul6hDug-F=FAjlS?AMop*XL@avRA1)3lqEB*O%gQ4R1a;q9LJieDJHQz0I7; z=~f)Irl(&@iya?MT^wv&95kF(PA~0z6SML;+6In@xsmtytP5kimq5^*C#cm3sF>J3 z@*QWn;y@+;4=NP18uSFs^`(FvG2%5dW@9pOU(NWK88s+YJDuu*HF_;C6zbg6ly`A| zCjaHHZ`jzyfJS#H|9Zwmemg3Cxqj=8=MuI<9SvclwbW{_b2h$>EgBrzN0wer{%#kn z_$se9(KIL~pE9Ne8r&J{y*|+h7GJ))j749a>~CY}na%3|Dr3_aJ6s-uxILfO9r}z` zR$1!Jwu-UX@wbyaiJQL)(DCp0YlK1Ts`iuepdCxunQLlTuE>?2>o?)OUSYt%g%7yd zkOtdc{mdocwmq>nKmC9dU`vN4^KFlJ=LgtIy4NlnwjBu-M&d*bhWZGri4P7Ao+Enn2c!Q((Y$ZZY`<~pdW!fEoNzXb zcSe&!L^fN2$Y84|=XtW0vZ;%flw<8?Y@6)u8OG@Lyq}#aIV;J&-G%_avf-teEd|Fq zDFOnnU=Wjl^I;HmU?EmaGioHZo09y1s)#2^w%?$nj^P@nM@KiWRO=nHN;>;uuQBq` zV9(;href>z_H8qHNtMN+7_++4ai)!@=eEaRLI?fm9?HJ#D#{V2bb8}z7;B^}Cp9?D z<7{rI*5Zw??bm#n=(!+`gm3kElui(OtyFw5UacunRY5dWSIB4KLBA6R0lbl zAo+o3TBu(J6=N-kF26NB_So11&~C(V(n(d+uwxfb?Pu4v@VShSyKgGX(>85qh<|DR zl3${cS4)KOa_7uqfIn`r^#H+PfjlHvJo4Mr0P38xi1EPP-ruR@&11;fCI2nv{C6Hw zRiQ)arccj^&MRJ&;1ZgABYeSZnx~rVOQ~6kw9VPT-7}zx@h)A@xCwfT=n(lEtB)?G z`bKg2et1nV8+Os*ZYdo(y+*gXAbz~SM`PH?ZW2h3Zkaqw`=fjQ6P+IYg&dq3`X{y# z5&exxc^rQ^0jG}c^<|t81=g0xn*CB@nLSTySco_OTepA3WN(MW_jX1?dz}3=HEk=%p^Edx3wt zK-x`oJwQkfJJqpfe=*9NBj+ls_^x)gp|jiuQA!fSxKeI&JtTTHLCC*Hj@jNw9a5QY zI6!*!g;vK7K+3Y&nNNu-U0{S26_urjg*>-_hHGBL+EV=sfo0oVx<*|u>)%kFY2UBy z^t^i-HU~cnY*;H3xI z1H2+hR~RfpVNVyVnS-+UWm5#AXHU5JNpT3I!|S2OM*EEV^q=DT0gR{6e>`6U;cp5YC=8S z&aLN7kp6R_-UH^y+hw`qttjln8d*p7X#apNsV6SGLcKeduFl1T56vbfdQP7`NbDhS zAi|IAdRiS8$?E@kQu_PkInX%KocCe9`3~6$>6u?%Fd(YH9$LcL!X28Ry4X=YGNHyz z^Ayd9wwTwcV!4w!QRWalCEz5756@y*%i265a(}~fECHIJPW1r&7#;_nP!rK9L$yHH zTh)S0T2{xiXX5ybMKZAj@%LM5i|VXHIF)MUs(u<0Cg6Il!lAfs88jld+LCL=G+MuK zj7*zpg(K4s9zY#Byi4vBYzesED0xc--({~fbN)2B-x|W!O}btS^4CP;1+lv4*3Dx! zvxVP!RMW6(2MXJS?SGTl5_wzs{=z!OtYR!0G<_RqjSaixx&(7=)P|_F;AU}QUT-HT z>mByFFEd?f%CgDpbY$BDKqgPAA2PxN!CediVItH?6iiP$3ax(-D2^nYKRFS5&IN*# zCewj(b?4u@i2S&FV*3R4>Arj$!(0rLY&ZXm%`5xws<&`meK;f17Lmc{U5++j7YgBp zNAv1Kdz6joPN;j4;@w!I+6=H8d-t zK1gPNgQga+22me#gjZYZ=(7DpJ`1uR0Vp*_MM2c_&{EiZ<_lb#4*tY@eQC%c zSPr3(faH^PYu!KF`=73a{_)S8Xq>$D$7BDO565k2{moCpg8$|;|Ehv>>Zi84=;FHV zuR!Tqjg8cD|9cu}2X}^JaKOj0+qgE=E)rDjx_A2q;!jg|k;XC;Kn8@1qQ^l1$X&}j zUqVVL;AV-Z$HtK;RJwLw4Q(-vp)FcrPGX}=Bm_K5>)O~OetqveV=#tkdJ%4KJ7_+`qb!$K;I85YU$5;1ko=oUz-RWF5N)%67tu)&RCDQcat$Y zZop=6nOuiLUxW@=0ohrk3e^Nj7M{qj;&`IIsxal_;hk5%nkC3vZus*4K+J`>&wDI5?ye3Yxayqb$Fjk+eD&4 zd=Z;q<>Sl@VBTQNWA>?avvb~^zP{eRzBo-sqFYIK5x1@{zhcbI!`QFyd0(6|uUrRY zPs$7*_7P^VX^ZZ#(Tqf8jz%sE|FJWNe`X2iF%a&jz=@_M=;m z@_7;|Sd)|<{~Y)xxY8e!t*mv}KnN?VEv~1cGilB+@r4v0C$0I**4DWd&&}cak_^tA zBIM&9{O~2iMv@clFst-5p~+EUeo)W(sm+vR`N4PLUTf&*#Y` z1+x326NI}bw;%h!ugA$7)`(p8!~4@dZO&!M-t{w`eScDb?{9bU)%HS&M|*I5o4&J~ rq0lVT^v`j$4><4h=u!KFE2;%a*3gMg-#pyuH$1f`+Da9VErS0KAIs-x literal 0 HcmV?d00001 diff --git a/ios/engine/KMEI/KeymanEngine/Images.xcassets/keyboard.compact.imageset/keyboard.compact.light@2x.png b/ios/engine/KMEI/KeymanEngine/Images.xcassets/keyboard.compact.imageset/keyboard.compact.light@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..390c853ddb95a44c3aeb1d7dc742731a188aa605 GIT binary patch literal 26382 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 literal 0 HcmV?d00001 diff --git a/ios/engine/KMEI/KeymanEngine/Images.xcassets/keyboard.compact.imageset/keyboard.compact.light@3x.png b/ios/engine/KMEI/KeymanEngine/Images.xcassets/keyboard.compact.imageset/keyboard.compact.light@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..2d97178aeb3f328680a3c70d96aa9a3a81e33d80 GIT binary patch literal 20449 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 literal 0 HcmV?d00001 diff --git a/ios/engine/KMEI/KeymanEngine/Images.xcassets/keyboard.regular.imageset/Contents.json b/ios/engine/KMEI/KeymanEngine/Images.xcassets/keyboard.regular.imageset/Contents.json new file mode 100644 index 00000000000..d5ce1d37de0 --- /dev/null +++ b/ios/engine/KMEI/KeymanEngine/Images.xcassets/keyboard.regular.imageset/Contents.json @@ -0,0 +1,56 @@ +{ + "images" : [ + { + "filename" : "keyboard.regular.light@1x.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "keyboard.regular.dark@1x.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "keyboard.regular.light@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "keyboard.regular.dark@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "keyboard.regular.light@3x.png", + "idiom" : "universal", + "scale" : "3x" + }, + { + "appearances" : [ + { + "appearance" : "luminosity", + "value" : "dark" + } + ], + "filename" : "keyboard.regular.dark@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/ios/engine/KMEI/KeymanEngine/Images.xcassets/keyboard.regular.imageset/keyboard.regular.dark@1x.png b/ios/engine/KMEI/KeymanEngine/Images.xcassets/keyboard.regular.imageset/keyboard.regular.dark@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..2b404e91d9be77696d1716abdc93fea4068d0a6b GIT binary patch literal 12414 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

B&v&R{-Gd^ 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 E11KF)nE(I) literal 0 HcmV?d00001 diff --git a/ios/engine/KMEI/KeymanEngine/Images.xcassets/keyboard.regular.imageset/keyboard.regular.light@3x.png b/ios/engine/KMEI/KeymanEngine/Images.xcassets/keyboard.regular.imageset/keyboard.regular.light@3x.png new file mode 100644 index 0000000000000000000000000000000000000000..fd80b073543c17cedb65273525a24941a7b4f6d8 GIT binary patch literal 55679 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