From 1db23c364124bac008af9afaf977605345dfc4f0 Mon Sep 17 00:00:00 2001 From: mesi Date: Wed, 10 Jan 2024 18:21:32 +0900 Subject: [PATCH 1/8] =?UTF-8?q?=E3=83=9D=E3=83=BC=E3=83=AA=E3=83=B3?= =?UTF-8?q?=E3=82=B0=E3=81=8B=E3=82=89=E3=82=A4=E3=83=99=E3=83=B3=E3=83=88?= =?UTF-8?q?=E9=A7=86=E5=8B=95=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nativeSrc/helper.swift | 27 +++++++++++++++++++++++---- nativeSrc/taskbar.helper/main.swift | 28 +++++++++++++++++++++++----- resources/TaskbarHelper | Bin 263824 -> 101048 bytes src/main/funcs/helper.ts | 28 +++++++++++++++++++--------- src/main/main.ts | 7 +++---- 5 files changed, 68 insertions(+), 22 deletions(-) diff --git a/nativeSrc/helper.swift b/nativeSrc/helper.swift index fce2811..d3a03ec 100644 --- a/nativeSrc/helper.swift +++ b/nativeSrc/helper.swift @@ -81,7 +81,28 @@ func getWindowInfoListData() -> Data? { } +class WindowObserver { + static let shared = WindowObserver() + + private init() {} + + func observeWindowChanges() { + let notificationCenter = NSWorkspace.shared.notificationCenter + notificationCenter.addObserver( + self, + selector: #selector(windowDidChange(notification:)), + name: NSWorkspace.didActivateApplicationNotification, + object: nil + ) + } + @objc func windowDidChange(notification: NSNotification) { + if let data = getWindowInfoListData() { + let stdOut = FileHandle.standardOutput + stdOut.write(data) + } + } +} @@ -98,10 +119,8 @@ case "grant": CGRequestScreenCaptureAccess() case "list": - if let data = getWindowInfoListData() { - let stdOut = FileHandle.standardOutput - stdOut.write(data) - } + WindowObserver.shared.observeWindowChanges() + RunLoop.main.run() default: print("default") } diff --git a/nativeSrc/taskbar.helper/main.swift b/nativeSrc/taskbar.helper/main.swift index b1662e0..feee405 100644 --- a/nativeSrc/taskbar.helper/main.swift +++ b/nativeSrc/taskbar.helper/main.swift @@ -86,8 +86,28 @@ func getWindowInfoListData() -> Data? { } +class WindowObserver { + static let shared = WindowObserver() + + private init() {} + + func observeWindowChanges() { + let notificationCenter = NSWorkspace.shared.notificationCenter + notificationCenter.addObserver( + self, + selector: #selector(windowDidChange(notification:)), + name: NSWorkspace.didActivateApplicationNotification, + object: nil + ) + } - + @objc func windowDidChange(notification: NSNotification) { + if let data = getWindowInfoListData() { + let stdOut = FileHandle.standardOutput + stdOut.write(data) + } + } +} let arguments = CommandLine.arguments @@ -103,10 +123,8 @@ case "grant": CGRequestScreenCaptureAccess() case "list": - if let data = getWindowInfoListData() { - let stdOut = FileHandle.standardOutput - stdOut.write(data) - } + WindowObserver.shared.observeWindowChanges() + RunLoop.main.run() default: print("default") } diff --git a/resources/TaskbarHelper b/resources/TaskbarHelper index 499d5e7746fbfe93bf28281abfd28c6e66901b3a..d3f82961bbff994fc7c10f23b56986ac9be21342 100755 GIT binary patch literal 101048 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�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 diff --git a/src/main/funcs/helper.ts b/src/main/funcs/helper.ts index 3a19e1b..d9e9276 100644 --- a/src/main/funcs/helper.ts +++ b/src/main/funcs/helper.ts @@ -18,19 +18,29 @@ export function getAndSubmitProcesses(): void { let rawData = '' try { const taskbarHelper = spawn(binaryPath, ['list']) - taskbarHelper.stdout.on('data', (raw) => { - rawData += raw - }) - taskbarHelper.stderr.on('data', (raw) => { - console.error(raw) - }) - taskbarHelper.on('close', async (code) => { - if ((await code) === 0) { - const jsoned = JSON.parse(Buffer.from(rawData).toString('utf-8')) + taskbarHelper.stdout.on('data', (data) => { + // 画面の変更情報を受け取る + // ここでElectronのウィンドウや他のコンポーネントにデータを渡す + // dataの最後が]で終わっていないとJSON.parseでエラーになる + // ]で終わっていない場合は、次のデータを受け取るまで待つ + if (data.toString().endsWith(']')) { + rawData += data + // console.log(rawData) + const jsoned = JSON.parse(rawData.toString()) applyProcessChange(jsoned) rawData = '' + } else { + rawData += data } }) + + taskbarHelper.stderr.on('data', (data) => { + console.error(`Error: ${data}`) + }) + + taskbarHelper.on('close', (code) => { + console.log(`Swift process exited with code ${code}`) + }) } catch (e) { console.log(e) } diff --git a/src/main/main.ts b/src/main/main.ts index 6f08eca..b5d110b 100644 --- a/src/main/main.ts +++ b/src/main/main.ts @@ -4,6 +4,7 @@ import { electronApp, optimizer } from '@electron-toolkit/utils' import { createAllWindows } from './funcs/windows' import { setEventHandlers } from './funcs/events' import { getAndSubmitProcesses } from './funcs/helper' +import { get } from 'http' // This method will be called when Electron has finished // initialization and is ready to create browser windows. @@ -32,10 +33,8 @@ app.whenReady().then(() => { setEventHandlers() }) -// 1秒ごとにプロセスを取得する -setInterval(() => { - getAndSubmitProcesses() -}, 1000) +// プロセスを取得するプロセスを起動 +getAndSubmitProcesses() // Quit when all windows are closed, except on macOS. There, it's common // for applications and their menu bar to stay active until the user quits From ede0a730f00dab92d40aaac948ffd16b864cb11d Mon Sep 17 00:00:00 2001 From: mesi Date: Wed, 10 Jan 2024 18:55:48 +0900 Subject: [PATCH 2/8] =?UTF-8?q?=E3=81=A1=E3=82=87=E3=81=A3=E3=81=A8?= =?UTF-8?q?=E3=81=97=E3=81=9F=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nativeSrc/helper.swift | 138 ++++++++++++++++++++++++++++ nativeSrc/taskbar.helper/main.swift | 7 +- resources/TaskbarHelper | Bin 101048 -> 101048 bytes src/main/main.ts | 1 - 4 files changed, 144 insertions(+), 2 deletions(-) diff --git a/nativeSrc/helper.swift b/nativeSrc/helper.swift index d3a03ec..9908f52 100644 --- a/nativeSrc/helper.swift +++ b/nativeSrc/helper.swift @@ -118,7 +118,145 @@ case "grant": // スクリーンキャプチャのアクセス要求 CGRequestScreenCaptureAccess() case "list": +// +// main.swift +// taskbar.helper +// +import AppKit +import ScreenCaptureKit +import Foundation +import ApplicationServices +import Cocoa +import CoreGraphics + +extension NSBitmapImageRep { + func png() -> Data? { + return representation(using: .png, properties: [:]) + } +} + +extension Data { + var bitmap: NSBitmapImageRep? { + return NSBitmapImageRep(data: self) + } +} + +extension NSImage { + func png() -> Data? { + return tiffRepresentation?.bitmap?.png() + } + + func resized(to size: Int) -> NSImage { + let newSize = CGSize(width: size, height: size) + + let image = NSImage(size: newSize) + image.lockFocus() + NSGraphicsContext.current?.imageInterpolation = .high + + draw( + in: CGRect(origin: .zero, size: newSize), + from: .zero, + operation: .copy, + fraction: 1 + ) + + image.unlockFocus() + return image + } +} + +func getIcon(pid: Int, size: Int) -> Data? { + return NSRunningApplication(processIdentifier: pid_t(pid))?.icon?.resized(to: size).png() +} + +func stringify(data: Data) -> String { + return "data:image/png;base64,\(data.base64EncodedString())" +} + +// ウィンドウ情報の一覧を取得してJSONデータとして返す関数 +func getWindowInfoListData() -> Data? { +// let option: CGWindowListOption = CGWindowListOption(arrayLiteral: .excludeDesktopElements, .optionOnScreenOnly) + let windowsListInfo = CGWindowListCopyWindowInfo([.optionAll], kCGNullWindowID) as! [[String: AnyObject]] + + var windowInfoList: [[String: Any]] = [] + + for windowInfo in windowsListInfo { + var formattedWindowInfo: [String: Any] = [:] + + for (key, value) in windowInfo { + formattedWindowInfo[key] = value + } + + let pid = windowInfo["kCGWindowOwnerPID"] as! Int + if let icon = getIcon(pid: pid, size: 32) { + formattedWindowInfo["appIcon"] = stringify(data: icon) + } + + windowInfoList.append(formattedWindowInfo) + } + + do { + let jsonData = try JSONSerialization.data(withJSONObject: windowInfoList, options: .prettyPrinted) + return jsonData + } catch { + print("Error serializing JSON: \(error)") + return nil + } +} + + +class WindowObserver { + static let shared = WindowObserver() + + private init() {} + + // ウィンドウの変更を監視 + func observeWindowChanges() { + let notificationCenter = NSWorkspace.shared.notificationCenter + notificationCenter.addObserver( + self, + selector: #selector(windowDidChange(notification:)), + name: NSWorkspace.didActivateApplicationNotification, + object: nil + ) + } + + @objc func windowDidChange(notification: NSNotification) { + if let data = getWindowInfoListData() { + let stdOut = FileHandle.standardOutput + stdOut.write(data) + } + } +} + + +let arguments = CommandLine.arguments +guard arguments.count > 1 else { + print("引数が必要です") + exit(0) +} +// 第1引数の値によって処理を分岐 +let option = arguments[1] +switch option { +case "grant": + // スクリーンキャプチャのアクセス要求 + CGRequestScreenCaptureAccess() +case "list": + if let data = getWindowInfoListData() { + let stdOut = FileHandle.standardOutput + stdOut.write(data) + } + + // ウィンドウの変更を監視 + WindowObserver.shared.observeWindowChanges() + RunLoop.main.run() +default: + print("default") +} + + + // ウィンドウの変更を監視 WindowObserver.shared.observeWindowChanges() RunLoop.main.run() default: diff --git a/nativeSrc/taskbar.helper/main.swift b/nativeSrc/taskbar.helper/main.swift index feee405..da18cda 100644 --- a/nativeSrc/taskbar.helper/main.swift +++ b/nativeSrc/taskbar.helper/main.swift @@ -91,6 +91,7 @@ class WindowObserver { private init() {} + // ウィンドウの変更を監視 func observeWindowChanges() { let notificationCenter = NSWorkspace.shared.notificationCenter notificationCenter.addObserver( @@ -122,10 +123,14 @@ case "grant": // スクリーンキャプチャのアクセス要求 CGRequestScreenCaptureAccess() case "list": + if let data = getWindowInfoListData() { + let stdOut = FileHandle.standardOutput + stdOut.write(data) + } + // ウィンドウの変更を監視 WindowObserver.shared.observeWindowChanges() RunLoop.main.run() default: print("default") } - diff --git a/resources/TaskbarHelper b/resources/TaskbarHelper index d3f82961bbff994fc7c10f23b56986ac9be21342..9cbc1968636660ce2c0556d2e0d3e6d4b0a6d8fa 100755 GIT binary patch delta 2116 zcmZ8ieN0nV6ucZ`P`ed;wY32EgC3nvrNXd`c5gSmP2_-_= zD)qC3GsQ}35#qN`C{5!4w-+T zohS|TVQX>ONRs#a7{r)z5aZS5!qU%kvLPGsHxMuD5-}}VPKh4boWN~&fIY-6UUSKE zLN4o|-X$cm7T&?qElM{;$sJ_BAWE({CCct@QEm>3vLzr&6%5KnM7fGVF2X8!8+Wk7 z($7BO1YmvyMyI7eK%0e$6rcy#A(IC>tbq8qp6iBKg9Z<<-Dr5t!DS#P_L-bNiyI;MQIIpn`jI5NJ31_WmZa71U~yn{=34xqM>qZ@9s^4H z3zV~4)38aqD;kZ8l5c-h@omZW>_<=bYC&%;&$T;Ynb3{@irX)1L74}EZs!oMjV~1= zpy(Q$-mO+>;NY7&3yb*`6n1DO3Us$oeq5krR0+YDfbOMsq8O8VcuWo<41RsW z>9u3w_EF8|^ba+gmu~>OC@dZv#4BL6!*K<4^sR>SFrg^*j69A;`Q+?#oJ8`pham#v zUc<#}u7iu=vH`{|x-R)1L5zh8QCo<^WX=a|+Th5s%DM!&q^wf;)4|#G*;u(fg6ueL z+EJ`7`51;$v|)Kjwucb*Y+3}sv}1_N(6*Y}r!|}Nk83tB-v+iE;yOhz>)=z6lyw;N zD>Z8t=3LA{B|}AFX_%eBIV4M%J5zJHGs2p3)pKj+(V1rvDZAk~n@876->@SusH3mF zM+GTcwXAKU^sst$-Oq9KYvpuhq0l&2`Ju9v-c>3$ofPb;%I}-(^s!QEQ-uw4)W2;P zVuS@L$`@PL36&{IWb2!Bp1QFrn;If;6~j(CAHl$Kj|&!7F+)AL%}a%XWHs5oHipht ztGB-;(1XfFN1<`Qo@?p`O#!wT4g~~q2gc}P-|CgvnqtAHSC`eypu(Ye)w-j3im+W! zuG9sT31^{jEK$j*&ot~#V{qLg_34JF69Kxnip70&co zJCfjsI6M`I_|Cv(mAKljxSg3V<=e5?B=RSlbKwFDRs%AJBZt{L&odrZDzwWSl1Y$UYSNQg0?2(60< z=~@IUTuog|)q9?WZJD}~r9{{Z&pCKT;Yl@-m>Lt&b()CqWAE}9T0YM|w2h|uTQX?a zU!6%^Lb%0$HIrt=hFiK5{C{N9jj=A5&DOgji<)C;m;ZzLG%J6ifRIeuN`g-9Z-2(i uns2PveDf3E)jKes_9wtty@v|utWtmRUb^k1ix&6?_t2)^V|(f1^#1@jI9h-J delta 1784 zcmYjSeQZ-z6u!S z?NsW?3N37MV^*^!#mk|AXH+7jP-CJWjB1NZW5sKs@(IjT=%q0+Us*LVZ-5ekvECM# z0ps^zF3Or}zEuPGcLZKFMnsv~!!YfEu1nL{ncAC(J`XQJPJhu6yn=v)uZQTv@?+(Yg^ z1Jx)mhYY_D3w|4iWipkcqoX`qI0IhW4#CGT%ZHy7ld1iLPA9}4NI{a$37`|2p)(1X zDWEe6bf$QhPAAlFKg%!522Y581moCjj}G z3uN`zLef7zmmiQC`<#hH!mH504zO@x+E&6r%z1ne!7?!-B0%s5Q0PrX)sd?8{u)86 zdyzs@6^}aJboyMfJ+L1PpB5=~M5a`a52kLSUNKfw>u8@_fF9~= zrT?Zp)`)E0qaU%4?*ykTsvNq)f$G}U*2}Q|v$Zf8lqqy17luf|TneCliy#3a3xpZ4 zwY&f#&Cpr)9St;r{sa$~3R)3~Q)T~Sy`rg3H9oSzC8M>odim7_LS&x;RsK--OZ6=^ zB9*M`lqoeLP*SQ;D(axLO2AA)X^|R{!MnO_*?(B~<@jFk)d&zx@YQ9kZCzph?L4u3 zyevwu@#BIzwMS*}e7+1O`1|?VnRQt>b6g-*5A5xk+(fVPl<$+}J0h^-tJ9XE{HFNe*d_MPp5+;Zb<*X!p0QZ9PcrUTT`JKUuFMmlc8hsB zO)8n7&R*+k!x>t% z>pe_74_M>A22%V$`)J?mY2?f|EZH+eDu35bdhTL)l(V=f9L1>u+l-VVzUF%=?|TL>1O4!ITDU*1B$g;Z4{(hJ{H@V!@w zk_xQI*kncI1lVs!UrfTaS;63991V6a#?J+}S+JXgy}|1ioMQ-k!*hbu7QETuaJb#0 zt8=i;fCIs|@^H@bUrP|OU>_QE>2E2rLXW3r;^LXuF?uNvUrYsAqlZiI{OTb$E(vDs W#ofUxop@>RLMJX6rF-#;?Ee8;=BK3q diff --git a/src/main/main.ts b/src/main/main.ts index b5d110b..dc0a90c 100644 --- a/src/main/main.ts +++ b/src/main/main.ts @@ -4,7 +4,6 @@ import { electronApp, optimizer } from '@electron-toolkit/utils' import { createAllWindows } from './funcs/windows' import { setEventHandlers } from './funcs/events' import { getAndSubmitProcesses } from './funcs/helper' -import { get } from 'http' // This method will be called when Electron has finished // initialization and is ready to create browser windows. From b78750d6a82ac9198fc75435ef0c377ed8314230 Mon Sep 17 00:00:00 2001 From: mesi Date: Wed, 10 Jan 2024 19:02:59 +0900 Subject: [PATCH 3/8] =?UTF-8?q?=E4=BD=99=E5=88=86=E3=81=AA=E5=A4=89?= =?UTF-8?q?=E6=9B=B4=E3=82=92=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nativeSrc/helper.swift | 133 ----------------------------------------- 1 file changed, 133 deletions(-) diff --git a/nativeSrc/helper.swift b/nativeSrc/helper.swift index 9908f52..c6e70c5 100644 --- a/nativeSrc/helper.swift +++ b/nativeSrc/helper.swift @@ -81,131 +81,6 @@ func getWindowInfoListData() -> Data? { } -class WindowObserver { - static let shared = WindowObserver() - - private init() {} - - func observeWindowChanges() { - let notificationCenter = NSWorkspace.shared.notificationCenter - notificationCenter.addObserver( - self, - selector: #selector(windowDidChange(notification:)), - name: NSWorkspace.didActivateApplicationNotification, - object: nil - ) - } - - @objc func windowDidChange(notification: NSNotification) { - if let data = getWindowInfoListData() { - let stdOut = FileHandle.standardOutput - stdOut.write(data) - } - } -} - - - -let arguments = CommandLine.arguments -guard arguments.count > 1 else { - print("引数が必要です") - exit(0) -} -// 第1引数の値によって処理を分岐 -let option = arguments[1] -switch option { -case "grant": - // スクリーンキャプチャのアクセス要求 - CGRequestScreenCaptureAccess() -case "list": -// -// main.swift -// taskbar.helper -// - -import AppKit -import ScreenCaptureKit -import Foundation -import ApplicationServices -import Cocoa -import CoreGraphics - -extension NSBitmapImageRep { - func png() -> Data? { - return representation(using: .png, properties: [:]) - } -} - -extension Data { - var bitmap: NSBitmapImageRep? { - return NSBitmapImageRep(data: self) - } -} - -extension NSImage { - func png() -> Data? { - return tiffRepresentation?.bitmap?.png() - } - - func resized(to size: Int) -> NSImage { - let newSize = CGSize(width: size, height: size) - - let image = NSImage(size: newSize) - image.lockFocus() - NSGraphicsContext.current?.imageInterpolation = .high - - draw( - in: CGRect(origin: .zero, size: newSize), - from: .zero, - operation: .copy, - fraction: 1 - ) - - image.unlockFocus() - return image - } -} - -func getIcon(pid: Int, size: Int) -> Data? { - return NSRunningApplication(processIdentifier: pid_t(pid))?.icon?.resized(to: size).png() -} - -func stringify(data: Data) -> String { - return "data:image/png;base64,\(data.base64EncodedString())" -} - -// ウィンドウ情報の一覧を取得してJSONデータとして返す関数 -func getWindowInfoListData() -> Data? { -// let option: CGWindowListOption = CGWindowListOption(arrayLiteral: .excludeDesktopElements, .optionOnScreenOnly) - let windowsListInfo = CGWindowListCopyWindowInfo([.optionAll], kCGNullWindowID) as! [[String: AnyObject]] - - var windowInfoList: [[String: Any]] = [] - - for windowInfo in windowsListInfo { - var formattedWindowInfo: [String: Any] = [:] - - for (key, value) in windowInfo { - formattedWindowInfo[key] = value - } - - let pid = windowInfo["kCGWindowOwnerPID"] as! Int - if let icon = getIcon(pid: pid, size: 32) { - formattedWindowInfo["appIcon"] = stringify(data: icon) - } - - windowInfoList.append(formattedWindowInfo) - } - - do { - let jsonData = try JSONSerialization.data(withJSONObject: windowInfoList, options: .prettyPrinted) - return jsonData - } catch { - print("Error serializing JSON: \(error)") - return nil - } -} - - class WindowObserver { static let shared = WindowObserver() @@ -254,11 +129,3 @@ case "list": default: print("default") } - - - // ウィンドウの変更を監視 - WindowObserver.shared.observeWindowChanges() - RunLoop.main.run() -default: - print("default") -} From c63946e0d6020f4152f484ee2be77850d23f3782 Mon Sep 17 00:00:00 2001 From: FruitRiin Date: Thu, 11 Jan 2024 15:03:12 +0900 Subject: [PATCH 4/8] =?UTF-8?q?nativeSrc=E3=81=AF=E3=83=93=E3=83=AB?= =?UTF-8?q?=E3=83=89=E3=81=AB=E3=81=B5=E3=81=8F=E3=82=81=E3=81=AA=E3=81=8F?= =?UTF-8?q?=E3=81=A6=E3=82=88=E3=81=84=E3=80=81=20helper.swift=E3=81=AF?= =?UTF-8?q?=E3=82=82=E3=81=86=E3=81=A4=E3=81=8B=E3=81=A3=E3=81=A6=E3=81=84?= =?UTF-8?q?=E3=81=AA=E3=81=84=E3=81=AE=E3=81=A7=E5=89=8A=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- electron-builder.yml | 1 + nativeSrc/helper.swift | 131 ----------------------------------------- 2 files changed, 1 insertion(+), 131 deletions(-) delete mode 100644 nativeSrc/helper.swift diff --git a/electron-builder.yml b/electron-builder.yml index 3270874..c55eb3a 100644 --- a/electron-builder.yml +++ b/electron-builder.yml @@ -5,6 +5,7 @@ directories: files: - '!**/.vscode/*' - '!src/*' + - '!nativeSrc/*' - '!electron.vite.config.{js,ts,mjs,cjs}' - '!{.eslintignore,.eslintrc.cjs,.prettierignore,.prettierrc.yaml,dev-app-update.yml,CHANGELOG.md,README.md}' - '!{.env,.env.*,.npmrc,pnpm-lock.yaml}' diff --git a/nativeSrc/helper.swift b/nativeSrc/helper.swift deleted file mode 100644 index c6e70c5..0000000 --- a/nativeSrc/helper.swift +++ /dev/null @@ -1,131 +0,0 @@ -import AppKit -import ScreenCaptureKit -import Foundation -import ApplicationServices -import Cocoa -import CoreGraphics - -extension NSBitmapImageRep { - func png() -> Data? { - return representation(using: .png, properties: [:]) - } -} - -extension Data { - var bitmap: NSBitmapImageRep? { - return NSBitmapImageRep(data: self) - } -} - -extension NSImage { - func png() -> Data? { - return tiffRepresentation?.bitmap?.png() - } - - func resized(to size: Int) -> NSImage { - let newSize = CGSize(width: size, height: size) - - let image = NSImage(size: newSize) - image.lockFocus() - NSGraphicsContext.current?.imageInterpolation = .high - - draw( - in: CGRect(origin: .zero, size: newSize), - from: .zero, - operation: .copy, - fraction: 1 - ) - - image.unlockFocus() - return image - } -} - -func getIcon(pid: Int, size: Int) -> Data? { - return NSRunningApplication(processIdentifier: pid_t(pid))?.icon?.resized(to: size).png() -} - -func stringify(data: Data) -> String { - return "data:image/png;base64,\(data.base64EncodedString())" -} - -// ウィンドウ情報の一覧を取得してJSONデータとして返す関数 -func getWindowInfoListData() -> Data? { -// let option: CGWindowListOption = CGWindowListOption(arrayLiteral: .excludeDesktopElements, .optionOnScreenOnly) - let windowsListInfo = CGWindowListCopyWindowInfo([.optionAll], kCGNullWindowID) as! [[String: AnyObject]] - - var windowInfoList: [[String: Any]] = [] - - for windowInfo in windowsListInfo { - var formattedWindowInfo: [String: Any] = [:] - - for (key, value) in windowInfo { - formattedWindowInfo[key] = value - } - - let pid = windowInfo["kCGWindowOwnerPID"] as! Int - if let icon = getIcon(pid: pid, size: 32) { - formattedWindowInfo["appIcon"] = stringify(data: icon) - } - - windowInfoList.append(formattedWindowInfo) - } - - do { - let jsonData = try JSONSerialization.data(withJSONObject: windowInfoList, options: .prettyPrinted) - return jsonData - } catch { - print("Error serializing JSON: \(error)") - return nil - } -} - - -class WindowObserver { - static let shared = WindowObserver() - - private init() {} - - // ウィンドウの変更を監視 - func observeWindowChanges() { - let notificationCenter = NSWorkspace.shared.notificationCenter - notificationCenter.addObserver( - self, - selector: #selector(windowDidChange(notification:)), - name: NSWorkspace.didActivateApplicationNotification, - object: nil - ) - } - - @objc func windowDidChange(notification: NSNotification) { - if let data = getWindowInfoListData() { - let stdOut = FileHandle.standardOutput - stdOut.write(data) - } - } -} - - -let arguments = CommandLine.arguments -guard arguments.count > 1 else { - print("引数が必要です") - exit(0) -} -// 第1引数の値によって処理を分岐 -let option = arguments[1] -switch option { -case "grant": - // スクリーンキャプチャのアクセス要求 - CGRequestScreenCaptureAccess() -case "list": - if let data = getWindowInfoListData() { - let stdOut = FileHandle.standardOutput - stdOut.write(data) - } - - // ウィンドウの変更を監視 - WindowObserver.shared.observeWindowChanges() - RunLoop.main.run() -default: - print("default") -} From 8c3b3c2525ee7748469292e24addfa2202cbd39b Mon Sep 17 00:00:00 2001 From: mesi Date: Fri, 12 Jan 2024 16:38:40 +0900 Subject: [PATCH 5/8] =?UTF-8?q?=E3=82=A2=E3=83=97=E3=83=AA=E8=B5=B7?= =?UTF-8?q?=E5=8B=95=E6=99=82=E3=81=AE=E3=82=A6=E3=82=A3=E3=83=B3=E3=83=89?= =?UTF-8?q?=E3=82=A6=E5=8F=96=E5=BE=97=E3=82=92=E3=81=A1=E3=82=87=E3=81=A3?= =?UTF-8?q?=E3=81=A8=E6=94=B9=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nativeSrc/taskbar.helper/main.swift | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/nativeSrc/taskbar.helper/main.swift b/nativeSrc/taskbar.helper/main.swift index da18cda..1036ddd 100644 --- a/nativeSrc/taskbar.helper/main.swift +++ b/nativeSrc/taskbar.helper/main.swift @@ -94,15 +94,29 @@ class WindowObserver { // ウィンドウの変更を監視 func observeWindowChanges() { let notificationCenter = NSWorkspace.shared.notificationCenter + + // アクティブになるイベントの監視 notificationCenter.addObserver( self, selector: #selector(windowDidChange(notification:)), name: NSWorkspace.didActivateApplicationNotification, object: nil ) + + // アプリケーションが起動されたイベントを監視 + // これがないと新規で起動したアプリケーションのウィンドウ情報が取得できない + notificationCenter.addObserver( + self, + selector: #selector(windowDidChange(notification:)), + name: NSWorkspace.didLaunchApplicationNotification, + object: nil + ) } @objc func windowDidChange(notification: NSNotification) { + // 0.1秒待機 + // アプリを起動した直後にウィンドウ情報を取得すると、ウィンドウ情報が取得できないため + usleep(100000) if let data = getWindowInfoListData() { let stdOut = FileHandle.standardOutput stdOut.write(data) @@ -123,10 +137,6 @@ case "grant": // スクリーンキャプチャのアクセス要求 CGRequestScreenCaptureAccess() case "list": - if let data = getWindowInfoListData() { - let stdOut = FileHandle.standardOutput - stdOut.write(data) - } // ウィンドウの変更を監視 WindowObserver.shared.observeWindowChanges() From 998faa63df1ab75c706c821b5f038e6859a14f33 Mon Sep 17 00:00:00 2001 From: mesi Date: Sat, 13 Jan 2024 00:19:17 +0900 Subject: [PATCH 6/8] =?UTF-8?q?usleep=E3=81=A7=E3=81=AF=E3=81=AA=E3=81=8FD?= =?UTF-8?q?ispachQueue=E3=82=92=E4=BD=BF=E3=81=86=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nativeSrc/taskbar.helper/main.swift | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/nativeSrc/taskbar.helper/main.swift b/nativeSrc/taskbar.helper/main.swift index 1036ddd..1b66aec 100644 --- a/nativeSrc/taskbar.helper/main.swift +++ b/nativeSrc/taskbar.helper/main.swift @@ -114,12 +114,20 @@ class WindowObserver { } @objc func windowDidChange(notification: NSNotification) { - // 0.1秒待機 - // アプリを起動した直後にウィンドウ情報を取得すると、ウィンドウ情報が取得できないため - usleep(100000) - if let data = getWindowInfoListData() { - let stdOut = FileHandle.standardOutput - stdOut.write(data) + // 非同期処理を開始 + DispatchQueue.global(qos: .background).async { + // わずかに遅延させて非同期処理を実行 + // これがないと開いたウィンドウの変更が反映されない + let delayTime = DispatchTime.now() + .milliseconds(100) + + DispatchQueue.global(qos: .background).asyncAfter(deadline: delayTime) { + DispatchQueue.main.async { + if let data = getWindowInfoListData() { + let stdOut = FileHandle.standardOutput + stdOut.write(data) + } + } + } } } } From 6e92f60172f8d4ce26c600ea37d5eb8a9a7780d6 Mon Sep 17 00:00:00 2001 From: mesi Date: Sun, 4 Aug 2024 08:20:47 +0900 Subject: [PATCH 7/8] =?UTF-8?q?helper=E3=81=AE=E3=83=AA=E3=83=95=E3=82=A1?= =?UTF-8?q?=E3=82=AF=E3=82=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/funcs/helper.ts | 44 ++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/src/main/funcs/helper.ts b/src/main/funcs/helper.ts index d9e9276..4276633 100644 --- a/src/main/funcs/helper.ts +++ b/src/main/funcs/helper.ts @@ -14,35 +14,39 @@ if (app.isPackaged) { export const macWindowProcesses: MacWindow[] = [] -export function getAndSubmitProcesses(): void { +export async function getAndSubmitProcesses(): Promise { let rawData = '' try { const taskbarHelper = spawn(binaryPath, ['list']) - taskbarHelper.stdout.on('data', (data) => { - // 画面の変更情報を受け取る - // ここでElectronのウィンドウや他のコンポーネントにデータを渡す - // dataの最後が]で終わっていないとJSON.parseでエラーになる - // ]で終わっていない場合は、次のデータを受け取るまで待つ - if (data.toString().endsWith(']')) { - rawData += data - // console.log(rawData) - const jsoned = JSON.parse(rawData.toString()) - applyProcessChange(jsoned) - rawData = '' - } else { - rawData += data + + for await (const chunk of taskbarHelper.stdout) { + rawData += chunk.toString() + if (rawData.endsWith(']')) { + console.log('Received data:', rawData) + try { + const jsoned = JSON.parse(rawData) + await applyProcessChange(jsoned) + rawData = '' + } catch (parseError) { + console.error('Failed to parse JSON:', parseError) + rawData = '' // Reset rawData to avoid accumulating invalid data + } } - }) + } taskbarHelper.stderr.on('data', (data) => { - console.error(`Error: ${data}`) + console.error(`TaskbarHelper error: ${data.toString()}`) }) - taskbarHelper.on('close', (code) => { - console.log(`Swift process exited with code ${code}`) + await new Promise((resolve) => { + taskbarHelper.on('close', (code) => { + console.log(`TaskbarHelper process exited with code ${code}`) + resolve() + }) }) - } catch (e) { - console.log(e) + } catch (error) { + console.error('Error in getAndSubmitProcesses:', error); + throw error // Re-throw the error for upper-level error handling } } From f95c4a5ab488835a46049d2ee563a65d4e5dff70 Mon Sep 17 00:00:00 2001 From: mesi Date: Sun, 4 Aug 2024 08:40:13 +0900 Subject: [PATCH 8/8] =?UTF-8?q?=E3=81=A1=E3=82=87=E3=81=A3=E3=81=A8?= =?UTF-8?q?=E3=81=97=E3=81=9F=E6=94=B9=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nativeSrc/taskbar.helper/main.swift | 3 +-- resources/TaskbarHelper | Bin 101048 -> 73056 bytes src/main/funcs/helper.ts | 1 - 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/nativeSrc/taskbar.helper/main.swift b/nativeSrc/taskbar.helper/main.swift index 1b66aec..e70a9b0 100644 --- a/nativeSrc/taskbar.helper/main.swift +++ b/nativeSrc/taskbar.helper/main.swift @@ -104,7 +104,6 @@ class WindowObserver { ) // アプリケーションが起動されたイベントを監視 - // これがないと新規で起動したアプリケーションのウィンドウ情報が取得できない notificationCenter.addObserver( self, selector: #selector(windowDidChange(notification:)), @@ -118,7 +117,7 @@ class WindowObserver { DispatchQueue.global(qos: .background).async { // わずかに遅延させて非同期処理を実行 // これがないと開いたウィンドウの変更が反映されない - let delayTime = DispatchTime.now() + .milliseconds(100) + let delayTime = DispatchTime.now() + .milliseconds(500) DispatchQueue.global(qos: .background).asyncAfter(deadline: delayTime) { DispatchQueue.main.async { diff --git a/resources/TaskbarHelper b/resources/TaskbarHelper index 9cbc1968636660ce2c0556d2e0d3e6d4b0a6d8fa..ea8c80c7ec7211d92a507a61273b2a08cda850c3 100755 GIT binary patch literal 73056 zcmeIb3t(JTwKsm!HY5c~r%Iu`2Pjgsw3DQ1(@G()X(o`gX{S#Frjulv4oxycWn)1cs3`TpB|a(z38YX-Rg@rHE%+cJ;K3s1Dq{7b`F?Bdb!N_-c_hK> z{r-fv(Gbs{oUX5G%aVkrfJha^FbvxP3zI@xYM+=KrWESQ&(2y zyw5dAUW%uo7X2hVgFl`%{0NeFeaKU)*esT*AW%~W|il74-y0O z9i_?*VFa7_&Ct3Nfc%HT?e(F!kyYNO*C}~>NjdltHvjTP-brHU@iYWlLx~7l&EMK2CRTYPo0YsG$ppe?c@k}tyg>bp4W1TXczdh2#h0SL z_g<^yeNp5QHvdxPg?9S4g^NAm&Y-W&x6K;ALmyJ|mWVt9n`N5sksnH)uQlA(nVP?E zT&LvaizmXCIHB|=ev%(eN^CeKy>E%UN5u5jK|>F^;o%dcC1gpds98 zmDeotdc_Cf3B@ni76=DY^Y-&Peb%_yzF{1Z&g0}8OOA=;|^!z=&DxLNLrrM6Sa@te0z#jjNAEn#W0Oi~iJ9uK!G4b3Pg&Hhl> zn%>Q5z(|x)ZwXuE8Jb|BBG2FAZSql8SmkZC$Rj*nK6Jo=l9PzH7PRC8F#jYrMn2?; zv5`)rkT z&vBEIS0|nbo8`ecoxDbG*vmew^14NyUE~qA$P*jIJf65HHn7U;6M2Uy(fAS0F0Ucb z(h_J@u2b`OGjvL#?1lqyvpfkVZtL;XhZ3WKRC(PZua^cT@-w%eR(Xl>Q%&{iYn+wU zs`hJIx0Jg+5duuVt)EexNv8ELX-v0%RA>fwE{yfmu`!wxM@`wg% zE5;V5;MU0NlVMIoZchb&89dXk^hr%yOmZy0(}3+DYEKuphuRi5`|B4sb~ZNx)9)M* z#lwB?%a?BWk1Ia?=t<9RzUm{-HWb3l4pJf^CHFMG=e#)eyczF@ow?wlzw0JBG=4Mx zDBKbd*-<*Cb(A3|auRVteB7O(u&-rN`69&2Uk^w4k-yC#!=L|(hh}Qp<=SH9cyW!t zzRla#xp-9@MnyXVZ977X%Ywmc{NY9043otheQhB>D*oaMu@kx5O>(uIA;|q?Hn|mn zHs7j1dn+meq@|Nzwm8{MnsBD)zKJHibi8n?+PuN-{)SNIPz)CcgMOr^tsp~BDm@Ex zvgj#$S}GPN>_vWwS-$oPP;&lJ3%01toO>!>rAht(%>H=TNTrc)NPkHJke=>j|I{Oz z!cFyG*52q37(&Ru3qIm{Y3vx!eA5MfQnwEXuW%d)1U*4OCw zX7Z1~vxQ&jZNq5D@C=t!K1xAxJ!qE!WemU49}0TI4cp@qtnnwmS^QV8p(<#q$0`2b zy9oj^hF|Lodz-WR=MhOp|7+@R^fiS2H~T6?NJ{t`wO|?juWk3Xg?E`sBl)NH7+kf( z)6Rr|jQ%&Y`nLtzTGnH5Tiu8$kss5JwvZ`7*7)Q%&d(N~&2>gX;EI0azeI74&y2>i zW@L#^zzF+&@I&qO(J!Ds0;f_ynEIco-~V?tu)!61wQPfH_ZvFWsC&z>IuyyB?FEaj z%x6~otJSdiSt;2Z=3$&``O(?22--PUwD^^+V6og+!5&A&h0)xvlluX3AI<$CSx21x zkoJAP?HbfiE+;Q5U8^+hF&cF}LjLsYO4;QhSLCOzNY_#Ql`;}g3!hzwT+#NUuBda+ z6{*!BZPXRrpu=udznnZpyN>R4{#1W}J;3LExVgjm(*rr}(~iFvwuAcJFww8V<@Kj> z*u$WH3lQ6Vgl=Lh2c3uwYKp|>M_0i#;@q!d)2DA_=Ny~;h)tiw<`~?JAU4Mkn-Tr9 zI_lKM>Ndm8 zUVR07UwH#o2lOXcGec1J7#1`12Ncx5F2<3rURb?DR(F$8w5xY)ZtYqm_63b0(hqaV zo#Ic|!En!0`T8@Q#GcJ#V`Hw!zOBS!D<7+b8fb2$GG*vWk}#m$9Ck&9T~XySTKt0= zSVh|AxgsaKBIWsrLYX0Xa}HTKyY+wJo1X0|hz>CQUNVXvWTR+TH;Pm>OC`&iNKcU5 z)UqB2`2MHrp8ftn>9<>d0yhPNuH8qd(3V|){gVj&$u$s+bh#o2?GVDr)sIvBBR%tA zfHW>37F+pn1=2VdJ_~*v*|(ko99c<`8enHp_KtX|)RLc?XznkrL3TyTjnwMx@D9N) z^8ICX?;z=seWhgdZ8C};WTWT+xr!&0?2*tCa@MHS%lB`pd-ndax@YM>!F_aqqxosv zN`2k)2BOkFikhMq3`T}@7o{LFR1<5_^(`wXaHsCtb7USVXB&QtW?yg{;-vgT2d|M1 zkQI{8FI}N&*FQP?f>M?b`yO;wAOSEt0SPZ)iBkW><&>bOIB}P7;+%sF zjh`7U*Rh@{sOS4!H3dn>$KEqG*QpoY2C{`7Yu-1ObN-O0WJt zCAwF&9~=6{=02`G>_uRJmu# zKeX3--dKSAN9?%Q-<%Nc*ws$anRpOjw_Z;2?Vem5ts+ zdEy-5GIfG=L5hhW-=RFchktu2fPsvW&8*t6zV1Ime(MhS2hc!LhkFQUeqvy>A$V=~0*tr%@`* zox`NmS`-B*ih{F`RsAq&9ltTxg-2Zpu>5HFJ#g0t_XpsPGx2!t>j&Txap{Eu_Cw3v zuE;%DqiRR_9#$}R?$y7ykR!I2Q!)#}_M)Yr#_agC;|(>@2k5pY@&MQF-@U{B zRSVHm2OBgYo59BB-hn2^6;)WHt(du3yM{ zVY5HXo}-%jSup# zus)*S#UZb}Vk7SN(mm>aw77??LJI0TnWMz)={l;R5nD2bW-Ryh^SNv4LV@89Z)~pZ zYEJY~eF#xNE>pfh*5@GWk?EA`i#RNC{bDtBO4QPDgRd7VPn5NkGRj;1e3h2Z5I|b? zsbs4(Apll>v{=WQ61-f0fG+*GY&e8V?I14By>#iN%YM4_&9*uB&bHN}P>#%=<8sWN zQ)-9N0T>+uw#}ZST6hGOI|s4V10|Fcs4QCiI)c$Xah!W05-JcpMy#8J!VD<$VESTGm-y=q~qZBP&UqfpE5wz5KfvjG}wE3n{9Jys7`J7(Ci?6n%pJS0o-{hPgVQ zY_uV06CNQ84EGQi+J)kBH`HmP*df`cb1Y$wF(lgmDsqX@By|`h0@>xK^4Cx=nf-6K1 zLP6*kivLzd0nR<2rY6x@c|1eG(1N=2eQ|LB=Uqk#zZa4D4r&vs`&0TCSdxlJd!OD+ z@j|K4&*L<3kJAr>V-R*oKaCB$4(M+!U}vytKcrtvB6c4k6;ak$^0=CaYZRHx@)Ls6de-8Xt>qombKk841_Urq$i)ctk^(5VQI}*Q=DU6 zeMW13CF6l!lami9qrE1hdCG`%506NXrspc7ttMB0ptQxfNi@X2q>M_GEABs@Rz?n! z$A@9W9l-0CVr~@qE|2J`a-KnMBSS-&L8;oRzeUBQ#|F>(Le}d5-Mb=BxMDpT6%F{R z!-{oufKb8P`f?W0Gml(RowT8jFo^VMFgw296`S=kSLG2`B!8&XPD5qaQ0Y93gS4Si z8wCxRKaY59q+t|ueF}c!jxrp7eQKV-SHe+*lV5F|!4i!NN zTSWJf1x;XLJtsK4pXh%oh})0NEr1VkJT`Ye198}+vrjHW2$SP?3WXVY3YBaGmYgB` zlr(Wn#Y|tysWAK>C8KYsIH|}yg~$xUv?lfdTi)lOIHKq<2x2kGh@PVE5s(w&KWro|y6?)Gl zlt(LXMceh*9Mo8~^zk%LnGPP{DD(t5?0p^VO|6;42G}q<_b|_DX04#ri9Lt&v06Zr zOTC2zC`bBhTybTsrN>1wjb?{Iq^A^S-0bY&rfDR(*+KW7rrG%vIgQQQ0+zPf`7C0< z%?=5NzPnYTw=+A)C^~l!tu?69-iv6L9m+#kdYe)uJBNv6)M#!m3mO;&(r0n8>Y;nc z-psOB2Cjx`KYuQ~qM?lqkSW5@!E`@`5gQ;8dhlWr&JB_NIHz5Opc>HEAEEJKY+#t2 z_E3Qva`sckpr=`d(Y(HkyrA<@ks|4+sYfYN9W0C+c*tj?mv}VI_wX}9u4u;6PV$pgruDo3b3$l(7MV7Ma8%1HEAS{TQMl6?Bid?Ps>HkD0R%!@UDza~G=s z*e-gI?DYFc`_TcjQOGAa!h5&sF7=40#0DLEb*k8LV8Q6GEmKE5x0s6TCwF0BI7H zgM>x)xxgN$0goD@-=Qq~I5+nlAQoGBK3dwx$c<`4_fpi*welF<4*w|CnpOkj^)Uw7?Y7FO+u3NRO(JRFr!h zFrwN-0Y(N&$U%@C#0EHuZp!`WfO2(^t-q;8G)f<`K1^Ccp&y`eebQ=p5r%-Q#jAfy z0rYIA06wbj>&O$<+{q|PM$v<86dfQ}@ugz2N8_}aoGn-B;QJ@lJ$rvh-Lv$ss{0_h zA28j2o$jR|-^mTs02kyBvzwj{xG(r#xESK=fKbGQ>^QK zbv!O~*mODvDc}kN!f2qSWkH>6OPPn&u1B#_39rU1aAG0s$22$(M zn1AYfUMD@3U>0>kzlbC5JRuWJ>wKvuf|-!>1bN4-=mbrulGnd?zY#<$g4s3o|1Q%i zw3Bk!wD?dAj5#Idy(>?_(ty5JN&O@T(LE%T4^U9&2Yb-Y% zJi+Z27OIb*Lt*b@9M`o5!LGQj^C>Q0pdLC&*X)ROJqlq;*K`M6lQexkAGM48b_yxERp1SV4`cjrI;#R_fX<7R#HkaG)|77@nal|;*wHm ze36O;8R>oMUg_;cn){2=Kc*~5wBFA5xqILlF&JS{xy9_5luq62*xWA?9&+}IlJ^Vm z6MlgCo~{Fl0)7BWr(O%G?A32Ro5J45IIi?V9F$SO2Z8iO7s6eV(%BI!ojL-gbnX(O zEM0$)NA9YZP)17W%3tg#dm^Qie5LeWeHllmhb)ogVK7lT-;$Ps2rHp`og7AEq#G1- zas;LCXT#zrF+SHHR{R3(gsQlzM(i|Yt(+3+`yH%}8zH*`hG3+95pdqxbw+_@% zM24KBqG)bOs4+**kayi@C(Ww(V$BkTnA#4?SSru@FD^({D2+bw;I}NvSD*6b>}4-s zN#|w1KF#b!o@{Vf+l{bpvUoHa6>7dVlOwdMXsmTTpT-SpxgNa=@lI_P=(H7q6fFaDB%+_`{6ntu4B26YNT&Gm>P19;1=QJMrbhr>&!#WK^T+| zIghYKEO+!Iwm1rJUA&ls#lRRA0T0{B9L*%H1J@qVOUPXmYP*VWq;Sx}Egm-EIh4Ma zQf{o`((*i(QB{PZq|`3BqAdv=MJy=m+b94UB1Us75jl#u?*w>djD6zL~}s9+sVA_M*B3Rm3O{*yFA= z9@W#7C%GSy$LrF7agnhbey>dDcL7E9t7O9)Q`kp|_&_@6k#(-cBbEor1$ULDv&qJgtf5IuJ`zQP%;ufznuEQbXd;vpQ6z=<3$%xeKMIjHs_%IJq4x)kmnA zH-Th<=ZpW$NX?A3q5H`J1BfR5;48f-7( zcvITC$dJ-XZC=!g*c+-6bso~Eb0*O4i`-vfiVk;16NAyXb-cajjjf0eJ<_uw#`;SX zkm+IaGr;=AzoGhtViDOeVp>MBt|`&O`4L1H?(jgL9_{D8{smH1;`#m{r4@ungP0;j zS9(hzzKg=-k^9{kOY7Se)SHQ`9cJ)Gs~LE9x&PFJpvb=M$7ir>6Ol{`5SxeW%j&Jhp^nNf{p0H{cN)B1|bbs(&2LRk45uNt4b| z{dsc0+_PdSr(wxb->;z22NkEbfMxd{1L9r>Yt8L4N_krL`%jQvBI z)8prXQ9M2Cxk9L2O6K&ugD^>4=JfP%yC&&5Oi|=wo=DG(M0yG+|0`!odOpaS$e5lj zq?`2VLBXt!{0&+hLH6jFm|+h0JFFN`M)6Vw9**kw(gG=V%IF=c+`!FYT2+u-}hrttEy`sgR z!FXG5AR)BviR(%3S%@bWG#&Xps!yX55amg>Bl-Cw5{!ahPa^CPkutxIV9ITt@6+>R zQkQD%7RA&(-U6Nr?43FROshuUAbwjWLp1uhW|I|hBta8`@biRe-$=IcW4g0Q7!ootA8$aCv=b1KhjGn zLz<)H7bQcI>Wa>~=VB;srt)EApf&#}{qQgOSEXcdz98AKIE=OHwIt^`stBC&#PfF1 zU&4Q0TK{v%|Hm@=$8Imms&kCA*PDfKBXB~0HSRk#za{-YLz8bxzrI&_LBiwpTg6wU zmBYMW`BCYWpz7m6QGrjRFO&bKH2%++g#Sy^`2RV2X;F0g@J;#ko7tRZbAIU`9nZfh z{`Z^xOZqD(;lC-3|C1-?U;hC4rHpSg3sHqm|2@?|E^U_lMtPO8di*r;Uzo=K7smJh zRm1-u=msq*Dh?_S7kb^F*1vu`s->ws>9<<&wH91w!8OU4+N&B=_v*+|G%)ChooHl+ zU6DUf9o7rr7&_nrtoF<5^HTg<>hCEjNkRR+2eUeTgOY}pD@*+yO6$K2ivs%GjQ&mK z>C8M+_)?xqsXD8MBTacm`{g_ly-L3v&y-Xf7s*$NrrMWU|KOgsV$qxytQNzr5?3^s zuVc`S(nQ8+jZ6}(_1B@=didjJ=a~MgYHf}|<+{Fz>Laa5biqMxCoP6xsG|BR{UE!f zL1EVkHX=8*%FU>_`M7d}a-`fCy_#ANq5P)wR!6%u9YZX0j3Zc4lg#dhjjqS!d34m1*cau7gJP zV@OZ+AKk^I7i|5x ziFVrGMl16u(yIDWiFnF&`0sYtpMUAv@5&j%sPwQ4+hSI7Gm9r)NFCL$IpqKNV7l@p z;pOIH>c-D1@GOwSMmO31K@KNYJOUNtk&8`#n)E}1**$+vxSET)JmQMXdIGa3T5UGw z2Z$cEE~+Xd^cl_Ff_V+4jZ^jh$H$QSdJB)l@JMRq1!#)&k8waq%uxvD$I(cEq@NoI zBY$nKXzm=dyh~ism3uKm&|l&9Zb+YR7WEozC|DAul51{nRDVeo1$F%Jn^%_Z9o_33 zTbL6*=1kBi2k%{a7Xkf z=_XkpcFym~g?IBf;cYa+tF?sp2iNTP51HC?F5l7I7qD0n&kxdH9SrpQW|69f^jDZm zR{RG!&89!pcWO(n8k>7DFFFMWd4-ful9#XK{RK^!{yUm*QZ=KJ`Ot*q-D8!v zm!~kronZQB%<=*gkjMJHC0{>-JgOEUNxz2u+uY1q^>0W1pnb`m1)XKA??-7#hwA&! zNk*pn{(VGtLiPP~3rJk1`rd#-s{b1YBwD?R+$ZJI>@k3Vu^LynqVy!vHLoUGYS&Rb&0aE&PfoZF|Nbi1pNG)FYVFvKi3iEg zA++OX&~3b_yoH*|?@%nv^U-+xtJ1}f#y-(iC!(cw*c^>#jMFrzt^Fj*itC?@*1p4e z64fH~kbU>d)RDL%&tk8b&9&zb*f#a7E9a|?--x@h9wYfVhn|lb`AO|(DJ1HRP!;zz343q^v!TGUD;zMMwh<$p2aM@3QJWR}-Cjy$hf9`)~=X$p_`Y{B$dW=YFZ zB&8cKoMn}_fM-R;Ibiz043p-5uVzm?{8Tk1NuITSBK>x%|E@h_+U$Gjolv~jQhNfO z?((A_ISUd07{$1SLWt&mm=b|m!|@AgaazxvMyBwKHz{u7`&!()(Eic5oVqf#imm^g z=S4J=MDtR8V)nP!)b+Wk7A+h)2hXH&M@`MT?}!?(?R^2xDFJQ(DTUE<|y17Cf7{TN>(eEkAn zzsT47`TAwPewD8e@bw|SKFrte@O6N%Lwx-nU#DZdHg*Y4CBik2uQU023ST$ybrWB= z@byD{y`HZgzIO68%GVfQ|Ans~=j*@n^>UP&u}c>7wScchd@bhdGQKY7>j(MjxcQ;#n)T-x|^@Gv@mwb0AC;H>tVh=$=C1lb%?LuQf>e0B1*im%mty@s!~d|kuWwS0B+)yG#_Umd$-H(&Sgbst~v=j)gG`c=L@ zz}E-)`gOiO$=C1lb%?LuXldnJJ>kE9Pb>*>3e!UhOXThg-ZsJ^^T*FKD)Ohq1YrPpHz) zL(%F-cR{~FoJVs6_c^$q1@qzG(feJ5H0?gje?8!drr=@|Pj^bd#S2xTn}eU_Rq`B5r%( z_EpHyA%}jHj(2d6ZcFRJ&}KJo$bRJ2v9a%h=f9?SsqhYPBiu(Ji;mneA8qw@_-QuD z{u=Hn?w3J!5oF&3`?s*Q){t=mGJXd;+G|5UicbgbDegan`CgOTnhP)vMS4y(xvjxH z>2*2WzJQ)=ChTv6UjG98HE<)GUickA*u#`i{3slo_@#%ye}P|v)11236z=ozTMfCN zF!_BR_jq!lJq+_-z^}opF`T*v_`hIY16_4ee89>7*T63Xe+B$9@N@BKeL47g;dcr@ z0=@<2?|@S}mgr++Il#@}F96>MPX50J{xI;jgg**S?v8-(27elSCiq+6h8}3kl8=Ub zh$H)m(0`go82 zrQN^YegCg_-=j6Pd0WF8ol~hb`nGx7n^Bq6k4`6C!KY3x4z@OZu-+T;EnTwEu!T;{ z^?h-R7l&i<$zg_z4XwV8AdZakH8ywJx6vtY_Evwhedl(6v(JvBMR6Wm5U2Uty{&dt z{k_fho4w8LK5Z33Znpc{+5&BcFmNYfJK7V!x7ojod|vHdvwDTyaI(W_P}b~h^|jSi zS852L8fOq|HY$nxi@`txm0@S%$D+1gChE{N@S7?oG-ksI0>q!2#wm=KtP;{u0OXb)+W zee2p=YXX6w)*7J0wHi363d9=CcUw~OHiV#kI*4lpj;^IP+V2akAZ4|}94&FPc&1>{ zP&fEOp~R70E3}X=%*}W;i4F#uRhqQ+)8|W_yE`{GS5;~1Hduw$?Q%4=ok_N2nuki`32JUPd)B5sj*6vx zd*IuU6@(})=hsxqayC$#=MI#tcDwl`>I#@$NM_T1jSwISr-p~zThP7c-8xFOaV+me z=JP|L!U9j?2(|Jye`Ax+Ti@)fgO5;Qv9p89Psk6G^3JlhHg9JQ64>T#u7ixXMb_&7 zBAIZ%TvZsiFI-1qtYY)Ayni?B3mmX2Yi{!4Bu94f3fmw}({4nwP^DEKBuR;1C5GN` z*o}b3urM-q-|xr9`ox;r5sVAt?FpJIR1SqH?c1Lj8>6woi11_2CuGlrtU2giNUja{ z*P)-I28MM8PQN+YN!qa3*PuNuftlH!9pQ2w{2TWRF*$6;#$CcWd=j6g)eEMR`3(Q- zVdjFHYb|!`vB zn?~m!bguxv66N$tZCdwLnr1K6rk$-#qlk?@O!&li4)aHt+X z8`Q73%70roRF9vn`~AW{Abg?l%Y`ozzF4?Jc!BUj;YGrcmH64Zi-l9&CA>^HwHt(& z3rChS{-E$Hgs&8iqJW=`iURXe;bp?hg;xl#6z&whN_drUm+)%gR|~&JxGL|q?pndC zg|88g_7^`}_gdlWgrifz&(^(O_y*w{g>MqRSva~M{A}IV3jdJs>x5q~{08A3;ai1! zh1Uyj5Z)+UwQjcVZGxMGZx`+texvXm!kdM+2yYc05FQkMlW;Zmv(Yir_}RL{!rO)4 zEPSW%4&j}`cM1Qn@Q(=Z68=%)w+QbRzFYXM!uJTjO?Z#++l7Bj_+H@=;dcm+3cpi$ zO!!^G|3!GO@Q(|>Tll{U|Ag>;!aphe--PcMevj}^3IDY4dxd{S_`eJPtnfbJpA-Ih z;a?DbpYSgV|B~?gg&z?9W#L~D{#D^$6aIkk{}BG5@P6T67yb?5-xU5W;Rl6(Tlho5 z4+(!*_#?uSyoY~_k<)B1$J$Q90(W4Qaj#h>JW z?cGM_yO}Gx5$i;(j#%7vu)ETP1GzJN_H%<|(?*4>^cuDay=dHE*|bvOq8F{BEg`xz z@8sMBn!20Pz?252G%%%sDGf|%U`hl3cQruc{sltjn2hlFuGego^}ZXnHX*Y^CC8@G zcYzXLqA|NjzF*E0IGc8+@au%{5FQhLQ2399|5W&^!v84zZ^CEtgwUp)D_nio4&ye# ze&IFZzFY8}!XFU+U5>7;`zhf=!jB67p78Gr|AFwQh5u0akC@xL=Yi88+6ZTcgkSeT za!{Hx56^qBBsE6pANjqA<52!+l5-3gOIvZdKL*BQsj(4oEO#--UL5A+?=_g?*u=Q| zXE-vpZi5dq#yH&g1?k3aAZ?J-W7D2x6I*u)kB@EIj|E%(U(NopSS1o{;CY~K5a~?g z@w=Vw_}90Pm`$U1UYQpX|KIz43i|n<$fy6k7*B;XrGY68Ole?B15+B9(!i7krZh06 zfhi6A|4{>WBzimO&~#0E4&3}u$Nb=e=3NdD{df*W8x^-Qdn#e-ak#t`zYv_)3jMcYX&_5dQZNVw-mG<)CT%C=xxwNGqt=z&?->dOfC0T(3`lw{bVig z4Ev+e?QyhqDB>AhOsLeQyc*D>pf^D` zoU7&i2z2&&T3!%@O~83LcP;NW&=C+eujV}ss<*@Mg<9U{L7%)x%e(htE$^=R(B~!4 zH)zTGw7lPf?z~jXo3;S@1U&^>a2dh@UHg75@9&@+J^=lI@EM-Gbqlq;AA@#XuI1qa zU3vcj8U~%QNXu&l-3dAXdKz^4V&os_4$wD1Z-8!dXn7+bR{`_^dJ|MxsO5bGWGjL@ z(9$K40XnoqoADHATCp~51!zC$ufV;RcdGA-vi&~{MAGVP?j zpnlNPpx=T{D$!1|muPw0L3e?UfKGrM%eB0XpaY;`(A%KG6)0PvuYjHh**}PMfDVC% zL2rUizCz0@2X%lx1?s;-n?87jHf1sDwS9E6druN4=TN?t6zDBh@aG7lCbi3Vw z!evTAId7w7XV@&M_VI-_dcqmx7A^I(Lu6~CpZ0rto0~h;*1=WS6q<-%XIVueib&eE zoVH@iuC$P&z*AOGP+{79xW1WPE>E*p4X%rlb|ret9d*k6GTFukwVU=CD!UTnJGYLq zg2MIw79a2O#J=7&1%)mCW^6R}QF1~QWq(6iMa!y96%>ce{%XBe`y$#{Ta6D}uWI%- zg*J}wpmiJxNeL+{t8K8jFIpRLZ*-I|byqZdL!mVVj(Tsyj;1!+)7)8B=uDFai;t8j zvVB28dus?=r0G+(jb#-#H*vn1G{LS?{4OE2ZY*jI>?}ihwE9uD7EcAifWNb>%u%Ln z%PKtp-tv-o=BV;lVr*!1Z&A7Ft~A#yXNJmAP>8ba=N-xTaJbYFcr9%4?(iX>uxmNc z=B{*g0B9{5DkRSdWsR_PQf*pSOiJRGaM6@3=N=TGezU zvaqP4JroYKs6jja2iDv!<=$(KZKnE%u7w+Lqvm-FOFZZ* z0@%XuD{tSn&DVxZKsNA;6TZfR;ufHm_Ld4SUQY0b(J?OdumG;0RcmUPKZdRYZ6q0!2wI(4_>#S*+JQW)5l z#bH6Hy*|t@!?ZSac63OaZIM=p5J?tyP#Iki(l4dUpB}P#|+mu$!a>@uagwSm!)f=64a#XXu zo})T>7PKoxuG6(6Ugqij`TkYka8W+`orp%yKj)07&M)}gh=q;q7> zyL9%c8IsnOIYZJpP(5C2gL^%7d2yw60+dytB{w?3-b_T?`WsUtG9iCF z77StX6liI|J9ahbAl5ARwl%fWYds-)SQDzCq}z0K$GETPx^mQe4cdZtkEY9A)LYeEHuc=a#rZ&1URjh?bXm%BZ*bOYM6 zqQZ@;FT!}qG|6whl zvbcg?R$F_m2gBA~GUUssKV_+Nq~>RtDL-jpM>2Dlk(ts&W_s<^kvX4ClHK+1N^}ieI znHNx)lnn(}@MQW}lGxAP!Q4@$* zL2Pvy(XF-LU!jn$b@Av!CWZzjz&dF(?kUUyV^%7fwZokqNu z$s#LyjPQ1PncTG4+KJb<<2p30nYg#0mso3V=tSCtx*#b96LMSUC_-~z-%#lYp**M- zUP?jHGHbhC0oL@_*$8?_!`f}VqTt>2o|d@n`gZt0q$#M?rRvN zTSSOE3AQ1_Jj+AApqCfk3LMBj%=l>$uCp`P=y7APph|)tE0GUOkhn|F7J_*;lqLvgLCPF9MI;u7($7m%LwClfn5lN@ z^447EpxT18Q{|KhO+Zq%$??02TGAZvT}j~S1*HY85Z8mwAXr7!Iv-YzLSc79o6pyZ zwlRzWd07J;Z9%q)lZ+|?!A^y$Tek%?&uVx46c8L|QHC{$n=z3#9g<-_*TU+&(nsff zOu|Er7f*|}XO!+Krz18nJ_~l@L?#8=aHa{KNdd2Rqw_)f!ahtU8g{TXjIk)WeMcy~ z!-JDWa4rX#gvg$ZJ=-ufNj7O}#{ncT;e^V=s=WC$`EY{$unTh~x4wYfyZL4MjlDYPHSgY;7&Z4T)(|7u#+l&xxc8;vuPvW zt|7jr{OSr%MNJu=P0U9nF^uiRq;cI#H!Z0zRXY%9kYb>2({FpG6JnZfae7H&)}t{ zHu^biFm{x7=Q!$09S&PCSXUPe+Uo3e_}T4*z)DLAm)h*MI{s6PoY?wu$O2Y~`WY8# z+W9%%+Q?kBuc$(>{S1Xef=dN|fibof34Ts+pWrhtCV84Ra;EZs9pi4zfsIGB|7f4s zcMJZJV8_|YeoWj4&sCT{l1lRW1vfD6*6Pkz_FoeFUcoPk{qP0Ke#IpcAHf~Kr$Js2 z@1szBz9jbaehT3~2_6=F$@`Rh4ezaxeHfVHL+`N=e!#$ZpM`MVrOLg1iNb!trOOn4 zPH=CD!gPi>>A!!u!kYw-3LX}$tx)#Wmnru+H-^KzR`8(UV}geTZ+yRs552EM@%sia z#lKJRF~Riy57}dj5XVQmLgD2fP9u-VqG^g+!*rr4A-7YvN z_(y{K1<%EXI&x1ZN|O5q!H!aeKQA~aSQp$ccxi$77raxjR;K(vEZ8PkLph@G?1G(w z9fEfYE*1Qrf`fwJQ>6TN3$777D7Z_oR<6Q-L2#+yb5L$6{Ged3;C{jXCfHG-{Qp$& zR>Aqj%74G$7Qv%}zarRPsr>&+aGhY=QssZE;8MZEg0~4Sbt?aN3+@&CfZ!3q#{}1{ zQtqdt9#Z-S1s4e(7F;RVUZvbO2rd4NE862gCH_h`=r&qq5&?uP~YfGK_>fSqSUMlz*!B+@=U2wVJw*{{foQrms!mkm$MeusT&kDXy@Sg>D2)+>Q zF8SXt_&ULTg8Kv?5d5&Lr;>M6a8U4zf*%z8vf!5p=XYyw3H}pfjo&ZM z0Xqln_G$Urv?bRoePi_%?zL%G2)1 zML$CRw+db>c)Q@;f`fv;Ex1GQD}w3ZHq!Sc=vPSIUcu`G_X@sU@P5JH7ThQJxZneV zFF-#+^7;k41s@U|6g(pMlfa~({3aEjuLyPsevI(xh-gsR|530@@cHOxPCFCt!QZ6p zHvpeM5B-tgTLd2v{8hpIf}aw6NbpYu4+?%;@KM3%px+_+!-5wHJ|=jD;1R*w1?z%8 zEO=D#LxN8T{;puHO{Hf`=!3zY}33do>W{h*a1>X&P z+B}RW1RqlN)9CyzDlfkf|09C`Dp(h6N54t&8x>q5_=Mnl1#2NC?{UHTf?pPF6MVs1 zC2yYKYXsW`-zj*3;BN_b2!2s;iQv3-N?xhp<$_&;ZxCE3I7;{|P1`KEU+`AJKN1`i z{CD8f&PI6@ywI(1ui%dewuM#t4;c1>UpMUAmHpiH;$QG4!M2-~{U;22!4DbsJC*&5 zhP~iv83s=?C#tF5)<9!N0a(2OQ%+ z561kv)`IV_;4djW%W(fo3;w$WUw{O_DDJ-0f`bWfokma6J5Wi~W8J{+0#* z#Dafm!LyMPbNVV3j;HS~3;uTtrteyq(|5>%pR(ZR6^^H8dVaEhn+2a~!53LDeR}}m z$LrTK7W_90#w&(N?&&)S=J-Et!GE@3`^m}foff>qg7;bQlNS6Z3qJjnWcfE(Fnu4y z9N+I)@Xsvxq*IgKFSOuV3l3WF?H2rP3&!i0N%6T9Ibn_;Udv3v?H0Vxg6Z==X8%98 z;L}e_w!hqheHQ!~3#MoWUqvf%GnFn!wH z?0&Ze&rtmyYLWVNS@4Jj|J{P?-kU7{s}}r@1ur{2+5Hv^zQ=;UZ^4((P4?el!3Qmv zzCdqI|7qy(&A7;dJr?{~3;v@8YZ#lG<;}9-^DVf{f?F*3BNlvz1>bAIgBJX(1^>4N z&&Jr-9N&c&++o3AvfvjjcqYb;duYkZ?PY?;MXkf>6^SrZ(P1z;dp#1 zEckkb;YIzr6pq*5&sy+zE$)A8!7p3zUl^Ch<)3mM$1jf0vtWn97zLPH9j1EUvIzb{+xu)^rY)bA~Y(F>{Hyz|*VdI|Mgt}t44^}9~tcz*0w7_GAU zeNJJts_J)GVKpIu(Q68$l~lh|F5vLc>Z#uq3Zqq1ziSmnE2Vxr8B><3UzY{`R666A11F8Ylf>wjp zfEqxJARlNOs0p+k!9C)j)UF+{SIW! zFB{C}fZhXoFUZKhGjM+vnp zv=Oukv>CJobS>yZpzA=_gKhwMKwCjxP(5h8GPeV6sNA)HjItNR{Y{`YPzV$TjaL@C z;O3*CTR`2Q-Jn}RdqCOBX%zN%f~dUS1^O3IFX-c-yFvd7`UGen=#!v-1MLUh1Nszb zGUfYAaDP9@DCb|n{Z~O>13e6S1oR!yqo4uMW1vCMFz8v(k3r9Yo(EAK_zCEzpktsH zKre!R2Kt|>3mSfQY*R|zR^;JrMcA!meo=Yqh!OREc)`>WBgPpd*ms(Ih>7K$aFn0K zSt(OTjI{fVBSy-3k7e?CQX`oPrbBYZ50af(N_15Tz+ z9|_{HB^(aMFW*W9n>u}D>hzK1vl-JI_K}!Q$w?+tr;qI9QyWwlKXv-Z|65NVv7Doj z{@j9bPEklXdcZh#V6}U^qZHB~z%c$f37O7&n848t@Aim=bjKj5<0i&GY2knIh?mqu z9n=XSX-<8SqeE7$Sy$oo)U3hTc=MG}1r9DLYj5=9sGO{B65n?i$DvUS#&IU4A#0em zzD7TeQOW40(l`)D9WaubIOAIgS!7HoUDa!@p+j>rMuZMip<{S5#X}v#;lJ63!}K#c zT8o2w!n-IxvN*!=Zgh+;o$ONGh|vvwx}Xh5AZ3)gxh`9n0eGD{5XjS*I3oyIHFY4+ z|FaGRqT>y>;rzU2|1SEPLE<2N)A5F7<*hO+DxTQ+d)vw!9@;Vxny~u!4h@Y*czOV-G-xpE0*H?-8TN3h_{{O;~5aXU6b6aR#=2Mi-N69=11-7 zQ#i)Kwy8E&|4Zxr;TA7Gt&=7!cawZOAf4qBI;aY#Nu~)s@o|U%zHh+I^(5o%&g^j+ z=4Qyv#=>xb&$3iU^qD*?A!}F#mR8_<2)lfVPhMEkz6{4}RW}4$i-P_}_LQnEcau6T zlh32Wmw+66hLq)4r;37Q!L|UMCzohfNioKekLsYrHI${67|3Tk{M$NNoA{82>0?ML zC*=sjREvV;|LA9nww0wTmW2gSOX3*38hCcxk0$)hb89@`|O-rArD{l@%2gFRN)*-`JR7;PLPCjOTvh z!SmDV@x(cn1ytRxSXQwe2d?=-ot<2g#`9QEjMMrW13Pi-pz>Hy*czY?8=nQCL-0{s zm#lW1j~}cs%E>qies_{PJGay~Y}=5oxTIwGKNiCOen>c6x1n}RgOR*yUz4ZW*IDja zzfRiVtluB`AOEh0(YcJb0pOnyu~F_X}q2@?yR81d|0ab{N2X*xxi)R@iT@^-9LRg zFL?k{*A~FoC)|0BuhX09M0IyXsH~#SkvKYh6(1eG$~Y$-M~81xss4xLr#>1%IPrt_ zap-eA!1%%J{}aJxe$HhIo=sgg;0G9Lw92G@)D?^Eik3!Vf30B3wPB1Y= zY=I(DKLlAdIVtftVCwIl@DRwI95#Pkfda;t*CrJAc&Ki-u~w5k*C+PXC&?Z9mPQjk zl$7{dk`b%4-H9bJ#-4VkRgn|%%$gvd2~DK+7FR%g_(^&&7Paw_I-KZ^uV;pR#sT@X z{>^8pCr&`0$XK$LKV_^w2Az3Ci@e7$XcK>$Iqi~~5@TLWk#AQQdy>DqwPw>AoUxDb zf69sw-rP!Y%7=0n6w(s_;~~njimFx30dIICzJ1w2-zMdcvSB%EeN)R##VX11)j1<| z1u!uL$hqeD9_6Mr+eJm`*T0l+W4Q}6fixdV4JoB09O26-qNhUoLa5xkC9Le9;E6{l zZIOs4Cf$UEVrP1tE1p^S3|u8Xvx84ZR8{d?2$?1)<_w`oPp+ty)ra__m#oi}Fx}0D znhKVtekPSZRTqzAm7xQ}Fjy5gGJSDbCCQV{s>HL=+vZ2@Sc47;$*7_asI@sf&70P6 zaZ+Igl~*H`Sm?YF-xToF2k;?WPax>Ur#0v?P$*1Kl)TLzM?xcw_~=GkpfjsmUgb`+ z!a{jiAOGS74vME0bHm6GY?zKeOE!wcIBjG4&%jadut|Lhn!g2~wfdtym!dq5+YDbU zL(4m{tws}#(Zs|hVx6{1#e3U?Cepe?`)5)>S|@Q)AxEY0QJ^{_G3k9IS6KJjtgaCS z3~Y=%n25k^!<6hXLt~QV>t%^pWG{9+ca0}1yW8Z{jpsIF8Oy33q{IllpL?_E= z1PNc~>1?SFH2WLuaD`uIFl--haBK3EG!!wL^Y|oKWinFYlRQ+}(|tYH>cP%LcTOqC{1CdW7H&2z_Z5sQS9L0mjD9L2Ze(mEujZ5(`8ASz3R=d@weX*G)S?N%C z+LDptF5do{Y}{@WKzq7HqmK>;8fdE1Xvb4++Ur9fvl=&BGuG07hRlhLMv{`2sdAf3 z1-&1U{&Wpo(3mB*RI`Mo5nQd5t{lq=6Lmc;!pkM3DNlB#@T(@fT9fVJW(ZDlenvv+s3 zt+hMx^> z{vf`#h!I1kZK&pzCG7uA+Q^p0o7!eO2@e!bVqfhfJR19TC*dWrwRRGoct7tX+`p^D zVCU^5f=IuycM<{up-DKV9O5l~lkmfvoG0Nvv7dPoo+x6x?R%1bcnf=~A6}VCw}M!^ zZ6fUixw6);MMY`MmZJJ3UJa-$TVLj(cL>JmDBx)lPODeD*O#rv_I(88T2twsSO}zn z?2RD}#cO2)N_Ll6x1fdb8fmFhH>=c&Rbok63^MGwRPGbY$?4aeSw_MUtvM^PYRy@K zNZYEWE)*-*#(FC)6ieF8Mi|j_RAuTUlGcuuIGHeIl0+-Q>@eMoiPl6+E5b^K%$Ynv z5y|r&kQyax z+yY7~mlKkRqA|f06+>Qz62^^RFbB6Yz}iO;^^7q1^#Bqvq{S)!##FZZ@JwYT8$2o^n2>#A-J zrl}oE@p){l%it+)I@^@7b>dZl;Dq*7i+j(eU8*`|&)|uc?%IahYbGL3tr$+sZN{QC z;lOy+aH4?~coL()@-{jufIePL%V&m!v_(04l^e&iT06`tKUrhxqYxkUj}ukPxIgYX Ndl^t`h=?Tp{tvYq3E=<$ literal 101048 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

=Lr%Xmxq`x%8Y^g;5%N**m6 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 diff --git a/src/main/funcs/helper.ts b/src/main/funcs/helper.ts index 4276633..6353e70 100644 --- a/src/main/funcs/helper.ts +++ b/src/main/funcs/helper.ts @@ -22,7 +22,6 @@ export async function getAndSubmitProcesses(): Promise { for await (const chunk of taskbarHelper.stdout) { rawData += chunk.toString() if (rawData.endsWith(']')) { - console.log('Received data:', rawData) try { const jsoned = JSON.parse(rawData) await applyProcessChange(jsoned)