From 361fd85f7436518afdf236c1cbaaddb66e4f4c03 Mon Sep 17 00:00:00 2001 From: chanhihi Date: Fri, 11 Aug 2023 04:20:01 +0900 Subject: [PATCH 1/5] =?UTF-8?q?feat(Script=F0=9F=93=83):=20prototype?= =?UTF-8?q?=EC=9D=84=20=EC=99=84=EC=84=B1=ED=95=98=EC=98=80=EC=8A=B5?= =?UTF-8?q?=EB=8B=88=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Box42/Preferences/PreferencesController.swift | 104 +++++++++++- Box42/Scripts/Scripts.swift | 25 +++ Box42/Scripts/sh/brewInGoinfre.sh | 63 +++++++ Box42/Scripts/sh/cleanCache.sh | 156 ++++++++++++++++++ Box42/Scripts/sh/nodeInstall.sh | 69 ++++++++ 5 files changed, 409 insertions(+), 8 deletions(-) create mode 100644 Box42/Scripts/Scripts.swift create mode 100644 Box42/Scripts/sh/brewInGoinfre.sh create mode 100755 Box42/Scripts/sh/cleanCache.sh create mode 100644 Box42/Scripts/sh/nodeInstall.sh diff --git a/Box42/Preferences/PreferencesController.swift b/Box42/Preferences/PreferencesController.swift index 60f6151..1b9139b 100644 --- a/Box42/Preferences/PreferencesController.swift +++ b/Box42/Preferences/PreferencesController.swift @@ -6,16 +6,18 @@ // import Cocoa +import Foundation class PreferencesViewController: NSViewController { - + let menubarVC = MenubarViewController() private var stackView: NSStackView! private var rightView: NSView! + private var outputView: NSTextView! override func loadView() { self.view = NSView() self.stackView = NSStackView() - self.stackView.orientation = .horizontal + self.stackView.orientation = .vertical self.stackView.distribution = .fillEqually self.stackView.spacing = 20 self.view.addSubview(stackView) @@ -32,10 +34,39 @@ class PreferencesViewController: NSViewController { self.stackView.addArrangedSubview(leftView) self.stackView.addArrangedSubview(rightView) - let iconButton = NSButton(title: "Change Icon", target: self, action: #selector(changeIconButtonPressed)) - let cronButton = NSButton(title: "Cron Script", target: self, action: #selector(cronButtonPressed)) + outputView = NSTextView() + outputView.translatesAutoresizingMaskIntoConstraints = false + rightView.addSubview(outputView) + + NSLayoutConstraint.activate([ + outputView.topAnchor.constraint(equalTo: rightView.topAnchor), + outputView.leadingAnchor.constraint(equalTo: rightView.leadingAnchor), + outputView.trailingAnchor.constraint(equalTo: rightView.trailingAnchor), + outputView.bottomAnchor.constraint(equalTo: rightView.bottomAnchor) + ]) + + + var stackBox: [NSView] = [] + + let icons = iconModel().icon + icons.forEach { (icon) in + stackBox.append(NSButton(title: "Change \(icon) Icon", target: self, action: #selector(changeIconButtonPressed))) + } + + let scripts = Scripts().info + scripts.forEach { (script) in + stackBox.append(NSButton(title: "\(script.name) Script: \(script.description)", target: self, action: #selector(scriptButtonPressed))) + + } + +// let scriptButton = NSButton(title: "Script", target: self, action: #selector(scriptButtonPressed)) + let appleScriptButton = NSButton(title: "Apple Script", target: self, action: #selector(scriptButtonPressed)) let etcButton = NSButton(title: "Etc.", target: self, action: #selector(etcButtonPressed)) - let buttonStackView = NSStackView(views: [iconButton, cronButton, etcButton]) + +// stackBox.append(scriptButton) + stackBox.append(appleScriptButton) + stackBox.append(etcButton) + let buttonStackView = NSStackView(views: stackBox) buttonStackView.orientation = .vertical buttonStackView.distribution = .fillEqually buttonStackView.spacing = 20 @@ -49,12 +80,69 @@ class PreferencesViewController: NSViewController { ]) } - @objc func changeIconButtonPressed() { + @objc func changeIconButtonPressed(_ sender: NSButton) { // Change the content of the right view for icon changing + let icon = sender.title.split(separator: " ").map{String($0)} + print(icon[1]) + menubarVC.menubarStopRunning() + menubarVC.buttonImageChange(icon[1]) + menubarVC.menubarStartRunning() } - @objc func cronButtonPressed() { - // Change the content of the right view for cron script selection + @objc func scriptButtonPressed(_ sender: NSButton) { + let script = sender.title.split(separator: " ").map{String($0)} + if script[1] == "Script:" { + if let scriptPath = Bundle.main.path(forResource: script[0], ofType: "sh") { + let task = Process() + task.launchPath = "/bin/sh" + task.arguments = [scriptPath] + + let outputPipe = Pipe() + task.standardOutput = outputPipe + task.standardError = outputPipe + + + task.standardError = outputPipe + + outputPipe.fileHandleForReading.readabilityHandler = { [weak self] fileHandle in + if #available(OSX 10.15.4, *) { + if let data = try? fileHandle.readToEnd(), let output = String(data: data, encoding: .utf8) { + DispatchQueue.main.async { + if let outputView = self?.outputView { + outputView.string += "\(output)" + } else { + print("outputView is nil") + } + } + } + } else { + // Fallback on earlier versions + } + } + + + task.launch() + task.waitUntilExit() + +// let outputData = outputPipe.fileHandleForReading.readDataToEndOfFile() +// let output = String(data: outputData, encoding: .utf8) ?? "" +// print("Output: \(output)") + } else { + print("Script not found") + } + } else if sender.title == "Apple Script" { + let appleScriptCode = "display dialog \"Hello, World!\"" + + if let appleScript = NSAppleScript(source: appleScriptCode) { + var errorDict: NSDictionary? = nil + appleScript.executeAndReturnError(&errorDict) + + if let error = errorDict { + print("Error: \(error)") + } + } + + } } @objc func etcButtonPressed() { diff --git a/Box42/Scripts/Scripts.swift b/Box42/Scripts/Scripts.swift new file mode 100644 index 0000000..96323f7 --- /dev/null +++ b/Box42/Scripts/Scripts.swift @@ -0,0 +1,25 @@ +// +// Scripts.swift +// Box42 +// +// Created by Chanhee Kim on 8/11/23. +// + +import Foundation + +struct Scripts { + var info: [(name: String, description: String)] = [("cleanCache", "cleaning cache"), ("brewInGoinfre", + "brew download in goinfre")] +} + +struct Script { + var id: UUID + var name: String + var description: String + + init(name: String, description: String) { + self.id = UUID() + self.name = name + self.description = description + } +} diff --git a/Box42/Scripts/sh/brewInGoinfre.sh b/Box42/Scripts/sh/brewInGoinfre.sh new file mode 100644 index 0000000..c97c200 --- /dev/null +++ b/Box42/Scripts/sh/brewInGoinfre.sh @@ -0,0 +1,63 @@ +#!/bin/bash + +#42Box: https://github.com/42Box +#Author: chanheki +#Date: 2023/08/10 + +# BOXY FOX +echo "" +echo "\033[38;5;208m Boxy Fox, Brew download in goinfre" +echo "" +echo " ████████" +echo " ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒" +echo " ████ ██████" +echo " ██ ████" +echo " ██ ██" +echo " ██ ░░░░░░░░░░░░░░██ ██" +echo " ██ ░░░░░░░░░░░░░░░░░░░░██ ██████" +echo " ██ ░░░░░░░░░░░░░░░░░░░░░░░░░░██ ██████ ██████" +echo " ██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░██ ████░░░░░░████ ██████████" +echo " ██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██ ████░░░░░░░░░░░░░░████ ████████████" +echo " ██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██ ████░░░░░░░░░░░░░░░░░░░░░░████ ████████████" +echo "░░██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██ ████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░████████████████" +echo "░░██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██████████████" +echo "░░██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██████████" +echo "░░██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░████████" +echo "░░██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░████░░░░░░░░░░░░░░░░████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░████" +echo "░░██ ░░░░░░░░░░░░░░░░░░░░░░░░░░████▒▒▒▒░░░░░░░░░░░░░░░░████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▒██▓▓▓▓" +echo " ██ ░░░░░░░░░░░░░░░░░░░░░░░░░░██▒▒████░░░░░░░░░░░░░░░░████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░████▒▒██" +echo " ██ ░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░████░░░░░░░░░░░░░░████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░████░░░░░░██" +echo " ██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░████░░░░░░░░░░██████████████░░░░░░░░░░░░░░░░░░░░░░████░░░░░░░░░░██" +echo " ██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░▒▒▒▒████░░░░░░██████▒▒▒▒████████░░░░░░░░░░░░░░████▒▒▒▒░░░░░░░░░░██" +echo " ██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░████░░░░████░░░░░░██████████░░░░░░████░░░░░░░░░░ ░░░░██" +echo " ░░▓▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░▓▓▓▓▓▓▓▓████▓▓░░░░▒▒████████▓▓▓▓▓▓▓▓▒▒░░░░░░░░░░ ░░░░██" +echo " ░░██░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░░░░░▒▒▒▒██████░░░░░░▒▒▒▒██████▒▒▒▒░░░░░░░░ ░░░░░░░░██" +echo " ██░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░░░░░░░░░▒▒▒▒████░░░░░░████▒▒ ░░░░░░ ░░░░ ░░░░██" +echo " ░░▓▓▓▓░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▒▓▓▓▓▓▓▓▓▒▒▒▒░░ ░░░░░░░░░░░░ ░░░░██" +echo " ░░░░▓▓▓▓░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓██▒▒░░░░░░░░░░░░░░ ░░░░ ░░██" +echo " ████░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░ ░░░░░░ ██ ░░██" +echo " ████░░░░░░░░██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░ ░░░░ ████ ░░██" +echo " ░░░░▓▓▓▓▓▓▓▓██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░ ░░░░ ████ ░░██" +echo " ██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░ ██ ░░░░ ███▒ ░░██" +echo " ██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░ ▒▒██ ░░░░ ▒▒▒▒ ░░██" +echo " ██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░ ████ ░░░░ ██" +echo " ██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░ ████ ██ ██" +echo " ██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░ ██ ████ ██" +echo " ██████ ░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░ ██" +echo " ████░░████ ░░░░░░░░░░░░░░░░░░░░░░██░░░░ ░░░░░░ ████" +echo " ████░░██░░██████ ░░░░░░░░░░░░░░░░░░██░░░░ ░░░░ ████" +echo " ██░░██░░░░██████████ ░░░░░░░░░░░░░░██░░░░ ██████████" +echo " ██████████████████████ ░░░░░░░░░░██░░░░ ████████████████" +echo " ██████████ ████ ░░░░░░██░░░░ ██████████████████████" +echo " ████ ░░██░░ ████ ████████████████" +echo " ████ ██ ██████████ ██████████" +echo " ████ ██ ████████████████ ██████" +echo " ████ ██ ██████████████████████" +echo " ██████ ████████████████" +echo " ██████████" +echo " ░░██████░░" +echo "" + +brew --version || echo "export PATH=/goinfre/.brew/bin:$PATH" >> ~/.zshrc && brew --version || git clone --depth=1 https://github.com/Homebrew/brew /goinfre/.brew && export PATH=/goinfre/.brew/bin:$PATH && brew update && ln -s /goinfre/.brew ~/.brew + +echo "Download Complete" diff --git a/Box42/Scripts/sh/cleanCache.sh b/Box42/Scripts/sh/cleanCache.sh new file mode 100755 index 0000000..d62bfa5 --- /dev/null +++ b/Box42/Scripts/sh/cleanCache.sh @@ -0,0 +1,156 @@ +#!/bin/bash + +#42Box: https://github.com/42Box +#Author: chanheki +#Date: 2023/08/10 + +# BOXY FOX +echo "" +echo "\033[38;5;208m Boxy Fox Cleaning Cache" +echo "" +echo " ████████" +echo " ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒" +echo " ████ ██████" +echo " ██ ████" +echo " ██ ██" +echo " ██ ░░░░░░░░░░░░░░██ ██" +echo " ██ ░░░░░░░░░░░░░░░░░░░░██ ██████" +echo " ██ ░░░░░░░░░░░░░░░░░░░░░░░░░░██ ██████ ██████" +echo " ██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░██ ████░░░░░░████ ██████████" +echo " ██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██ ████░░░░░░░░░░░░░░████ ████████████" +echo " ██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██ ████░░░░░░░░░░░░░░░░░░░░░░████ ████████████" +echo "░░██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██ ████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░████████████████" +echo "░░██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██████████████" +echo "░░██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██████████" +echo "░░██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░████████" +echo "░░██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░████░░░░░░░░░░░░░░░░████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░████" +echo "░░██ ░░░░░░░░░░░░░░░░░░░░░░░░░░████▒▒▒▒░░░░░░░░░░░░░░░░████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▒██▓▓▓▓" +echo " ██ ░░░░░░░░░░░░░░░░░░░░░░░░░░██▒▒████░░░░░░░░░░░░░░░░████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░████▒▒██" +echo " ██ ░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░████░░░░░░░░░░░░░░████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░████░░░░░░██" +echo " ██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░████░░░░░░░░░░██████████████░░░░░░░░░░░░░░░░░░░░░░████░░░░░░░░░░██" +echo " ██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░▒▒▒▒████░░░░░░██████▒▒▒▒████████░░░░░░░░░░░░░░████▒▒▒▒░░░░░░░░░░██" +echo " ██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░████░░░░████░░░░░░██████████░░░░░░████░░░░░░░░░░ ░░░░██" +echo " ░░▓▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░▓▓▓▓▓▓▓▓████▓▓░░░░▒▒████████▓▓▓▓▓▓▓▓▒▒░░░░░░░░░░ ░░░░██" +echo " ░░██░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░░░░░▒▒▒▒██████░░░░░░▒▒▒▒██████▒▒▒▒░░░░░░░░ ░░░░░░░░██" +echo " ██░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░░░░░░░░░▒▒▒▒████░░░░░░████▒▒ ░░░░░░ ░░░░ ░░░░██" +echo " ░░▓▓▓▓░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▒▓▓▓▓▓▓▓▓▒▒▒▒░░ ░░░░░░░░░░░░ ░░░░██" +echo " ░░░░▓▓▓▓░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓██▒▒░░░░░░░░░░░░░░ ░░░░ ░░██" +echo " ████░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░ ░░░░░░ ██ ░░██" +echo " ████░░░░░░░░██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░ ░░░░ ████ ░░██" +echo " ░░░░▓▓▓▓▓▓▓▓██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░ ░░░░ ████ ░░██" +echo " ██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░ ██ ░░░░ ███▒ ░░██" +echo " ██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░ ▒▒██ ░░░░ ▒▒▒▒ ░░██" +echo " ██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░ ████ ░░░░ ██" +echo " ██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░ ████ ██ ██" +echo " ██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░ ██ ████ ██" +echo " ██████ ░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░ ██" +echo " ████░░████ ░░░░░░░░░░░░░░░░░░░░░░██░░░░ ░░░░░░ ████" +echo " ████░░██░░██████ ░░░░░░░░░░░░░░░░░░██░░░░ ░░░░ ████" +echo " ██░░██░░░░██████████ ░░░░░░░░░░░░░░██░░░░ ██████████" +echo " ██████████████████████ ░░░░░░░░░░██░░░░ ████████████████" +echo " ██████████ ████ ░░░░░░██░░░░ ██████████████████████" +echo " ████ ░░██░░ ████ ████████████████" +echo " ████ ██ ██████████ ██████████" +echo " ████ ██ ████████████████ ██████" +echo " ████ ██ ██████████████████████" +echo " ██████ ████████████████" +echo " ██████████" +echo " ░░██████░░" +echo "" + +# Command +RED="\033[31m" +GREEN="\033[32m" +YELLOW="\033[33m" +BLUE="\033[34m" +ORANGE="\033[38;5;208m" +# DELINE="\033[K" +# CURSUP="\033[A" +MAGENTA="\033[35m" +CYAN="\033[36m" +RESET="\033[0m" + +# Currently Size +Size=$(df -h ~ | grep ~ | awk '{print($2)}' | tr 'i' 'B') + +# Currently used capacity +Used=$(df -h ~ | grep ~ | awk '{print($3)}' | tr 'i' 'B') + +# Currently available capacity +Avail=$(df -h ~ | grep ~ | awk '{print($4)}' | tr 'i' 'B') +if [ "$Avail" == "0BB" ]; +then + Avail="0B" +fi + +echo "$CYAN Currently used capacity $Used/$Size $RESET\n" + +echo "$MAGENTA Clearing 🧹 cache ... $DELINE $RESET $CURSUP " + +# Trash +echo "$RED Clearing 🧹 trash can ...$DELINE $RESET $CURSUP " +rm -rf ~/.Trash/* + +# 42 Caches +echo "$RED Clearing 🧹 42Cache ...$DELINE $RESET $CURSUP" +rm -rf ~/Library/*.42* +rm -rf ~/*.42* +rm -rf ~/.zcompdump* +rm -rf ~/.cocoapods.42_cache_bak* + +# General Caches +echo "$RED Clearing 🧹 Library ...$DELINE $RESET $CURSUP" +chmod -R 644 ~/Library/Caches/Homebrew &>/dev/null +rm -rf ~/Library/Caches/* +rm -rf ~/Library/Application\ Support/Caches/* + +echo "$RED Clearing 🧹 Slack ...$DELINE $RESET $CURSUP" +rm -rf ~/Library/Application\ Support/Slack/Service\ Worker/CacheAvail/* +rm -rf ~/Library/Application\ Support/Slack/Cache/* + +echo "$RED Clearing 🧹 Discord ...$DELINE $RESET $CURSUP" +rm -rf ~/Library/Application\ Support/discord/Cache/* +rm -rf ~/Library/Application\ Support/discord/Code\ Cache/js* +rm -rf ~/Library/Application\ Support/discord/Crashpad/completed/* + +echo "$RED Clearing 🧹 VS Code ...$DELINE $RESET $CURSUP" +rm -rf ~/Library/Application\ Support/Code/Cache/* +rm -rf ~/Library/Application\ Support/Code/CachedData/* +rm -rf ~/Library/Application\ Support/Code/CachedExtensionVSIXs/* +rm -rf ~/Library/Application\ Support/Code/Crashpad/completed/* +rm -rf ~/Library/Application\ Support/Code/User/workspaceAvail/* + +echo "$RED Clearing 🧹 Chrome ...$DELINE $RESET $CURSUP" +rm -rf ~/Library/Application\ Support/Google/Chrome/Profile\ [0-9]/Service\ Worker/CacheAvail/* +rm -rf ~/Library/Application\ Support/Google/Chrome/Default/Service\ Worker/CacheAvail/* +rm -rf ~/Library/Application\ Support/Google/Chrome/Profile\ [0-9]/Application\ Cache/* +rm -rf ~/Library/Application\ Support/Google/Chrome/Default/Application\ Cache/* +rm -rf ~/Library/Application\ Support/Google/Chrome/Crashpad/completed/* +# tmp downloaded files with browsers +rm -rf ~/Library/Application\ Support/Chromium/Default/File\ System +rm -rf ~/Library/Application\ Support/Chromium/Profile\ [0-9]/File\ System +rm -rf ~/Library/Application\ Support/Google/Chrome/Default/File\ System +rm -rf ~/Library/Application\ Support/Google/Chrome/Profile\ [0-9]/File\ System + +# .DS_Store files +echo "$RED Clearing 🧹 All .DS_Store ...$DELINE $RESET $CURSUP" +find ~ -name .DS_Store -depth -exec rm {} \; &>/dev/null + +# Delete desktop +rm -rf ~/Desktop/Relocated Items + +# Calculate usage after cleaning +Used=$(df -h ~ | grep ~ | awk '{print($3)}' | tr 'i' 'B') + +# Calculate usage after cleaning +Avail=$(df -h ~ | grep ~ | awk '{print($4)}' | tr 'i' 'B') +if [ "$Avail" == "0BB" ]; +then + Avail="0B" +fi + +echo "\n$MAGENTA ✨ Complete Clearing cache ✨ $RESET \n" +echo "$GREEN Available/"$RED"Used/"$BLUE"Size "$GREEN"$Avail/"$RED"$Used/"$BLUE"$Size $RESET\n" +echo "📦: https://github.com/42Box" +echo "🦊: chanheki in 42Box" +echo "" diff --git a/Box42/Scripts/sh/nodeInstall.sh b/Box42/Scripts/sh/nodeInstall.sh new file mode 100644 index 0000000..767a31a --- /dev/null +++ b/Box42/Scripts/sh/nodeInstall.sh @@ -0,0 +1,69 @@ +#!/bin/sh + +#42Box: https://github.com/42Box +#Author: chanheki +#Date: 2023/08/10 + +# BOXY FOX +echo "" +echo "\033[38;5;208m Boxy Fox Node install" +echo "" +echo " ████████" +echo " ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒" +echo " ████ ██████" +echo " ██ ████" +echo " ██ ██" +echo " ██ ░░░░░░░░░░░░░░██ ██" +echo " ██ ░░░░░░░░░░░░░░░░░░░░██ ██████" +echo " ██ ░░░░░░░░░░░░░░░░░░░░░░░░░░██ ██████ ██████" +echo " ██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░██ ████░░░░░░████ ██████████" +echo " ██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██ ████░░░░░░░░░░░░░░████ ████████████" +echo " ██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██ ████░░░░░░░░░░░░░░░░░░░░░░████ ████████████" +echo "░░██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██ ████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░████████████████" +echo "░░██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██████████████" +echo "░░██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██████████" +echo "░░██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░████████" +echo "░░██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░████░░░░░░░░░░░░░░░░████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░████" +echo "░░██ ░░░░░░░░░░░░░░░░░░░░░░░░░░████▒▒▒▒░░░░░░░░░░░░░░░░████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▒██▓▓▓▓" +echo " ██ ░░░░░░░░░░░░░░░░░░░░░░░░░░██▒▒████░░░░░░░░░░░░░░░░████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░████▒▒██" +echo " ██ ░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░████░░░░░░░░░░░░░░████████████░░░░░░░░░░░░░░░░░░░░░░░░░░░░████░░░░░░██" +echo " ██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░████░░░░░░░░░░██████████████░░░░░░░░░░░░░░░░░░░░░░████░░░░░░░░░░██" +echo " ██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░▒▒▒▒████░░░░░░██████▒▒▒▒████████░░░░░░░░░░░░░░████▒▒▒▒░░░░░░░░░░██" +echo " ██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░████░░░░████░░░░░░██████████░░░░░░████░░░░░░░░░░ ░░░░██" +echo " ░░▓▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░▓▓▓▓▓▓▓▓████▓▓░░░░▒▒████████▓▓▓▓▓▓▓▓▒▒░░░░░░░░░░ ░░░░██" +echo " ░░██░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░░░░░▒▒▒▒██████░░░░░░▒▒▒▒██████▒▒▒▒░░░░░░░░ ░░░░░░░░██" +echo " ██░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░░░░░░░░░▒▒▒▒████░░░░░░████▒▒ ░░░░░░ ░░░░ ░░░░██" +echo " ░░▓▓▓▓░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▒▓▓▓▓▓▓▓▓▒▒▒▒░░ ░░░░░░░░░░░░ ░░░░██" +echo " ░░░░▓▓▓▓░░░░░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░▓▓██▒▒░░░░░░░░░░░░░░ ░░░░ ░░██" +echo " ████░░░░░░░░░░░░██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░░░░░ ░░░░░░ ██ ░░██" +echo " ████░░░░░░░░██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░ ░░░░ ████ ░░██" +echo " ░░░░▓▓▓▓▓▓▓▓██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░░░ ░░░░ ████ ░░██" +echo " ██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░ ██ ░░░░ ███▒ ░░██" +echo " ██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░ ▒▒██ ░░░░ ▒▒▒▒ ░░██" +echo " ██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░ ████ ░░░░ ██" +echo " ██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░ ████ ██ ██" +echo " ██ ░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░ ██ ████ ██" +echo " ██████ ░░░░░░░░░░░░░░░░░░░░░░░░░░██░░░░░░ ██" +echo " ████░░████ ░░░░░░░░░░░░░░░░░░░░░░██░░░░ ░░░░░░ ████" +echo " ████░░██░░██████ ░░░░░░░░░░░░░░░░░░██░░░░ ░░░░ ████" +echo " ██░░██░░░░██████████ ░░░░░░░░░░░░░░██░░░░ ██████████" +echo " ██████████████████████ ░░░░░░░░░░██░░░░ ████████████████" +echo " ██████████ ████ ░░░░░░██░░░░ ██████████████████████" +echo " ████ ░░██░░ ████ ████████████████" +echo " ████ ██ ██████████ ██████████" +echo " ████ ██ ████████████████ ██████" +echo " ████ ██ ██████████████████████" +echo " ██████ ████████████████" +echo " ██████████" +echo " ░░██████░░" +echo "" + + +export N_PREFIX=/goinfre +curl -fsSL https://raw.githubusercontent.com/tj/n/master/bin/n | bash -s lts +echo "# bin folder for node.js">>~/.zshrc +echo 'export PATH="$PATH:$HOME/bin"' >> ~/.zshrc +export PATH=/goinfre/bin:$PATH +ln -s /goinfre/bin ~/bin + +echo "Download Complete" From a51352e00978636169cd395148ec51b47766d220 Mon Sep 17 00:00:00 2001 From: chanhihi Date: Fri, 11 Aug 2023 04:21:40 +0900 Subject: [PATCH 2/5] =?UTF-8?q?test(=F0=9F=96=A5):=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=EB=A5=BC=20=EC=9C=84=ED=95=B4=20xcodeproj=EB=A5=BC=20?= =?UTF-8?q?=EB=93=B1=EB=A1=9D=ED=95=A9=EB=8B=88=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Box42.xcodeproj/project.pbxproj | 561 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/IDEWorkspaceChecks.plist | 8 + .../UserInterfaceState.xcuserstate | Bin 0 -> 187119 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 6 + .../xcschemes/xcschememanagement.plist | 14 + Box42/Resources/Main.storyboard | 68 +-- 7 files changed, 603 insertions(+), 61 deletions(-) create mode 100644 Box42.xcodeproj/project.pbxproj create mode 100644 Box42.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 Box42.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 Box42.xcodeproj/project.xcworkspace/xcuserdata/chanheki.xcuserdatad/UserInterfaceState.xcuserstate create mode 100644 Box42.xcodeproj/xcuserdata/chanheki.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist create mode 100644 Box42.xcodeproj/xcuserdata/chanheki.xcuserdatad/xcschemes/xcschememanagement.plist diff --git a/Box42.xcodeproj/project.pbxproj b/Box42.xcodeproj/project.pbxproj new file mode 100644 index 0000000..90cda27 --- /dev/null +++ b/Box42.xcodeproj/project.pbxproj @@ -0,0 +1,561 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 50; + objects = { + +/* Begin PBXBuildFile section */ + DE018BB32A5099F900FF0AA3 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE018BB22A5099F900FF0AA3 /* AppDelegate.swift */; }; + DE018BB82A5099F900FF0AA3 /* Box42.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = DE018BB62A5099F900FF0AA3 /* Box42.xcdatamodeld */; }; + DE018BDD2A509AEB00FF0AA3 /* EventMonitor.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE018BDC2A509AEB00FF0AA3 /* EventMonitor.swift */; }; + DE018BE02A509B0600FF0AA3 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DE018BDF2A509B0600FF0AA3 /* Assets.xcassets */; }; + DE018BE42A509B1700FF0AA3 /* CPU.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE018BE32A509B1700FF0AA3 /* CPU.swift */; }; + DE018BE72A509B1E00FF0AA3 /* WebViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE018BE62A509B1E00FF0AA3 /* WebViewController.swift */; }; + DE018BEA2A509B2100FF0AA3 /* WebViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE018BE92A509B2100FF0AA3 /* WebViewModel.swift */; }; + DE018BED2A509B2600FF0AA3 /* URLModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE018BEC2A509B2600FF0AA3 /* URLModel.swift */; }; + DE018BF02A509B2F00FF0AA3 /* MenubarViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE018BEF2A509B2F00FF0AA3 /* MenubarViewController.swift */; }; + DE018BF32A509B3300FF0AA3 /* MenubarModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE018BF22A509B3300FF0AA3 /* MenubarModel.swift */; }; + DE018BF62A509B3600FF0AA3 /* MenubarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE018BF52A509B3600FF0AA3 /* MenubarView.swift */; }; + DE018BF92A509B3B00FF0AA3 /* BoxViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE018BF82A509B3B00FF0AA3 /* BoxViewController.swift */; }; + DE018BFC2A509B3E00FF0AA3 /* BoxModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE018BFB2A509B3E00FF0AA3 /* BoxModel.swift */; }; + DE018BFF2A509B4200FF0AA3 /* BoxView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE018BFE2A509B4200FF0AA3 /* BoxView.swift */; }; + DE018C032A509B5D00FF0AA3 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DE018C022A509B5D00FF0AA3 /* Main.storyboard */; }; + DE2AD3292A824EEB00002D51 /* Accessibility.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE2AD3282A824EEB00002D51 /* Accessibility.swift */; }; + DE77BA512A82580400713683 /* MenubarViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE77BA502A82580400713683 /* MenubarViewModel.swift */; }; + DE77BA562A82637900713683 /* StateManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE77BA552A82637900713683 /* StateManager.swift */; }; + DE7A257A2A6D8CA20043225A /* PreferencesController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE7A25792A6D8CA20043225A /* PreferencesController.swift */; }; + DE874F4E2A591DEA00FC3B77 /* Hotkey.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE874F4D2A591DEA00FC3B77 /* Hotkey.swift */; }; + DE874F542A591F1400FC3B77 /* PreferencesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE874F532A591F1400FC3B77 /* PreferencesView.swift */; }; + DE874F572A591F2500FC3B77 /* Icon.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE874F562A591F2500FC3B77 /* Icon.swift */; }; + DE874F5F2A5935CC00FC3B77 /* StringExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE874F5E2A5935CC00FC3B77 /* StringExtension.swift */; }; + DE9BCA0D2A8360460031CA7B /* BoxViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE9BCA0C2A8360460031CA7B /* BoxViewModel.swift */; }; + DEB862D42A85124500278FCD /* cleanCache.sh in Resources */ = {isa = PBXBuildFile; fileRef = DEB862D32A85124500278FCD /* cleanCache.sh */; }; + DEB862D92A852C4500278FCD /* brewInGoinfre.sh in Resources */ = {isa = PBXBuildFile; fileRef = DEB862D82A852C4500278FCD /* brewInGoinfre.sh */; }; + DEB862DC2A85347400278FCD /* Scripts.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEB862DB2A85347400278FCD /* Scripts.swift */; }; + DEB862EB2A853F7F00278FCD /* BoxWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEB862E92A853F7F00278FCD /* BoxWindowController.swift */; }; + DEB862EC2A853F7F00278FCD /* BoxWindowController.xib in Resources */ = {isa = PBXBuildFile; fileRef = DEB862EA2A853F7F00278FCD /* BoxWindowController.xib */; }; + DEF749322A85657600D987C8 /* NSScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEF749312A85657600D987C8 /* NSScreen.swift */; }; + DEF749372A8565C400D987C8 /* BoxButtonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEF749362A8565C400D987C8 /* BoxButtonView.swift */; }; + DEF7493B2A85683F00D987C8 /* BoxButtonHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEF7493A2A85683F00D987C8 /* BoxButtonHandler.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + DE018BAF2A5099F900FF0AA3 /* Box42.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Box42.app; sourceTree = BUILT_PRODUCTS_DIR; }; + DE018BB22A5099F900FF0AA3 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + DE018BB72A5099F900FF0AA3 /* Box42.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Box42.xcdatamodel; sourceTree = ""; }; + DE018BBE2A5099FA00FF0AA3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + DE018BDC2A509AEB00FF0AA3 /* EventMonitor.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = EventMonitor.swift; sourceTree = ""; }; + DE018BDF2A509B0600FF0AA3 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + DE018BE32A509B1700FF0AA3 /* CPU.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CPU.swift; sourceTree = ""; }; + DE018BE62A509B1E00FF0AA3 /* WebViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WebViewController.swift; sourceTree = ""; }; + DE018BE92A509B2100FF0AA3 /* WebViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WebViewModel.swift; sourceTree = ""; }; + DE018BEC2A509B2600FF0AA3 /* URLModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = URLModel.swift; sourceTree = ""; }; + DE018BEF2A509B2F00FF0AA3 /* MenubarViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MenubarViewController.swift; sourceTree = ""; }; + DE018BF22A509B3300FF0AA3 /* MenubarModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MenubarModel.swift; sourceTree = ""; }; + DE018BF52A509B3600FF0AA3 /* MenubarView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MenubarView.swift; sourceTree = ""; }; + DE018BF82A509B3B00FF0AA3 /* BoxViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BoxViewController.swift; sourceTree = ""; }; + DE018BFB2A509B3E00FF0AA3 /* BoxModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BoxModel.swift; sourceTree = ""; }; + DE018BFE2A509B4200FF0AA3 /* BoxView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BoxView.swift; sourceTree = ""; }; + DE018C022A509B5D00FF0AA3 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = ""; }; + DE018C192A509DBA00FF0AA3 /* Box42.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Box42.entitlements; sourceTree = ""; }; + DE2AD3282A824EEB00002D51 /* Accessibility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Accessibility.swift; sourceTree = ""; }; + DE77BA502A82580400713683 /* MenubarViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MenubarViewModel.swift; sourceTree = ""; }; + DE77BA552A82637900713683 /* StateManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StateManager.swift; sourceTree = ""; }; + DE7A25792A6D8CA20043225A /* PreferencesController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PreferencesController.swift; sourceTree = ""; }; + DE874F4D2A591DEA00FC3B77 /* Hotkey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Hotkey.swift; sourceTree = ""; }; + DE874F532A591F1400FC3B77 /* PreferencesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreferencesView.swift; sourceTree = ""; }; + DE874F562A591F2500FC3B77 /* Icon.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Icon.swift; sourceTree = ""; }; + DE874F5E2A5935CC00FC3B77 /* StringExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StringExtension.swift; sourceTree = ""; }; + DE9BCA0C2A8360460031CA7B /* BoxViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BoxViewModel.swift; sourceTree = ""; }; + DEB862D32A85124500278FCD /* cleanCache.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = cleanCache.sh; sourceTree = ""; }; + DEB862D82A852C4500278FCD /* brewInGoinfre.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = brewInGoinfre.sh; sourceTree = ""; }; + DEB862DB2A85347400278FCD /* Scripts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Scripts.swift; path = Box42/Scripts/Scripts.swift; sourceTree = SOURCE_ROOT; }; + DEB862E92A853F7F00278FCD /* BoxWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BoxWindowController.swift; sourceTree = ""; }; + DEB862EA2A853F7F00278FCD /* BoxWindowController.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = BoxWindowController.xib; sourceTree = ""; }; + DEF7492E2A85603700D987C8 /* nodeInstall.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = nodeInstall.sh; sourceTree = ""; }; + DEF749312A85657600D987C8 /* NSScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSScreen.swift; sourceTree = ""; }; + DEF749362A8565C400D987C8 /* BoxButtonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BoxButtonView.swift; sourceTree = ""; }; + DEF7493A2A85683F00D987C8 /* BoxButtonHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BoxButtonHandler.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + DE018BAC2A5099F900FF0AA3 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + DE018BA62A5099F900FF0AA3 = { + isa = PBXGroup; + children = ( + DE018BB12A5099F900FF0AA3 /* Box42 */, + DE018BB02A5099F900FF0AA3 /* Products */, + DE17AF722A834A1600325BF4 /* Frameworks */, + ); + sourceTree = ""; + }; + DE018BB02A5099F900FF0AA3 /* Products */ = { + isa = PBXGroup; + children = ( + DE018BAF2A5099F900FF0AA3 /* Box42.app */, + ); + name = Products; + sourceTree = ""; + }; + DE018BB12A5099F900FF0AA3 /* Box42 */ = { + isa = PBXGroup; + children = ( + DEF749302A85655E00D987C8 /* Extensions */, + DEB862E82A853F6800278FCD /* Window */, + DEB862D22A8511D600278FCD /* Scripts */, + DE77BA542A82636500713683 /* Shared */, + DE874F512A591EC600FC3B77 /* Preferences */, + DE018C0C2A509BDF00FF0AA3 /* Resources */, + DE018C062A509B9000FF0AA3 /* CPU */, + DE018C082A509BB500FF0AA3 /* WebView */, + DE018C0B2A509BC100FF0AA3 /* URL */, + DE018C0E2A509C0C00FF0AA3 /* Menubar */, + DE018C102A509C1A00FF0AA3 /* Box */, + ); + path = Box42; + sourceTree = ""; + }; + DE018C062A509B9000FF0AA3 /* CPU */ = { + isa = PBXGroup; + children = ( + DE018BE32A509B1700FF0AA3 /* CPU.swift */, + ); + path = CPU; + sourceTree = ""; + }; + DE018C082A509BB500FF0AA3 /* WebView */ = { + isa = PBXGroup; + children = ( + DE018BE92A509B2100FF0AA3 /* WebViewModel.swift */, + DE018BE62A509B1E00FF0AA3 /* WebViewController.swift */, + ); + path = WebView; + sourceTree = ""; + }; + DE018C0B2A509BC100FF0AA3 /* URL */ = { + isa = PBXGroup; + children = ( + DE018BEC2A509B2600FF0AA3 /* URLModel.swift */, + ); + path = URL; + sourceTree = ""; + }; + DE018C0C2A509BDF00FF0AA3 /* Resources */ = { + isa = PBXGroup; + children = ( + DE018C192A509DBA00FF0AA3 /* Box42.entitlements */, + DE018BB22A5099F900FF0AA3 /* AppDelegate.swift */, + DE018BDF2A509B0600FF0AA3 /* Assets.xcassets */, + DE018BBE2A5099FA00FF0AA3 /* Info.plist */, + DE018C022A509B5D00FF0AA3 /* Main.storyboard */, + DE018BDC2A509AEB00FF0AA3 /* EventMonitor.swift */, + DE018BB62A5099F900FF0AA3 /* Box42.xcdatamodeld */, + ); + path = Resources; + sourceTree = ""; + }; + DE018C0E2A509C0C00FF0AA3 /* Menubar */ = { + isa = PBXGroup; + children = ( + DE018BEF2A509B2F00FF0AA3 /* MenubarViewController.swift */, + DE018BF22A509B3300FF0AA3 /* MenubarModel.swift */, + DE018BF52A509B3600FF0AA3 /* MenubarView.swift */, + DE77BA502A82580400713683 /* MenubarViewModel.swift */, + ); + path = Menubar; + sourceTree = ""; + }; + DE018C102A509C1A00FF0AA3 /* Box */ = { + isa = PBXGroup; + children = ( + DEF749352A8565B000D987C8 /* View */, + DE9BCA0C2A8360460031CA7B /* BoxViewModel.swift */, + DE018BF82A509B3B00FF0AA3 /* BoxViewController.swift */, + DE018BFB2A509B3E00FF0AA3 /* BoxModel.swift */, + DEF7493A2A85683F00D987C8 /* BoxButtonHandler.swift */, + ); + path = Box; + sourceTree = ""; + }; + DE17AF722A834A1600325BF4 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; + DE77BA542A82636500713683 /* Shared */ = { + isa = PBXGroup; + children = ( + DE77BA552A82637900713683 /* StateManager.swift */, + ); + path = Shared; + sourceTree = ""; + }; + DE874F512A591EC600FC3B77 /* Preferences */ = { + isa = PBXGroup; + children = ( + DE7A25792A6D8CA20043225A /* PreferencesController.swift */, + DE874F532A591F1400FC3B77 /* PreferencesView.swift */, + DE874F562A591F2500FC3B77 /* Icon.swift */, + DE2AD3282A824EEB00002D51 /* Accessibility.swift */, + DE874F4D2A591DEA00FC3B77 /* Hotkey.swift */, + ); + path = Preferences; + sourceTree = ""; + }; + DEB862D22A8511D600278FCD /* Scripts */ = { + isa = PBXGroup; + children = ( + DEB862DE2A85348600278FCD /* sh */, + DEB862DB2A85347400278FCD /* Scripts.swift */, + ); + path = Scripts; + sourceTree = ""; + }; + DEB862DE2A85348600278FCD /* sh */ = { + isa = PBXGroup; + children = ( + DEB862D32A85124500278FCD /* cleanCache.sh */, + DEB862D82A852C4500278FCD /* brewInGoinfre.sh */, + DEF7492E2A85603700D987C8 /* nodeInstall.sh */, + ); + path = sh; + sourceTree = ""; + }; + DEB862E82A853F6800278FCD /* Window */ = { + isa = PBXGroup; + children = ( + DEB862E92A853F7F00278FCD /* BoxWindowController.swift */, + DEB862EA2A853F7F00278FCD /* BoxWindowController.xib */, + ); + path = Window; + sourceTree = ""; + }; + DEF749302A85655E00D987C8 /* Extensions */ = { + isa = PBXGroup; + children = ( + DE874F5E2A5935CC00FC3B77 /* StringExtension.swift */, + DEF749312A85657600D987C8 /* NSScreen.swift */, + ); + path = Extensions; + sourceTree = ""; + }; + DEF749352A8565B000D987C8 /* View */ = { + isa = PBXGroup; + children = ( + DE018BFE2A509B4200FF0AA3 /* BoxView.swift */, + DEF749362A8565C400D987C8 /* BoxButtonView.swift */, + ); + path = View; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + DE018BAE2A5099F900FF0AA3 /* Box42 */ = { + isa = PBXNativeTarget; + buildConfigurationList = DE018BC22A5099FA00FF0AA3 /* Build configuration list for PBXNativeTarget "Box42" */; + buildPhases = ( + DE018BAB2A5099F900FF0AA3 /* Sources */, + DE018BAC2A5099F900FF0AA3 /* Frameworks */, + DE018BAD2A5099F900FF0AA3 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Box42; + productName = Box42; + productReference = DE018BAF2A5099F900FF0AA3 /* Box42.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + DE018BA72A5099F900FF0AA3 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1230; + LastUpgradeCheck = 1230; + TargetAttributes = { + DE018BAE2A5099F900FF0AA3 = { + CreatedOnToolsVersion = 12.3; + }; + }; + }; + buildConfigurationList = DE018BAA2A5099F900FF0AA3 /* Build configuration list for PBXProject "Box42" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = DE018BA62A5099F900FF0AA3; + productRefGroup = DE018BB02A5099F900FF0AA3 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + DE018BAE2A5099F900FF0AA3 /* Box42 */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + DE018BAD2A5099F900FF0AA3 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DE018C032A509B5D00FF0AA3 /* Main.storyboard in Resources */, + DEB862D42A85124500278FCD /* cleanCache.sh in Resources */, + DEB862EC2A853F7F00278FCD /* BoxWindowController.xib in Resources */, + DEB862D92A852C4500278FCD /* brewInGoinfre.sh in Resources */, + DE018BE02A509B0600FF0AA3 /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + DE018BAB2A5099F900FF0AA3 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DE018BFF2A509B4200FF0AA3 /* BoxView.swift in Sources */, + DE018BB82A5099F900FF0AA3 /* Box42.xcdatamodeld in Sources */, + DE9BCA0D2A8360460031CA7B /* BoxViewModel.swift in Sources */, + DE874F542A591F1400FC3B77 /* PreferencesView.swift in Sources */, + DE77BA562A82637900713683 /* StateManager.swift in Sources */, + DE018BF62A509B3600FF0AA3 /* MenubarView.swift in Sources */, + DEF749372A8565C400D987C8 /* BoxButtonView.swift in Sources */, + DEF7493B2A85683F00D987C8 /* BoxButtonHandler.swift in Sources */, + DE018BE72A509B1E00FF0AA3 /* WebViewController.swift in Sources */, + DEF749322A85657600D987C8 /* NSScreen.swift in Sources */, + DE018BF92A509B3B00FF0AA3 /* BoxViewController.swift in Sources */, + DE018BF02A509B2F00FF0AA3 /* MenubarViewController.swift in Sources */, + DE77BA512A82580400713683 /* MenubarViewModel.swift in Sources */, + DE018BE42A509B1700FF0AA3 /* CPU.swift in Sources */, + DE874F5F2A5935CC00FC3B77 /* StringExtension.swift in Sources */, + DE874F4E2A591DEA00FC3B77 /* Hotkey.swift in Sources */, + DE018BB32A5099F900FF0AA3 /* AppDelegate.swift in Sources */, + DE018BF32A509B3300FF0AA3 /* MenubarModel.swift in Sources */, + DE7A257A2A6D8CA20043225A /* PreferencesController.swift in Sources */, + DE018BED2A509B2600FF0AA3 /* URLModel.swift in Sources */, + DEB862EB2A853F7F00278FCD /* BoxWindowController.swift in Sources */, + DE018BFC2A509B3E00FF0AA3 /* BoxModel.swift in Sources */, + DE018BDD2A509AEB00FF0AA3 /* EventMonitor.swift in Sources */, + DEB862DC2A85347400278FCD /* Scripts.swift in Sources */, + DE2AD3292A824EEB00002D51 /* Accessibility.swift in Sources */, + DE874F572A591F2500FC3B77 /* Icon.swift in Sources */, + DE018BEA2A509B2100FF0AA3 /* WebViewModel.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + DE018BC02A5099FA00FF0AA3 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + DE018BC12A5099FA00FF0AA3 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + DE018BC32A5099FA00FF0AA3 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_ENTITLEMENTS = Box42/Resources/Box42.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Box42/Resources/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 10.15; + PRODUCT_BUNDLE_IDENTIFIER = com.chanheki.Box42; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + DE018BC42A5099FA00FF0AA3 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_ENTITLEMENTS = Box42/Resources/Box42.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Box42/Resources/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + MACOSX_DEPLOYMENT_TARGET = 10.15; + PRODUCT_BUNDLE_IDENTIFIER = com.chanheki.Box42; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + DE018BAA2A5099F900FF0AA3 /* Build configuration list for PBXProject "Box42" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DE018BC02A5099FA00FF0AA3 /* Debug */, + DE018BC12A5099FA00FF0AA3 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + DE018BC22A5099FA00FF0AA3 /* Build configuration list for PBXNativeTarget "Box42" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + DE018BC32A5099FA00FF0AA3 /* Debug */, + DE018BC42A5099FA00FF0AA3 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCVersionGroup section */ + DE018BB62A5099F900FF0AA3 /* Box42.xcdatamodeld */ = { + isa = XCVersionGroup; + children = ( + DE018BB72A5099F900FF0AA3 /* Box42.xcdatamodel */, + ); + currentVersion = DE018BB72A5099F900FF0AA3 /* Box42.xcdatamodel */; + path = Box42.xcdatamodeld; + sourceTree = ""; + versionGroupType = wrapper.xcdatamodel; + }; +/* End XCVersionGroup section */ + }; + rootObject = DE018BA72A5099F900FF0AA3 /* Project object */; +} diff --git a/Box42.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Box42.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/Box42.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Box42.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Box42.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 0000000..18d9810 --- /dev/null +++ b/Box42.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/Box42.xcodeproj/project.xcworkspace/xcuserdata/chanheki.xcuserdatad/UserInterfaceState.xcuserstate b/Box42.xcodeproj/project.xcworkspace/xcuserdata/chanheki.xcuserdatad/UserInterfaceState.xcuserstate new file mode 100644 index 0000000000000000000000000000000000000000..1fe46685f8a7492d0844718da0d7cbb975fbc3c9 GIT binary patch literal 187119 zcmeF4cYGAZ|NnQkT-ocF%k|6E++A{&-jUvW=q-fgfIvtfg(4t3f(WSeBB)4c5|Abc zsGtH$5wOt|P(Y~`Ktu&W{mtCnA{xl&zVY$agmw;)0Sr{ z6`eBLN5)5Tn#Mo$86hIXJu-^3iX$A@q>^1DB!raE5qiQvgorRvji^r4AZik|h}uLQ zqApR7=tJ}+`Vsw!0mMKelNdx~5rc_rB8P|&Lx`coNTP@+CY~gw6EldJ#B;>+#0$h? z;zeQ!v6Og;c$IjKSWA=<>xegqt;9CsO=3Io7O{)iO}tNhL>wlL5J!p6h!ey~;!ENh z@g4C!@dNQAahI2;4b(b{0aUd zDUv2dq?nYEa#BqukvdXOnn??3Cmp1l^pHN%Plm~AWG%8bS)Xh`K0!7iTaYcuwq!f9 z6WN)}AiI;j$v)%&av(XF%qEAD!^k{xBsrQaB*&0r$qD2{k|QDc3^|RQNj^u;Cg+d~ z$c5w*aw)lte3e{Dt|HfxW#k5OBl!lomE1w@BzKX!$vxy=azA;1JWL)TKP5jSPmm|c z)8rZQ9C@C+NM0hZk>8Qm$s6R)QT3?$R0FCZ)re|IwW3;61E_&iCN+r4q6SmhR1OuPhET()(NrNdjv7xv>S<~U zHH~_fnoZ52)=;leYpF779krf%o!UTcq&87oskf(mYECiN3_i~5|U6Zaw*QV>xb?JI^eYyeN zkZwdbrQ6VL>2`D%x+~p>?o0Qh`_lvH2t9 zb~5iXdze$q7tEK;Y32-bmidbLnmNauXD%||Ge0o5n4g(@%zfq$0V5Cy%mRxbMPL=! z1a^T#;1sw7se&{?SWrz+T~Jq0Pta7*Owe4=UeG}>SdcBq5kv$-1VaVG1i6CYf)RoO z!5G0r!6d;mf@y+h1+xWn1ZxDZ3DyeA1nUIr1+NP>2sR2f3APH}7Q8RmBRC}ZNN`wi zOmJNAo#1=H4}u>B*9A8OHw8ZlZV7%C{3iHQNDCREOehyBggT*K7!-ztVPQ34bzu!* zO<^rzZDAc@17R~^b72c%J7IfahOoP^zi@!CNLVZ^5snd#6^;{*7d|PRAe<=VgwG16 z3ug#t3+D)56fO~#3Rehs3f~gGEqq6~OSoJ3uJAqK`@%iK4~0jBM}^0P$AxEwUkSe! zUKU;v{vrHR_?L(f0TC&pM6`$z2}G<&CDMuXBAduAN)x4vnuwZ;nu(f=T8LVTT8UbV z+KAeUI*PiB`ilCAvPC(fh-joJUo=(pjA)wZSqP5CuZuQ_-V|*Y9T6QBeJuJ!^r`4G(dVLLqT`|yqAx|~MHfU@L{~*OML&sd ziGCK{7Tp*9Ax;u&#K~fP7{a3VR2n?J#l?;GjVfqA8}uC zKXHHY0P#R^rg)GzOFURSL_AVlBrXSS9ObJ*<~aW7An5>t_ROkPWdl*!pY}wkg||ZO67}JFwl^9_$DzR7N9cd+lUd)b5RA@(!& zbM_c}hCR#PVt;0Dv%j#vvcIu+*t_iS>^=4`i9jNh$Ru)!R-%*WB{qp&Qb$r(QcqG} z(m>Ks(n!)+@`R*`q=lrtq^qQxq_3o(q`xFb5|K=hOq5KLJSCYd;UrMoGm>v57bTY@ zKT57kX(=NWNQF|7R4iqs5~)-wld7b8X^PY;^+>(aG-)+yb!i)ETWLFKdua!0M`7?6&Nl9LPyIE0@Tna*aG$ z?vwlF0eMg!l85Eh~Jf6D(-PzqL|RHzgNg;C*9I2H92^%V^i4Hb

M6pz{La|b@O7Xg4gJPfJ1I34m{fYyMgNj3nj}(U$M--nbPAR@pe66^wxT3hB zxTzE$BDr5vgprW~altt?bNshpsktDL8tuUw#9s9dC6tb9?qM7dPCOu1UQ zUirFmoAOQNZsohmi zpfajVDznO>N>N!=HkDoFP`OnBRSi{5RYO%HRby2vRcqA%)j(CIYLF^RHCUCc%27pB zLsY|6qg92fajNkusCrs8MfIHOdDRNlO4TaWYSkLmYpS)XGSxcOdetV?cGWJ`ZqbmNd>aOZ9HK7)%#cGvWt@f(Z)ah!U+OH0% zgX)kvtgfc6rEaKhrf#loukN7kuI`~8q0Uo}ROhP;)T7j+)rIOJb+LM!db0W%^)&S? z^=$PV^^58y>P_m+>MiOw)LYft)NiV{t9Ph(s&}dPsSl|?Qh%;KrarDdtNu#;v--CB z7xk~|-_&>1ch$eE@2T%65lO-%QIb4Kk)%t~CmE9LNsgqtN%fNICpAcFnA9k#anch> zO_G`>wM^=e)Ga9^sb5n6q@1Kk(uAamNt2SEN}8O+CBdYplcpq1O`4uGJ84eRqNK%1 zuO=-|DorX&T9@>G(w?NfN&AvMNcu2of6{@ZgGq;yjwT&XI-PVT>D#1>Nk1h0sG&5p zhS3N#LXAix*036hMygS2bQ--TMPt=?G+s@brkbX@rj4eprk$p}rh}%Vrjw?#ri-Sl zriZ4#X0Rq(GeVQ68L7$FjM0qMyr7w-nXQ?lnX8$nnXg%(S*Tg0S*j`3yrx;J*{s>3 zc|-HI<{iyvn$I=IG{-e3G$%EuG+$`G)ST9Qt+}N6Uh{+Iw&oYjADTatHOa}z+GJg_ zKG~3LOg1H(lP$^iWN&gXIh0%{xo&ckBn?E6K}}Urk<~T$;Qhd1dmd9=y0spy zSDU6y*ZQ=6ZCG1J+eq73+e+J7+eX_(+f_SMJ4~Ca9j+ar&C`z5=4%VIqqN1^3EGL; zr?peG&uO36zMx&GU8G&3U8h~I-K5>D-KKq0`~fCUT4r5btaunXV*D&Ze2}X zEnRJ09bH{rJzaBM3tdZHD_uKXH(iFVpRT`dfG%5?ql@TDbYpa5b>np7bx-Oh=qBo* z?rGf=-Lty+x+S_Y-8$W7-4@*&x~;k$x({`q=#J^m=+5dc>MrTN*WJ_I*8@GNr}RR7 zl3t@v)@$`Ty-9D@Tl7x7OJ7r8OJ7@GM_*T8PhVf(K;J~)RNqYBO5aVNq3@&5)eqMf z=tt>C>r3>L^;7gy_0#n;^e^aV=~wAj>(}UC)34Q+>DTGk>tEMz&~Mdm)4#2MM}J8F zk^Zp$i2kVlWBup)WBQZ&)A}>|bNci8%la$&tNLsD8~U62pY*r%zw7Vm@9Y0C0E5`T z8YBjVA<1Adq!_FQo55~y7~BTGA#A8=sB36qXliI?=w#?@=wj$<=w|3^=x69}$TVad zMjHwZMTTO-IKxB(XMl!jhGz}a4KEmG8D<+68&(_E7+y21HN0-vY}jUa)9{XAmtnWz zUBd^44-NYb2Mh-dpBlb4oHLv^TrgZRTr>P=xNi8_aNF>U;djG5!+j%R)Eae0z0qJa z8cjyK(P8u&Ya8nr>l*7B8yTA#TN+y#I~Y3}GmPDhJ&Xg4S;is8p~m6HeB(IdL?dUM zYJA@Kf^n8{sqrP_%f?rXtBqTY+l+4-w;SI!zH8iT+-E#!JY@XX_=)jT;}^!u#w*6F z#%snOjXxQGG5%`2Z~Vjfr|~ZnV-lEzCXq>OQkkqKo5^l+nB1mxQ_vJL)il*I)iyOS zH8eFcH8u4z^)~e}^)>Y~^*0SL4K!t%2APJKhMGp2@=X&>lT1&UCYw0ZRMT|R^QIR} z^Gyp(OHD7CUN)^Vtv0POtut*hZ8mK+?J(^z?KSN;ePsIBbkcOn^o8l7>5}QP>5A#9 z>89x?(=F3&Gij#Gw3#uB%`&sftTyY+db7oxVz!z+=33_3<~ruO=7#1b<`(9b=Jw_e z=8oo0=I-Vm=APzW=HBK(=6rL3d6apyxx_r)Jjwi&d5U?e`5E&}^K<6s&2!8zo0pqQ z&8y98%X=!U2U>Rh| zw&YlbS@JCfmLkh|%OuNFmZvR?EK4mfSzfg)x2&?Pwv<`cSvFcWS+-iXS$109vh23J zYdL5+WckQ)*z$?xbIUQySC+3W=Pc(f7c7@7S1q?JKU;2FezDxO+_(IZB1{pbNK+Ik zh7@CpDaD*(NwKH6Qi3U=l)5PmQl3a@lF}ljWlFo0_9@*`GE(}aWT)h$3`-f2Qj#)0 zWn#*tlqo6Crc6(nlQK7DUdp1B4^j@M97;Kw@^Q-NDaTSyrF@ZcHs!073n|~ETu!-? z@_ot=DK}GoO8F(_*OcE=?xp-?C9JfSv5Kv%Rc=*SldKx6-fFN~tSMH9)oJxuy;i?9 zU~O(~VQpz`Wo>P3V{L0~XKiooVC`bZVJz_m-{n+}6^;7F-*3YfStjDb_CEK(%olS2u*eo`eE!F0;`E50AwQRL*jcrfZ zdf0l}df9s0`q=u~`q}#12G|DL2HSFN1-4PPaklZcCv8vLrr4I)mfBvjy=;5Mw#@db zZMm(~w!*f?w!ya5w#~N7w%hiuZNKe+?JL{YwsW@gwhOjzY~R{0+Ai5H+rG2?Wc$r_ z$4=ORU2JFVHoM*KusiK8d#c@S_t?GmG<(2a(_Y`+z~0>6!rs!}(ca0PV~^N}*oWGO z*>ml~?IY}Y_L26{_Hp)!_Nn$~>@V40w!dOuW`EVb++J#5VP9!qWnXLGWPj7X-Ttoq zJ^KOsLHpPCbN2K03-)j9-`X$QFWE2Kuh_r0-?HDa-*o^7>0liahuz_DI2|rWs>AK@ zIJ}NDN4g{EsO4zjXy|C+Xz6I>=;Y|^h&YBghB}5havj4RBOG~-k&b*vp<}$`Nyh}o zM8{OeGmdGFmmRM-mN{N^EO(STRybBVRykHX${d>=+Z{U`?>XLg>~S1&eB?OqxZwE4 z@vY;c|DdQ|r_@^-hD+=rlRaPK(p-^g4sikh6}n zuCs}=sk4`}x3iD4ud|=CzjJ_dpfl4s$eH6D;mmW6bmlw9ILA82IcGU%JLfp(I_Ej( zI~O&{=Dzd7$X@4A4Cbm?6Nm(gW%nOzoFip%P16&c;5Ldpdz%|x2!8Osvxu9#lYk_N_YmsZQ>qXZR*HYI@ zt_`k@u1&7Zt}U)NTw7h+TsvL6T<^K|xemAvx{kPxx;}HAaGi0Tb$#W!;=1a(=K9X{ zz3T_p%~T>4q>`yrDxJ!t3R2lrd8#_qnd(kWOZBIQQmd!dO0ApPAhmI7)6^EJty9~j zc1-P-+B0=d@3-sd=fRQwvjzQYWNNOyyFirOr%!E_HV5!qg?HOH-Gn zu1Q^&x;}MN>gLq#sXJ2NN!^!vAoXzSr>Q4XPokhg@?y$R!yREyOyS=-EyQ904yR*BCyQ{mKJHy@G-NW6} z-OJtE-N&8n&T&WFL)`i9aqjW%C*2d=6Wx>CPr0YNXSip&pK~vCFLEz-zvy1!Ug=)r z-tOMv-syhJ{kHpE_a66N_dfRl_fhv}?&IzY?w{Sa-M_ehb^qqRfPfJfLPis#bPg_qrPkT=XPe)I# zXSipCC(kp|lkX|;jPi{36nct0#hwz+7|(bQ^gQjE;+gH4rM0ez4g5fyiL4Ky)C_+yO&M-pStQy)SrYd1rg)c;|ZOdFOi;1s{p?AOcfcK#HkoP0+Veb*|QSZmzPrRRcPkK*z&w4L=uXwL|uX(@o ze((Lo`>Xdi?;Y>&-aoy6r7>xOG-aA5Eji7QW=u;-v!*%ITxs64w6s84wY2JKjnkT^ zwMpxq)+4QFTCcR;X@k?U({j=xX+>#M(q^R1Nn4P%Fl|ZN(zIo1E7I1ay_U8?^|ae*_tO4KC(`M3QMxo; zmaa-SrrXlJ>HhR^dd>8@=?&8xr8iA)mfk+SYkHsb0qFzN2d587AD*6{UXWgtJ|lf* z`g7^er@xRsD}8qQobJB>NZ*^tH+>O1B8!uO@`wC`)*W#1Lw4c|@QPriG;`@TPX zfBH$kz_0b|{CdB^Z}gk|X1~R6_dEP0U-_YO0-_+mI-^$<4-^t(EpW*NBAK=gS z5BKN$3;ad?V*fb*L_g<;{%8Et{4@Qt{EPjs_*eVO{2TmR{BQc-^1tnW*MHo9!hh0# z%KwG`OaE#A8UI=TSN;qBtN!c$8~)$?cLGEJ1ekyzpbnS=mOx6t8t?~d1sVjJ1zH7K z2igZZ2QmV^0=)zM0|Np>0(pU=z}UdJz{J3$01P}6m=Ty6m=#zRSRGgscrCCtP!?Dh zSRZ&jupzJ|uru&h;Jv{6frEiVfzJY;2aW~K2EGYg3;YN4PFa=7yLPRH$;T!5EBxIWFb{Z9nyyUp+G1Y3WdUa2lt>JCqH^aNb?}pzC9}XW09}RyT{v>=Rd^Y@5`0Mbw@TKtO z@DJf1!?(is!+(VTtR|`^?%~QW$;&%N$Ot*1Ae2NBq3zWvBRC>5zNjzy9$z2q>B`Q_ zDk@q*s0cMja?}b!LnNb>6-hc*CsV0u+oEN!g2E9+qq4FiEef(rMn>|BGnKA7Eo;}U z+pK2IK+EdQYXxf7sarkJw0gbjfmZcuRBKtMdA)G0=Jj~XM#4n|%Lo%;CM-k>VI^#Y zop2CNj^PBHkP~rYj^!krl#`Vasf3&G5MCmUNGE)Rp9pYrG%v^AgzV2y!azwXl(?b9 z3ngh>ee`tA3L{w~Miu1d7Z)|nF3uf;Rx@)lmBtp4Az3AP#VvDkiwg>)Yn(-`3JQC4 z>rm7``msnx_OQsv2+AP#&u%68Eh0t5x%pYeXeBjM8Sao(RNTB^6M$GQ!us&Jw@!NriF!B`9qPl{Nfgo!6if6 z<_{@AAJ2&7q1D+)&V!HZyG63mXJXIHXNDhH%-3UmqAd~JNHicC5{-z)#1ljlqAAgg zXil^sS`w{@)jez6QF1h6di>EYhl1v!x* z0;7FyajeUZeC8LF!;{`1beq_mZ=QQU)!Rz_4Tr!mgRGD2%a`gEhR>94zB(&A|GjD0WpdgO%!5P9E>`3 zKlHsYl7~cKOoSsiJ7>#O_8fv9x;}CrJ&KSFgtCWa0=ky+WDGeX&UC8+KT zGY1!p3pFbkSF?I3*0J$FVm~!6$S*ELkA}L)xZJ^?6D7nLVk|MPZ%lskvqnaG$9{|y z_2`s=I{pgu=kdKeWps}2>uiv0}ZPXR2g~Ld)v6%KPC>ZH{;wBOO-{(;`_%gAqlz4>;a&`HKSWc`Yv@3{G zVg(oC!YhbX#A>b@SDmZVBkC9jWEbQQ$sJl!821etRHTCJf~@#+#U6vtYdx_M=k+?V zfvdsQTtRFiHgmPO+9s)>>$R+{`5BS4k8%)8T8w?iSf=SKIKb{A$ym2 zFH@P+DWhXaan|6x$lqD4M1Mk=@Xx-7_z*Y7USc2d0oRag#5G?aNo2e~J>CR|fY zlCEvD&Lzcpx%uV5K(&JU+=zcRGvWm|N&EbQvH1_B>y?{RJdC&cG4TlzT)rIl$XJ~6 zIdLrZ3ulvDz8E-uIYlg6{&%CDCN2=cHN+X>Eb$fbHF1tO&$ZxMa;>=5TpOE^lOd~i4=Ch;RC86RNt{SXqHvjGq)%g z)fFl+?jVtz?ggVdM8-t&;@G!9*tuf;vTcj*1rG`tW4%j3Q7&$!j#;Bn2KbLn^N<}B zTtxmhK43ziM)hFzT7Fx#TGc0sVsPHVaQ@77EKni3)4irEMR6q@qfCeN3 zEzkiyFaRSk0W+|G6kr85UXY?ExE2-2G@h@#r5I(aRazaE{n_NBHU0emm9&2 zUTgWZumT)g|uW+w&rQAwx zHTN1<#;xZzaGSU-+*a;QZU^@k_YSw4dym`0?c+Y=4seIK!`xBs6Yewa7pgXDXV{2Y>(AbA&3GDuk=RUJ~T zAk_y_BO%2>YCfdaKx!AHK7rJ?koq0cQb=1NT^-UbA>9koxsZMe(sLob64E;%eFV~9 zL;4nE7|0kPs%T%^V%&Ep4Y3z<1VhCN);4N4*Hg`zzLoOUFiRRorQ`s%CoXflGj*ccyY9Zw0x9yxi=l z2Pz81JO*+lA?%uwh82a7a7FS8MnwukT~PQkq@ZwQQ3&Z-=ZxOLQSo0q^qGtn?H~NP zC}%_{7B_}E+W<&)8%wt7Z#L^ zs`kI^yb-lC@IN$oMs{KDDAYuQ3nOFO=C?-9W=LTqSoDv|+7Y!fC{x)dvC1ls@55L< z^fUIydG~^6hatY5`55Bsgw*xD5a3m+=Bs zqygumwor_fpcp^aR)rmylhL8X1$R z>|I$S4|-t&-SX$CwQ-g5^zp(x#slAp=KN%)@`=RC@o=M~$%+uV%2WGCG}DRyK}F&Z z{m=1FIYT5FHS|=bvRz_NU%sg;jDtvFG=DB()h(a@LvomprU}~S7okb8yniYcDUF(W zI#by)v0^;j2(h5&aj_4nie^3aKa}8KQus*sL~5gErX?)r50`*f!f1H(SSch;Q4`ZE z6{5t;(3%fNE096b7PT`oQ`!9g-WU&ITOQWbXvWWHDl-$yxI9b`MIxbxey*rA=~1Jz z{zGiS6CCxknc3wXEg6d1nDZZO#CsuT>(M$z){NSiS1GsAD>4}89EyK`jD>np3kwoP zxP0^QH5LC}o`A+t6N?g-tAF&8jON`kLM_Lj@kz&me7q1-KL6&?{9jC1N6HuBagt89 ziDtbt;oet1>v-R2R#IGCkl!XNKL=0U{(Iy}c8uD2IpH9rydAz3PyqV4(2(pFwX!Tz z*{`x)@e!(6Q8(-rHHgj)CK&Giqvhk_`~PVC{!tSv{zD5T)=#pcc2@m|-u{qEKBg}Y ziP~6`a0vHsbv-1E4~t}Z)J8;&tW7vdNx;aXo#Uvep>_Yk2WJe+Dvacy;Tswxbj-@n zLaS!w%Tp3H^LnPTS7o987XTFj{bbbG#!O|K#Edg#CUCo2`6BDchktSU0`ZPdgU|3S|2 zAQ9DB1ubwjYU6ama$df*ADWcwlz~PPkx2PTa`MNhnX~`F%l-?hit6oF)Y#XV%B6g> zBTD}NEM8Ts7OWP;3s@yZg`vFM!J(*t;-8{F^vKV}D`DNokBU6BQ6*SBIOm~-D)P7J z^PW$*4Ib_V|A+YVe$>o2|Dg>Yjt-h;qxD0yMIkp2Z9(KC>*!_x@-Iq^c3V;e1t^lD zD4Jp@0VSkF+(qsZcbU7wUFEKE-*Mk_Ka^1{+HZN0xJb!~E0hv_S93q2{g&;~*H37# z#Bb>P9lY(s`1h8w*nXj4QFQkrT9L_An#=!jSi#tix%s&x@%{(x6ds80;h=m}fY6pwe(qK&736-#dvDP;*1Y1ZSdDl1XL0#d)u~!&zY$e~s>$8v zepx|GrRt!4U%zs7`r(qa&CiL9ixdsaiSOI(5Xm1}JWR#3Rq|U$sK!)NoWT=R6Yehe z`$HM@7=p_4@1(rhHdHsvSX-(c)t>4=b)-5`ovAKVSMEOd2lprU7X$gYY%}40y$<40!0;U(P=W&fBrA94aKkxgFwL3HUiU@M=9|I zfsp$xdgJOU)qDdMQ6-qRVhF^g)EEfZ1bKUsnuKwgK-GXi!rfj$Jw;81Knj73tMhNn z!1WmWQ==QVobTO?ZCm0WVLJ6(jJ%oLT?mvbsL9k*C?AwtxvcmkbE%gwcJrwD)BJZlq0%tj7RE(ZC_A&KY475)%XsHz>;!~WW(B{H2>I>>i>NItRI!k>;eNCOC z&O_jVzzabd1nCg?An-#FfFKA#sEqn1&e>(^3Uw7p-FFa#dCqD=P!EFoSmPR0fmRvN ze#M|69jnHJ_B#gc9(5mI5LAZ%DH6UT&<-ml@s^}1nn9q^Gz7IuX#oUiCvGBsm1b#K z6f|0jL92t9p%oaky5&Gauh&a%>1<+-iJNjSZ&^zlqSVoPOkKkYa^O=~=`=(gZKLh9 zgLcv`I+b?Q9vbo17=kAtXaYe~2+%_`hoA)nEg@)CMyJOjI66p&=rC~+?d1clV<8*_ zh_)^ebj8$ltD>$F)X|L*bu_B_HgW3cW{5hvIo$$Z5VVD$UF?pi+o9C*E!m##h^gxU zL5EVh69gR-q^=v?BSu|!OkF3;OfO7b=W^7k+`l@T*yGHt;q4BjvtrB*!pvnL>RVz&Me3@D=u|oteusx;1-&|k*D8$HkO~s7!JV*2=X8p2|+#t1rUrXqqoN#Dg8DvpK>BeLs7zL-jNog&HOj8 zppCD>t1@_fgz-8IK_QRV$5_xlp_KT7pa>5Y&<)91Bfbq!(qCZ2PC-yoN`DE#m;@2~ ziasAh>>NgHET-ifjM%vHi0NqF*cJM_7-H8jVoz3(h);2o{v9Ls6Mc*RnZ8Z`LjOwt zM&F@P>WL6cg5W6#&E&xE3gF+q&jtP0ZbDQYoKAjFv3OdX~!Q;(_7G+-JsjTjV_ z&4FMp1W0}7L$CmXg%B))U@-(QmN89Yh%qggmP{++BGU$Pcu`PsmwFXGzeaUU@Zh?5Uhh>Jp`{qumOUN5Ns-ArpH1v=J~j=AwW0tq1o04 z!nU&ty2?O@kB%~^?{49tTaKYCMZ$(I2;RWLhHePCWWEvCGV3sKsI9h@GN`TIOc1zD z%o{P_wqW44W0Bg1g>6T9-oQ=X*jvo57-a8Y$lj_T5uai&a|AQCkNJT4klD{1U=A{e zn2(sl5WEAyE(mr*fTFMWAV708dmz{g!M-x)Xk6Joi!*itf)99QJMe(9BUOx5hOrBn zv2P&wkZ0@?X6!Oz3|$cH$BdyHV(baN5r1TEV8*UPaIloQ3BjQR8N1E=hHzni!E?DE zp}Ab<4xYP&cdLKc}zk7IA?<( zh_8V{aN_}Ix2rg-3}<!5;Bh_lDeW(dX##$&$5L2$EFfM%6`N|3Lo1Q4TA zL%?Bgc?+X51*3viQOhk#8F*Tz3u5a}g6R4aUORnUB0j}j0bYI*%oEHPED$UdED|gh zyeL>ASPB6WWh8vP)yd39id2F&wunLkyJR(DUA6A z^$R35JYIJyRIk5;C^9M)5|Bi9^xyi?C5D$!AQU4~ghGs$9^oZqF|S3fn-^pCD!(gq<;F9WiEs3RR4^)I-=i##k@R zSm=LCm~fzQ7-lR}I7pZ!94yQh<_IIgA;O`MtOm*IkVK|yLb4VlYeTXQBr@*jQ5dMx3zi zkn9v6OOjoA!g^K_RvE(fV#4-8vNKQEeoWW_q+;lTWS6Ll;X5MC#y9)N!cQ?@pFpx( zsqiyMW+ceh2_agG!hD^=e09fO?=<#$J<54KRe^Nm2NkyTUNG;MJzC=lojFgI!Avq*5zC;F*Im(yF zg!vkZC%3jmC%4MayT(}&IYiMVs3$}&Ojm9qNqnMO2rrRe6c7bPAyHUVO;lY}Lxeoz z2uS8ZawH`4Az1*)QIJH=un>|(Wun?KFDa@Y!%KwvRx$4-$2`DmLKR+>!K)p{3%QFD z9V(J&0yL?mCLL0I#iET?&ViUQGi%-1N`9g8P97xVZ>y_lZD!?iO*end#Y)DS$ z0h@;a6U`Sbz!xNEKyqg6j=ZE-N%AfEk_d%IrJ|Q1`FyEp86;mw5VRE{yi-TC5`#7i zgSG~PHv3VaiRL()XyVJ2Nxa>SqAfAzHe=@IW9HUi=4L;ZxgDZCn7N&zw?uD?-VyB* z?H0W&dQbE|Bo{(*5hNEw@btgyeciq7lIcNN$AWCP;3En^(Laq|Xi7f~@aS9~gj3XzuBjm&mu@hgAMB}a zZQ@#3+jf-$l~2(^+zD|eZYgdhZY^#jZYyplZZGa2?g&XFZ+jrQ7n1uR`2i$9gyeom z9)RS*GI8fPXBlzMdO`9K&ly@{jh%QRKds`dGMr^&&T=665ziSq0)^HuDJ8zp$|YVU zN4E#Bix%gLM`6NHOnszOjAH7e2@+N!9v780@mMTtA0t%~qjf1HYoC;(MFslvz)TiD z9YYLa#6GJi6`y3f7`+L-Oguw8Q~aFxdGQP4S>oB^IpVpHJO;_*kURm&laNGe{sknz zgyd;Ro+%U0kHu`_#c{@vq@U$uwyz&B_H7kom0|2P%-C8;e#JAk9=p%JXeS1`(Ec*a z7`pw<*c;+)n6a&pJXb1y6Ow45I+0O<_$@Kswj+KUtJnpsV!N@5p}n%@5K|7|aoH!{ zA0zBTOxQ&%V!N@3eN!$CpW=x4BnIrL_+#-W;!nk&i9Z(~6CW2Nt}a9J3M8*W@){(+ zgXH&+`~i|bLh^c<_*7iP&cp#b2T8R18h=6Z)&szPs{*VtfPIevLsfl~2kZuRmNzLS zz99J%0u0}ftCaDL_?!4HM(hqGe=ZgO4$0dIBK9YXH|>c3!ifEX5MxP<*sqU5Y)0G` zD`F*4#8?(1b_XHGk{B^`xcJeNxvYvcA;efUo5X6^WLC@SSUqcCjgUl-il)QvL-G$u z{t3yyAVok5K#DA5%`pvQZLFPj5Eoe&q^P)tQ4FNSkYW*Sl%$HWN-)NT5o2sMNYQb| z*qYIROgKgC!1MnoAVc&2`2Ik~*aj@xtW(N1gp{C^Z44=4VvMoP*p`SFwmD)9y=|6p>M8M9TkI_-5y@=!_IvDre_mwo(#E zv4mZT*;>lJ#J%A*D)%lp9hWNO{ZHRdKe~#(X9F zI;7HgwtT#=q{3BjRR*q|7_PSm&AP46Y*> zt|0b#pCF${h06InWf3o3$JtXcyiQ`gs#TDNPw^Fd1>^NKdyYNNUSPjrzhy77m)Oe? zOJ_|;)q+%QNY#N#QKr(HcxwhpbZP1di3wxYvZ7Rc5{JZ(IFmRfE=j7yE%8Xa zk~B%W#0RO?kZJ>|wvcKEDHL3FfK*3Fb%IpqGD#rDnWS3GMM@BiU3kvA@h-Ag6=s#d zOwtr#CP8x2mB*}QMJgugAnAkwLrs%WD(MWV?g;{xA?b+#lXS;&(gQ_el3pmYk^RNt%42sH_Bop)18_AdipFKy(9uw|MhDb(XyoO4KNpdB_B_kwxl97^pNdct# zLaHC6`a@~}qy|C?#bkpZl?AE6Ws=cxyh>s+CK(T@Y#y&64`gga6lw_~G)U#} ze9gdo-IqLvUXy_iStA@G(f4Esk&FrWhMz0JN601fAT_j9vH()U5~S=!2|hwDS%N9c z#gx5_DI5MM%E)89u@w@$FhxBf!AHocJWSckn6lxIrEI+fA0d~#F4-X2DA^?0EZHJ? zL$Xz}4O01#LadE~)M!W*LaGR&*BMbIkQ!4a*&d6K}J?tZUgaaPs`KNq z|FXpY?c|8G8wM-`QpsF<|4QYGaWF+T5}OQfNcM4t!#~u2Rak z;|l32jM+*^Z7Y?ohE#&*#ieD^*JGHi$C%;s;?j*6v-0~ERpNlNi8?<2s^aawDcu<( zZU-jroeI+PDc+SH#KgTPeP6mqx>veS`hoOA>3-<}NbQE`#eUR#5WU!s+5@S*klF_+ zG!^qe5Rj?>7y(&d7+bNY^ zgVdo?>GzQOC_zoTA-xrY?I#S|VKfyXMaM4D1jdo_q6Qcqn7h*ZF~sg+#PCx3V^hVG z$VizKF(#vAw2YAnWI~xpCYG@>38X%S6k_LdNF9UJaY&tj6pAfRLF$V#nJmVbOeIsx zl8B44WJrCUbR05SY80|ZogC*|(Ju=k%wz#b zoh_AxAoW#Zn8|9$Y9nA|HSquw#sBEkIDS9Dc|=+{%>G_cYRg+~ENdFYP1XeC_6@>K zfadVfD_b6Weq7dC))nK{M%Gr=PS#%5LDo^$N!D4`1yUCwbqP{vg7yleu0jg+nC~Ek zddv@HvTkwQddhmqdL!J>+{ceRZa+clS4iPk8&g&9(XJG3LojYbA;ljcmkmd_$wtWX z@CB(Gkh&SWBPZHN8R8qiNQPf;EGvf8ty0+-NG13>ZP}BuNl|5!O~lHEUT-{EhLA(b z_DebBRPvq9ChoW&ZO9v*CYuqXZaSv!ZbcdJNoLEIVCv?`=E~;D=F1ky7RnaM7R%6J z;2uP;Hl@(C^q-LW3(^Fn0i;PtQ)RNHv9W<{S!`?|TLEc0J~p5Q@v#BTR{7CN_)*zL z%-kkOGrYvTftY*jLZ<93**loEw;?SomF3^oG#AgGt$f7% z8BfX~*^wArhY?(~}HSPRdTnzL0$>J1si{X&I#DkXAri327Ci z)sRktvv*_+L2!vUN{KIg z#sY2nLAM7p8?yVdKQUf^K-y3$Ln>fQ3@5p~_Lj-*F~H=hF~H<$kWS+PLvNpnEoIVGE9I2|OkN8CCa(=?ex+Pq4*@2xPbu*Q zX&(X%-;lqw@Qv71-W(w&M{op6}!; zNX$RVbK{7OgmgpRKcX-&j#%?52U!URDMuT7O65;NnqMuKqf_P;?TnRAl~2QfJp<_{ zO6AW&I>F=Q^5^8U5H0fOv5RbqT%>$9a*=eiN4QAkU>@d$@)u)-Eyjekz#4|mJ>gXU zo^az+ER(OrfW0bTE-#g@kgt@llCPGpk-rA%R*-HD={AsV3+Z-{ZV%Bbz3GmS?o=i( zivzYH4%ik*cjf`>`T(#VRe)6nu-zE2cOl&+?j+@V;t?2rgDlc6wDUUp0$IKV56VBn zd>w*xw^I3GNGEulT>gptbIjMLm@o9o^%aZ<@r7O<`*>Eqke`XsbsE#v6Vdg!7tZp} zc0v9 z#_2-xn#Fs_><4rWt)iB!GNezzErJ$o8QeGc_A?Ntu{||yNg+zh=a}cEp zDWr2s6)0|wB<3L%YDF@}rG`R-J>(GN?u0D%kdJ>&kHVx#i4vx;V8VtalEkG5BE%G_ z3b(?e@G8<2=?b61uLwYTIHX5FIuFvw|K&rv0HQbh)1x6>Sf&WY5L48MjUW}sffn(I zjpav>6RQZT3}MYNVJMI)<_T+!2vf8XI~8pd$cdETd4F`L$Dk<8t!xmN3Pl%1H%wVq zNRKO3WI%d+f|T`A^o>#02UCV$ny%=NT^?Fx|Mwb`Acr@WrO1hKmW?@^R6!y>#c)M2 z#%zQlPcc%FuP9KAQjAsk|`!Z zdOGhXXFgD}*;SlXhBLIir&KW$(ldC@UZ^+_Q!G#{!h|h^^mC<(#gIntNl#=IQ}L2w zS&Xn(FkvrXSe9eL&@%hK2vhdsaapZc8w2b$4A`6s((oxZDt2PPHYqkMwkY0EY*lPi zys6l(Kz(H%q~}BQ-?yOAlP`iadh!<`y#&%r%M@?L0oxtdu|1G}i3jWzUdKwS_^J$F zM=@U?L;7W&ug~If7@iHoaai<=Un5t1p*W4{`V!J88Jc5C@a^h~a|--|9>sYahAmHI zCQNZv@qLV~?=V{xt*Y~E{iL{u*}A3pS#ewOi{e+sZ;CsLyNcf-y$aH+A-x9DDBxcU z=`u*Kga41c_kfG)=>CTn*jrKD-g`4qL7Eh!iBu(`62O{7vce*(z~Zu45=}UXF}?Sm z#gdRGz4vH(Pt^3@tLZVlyl3v+yX*=Q0k_euHEq@zAr_DDut`a18@o3I&2ofm4q+#=xb}Ah;A-g^qkcjuWsq zi{EG@J&MYhAQe`H9YLnBf&A8}0wG7x{0P-h>2(zG~mB4Hn zf!UJ;W^H830uL$dhZiN)D^=F1SSg~ci=gZoG?j`rVqP(l`(8k{Rg=?bIy(#GuSn|bwYWNa zYXoJ(LD^*lWtW5eRS9KR5tI#ZID{nhEeiCHq6)M+uSXSVb>0{v!fsI9Ou&+-xQX~; zZz5Rsb~J=k)18WYM0njz;Pv(pay+DXiok2DVw>V&#UqMG6^|(%S3IG366EiK{5_Dr z5AqK{{vpUe0{O=v{{-Zp_9~u^!Rz@LybyYyN$|p0>oIHj?FhVv1Fv@oypZ{yOYr)D zxMCi~N95D}Ey%wRzls#nf*Zvbid_U?UxIvBRPhzazZxRIzEk`t0_+C@u&;^D`$@2Q z-}F;Q$_y!ni{f_$zNf-Pv5G$l$i5paR}7a*xiSM$rlgd#l2NisPRT3Nm7|nsU4H;M zR=peKKY{#bkpBXBo|hbbwcmS{V?>lG)gsE2dXWDiq3kaSWmMV-%7%e5r5jPE^nm=& z7|N7m5oLqCom6Hivk_y;i6H+ws>}gOHZ+VWCn<{%Ey@BklT-?tNo6sbNebf&^n;k< z7YQzhC`$!|DN7JxlpNKVvKXx-=Gu#uRL)S6W6G6P%0rbimDS2w%Gt^}${OWiK+!-k zK(Rn^K=DAO12qb$(LiPND(gg7OgUe4#gvBwH74eYQL30LM(IcJH5`0ln4YMz1t^7t zFLF}3vXwc3e1O7OTvNqwbj75D8kC(%vY1C10ZJWJt^`UmM2sD+B#U{J9c2f~0hALcSFiHom=?P{rp2xX${o{UlsB%$4je(*a8PzVLD>y} zhXRVbd6jrh#3p$;9&(8vJhGR(KfgB|1n^<=sH}qRM*#U+D~KT1@$%avK3l zo^mT%O6mZ#d81HxxLmCN_7MqRPbl$K6`D!qQv_e*hLYt)PXdMRRd5pK%pyE3sfCY^+3%9Y93JY zfm+b3@{9IS6%f^zDhSj<$vz$)S6@es0Bkq_BawPk=twP!sV|ifsmG0z`uM@)wSN{q z(zL#+TSX%Er~s%VqAK*#jvOMmPEwsJDlZbLhgyuLPK6s|(aCP;=SwM5FOdLtj_Q0- zft^PH<{vDVl;u*@CW5fbRF|u+P+h6IN_Dj=s_Ic~1ga76lvgSMR5MUZfkMv{fwT;$ z<-MxSF@*KTG#L5|trEi8B@Na&0>dIz^rPA&fZ>83vb*vL@*x{5Ys9ZO#2!^) zIK!ywF`zsg||R-pb;y?~SYR2Wg#A7bhUCA_?>dQF7bs{~>Z z0x>*@5`h`+mrKg>j_NZ4v3FJPsoqz8p!!htk?LdBC#p|@!hW<0sMSEN0qSU=jsa>d zQ0ss?wpaCe%t(F}gV=XK9Vhu<$4d}9X#`@!f!Ln}Vt)bE9fO!Ug+Qzo7l^g0DM(>( zg&6s!07sIVm=x8V8bcaJ)i~fkA*#j!|N5c9Os!B0hi&DlRYa4Wh(=GXC4<5Z{qUls zr1#%yliDhvOl=`3J9&^y5_xWQCW1`uQG3-s^;q=*>I2o|)Z^9Y<(~@FX+WJ0)EPjX z3Dj9Yoek7EK%LvG&JsbU&J{tXE&%F031k;YAiHD)WWxZNx)edCMz{BT31pQ7WP3Yb zP(4eHCu~L4vw^xWsz&GLq9MYoUX8~|;4o4>kHG6rsen#ZdZqZx*Vu0fVvW>tAN63h$v7!K%wp2)T@pK z>rr>bu!Smavt%Q$m9TZg2)2fUEfT9oy#c5#61GUJ9`&j6a`FM{8l0jKzfpndCApuY zCb4?d=K|FmRi6*kbwfnh#cC3(M@?e&P`E?9M}0Z5lh+SuCsQAiYU@#p!FtprSPyk0 z+DWyrzMr~&ufY75nndeSU$4GFeWUs&_08&A)VHc{Q{N8M%|P7()U80>26(0pbq7#) z0(BQqclWCAjH$4DV=#LVsCy(8cAo^ZhelvF9GH<{J?dwGx>tgk5UgjfD(q!73Dl#0 z1*rR@>eqmJV2A*FODzWKQIkMD6bY*T4+n;*KURMxn#WHGxV8=<$Jgp#2)4daf2;mZ z{k{4J^^fY^>Yvm<1NAUaj{x;3Q0PED4iq|&PXhH6P*3-&e-+()^`E2XD~^zTq)7ql z8A*jbPqydE@$7n_c8;KH80gZBMs#U1fOe)V2sSZj{d zkZ3)c#Xx-!)f@%XheHHelSYizqao3HsE-gYdz;;IPs{EWHh(M9B-1Z-9yNF=zVxWGMu!hTe_U`d(dNd?lj|RQvpQ4)0 zK>a*Kob_tNa6K9lu7@JA^))115A|z*WtMWfgqGVhcZ&GBgW&7;K{81>?$Wt`8PF*}rvjY@v>a%vSMx*+U(bl%nC1nb=@`Cf zHs+1dqekF09C*D+;Pn>J7=TlVGpuzS4Y4 z(2}S51|de1U;+QIrcm>f1`n6OS4Wy(5MT7@A>{a5%OSqBGHr@BRhy=jYbhIp)&|08%KGerHR#T15^M@E|@{YBeG05%MOX>ABFtsQ7% z3}9Lp(O&~bfQmFqAzZ+H7r}05EMX0hkrx@(-b0wZ+;g z0>HEf5rEl;kfT&vO#oJ=E!S3PE49b3rz}!7N?=~6?G_<+9D!IaPFZMIk*R$;yPsv1 zvTV?vO)z$n_GIlT+EcZsX;0Ulp*>T37SQ=XPXf9C=t7{2fG!4lGSCMBJ*8KBP7Grg z#4vUV&{HLhO^YkBk!bwGSze*tOfa?uXpFWmSV?U!VoZBonu2_QJ_JXV9 zqP>lv>{g&lqT1Vm#&v{4Qet;&F?dgp_8x+=GDO+l*N90qZPPv~BJ2@@unJUS|FA$z z`?U5Y0|2Hu#&iX=Z`TnNQ89UoGX0CSMX?m)c!;O zwj1cWs21@z#8~{=-?hTB=sfM8#7fRZxaef)>C^qg>MJ{?6YF)9jukMbV+h7bEdIS^ zilI`Mp)(-HbYpZ1ol>XLsdXBiR;SbHfnEgk;Xoe&^pQX>2D$<0qk#4Uy`)!X6g_>N zRrK_AXj2;{Pd^}e`pZV_e*sdI9+me5H{!Vk9`A^b%ZG zq??Qo)1jGZj_T0NEFGE-(;cD{)(=YY!f4%z#8P5(#2($rxSEyf zG7^hlcQS!y|M>ktEzMi!EF$X4ijyJg*|*p6>dOm7ah1}0CO zIB{-gAlx~zvBlrs5?CJWyJ+(_&Z(PN8d{y78~d)UE32)WILjYw&+0@iux3ffAI1m@ zeWl+hmcG70F>@HD2RcJt;l@DcU^Uz(*07;LQN8aql=?dZS*;!6(6Yg*xLd5^tJ`-phEu0PXIY6JgS@$fW{CV9Ax)*^ykANK!d?nCA z2m)VKc|}DN>FhP(z{+4?)vQocAa*IEYuzehgw@nDqU4+nZJFd zzccxP)c0P~VYJANy4Q7Y=-veSe4sA?`ofK}^K|d%-tESjfs25?ynFKEs?r$6b&dX3 zq*W2WQ5$Fsb_9?_Tl`kFzcVsB)Si=_T@yg4w?`I*LT!Rqulty&uTOx!xX%QBuEQ;B zJ+i2*r+Z>|c8~5W-Pb^00`#TC6l#$AP-Dm+t6i*2qWyc_Zj$qQ*$v%!-T6JTn{+>S zQbm92{+4A$b$U{j>UJ+0$Cq3BqCJ*CH( z)?4(np3$>(MKl zyoj){(%*>kKD-P$8VJ{fg6)w8g&Lb9HnG$no)_#4E+OL46JQ0J>O&pXft7*Q7@*2g zN}f4OmLbTh%IiaM`bB)yggS!}1lTNp2Npmcmb79$?TF33%8xvzC^u`;1V_#!{IgDw zsoo;HvPW;#+kn0f=znz=En3h#J+t+&%;Ht$i(1-OWv-r=nSFG-#0$6HBg?uPIVjy2 ztH%{koAn3i57dv-kJn?%Zv^@#pl=5H7NBq4tk06I*H6&r=yQR-jr1)X@I3(ZRw9G{ z(|t=nS${D0E&W0IDf+2E-wyO0K;MadOFvCtLL___(D(1ZzNN>2Ls31BE$@!^E&WXW z?8LsMpQEn<`W~R~{inXAuh*0HNeO*RzmW8;`}VPKNkU$%#|7b0J&r^kjOuYDBCPBf ztOu>=Na{h&`Zm&omg-ydLH#oQa(ye%+kk!;=tqEl6zIo*ew_565cZ%I`mor8o*+Hw zNuZzkztn?JcOH|OlT(nDOS(~BUc4J&K*b*Yv3i{FdJ5>L|EU|T*Poc&jZW5|AH-HW7$A=R(- z^{|)pxOk?|dg))&zYaA1FYN3e%zEkH*1wnB!{XK}ZkeQJf1<~g$jSCcdbCUb!;oaO z8)fvf{ufb3?+_Wi3-kvA%Lv!m_UQl8{|)qeK);_Xo<7|kqrf0HP)RZ|u!hlyL<48w z4e5qaKz{`E$3Uae|8$cf!!X96Ferik3}~E;`4Z@_1Y7#wbbSO_8Vo2)gAr)lT)${~ zep6=Qtjxxx+5hMZ7;FZNejGK}f!-CBJ=t9{xGNwr$!ox4Iky;mhOveN3 zqSBH*Y?x!H!NKMfpnnJY55no8_`Fh8^@e#UDcPgl2gd{@Jy>M$qcCJ|%HEQ_Eqh1y zuI#<;^6rZ6%I@jiGrFsY7#dLw0YkGWhChiI{sJb2h~da%GIK@UomY?@;{a}G?lH6) za7yHFU}VUFzGf#dL#jP&=uGCoO2g5pfefn*s|{;_NdtxghS_L1#<13~4j2xYV}W@& zX@F}uUKsQ+@&?7cp$&Qx2e`s@*6PM4f5hL0PI7CLINnOUl`!5loFrC8HzzOKplBXim4gi)hgP{T&@-H6AO|xT&NiH5IM;BV;e5jdh6@cB87>Bl;mM=} zGYXi|z+?b31{eh}N?=sIhD*~FhRY3C7_Ky2Ww;uzdw@~n`wC_PFxkKy49p?GOd~f0 zWsyzzPR4+(wV_Z%904}O@8Qs`Ik>bd>?f{x?4iOFe;gYy#s-RHNLRn6BT&`e6jN zB;qCwn!Zk$?WhiRMv}*$4T_0_<`e3v4Xo%2bV@u*pe&gUGjNRT4>z`~*@GWBgVs=i zqwB~TGE~O)cZwxSee_1d%|yxH1dJwXxCIz3(LJT{;sz4Zzz^&FI3DX8j!Wg=VYrKw zeb-z*P?aXg4%!$x*>$tJB7_4a z;jn+rM#D?8du40HT(6Q`uL0x4Ty+a8>cqQmk-KjLLNG3oGg!qKps6tCA(1kuZ** z7vObStG_cw{1+tamxf)2uYfram~p_2$E=HT@{6*vh5r`fKv%q4RFGesm0gsbT`0}o z8-6h03!)ywkA~gAWCD}bWBA#C-FzbcPsT}O{7p?F1!6bEX&k(R6F41#aAb{mPyKi7 zKal}{5eA?Y$w4Y!GNu~SjB?o+BW0wGjFDZ8GfCyM;xj=DBf&Q89sahC!<%B=cy4Vq zF!{jb0h0^N)c=@yaF;xGK=mKpGT9EKZj^DfF$2MtOkIsX(gMsBU?vGIGm_AMM%0(M ze?Eq7qsC~E={6d*h8K-`UT&cjV2>vyBL_sz#P_d*=$5tgF@RB z?CfauldjvRDm&+w2b%p|t&s&~<+B9sD!|a_HhT78TaVEzTeHVKG3{960SyWZX@;bs z_f(IYj0YOW8OO`k{6jhukT1C^=671-oef+@LOHd`QOi^h<3x_?QKA(5asAAb<%ORV7(lJ->N zX}~N3=5WD=FyxJHw_82z;;|FF5Fpam3v9g0c(?H$ zV48th3JjVJ6w;X5dPic{U5vlW(cA@bLK?l5MfkI-eI>pei3#8#QqET6Hsiy{5MP%>GJ}dCK@~Kgm2VNG8-LneE0`iDY&dcN$+3CDQ@S z3Sh#LWL`7AZhXV|rtvLcI)TC7)dkEdV29ucgEX*Q-a%`xmUq5V8p7>1ljx=r6OWKn)G_MpVUhiRT^;ob)yVzG+}(P%I( z#KPjE3DXiIZE7;Iz+5a06fP153jfimo!BVB6ch#omx#pStXb5AI{MQ1fWQuRLIvKUQX@lt`V6Fn@>K@Z6CPZ8mn3o8yhU)kx zyP8AJHjuw;I?HrE`pc%XP3IUZO(^yrV9=hUzr1Oa=>pS*ri)A{r_I3J2F#JC1*TV05;vG`G~Hyn z*>npq*8%e{V6F$|MqqB<|4QPneoErLeo6v;kf>=ZFgNUzl6Vx&rRg!^X5KV_n<;jd zr%9S;OwR&?Ekz#-bwk{zOt_SK#fKi-46uL#V&y^p!Co8BeNeZ%yo=`E4DcK~xI zFn3AJeb4m1=>yY;rjLNR8yNJ@?gi$4V1zgC`)g`RY#wn?42eFx>Fa*X{hl!Q2Vm~o zC+7Z4H0v*>UroOO^8hdp0`riNe;?gTvkc2Irduis)_;M^+ zGUhRYWFC)8#;h{q%HGXpwOM1#BZxX%ZAA$KDm_LB|lic`=$Y2=m<;WaAu5C)3 z`4DH7q!+{ceU9JkH#eehYF+}&dr>ovS>Gpu+kd{Vxy6iABvCW^JRd~O%YpfDZ*%i@`3m#Z=op)?G^2y}Jup8EV^&_UO6F@w+tAzCjdjM|XY;>|wD|_& zK4WLk1Lh~eef}@Kri?k#X7m820P~AT=I!W6o6&Ut8h514cbo4Yz>zjTAkM6#DV!|K ztnY0uUE<^;=0}rN=M&~9lW#m@#@Uht2iyFDc?a4z^NZ%~!2AuYtjE05{1UJ!z!nj- z{tp~%^Xuk!(7`spVSdy6micX9Q-MtbRt_w+$^5SQJ@fnK4}hhC)dPC~utNOp|Dl83 zH*h!u%z$46tmE`786+z;eLyL~ebP9|KJ=@23fAoP(B-x7&sj*`F#==w23jPc3NS z_tb)x47_7OB9!~01ubfHWGotV{8{zh9Dj?Eq%m2{z-ocj3CeE}$KT?xxc3yJ#Vd%> z5O*&v2Uzeu(`L(omT{KxB6E$vnt(OOm}{A6$+qNJaxHnlT7b0zYXjB+tY`l-x40j3 zr}krR31Mz2u=agoZY7!y%XG^OOBJwAU|qnvh5Y;I_*>?Xa%wDxS!#hrPWpfyD@tMC z9DmC~3vQ)K?qHV1f@H?^NycwkN+h$y(r9TCB{Lq_3BYDbl4-F7Ez2y+Ev>+20Xq@c zY+!SNowWZY6YeLOmHi}hG?C0Pz~=0eWR4?{?zRB1h%cPo8>-`P*+4R$WH}kw0$>Y? z6b5trEoWHHOtMXub1b;jb(7^>%XyabEf)Yg8Q3Yn9t`ZXO_qx+7h5i|Tna1#Z9cF| zffc6vZM;ZWZDrXc)`RcvONO@eDRF7nAmxgC zqS!d$&Hxts`k~ia?z7x)dBF0Z6&8x+>6(yFpDT)@y8S~@3IZXe<9 zX{}om7uH)|x8Ok&2@ag)Z41r{MJ?|DTN|~!2W%Z-)0n{O4nHn3YZBO0E-s$2d}R3; zX{;A%++q2&hY;1EFyj&jVGUD#XnCN0cCdAxzqKnc3%A?^!ZG`9`ND!Hq$gJUwdH3b z<8M&L-&wx5{9yUfvfJ_#unPnkF9dcGu!jSC1h7W}yZBnmFP2{|zoCr(u>5KH%YvR} z1F%N{>lb9a1lUGk1Hd*9CgcBwT&v-z~%Y)V|>qKj|H3!%hV1vLe69lpxShQGez~XWb z0k78lL_QSm8y^m`;-Z&CS`V?7^ykA6U}&whPERiBP;1>jwYuIq*E$bdy}-KAy2y$E z?ErQKuwkLqoxnzb?E-eC)au2Ft@iI*s{_{NWLksP<$Jbzv8Zgwa!aCEB;a&dS0rbR zSXYv)NZRVCbrrDqUOK@BS=Wj-2>bHn)tRfwM!HN~veum07HGo_vACT!9O%IHgom{H zyV@ID>H?je_(r}q&^)!UIp8mB%*!b%%+Ho8KhD~nT=@ys(~-y4_0|)u8>}Z;Pqv<7 zJ=J;|uxo)m7T9iJj|Ucg;tjx}r9bsr>lxNFt!G)!ww_}>*Lt4yd|*!p_B>$GR!4!| z4D9v5qA_?Nxe1quO;|TPb0=&87S|2q;?Q8EH9!{0CfaH1m0|_Q;hfRF+i7uCbX9wE zD64}QhD7FX6blAi+O+Ql4_xH6Vv#2_C@S{7$oOX8fy=%@Ec?U;Mg7pq{^zCIdt>>n zVpS&%d0X^gRSn#lyTmF^X;91>T5A%$uQ;a$N6!6X9j7%Y%J;pFfr=KqB&vw=OAm_r+`Ol+vBuBxkVs3@=ij(#P~tE#Iit*)rWVn`XHihtJfeAN0Ju;&PV46%1F z8n$08`1_h;j>(?j$X++WaZFJ`!30NPVez_klEQe&`Wk7-%hp${uL6tx{Q_WdOY(Z_ z8`d{TLoNdL;vqHUAL$%ITN5ZP&M%taC@#!jCvN+&en8syA+VRk+lMP}Nc*IQd~W@U zG~^5Gm)2dtUIy&tz+OQb@{RRd(vT~G6?PK;*Cg^2q4;NDuZmOrnYAhyun~gNa4(z|;jd3M6#%n|OX`sf8 zw@o08xdGT4Nn-}ACqGB3C)@J;7F&)j*Oq6?w@tF)xc4StZwB^OU~dQZPGIkj6M$1G z1bia1r{KukHWk=g@Xle`;yp5tV#BI$6S|;jZWV5d$DxX_oURVH>7$F@9&E-Xc4Bgz zKbP=U>}MXhI1nStmACQ+R!PA+KvPE;iwH~LLN=> zUThmg6Y~>&x0{b$suLAozux|qUHn8sk`#!L!Za)V0 zQ(!*__Df*D0`?nVzaw?sXuHXFv+Wk!t+v~2x7+Tp-D$hacDL;w+r75?Z1>w9usvvd z$hOtC&Gs;`KLAGqX96x0xDw#%fm;gP8sJU`?lRzR0PZ2+b^!Mga6bc218)F+9Pm?t zuLb_7WI;V43hL6l$;~aw!T$@3vWtp}3v=@mlEg;<{w2BDjd@8lZ5L^J zez=SZ_=}sfbDD6~OG1SrO*w`6xwy8sa8gcQZcagdZg$Q4AgFsHbr>pY#ydxdr*zd3pIrTwea9 z+}!?r3i$KUsfxps{&UK_H2!FGQkV+y9KpLm(la^0RYt z5L>zV#kqw82oF0+lOH>7qB{6Sr0I9Qd4THJgRHt$!RClBHn&NJF;gcd*z(SaVn%;Q$3!yu zNCwXnF-%RMmF#_+Sc5xqnnU3>5(KMpPTc|=1dBHk($tmDlpg2gWaVUaHZ7l6w+16b zwN0!JF2VhtYbFZHa#bk2ymMkgGXz~r?oON$@MEB)&WU{u%WCm;62dd%i84EIpIYbC zJ>!E(RrJv;GzjSnCix~Ze$C6x zo0N~7$Q#H)7A|RQYAQ}r{Pr}FoDWcUG)VNsbq99%nZXF^4RI^$|Npc`tO0Rlkf1Td zCXMI|NnQO{^@W`kVfWGS&FJ1dSadUri?j0z3ea)JiH=Emg+={(Ci*~2as#=0bcN9( zO`l*_SU5;m2(A8qs~?0`k930nO(#%^fctE?_6bcvbJLQdKtVsJ8_m&BhD|EZo3Ytu+?_}}yfiwL}3``;ww6%^rQ#-!Zhyu1SZ z%E8h404AZ(kEw73mf%6!ogz(N55I@*ZCIR>hw}%8MR`S&@^g#wakM^Z01uLkiyNCJ zYk)Q|AD^Qw0wEnn%2f;!PUX06|IfSmj_lfwJ&c8 zHm+E`?VE5cE-Eg-Iii93=91i|Kp~m+5MG7av+PB< z!^b|+o^8*u=i2k^`SwZn0(&8_KLWcOSX@{1GqAq^`zx@&0sA|!fArdm#jy4EsbbiA zdkL@@`HlPo_HRhZz!~nDz{$x3xv6hLMBJs4B`zbwSriNm)Bj;hXw|G>d$5f})^!f} zn9Qw|5tE6NE)5F%fN3z?ff(NxSEThX1q0%Qx*`>;aju1|#=tc0{-rdMsL;aNtgKLT zGcG+GsHDz>R3s+y-kMa>6=}iXPy;S1fG3{V?J5 z4Ln!-4?Nx_B@cH_k+1j;2Kxg0A`Dq?UkIEmYCjyf6cSL$R32!J_(hgiC%0D;eS>`o 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 + + diff --git a/Box42.xcodeproj/xcuserdata/chanheki.xcuserdatad/xcschemes/xcschememanagement.plist b/Box42.xcodeproj/xcuserdata/chanheki.xcuserdatad/xcschemes/xcschememanagement.plist new file mode 100644 index 0000000..2d4f387 --- /dev/null +++ b/Box42.xcodeproj/xcuserdata/chanheki.xcuserdatad/xcschemes/xcschememanagement.plist @@ -0,0 +1,14 @@ + + + + + SchemeUserState + + Box42.xcscheme_^#shared#^_ + + orderHint + 0 + + + + diff --git a/Box42/Resources/Main.storyboard b/Box42/Resources/Main.storyboard index dbd2ec4..0a9696b 100644 --- a/Box42/Resources/Main.storyboard +++ b/Box42/Resources/Main.storyboard @@ -173,67 +173,17 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - + + + + - + @@ -266,14 +216,10 @@ - - - - - + From 375d98387ce0aeb04c8be34089c2f53be7e5fac6 Mon Sep 17 00:00:00 2001 From: chanhihi Date: Fri, 11 Aug 2023 04:22:22 +0900 Subject: [PATCH 3/5] docs: .gitignore --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index dd2592e..f24b421 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ .DS_Store Box42/.DS_Store + +.prettierrc +.swift-format \ No newline at end of file From 9d502f465b35d7197f29d9313b288bed9a18037c Mon Sep 17 00:00:00 2001 From: chanhihi Date: Fri, 11 Aug 2023 04:22:29 +0900 Subject: [PATCH 4/5] =?UTF-8?q?test(=F0=9F=96=A5):=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=EB=A5=BC=20=EC=9C=84=ED=95=B4=20xcodeproj=EB=A5=BC=20?= =?UTF-8?q?=EB=93=B1=EB=A1=9D=ED=95=A9=EB=8B=88=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../UserInterfaceState.xcuserstate | Bin 187119 -> 187119 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Box42.xcodeproj/project.xcworkspace/xcuserdata/chanheki.xcuserdatad/UserInterfaceState.xcuserstate b/Box42.xcodeproj/project.xcworkspace/xcuserdata/chanheki.xcuserdatad/UserInterfaceState.xcuserstate index 1fe46685f8a7492d0844718da0d7cbb975fbc3c9..6643712816c4033543191d1bfd4fcf964579c85c 100644 GIT binary patch delta 82 zcmV-Y0ImP;wF~dH3$Ps14g)h1&4BcQ1#zMSe-hA>VAB_qLDL=q(6eCEPxk~RnJ$#K ov&sQ?Ee6nlLV*Qxlfk1Hmq_>l6amn;UHAckX#pa)-(dm}dGo*{h5!Hn delta 84 zcmV-a0IUD+wF~dH3$Ps16cWq>Gl2zhfb^mg&jWvf1#*D_4U;g_F9FZ9VAD_c1OQ`8 qQMa?o0e3A1&wxUK1#*+YqZpS+_yH6F&$nIp0fA`&Be&mS0uXuR4 Date: Mon, 14 Aug 2023 05:23:35 +0900 Subject: [PATCH 5/5] feat: add script files --- Box42/Scripts/sh/cleanCache.sh | 67 ++++++------- Box42/Scripts/sh/exportMacOSInfo.sh | 1 + Box42/Scripts/sh/importMacOSInfo.sh | 1 + Box42/Scripts/sh/keyMapping.sh | 146 ++++++++++++++++++++++++++++ 4 files changed, 182 insertions(+), 33 deletions(-) create mode 100644 Box42/Scripts/sh/exportMacOSInfo.sh create mode 100644 Box42/Scripts/sh/importMacOSInfo.sh create mode 100644 Box42/Scripts/sh/keyMapping.sh diff --git a/Box42/Scripts/sh/cleanCache.sh b/Box42/Scripts/sh/cleanCache.sh index d62bfa5..4e0024f 100755 --- a/Box42/Scripts/sh/cleanCache.sh +++ b/Box42/Scripts/sh/cleanCache.sh @@ -89,68 +89,69 @@ echo "$MAGENTA Clearing 🧹 cache ... $DELINE $RESET $CURSUP " # Trash echo "$RED Clearing 🧹 trash can ...$DELINE $RESET $CURSUP " -rm -rf ~/.Trash/* +rm -rf ~/.Trash/* &>/dev/null # 42 Caches echo "$RED Clearing 🧹 42Cache ...$DELINE $RESET $CURSUP" -rm -rf ~/Library/*.42* -rm -rf ~/*.42* -rm -rf ~/.zcompdump* -rm -rf ~/.cocoapods.42_cache_bak* +rm -rf ~/Library/*.42* &>/dev/null +rm -rf ~/*.42* &>/dev/null +rm -rf ~/.zcompdump* &>/dev/null +rm -rf ~/.cocoapods.42_cache_bak* &>/dev/null # General Caches echo "$RED Clearing 🧹 Library ...$DELINE $RESET $CURSUP" chmod -R 644 ~/Library/Caches/Homebrew &>/dev/null -rm -rf ~/Library/Caches/* -rm -rf ~/Library/Application\ Support/Caches/* +rm -rf ~/Library/Caches/* &>/dev/null +rm -rf ~/Library/Application\ Support/Caches/* &>/dev/null echo "$RED Clearing 🧹 Slack ...$DELINE $RESET $CURSUP" -rm -rf ~/Library/Application\ Support/Slack/Service\ Worker/CacheAvail/* -rm -rf ~/Library/Application\ Support/Slack/Cache/* +rm -rf ~/Library/Application\ Support/Slack/Service\ Worker/CacheAvail/* &>/dev/null +rm -rf ~/Library/Application\ Support/Slack/Cache/* &>/dev/null echo "$RED Clearing 🧹 Discord ...$DELINE $RESET $CURSUP" -rm -rf ~/Library/Application\ Support/discord/Cache/* -rm -rf ~/Library/Application\ Support/discord/Code\ Cache/js* -rm -rf ~/Library/Application\ Support/discord/Crashpad/completed/* +rm -rf ~/Library/Application\ Support/discord/Cache/* &>/dev/null +rm -rf ~/Library/Application\ Support/discord/Code\ Cache/js* &>/dev/null +rm -rf ~/Library/Application\ Support/discord/Crashpad/completed/* &>/dev/null echo "$RED Clearing 🧹 VS Code ...$DELINE $RESET $CURSUP" -rm -rf ~/Library/Application\ Support/Code/Cache/* -rm -rf ~/Library/Application\ Support/Code/CachedData/* -rm -rf ~/Library/Application\ Support/Code/CachedExtensionVSIXs/* -rm -rf ~/Library/Application\ Support/Code/Crashpad/completed/* -rm -rf ~/Library/Application\ Support/Code/User/workspaceAvail/* +rm -rf ~/Library/Application\ Support/Code/Cache/* &>/dev/null +rm -rf ~/Library/Application\ Support/Code/CachedData/* &>/dev/null +rm -rf ~/Library/Application\ Support/Code/CachedExtensionVSIXs/* &>/dev/null +rm -rf ~/Library/Application\ Support/Code/Crashpad/completed/* &>/dev/null +rm -rf ~/Library/Application\ Support/Code/User/workspaceAvail/* &>/dev/null echo "$RED Clearing 🧹 Chrome ...$DELINE $RESET $CURSUP" -rm -rf ~/Library/Application\ Support/Google/Chrome/Profile\ [0-9]/Service\ Worker/CacheAvail/* -rm -rf ~/Library/Application\ Support/Google/Chrome/Default/Service\ Worker/CacheAvail/* -rm -rf ~/Library/Application\ Support/Google/Chrome/Profile\ [0-9]/Application\ Cache/* -rm -rf ~/Library/Application\ Support/Google/Chrome/Default/Application\ Cache/* -rm -rf ~/Library/Application\ Support/Google/Chrome/Crashpad/completed/* +rm -rf ~/Library/Application\ Support/Google/Chrome/Profile\ [0-9]/Service\ Worker/CacheAvail/* &>/dev/null +rm -rf ~/Library/Application\ Support/Google/Chrome/Default/Service\ Worker/CacheAvail/* &>/dev/null +rm -rf ~/Library/Application\ Support/Google/Chrome/Profile\ [0-9]/Application\ Cache/* &>/dev/null +rm -rf ~/Library/Application\ Support/Google/Chrome/Default/Application\ Cache/* &>/dev/null +rm -rf ~/Library/Application\ Support/Google/Chrome/Crashpad/completed/* &>/dev/null # tmp downloaded files with browsers -rm -rf ~/Library/Application\ Support/Chromium/Default/File\ System -rm -rf ~/Library/Application\ Support/Chromium/Profile\ [0-9]/File\ System -rm -rf ~/Library/Application\ Support/Google/Chrome/Default/File\ System -rm -rf ~/Library/Application\ Support/Google/Chrome/Profile\ [0-9]/File\ System +rm -rf ~/Library/Application\ Support/Chromium/Default/File\ System &>/dev/null +rm -rf ~/Library/Application\ Support/Chromium/Profile\ [0-9]/File\ System &>/dev/null +rm -rf ~/Library/Application\ Support/Google/Chrome/Default/File\ System &>/dev/null +rm -rf ~/Library/Application\ Support/Google/Chrome/Profile\ [0-9]/File\ System &>/dev/null # .DS_Store files -echo "$RED Clearing 🧹 All .DS_Store ...$DELINE $RESET $CURSUP" -find ~ -name .DS_Store -depth -exec rm {} \; &>/dev/null +#echo "$RED Clearing 🧹 All .DS_Store ...$DELINE $RESET $CURSUP" +#find ~ -name .DS_Store -depth -exec rm {} \; &>/dev/null # Delete desktop -rm -rf ~/Desktop/Relocated Items +rm -rf ~/Desktop/Relocated Items &>/dev/null # Calculate usage after cleaning Used=$(df -h ~ | grep ~ | awk '{print($3)}' | tr 'i' 'B') # Calculate usage after cleaning -Avail=$(df -h ~ | grep ~ | awk '{print($4)}' | tr 'i' 'B') -if [ "$Avail" == "0BB" ]; +Avail2=$(df -h ~ | grep ~ | awk '{print($4)}' | tr 'i' 'B') +if [ "$Avail2" == "0BB" ]; then - Avail="0B" + Avail2="0B" fi +# Output the result echo "\n$MAGENTA ✨ Complete Clearing cache ✨ $RESET \n" -echo "$GREEN Available/"$RED"Used/"$BLUE"Size "$GREEN"$Avail/"$RED"$Used/"$BLUE"$Size $RESET\n" +echo "$GREEN Available/"$RED"Used/"$BLUE"Size "$GREEN"$Avail2/"$RED"$Used/"$BLUE"$Size $RESET\n" echo "📦: https://github.com/42Box" echo "🦊: chanheki in 42Box" echo "" diff --git a/Box42/Scripts/sh/exportMacOSInfo.sh b/Box42/Scripts/sh/exportMacOSInfo.sh new file mode 100644 index 0000000..32eed6b --- /dev/null +++ b/Box42/Scripts/sh/exportMacOSInfo.sh @@ -0,0 +1 @@ +defaults export -g ~/.mysettings.plist diff --git a/Box42/Scripts/sh/importMacOSInfo.sh b/Box42/Scripts/sh/importMacOSInfo.sh new file mode 100644 index 0000000..070f87a --- /dev/null +++ b/Box42/Scripts/sh/importMacOSInfo.sh @@ -0,0 +1 @@ +defaults -currentHost import ~/.mysettings.plist diff --git a/Box42/Scripts/sh/keyMapping.sh b/Box42/Scripts/sh/keyMapping.sh new file mode 100644 index 0000000..3d8010f --- /dev/null +++ b/Box42/Scripts/sh/keyMapping.sh @@ -0,0 +1,146 @@ +#!/bin/sh + +# keyMapping.sh +# Box42 +# +# Created by Chanhee Kim on 8/13/23. +# + +mac_old=(0 0xff00000005 0xff00000004 0xff0100000010 0xff010004 0xff00000009 0xff00000008 0xc000000b4 0xc000000cd 0xc000000b3 0xc000000e2 0xc000000ea 0xc000000e9) +mac_new=(0 0xff00000005 0xff00000004 0xff0100000010 0xc00000221 0xc000000cf 0x10000009b 0xc000000b4 0xc000000cd 0xc000000b3 0xc000000e2 0xc000000ea 0xc000000e9) + +this_mac=(${mac_new[@]}) # change based on "old" or "new" mac / magic keyboard layout + +fn_keys=(0 0x70000003a 0x70000003b 0x70000003c 0x70000003d 0x70000003e 0x70000003f 0x700000040 0x700000041 0x700000042 0x700000043 0x700000044 0x700000045 0x700000068 0x700000069 0x70000006a 0x70000006b 0x70000006c 0x70000006d 0x70000006e) +fn_bri_dec=0xff0100000021 # or 0xc00000070 +fn_bri_inc=0xff0100000020 # or 0xc0000006f +fn_missionc=0xff0100000010 +fn_spotl=0xff0100000001 # or 0xc00000221 +fn_dict=0xc000000cf +fn_dnd=0x10000009b +fn_rew=0xc000000b4 +fn_play=0xc000000cd +fn_fwd=0xc000000b3 +fn_mute=0xc000000e2 +fn_vol_inc=0xc000000ea +fn_vol_dec=0xc000000e9 +fn_kbd_inc=0xff00000008 +fn_kbd_dec=0xff00000009 +fn_launchp=0xff0100000004 +fn_globe=0xff0100000030 +fn_desktop=0x700000044 # or f11 +fn_num_div=0x700000054 +fn_num_mul=0x700000055 +fn_num_sub=0x700000056 +fn_num_add=0x700000057 +fn_num_enter=0x700000058 +fn_num1=0x700000059 +fn_num2=0x70000005a +fn_num3=0x70000005b +fn_num4=0x70000005c +fn_num5=0x70000005d +fn_num6=0x70000005e +fn_num7=0x70000005f +fn_num8=0x700000060 +fn_num9=0x700000061 +fn_num0=0x700000062 +fn_num_dot=0x700000063 +fn_num_equ=0x700000067 + +function help() { + echo "$LESS_TERMCAP_mb$0 $LESS_TERMCAP_md[command]$LESS_TERMCAP_me + where $LESS_TERMCAP_md[command]$LESS_TERMCAP_me is one of: + show display the current user key map + export output the current user key map for creating a LaunchAgent + reset reset user key map to default + default display the default key map (from ioreg) +$LESS_TERMCAP_mb$0 $LESS_TERMCAP_md[n=keycode ...]$LESS_TERMCAP_me + where ${LESS_TERMCAP_us}n$LESS_TERMCAP_ue is 1 to 12 for thefunction key, and + ${LESS_TERMCAP_us}keycode$LESS_TERMCAP_ue is a hex key code starting with 0x +$LESS_TERMCAP_mb$0 $LESS_TERMCAP_md[n=function ...]$LESS_TERMCAP_me + where ${LESS_TERMCAP_us}n$LESS_TERMCAP_ue is 1 to 12 for the function key, and + ${LESS_TERMCAP_us}function$LESS_TERMCAP_ue is one of: + bri_dec | bri_inc decrease / increase display brightness + kbd_dec | kbd_inc decrease / increase keyboard backlight brightness + missionc | launchp show mission control / launchpad + spotl | dict spotlight search / dictation (hold for Siri) + dnd | mute toggle do not disturb / mute + rew | play | fwd rewind / play or pause / fast-forward media + vol_dec | vol_inc decrease / increase volume + globe | desktop show emoji / desktop (same as F11) + num0 to num9 number pad keys, along with: + num_add | num_sub | num_mul | num_div | num_dot | num_equ | num_enter +" +} +function show() { + echo Current user key map + hidutil property -g UserKeyMapping +} +function reset() { + echo Reset user key map + hidutil property -s "{\"UserKeyMapping\":[]}" >/dev/null +} +function default() { + echo Show default key map + ioreg -l | grep -o "\"FnFunctionUsageMap\" = .*" +} +function export() { + x=$(hidutil property -g UserKeyMapping | sed -E "s/(HIDKeyboardModifierMappingDst) = (.*);/\"\1\": \2,/g;s/(HIDKeyboardModifierMappingSrc) = (.*);/\"\1\": \2/g;s/\(/[/;s/\)/]/") + echo ' + + + + Label + com.local.KeyRemapping + ProgramArguments + + /usr/bin/hidutil + property + --set + {"UserKeyMapping":'"$x"' + } + + RunAtLoad + + +' +} +function map() { + y="" + for x in "$@"; do + x=(${x//=/ }) + x0=${x[0]} + x1=${x[1]} + if [[ ${#x[@]} -eq 2 && ( $x0 == [1-9] || $x0 == 1[012]) ]]; then + fn=${this_mac[$x0]} + [[ "$fn" == "" ]] && echo "Error no such key F$x0" && exit -1 + if [[ "$x1" == f[1-9] || "$x1" == f1[0-9] ]]; then + kc=${x1:1} + kc=${fn_keys[$kc]} + [[ "$kc" == "" ]] && echo "Error mapping F$x0 [$fn] to unknown $x1" && exit -1 + echo "Mapping F$x0 [$fn] to HID $x1 [$kc]" + y="{\"HIDKeyboardModifierMappingSrc\":$fn,\"HIDKeyboardModifierMappingDst\":$kc},$y" + elif [[ "$kc" == 0x[0-9A-Fa-f]* && ( ${#kc} -ge 11 && ${#kc} -le 14 ) ]]; then + echo "Mapping F$x0 [$fn] to HID hex code [$kc]" + y="{\"HIDKeyboardModifierMappingSrc\":$fn,\"HIDKeyboardModifierMappingDst\":$kc},$y" + else + kc=fn_$x1 + kc=${!kc} + [[ "$kc" == "" ]] && echo "Error mapping F$x0 [$fn] to unknown $x1" && exit -1 + echo "Mapping F$x0 [$fn] to HID $x1 [$kc]" + y="{\"HIDKeyboardModifierMappingSrc\":$fn,\"HIDKeyboardModifierMappingDst\":$kc},$y" + fi + fi + hidutil property -s "{\"UserKeyMapping\":[${y%?}]}" >/dev/null + done +} +function kbd() { + map 4=kbd_dec 5=kbd_inc +} +if [[ ${#@} -eq 1 && "$1" != *=* ]]; then + [[ $(LC_ALL=C type -t "$1") == "function" && "$1" != "map" ]] && $1 && exit $? +elif [[ ${#@} -ge 1 ]]; then + map "$@" + exit $? +fi +help